[Tutorial] [TUT] Tutorial de como criar um dialog
#1

[size=10pt]Criando um dialog[/size]
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 Код:
#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 Код:
#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 Код:
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 Код:
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
Reply
#2

PORRA TI AMU, CENSURADO, VC Й MASS, TAV ATRAZ DISSO!
Reply
#3

Hmm bom, eu realmente tenho dъvidas sobre Dialogs, e nгo tenho paciкncia pra ir fazer sem saber..
Mas me digam uma coisa, й obrigatуrio por dois botхes?
Porque eu queria fazer uma caixa de ajuda com Dialog, e o ъnico botгo seria "OK"..
Reply
#4

Quote:
Originally Posted by [O_o
Davidovich ]
Hmm bom, eu realmente tenho dъvidas sobre Dialogs, e nгo tenho paciкncia pra ir fazer sem saber..
Mas me digam uma coisa, й obrigatуrio por dois botхes?
Porque eu queria fazer uma caixa de ajuda com Dialog, e o ъnico botгo seria "OK"..
Sim, que eu saiba й, mas vocк pode deixar somente 1 botгo para o OK e o outro vocк deixa em branco...
Reply
#5

Vaium Belo exemplo!

[center]
Код:
Vocк й emo?
[OK]
Reply
#6

Vocкs sгo mesmo idiotas, desculpem o termo mas isso jб estб a passar dos limites....

Este tуpico й para postarem tuturiais http://forum.sa-mp.com/index.php?topic=141651.0 - Portanto usem-no.
Reply
#7

Quote:
Originally Posted by Guedes_
Vocкs sгo mesmo idiotas, desculpem o termo mas isso jб estб a passar dos limites....

Este tуpico й para postarem tuturiais http://forum.sa-mp.com/index.php?topic=141651.0 - Portanto usem-no.
Ah me desculpe por sermos idiotas, nгo me lembrei daquele forum e duvido alguem ficar vendo o tempo todo, estб lб, desde dezembro, ninguйm postou nada, absolutamente nada, sу fez criar um tуpico dizendo "Coloquem aqui tutoriais", pra mim fica muito pior, mas muito pior, se fosse sub-forum, ai sim, ficaria уtimo, pois й melhor criar um topico para os tutoriais, do que fazer um tуpico para tudo, vai ficar uma verdadeira bagunзa, gente tirando duvidas de um tutorial misturado com vбrios tutoriais.
Sua ideia foi boa, disso nгo vou discordar, mas alйm daquelas "regras" do tуpico" serem ruins para "MIM", meu jeito de postar, com tуpicos, organizados, cada criador do tуpico poderб ajudar a todos de uma forma mais facil, simples, e com atй mais liberdade. Por isso meu voto й, ou continuar a criar tуpicos, desde que com a TAG certa, e organizados ou criar um sub-forum somente para tutoriais.

Reply
#8

Quote:
Originally Posted by Guedes_
Vocкs sгo mesmo idiotas, desculpem o termo mas isso jб estб a passar dos limites....

Este tуpico й para postarem tuturiais http://forum.sa-mp.com/index.php?topic=141651.0 - Portanto usem-no.
Acho melhor vocк usar aquele tуpico sу pra por link de todos tutoriais, nгo tem cabimento escrever os tutoriais em um tуpico sу, vai ser maior flood se alguйm tiver dъvidas e tal.

E manera no seu linguajar ae porque nгo tem nenhum idiota aqui nгo.
Reply
#9

Quote:
Originally Posted by [O_o
Davidovich ]
Quote:
Originally Posted by Guedes_
Vocкs sгo mesmo idiotas, desculpem o termo mas isso jб estб a passar dos limites....

Este tуpico й para postarem tuturiais http://forum.sa-mp.com/index.php?topic=141651.0 - Portanto usem-no.
Acho melhor vocк usar aquele tуpico sу pra por link de todos tutoriais, nгo tem cabimento escrever os tutoriais em um tуpico sу, vai ser maior flood se alguйm tiver dъvidas e tal.

E manera no seu linguajar ae porque nгo tem nenhum idiota aqui nгo.
Exatamente. Imagine aquele topico cheio de tutoriais daqui um tempo e gente perguntando la no fim coisas do primeiro tutorial. Maior bagunзa ia ficar nгo?
Reply
#10

Ok o meu tуpico estб actualizado, agora й uma lista de tuturiais em vez de um tуpico para postar tuturiais.

Peзo desculpa pelo transtorno causado na minha post anterior, neste tуpico.
Reply
#11

