Portal SAMP
[Ajuda] [Error] Array index out of bounds - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] [Error] Array index out of bounds (/showthread.php?tid=4737)



[Error] Array index out of bounds - Ryzen_ - 30/04/2024

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(playeridPLAYER_STATE:newstatePLAYER_STATE:oldstate) {
    static 
vehicleid;
    
    
vehicleid GetPlayerVehicleID(playerid);
    
// modelid = GetVehicleModel(vehicleid);
    
    
new vvid ConceID[vehicleid];
    
format(Filesizeof(File), PASTA_CONCEvvid);

    if(
newstate == PLAYER_STATE_DRIVER) {
        
TimerGasolina[playerid] = SetTimerEx("GastarGasolina"60000true"i"playerid);
    }

    if(
newstate == PLAYER_STATE_DRIVER && IsABike(vehicleid) && !PlayerInfo[playerid][CNHA] && !AcInfo[playerid][ANaAuto]) {
         
GivePlayerWanted(playerid1);
         
SendClientMessage(playeridLaranja"| 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(playerid1);
         
SendClientMessage(playeridLaranja"| 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(playerid1);
         
SendClientMessage(playeridLaranja"| 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(playeridVermelho"Você tem 1 minuto para retornar ao seu veículo de trabalho, ou sua tarefa será cancelada!");
            
TimerOutTrabalho[playerid] = SetTimerEx("OutTrabalho"60000false"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(playeridKYOSEI_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(playeridMEDELLIN_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(playeridYAMAGUCHI_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(playeridSINALOA_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(playeridZETAS_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(playeridBOPE_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(playeridPM_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(playeridEXERCITO_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 0sizeof(CaminhoneiroCar); i++) {
            if (
vehicleid == CaminhoneiroCar[i] && GetPlayerJob(playerid) != PROF_CAMINHONEIRO) {
                
RemovePlayerFromVehicle(playerid);
                
SendClientMessage(playeridVermelho"Você não é um caminhoneiro(a)!");

                return 
1;
            }
            else if (
vehicleid == CaminhoneiroCar[i] && CaminhoneiroEntregando[playerid]) {
                
SetPVarInt(playerid"InVehicleTrabalho"1);
                
SendClientMessage(playeridVerde"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!"20003);
        
SendClientMessage(playeridVermelho"| ERRO | Veículo trancado");

        new 
Float:XFloat:YFloat:Z;
        
GetPlayerPos(playeridXYZ);
        
SetPlayerPos(playerid2.0YZ);
    }

    if(
newstate == PLAYER_STATE_DRIVER && !GetPVarInt(playerid"criouv")) {
        
SendClientMessage(playeridVerde"| INFO | Digite /motor ou aperte 'Y' para ligar/desligar o veículo");
    }

    if(
newstate == PLAYER_STATE_DRIVER) {
        
TimerCar[playerid] = SetTimerEx("UpdateCar"300true"i"playerid);
        
ShowPlayerVelocimetro(playerid);
        
PutPlayerInVehicle(playeridvehicleid0);
    }

    if(
newstate == PLAYER_STATE_DRIVER) {
        new 
id ConceID[GetPlayerVehicleID(playerid)];
        
format(Filesizeof(File), PASTA_CONCEid);


        if(
DOF2_FileExists(File) && !GetPVarInt(playerid"criouv")) {
            
format(STRXsizeof(STRX), "GASOLINA: ~w~%dl"DOF2_GetInt(File"Gasolina"));
            
PlayerTextDrawSetString(playeridVelocimetroPlayer[playerid][41], STRX);
        } else {
            
format(STRXsizeof(STRX), "GASOLINA: ~w~N/A");
            
PlayerTextDrawSetString(playeridVelocimetroPlayer[playerid][41], STRX);
        }
    }

    if(
newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER && AcInfo[playerid][ANaAuto]) {
        
SendClientMessage(playeridVermelho"| INFO | Você saiu do seu veículo, portanto o teste foi cancelado");
        
EndAC(playerid);
    }

    
// CallLocalFunction("OnPlayerHopOnVehicle", "iiiii", playerid, vehicleid, modelid, newstate, oldstate);
    
return 1;




RE: [Error] Array index out of bounds - xbruno1000x - 01/05/2024

Cara, impossível saber qual array está com problemas.

São 16 arrays:
  1.     KyoseiCar
  2.     MedellinCar
  3.     YamaguchiCar
  4.     SinaloaCar
  5.     ZetasCar
  6.     BOPECar
  7.     PMCar
  8.     ExercitoCar
  9.     CaminhoneiroCar
  10.     ConceID
  11.     PlayerInfo
  12.     AcInfo
  13.     TimerGasolina
  14.     TimerOutTrabalho
  15.     TimerCar
  16.     VelocimetroPlayer
Pode ser qualquer um desses.

Esse problema ocorre quando você tenta acessar um índice inválido, esse pode ser um ínicio para você procurar. Tente verificar as entradas e saídas de dados com printf.


RE: [Error] Array index out of bounds - Ryzen_ - 01/05/2024

(01/05/2024 01:32)xbruno1000x Escreveu: Cara, impossível saber qual array está com problemas.

São 16 arrays:
  1.     KyoseiCar
  2.     MedellinCar
  3.     YamaguchiCar
  4.     SinaloaCar
  5.     ZetasCar
  6.     BOPECar
  7.     PMCar
  8.     ExercitoCar
  9.     CaminhoneiroCar
  10.     ConceID
  11.     PlayerInfo
  12.     AcInfo
  13.     TimerGasolina
  14.     TimerOutTrabalho
  15.     TimerCar
  16.     VelocimetroPlayer
Pode ser qualquer um desses.

Esse problema ocorre quando você tenta acessar um índice inválido, esse pode ser um ínicio para você procurar. Tente verificar as entradas e saídas de dados com printf.

Obrigado, consegui corrigir. O erro está no velocímetro que era setado para o player.


RE: [Error] Array index out of bounds - pushline - 02/05/2024

(01/05/2024 21:42)Ryzen_ Escreveu:
(01/05/2024 01:32)xbruno1000x Escreveu: Cara, impossível saber qual array está com problemas.

São 16 arrays:
  1.     KyoseiCar
  2.     MedellinCar
  3.     YamaguchiCar
  4.     SinaloaCar
  5.     ZetasCar
  6.     BOPECar
  7.     PMCar
  8.     ExercitoCar
  9.     CaminhoneiroCar
  10.     ConceID
  11.     PlayerInfo
  12.     AcInfo
  13.     TimerGasolina
  14.     TimerOutTrabalho
  15.     TimerCar
  16.     VelocimetroPlayer
Pode ser qualquer um desses.

Esse problema ocorre quando você tenta acessar um índice inválido, esse pode ser um ínicio para você procurar. Tente verificar as entradas e saídas de dados com printf.

Obrigado, consegui corrigir. O erro está no velocímetro que era setado para o player.

Se quiseres saber a linha exata da proxima vez, use crashdetect e compile com a flag -d3 no compilador.


RE: [Error] Array index out of bounds - Maycon_Felipe - 02/05/2024

Se fosse para chutar, eu diria que está na variável ConceID[vehicleid].
Mostra como você está criando ela..

E faça o que os demais falaram acima, sem debug não da para saber a linha..


RE: [Error] Array index out of bounds - Carlos Victor - 02/05/2024

Ele já corrigiu:

(01/05/2024 21:42)Ryzen_ Escreveu: Obrigado, consegui corrigir. O erro está no velocímetro que era setado para o player.



RE: [Error] Array index out of bounds - Ryzen_ - 02/05/2024

(02/05/2024 10:27)pushline Escreveu:
(01/05/2024 21:42)Ryzen_ Escreveu:
(01/05/2024 01:32)xbruno1000x Escreveu: Cara, impossível saber qual array está com problemas.

São 16 arrays:
  1.     KyoseiCar
  2.     MedellinCar
  3.     YamaguchiCar
  4.     SinaloaCar
  5.     ZetasCar
  6.     BOPECar
  7.     PMCar
  8.     ExercitoCar
  9.     CaminhoneiroCar
  10.     ConceID
  11.     PlayerInfo
  12.     AcInfo
  13.     TimerGasolina
  14.     TimerOutTrabalho
  15.     TimerCar
  16.     VelocimetroPlayer
Pode ser qualquer um desses.

Esse problema ocorre quando você tenta acessar um índice inválido, esse pode ser um ínicio para você procurar. Tente verificar as entradas e saídas de dados com printf.

Obrigado, consegui corrigir. O erro está no velocímetro que era setado para o player.

Se quiseres saber a linha exata da proxima vez, use crashdetect e compile com a flag -d3 no compilador.

Poderia me explicar um pouco melhor sobre isso?


RE: [Error] Array index out of bounds - BitSain - 02/05/2024

(02/05/2024 18:42)Ryzen_ Escreveu:
(02/05/2024 10:27)pushline Escreveu:
(01/05/2024 21:42)Ryzen_ Escreveu:
(01/05/2024 01:32)xbruno1000x Escreveu: Cara, impossível saber qual array está com problemas.

São 16 arrays:
  1.     KyoseiCar
  2.     MedellinCar
  3.     YamaguchiCar
  4.     SinaloaCar
  5.     ZetasCar
  6.     BOPECar
  7.     PMCar
  8.     ExercitoCar
  9.     CaminhoneiroCar
  10.     ConceID
  11.     PlayerInfo
  12.     AcInfo
  13.     TimerGasolina
  14.     TimerOutTrabalho
  15.     TimerCar
  16.     VelocimetroPlayer
Pode ser qualquer um desses.

Esse problema ocorre quando você tenta acessar um índice inválido, esse pode ser um ínicio para você procurar. Tente verificar as entradas e saídas de dados com printf.

Obrigado, consegui corrigir. O erro está no velocímetro que era setado para o player.

Se quiseres saber a linha exata da proxima vez, use crashdetect e compile com a flag -d3 no compilador.

Poderia me explicar um pouco melhor sobre isso?
O que o pushline quis dizer em minhas palavras:

Usando o Plugin CrashDetect em seu servidor, e compilar com a flag -d3, além de você ver os erros na execução do codigo (mesmo sem a Flag), você pode ver com mais detalhes: Diretório do arquivo onde está dando erro/problema + a linha (com a Flag).

A Flag ( -d3 ) é o nível de DEBUG máximo que pode ser configurado no compilador, essa Flag não é obrigatória para compilação, mas para ter os detalhes 'precisos' no CrashDetect, você precisa compilar o seu Código com essa Flag.


RE: [Error] Array index out of bounds - pushline - 04/05/2024

Complementando com o que o bitsain falou, o -d3 (Se compila via pawno.exe) é só adicionar no pawn.cfg, caso use o vscode, só adicionar "'-d3'" (com ambas as aspas) nos args.
Segue o meu tasks.json:

Código PHP:
{
    
"version""2.0.0",
    
"tasks":
    [
      {
        
"label""build",
        
"type""shell",
        
"command""${workspaceRoot}\\pawno\\pawncc.exe",
        
"args": ["'${file}'""'-D${fileDirname}'""'-;+'""'-(+'""'-d3'"],
   
        
"group":
        {
          
"kind""build",
          
"isDefault"true
        
},
   
        
"isBackground"false,
   
        
"presentation":
        {
          
"reveal""always",
          
"panel""dedicated"
        
},
        
        
"problemMatcher": {
          
"base""$pawncc",
          
"fileLocation": ["autoDetect""${workspaceFolder}\\gamemodes"]
        }
      }
    ]