[ROZWIĄZANE] Problem Segmentation fault
Andrzejek
31.07.2014
Witam, jest jakiś sposób na namierzenie Segmentation fault?? Nie chce namierzyć dokładnego pluginu, który powoduje ten błąd, ale może jaki trop mały, bo analize pluginów nie zrobię, równie dobrze bym mógł cały AMXMODX wyłączyć, bo pluginy są połączone natywami i forwardami, wiec ma ktoś jakiś sposób? Pisać.
Pozdrawiam
BlackPerfum
31.07.2014
Dodatkowo większość przypadków złapie coś takiego:
WykrywaczBledow.sma 1,73 KB 140 Ilość pobrań
Andrzejek
31.07.2014
"Blad ogolny (nieznany badz niezdefiniowany) - no to sie wkopales"
A np. sprawdzanie każdej funkcji, co by mi dało? tzn. daje log_to_file i co mi to da?
@edit. namierzyłem funkcje, która wykonywała się kilka razy na sekundę, sprawdzę czy to rozwiązało problem.
Andrzejek
31.07.2014
Znalazłem drugą funkcję, którą głupio zrobiłem, bo dałem sprawdzanie graczy do client_PreThink, jak dałem debuga to mi cała konsole zaśmieciło, wiec jak proponujecie? dodać sprawdzanie do publicu rozłączenia gracza, oraz do publicu śmierć gracza ?
BlackPerfum
31.07.2014
Chodzi ci o metodę "na diodę" ?? Jak tak to ona jest dobra tylko wtedy gdy wiemy w jakiej funkcji wydarza się błąd.A np. sprawdzanie każdej funkcji, co by mi dało? tzn. daje log_to_file i co mi to da?
Sprecyzuj żadnieZnalazłem drugą funkcję, którą głupio zrobiłem, bo dałem sprawdzanie graczy do client_PreThink, jak dałem debuga to mi cała konsole zaśmieciło, wiec jak proponujecie? dodać sprawdzanie do publicu rozłączenia gracza, oraz do publicu śmierć gracza ?
Andrzejek
31.07.2014
Bo ja pod client_PreThink dodałem sprawdzanie graczy, czyli zostanie ostatni gracz z TT i coś się tam robi, to pomyślałem żeby zamiast robić tego w client_PreThink może by dodać do client_disconnect oraz i eventu DeathMsg, i to na pewno by wpłynęło na działanie serwera. Zgadza się ?
I jeszcze jedno pytanko, jak zarejestrować event(np. CurWeapon) i message? Bo ja np. odrodzenie gracza rejestruje tak:
//jest włączone if(!hOdrodzenieGracza) { hOdrodzenieGracza = RegisterHam(Ham_Spawn, "player", "OdrodzenieGracza", 1); } else { EnableHamForward(hOdrodzenieGracza); } //jest wyłączone if(hOdrodzenieGracza) { DisableHamForward(hOdrodzenieGracza); }
BlackPerfum
31.07.2014
Zależy co dokładnie robisz. Połowa modułów (np. csx, engine) uzywają thinków by poprawnie działać (zazwyczaj thinka serwera) i nie wpływa to na działanie serwera. Nadmierne działanie w thinku skutkuje lagami gdyż robimy coś nie potrzebnie (czasem wystarczy dużo rzadziej coś robić). ZAWSZE szukaj innego wyjścia niż think!!!Bo ja pod client_PreThink dodałem sprawdzanie graczy, czyli zostanie ostatni gracz z TT i coś się tam robi, to pomyślałem żeby zamiast robić tego w client_PreThink może by dodać do client_disconnect oraz i eventu DeathMsg, i to na pewno by wpłynęło na działanie serwera. Zgadza się ?
Event CurWeapon jest niewydajny i nie ważne co chcesz w nim robic mozna użyć innego bardziej optymalnego eventu ale i tak pokażę jak można go zarejestrować (jeśli chodziło ci o wiadomość do klienta):I jeszcze jedno pytanko, jak zarejestrować event(np. CurWeapon) i message? Bo ja np. odrodzenie gracza rejestruje tak:
register_message(get_user_msgid("CurWeapon"),"CurWeapon")I łapiemy ten event w publicznej funkcji CurWeapon
Andrzejek
01.08.2014
Event CurWeapon jest niewydajny i nie ważne co chcesz w nim robic mozna użyć innego bardziej optymalnego eventu ale i tak pokażę jak można go zarejestrować (jeśli chodziło ci o wiadomość do klienta):I jeszcze jedno pytanko, jak zarejestrować event(np. CurWeapon) i message? Bo ja np. odrodzenie gracza rejestruje tak:
register_message(get_user_msgid("CurWeapon"),"CurWeapon")I łapiemy ten event w publicznej funkcji CurWeapon
A dało by jakoś to wyłączyć, gdy tego nie potrzebujemy ??
Thinka najlepiej nie używaj do niczego. Niestety przez niedopracowanie silnika trzeba łapać przyciski w thinku, także przetwarzać niestandardowe animacje. Nic innego nie ma prawa bytu w nim być.
Zależy co dokładnie robisz. Połowa modułów (np. csx, engine) uzywają thinków by poprawnie działać (zazwyczaj thinka serwera) i nie wpływa to na działanie serwera. Nadmierne działanie w thinku skutkuje lagami gdyż robimy coś nie potrzebnie (czasem wystarczy dużo rzadziej coś robić). ZAWSZE szukaj innego wyjścia niż think!!!Bo ja pod client_PreThink dodałem sprawdzanie graczy, czyli zostanie ostatni gracz z TT i coś się tam robi, to pomyślałem żeby zamiast robić tego w client_PreThink może by dodać do client_disconnect oraz i eventu DeathMsg, i to na pewno by wpłynęło na działanie serwera. Zgadza się ?
np. task ?, bo ja mam zrobione tak ze mam taska hud, który jest odświeżany co 1 sek, wiec to by było rozwiązanie ??
BlackPerfum
01.08.2014
register_message + unregister_messageA dało by jakoś to wyłączyć, gdy tego nie potrzebujemy ??
Task'u powinno się uzywać TYLKO gdy chcemy by coś sie stało za określony czas i nie zawsze podczas inego zdarzenianp. task ?, bo ja mam zrobione tak ze mam taska hud, który jest odświeżany co 1 sek, wiec to by było rozwiązanie ??
Poszukaj sobie eventy który będzi ci najbardziej pasował bo jeszcze nie powiedziałeś co dokładnie chcesz w nim robić:
• http://amxx.pl/dokum.../fakemeta-const (Te z przedrostkiem FM_)
• http://amxx.pl/dokum...a/i73/ham-const
• https://wiki.alliedm...e_1_Game_Events
Andrzejek
01.08.2014
Task'u powinno się uzywać TYLKO gdy chcemy by coś sie stało za określony czas i nie zawsze podczas inego zdarzenianp. task ?, bo ja mam zrobione tak ze mam taska hud, który jest odświeżany co 1 sek, wiec to by było rozwiązanie ??
Poszukaj sobie eventy który będzi ci najbardziej pasował bo jeszcze nie powiedziałeś co dokładnie chcesz w nim robić:
• http://amxx.pl/dokum.../fakemeta-const (Te z przedrostkiem FM_)
• http://amxx.pl/dokum...a/i73/ham-const
• https://wiki.alliedm...e_1_Game_Events
Pisałem wyżej, ale napisze jeszcze raz, potrzebuje go do tego żeby co 1 sek lub nawet mniej, sprawdzać funkcje, w której się znajdują warunki odpowiednie warunki, którymi sprawdzam ilość graczy, bo np. od iluś graczy może dopiero plugin działać, dwa gdy zostanie ostatni TT włącza się odpowiednia funkcja, trzy sprawdzanie graczy na zabawach, tzn. ostatni gracz, jeżeli się ktoś odrodzi będzie dwóch i się resetuje, zabija tego jednego TT i zostaje ostatni wiezień, nie wiem czy jest dobrze zrozumiale napisane ;x
Andrzejek
01.08.2014
Teraz mam taki problem, że wyskakuje mi to:
error 017: undefined symbol "unregister_message"
Ale dopisałem bibliotekę wiec o co chodzi ?
@Edit, miałem nie aktualną wersje ;x
BlackPerfum
01.08.2014
1. Po co:
?? Najgorsze możliwe rozwiązanie... Łap Ham_Killed/DeathMsg/client_death lub coś podobnego. Do czegoś takiego nie wolno używac thinków!!!co 1 sek lub nawet mniej, sprawdzać funkcje, w której się znajdują warunki odpowiednie warunki, którymi sprawdzam ilość graczy
2. Twój poprzedni opis sytuacji nie był dokładny. I tak na wszelki wypadek zarzuc kodem
3. Zazwyczaj nie opłaca się odrejestrowywać eventów. Kolejny powód byś pokazał kod
Andrzejek
01.08.2014
Wiesz, ja mam moda JB zrobionego tak, że zabawy, życzenie, menu to osobny plugin, nie mówię o JB Cypisa, bo ja zrobiłem swojego Moda. Ale co do sprawdzania, już mam pomysł jak to zrobić, ale co do Thinków, czy mogę sprawdzić a potem zablokować dalsze sprawdzanie(tzn. mam tak zrobione, tylko się pytam czy mogę tak używać) lub lepiej użyć taska ?
BlackPerfum
01.08.2014
ale co do Thinków, czy mogę sprawdzić a potem zablokować dalsze sprawdzanie(tzn. mam tak zrobione, tylko się pytam czy mogę tak używać) lub lepiej użyć taska ?
A ty chcesz robić z taska think...Thinka najlepiej nie używaj do niczego. Niestety przez niedopracowanie silnika trzeba łapać przyciski w thinku, także przetwarzać niestandardowe animacje. Nic innego nie ma prawa bytu w nim być.
Andrzejek
01.08.2014
Czego mam użyć do jedno razowego sprawdzania(blokada może się wyłączyć kilka razy na mapę)? client_PreThink czy set_task(0.1, "Sprawdzanie", _, _, _, "b"); w plugin_init()
BlackPerfum
01.08.2014
Podałeś dwa thinki (twój sposób korzystania z tasku sprawia że jest nie udolnym thinkiem) zarazem podałeś dwie najgorsze możliwości. Nadal nie opisałeś dokładnie kiedy chcesz by zdarzenie się wykonało a poza tym:client_PreThink czy set_task(0.1, "Sprawdzanie", _, _, _, "b"); w plugin_init()
• jesli chodzi ci o ilośc żywych graczy to:
• ilośc graczy client_putinserverHam_Killed/DeathMsg/client_death
Najlepiej pokaż kod+nadmiernie opisz co chcesz osiągnać a pokażę jak to zrobić
Andrzejek
01.08.2014
Co do sprawdzania ostatniego gracza, zastosowałem to co mi wyżej napisałeś, czyli sprawdzanie ilości przy śmierci gracza rtc.
A taska potrzebuje po to, żeby sprawdzić czy jest wymagana ilość graczy na serwerze, żeby plugin zaczął pracować. Rozumiesz ?
GwynBleidD
01.08.2014
Przecież gracz Ci się nie pojawi "nagle" na serwerze, zawsze towarzyszy mu wywołanie kilku forwardów. Tak samo nie zniknie nagle, wywoła się client_disconnect...
W zależności od tego, co według Ciebie oznacza gracz będący na serwerze (zakończył łączenie z serwerem, rozpoczął łączenie z serwerem, wszedł do teamu, zostało mu przyznane steamid). Tak samo przy rozłączaniu, możesz nie tylko śledzić client_disconnect ale też to, czy gracz nie opuścił teamu...
Zawsze jeśli chcesz sprawdzać, czy jakiś warunek jest spełniony, pomyśl kiedy może się on zmienić i tylko w tych miejscach, gdy się zmienia, go badaj.
Andrzejek
01.08.2014
Dokładnie mi chodzi "co według Ciebie oznacza gracz będący na serwerze" wszedł do teamu