←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] menu_create zawsze zwraca 0 (...

Zablokowany

  • +
  • -
Ossal - zdjęcie Ossal 08.05.2015

W dokumentacji czytamy, że menu_create Tworzy menu oraz zwraca jego uchwyt.

Ostatnio kombinowałem z menusami i doszedłem do wniosku, ze menu_create zawsze zwraca 0, czyli nie istnieje coś takiego jak uchwyt menu.
Wyszło to jak chciałem zrobić sobie 3 menu globalne (takie, które tworzy się tylko raz i nie ma menu_destroy(menu) w handlerze)
Jak się okazało próba wyświetlenia menu drugiego skutkowało wyświetleniem pierwszego, zdziwiłem się i poprosiłem plugin o wypisanie mi wartości wszystkich 3 "uchwytów" menu, okazało się, że są to trzy zera. Czyli menu globalne może być jedno i nie może być innych menu w tym pluginie, bo próba wyświetlenia jakiegokolwiek menu wyświetli pierwsze utworzone menu globalne.
Wniosek z tego taki, że nie potrzebne nam "uchwyt", który zawsze jest zerem, a funkcja budująca i wyświetlająca zamiast:

new menu=menu_create("tytul menu","handler_menu")
menu_additem(menu,"nazwa itemka")
menu_additem(menu,"nazwa itemka 2)
//i nie wiadomo ile tych itemów. itp + na przykład
menu_setprop(menu, MPROP_EXITNAME,"wyjdz")
menu_display(id,menu)

Mogłaby wyglądać tak:

menu_create("tytul menu","handler_menu")
menu_additem(0,"nazwa itemka")
menu_additem(0,"nazwa itemka 2)
//i nie wiadomo ile tych itemów. itp + na przykład
menu_setprop(0, MPROP_EXITNAME,"wyjdz")
menu_display(id,0)

Co oszczędza  trochę pisania i odwoływania się do zmiennej (przy rozbudowanym menu) nawet ze 20 razy.

Tak samo w handlerze

handler_menu(id,menu,item)

zmienna menu zawiera 0, więc zamiast menu_destroy(menu) może być menu_destroy(0)
Ja jestem nieco zdumiony, że to działa, co Wy na to?
Jeżeli to kompletna bzdura, to wyjaśnijcie czemu, a jeżeli nie to proszę o przerzucenie do "gotowe funkcje" i usunięcie tego zdania, pozdrawiam :)
 

 


Użytkownik Ossal edytował ten post 08.05.2015 17:30
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 08.05.2015

Pokaż te swoje globalne menu (nie wiem jak w liczbie mnogiej ma być), bo chyba musisz robić coś nie tak, bo sam wielokrotnie takich menu robiłem bardzo wiele i nigdy z takim czymś się nie spotkałem.
Odpowiedz

  • +
  • -
Ossal - zdjęcie Ossal 08.05.2015

Też nie mam pojęcia jaka jest liczba mnoga od "menu", a tych menu Ci tu nie wkleję bo już je zamieniłem na lokalne :P

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 09.05.2015

Pierwsze menu ma ID równe 0, więc nie dziwi to, że możesz wywołać menu bez podawania ID. Każde następne menu jednak ma ID większe, dlatego wywołuje Ci się tylko 1 "globalne" menu.

Wywołaj sobie kilka menu_create pod rząd i zobacz jakie wartości zwracają (po prostu wypisz je sobie np w czacie).
Odpowiedz

  • +
  • -
Ossal - zdjęcie Ossal 09.05.2015

Tyle napisałem i przeglądarka off... Nie chce mi się od nowa.
Podsumowując oboje panowie macie rację, wysunąłem zbyt pochopne wnioski. Co nie zmienia faktu, że jak mamy jedno menu w pluginie i użyjemy menu_destroy, to możemy metody zerowej używać :)
 Pozdrawiam, dzięki, close :)

PS zajrzyjcie w nierozwiązany mój temat w pluginach :P


Użytkownik Ossal edytował ten post 09.05.2015 11:58
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 09.05.2015

użyjemy menu_destroy, to możemy metody zerowej używać :)


Nie, nie możemy. ID menu nie są per plugin więc jeśli jakikolwiek inny plugin przed naszym menu zarejestruje (wbudowane w amxx pluginy nie używają nowego menu) to możemy z metodą zerową się pożegnać.

Jaki problem jest przechowywać handler? Po co tak kombinować?
Odpowiedz

  • +
  • -
Puchate - zdjęcie Puchate 10.05.2015

 

użyjemy menu_destroy, to możemy metody zerowej używać :)


Nie, nie możemy. ID menu nie są per plugin więc jeśli jakikolwiek inny plugin przed naszym menu zarejestruje (wbudowane w amxx pluginy nie używają nowego menu) to możemy z metodą zerową się pożegnać.

Jaki problem jest przechowywać handler? Po co tak kombinować?

 

 


 

 


Jaki problem jest przechowywać handler? Po co tak kombinować?
 

Pseudooptymalizacja, pamięć w serwerach liczymy w dziesiątkach GB a ludzie szukają optymalizacji w pamięci liczonej w dziesiątkach bitów ;) bo ktoś im wmówił że to zmienne są nieoptymalne, a nikt nie wspomniał że najwięcej CPU zużywają pluginy których logika działania jest źle wykonana  ;)


MAGNET (10.05.2015 22:20):
Polać mu

Użytkownik Puchate edytował ten post 10.05.2015 15:46
Odpowiedz

  • +
  • -
Ossal - zdjęcie Ossal 10.05.2015

O czym wy tu dyskutujecie, temat był do zamknięcia, czyż nie? Close :)

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 10.05.2015

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany