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..
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");
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.