Problem z moim pluginem (zbugowane menu)
Najlepsza odpowiedź Robiin 06.01.2017 03:40
Oczywiście, że tak będzie. Case'y w publicu menu powinny zaczynać się od 0, nie 1. W Twoim menu tak się zaczynały, co powodowało, że instrukcja, którą chciałeś dla "VIP" wykonywała się dla "Pomoc" itd.
Nie rozumiesz? Masz przykład:
Poprawiona, gotowa wersja.
Przejdź do postu
Bistix
04.01.2017
#include <amxmodx> #include <amxmisc> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Patryk" public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /menu", "menu") register_clcmd("say /m", "menu") register_logevent("Poczatek_Rundy", 2, "1=Round_Start") } public Poczatek_Rundy(id) { set_hudmessage(255, 255,255, -1.0, 300) show_hudmessage(id, "<[Menu]> wpisz /menu aby zobaczyć jakie komendy posiada serwer!") } public menu(id) { new menu = menu_create("Menu Serwera", "menu_handler") menu_additem(menu, "Regulamin", "", 0) menu_additem(menu, "Vip", "", 0) menu_additem(menu, "Pomoc", "", 0) menu_setprop(menu, MPROP_EXIT, MEXIT_ALL) menu_display(id, menu, 0) } public menu_handler(id, menu, item) { if(item == MENU_EXIT) { menu_cancel(id); return PLUGIN_HANDLED; } switch(item) { case 1:{ console_cmd(id, "say /regulamin"); menu_destroy(menu) return PLUGIN_HANDLED } case 2:{ console_cmd(id, "say /vip"); menu_destroy(menu) return PLUGIN_HANDLED } case 3:{ console_cmd(id, "say /pomoc"); menu_destroy(menu) return PLUGIN_HANDLED } } menu_destroy(menu) return PLUGIN_HANDLED } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3082\\ f0\\ fs16 \n\\ par } */
Użytkownik Bistix edytował ten post 04.01.2017 19:39
Robiin
04.01.2017
Zła tabulacja.
Kiedy
console_cmd(id, "say /vip"); menu_destroy(menu) return PLUGIN_HANDLED
to plugin wpisuje u gracza (mimo, że lepiej użyć client_cmd) /vip, otwiera mu menu (tak przypuszczam) po czym Ty zamykasz mu to menu poprzez
menu_destroy(menu)
Więc menu otwiera się, i natychmiastowo zamyka.
returna nie musisz/nie powinieneś tam używać.
register_logevent("Poczatek_Rundy", 2, "1=Round_Start") public Poczatek_Rundy(id)
Ten event nie jest na ID. https://amxx.pl/topic/1680-eventy/
set_hudmessage(255, 255,255, -1.0, 300) show_hudmessage(id, "<[Menu]> wpisz /menu aby zobaczyć jakie komendy posiada serwer!")
Zła składnia. Poczytaj: https://amxx.pl/dokumentacja
Aby wysłać wiadomość do wszystkich graczy, wpisujesz na miejscu indexu 0, czyli serwer (czyt. wiadomość pokaże się każdemu z graczy na HUDzie.)
Następnym razem przy tworzeniu menu użyj:
https://amxx.pl/topi...menu-generator/
To mój ostatni raz kiedy pomogę Ci z tym pluginem. Chyba 3 raz Ci odpowiadam dokładnie tym samym. Używając menu, i przy tym myśląc/czytając instrukcję z tematu będziesz miał gwarantowane, że menu stworzy się dobrze. Wtedy zostanie Ci tylko zmiana instrukcji case'a w handlerze menu.
Załączone pliki
Master Yoga
04.01.2017
to plugin wpisuje u gracza (mimo, że lepiej użyć client_cmd) /vip, otwiera mu menu (tak przypuszczam) po czym Ty zamykasz mu to menu poprzez
Jesteś w błędzie. Drugi parametr funkcji menu_handler to id (tutaj: jest ono unikalne), "id menu" które zostało stworzone po wywołaniu odpowiedniej funkcji, więc niszczy odpowiednie menu
returna nie musisz/nie powinieneś tam używać.
A dlaczego by to ? Jakieś przeciwwskazania ?
Zła składnia.
A dokładniej, co masz na myśli ?
Robiin
04.01.2017
to plugin wpisuje u gracza (mimo, że lepiej użyć client_cmd) /vip, otwiera mu menu (tak przypuszczam) po czym Ty zamykasz mu to menu poprzezJesteś w błędzie. Drugi parametr funkcji menu_handler to id (tutaj: jest ono unikalne), "id menu" które zostało stworzone po wywołaniu odpowiedniej funkcji, więc niszczy odpowiednie menu
returna nie musisz/nie powinieneś tam używać.
A dlaczego by to ? Jakieś przeciwwskazania ?
Zła składnia.A dokładniej, co masz na myśli ?
Napisałem o jego złym drugim parametrze handle, bo w poprzednich tematach wpisywał go źle (nie pamiętam teraz dokładnie), więc po prostu uświadomiłem Mu, że warto przed użyciem spojrzeć na dokumentacji, co argumentowałem niżej.
Returny nie są tam potrzebne w każdym z tych case'ów. Myślę, że pokazywanie komendy na czacie (a myślę, że to miało to na celu) nie przeszkadza tak bardzo.
Zła składnia set_hudmessage - to samo co w przykladzie pierwszym, tyle że przy kompilowaniu wyrzuci tam błąd ponieważ
set_hudmessage(255, 255,255, -1.0, 300)
Ma nieokreślony czas pokazywania wiadomości HUD.
Przy okazji odnosząc się znów do dokumentacji.
Master Yoga
04.01.2017
PAWN to dość specyficzny język.
Dla porównania:
W językach takich jak: ( np.: ) C++, JavaScript itd każdy case warunku wielokrotnego wyboru ( switch ) powinien zostać zakończony instrukcją break. Brak tej instrukcji spowoduje wykonanie się dalszych case'ów od momentu wystąpienia tego, który spełnił warunek. W PAWN'ie się z tym nie spotkasz, choć nie znaczy to, że nie można używać tam instrukcji return.
Składnia jest jak najbardziej poprawna. A wiesz dlaczego ? Bo reszta parametrów posiada argumenty domniemane. ( poczytaj sobie o tym )
Użytkownik Master Yoga edytował ten post 04.01.2017 23:56
Robiin
05.01.2017
Poczytam.
Autor z tego co widzimy też się dopiero uczy, więc chyba lepiej jest mu nie mieszać, bo i tak jest zapewne już wystarczająco skołowany o czym tutaj pisaliśmy.
Wydaje mi się, że lepiej będzie, jeżeli napiszę Mu w ten sposób, i odniosę się do dokumentacji, i następnym razem z niej skorzysta.
Bistix
05.01.2017
Zła tabulacja.
Kiedy
console_cmd(id, "say /vip"); menu_destroy(menu) return PLUGIN_HANDLEDto plugin wpisuje u gracza (mimo, że lepiej użyć client_cmd) /vip, otwiera mu menu (tak przypuszczam) po czym Ty zamykasz mu to menu poprzez
menu_destroy(menu)Więc menu otwiera się, i natychmiastowo zamyka.
returna nie musisz/nie powinieneś tam używać.
register_logevent("Poczatek_Rundy", 2, "1=Round_Start") public Poczatek_Rundy(id)Ten event nie jest na ID. https://amxx.pl/topic/1680-eventy/
set_hudmessage(255, 255,255, -1.0, 300) show_hudmessage(id, "<[Menu]> wpisz /menu aby zobaczyć jakie komendy posiada serwer!")Zła składnia. Poczytaj: https://amxx.pl/dokumentacja
Aby wysłać wiadomość do wszystkich graczy, wpisujesz na miejscu indexu 0, czyli serwer (czyt. wiadomość pokaże się każdemu z graczy na HUDzie.)
Następnym razem przy tworzeniu menu użyj:
https://amxx.pl/topi...menu-generator/
To mój ostatni raz kiedy pomogę Ci z tym pluginem. Chyba 3 raz Ci odpowiadam dokładnie tym samym. Używając menu, i przy tym myśląc/czytając instrukcję z tematu będziesz miał gwarantowane, że menu stworzy się dobrze. Wtedy zostanie Ci tylko zmiana instrukcji case'a w handlerze menu.
nic to nie pomogło ten sam błąd
Robiin
06.01.2017
Jaki błąd? Masz w ogóle osobne pluginy z komendami, które podałeś?
Użyj kodu, który Ci wstawiłem.
Bistix
06.01.2017
Spoiler
Jaki błąd? Masz w ogóle osobne pluginy z komendami, które podałeś?
Użyj kodu, który Ci wstawiłem.
tak mam /vip, /regulamin, /pomoc i mam ten sam blad co napisalem gdy wpisze /menu i wybiore cos to nic gdy wpisze /m i wybiore np vip a nad nim jest regulamin to mi sie otwiera regulamin jak wezme pomoc a nad pomoca jest vip to otwiera sie motd vipa nic sie nie zmienilo jak poprawiles
Najlepsza odpowiedź
Robiin
06.01.2017
Oczywiście, że tak będzie. Case'y w publicu menu powinny zaczynać się od 0, nie 1. W Twoim menu tak się zaczynały, co powodowało, że instrukcja, którą chciałeś dla "VIP" wykonywała się dla "Pomoc" itd.
Nie rozumiesz? Masz przykład:
Poprawiona, gotowa wersja.