[Ajuda] Dialog
#1

Eu estou fazendo um FilterScript e estou com uma dъvida que nгo encontro na Wiki nem no Fуrum, eu queria que se um administrador fizesse um comando apareceria um Dialog MSGBOX para todos e sу os 10 primeiros a clicar Sim iriam ao evento.
Como estб o cуdigo atй agora:

Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    CMD:wipeout(playerid, params[])
    {
        if(PlayerInfo[playerid][pAdminLevel] >= 3)
        {
              for(new i=0; i < MAX_PLAYERS; i++)
              {
               ShowPlayerDialog(playerid,DIALOG_WIPEOUT, DIALOG_STYLE_MSGBOX, "Wipeout", "O administrador comeзou um evento de Wipeout. Deseja ir?", "Sim", "Nгo");
              }
               return 1;
        }
        return 1;
    }



public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_WIPEOUT)
    {
        if(response)
        {
            new playerwipeout
            SendClientMessage(playerid, COLOR_GREEN, "O evento vai comeзar em breve!");
            if (playerid == 1)
            {
                SetPlayerPos(playerid,0.0,0.0,3.0);
                return 1;
            }
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Vocк decidiu nгo ir ao evento.");
        }
        return 1;
    }

    return 0;
}
A minha dъvida й se estou a fazer correctamente aquilo do playerid == 1 (que define se foi o primeiro jogador a clicar ou nгo e vai por daн adiante. Agradeзo a ajuda.
Reply
#2

Completamente errado, Dri.

Para contar os players que clicaram vocк precisa contar os players. Para contar, iremos usar uma variбvel e iremos checar se a contagem й menor do que 10.

Para comeзar, zcmd nгo fica dentro de callbacks. Coloque ela solta no gamemode (fora de qualquer chave):
pawn Код:
CMD:wipeout(playerid, params[])
{
    if(PlayerInfo[playerid][pAdminLevel] >= 3)
    {
          for(new i=0; i < MAX_PLAYERS; i++)
          {
            // Trocaremos o playerid por "i" pois nos estamos usando i no loop e nao playerid. Playerid no caso seria o player que digitou o comando, 'i' seria o que o nosso loop percorre, no caso ele tem a instruзao de percorrer todos os players
            ShowPlayerDialog(i,DIALOG_WIPEOUT, DIALOG_STYLE_MSGBOX, "Wipeout", "O administrador comeзou um evento de Wipeout. Deseja ir?", "Sim", "Nгo");
          }
          return 1;
    }
    return 1;
}
Agora iremos criar nossa variбvel. Geralmente colocamos elas junto das outras, e geralmente elas ficam no topo do gamemode, logo apуs as defines:
pawn Код:
new contagemEvento;
Agora iremos fazer o "processamento" da dialog:

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_WIPEOUT)
    {
        if(response)
        {
            if (contagemEvento <= 10)
            {
                SendClientMessage(playerid, COLOR_GREEN, "O evento vai comeзar em breve!");
                SetPlayerPos(playerid,0.0,0.0,3.0);
                contagemEvento ++; // Esta funcao ira contar +1 na nossa variavel (nossa contagem).
                return 1;
            }
            else // Se o if acima nao for executado...
            {
                SendClientMessage(playerid, COLOR_RED, "Voce esta atrasado! 10 players ja foram ao evento.");
                return 1;
            }
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Vocк decidiu nгo ir ao evento.");
        }
        return 1;
    }

    return 1;
}
Mas esse cуdigo acima tem um problema. Depois que 10 players forem ao evento, nossa contagem nunca mais serб 0 ;/

Para resolver este erro de lуgica basta resetarmos a nossa variбvel no comando: contagemEvento = 0;
Cabe a vocк encontrar em que parte colocar este cуdigo

Qualquer dъvida й sу falar.

Vou explicar algumas coisas quanto ao uso dos returns:
returns encerram o bloco de cуdigo na hora. Por exemplo:

pawn Код:
CMD:mostra(playerid){
    print("Vai mostrar");
    print("Vai mostrar");
    print("Vai mostrar");
    return 1;
    print("Nгo vai mostrar");
    print("Nгo vai mostrar");
    print("Nгo vai mostrar");
}
Nesse caso o compilador vai atй dar um aviso falando que as funзхes abaixo do return nгo vгo ser executadas, pois й impossнvel delas serem executadas.
Reply
#3

Quote:
Originally Posted by Kuddy
Посмотреть сообщение
Completamente errado, Dri.

Para contar os players que clicaram vocк precisa contar os players. Para contar, iremos usar uma variбvel e iremos checar se a contagem й menor do que 10.

Para comeзar, zcmd nгo fica dentro de callbacks. Coloque ela solta no gamemode (fora de qualquer chave):
pawn Код:
CMD:wipeout(playerid, params[])
{
    if(PlayerInfo[playerid][pAdminLevel] >= 3)
    {
          for(new i=0; i < MAX_PLAYERS; i++)
          {
            // Trocaremos o playerid por "i" pois nos estamos usando i no loop e nao playerid. Playerid no caso seria o player que digitou o comando, 'i' seria o que o nosso loop percorre, no caso ele tem a instruзao de percorrer todos os players
            ShowPlayerDialog(i,DIALOG_WIPEOUT, DIALOG_STYLE_MSGBOX, "Wipeout", "O administrador comeзou um evento de Wipeout. Deseja ir?", "Sim", "Nгo");
          }
          return 1;
    }
    return 1;
}
Agora iremos criar nossa variбvel. Geralmente colocamos elas junto das outras, e geralmente elas ficam no topo do gamemode, logo apуs as defines:
pawn Код:
new contagemEvento;
Agora iremos fazer o "processamento" da dialog:

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_WIPEOUT)
    {
        if(response)
        {
            if (contagemEvento <= 10)
            {
                SendClientMessage(playerid, COLOR_GREEN, "O evento vai comeзar em breve!");
                SetPlayerPos(playerid,0.0,0.0,3.0);
                contagemEvento ++; // Esta funcao ira contar +1 na nossa variavel (nossa contagem).
                return 1;
            }
            else // Se o if acima nao for executado...
            {
                SendClientMessage(playerid, COLOR_RED, "Voce esta atrasado! 10 players ja foram ao evento.");
                return 1;
            }
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Vocк decidiu nгo ir ao evento.");
        }
        return 1;
    }

    return 1;
}
Mas esse cуdigo acima tem um problema. Depois que 10 players forem ao evento, nossa contagem nunca mais serб 0 ;/

Para resolver este erro de lуgica basta resetarmos a nossa variбvel no comando: contagemEvento = 0;
Cabe a vocк encontrar em que parte colocar este cуdigo

Qualquer dъvida й sу falar.

Vou explicar algumas coisas quanto ao uso dos returns:
returns encerram o bloco de cуdigo na hora. Por exemplo:

pawn Код:
CMD:mostra(playerid){
    print("Vai mostrar");
    print("Vai mostrar");
    print("Vai mostrar");
    return 1;
    print("Nгo vai mostrar");
    print("Nгo vai mostrar");
    print("Nгo vai mostrar");
}
Nesse caso o compilador vai atй dar um aviso falando que as funзхes abaixo do return nгo vгo ser executadas, pois й impossнvel delas serem executadas.
Obrigado pela ajuda
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)