Olá, boa noite a todos. Notei que sempre ao adentrar em algum veículo, seja entrando em um que já está criado pelo mapa, ou então usando algum criado pelo próprio jogador (/cv, /veh), aparece a seguinte mensagem no terminal: [Error] Array index out of bounds. Até o momento não consegui encontrar o que esteja causando o erro em destaque. Deixarei abaixo o código responsável por verificar se o player entrou em algum veículo, onde para isso estou usando o OnPlayerStateChange, e não o OnPlayerEnterVehicle. Desde já, agradeço a todos os que contribuírem com suas respostas, muito obrigado!
Código PHP:
public OnPlayerStateChange(playerid, PLAYER_STATE:newstate, PLAYER_STATE:oldstate) {
static vehicleid;
vehicleid = GetPlayerVehicleID(playerid);
// modelid = GetVehicleModel(vehicleid);
new vvid = ConceID[vehicleid];
format(File, sizeof(File), PASTA_CONCE, vvid);
if(newstate == PLAYER_STATE_DRIVER) {
TimerGasolina[playerid] = SetTimerEx("GastarGasolina", 60000, true, "i", playerid);
}
if(newstate == PLAYER_STATE_DRIVER && IsABike(vehicleid) && !PlayerInfo[playerid][CNHA] && !AcInfo[playerid][ANaAuto]) {
GivePlayerWanted(playerid, 1);
SendClientMessage(playerid, Laranja, "| INFO | Você não tem habilitação para dirigir este veículo, portanto está sendo %s pela polícia", PlayerInfo[playerid][pSexo] ? "procurado" : "procurada");
}
else if(newstate == PLAYER_STATE_DRIVER && IsACar(vehicleid) && !PlayerInfo[playerid][CNHB] && !AcInfo[playerid][ANaAuto]) {
GivePlayerWanted(playerid, 1);
SendClientMessage(playerid, Laranja, "| INFO | Você não tem habilitação para dirigir este veículo, portanto está sendo %s pela polícia", PlayerInfo[playerid][pSexo] ? "procurado" : "procurada");
}
else if(newstate == PLAYER_STATE_DRIVER && IsATruck(vehicleid) && !PlayerInfo[playerid][CNHC] && !AcInfo[playerid][ANaAuto]) {
GivePlayerWanted(playerid, 1);
SendClientMessage(playerid, Laranja, "| INFO | Você não tem habilitação para dirigir este veículo, portanto está sendo %s pela polícia", PlayerInfo[playerid][pSexo] ? "procurado" : "procurada");
}
if(newstate == PLAYER_STATE_ONFOOT) {
if (GetPVarInt(playerid, "InVehicleTrabalho")) {
SendClientMessage(playerid, Vermelho, "Você tem 1 minuto para retornar ao seu veículo de trabalho, ou sua tarefa será cancelada!");
TimerOutTrabalho[playerid] = SetTimerEx("OutTrabalho", 60000, false, "i", playerid);
DeletePVar(playerid, "InVehicleTrabalho");
}
if(GetPVarInt(playerid, "criouv")) {
DeletePVar(playerid, "criouv");
DestroyVehicle(GetPVarInt(playerid, "cvehid"));
DeletePVar(playerid, "cvehid");
}
KillTimer(TimerCar[playerid]);
KillTimer(TimerGasolina[playerid]);
HidePlayerVelocimetro(playerid);
}
if (newstate == PLAYER_STATE_DRIVER) {
if (vehicleid >= KyoseiCar[0] && vehicleid <= KyoseiCar[7] && GetPlayerClan(playerid) != 0) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, KYOSEI_COR, "Você não faz parte do clan Kyosei-Kai!");
return 1;
}
else if (vehicleid >= MedellinCar[0] && vehicleid <= MedellinCar[7] && GetPlayerClan(playerid) != 1) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, MEDELLIN_COR, "Você não faz parte do clan Cartel Medellín!");
return 1;
}
else if (vehicleid >= YamaguchiCar[0] && vehicleid <= YamaguchiCar[7] && GetPlayerClan(playerid) != 2) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, YAMAGUCHI_COR, "Você não faz parte do clan Yamaguchi Gumi!");
return 1;
}
else if (vehicleid >= SinaloaCar[0] && vehicleid <= SinaloaCar[7] && GetPlayerClan(playerid) != 3) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, SINALOA_COR, "Você não faz parte do clan Cartel de Sinaloa!");
return 1;
}
else if (vehicleid >= ZetasCar[0] && vehicleid <= ZetasCar[7] && GetPlayerClan(playerid) != 4) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, ZETAS_COR, "Você não faz parte do clan Los Zetas!");
return 1;
}
else if (vehicleid >= BOPECar[0] && vehicleid <= BOPECar[9] && GetPlayerClan(playerid) != 5) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, BOPE_COR, "Você não faz parte do clan BOPE!");
return 1;
}
else if (vehicleid >= PMCar[0] && vehicleid <= PMCar[9] && GetPlayerClan(playerid) != 6) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, PM_COR, "Você não faz parte do clan Polícia Militar!");
return 1;
}
else if (vehicleid >= ExercitoCar[0] && vehicleid <= ExercitoCar[9] && GetPlayerClan(playerid) != 7) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, EXERCITO_COR, "Você não faz parte do clan Exército!");
return 1;
}
// else if (GetVehicleModel(vehicleid) == 510 && GetPVarInt(playerid, "JornalEntregando")) {
// SetPVarInt(playerid, "InVehicleTrabalho", 1);
// SendClientMessage(playerid, Verde, "Você voltou para o seu veículo de trabalho. Continua seu trajeto!");
// KillTimer(TimerOutTrabalho[playerid]);
// return 1;
// }
for (new i = 0; i < sizeof(CaminhoneiroCar); i++) {
if (vehicleid == CaminhoneiroCar[i] && GetPlayerJob(playerid) != PROF_CAMINHONEIRO) {
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, Vermelho, "Você não é um caminhoneiro(a)!");
return 1;
}
else if (vehicleid == CaminhoneiroCar[i] && CaminhoneiroEntregando[playerid]) {
SetPVarInt(playerid, "InVehicleTrabalho", 1);
SendClientMessage(playerid, Verde, "Você voltou para o seu veículo de trabalho. Continue seu trajeto!");
KillTimer(TimerOutTrabalho[playerid]);
return 1;
}
}
}
if(newstate == PLAYER_STATE_DRIVER && DOF2_GetBool(File, "Trancado") && strcmp(GetPlayerNameEx(playerid), DOF2_GetString(File, "Dono"))) {
RemovePlayerFromVehicle(playerid);
GameTextForPlayer(playerid, "~r~VEICULO TRANCADO!", 2000, 3);
SendClientMessage(playerid, Vermelho, "| ERRO | Veículo trancado");
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
SetPlayerPos(playerid, X - 2.0, Y, Z);
}
if(newstate == PLAYER_STATE_DRIVER && !GetPVarInt(playerid, "criouv")) {
SendClientMessage(playerid, Verde, "| INFO | Digite /motor ou aperte 'Y' para ligar/desligar o veículo");
}
if(newstate == PLAYER_STATE_DRIVER) {
TimerCar[playerid] = SetTimerEx("UpdateCar", 300, true, "i", playerid);
ShowPlayerVelocimetro(playerid);
PutPlayerInVehicle(playerid, vehicleid, 0);
}
if(newstate == PLAYER_STATE_DRIVER) {
new id = ConceID[GetPlayerVehicleID(playerid)];
format(File, sizeof(File), PASTA_CONCE, id);
if(DOF2_FileExists(File) && !GetPVarInt(playerid, "criouv")) {
format(STRX, sizeof(STRX), "GASOLINA: ~w~%dl", DOF2_GetInt(File, "Gasolina"));
PlayerTextDrawSetString(playerid, VelocimetroPlayer[playerid][41], STRX);
} else {
format(STRX, sizeof(STRX), "GASOLINA: ~w~N/A");
PlayerTextDrawSetString(playerid, VelocimetroPlayer[playerid][41], STRX);
}
}
if(newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER && AcInfo[playerid][ANaAuto]) {
SendClientMessage(playerid, Vermelho, "| INFO | Você saiu do seu veículo, portanto o teste foi cancelado");
EndAC(playerid);
}
// CallLocalFunction("OnPlayerHopOnVehicle", "iiiii", playerid, vehicleid, modelid, newstate, oldstate);
return 1;
}