Portal SAMP
[Ajuda] Comando não funciona e gera erro no CrashDetect - 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] Comando não funciona e gera erro no CrashDetect (/showthread.php?tid=4129)



Comando não funciona e gera erro no CrashDetect - diggao - 25/10/2023

Olá, pessoal estou com o seguinte erro na profissão de lixeiro, ao dar o comando /procurarlixos ele não funciona " como se não existisse no servidor " e o crashdetect avisa que deu erro na funçao:

Crash Detect:

[debug] Run time error 4: "Array index out of bounds"
[debug]  Attempted to read/write array element at index 27497914 in array of size 100
[debug] AMX backtrace:





Código PHP:
CMD:procurarlixos(playeridparams[])
{
    new sss[200];
    if(EmpregoPlayer(playerid) != 2) return erro(playerid"Apenas os Lixeiros podem usar este comando");
if(!
EmVeiculoEmprego(playerid)) return erro(playerid"Voce nao esta em um carro do Lixo");
if(
GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return erro(playerid"Voce precisa ser o motorista para procurar os lixos");

    for(new ii<MAX_PICKUPi++)
{
    if(Pickup[i][piExiste] == 0) continue;
    if(Pickup[i][piTipo] != LIXO) continue;
    if(lixos[GetPlayerVehicleID(playerid)] > 99)
    {
        SetarCheckPoint(playeridPickup[i][piX],Pickup[i][piY],Pickup[i][piZ],3.0);
chekcaminhao[playerid] = 1;
info_(playerid"Este caminhao esta cheio de Lixo, siga ate a marca vermelha no mapa para descarregar");
return 
1;
    }
}

new 
Float:dist;
new 
cuu;
new 
cu[100];
for(new 
ii<MAX_LIXOSi++)
{
if(
Lixo[i][lixoExiste] == 1)
{
cu[cuu] = i,cuu++;
if(
cuu == 100) break;
}
}
new 
randcu random(cuu);
new 
ii cu[randcu];

new 
Float:p[3];
GetPlayerPos(playeridp[0],p[1],p[2]);

GetDistance(distLixo[ii][lixoX],Lixo[ii][lixoY],Lixo[ii][lixoZ], p[0],p[1],p[2]);

info(playerid"Um checkpoint vermelho acabou de ser marcado no mapa com a localizacao do Lixo");
format(sss200"Distancia aproximada: %.0f Metros de sua localizacao"dist );
info_(playeridsss);
SetarCheckPoint(playeridLixo[ii][lixoX],Lixo[ii][lixoY],Lixo[ii][lixoZ],3.0);
checklixo[playerid] = 1;
return 
1;



Quem puder me ajudar fico grato, tentei usar o Chat Gpt pra me ajudar mas não consegui muita coisa.


RE: Comando não funciona e gera erro no CrashDetect - White_Blue - 25/10/2023

Se possível compartilhar o enumerador "Lixos" aqui.

Tente o código abaixo (Não fiz nenhuma mudança exceto tirar o "return 1" do loop e indentar o código):

Código PHP:
CMD:procurarlixos(playeridparams[]) {
    new sss[200];
    if(EmpregoPlayer(playerid) != 2) return erro(playerid"Apenas os Lixeiros podem usar este comando");
    else if(!EmVeiculoEmprego(playerid)) return erro(playerid"Voce nao esta em um carro do Lixo");
    else if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return erro(playerid"Voce precisa ser o motorista para procurar os lixos");

    for(new 0MAX_PICKUPi++) {
        if(Pickup[i][piExiste] == 0) continue;
        else if(Pickup[i][piTipo] != LIXO) continue;
        else if(lixos[GetPlayerVehicleID(playerid)] > 99) {
            SetarCheckPoint(playeridPickup[i][piX], Pickup[i][piY], Pickup[i][piZ], 3.0);
            chekcaminhao[playerid] = 1;
            info_(playerid"Este caminhao esta cheio de Lixo, siga ate a marca vermelha no mapa para descarregar");
        }
    }

    new Float:dist;
    new cuu;
    new cu[100];
    for(new iMAX_LIXOSi++) {
        if(Lixo[i][lixoExiste] == 1) {
            cu[cuu] = icuu++; 
            if(cuu == 100) break;
        }
    }
    new randcu random(cuu);
    new ii cu[randcu];

    new Float:p[3];
    GetPlayerPos(playeridp[0], p[1], p[2]);

    GetDistance(distLixo[ii][lixoX], Lixo[ii][lixoY], Lixo[ii][lixoZ], p[0], p[1], p[2]);

    info(playerid"Um checkpoint vermelho acabou de ser marcado no mapa com a localizacao do Lixo");
    format(sss200"Distancia aproximada: %.0f Metros de sua localizacao"dist);
    info_(playeridsss);
    SetarCheckPoint(playeridLixo[ii][lixoX], Lixo[ii][lixoY], Lixo[ii][lixoZ], 3.0);
    checklixo[playerid] = 1;
    return 1;


Seu código está extremamente confuso e sem sentido em diversas partes, sempre mantenha seu código organizado, bem documentado e com nomenclatura correta de variáveis e funções.


RE: Comando não funciona e gera erro no CrashDetect - diggao - 26/10/2023

Obrigado por responder, o problema não estava no código e sim nos lixos que ele busca, coloquei o nome errado, consegui arrumar!

Irei me organizar melhor, muito obrigado White_Blue!!!