←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

index out of bounds, mimo dobrego rozmiaru...

  • +
  • -
szelbi - zdjęcie szelbi 24.05.2014

#define MAX 32
new perk_gracza[MAX+1][3];
set_task(36.0, "apteczka_info", .flags="b");
public apteczka_info()
{
	for(new i=1;i<33; i++)
	{
		if(is_user_connected(i) && perk_gracza[i][1] == 6)
		client_print(i, print_chat, "[INFO] Aby uzyc apteczki wpisz /apteczka na czacie lub zbinduj sobie klawisz.");
	}
}

 
Mam taką funkcję jak powyżej i sypie mi takimi logami.
 

L 05/24/2014 - 06:01:45: [AMXX] Run time error 4: index out of bounds 
L 05/24/2014 - 06:01:45: [AMXX]    [0] codmw3.sma::apteczka_info (line 465)

 
Nie wiem co jest nie tak, więc piszę tutaj :)

Odpowiedz

  • +
  • -
Qunir - zdjęcie Qunir 24.05.2014

Wydaje mi się że brakuje jeszcze sprawdzenia czy gracz jest żywy.

if(is_user_connected(i) && perk_gracza[i][1] == 6)

Zmień na:

if(is_user_connected(i) && is_user_alive(i) && perk_gracza[i][1] == 6)
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 24.05.2014

Wydaje mi się że brakuje jeszcze sprawdzenia czy gracz jest żywy.

To jak jest martwy to nagle nie można mu nic wyświetlić na czacie?  :facepalm:

Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 25.05.2014

Tutaj chyba chodzi o tą linijkę:

for(new i=1;i<33; i++)

Slotów na serwerze jest 32, nie 33 i serwer nie wie komu wysłać?

Nie jestem pewny, pierwsze co mi się rzuciło na oczy.

Zmień na 32 i zobacz.

Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 25.05.2014

Tutaj chyba chodzi o tą linijkę:

for(new i=1;i<33; i++)

Slotów na serwerze jest 32, nie 33 i serwer nie wie komu wysłać?

Nie jestem pewny, pierwsze co mi się rzuciło na oczy.

Zmień na 32 i zobacz.

Źle mówisz
Pętla for-  wykonuj dopuki warunek jest prawdziwy czyli do momentu aż I<33 w momencie gdy I będzie miało wartość 33(czyli poza zakresem) nie wykona się.
 

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 25.05.2014

Zamień 33 w pętli na MAX+1. Jeśli to pomoże to szukaj przyczyny w swojej stałej MAX :)
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 25.05.2014

Zamień 33 w pętli na MAX+1. Jeśli to pomoże to szukaj przyczyny w swojej stałej MAX :)

Teraz nie wywala błędu, ale nie mam pojęcia, co może być źle z tą stałą MAX.
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 25.05.2014

Wypisz sobie ją w konsoli.
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 25.05.2014

Wypisałem i pokazało mi 32, czyli dobrze ;)

 

http://www.iv.pl/ima...96625698610.jpg

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 26.05.2014

A powiększoną o 1?
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 26.05.2014

Pokazuje 33, czyli również OK.

 

http://www.iv.pl/ima...81912778598.jpg

Odpowiedz