←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[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
Locked

  • +
  • -
szelbi's Photo 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.

Quote

  • +
  • -
Puchate's Photo 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).

Quote

  • +
  • -
szelbi's Photo 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.

Quote

  • +
  • -
Puchate's Photo 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ł.

Quote

  • +
  • -
BlackPerfum's Photo 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/d245777abca64ece2d5d7ca0d19fddb6.png)

• 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ęć)

Quote

  • +
  • -
ex0's Photo 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/d245777abca64ece2d5d7ca0d19fddb6.png)

• 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 .

 

Quote

  • +
  • -
szelbi's Photo 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?

Quote

  • +
  • -
ex0's Photo ex0 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?

 

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? :D

Quote

  • +
  • -
BlackPerfum's Photo 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 sleep.png
 

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.
Quote

  • +
  • -
szelbi's Photo 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 ;)

Quote

  • +
  • -
BlackPerfum's Photo BlackPerfum 22.06.2014

Widocznie źle mnie zrozumiałeś haha.gif 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)

Quote

  • +
  • -
szelbi's Photo szelbi 22.06.2014

Tak, tylko tutaj jest użyte. W jaki sposób to sprawdzić?

if(SyncHudObj2 < 0)
return;

Tak?

Quote

  • +
  • -
BlackPerfum's Photo BlackPerfum 22.06.2014

:ok: Tak

Quote

  • +
  • -
szelbi's Photo 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)
Quote

  • +
  • -
Best Answer BlackPerfum's Photo 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);
}
Quote
Locked