Błędy Assassin Mode
csMaster
04.08.2018
To już chyba błąd autora, bo ja tego nie zmieniałem. Po włączeniu Assassin Mode na więcej niż ~10 osób, w logach jest błąd w którym plugin wysyła wiadomość do id 0.
Na Nemesis Mode nie występuje ten błąd, bo wogóle nie ma message ScreenFade i ScreenShake.
zp50_gamemode_assassin.amxx:
Dodam, że tryby testowałem na XFakePlayers (bo podboty mózgu nie mają >.<).
W sumie to może być też wina botów bo co runde bez powodu ginie ich powoła.
Można jakoś naprawić ten błąd ?
csMaster
04.08.2018
ZP 5.0 to raczej kilkanaście - kilkadziesiąt mini-silników, nie widziałem jeszcze tej wersji z jednym dużym silnikiem, jest w ogóle taki ?
Cały plik zp50_gamemode_assassin.sma:
zp50_gamemode_assassin.sma 6,28 KB 76 Ilość pobrań
Robiin
04.08.2018
g_msgScreenShake = get_user_msgid("ScreenShake") g_msgScreenFade = get_user_msgid("ScreenFade")
Nie powinno to być w init? Nie jestem pewny, czy zrobi to jakąkolwiek różnicę, ale według starego zp 4.3 jest to w init i warto spróbować. Jak nie zadziała, to poszukamy przyczyny gdzie indziej.
Robiin
04.08.2018
Sugerując się silnikiem 4.3 spróbuj zamienić pierwszy argument message_begin na:
MSG_ONE_UNRELIABLE
Podobno jest to "zawodna" metoda, ale warto spróbować. Od dłuższego czasu grzebie się z silnikiem 4.3 i nie miałem nigdy problemu z tym konkretnym errorem.
Sama rejestracja ScreenFade jest raczej poprawna - niezbyt złożona (zaledwie z deklaracji handlera, przypisania indexu wiadomości i użycia w message_begin), więc też mało prawdopodobne, że jest to problemem.
Użytkownik aSiorr edytował ten post 04.08.2018 20:06
csMaster
05.08.2018
Dalej to samo (chociaż to już chyba ten drugi message ?)
L 08/05/2018 - 12:36:19: gmsgScreenFade message id = 98 (Playerid: 2) L 08/05/2018 - 12:36:19: Plugin called message_begin with an invalid message id (0). L 08/05/2018 - 12:36:19: [AMXX] Displaying debug trace (plugin "zp50_gamemode_assassin.amxx") L 08/05/2018 - 12:36:19: [AMXX] Run time error 10: native error (native "message_begin") L 08/05/2018 - 12:36:19: [AMXX] [0] zp50_gamemode_assassin.sma::zp_fw_gamemodes_start (line 166) L 08/05/2018 - 12:36:19: Log file started (file "cstrike\addons\amxmodx\logs\ZombiePlague_20180805.log") (game "cstrike") (amx "1.8.2")
@edit aSiorr, zrobiłem tak samo z ScreenShake i już działa, nie bardzo wiem co to za różnica ale poprawione
Użytkownik csMaster edytował ten post 05.08.2018 11:50
Robiin
05.08.2018
message_begin( MSG_ONE, gmsgScreenFade, {0,0,0}, id );
a
message_begin(MSG_ONE, g_msgScreenFade, _, id);
Przekazanie "_" czyli pominięcie argumentu powinno zostawić przypisaną do zmiennej wartość początkową:
float vecOrigin[3];
Jak na moje warunek pokazany niżej łapie się na tym, że vecOrigin ma wartości < 1, ale to może być tylko moje krzywe myślenie na ten moment.
Dokumentacja message_begin mówi, że argument ten:
origin - położenie źródła wiadomości, nie zawsze potrzebne.
Nie zawsze, ale ewidentnie czasami wymagane - jak widać po wcześniejszych postach.
Według source-code "messages":
if (params[2] < 1 || ((params[2] > 63) && !GET_USER_MSG_NAME(PLID, params[2], NULL))) // maximal number of engine messages { LogError(amx, AMX_ERR_NATIVE, "Plugin called message_begin with an invalid message id (%d).", params[2]); return 0; }
"maximal number of engine messages" więc jest możliwość (jeśli dobrze interpretuje komentarz), że rzeczywiście zawołane zostało zbyt dużo "engine messages".
Wypadałoby wyprintować origin podawany do funkcji message_begin, żeby sprawdzić jaką rzeczywiście przyjmuje wartość - jeśli > 1 to nie przeszła druga część ifa, czyli zbyt dużo wiadomości silnika. Nie mam teraz czasu, żeby zagłębiać się w to, ale skoro problem rozwiązany to chyba nie ma co szukać dziury w całym.
Użytkownik aSiorr edytował ten post 05.08.2018 12:51