Portal SAMP
[Ajuda] sistema bug - 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] sistema bug (/showthread.php?tid=1464)



sistema bug - MagnatuS - 28/07/2021

bom criei sistema de lixeira para os players add itens no lixo e quando player usa para descartar item na lixeira aparece esse bug no log_serve

Código PHP:
[16:55:40] [debugRun time error 4"Array index out of bounds"
[16:55:40] [debugAMX backtrace:
[
16:55:40] [debug#0 001503c4 in public DR_OnDialogResponse (0, 384, 1, 4, 55632640) from Projeto.amx
[16:55:40] [debug#1 0006e734 in public OnDialogResponse (0, 384, 1, 4, 55632640) from Projeto.amx 

e codigo scripters 

Código PHP:
case DIALOG_LIXO:
        {
            if(response)
            {
                switch(listitem)
                {
                    case 0:
                    {
                        foreach(new idLixeiras)
                        {
                            if(IsPlayerInRangeOfPoint(playerid1.5LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2]))
                            {
                                SetPlayerLixeira(playeridid);
                            }
                        }
                    }
                    case 1:
                    {
                        new str[1000], linha[20];
                        format(linha,sizeof(linha), "Item\tQuantidade\n");
                        strcat(strlinha);
                        for(new iMAX_SLOTS_INV++)
                        {
                            if(Inventory[playerid][I_SLOT][i] != -1)
                            strcat(strfmat_return("\n%s\t%i\n"Itens[Inventory[playerid][I_SLOT][i]][item_nome], Inventory[playerid][I_UNITY][i]));
                        }
                        
ShowPlayerDialog(playeridDIALOG_ADD_LIXO5"Inventario"str"Jogar""Voltar");
                        
                    
}
                    case 2:
                    {
                        new str[1000], linha[20];
                        format(linha,sizeof(linha), "Item\tQuantidade\n");
                        strcat(strlinha);
                        foreach(new idLixeiras)
                        {
                            if(IsPlayerInRangeOfPoint(playerid1.5LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2]))
                            {
                            
                                
for(new iMAX_LIXEIRAS_SLOT++)
                                strcat(strfmat_return("\n%s\t%i\n"Itens[LixeiraInfo[id][Lixos][i]][item_nome], LixeiraInfo[id][UniLixos][i]));
                            }
                        }
                        ShowPlayerDialog(playeridDIALOG_PEGAR_LIXO5"Itens nessa lixeira"str"Pegar""Voltar");
                    }
                    case 3:
                    {
                        if(GetPlayerProf(playeridEmprego_Lixeiro))
                        {
                            if(LixoMissao[playerid])
                            {
                                if(!SegurandoLixo[playerid])
                                {
                                    new Float:XFloat:YFloat:Z;
                                    GetVehicleBoot(CaminhaoLixo[playerid], XYZ);
                                    if(GetPlayerDistanceFromPoint(playeridXYZ) >= 30)
                                       return SendClientMessage(playeridCOLOR_ERRO"Você não está próximo do caminhão que você iniciou a missão.");
                                       
                                    
for(new 0!= MAX_LIXEIRAS_SLOTx++)
            
                        {
                                        foreach(new idLixeiras)
                                        {
                                            LixeiraInfo[id][Lixos][x] = 0;
                                            LixeiraInfo[id][UniLixos][x] = 0;
                                            Atualizar3DLixeiras(id);
                                            //SalvarLixeira(id);
                                        }
                                    }
                                    ApplyAnimation(playerid"CARRY""liftup105"4.100000);
                                    SetPlayerAttachedObject(playerid9126460.2220.0240.1281.90, -90.00.00.5,0.50.5);
                                    SegurandoLixo[playerid] = true;
                                    
                                    showBalao
(playerid"Coloque o saco de lixo dentro do caminhao."4000);
                                    SacosDeLixo[playerid]--;
                                    SetPlayerCheckpoint(playeridXYZ1.5);
                                    CP[playerid] = MarcandoCaminhao;
                                }
                            }
                        }
                        return SendClientMessage(playeridCOLOR_ERRO"Você não é um lixeiro.");
                    }
                }
            }
        


Código PHP:
case DIALOG_PEGAR_LIXO:
        {
        
    if(!response)
            {
                ShowPlayerDialog(playeridDIALOG_LIXODIALOG_STYLE_LIST"Escolhe uma opcao""Se esconder    Voce se esconde na lixeira\nDescartar item    Jogar item do inventario no lixo\nRevirar lixo    Area disponivel para mendigos\nEnsacar lixos    Area disponivel para lixeiros""Confirmar""Cancelar");
                return 
true;
            }
            for(new 0!= MAX_LIXEIRAS_SLOTx++)
            {
    
            if(listitem == x)
                {
                    foreach(new idLixeiras)
                    {
                    
    if(IsPlayerInRangeOfPoint(playerid1.5LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2]))
                    
    {
                            
  if(LixeiraInfo[id][Lixos][x] == 0) return SendClientMessage(playeridCOLOR_LIGHTRED"slot da lixeira vazia.");

                            
  if(LixeiraInfo[id][Lixos][x] == 116)SendClientMessageToAll(0x19EA65AAfmat_return("[LIXEIRA]:{FFFFFF} %s encontrou presente {19EA65}SACOLA DE PREVISÕES{FFFFFF} na Lixeiras %i."PlayerGetName(playerid), id));
                            
  
                              AddItem
(playeridLixeiraInfo[id][Lixos][x], LixeiraInfo[id][UniLixos][x]);
                              ProxDetector(30.0playeridfmat_return("* %s pegou item %s da lixeira."PlayerGetName(playerid), Itens[LixeiraInfo[id][Lixos][x]][item_nome]), COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                              LixeiraInfo[id][Lixos][x] = 0;
                              LixeiraInfo[id][UniLixos][x] = 0;
                              Atualizar3DLixeiras(id);
                              //SalvarLixeira(id);
                    
    }
                    }
                }
            }
        }
        case 
DIALOG_ADD_LIXO:
        {
        
    if(!response)
            {
                ShowPlayerDialog(playeridDIALOG_LIXODIALOG_STYLE_LIST"Escolhe uma opcao""Se esconder    Voce se esconde na lixeira\nDescartar item    Jogar item do inventario no lixo\nRevirar lixo    Area disponivel para mendigos\nEnsacar lixos    Area disponivel para lixeiros""Confirmar""Cancelar");
                return 
true;
            }
            for(new 0!= MAX_SLOTS_INVx++)
            {
            
    if(listitem == x)
                {
                    foreach(new idLixeiras)
                    {
                    
    if(IsPlayerInRangeOfPoint(playerid1.5LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2]))
                        {
                            
  AddItemLixo(idInventory[playerid][I_SLOT][x], Inventory[playerid][I_UNITY][x]);
                              ProxDetector(30.0playeridfmat_return("* %s jogou item %s na lixeira."PlayerGetName(playerid), Itens[Inventory[playerid][I_SLOT][x]][item_nome]), COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);

                            
  Inventory[playerid][I_SLOT][x] = 0;
                              Inventory[playerid][I_UNITY][x]= 0;
                              
                              AtualizarSlot
(playeridx);
                              Atualizar3DLixeiras(id);
                    
    }
                    }
                }
            }
        } 



RE: sistema bug - xbruno1000x - 28/07/2021

Algum problema ocorre na prática? Se não ocorre, vida que segue...

Caso ainda queira resolver, esse aviso é sobre algum array retornando valores acima do tamanho declarado no script. Vai ter que dar uma revisada até encontrar.


RE: sistema bug - MagnatuS - 29/07/2021

(28/07/2021 21:26)xbruno1000x Escreveu: Algum proble9ma ocorre na prática? Se não ocorre, vida que segue...

Caso ainda queira resolver, esse aviso é sobre algum array retornando valores acima do tamanho declarado no script. Vai ter que dar uma revisada até encontrar.

Sim ele não abre dialog ou abre e não faz função dele tendeu


RE: sistema bug - Iannn - 09/12/2021

Consegue enviar o sistema completo?


RE: sistema bug - SrBlue - 09/12/2021

[16:55:40] [debug] Run time error 4: "Array index out of bounds"

o erro esta ocorrendo no loop, principalmente no " foreach(new id: Lixeiras)"

verificou se o interator LIXEIRAS possui os itens?
se não possui tenta fazer um loop simples dentro no ongamemodeint e adicione...
ou simplesmente use o o loop for.


RE: sistema bug - ProKillerPa - 09/12/2021

Boa tarde!

Seu problema está nessa parte do código ( case 3, listitem 4):

Código PHP:
for(new 0!= MAX_LIXEIRAS_SLOTx++)
                                    {
                                        foreach(new 
idLixeiras)
                                        {
                                            
LixeiraInfo[id][Lixos][x] = 0;
                                            
LixeiraInfo[id][UniLixos][x] = 0;
                                            
Atualizar3DLixeiras(id);
                                            
//SalvarLixeira(id);
                                        
}
                                    } 

Soluções: Não é possível eu determinar qual é o problema exato sem ter o código da ENUM e as definições da array. Então há 2 suposições: a Enum LixeiraInfo tem menos arrays definidas do que o total de Lixeiras criadas ( Veja só: Se voce acrescenta valores X Y Z na array Lixeiras e não acrescenta na Enum LixeiraInfo o montante igual, você estará acessando um numero da array que não existe e aí ocorre o crash. ( Muito provavelmente é esse o problema com voce ). Outra suposição é que você possui menos arrays de Lixos[x] e UniLixos[x] do que definidas em MAX_LIXEIRAS_SLOT, fazendo o mesmo problema do caso anterior.
Verifique também se o seu plugin crashdetect está na ultima versão, pois normalmente o plugin mostra qual array estrapolou o limite e qua era o limite máximo da mesma, facilitando a identificação.

Abraços