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

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:

Spoiler

 

 

Poprawiona, gotowa wersja.

Przejdź do postu


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

#1 Bistix

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:11
Offline

Napisano 04.01.2017 19:38

Witam mam problem z menu gdy wpisze /menu i wybierze regulamin albo vip albo pomoc nic sie nie wyswietla gdy wpisze /m to gdy wybiore regulamin to nic gdy wybiore vip to pokazuje regulamin gdy wybiore pomoc to pokazuje vipa  

#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 }
*/
 

 
Proszę napisać mój błąd i go wyjaśnić
piszę już 3 raz z tym menu bo jestem w tym zielony i nie ogarniam jaki błąd popełniłem

Użytkownik Bistix edytował ten post 04.01.2017 19:39

  • +
  • -
  • 0

#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 106
Super Hero

  • Postów:2 049
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 04.01.2017 20:33

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


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 04.01.2017 21:26


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 ?


  • +
  • -
  • 0

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#4 Robiin

    Godlike

  • Support Team

Reputacja: 1 106
Super Hero

  • Postów:2 049
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 04.01.2017 23:10

 


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 ?

 

 

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.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#5 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 04.01.2017 23:55

Spoiler

 

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 )


Master Yoga (04.01.2017 23:59):
argument domniemany / argument domyślny...
Różnie to ludzie nazywają. Obie formy są poprawne.

Użytkownik Master Yoga edytował ten post 04.01.2017 23:56

  • +
  • -
  • 1

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#6 Robiin

    Godlike

  • Support Team

Reputacja: 1 106
Super Hero

  • Postów:2 049
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 05.01.2017 00:07

Spoiler

 

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.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#7 Bistix

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:11
Offline

Napisano 05.01.2017 23:55

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.

nic to nie pomogło ten sam błąd


  • +
  • -
  • 0

#8 Robiin

    Godlike

  • Support Team

Reputacja: 1 106
Super Hero

  • Postów:2 049
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 06.01.2017 00:54

Spoiler

 

Jaki błąd? Masz w ogóle osobne pluginy z komendami, które podałeś?

Użyj kodu, który Ci wstawiłem.


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#9 Bistix

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:11
Offline

Napisano 06.01.2017 01:40

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


  • +
  • -
  • 0

#10 Robiin

    Godlike

  • Support Team

Reputacja: 1 106
Super Hero

  • Postów:2 049
  • Imię:Robert
  • Lokalizacja:Wrocław
Online

Napisano 06.01.2017 03:40   Najlepsza odpowiedź

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:

Spoiler

 

 

Poprawiona, gotowa wersja.

Załączone pliki


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#11 Bistix

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:11
Offline

Napisano 11.01.2017 17:28

Dobra dzięki do zamkniecia


  • +
  • -
  • 0




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

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