[Tutorial]Criar Comando em dialog

domingo, 27 de janeiro de 2013
Unknown

Criando um dialog

Vendo que muitos tem dúvidas sobre como criar um dialog vou aqui fazer uma coisa rápida de como cria-lo..

Primeiramente você tem que conhecer as funções..

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])]
Este é o callback onde você irá colocar as funções de cada dialog.

playerid - ID do player a qual está sendo mostrado o dialog e ocorrerá a função.
dialogid - ID do dialogo criado. É extremamente importante que você coloque sempre ids diferentes, e de preferência em ordem crescente. E para uma maior organização, você pode usar defines. Ex: #define DialogoDeRegistro 1
response - É usado para gerenciar os dois botões.
listitem - É usado para gerenciar os itens da lista conforme a ordem. listitem 1, 2, 3 e quantos você estiver colocado. Usado no estilo DIALOG_STYLE_LIST.
inputtext - É usado para pegar o texto(string[]) digitado pelo jogador na caixa. Usado no estilo DIALOG_STYLE_INPUT.


ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]);
Função usada para criar o dialog.

playerid - ID do player a ser exibido o dialog.
dialogid - ID de ordem do dialog criado. É extremamente importante que você coloque sempre ids diferentes, e de preferência em ordem crescente. E para uma maior organização, você pode usar defines. Ex: #define DialogoDeRegistro 1
style - Estilo do dialog a ser criado. Existem 3 tipos:
0 - DIALOG_STYLE_MSGBOX - Estilo que só mostra uma mensagem na caixa.
1 - DIALOG_STYLE_INPUT - Estilo onde abre uma caixa com uma mensagem, e um espaço para o player digitar.
2 - DIALOG_STYLE_LIST - Exibe uma lista de itens para ser selecionado e ocorrer a função para tal id.

caption[] - Usado para colocar o texto do cabeçalho.

info[] - Usado para escrever o conteúdo que aparecerá dentro do dialog.

button1[] - Texto que aparecerá no botão número 1.

button2[] - Texto que aparecerá no botão número 2.

Para criar um dialog é simples. Vamos começar com o estilgo MSGBOX:

Primeiramente crie-o com a função ShowPlayerDialog:
pawn Code:

#define DialogBoxEx 1
new str[256];
format(str, sizeof(str), "%d < Mostra o ID do Player \n Aqui será o texto a ser introduzido no dialog.\n Você terá que determinar um valor correto na variável criada de acordo \n com o tamanho do seu texto", playerid);

ShowPlayerDialog(playerid, DialogBoxEx, DIALOG_STYLE_MSGBOX, "Cabeçalho", str, "Ok", "Cancelar");

Este dialog criado, não necessitará inicialmente de usar o callback OnDialogResponse, a não ser para algumas funções desejadas, como usar variáveis, timers e etc.

Agora com o estilo DIALOG_STYLE_INPUT:
pawn Code:

#define DialogInputEx 2
new str[512];
format(str, sizeof(str), "%d < Mostra o ID do Player \n Aqui será o texto a ser introduzido no dialog.\n Você terá que determinar um valor correto na variável criada de acordo \n com o tamanho do seu texto \n Abaixo o Player digitará um texto", playerid);


ShowPlayerDialog(playerid, DialogInputEx, DIALOG_STYLE_INPUT, "Cabeçalho", str, "Ok", "Cancelar");

//Agora você irá no OnDialogResponse e colocará a função após ele ter apertado OK.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DialogInputEx)//identifica o id do dialog.
    {
        if(response)//Caso ele clique no primeiro botão
        {
            new Nome[64];
            GetPlayerName(playerid, Nome, sizeof(nome));
            if(!strcmp(inputtext, Nome, true)) //Identifica se o texto digitado é igual ao seu nome/nick do jogo.
            {
                SendClientMessage(playerid, COR, "Parabéns! Você sabe seu nome e por isso ganhará 1000 Reais!!!");
                GivePlayerMoney(playerid, 1000);
                return 1;
            }
        }
        else //caso ele click no segundo botão
        {
            SendClientMessage(playerid, COR, "Você clicou no segundo botão, o dialog desaparecerá que nem mágica e você será kickado!!!!!");
            Kick(playerid);
        }
    }
    return 1;
}


