[ROZWIĄZANE] HudSyncObject -1 is invalid
Best Answer BlackPerfum 22.06.2014 15:03
To mnie troszkę zdiwiło. Troszkę poszukałem i sprawa rozwiązana:
static cell AMX_NATIVE_CALL ShowSyncHudMsg(AMX *amx, cell *params) { int len = 0; char* message = NULL; int index = params[1]; unsigned int sync_obj = static_cast<unsigned int>(params[2]) - 1;//O to chodzi xD if (sync_obj >= g_hudsync.size()) { LogError(amx, AMX_ERR_NATIVE, "HudSyncObject %d is invalid", sync_obj); return 0; } . . . }
I takie coś zadziała:
if(is_user_alive(id) && wczytuje_dane[id] && SyncHudObj2 > 0) { new szText[128]; if(poziom_gracza[id] >= 80) { formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: 80]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], get_user_health(id), get_gold_shop(id)); } else { formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: %i]^n[EXP: %0.2f%%]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], poziom_gracza[id], procenpoziom, get_user_health(id), get_gold_shop(id)); } set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 1.9, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj2, szText); }Go to the full post
szelbi
22.06.2014
if(wczytuje_dane[id]) { new szText[128]; if(poziom_gracza[id] >= 80) { if(is_user_alive(id)) formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: 80]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], get_user_health(id), get_gold_shop(id)); } else { if(is_user_alive(id)) formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: %i]^n[EXP: %0.2f%%]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], poziom_gracza[id], procenpoziom, get_user_health(id), get_gold_shop(id)); } set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 1.9, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj2, szText); }
L 06/21/2014 - 21:28:05: HudSyncObject -1 is invalid L 06/21/2014 - 21:28:05: [AMXX] Displaying debug trace (plugin "codmw3.amxx") L 06/21/2014 - 21:28:05: [AMXX] Run time error 10: native error (native "ShowSyncHudMsg") L 06/21/2014 - 21:28:05: [AMXX] [0] codmw3.sma::PokazInformacje (line 3656)
Powie mi ktoś co jest źle? Bo ja nie mam pomysłu. Identyczny kod na wyświetlanie HUD'a znajduje się jeszcze w 50 innych miejscach, ale tutaj wywala błąd.
Puchate
22.06.2014
HudSyncObject -1 is invalid
Ilu kanałów jeszcze używasz w hudzie? Wygląda na to jakby brakowało już wolnych (zwraca -1).
szelbi
22.06.2014
SyncHudObj2 jest użyte 56 razy, ale z automatycznym doborem kanału. Później z tego co widzę dwa razy kanał drugi i po razie 1 i 3. W tym nawet jak wpiszę kanał 4 to jest ten sam błąd.
Puchate
22.06.2014
Jak często jest to aktualizowane? Najlepiej jakbyś podzielił wszystkie wiadomości na 4 grupy i do każdego wywołania ręcznie podał kanał.
BlackPerfum
22.06.2014
Jeśli:
HudSyncObject -1 is invalid
To oznacza że:
ShowSyncHudMsg(id, (SyncHudObj2==-1), szText);
Czyli nie można było utworzyć uchwytu tzn. CreateHudSyncObj zwróciło ci -1 powodów może być parę:
• Wypadek amxx'a spowodował nie udane stworzenie uchwytu (szansa 1/)
• Zbyt wcześnie/późno próbowałeś stworzyć uchwyt przez co amxx sobie nie poradził
• Utworzyłeś zbyt dużo uchwytów (zapełniłeś pamięć)
ex0
22.06.2014
Jeśli:
HudSyncObject -1 is invalid
To oznacza że:ShowSyncHudMsg(id, (SyncHudObj2==-1), szText);Czyli nie można było utworzyć uchwytu tzn. CreateHudSyncObj zwróciło ci -1 powodów może być parę:
• Wypadek amxx'a spowodował nie udane stworzenie uchwytu (szansa 1/)
• Zbyt wcześnie/późno próbowałeś stworzyć uchwyt przez co amxx sobie nie poradził
• Utworzyłeś zbyt dużo uchwytów (zapełniłeś pamięć)
L 06/21/2014 - 21:28:05: [AMXX] [0] codmw3.sma::PokazInformacje (line 3656)
Bazując na tym głównym stwierdzeniem jak wspomniałeś będzie zapełnienie pamięci, pamiętam że bawiąc się z COD`em też napotkałem taki error i kolega to rozwiązał właśnie zwiększeniem pamięci .
szelbi
22.06.2014
Czyli nie można było utworzyć uchwytu tzn. CreateHudSyncObj zwróciło ci -1
No OK, ale dlaczego błąd wywala tutaj, a nie w 56 miejscach jednocześnie?
ex0
22.06.2014
Czyli nie można było utworzyć uchwytu tzn. CreateHudSyncObj zwróciło ci -1No OK, ale dlaczego błąd wywala tutaj, a nie w 56 miejscach jednocześnie?
Ponieważ te 55 miejsc które masz generuję (że tak to ujmę) taką pamięć która wystarcza, a to 56 miejsce już przekracza stan pamięci, dlatego krzyczy o to miejsce które jest źródłem błędy a nie o wszystkie ogniwa z nim związane.
Kapiszi?
BlackPerfum
22.06.2014
Ponieważ te 55 miejsc które masz generuję (że tak to ujmę) taką pamięć która wystarcza, a to 56 miejsce już przekracza stan pamięci, dlatego krzyczy o to miejsce które jest źródłem błędy a nie o wszystkie ogniwa z nim związane.
No nie o to tu chodzi
No OK, ale dlaczego błąd wywala tutaj, a nie w 56 miejscach jednocześnie?
Dlaczego tylko w tym?? Gdyż to jest błąd nie do przewidzenia (przez człowieka) bez użycia tego kodu. Dlatego w każdym z tych 56 miejsc jest błąd tylko to miejsce wykonuje się jako pierwsze. Tutaj problemem nie jest użycie:
ShowSyncHudMsg
A:
CreateHudSyncObj
Gdyż czy wywołasz hud w jednym miejscu w kodzie czy w 2109834921 nie ma dla nas różnicy. Jest jednak różnica między stworzeniem uchwytu do niego raz a 10 razy (choć i przy 10 nie powinno być problemu(z tym błędem))
Pokaż kod z użyciem CreateHudSyncObj
Edited by BlackPerfum, 22.06.2014 11:56.
szelbi
22.06.2014
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); SyncHudObj2 = CreateHudSyncObj(); set_task(2.5,"radar_scan", .flags="b"); // im mniej tym gorzej bo wieksze zuzycie set_task(36.0, "apteczka_info", .flags="b"); set_task(5.0, "wyszkolenie_sanitarne", .flags="b"); }
Wszystkie register_event itp. wywaliłem, bo by za dużo miejsca zajmowało
BlackPerfum
22.06.2014
Widocznie źle mnie zrozumiałeś Pokaż wszystkie użycia CreateHudSyncObj
Chyba że to jest jedynie jeśli tak to niestety musisz przed każdym użyciem ShowSyncHudMsg musisz sprawdzać czy uchwyt jest prawidłowy (sprawdzaj czy czasem nie równa się -1)
szelbi
22.06.2014
Tak, tylko tutaj jest użyte. W jaki sposób to sprawdzić?
if(SyncHudObj2 < 0) return;
Tak?
szelbi
22.06.2014
if(wczytuje_dane[id]) { new szText[128]; if(poziom_gracza[id] >= 80) { if(is_user_alive(id)) formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: 80]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], get_user_health(id), get_gold_shop(id)); } else { if(is_user_alive(id)) formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: %i]^n[EXP: %0.2f%%]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], poziom_gracza[id], procenpoziom, get_user_health(id), get_gold_shop(id)); } if(SyncHudObj2 < 0) return; set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 1.9, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj2, szText); }
L 06/22/2014 - 15:20:33: HudSyncObject -1 is invalid L 06/22/2014 - 15:20:33: [AMXX] Displaying debug trace (plugin "codmw3.amxx") L 06/22/2014 - 15:20:33: [AMXX] Run time error 10: native error (native "ShowSyncHudMsg") L 06/22/2014 - 15:20:33: [AMXX] [0] codmw3.sma::PokazInformacje (line 3659)
Best Answer
BlackPerfum
22.06.2014
To mnie troszkę zdiwiło. Troszkę poszukałem i sprawa rozwiązana:
static cell AMX_NATIVE_CALL ShowSyncHudMsg(AMX *amx, cell *params) { int len = 0; char* message = NULL; int index = params[1]; unsigned int sync_obj = static_cast<unsigned int>(params[2]) - 1;//O to chodzi xD if (sync_obj >= g_hudsync.size()) { LogError(amx, AMX_ERR_NATIVE, "HudSyncObject %d is invalid", sync_obj); return 0; } . . . }
I takie coś zadziała:
if(is_user_alive(id) && wczytuje_dane[id] && SyncHudObj2 > 0) { new szText[128]; if(poziom_gracza[id] >= 80) { formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: 80]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], get_user_health(id), get_gold_shop(id)); } else { formatex(szText, charsmax(szText), "[Forum: XXX]^n[Ranga: %s]^n[Poziom: %i]^n[EXP: %0.2f%%]^n[HP: %i]^n[Zlote monety: %i]", nazwy_rang[poziom_gracza[id]], poziom_gracza[id], procenpoziom, get_user_health(id), get_gold_shop(id)); } set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 1.9, 0.0, 0.0); ShowSyncHudMsg(id, SyncHudObj2, szText); }