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] [debug] Run time error 4: "Array index out of bounds" [16:55:40] [debug] AMX 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 id: Lixeiras) { if(IsPlayerInRangeOfPoint(playerid, 1.5, LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2])) { SetPlayerLixeira(playerid, id); } } } case 1: { new str[1000], linha[20]; format(linha,sizeof(linha), "Item\tQuantidade\n"); strcat(str, linha); for(new i; i < MAX_SLOTS_INV; i ++) { if(Inventory[playerid][I_SLOT][i] != -1) strcat(str, fmat_return("\n%s\t%i\n", Itens[Inventory[playerid][I_SLOT][i]][item_nome], Inventory[playerid][I_UNITY][i])); } ShowPlayerDialog(playerid, DIALOG_ADD_LIXO, 5, "Inventario", str, "Jogar", "Voltar"); } case 2: { new str[1000], linha[20]; format(linha,sizeof(linha), "Item\tQuantidade\n"); strcat(str, linha); foreach(new id: Lixeiras) { if(IsPlayerInRangeOfPoint(playerid, 1.5, LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2])) { for(new i; i < MAX_LIXEIRAS_SLOT; i ++) strcat(str, fmat_return("\n%s\t%i\n", Itens[LixeiraInfo[id][Lixos][i]][item_nome], LixeiraInfo[id][UniLixos][i])); } } ShowPlayerDialog(playerid, DIALOG_PEGAR_LIXO, 5, "Itens nessa lixeira", str, "Pegar", "Voltar"); } case 3: { if(GetPlayerProf(playerid, Emprego_Lixeiro)) { if(LixoMissao[playerid]) { if(!SegurandoLixo[playerid]) { new Float:X, Float:Y, Float:Z; GetVehicleBoot(CaminhaoLixo[playerid], X, Y, Z); if(GetPlayerDistanceFromPoint(playerid, X, Y, Z) >= 30) return SendClientMessage(playerid, COLOR_ERRO, "Você não está próximo do caminhão que você iniciou a missão."); for(new x = 0; x != MAX_LIXEIRAS_SLOT; x++) { foreach(new id: Lixeiras) { LixeiraInfo[id][Lixos][x] = 0; LixeiraInfo[id][UniLixos][x] = 0; Atualizar3DLixeiras(id); //SalvarLixeira(id); } } ApplyAnimation(playerid, "CARRY", "liftup105", 4.1, 0, 0, 0, 0, 0); SetPlayerAttachedObject(playerid, 9, 1264, 6, 0.222, 0.024, 0.128, 1.90, -90.0, 0.0, 0.5,0.5, 0.5); SegurandoLixo[playerid] = true; showBalao(playerid, "Coloque o saco de lixo dentro do caminhao.", 4000); SacosDeLixo[playerid]--; SetPlayerCheckpoint(playerid, X, Y, Z, 1.5); CP[playerid] = MarcandoCaminhao; } } } return SendClientMessage(playerid, COLOR_ERRO, "Você não é um lixeiro."); } } } }
Código PHP: case DIALOG_PEGAR_LIXO: { if(!response) { ShowPlayerDialog(playerid, DIALOG_LIXO, DIALOG_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 x = 0; x != MAX_LIXEIRAS_SLOT; x++) { if(listitem == x) { foreach(new id: Lixeiras) { if(IsPlayerInRangeOfPoint(playerid, 1.5, LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2])) { if(LixeiraInfo[id][Lixos][x] == 0) return SendClientMessage(playerid, COLOR_LIGHTRED, "slot da lixeira vazia.");
if(LixeiraInfo[id][Lixos][x] == 116)SendClientMessageToAll(0x19EA65AA, fmat_return("[LIXEIRA]:{FFFFFF} %s encontrou presente {19EA65}SACOLA DE PREVISÕES{FFFFFF} na Lixeiras %i.", PlayerGetName(playerid), id)); AddItem(playerid, LixeiraInfo[id][Lixos][x], LixeiraInfo[id][UniLixos][x]); ProxDetector(30.0, playerid, fmat_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(playerid, DIALOG_LIXO, DIALOG_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 x = 0; x != MAX_SLOTS_INV; x++) { if(listitem == x) { foreach(new id: Lixeiras) { if(IsPlayerInRangeOfPoint(playerid, 1.5, LixeiraInfo[id][lixeira_pos][0], LixeiraInfo[id][lixeira_pos][1], LixeiraInfo[id][lixeira_pos][2])) { AddItemLixo(id, Inventory[playerid][I_SLOT][x], Inventory[playerid][I_UNITY][x]); ProxDetector(30.0, playerid, fmat_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(playerid, x); 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 x = 0; x != MAX_LIXEIRAS_SLOT; x++) { foreach(new id: Lixeiras) { 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
|