Portal SAMP
[Ajuda] Inventario em dialog nao abre - 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] Inventario em dialog nao abre (/showthread.php?tid=2226)



Inventario em dialog nao abre - MagnatuS - 23/03/2022

bom eu criei um sistema de inventario em dialog mais quando o player digite comando para abrir ele nao abre.

Código:
AbrirInventarioDialog(playerid)
{
    InventarioAberto[playerid] = true;

    ProxDetector(30.0, playerid, fmat_return("* %s abriu o inventário.", PlayerGetName(playerid)), COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);

    MostrarInventarioDialog(playerid);
    return 1;
}

MostrarInventarioDialog(playerid)
{
    new str[100], strtitulo[70], strtotal[4000];

    format(strtitulo, sizeof(strtitulo), "Inventario de: %s", PlayerGetName(playerid));

    format(str, sizeof(str), "Slot\tItem\tQuantidade\n");
    strcat(strtotal, str);

    for(new i = 0; i < 72; i++)
    {
        if(Inventory[playerid][I_SLOT][i] != -1) continue;
        strcat(strtotal, fmat_return("{ffffff}%d\t{ffff00}%s\t{ffffff}%d\n", i, GetInvName(Inventory[playerid][I_SLOT][i], Inventory[playerid][I_UNITY][i]), Inventory[playerid][I_UNITY][i]));
    }
    ShowPlayerDialog(playerid, DIALOG_INVENTARIO, DIALOG_STYLE_TABLIST_HEADERS, strtitulo, strtotal, "Ir", "Fechar");
    return 1;
}

stock FecharInventarioDialog(playerid)
{
    new gstring[50];
    format(gstring, sizeof(gstring), "* %s Fechou seu inventário.", PlayerGetName(playerid));
    ProxDetector(30.0, playerid, gstring, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
    InventarioAberto[playerid] = false;
    CancelSelectTextDraw(playerid);
    return 1;
}
fica aparecendo assim no serve.log

Código:
[11:05:36] [debug] Run time error 4: "Array index out of bounds"
[11:05:36] [debug] AMX backtrace:
[11:05:36] [debug] #0 00503aa4 in ?? (-1, 0) from GM.amx
[11:05:36] [debug] #1 0057bc3c in ?? (0) from GM.amx
[11:05:36] [debug] #2 0057b90c in ?? (0) from GM.amx
[11:05:36] [debug] #3 004545e4 in public pc_cmd_inventario (0, 37353184) from GM.amx
[11:05:36] [debug] #4 0042e5a0 in public OnPlayerKeyStateChangeAS (0, 131072, 0) from GM.amx
[11:05:36] [debug] #5 0006ebf8 in public OnPlayerKeyStateChange (0, 131072, 0) from GM.amx



RE: Inventario em dialog nao abre - xbruno1000x - 23/03/2022

Como está o trecho de abrir inventário na OnPlayerKeyStateChange?


RE: Inventario em dialog nao abre - MagnatuS - 23/03/2022

(23/03/2022 23:02)xbruno1000x Escreveu: Como está o trecho de abrir inventário na OnPlayerKeyStateChange?


Código:
if(newkeys & 131072)
    {
        if(RespSequestro[playerid] != INVALID_PLAYER_ID)
        {
            if(TimerCancelarSequestro[playerid] != -1)
                KillTimer(TimerCancelarSequestro[playerid]), TimerCancelarSequestro[playerid] = -1;
            if(TimerResetSequestro[playerid] != -1)
                KillTimer(TimerResetSequestro[playerid]), TimerResetSequestro[playerid] = -1;

            CancelarSequestro(playerid);
            return 1;
        }
        if(SendoAbordado[playerid])
        {
            CancelarAbordagem(playerid);
            return 1;
        }
        //Quanto o COP apertar 'N'
        if(IsACop(playerid) && COP_Abordando[playerid] != -1)
        {
            new giveid = COP_Abordando[playerid];
            if(EmAbordagemAceita[giveid])
            {
                SendoAbordado[giveid] = false;
                EmAbordagemAceita[giveid] = false;
                PLAYER_SendoAbordado[giveid] = -1;
                COP_Abordando[playerid] = -1;
                TogglePlayerControllable(giveid, true);
                ClearAnimations(giveid, 1);
                SetCameraBehindPlayer(playerid);
                SendClientMessage(playerid, COLOR_LIGHTRED, "* Abordagem finalizada.");
                SendClientMessage(giveid, COLOR_LIGHTRED, "* Abordagem finalizada.");
                for(new i; i < sizeof(TDAbordar); i ++)
                    TextDrawHideForPlayer(playerid, TDAbordar[i]);
                for(new i; i < sizeof(TDAbordar_COP); i ++)
                    TextDrawHideForPlayer(playerid, TDAbordar_COP[i]);
                return 1;
            }
        }
        if(UserInfo[playerid][pEvento])
        {
            if(EventoInfo[evento_carregado] == evento_Battleground && EventoInfo[eventobattle_iniciado])
            {
                ShowBattleInv(playerid);
            }
            else
                return SendClientMessage(playerid, 0xB22222FF, "* Você não pode abrir o inventário em um evento.");
        }
        if(PlayerGinasio[playerid] != ginasio_invalido)
            return SendClientMessage(playerid, COLOR_ERRO, "Você não pode abrir seu inventário dentro do ginásio.");
        else
        {
            ReturnCommand(inventario);
        }
    }



RE: Inventario em dialog nao abre - xbruno1000x - 24/03/2022

Não vi nada de errado nas public's e stock's. Será que a strtotal[4000] não está sendo superada? Testa o código com um looping menor, talvez a variável tenha que armazenar valor maior que 4000 e está bugando.


RE: Inventario em dialog nao abre - MagnatuS - 24/03/2022

(24/03/2022 01:39)xbruno1000x Escreveu: Não vi nada de errado nas public's e stock's. Será que a strtotal[4000] não está sendo superada? Testa o código com um looping menor, talvez a variável tenha que armazenar valor maior que 4000 e está bugando.

já tentei de tudo e nada não aparece continua so mostrando mensagem que abriu inventario e nao abre dialog


RE: Inventario em dialog nao abre - k2bi_YT - 24/03/2022

Teste assim
Código PHP:
AbrirInventarioDialog(playerid)
{
    
InventarioAberto[playerid] = true;

    
ProxDetector(30.0playeridfmat_return("* %s abriu o inventário."PlayerGetName(playerid)), COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);

    
MostrarInventarioDialog(playerid);
    return 
1;
}

MostrarInventarioDialog(playerid)
{
    new 
str[100], strtitulo[70], strtotal[4000];

    
format(strtitulosizeof(strtitulo), "Inventario de: %s"PlayerGetName(playerid));
    
strcat(strtotal"Slot\tItem\tQuantidade\n");
    for(new 
072i++)
    {
        if(
Inventory[playerid][I_SLOT][i] == -1) continue;
        
format(strsizeof(str), "{ffffff}%d\t{ffff00}%s\t{ffffff}%d\n"GetInvName(Inventory[playerid][I_SLOT][i], Inventory[playerid][I_UNITY][i]), Inventory[playerid][I_UNITY][i]);
        
strcat(strtotalstr);
    }
    
ShowPlayerDialog(playeridDIALOG_INVENTARIODIALOG_STYLE_TABLIST_HEADERSstrtitulostrtotal"Ir""Fechar");
    return 
1;
}

stock FecharInventarioDialog(playerid)
{
    new 
gstring[50];
    
format(gstringsizeof(gstring), "* %s Fechou seu inventário."PlayerGetName(playerid));
    
ProxDetector(30.0playeridgstringCOLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
    
InventarioAberto[playerid] = false;
    
CancelSelectTextDraw(playerid);
    return 
1;


Caso ainda persista o erro, mostra o comando de abrir o inventario e o GetInvName