[debug] Run time error 4: "Array index out of bounds"
[debug] Accessing element at index 375831900 past array upper bound 1000
[debug] AMX backtrace:
[debug] #0 0034b370 in ?? (1, 869072810, 387008444, 367466648, 375831900) from gm.amx
[debug] #1 0058f5a0 in public dialog_DutyMenu (0, 1, 0, 387658312) from gm.amx
[debug] #2 native CallLocalFunction () from samp-server.exe
[debug] #3 0001e534 in public OnDialogResponse (0, 32700, 1, 0, 387658240) from gm.amx
Acho que o problema está aqui, mas não consigo identificar, código abaixo.
Código:
Dialog:DutyMenu(playerid, response, listitem, inputtext[])
{
if (!response) return 1;
new faction = PlayerInfo[playerid][pFaction];
if (faction == 0 || !IsFactionLegal(faction)) return 1;
switch(listitem)
{
case 0://duty
{
if (CheckAdmin(playerid, ADMIN_LEVEL_1)) return SendErrorMessage(playerid, "Você tem que sair do serviço administrativo.");
if (pTemp[playerid][pTaser]) return SendErrorMessage(playerid, "Você precisa remover a taser.");
if (pTemp[playerid][pPatrol]) return SendErrorMessage(playerid, "Você tem que sair da patrulha (/callsign).");
if (!IsPlayerAtUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
if (!PlayerInfo[playerid][pOnDuty])
{
if (PlayerInfo[playerid][pPlayerWeapon])
{
if (CheckInv(playerid)) cmd::putgun(playerid, "");
else return SendErrorMessage(playerid, "Coloque as armas no inventário primeiro.");
}
SetPVarInt(playerid, #pDelay, 1);
new count;
for(new i; i < MAX_INV_SLOTS; i++)
{
if (inventory_items[Inventory[playerid][i][pInvItem]][itemType] != ITEM_TYPE_WEAPON &&
inventory_items[Inventory[playerid][i][pInvItem]][itemType] != ITEM_TYPE_AMMO) continue;
SetPVarInt(playerid, #pDelay, 0);
SendAdmMessage("%s tem um grande número de armas no inventário. [AVISO]", GetNameEx(playerid));
return SendErrorMessage(playerid, "Você tem muitas armas/munições! (Você só pode colocar em uma gaveta: 5 Itens)");
}
if (IsFactionPolice(faction))
{
SendNearbyMessage(Range_Normal, playerid, COLOR_PURPLE, "%s %s pegou seu distintivo em seu armário.", GetRankName(playerid), GetNameWithMask(playerid));
}
if (IsPlayerAttachedObjectSlotUsed(playerid, 5)) RemovePlayerAttachedObject(playerid, 5);
if (IsPlayerAttachedObjectSlotUsed(playerid, 6)) RemovePlayerAttachedObject(playerid, 6);
if (IsPlayerAttachedObjectSlotUsed(playerid, 7)) RemovePlayerAttachedObject(playerid, 7);
new copsitems = 0, playersitems = 0;
for(new i = 0; i < MAX_INV_SLOTS; i++)
{
if (i < MAX_COP_SLOTS) if (PlayerInfo[playerid][pCopItem][i]) copsitems++;
if (!Inventory[playerid][i][pInvItem]) playersitems++;
}
if (playersitems - copsitems >= 0)
{
for(new i = 0; i < MAX_COP_SLOTS; i++)
{
if (PlayerInfo[playerid][pCopItem][i])
{
new slotid = GetInvNextSlot(playerid);
if (slotid == -1) continue;
PlayerInfo[playerid][pCopItem][i] = 0;
PlayerInfo[playerid][pCopQ][i] = 0;
PlayerInfo[playerid][pCopEx][i] = 0;
PlayerInfo[playerid][pCopS][i] = 0;
}
}
else return SendErrorMessage(playerid, "Você não pode tirar nada de seu armário, seu inventário está cheio.");
if (IsFactionPolice(faction))
{
SendNearbyMessage(Range_Normal, playerid, COLOR_PURPLE, "%s %s coloca seu distintívo no armário", GetRankName(playerid), GetNameWithMask(playerid));
}
return Save_User(playerid);
}
case 1:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Você deve estar em serviço.");
if (!IsPlayerAtUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
if (PlayerInfo[playerid][pSwatDuty]) return SendErrorMessage(playerid, "Coloque o traje de S.W.A.T.");
if (IsFactionPolice(faction))
{
new submes[16],
mes[sizeof(police_skins)*sizeof(submes)];
for(new i = 0; i < sizeof(police_skins); i++)
{
format(submes, sizeof(submes), "%i\tID: %i\n", police_skins[i], i);
strcat(mes, submes);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else if (IsFactionMedic(faction) || IsFactionFire(faction))
{
new submes[16], mes[sizeof(fd_skins)*sizeof(submes)];
for(new i = 0; i < sizeof(fd_skins); i++)
{
format(submes, sizeof(submes), "%i\tID: %i\n", fd_skins[i], i);
strcat(mes, submes);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else if (IsFactionDocs(faction))
{
new mes[sizeof(docs_skins)*128];
for(new i = 0; i < sizeof(docs_skins); i++)
{
format(mes, sizeof(mes), "%s%i\tID: %i\n", mes, docs_skins[i], docs_skins[i]);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else if (IsFactionCity(faction))
{
new submes[128], mes[sizeof(city_skins)*sizeof(submes)];
for(new i = 0; i < sizeof(city_skins); i++)
{
format(submes, sizeof(submes), "%i\tID: %i\n", city_skins[i], i);
strcat(mes, submes);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else SendErrorMessage(playerid, "Esta função não está disponível para sua facção.");
}
case 2:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Primeiro você precisa entrar em serviço.");
if (!IsPlayerAtUniform(playerid) && !IsPlayerAtSecondUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vertiario.");
if (IsFactionPolice(faction))
{
return Dialog_Show(playerid, LSPDArmoury, DIALOG_STYLE_LIST, "Equipamentos & armas", "• Rádio\n• Armas\n• S.W.A.T Equipamento", "Selecionar", "Voltar");
}
else if (IsFactionDocs(faction))
{
return Dialog_Show(playerid, DOCSGUN, DIALOG_STYLE_LIST, "Armas", "• Rádio\n• Cacetete\n• Spray de pimenta\n• Desert Eagle ( .50AE .ext )\n\t{ffc46a}- Pegar mais cartuchos ( .50AE .ext )\n{FFFFFF}• MP5 ( 9x19mm .ext )\n\t{ffc46a}- Pegar mais cartuchos ( 9x19mm .ext )\n{FFFFFF}• Shotgun ( 12-G BIRDSHOT )\n\t{ffc46a}- Pegar mais cartuchos ( 12-G BIRDSHOT )\n\t{ffc46a}- Pegar munição não letal ( 12-G BEANBAG )\n{FFFFFF}• М4 ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar mais cartuchos ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar munição não letal ( 5.56x45mm (rubber) )\n{FFFFFF}• Sniper Rifle (7.62x51mm)\n\t{ffc46a}- Pegar mais cartuchos ( 7.62x51mm )\n{FFFFFF}• Газовая граната\n• Фотокамера\n{FF6347}• Entregar todas as armas", "Selecionar", "Cancelar");
}
else if (IsFactionCity(faction))
{
return Dialog_Show(playerid, CITYGUN, DIALOG_STYLE_LIST, "Armas", "• Rádio\n• Desert Eagle ( .50AE .ext )\n\t{ffc46a}- Pegar mais cartuchos ( .50AE .ext )\n{FFFFFF}• MP5 ( 9x19mm .ext )\n\t{ffc46a}- Pegar mais cartuchos ( 9x19mm .ext )\n{FFFFFF}• М4 ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar mais cartuchos ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar munição não letal ( 5.56x45mm (rubber) )\n{FF6347}• Entregar todas as armas", "Selecionar", "Cancelar");
}
else if (IsFactionFire(faction) || IsFactionMedic(faction))
{
return Dialog_Show(playerid, FDArmoury, DIALOG_STYLE_LIST, "Equipamento", "• Rádio\n• Motosserra\n• Extintor de incêndio\n{FF6347}• Entregar todos os equipamentos", "Selecionar", "Voltar");
}
}
case 3:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Primeiro você precisa entrar em serviço.");
if (!IsFactionLegal(faction)) return SendErrorMessage(playerid, "Você deve ser um policial/paramédico.");
if (!IsPlayerAtUniform(playerid) && !IsPlayerAtSecondUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
if (IsFactionMedic(faction) || IsFactionFire(faction)) SetPlayerArmour(playerid, 50.0);
else SetPlayerArmour(playerid, 100.0);
SendSyntaxMessage(playerid, "Você coloca um colete à prova de balas.");
cmd::duty(playerid, "");
}
case 4:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Primeiro você precisa entrar em serviço (/duty).");
if (!IsPlayerAtUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
Quando uma string passa do tamanho do chat, ela corta ou extrapola a tela. São várias as formas se fazer essemétodo.
Usando formatação de texto
Código PHP:
new PrimeiraLinha[120], SegundaLinha[120]; //Criando as variáveis;
if(strlen(texto) > 64) //Verificando se o texto possui mais de 64 caracteres, se sim, será cortada; { format(PrimeiraLinha, sizeof(PrimeiraLinha), "%.64s...", texto);//O ".64" corta o texto do começo até o caractere nessa posição; format(SegundaLinha, sizeof(SegundaLinha), "...%s", texto[64]);//O "texto[64]" irá cortar o texto no caractere 64 até o final. SendClientMessage(playerid, -1, PrimeiraLinha); SendClientMessage(playerid, -1, SegundaLinha); } else //Caso não tenha mais que 64 caracteres; { SendClientMessage(playerid, -1, texto);//Aqui envia diretamente o texto. }
Usando o strdel
Código PHP:
new SegundaLinha[120];//Novamente criando as variáveis;
if(strlen(texto) > 64)//Novamente verificando se o texto é maior que 64; { format(SegundaLinha, sizeof(SegundaLinha), texto[64]);//Irá definir a segunda linha como tudo o que tiver depois do caractere 64; strdel(texto, 64, strlen(texto));//Irá deletar do caractere 64 até o último caractere que estiver armazenado no texto; SendClientMessage(playerid, -1, texto); SendClientMessage(playerid, -1, SegundaLinha); } else { SendClientMessage(playerid, -1, texto); }
Salve tropa , blz ? Aki e o Buldog_Scripter , e meu Segundo tópico , vocês falaram para eu por no pasterbin o código aí eu coloquei , esse sistema e de celular , que tem sistema de discord , e música em dialog , só falta você pós o sistema de SMS , e ligar , aí você põem o seu próprio , o comando e /celular
Desculpa família não sou muito bom , de palavras , mais o importante e que eu fiz de coração ♥️
Gostaram ? Então galera não sou muito bom de palavras , mais o sistema tá bem legal , valeu aí , sou novo no pawno , tô estudando ele ainda
Opa galera beleza ? Então prazer sou o Buldog , estou estudando scripter , e criei uma profissão do 0 , bem legal , e decidir trazer eles para vocês desfrutarem , como eu disse sou novo no scripter , e se tiver algum erro me fale , e de sua nota , então o emprego de hoje e um emprego de lenhador , com um sistema bem básico , então os comandos são:
/irlenhador = Você telerpota até o chekpoint de pegar o emprego
SendClientMessage(playerid,ROSA,"Digite /tl para inicia o expediente");
return 1;
}
CMD:vmadeiras(playerid)
{
if(!IsPlayerInRangeOfPoint(playerid, 2.0, 2351.8916,-647.6671,128.0547)) return SendClientMessage(playerid,VERMELHO,"[ERRO:] Você não está no local correto!");
SendClientMessage(playerid,AMARELO,"Parabens Voce recebeu 800 reais por 4 madeiras");
Queria aprende a ligar meu banco de dados no localhost, quem tiver algum video ensinando eu ficaria muito feliz ce compartilhasse (Estou tentando aprende a criar um serve)
OLÁ , ESTOU COM UM PROBLEMA QUE QUANDO EU USO O COMANDO /TRAB E ENTRO NO MODO TRABALHO FICO CONGELADO
ALGUEM SABE CORRIGIR ESSE ERRO ?
OU UM COMANDO NOVO COM A MESMA FUNÇAO ?
bom estou usando o vscode porem minha gm tem algumas acentuações e caracteres especiais e no vscode fica com um � no lugar dos caracteres e eu não faço a mínima ideia de como resolva. se alguem souber e puder me ajudar agradeço!