Portal SAMP
[Ajuda] Dialog não fecha - 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] Dialog não fecha (/showthread.php?tid=4837)



Dialog não fecha - Whaispe - 10/07/2024

Alguém pode me ajudar com essas dialog, ela simplesmente quando clico em "fechar" é como tivesse clicando em "selecionar" tipo os dois botao estao fazendo a mesma coisa que é seleciona mas o fechar por algum motivo não está fechando o dialog não entendo muito de dialogs ou se é as return que tá errada sla
Código:
CMD:modos(playerid)
{
    if(Logado[playerid] < 1) return SCM(playerid, VERMELHO, "ERROR |{ffffff} Voce nao pode usar comandos sem esta logado!!");
    ShowPlayerDialog(playerid, Dialog_Modos, DIALOG_STYLE_LIST, "Modos:", "Fuga\nPvP\nDM\nAcademy", "Selecionar", "Fechar");
    return 1;
}

if(dialogid == Dialog_Modos)
    {
        if(listitem == 0)
        {
            new spawn = random(sizeof(Sfuga));
            SetPlayerPos(playerid, Sfuga[spawn][0], Sfuga[spawn][1], Sfuga[spawn][2]);
            ResetPlayerWeapons(playerid);
            SetPlayerVirtualWorld(playerid, 400);
            SetPlayerArmour(playerid, 10000000);
            SetPlayerHealth(playerid, 10000000);
            SetPlayerInterior(playerid, 0);
            g_InArena[playerid] = false;
            g_InFuga[playerid] = true;
            SCM(playerid, -1, "{ff0000}WIZE | Voce foi teleportado para o mundo fugas!!");
        }
        else if(listitem == 1)
        {
            SetPlayerVirtualWorld(playerid, 500);
            ShowPlayerDialog(playerid, Dialog_Arenas, DIALOG_STYLE_LIST, "Arenas:", "Arena M4\nArena Ak47\nArena Desert\nArena Sniper\nArena MP5\nArena FVL\nArena Rush\nArena Pc\nArena Mobile", "Selecionar", "Fechar");
        }
        else if(listitem == 2)
        {
            SetPlayerVirtualWorld(playerid, 600);
        }
        else if(listitem == 3)
        {
            SetPlayerVirtualWorld(playerid, 700);
        }
    return 1;
    }



RE: Dialog não fecha - Alfarr Heimrik - 11/07/2024

(10/07/2024 22:26)Whaispe Escreveu: Alguém pode me ajudar com essas dialog, ela simplesmente quando clico em "fechar" é como tivesse clicando em "selecionar" tipo os dois botao estao fazendo a mesma coisa que é seleciona mas o fechar por algum motivo não está fechando o dialog não entendo muito de dialogs ou se é as return que tá errada sla


Tenta dessa forma aqui:
Adicionei o if(response) que verifica se o player escolheu o botão 1 da dialog.
Código PHP:
if(dialogid == Dialog_Modos) {
    if(
response) {
        if(
listitem == 0) {
        
        new spawn random(sizeof(Sfuga));
        
        SetPlayerPos(playeridSfuga[spawn][0], Sfuga[spawn][1], Sfuga[spawn][2]);
        
        ResetPlayerWeapons(playerid);
        
        SetPlayerVirtualWorld(playerid400);
        
        SetPlayerArmour(playerid10000000);
        
        SetPlayerHealth(playerid10000000);
        
        SetPlayerInterior(playerid0);
        
        g_InArena[playerid] = false;
        
        g_InFuga[playerid] = true;
        
        SCM(playerid, -1"{ff0000}WIZE | Voce foi teleportado para o mundo fugas!!");
        
    }
        
    if(listitem == 1) {
        
        SetPlayerVirtualWorld(playerid500);
        
        ShowPlayerDialog(playeridDialog_ArenasDIALOG_STYLE_LIST"Arenas:""Arena M4\nArena Ak47\nArena Desert\nArena Sniper\nArena MP5\nArena FVL\nArena Rush\nArena Pc\nArena Mobile""Selecionar""Fechar");
        
    }
        
    if(listitem == 2) {
        
        SetPlayerVirtualWorld(playerid600);
        
    }
        
    if(listitem == 3) {
        
        SetPlayerVirtualWorld(playerid700);
        
    }
        }
    }
    return 
1;




RE: Dialog não fecha - Cifra Modder - 11/07/2024

(10/07/2024 22:26)Whaispe Escreveu: Alguém pode me ajudar com essas dialog, ela simplesmente quando clico em "fechar" é como tivesse clicando em "selecionar" tipo os dois botao estao fazendo a mesma coisa que é seleciona mas o fechar por algum motivo não está fechando o dialog não entendo muito de dialogs ou se é as return que tá errada sla

CMD:modos(playerid)
{
    if(Logado[playerid] < 1) return SCM(playerid, VERMELHO, "ERROR |{ffffff} Voce nao pode usar comandos sem esta logado!!");
    ShowPlayerDialog(playerid, Dialog_Modos, DIALOG_STYLE_LIST, "Modos:", "Fuga\nPvP\nDM\nAcademy", "Selecionar", "Fechar");
    return 1;
}

if(dialogid == Dialog_Modos)
    {
        if(listitem == 0)
        {
            new spawn = random(sizeof(Sfuga));
            SetPlayerPos(playerid, Sfuga[spawn][0], Sfuga[spawn][1], Sfuga[spawn][2]);
            ResetPlayerWeapons(playerid);
            SetPlayerVirtualWorld(playerid, 400);
            SetPlayerArmour(playerid, 10000000);
            SetPlayerHealth(playerid, 10000000);
            SetPlayerInterior(playerid, 0);
            g_InArena[playerid] = false;
            g_InFuga[playerid] = true;
            SCM(playerid, -1, "{ff0000}WIZE | Voce foi teleportado para o mundo fugas!!");
        }
        else if(listitem == 1)
        {
            SetPlayerVirtualWorld(playerid, 500);
            ShowPlayerDialog(playerid, Dialog_Arenas, DIALOG_STYLE_LIST, "Arenas:", "Arena M4\nArena Ak47\nArena Desert\nArena Sniper\nArena MP5\nArena FVL\nArena Rush\nArena Pc\nArena Mobile", "Selecionar", "Fechar");
        }
        else if(listitem == 2)
        {
            SetPlayerVirtualWorld(playerid, 600);
        }
        else if(listitem == 3)
        {
            SetPlayerVirtualWorld(playerid, 700);
        }
    return 1;
    }

Não precisa de else para verificar as outras categorias.

Tente assim:
Código:
if(dialogid == Dialog_Modos)
{
    if(response)
    {
        if(listitem == 0)
          {
              new spawn = random(sizeof(Sfuga));
               SetPlayerPos(playerid, Sfuga[spawn][0], Sfuga[spawn][1], Sfuga[spawn][2]);
               ResetPlayerWeapons(playerid);
               SetPlayerVirtualWorld(playerid, 400);
               SetPlayerArmour(playerid, 10000000);
               SetPlayerHealth(playerid, 10000000);
               SetPlayerInterior(playerid, 0);
               g_InArena[playerid] = false;
               g_InFuga[playerid] = true;
               SCM(playerid, -1, "{ff0000}WIZE | Voce foi teleportado para o mundo fugas!!");
          }
          if(listitem == 1)
          {
               SetPlayerVirtualWorld(playerid, 500);
                ShowPlayerDialog(playerid, Dialog_Arenas, DIALOG_STYLE_LIST, "Arenas:", "Arena M4\nArena Ak47\nArena Desert\nArena Sniper\nArena MP5\nArena FVL\nArena Rush\nArena Pc\nArena Mobile", "Selecionar", "Fechar");
          }
          if(listitem == 2)
          {
               SetPlayerVirtualWorld(playerid, 600);
          }
          if(listitem == 3)
          {
               SetPlayerVirtualWorld(playerid, 700);
          }
    }
     return 1;
}



RE: Dialog não fecha - Calasans - 12/07/2024

(11/07/2024 18:42)Cifra Modder Escreveu:
(10/07/2024 22:26)Whaispe Escreveu: Alguém pode me ajudar com essas dialog, ela simplesmente quando clico em "fechar" é como tivesse clicando em "selecionar" tipo os dois botao estao fazendo a mesma coisa que é seleciona mas o fechar por algum motivo não está fechando o dialog não entendo muito de dialogs ou se é as return que tá errada sla

