Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

switchowanie w old menu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 Mixtaz

    Zaawansowany

  • Użytkownik

Reputacja: 21
Życzliwy

  • Postów:76
  • Steam:steam
  • Imię:Jędrzej
  • Lokalizacja:%s
Offline

Napisano 02.01.2018 10:32

Nie mam pojęcia co robię źle - próbuję wykonać oddzielny podział menu dla osobnych drużyn za pomocą starego menu i mimo że menu displayuje się dobrze, to niezależnie jakie menu wybiorę, to każde sprowadza się do pierwszego handlera, mimo że w plugin_init zostało ustanowione inaczej (zarejestrowany handler dla drugiego menu.)

#include <amxmodx>
#include <cstrike>

#define PLUGIN "Stare Menu"
#define VERSION "0.1"
#define AUTHOR "Sebul"

#define TESTMENU_KEYS MENU_KEY_1|MENU_KEY_2|MENU_KEY_0 // tworzymy stala z trzema klawiszami: 1, 2 i 0

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);

	register_clcmd("say /test", "wybier");

	register_menucmd(register_menuid("Testowe Menu"), TESTMENU_KEYS, "staremenuhandle"); // rejestrujemy menu o nazwie "Testowe Menu" i wykorzystujemy TESTMENU_KEYS
	register_menucmd(register_menuid("Testowe Menu2"), TESTMENU_KEYS, "staremenuhandle2");
}

public wybier(id)
{
    switch(cs_get_user_team(id))
    {
        case CS_TEAM_T : staremenu(id)
        case CS_TEAM_CT : staremenu2(id)
    }
}
public staremenu(id) {
	show_menu(id, TESTMENU_KEYS, "\yWidzisz menu?^n^n\w1. Tak^t2. Nie^n^n0. Wyjdz", -1, "Testowe Menu"); // pokazujemy menu, dostepne tylko trzy klawisze

	return PLUGIN_HANDLED;
}

public staremenuhandle(id, key) { // funkcja posiada dwa parametry, id gracza oraz uzyty klawisz
	switch(key) { // uzywamy switcha, pamietamy, ze klawisz 1 ma wartosc 0, a klawisz 2 - 1, itd.
		case 0: {
			client_print(id, print_chat, "Wybrales tak.");
		}
		case 1: {
			client_print(id, print_chat, "Wybrales nie.");
		}
		// nie trzeba robic "case 9:", bo i tak wykona sie tylko return na samym dole
	}

	return PLUGIN_HANDLED; // menu sie zamknie
}
public staremenu2(id) {
	show_menu(id, TESTMENU_KEYS, "\yWidzisz menu?^n^n\w1. NO^t2. XDDDDD^n^n0. Wyjdz", -1, "Testowe Menu2"); // pokazujemy menu, dostepne tylko trzy klawisze

	return PLUGIN_HANDLED;
}

public staremenuhandle2(id, key) { // funkcja posiada dwa parametry, id gracza oraz uzyty klawisz
	switch(key) { // uzywamy switcha, pamietamy, ze klawisz 1 ma wartosc 0, a klawisz 2 - 1, itd.
		case 0: {
			client_print(id, print_chat, "Wybrales takreeeXdeee.");
		}
		case 1: {
			client_print(id, print_chat, "Wybrales nieareeaaar.");
		}
		// nie trzeba robic "case 9:", bo i tak wykona sie tylko return na samym dole
	}

	return PLUGIN_HANDLED; // menu sie zamknie
}

Oto kod na którym chciałem bazować.

 

Proszę darować sobie komentarze o składnie- wszystko wykonane tylko dla klarowności testu + cstrike.inc również jest mi potrzebny, bo wszystko stanowi element większego pluginu.

 

PS: wiem że można to z łatwością zrobić w nowym stylu menu, ale jestem zmuszony używać starego menu.


  • +
  • -
  • 0

:nuke:  Mój serwer Zombie Biohazard/Deathmatch  :nuke:
:cwaniak:


#2 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 02.01.2018 11:28

Robisz wszystko dobrze.

Problem tkwi w zbugowanym natywie rejestrowania menusów.

Po drobnej modyfikacji kodu, możesz zauważyć, że funkcje:

register_menuid("Testowe Menu");
register_menuid("Testowe Menu2");

zwrócą ten sam identyfikator menu. Wystarczy, że zmienisz nazwy menu'sów tak, aby się w sobie nie zawierały (w powyższym przypadku tytuł menu "Testowe Menu" zawiera się w tytule drugiego menu).

 

Wszystko wyjaśniają źródła amxx'a ( funkcja strstr() ):

Spoiler

Użytkownik _McHappy edytował ten post 02.01.2018 11:48

  • +
  • -
  • 1

#3 Mixtaz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 21
Życzliwy

  • Postów:76
  • Steam:steam
  • Imię:Jędrzej
  • Lokalizacja:%s
Offline

Napisano 02.01.2018 13:26

AMXX nigdy nie przestanie Mnie zaskakiwać. Zawsze jakieś błędy, jak nie z set_lightem (naprawione w jakimś snapshocie 1.8.3 dev 5000+) to konstrukcją menu.

 

Zmieniłem te nazwy na kompletnie inne i podziałało, zarówno na testowym pluginie jak I bazowym.

 

Dziękuję za szybką pomoc, pozdrawiam.

 

 


  • +
  • -
  • 0

:nuke:  Mój serwer Zombie Biohazard/Deathmatch  :nuke:
:cwaniak:





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych