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(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"); } } } else { new string[300]; ShowPlayerDialog(playerid, DIALOG_MODOS, DIALOG_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(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"); } } } else { new string[300]; ShowPlayerDialog(playerid, DIALOG_MODOS, DIALOG_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", 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(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"); } } } else { new string[300]; ShowPlayerDialog(playerid, DIALOG_MODOS, DIALOG_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(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; 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(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); 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; }
erros:
Código PHP: error 001: expected token: ";", but found ":" error 029: invalid expression, assumed 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.
|