Quote:
Originally Posted by Guedes_
Ok o meu tуpico estб actualizado, agora й uma lista de tuturiais em vez de um tуpico para postar tuturiais.

Peзo desculpa pelo transtorno causado na minha post anterior, neste tуpico.
Nada cara, de boas
Reply
#12

Obrigado MESMO!!!!!!!
Tava atrбs disso a SЙCULOS!!!!
Reply
#13

Como faзo pra quando clicar no segundo botao, apenas fechar a caixa invez de kikar ...

pq quando clico no segundo botao do meu dialog da close connection ...

Code:
if(dialogid == menugps && response)
	{
		if(listitem == 0)
		{
	  	SendClientMessage(playerid, COLOR_GRAD1, "Vocк escolheu a opзгo 1!");
		}
		if(listitem == 1)
		{
		  	SendClientMessage(playerid, COLOR_GRAD1, "Vocк escolheu a opзгo 2!");
		}
		if(listitem == 2)
		{
		  	SendClientMessage(playerid, COLOR_GRAD1, "Vocк escolheu a opзгo 3!");
		}
		if(listitem == 3)
		{
		  	SendClientMessage(playerid, COLOR_GRAD1, "Vocк escolheu a opзгo 4!");
		}
	return 1;
	}
Reply
#14

Ninguйm pra ajudar na duvida de cima ? x,x
Reply
#15

Tenta descobrir sozinho cara, nгo й sempre que podemos ajudar...
...quer moleza?
mastiga бgua ou senta no pudim...
Reply
#16

Quote:
Originally Posted by [NNFc
MinDs ]
Tenta descobrir sozinho cara, nгo й sempre que podemos ajudar...
...quer moleza?
mastiga бgua ou senta no pudim...
nгo quer ajudar fica queto..
mania besta de algumas pessoas desse forum...
"descobre sozinho"
"se vira"

isso й um forum nao um local de exibiзao pra mostra que alguns sabem mais que os outros...

coisa de gente tosca
Reply
#17

Nгo era para ser neste sentido se й que vocк me entende..
Reply
#18

Porra, vlw ai kara, eu tava precisando disso...
Vc eh demais...
PQP...
Desculpe o palavreado, mas esse cara eh phoda...
xD
Reply
#19

Quote:
Originally Posted by BiGGaMeS
Porra, vlw ai kara, eu tava precisando disso...
Vc eh demais...
PQP...
Desculpe o palavreado, mas esse cara eh phoda...
xD
Obrigado D:
Reply
#20

Otimo Tuto, Me Encinou Mesmo a Fazer Dialogs, Sу Me Deu Um Problema.

Quando clica em selecionar ou no estilo de luta vai normal, mas quando clica em Cancelar e tb seleciona.
Teria Como fazer para se o jogador clicasse em Cancelar o dialog apenas fechasse?


Isso no OnPlayerCommandText:
pawn Code:
{
if (strcmp(cmdtext, "/mudarluta", true) == 0)
{
new str[512] = "Luta Normal\nBriga de Rua\nKung-Fu\nAtaque Com os Cotovelos\nBoxe\nSequкncia de Socos";
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_LIST, "Selecione o Modo De Luta,", str, "Selecionar", "Cancelar");
return 1;
}
E Isso no OnDialogResponse:
pawn Code:
{
  if(response)
 
    if(listitem == 0)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_GRABKICK);
    SendClientMessage (playerid, VERDE, "Vocк Mudou Seu Estilo de Luta Para Luta Normal!");
    }

    if(listitem == 1)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_KNEEHEAD);
    SendClientMessage (playerid, VERDE, "Vocк Mudou Seu Estilo de Luta Para Briga de Rua!");
    }
   
    if(listitem == 2)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_KUNGFU);
    SendClientMessage (playerid, VERDE, "Vocк Mudou Seu Estilo de Luta Para Kung-Fu!");
    }

    if(listitem == 3)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_ELBOW);
    SendClientMessage (playerid, VERDE, "Vocк Mudou Seu Estilo de Luta Para Ataque Com os Cotovelos!");
    }
   
    if(listitem == 4)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_BOXING);
    SendClientMessage (playerid, VERDE, "Vocк Mudou Seu Estilo de Luta Para Boxe!");
    }

    if(listitem == 5)
    {
    SetPlayerFightingStyle(playerid, FIGHT_STYLE_NORMAL);
    SendClientMessage (playerid, VERDE, "Vocк Mudou Seu Estilo de Luta Para Sequкncia de Socos!");
    }
    return 1;
    }
O Que Eu Preciso Adicionar ao Code? Obrigado Desde Jб!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)