SA-MP Forums Archive
[Ajuda] Debug na callback - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Debug na callback (/showthread.php?tid=607941)



Debug na callback - Skudinhu - 25.05.2016

Fala rapaziada!
A um tempo venho percebendo esse debug no Log, nгo consegui identificar o erro pode ajudar?

Debug no Log:
Код:
[13:54:21] [debug] Run time error 4: "Array index out of bounds"
[13:54:21] [debug]  Accessing element at negative index -1
[13:54:21] [debug] AMX backtrace:
[13:54:21] [debug] #0 0014bdec in public putInVehicle (5) from NFS.amx
Quando й usado:
Код:
SetTimerEx("putInVehicle", 1500, 0, "i", x);
Callback:
Код:
callBack:: putInVehicle(playerid){

	if(PlayerInfo[playerid][pInCorrida]){

	    PutPlayerInVehicle(playerid, PlayerInfo[playerid][pCarroId], 0);

        PlayerInfo[playerid][pActualCarro] = PlayerInfo[playerid][pCarroId];

	   	new Float:v[3];
	    GetVehiclePos(PlayerInfo[playerid][pCarroId],v[0],v[1],v[2]);
	    SetVehiclePos(PlayerInfo[playerid][pCarroId],v[0],v[1],v[2]);

		if (PlayerInfo[playerid][pCarroId] != INVALID_VEHICLE_ID) {
		    setTunning(playerid);
		    
		    new corridaid = PlayerInfo[playerid][pInCorrida];

		    if(corridaInfo[corridaid][rTipo] == 3 && corridaInfo[corridaid][rLadrao] == playerid){

		        SetVehicleHealth(PlayerInfo[playerid][pCarroId], 250.0);
				corridaInfo[corridaid][rTempo] = 0;
		    }
		}
	}
}
Desde-jб agradeзo


Re: Debug na callback - WLSF - 25.05.2016

Run time error 4: "Array index out of bounds"

Este erro significa que vocк estб tentando acessar um index que nгo existe dentro de uma matriz/vetor.

Por exemplo:

Suponha que vocк tem a variбvel PlayerInfo[100][100]

e vocк estб tentando acessar PlayerInfo[101][101];


Um index que nгo existe no range da matriz criada, que vai de 0 atй 99.



Faz um debug nesse seu cуdigo, usa print mesmo, e tenta ver se quando tu chama essa funзгo, tu passa algum valor que nгo existe na matriz, negativo ou positivo.


Re: Debug na callback - Skudinhu - 25.05.2016

Quote:
Originally Posted by ipsNan
Посмотреть сообщение
Run time error 4: "Array index out of bounds"

Este erro significa que vocк estб tentando acessar um index que nгo existe dentro de uma matriz/vetor.

Por exemplo:

Suponha que vocк tem a variбvel PlayerInfo[100][100]

e vocк estб tentando acessar PlayerInfo[101][101];


Um index que nгo existe no range da matriz criada, que vai de 0 atй 99.



Faz um debug nesse seu cуdigo, usa print mesmo, e tenta ver se quando tu chama essa funзгo, tu passa algum valor que nгo existe na matriz, negativo ou positivo.
Obrigado pelo retorno ipsNan!

#Edit
Olha, andei estudando sobre isso de acordo com o cуdigo ele identifica que o playerid (Que representa o "X" no SetTimeEx citado acima) й -1, mas queria saber porque isso acontece. Jб que nгo existe ID -1.


Re: Debug na callback - ViniBorn - 26.05.2016

Pode ser que nessa parte do cуdigo playerid assuma -1

Код:
SetTimerEx("putInVehicle", 1500, 0, "i", x);



Re: Debug na callback - Skudinhu - 26.05.2016

Quote:
Originally Posted by ViniBorn
Посмотреть сообщение
Pode ser que nessa parte do cуdigo playerid assuma -1

Код:
SetTimerEx("putInVehicle", 1500, 0, "i", x);
Olб Vini!

Sim, й nessa parte porйm como devo resolver nesse caso?


Re: Debug na callback - n0minal - 26.05.2016

Provavelmente o time tб jogando um playerid inexistente na sua call back, posta o cуdigo completo de onde o settimer й executado


Re: Debug na callback - Skudinhu - 26.05.2016

Quote:
Originally Posted by ipsLeon
Посмотреть сообщение
Provavelmente o time tб jogando um playerid inexistente na sua call back, posta o cуdigo completo de onde o settimer й executado
Segue:
Код:
	        new Float:v[3];
	        GetVehiclePos(PlayerInfo[x][pCarroId],v[0],v[1],v[2]);
	        
	        new corridaid = PlayerInfo[x][pInCorrida];
	        
	        // Checar se o carro estб abaixo do nнvel do mar
			if (v[2] <= 0.1 && (corridaid != -1 && corridaInfo[corridaid][rTipo] != 4)){

					SetPVarInt(x, "varTeleport", gettime() + 10);
			
			    // Setar o carro a -150 metros abaixo do mar
			    // Ele volta automaticamente pra superfieie
			    
		        	SetVehiclePos(PlayerInfo[x][pCarroId],v[0],v[1],-150.0);
		        	PutPlayerInVehicle(x, PlayerInfo[x][pCarroId], 0);
		        	GetPlayerPos(x, PlayerInfo[x][pCheckPos][0], PlayerInfo[x][pCheckPos][1], PlayerInfo[x][pCheckPos][2]);

		        	SetTimerEx("putInVehicle", 1500, 0, "i", x);
			}