CMD:modos(playerid)
{
    if(Logado[playerid] < 1) return SCM(playerid, VERMELHO, "ERROR |{ffffff} Voce nao pode usar comandos sem esta logado!!");
    ShowPlayerDialog(playerid, Dialog_Modos, DIALOG_STYLE_LIST, "Modos:", "Fuga\nPvP\nDM\nAcademy", "Selecionar", "Fechar");
    return 1;
}

if(dialogid == Dialog_Modos)
    {
        if(listitem == 0)
        {
            new spawn = random(sizeof(Sfuga));
            SetPlayerPos(playerid, Sfuga[spawn][0], Sfuga[spawn][1], Sfuga[spawn][2]);
            ResetPlayerWeapons(playerid);
            SetPlayerVirtualWorld(playerid, 400);
            SetPlayerArmour(playerid, 10000000);
            SetPlayerHealth(playerid, 10000000);
            SetPlayerInterior(playerid, 0);
            g_InArena[playerid] = false;
            g_InFuga[playerid] = true;
            SCM(playerid, -1, "{ff0000}WIZE | Voce foi teleportado para o mundo fugas!!");
        }
        else if(listitem == 1)
        {
            SetPlayerVirtualWorld(playerid, 500);
            ShowPlayerDialog(playerid, Dialog_Arenas, DIALOG_STYLE_LIST, "Arenas:", "Arena M4\nArena Ak47\nArena Desert\nArena Sniper\nArena MP5\nArena FVL\nArena Rush\nArena Pc\nArena Mobile", "Selecionar", "Fechar");
        }
        else if(listitem == 2)
        {
            SetPlayerVirtualWorld(playerid, 600);
        }
        else if(listitem == 3)
        {
            SetPlayerVirtualWorld(playerid, 700);
        }
    return 1;
    }

Não precisa de else para verificar as outras categorias.

Tente assim:
Código:
if(dialogid == Dialog_Modos)
{
    if(response)
    {
        if(listitem == 0)
          {
              new spawn = random(sizeof(Sfuga));
               SetPlayerPos(playerid, Sfuga[spawn][0], Sfuga[spawn][1], Sfuga[spawn][2]);
               ResetPlayerWeapons(playerid);
               SetPlayerVirtualWorld(playerid, 400);
               SetPlayerArmour(playerid, 10000000);
               SetPlayerHealth(playerid, 10000000);
               SetPlayerInterior(playerid, 0);
               g_InArena[playerid] = false;
               g_InFuga[playerid] = true;
               SCM(playerid, -1, "{ff0000}WIZE | Voce foi teleportado para o mundo fugas!!");
          }
          if(listitem == 1)
          {
               SetPlayerVirtualWorld(playerid, 500);
                ShowPlayerDialog(playerid, Dialog_Arenas, DIALOG_STYLE_LIST, "Arenas:", "Arena M4\nArena Ak47\nArena Desert\nArena Sniper\nArena MP5\nArena FVL\nArena Rush\nArena Pc\nArena Mobile", "Selecionar", "Fechar");
          }
          if(listitem == 2)
          {
               SetPlayerVirtualWorld(playerid, 600);
          }
          if(listitem == 3)
          {
               SetPlayerVirtualWorld(playerid, 700);
          }
    }
     return 1;
}

Não há problemas em utilizar else, isso pode até ser bom para economizar processamento, já que utilizando else as outras opções não serão avaliadas exceto a que ele escolheu.


RE: Dialog não fecha - White_Blue - 12/07/2024

Acontece que você não está definindo o que o botão da dialog deve fazer ao ser pressionado. Ao clicar em qualquer botão, o código da dialog será executado, pois a distinção entre botões não é feita automaticamente. Se você quer que a dialog seja fechada ao clicar no botão 0 (botão direito), basta verificar se o usuário clicou no botão utilizando o parâmetro `response` e retornar 1.

Exemplo:

Código PHP:
if(!response) return 1// Verifica se o valor de response é 0/falso utilizando o operador de negação (também pode ser feito utilizando os operadores de igualdade, caso preferir) e retorna 1 (nesse caso, nada)