SA-MP Forums Archive
[Ajuda] Retorno em Dialog List - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Retorno em Dialog List (/showthread.php?tid=592628)



Retorno em Dialog List - Manin - 27.10.2015

Bom, estou tentando fazer um novo sistema de registro para um gamemode que estou comeзando. O Problema й que estou tendo certa dificuldade para fazer a ligaзгo e assim o retorno entre meus Diбlogos.

Cуdigo base do Dialogo:

PHP код:
if(response)
    {
        switch(
dialogid)
        {
            case 
1:
            {
                switch(
listitem)
                {
                    case 
0:
                    {
                        
ShowPlayerDialog(playerid11DIALOG_STYLE_INPUT"Login","Bem Vindo ao Servidor\nDigite sua senha para poder continuar","Confirmar","Cancelar");
                         if(
dialogid == 11)
                        {
                            if(!
response)
                            {
                                
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_LIST"Bem Vindo ao Servidor""Login\nRegistro\nSair""Abrir""Fechar");
                                return 
1;
                            }
                            if(
response)
                            {
                                
SpawnPlayer(Playerid);
                            }
                        }
                    }
                    case 
1:
                    {
                        
ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Registro","Bem Vindo ao Servidor\nDigite uma senha para se registrar","Confirmar","Cancelar");
                        if(
response)
                        {
                        
SpawnPlayer(playerid);
                        }
                        else return
                            
ShowPlayerDialog(playerid1DIALOG_STYLE_LIST"Bem Vindo ao Servidor""Login\nRegistro\nSair""Abrir""Fechar");
                    }
                    case 
2:
                    {
                        
SendClientMessage(playeridCOR_BAN"Vocк nгo quis se registrar ou logar no servidor, e por este motivo foi kickado.");
                        
Kick(playerid);
                    }
                }
            }
        }
    }
    return 
1;

Ao logar no servidor e escolher entre as opзхes: Login e Registro ele teria 2 alternativas que seriam, confirmar ou cancelar, oque acontece й que quando o player clica-se no botгo cancelar era para o dialogo retornar para o dialogo inicial ( no caso a lista ), mais ele nгo volta.

Se necessбrio uparei prints para melhor identificaзгo do problema.


Re: Retorno em Dialog List - MultiKill - 27.10.2015

Na primeira verificaзгo vocк eta vendo se o jogador clicou no botгo 1.

Caso o jogador clicar no botгo 1, vai verificar qual dialogo esta mostrando para ele, caso o jogador esteja vendo o dialogo id 1, vocк fez um verificaзгo em qual item da lista ele escolheu. Caso ele tenha escolhido o item 0, vocк mandou mostrar um dialogo do estilo INPUT com o id 11 e logo abaixo verificou se o id do dialogo 11.

Nesse caso ao vocк mandar mostrar o dialog com o id 11 a callback OnDialogResponse vai ser chamada novamente.

Agora que entra uma parte do seu problema, como a variavel dialogid vai estar com o valor 11 se vocк verificou anteriormente se ele estava com o valor 1?

Sу iria ser executado essa parte do cуdigo se o valor da variбvel dialogid estiver com o valor 1 e nгo 11.

