Portal SAMP
[Ajuda] dialog fechando - 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 fechando (/showthread.php?tid=4959)



dialog fechando - fear - 21/01/2025

boa tarde eu estou tentando colocar com que quando eu seleciono a dialog para escolher a profissao ex: policial ou bandido e clica no VOLTAR da dialog e ela retorne para o dialog principal de esocolhas

tentei fazer assim e nao foi.

Código PHP:
        if(response)
        {

            switch(
listitem)
            {
                

                case 
0:
                {
                    
ShowPlayerDialog(playerid,DIALOG_PMVSLADRAO,DIALOG_STYLE_LIST,"{FFF000}ESCOLHA A OPCAO DESEJADA:","Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n","Selecionar","Voltar");
                    }else{
                    new 
string[300];
                    
ShowPlayerDialog(playerid,DIALOG_MODOS,DIALOG_STYLE_TABLIST_HEADERS,"{DCDCDC}ZonePerfect {FFFFFF}- Mundos",string,"Selecionar","-");

                } 



RE: dialog fechando - BitSain - 21/01/2025

Preste atenção na abertura e fechamento de chaves!

Inclusive, isso é um erro:
Código PHP:
// Erro
switch(...) {
    case 
0: {
    }
    else { 
// aqui seria default, não else. (Explicação abaixo)
    
}
}

// Nenhum Erro
switch(...) {
    case 
0: {
    }
    default: { 
// O default é executado somente se nenhuma das condições nos case for satisfeita.
    
}

-- default é exclusivo do switch, o else é exclusivo do if.

* Código corrigido:
Código PHP:
if(response) {
    switch(
listitem) {
        case 
0: {
            
ShowPlayerDialog(playeridDIALOG_PMVSLADRAODIALOG_STYLE_LIST"{FFF000}ESCOLHA A OPÇÃO DESEJADA:""Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n""Selecionar""Voltar");
        }
    }
} else {
    new 
string[300];
    
ShowPlayerDialog(playeridDIALOG_MODOSDIALOG_STYLE_TABLIST_HEADERS"{DCDCDC}ZonePerfect {FFFFFF}- Mundos"string"Selecionar""-");




RE: dialog fechando - fear - 21/01/2025

(21/01/2025 21:10)BitSain Escreveu: Preste atenção na abertura e fechamento de chaves!

Inclusive, isso é um erro:
Código PHP:
// Erro
switch(...) {
    case 
0: {
    }
    else { 
// aqui seria default, não else. (Explicação abaixo)
    
}
}

// Nenhum Erro
switch(...) {
    case 
0: {
    }
    default: { 
// O default é executado somente se nenhuma das condições nos case for satisfeita.
    
}

-- default é exclusivo do switch, o else é exclusivo do if.

* Código corrigido:
Código PHP:
if(response) {
    switch(
listitem) {
        case 
0: {
            
ShowPlayerDialog(playeridDIALOG_PMVSLADRAODIALOG_STYLE_LIST"{FFF000}ESCOLHA A OPÇÃO DESEJADA:""Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n""Selecionar""Voltar");
        }
    }
} else {
    new 
string[300];
    
ShowPlayerDialog(playeridDIALOG_MODOSDIALOG_STYLE_TABLIST_HEADERS"{DCDCDC}ZonePerfect {FFFFFF}- Mundos"string"Selecionar""-");


nnao entendi.. tu usou else no codigo corrigido.. da um monte de erro.. nao seria o default como tu falo?


RE: dialog fechando - BitSain - 21/01/2025

No código que você mencionou no início do tópico, a utilização de else está incorreta no contexto de um switch.. O else é usado com if, enquanto o switch deve usar default para o caso em que nenhuma das opções dos case é satisfeita, como eu disse anteriormente.
No código corrigido, o switch está utilizando corretamente o default. O else é utilizado apenas com if, não com switch.
Não se põe else abaixo do case, do jeito que você fez originalmente.

Edit:
Mas, se deu erros.. Quais erros? Como você está implementando este código?


RE: dialog fechando - fear - 22/01/2025

(21/01/2025 23:43)BitSain Escreveu: No código que você mencionou no início do tópico, a utilização de else está incorreta no contexto de um switch.. O else é usado com if, enquanto o switch deve usar default para o caso em que nenhuma das opções dos case é satisfeita, como eu disse anteriormente.
No código corrigido, o switch está utilizando corretamente o default. O else é utilizado apenas com if, não com switch.
Não se põe else abaixo do case, do jeito que você fez originalmente.

Edit:
Mas, se deu erros.. Quais erros? Como você está implementando este código?

codigo completo
Código PHP:
if(dialogid == DIALOG_MODOS)
    {


        if(!
response && PlayerInfo[playerid][modo] == 0) {
            new 
string[300];
            
strcat(string,  "{FFFFFF}Mundos\t{FFFFFF}Players");
            
format(string,  sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Policia x Bandido\t{4169E1}%d"stringfuga);
            
format(string,  sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Mata-Mata\t{4169E1}%d"stringpvp);
            
format(string,  sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Drift\t{4169E1}%d"stringdrift);
            
format(string,  sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Fuga - Com Mundos\t{4169E1}%d"stringlivres);
            return 
ShowPlayerDialog(playerid,DIALOG_MODOS,DIALOG_STYLE_TABLIST_HEADERS,"{DCDCDC}ZonePerfect {FFFFFF}- Mundos",string,"Selecionar","-");
        }

        if(
response)
        {

            switch(
listitem)
            {
                
                    case 
0
                    {
                            
ShowPlayerDialog(playeridDIALOG_PMVSLADRAODIALOG_STYLE_LIST"{FFF000}ESCOLHA A OPÇÃO DESEJADA:""Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n""Selecionar""Voltar");
                    }
                    }
                } else {
                        new 
string[300];
                        
ShowPlayerDialog(playeridDIALOG_MODOSDIALOG_STYLE_TABLIST_HEADERS"{DCDCDC}ZonePerfect {FFFFFF}- Mundos"string"Selecionar""-");
                }
                case 
1:
                {
                    
                    
//SendClientMessage(playerid,Vermelho,"| ZONE - MUNDOS | {FFFFFF}Modo em Desenvolvimento");
                    
Opt(playerid);
                }
                case 
2:
                {
                    


                    
//SendClientMessage(playerid,Vermelho,"| ZONE - MUNDOS | {FFFFFF}Modo em Desenvolvimento");
                    
TogglePlayerSpectating(playerid0);
                    
OptDrift(playerid);
                }
                case 
3:
                {
                    


                    if(
PlayerInfo[playerid][modo] == 4)return SendClientMessage(playerid,Vermelho"[ ERRO ] Voce ja esta participando desse mundo!");
                    
onPlayerSpawnEx(playerid);

                    switch(
PlayerInfo[playerid][modo])
                    {
                        


                        case 
1:fuga-=1;
                        case 
2:pvp-=1;
                        case 
3:drift-=1;
                        case 
4:livres-=1;
                    }
                    
livres+=1;
                    
PlayerInfo[playerid][modo]=4;
                    
PlayerInfo[playerid][cargo]=5;
                    
SendClientMessageToAll(0x9ACD32FF,"| MUNDOS | %s[%d] entrou no Mundo Fuga! {FFFFFF}- ( /Mundos )",pName[playerid],playerid);
                    
TextDrawHideForPlayer(playerid,InfoDeath);

                    new 
rrandom random(sizeof(VehicleColoursTableRGBA));
                    
SetPlayerColor(playeridVehicleColoursTableRGBA[rrandom]);
                    
SetPlayerPos(playerid,2500.8027,-1666.5984,13.3546);
                    
SetPlayerFacingAngle(playerid88.5091);
                    
SetPlayerInterior(playerid,0);
                    
SetPlayerVirtualWorld(playerid,1004);
                    
SetPVarInt(playerid,"FloodModos",gettime()+15);


                    
RemovePlayerMapIcon(playerid55);
                    
RemovePlayerMapIcon(playerid55);


                    for(new 
gt 0gt 4gt++)TextDrawHideForPlayer(playerid,TextPVP[gt]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][0]);
                    
PlayerTextDrawHide(playerid,PTextPVP[playerid][1]);
                    
ResetPlayerWeapons(playerid);
                    
TogglePlayerSpectating(playerid0);
                    }
                }
            }
        }
        return 
1;
    } 

erros:
Código PHP:
error 001expected token";"but found ":"
error 029invalid expressionassumed zero 



RE: dialog fechando - BitSain - 22/01/2025

Como eu disse e dei exemplos a vc anteriormente, else não fica abaixo de case.
Organize e direcione bem as instruções, para não ter comportamento inesperado; como aconteceu.

Código:
if(dialogid == DIALOG_MODOS) {
    if(response) {
        switch(listitem) {
            case 0: {
                ShowPlayerDialog(playerid, DIALOG_PMVSLADRAO, DIALOG_STYLE_LIST,
                    "{FFF000}ESCOLHA A OPÇÃO DESEJADA:",
                    "Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n",
                    "Selecionar", "Voltar");
            }

            case 1: Opt(playerid);
            case 2: TogglePlayerSpectating(playerid, 0); OptDrift(playerid);

            case 3: {
                if(PlayerInfo[playerid][modo] == 4)
                    return SendClientMessage(playerid, Vermelho, "[ ERRO ] Você já está participando desse mundo!");

                onPlayerSpawnEx(playerid);

                fuga -= (PlayerInfo[playerid][modo] == 1);
                pvp -= (PlayerInfo[playerid][modo] == 2);
                drift -= (PlayerInfo[playerid][modo] == 3);
                livres -= (PlayerInfo[playerid][modo] == 4);

                livres++;
                PlayerInfo[playerid][modo] = 4;
                PlayerInfo[playerid][cargo] = 5;

                SendClientMessageToAll(0x9ACD32FF,
                    "| MUNDOS | %s[%d] entrou no Mundo Fuga! {FFFFFF}- ( /Mundos )",
                    pName[playerid], playerid);

                TextDrawHideForPlayer(playerid, InfoDeath);
                SetPlayerColor(playerid, VehicleColoursTableRGBA[random(sizeof(VehicleColoursTableRGBA))]);
                SetPlayerPos(playerid, 2500.8027, -1666.5984, 13.3546);
                SetPlayerFacingAngle(playerid, 88.5091);
                SetPlayerInterior(playerid, 0);
                SetPlayerVirtualWorld(playerid, 1004);
                SetPVarInt(playerid, "FloodModos", gettime() + 15);
                RemovePlayerMapIcon(playerid, 55);

                for (new i = 0; i < 4; i++)
                    TextDrawHideForPlayer(playerid, TextPVP[i]);

                PlayerTextDrawHide(playerid, PTextPVP[playerid][0]);
                PlayerTextDrawHide(playerid, PTextPVP[playerid][1]);
                ResetPlayerWeapons(playerid);
                TogglePlayerSpectating(playerid, 0);
        }
    } else {
        new string[300];
        strcat(string, "{FFFFFF}Mundos\t{FFFFFF}Players");
        format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Policia x Bandido\t{4169E1}%d", string, fuga);
        format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Mata-Mata\t{4169E1}%d", string, pvp);
        format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Drift\t{4169E1}%d", string, drift);
        format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Fuga - Com Mundos\t{4169E1}%d", string, livres);

        ShowPlayerDialog(playerid, DIALOG_MODOS, DIALOG_STYLE_TABLIST_HEADERS,
            "{DCDCDC}ZonePerfect {FFFFFF}- Mundos", string, "Selecionar", "-");
    }
    return true;
}



RE: dialog fechando - xbruno1000x - 22/01/2025

Código:
stock ShowModosDialog(playerid, fuga, pvp, drift, livres)
{
    new string[300];
    strcat(string, "{FFFFFF}Mundos\t{FFFFFF}Players");
    format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Policia x Bandido\t{4169E1}%d", string, fuga);
    format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Mata-Mata\t{4169E1}%d", string, pvp);
    format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Drift\t{4169E1}%d", string, drift);
    format(string, sizeof(string), "%s\n{F08080}Mundo {FFFFFF}Fuga - Com Mundos\t{4169E1}%d", string, livres);

    return ShowPlayerDialog(playerid, DIALOG_MODOS, DIALOG_STYLE_TABLIST_HEADERS, "{DCDCDC}ZonePerfect {FFFFFF}- Mundos", string, "Selecionar", "-");
}

    if (dialogid == DIALOG_MODOS)
    {
        if (!response)
        {
            return ShowModosDialog(playerid, fuga, pvp, drift, livres);
        }

        if (response)
        {
            switch (listitem)
            {
                case 0:
                {
                    ShowPlayerDialog(playerid, DIALOG_PMVSLADRAO, DIALOG_STYLE_LIST, "{FFF000}ESCOLHA A OPÇÃO DESEJADA:", "Quero ser: {1E90FF}Policial\n{FFFFFF}Quero ser: {FF0000}Bandido\n", "Selecionar", "Voltar");
                }
                case 1:
                {
                    Opt(playerid);
                }
                case 2:
                {
                    TogglePlayerSpectating(playerid, 0);
                    OptDrift(playerid);
                }
                case 3:
                {
                    if (PlayerInfo[playerid][modo] == 4)
                        return SendClientMessage(playerid, Vermelho, "[ ERRO ] Voce ja esta participando desse mundo!");

                    onPlayerSpawnEx(playerid);

                    switch (PlayerInfo[playerid][modo])
                    {
                        case 1: fuga -= 1; break;
                        case 2: pvp -= 1; break;
                        case 3: drift -= 1; break;
                        case 4: livres -= 1; break;
                    }

                    livres += 1;
                    PlayerInfo[playerid][modo] = 4;
                    PlayerInfo[playerid][cargo] = 5;

                    SendClientMessageToAll(0x9ACD32FF, "| MUNDOS | %s[%d] entrou no Mundo Fuga! {FFFFFF}- ( /Mundos )", pName[playerid], playerid);
                    TextDrawHideForPlayer(playerid, InfoDeath);

                    new rrandom = random(sizeof(VehicleColoursTableRGBA));
                    SetPlayerColor(playerid, VehicleColoursTableRGBA[rrandom]);
                    SetPlayerPos(playerid, 2500.8027, -1666.5984, 13.3546);
                    SetPlayerFacingAngle(playerid, 88.5091);
                    SetPlayerInterior(playerid, 0);
                    SetPlayerVirtualWorld(playerid, 1004);
                    SetPVarInt(playerid, "FloodModos", gettime() + 15);

                    RemovePlayerMapIcon(playerid, 55);

                    for (new gt = 0; gt < 4; gt++)
                        TextDrawHideForPlayer(playerid, TextPVP[gt]);

                    PlayerTextDrawHide(playerid, PTextPVP[playerid][0]);
                    PlayerTextDrawHide(playerid, PTextPVP[playerid][1]);
                    ResetPlayerWeapons(playerid);
                    TogglePlayerSpectating(playerid, 0);
                }
            }
        }
        return 1;
    }

Encapsulei o método de retornar a dialog dos modos, dessa forma não é necessário ficar formatando e fiz algumas melhorias no código. Acho que deve funcionar.

Basicamente, para o voltar abrir a dialog é necessário programar dentro do if(!response). Você precisa ir na dialog DIALOG_PMVSLADRAO e adicionar
Código:
if (!response)
    return ShowModosDialog(playerid, fuga, pvp, drift, livres);

E precisa repetir o processo para todos os "Voltar" funcionarem.

obs: se as variaveis fuga, pvp, drift e livres forem globais, daria até para removê-las dos parâmetros da função.