Agora com o estilo DIALOG_STYLE_LIST:
pawn Code:

new Clicado[MAX_PLAYERS];//Usado para armazenar o ID do player clicado

public OnPlayerClickPlayer(playerid, clickedplayerid, source) //Quando o player clicar em outro player (No Tab)
{
    if(IsPlayerAdmin(playerid))
    {
      new str[64] = "Ir até\nTrazer\nKickar\nBanir"; //Para cada item use "/n" o que pulará uma linha para o próximo item.
      ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "Opções - Administrador", str, "Selecionar", "Cancelar"); //mostrará o dialog
        Clicado[playerid] = clickedplayerid;//armazenará o id do player clicado
    }
    return 1;
}

//Agora no OnDialogResponse

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])//Dialog criado por [VGS]Mac_OC
{
    new string[128];
 
    if(dialogid == 0)
    {
        if(IsPlayerAdmin(playerid))//verifica se o player é administrador, caso não queira só para administrador, retire-o
        {
        if(response)//botão 1
        {
          new Float:Coord[3];
          if(listitem == 0)//Item 0 da lista( é o primeiro da lista)
          {
                    GetPlayerPos(Clicado[playerid], Coord[0], Coord[1], Coord[2]);
                    new intid = GetPlayerInterior(Clicado[playerid]);
                    if(IsPlayerInAnyVehicle(playerid))
                    {
                        new vid = GetPlayerVehicleID(playerid);
                        SetVehiclePos(vid, Coord[0], Coord[1]+4, Coord[2]+4);//teleportará o veiculo
                        SetPlayerInterior(playerid, intid);
                        LinkVehicleToInterior(vid, intid);
                    }
                    else
                    {
                        SetPlayerInterior(playerid, intid);
                        SetPlayerPos(playerid, Coord[0], Coord[1]+4, Coord[2]+4);//teleportará o player
                    }
                    format(string, sizeof(string), "Você se teleportou até %s(id: %d)", PlayerName(Clicado[playerid]), Clicado[playerid]);
                    SendClientMessage(playerid, Cor_Verde, string);
                    return 1;
          }
       
          else if(listitem == 1)//item da lista 1 (segundo da lista) fará com que traga o player
          {
                    GetPlayerPos(playerid, Coord[0], Coord[1], Coord[2]);
                    new intid = GetPlayerInterior(playerid);
                    if(IsPlayerInAnyVehicle(Clicado[playerid]))
                    {
                        new vid = GetPlayerVehicleID(Clicado[playerid]);
                        SetVehiclePos(vid, Coord[0], Coord[1]+4, Coord[2]+4);
                        SetPlayerInterior(Clicado[playerid], intid);
                        LinkVehicleToInterior(vid, intid);
                    }
                    else
                    {
                        SetPlayerInterior(Clicado[playerid], intid);
                        SetPlayerPos(Clicado[playerid], Coord[0], Coord[1]+4, Coord[2]+4);
                    }
                    format(string, sizeof(string), "Você trouxe %s(id: %d) até você.", PlayerName(Clicado[playerid]), Clicado[playerid]);
                    SendClientMessage(playerid, Cor_Verde, string);
                    return 1;
                }
             
                else if(listitem == 2)
                {
                format(string, sizeof(string),"%s foi kickado por %s ", PlayerName(Clicado[playerid]), PlayerName(playerid));
                SendClientMessageToAll(Cor_Vermelho, string);
                Kick(Clicado[playerid]);
                return 1;

                }
             
                else if(listitem == 3)
                {
                    format(string, sizeof(string), "%s foi kickado por %s ", PlayerName(Clicado[playerid]), PlayerName(playerid));
                    SendClientMessageToAll(Cor_Vermelho, string);
                    Ban(Clicado[playerid]);
                  return 1;

                }
           }
        }
        return 1;
    }
    return 0;
}


Quem tiver erro de PlayerName, crie uma variavel e use o GetPlayerName, ou adicionem essa função ao seu mode:
pawn Code:

stock PlayerName(playerid)
{
    new Nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    return Nome;
}

Espero que tenham entendido
Qualquer dúvida, postem ai.

Obs: Qualquer erro informem

0 comentários:

Postar um comentário

- Sem Divulgar Links
- Sem Chingar ninguem
- Sem Falar de outro blog
- Obrigado -

PikeenoOo Designer