E ainda dentro da verificaзгo que vocк fez se o dialogid for igual a 11, vocк verificou se o jogador clicou no botгo 2, e caso ele tenha clicado no botгo 2 ele mostra o dialogo do registro. Como ele vai executar o dialogo do registro se sу vai chegar nessa parte do cуdigo caso ele tenha clicado no botгo 1 que vocк fez a verificaзгo anteriormente?
PHP код:
if(response// caso tenha clicado no botгo 1
{
    switch(
dialogid)
    {
        case 
1// caso o dialogid for igual a 1
        
{
            switch(
listitem)
            {
                case 
0caso ele tenha escolhido o item id 0 da lista
                
{
                    
ShowPlayerDialog(playerid11DIALOG_STYLE_INPUT"Login","Bem Vindo ao Servidor\nDigite sua senha para poder continuar","Confirmar","Cancelar");
                    if(
dialogid == 11// caso o dialogid for igual a 11
                    
{
                        if(!
response// caso ele tenha clicado no botгo 2
                        
{
                            
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_LIST"Bem Vindo ao Servidor""Login\nRegistro\nSair""Abrir""Fechar");
                            return 
1;
                        }
                        if(
response// caso ele tenha clicado no botгo 1
                        
{
                            
SpawnPlayer(Playerid);
                        }
                    }
                }
            }
        }
    }

O seu cуdigo estб errado nas verificaзхes, verifique primeiramente o id do dialogo, depois o response ou o listitem depende do que estiver fazendo.

Exemplo:
PHP код:
switch(dialogid)
{
    case 
1//caso esteja vendo o dialogid 1
    
{
        if(
response// caso tenha clicado no botгo 1
        
{
            switch(
listitem)
            {
                case 
0// caso esteja escolhido a primeira opзгo da lista
                
{
                    
// cуdigo
                
}                
            }
        }
    }




Re: Retorno em Dialog List - Manin - 28.10.2015

Quote:
Originally Posted by MultiKill
Посмотреть сообщение
Na primeira verificaзгo vocк eta vendo se o jogador clicou no botгo 1.

Caso o jogador clicar no botгo 1, vai verificar qual dialogo esta mostrando para ele, caso o jogador esteja vendo o dialogo id 1, vocк fez um verificaзгo em qual item da lista ele escolheu. Caso ele tenha escolhido o item 0, vocк mandou mostrar um dialogo do estilo INPUT com o id 11 e logo abaixo verificou se o id do dialogo 11.

Nesse caso ao vocк mandar mostrar o dialog com o id 11 a callback OnDialogResponse vai ser chamada novamente.

Agora que entra uma parte do seu problema, como a variavel dialogid vai estar com o valor 11 se vocк verificou anteriormente se ele estava com o valor 1?

Sу iria ser executado essa parte do cуdigo se o valor da variбvel dialogid estiver com o valor 1 e nгo 11.

E ainda dentro da verificaзгo que vocк fez se o dialogid for igual a 11, vocк verificou se o jogador clicou no botгo 2, e caso ele tenha clicado no botгo 2 ele mostra o dialogo do registro. Como ele vai executar o dialogo do registro se sу vai chegar nessa parte do cуdigo caso ele tenha clicado no botгo 1 que vocк fez a verificaзгo anteriormente?
PHP код:
if(response// caso tenha clicado no botгo 1
{
    switch(
dialogid)
    {
        case 
1// caso o dialogid for igual a 1
        
{
            switch(
listitem)
            {
                case 
0caso ele tenha escolhido o item id 0 da lista
                
{
                    
ShowPlayerDialog(playerid11DIALOG_STYLE_INPUT"Login","Bem Vindo ao Servidor\nDigite sua senha para poder continuar","Confirmar","Cancelar");
                    if(
dialogid == 11// caso o dialogid for igual a 11
                    
{
                        if(!
response// caso ele tenha clicado no botгo 2
                        
{
                            
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_LIST"Bem Vindo ao Servidor""Login\nRegistro\nSair""Abrir""Fechar");
                            return 
1;
                        }
                        if(
response// caso ele tenha clicado no botгo 1
                        
{
                            
SpawnPlayer(Playerid);
                        }
                    }
                }
            }
        }
    }

O seu cуdigo estб errado nas verificaзхes, verifique primeiramente o id do dialogo, depois o response ou o listitem depende do que estiver fazendo.

Exemplo:
PHP код:
switch(dialogid)
{
    case 
1//caso esteja vendo o dialogid 1
    
{
        if(
response// caso tenha clicado no botгo 1
        
{
            switch(
listitem)
            {
                case 
0// caso esteja escolhido a primeira opзгo da lista
                
{
                    
// cуdigo
                
}                
            }
        }
    }

Bom amigo, agradeзo a ajuda mais o erro persiste, tentei de alguns mйtodos diferentes mais estou sempre parando no mesmo lugar. Sei que o switch estб funcionando normalmente jб que estб fazendo a ligaзгo normal entre o dialog list e o dialog input. Mais ainda sim nгo consigo entender como ligar o input novamente ao dialog list, jб que de todo modo que eu tento ele acaba nгo retornando ao dialogo destinado ( no caso a lista ). Se souber mais alguma outra forma de me ajudar agradeзo.


Re: Retorno em Dialog List - Manin - 29.10.2015

Mais alguйm pra dar uma forcinha ? o ъnico modo que encontrei de faze este retorno foi fazendo o DIALOG INPUT como um dialogo independente ou seja como qualquer outro dialog, nгo consegui fazer tudo dentro do switch.

Exemplo:
PHP код:
case 0:
      {
           
ShowPlayerDialog(playerid11DIALOG_STYLE_INPUT"Login""Bem Vindo ao Servidor\nDigite sua senha para poder continuar.""Confirmar""Cancelar");
      } 
Dialogo:
PHP код:
if(dialogid == 11)
    {
         if(!
response)
           {
            
ShowPlayerDialog(playerid1DIALOG_STYLE_LIST"Bem Vindo ao Servidor""Login\nRegistro\nSair""Abrir""Fechar");
           }
        if(
response)
        {
            
SpawnPlayer(playerid);
        }
    }