Anuncie aqui!

[TUT] Como Criar 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:
1
2
3
4
5
#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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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:
1
2
3
4
5
6
stock PlayerName(playerid)
{
    new Nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    return Nome;
}
Creditos A : speliarmos

Comentários

Postar um comentário