SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.


2 resultados encontrados para EmFinalizaçãoAinda

Weslley_Script

Manual sobre Dialogs [Atualizado 0.3.7] - Qui 18 Abr 2019 - 9:40

Estou atualizando meus tutoriais de dialog para 0.3.7 por pedidos de amigos e editando todos meus antigos sobre o mesmo assunto para esse. ( 21/04/2015 e 22/04/2015 ).
#EmFinalizaçãoAinda

Antes de começarmos a desenvolver nossos dialogs, devemos aprender algumas coisas básicas:

Barra de Escape

[size=11]Quote:
[/size]

Em várias linguagens de programação o caractere de aspas duplas (") é utilizado para delimitar uma cadeia de caracteres. Caso seja necessário utilizar o caractere de aspas duplas dentro da cadeia sem evocar seu significado de delimitar, utiliza-se o caractere de escape para que o compilador interprete as aspas duplas como um caractere da cadeia. Em geral, este caractere é a barra contrária (\). - Wikipédia

Ou seja, ele quer dizer que, se você por: 
[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "Olá Mundo, meu nome é "Jonathan" ");  


O compilador irá reclamar e vai causar erro de Sintaxe. Então o certo de se fazer é adicionar a barra contrária(escape) para que o compilador entenda como um simples caractere do seu texto. Veja:
[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "Olá Mundo, meu nome é \"Jonathan\" ");  


O que é \n e \r?

Ambos servem para pular linhas, mas diferem no quesito do Sistema O. 
O \r é usado para pular linhas apenas no Windows, e \n Linux e Windows. Por isso a gente encontra apenas \n, e não \r. Fique espero em questões sobre essas em concursos Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Smile.

Exemplo:
[size=11]PHP Code:
[/size]
Código:
print("Oi, eu sou o: \nJFS"); 

/* Saída: 
Oi, eu sou o: 
JFS 
*/  


Usando o \t em dialog

É como se fosse um TAB. Melhoraram bastante na 0.3.7!
Veja um exemplo em imagem de como era.
Veja um exemplo de como está agora. Aliás, usando DIALOG_LIST está do mesmo jeito. Só que agora temos mais duas opções de dialogs, uma delas é a da segunda imagem. Sobre isso vou falar ao decorrer do tutorial.

Entendo a função format

Vamos primeiro entender o básico de todas as linguagens de programação e o que mais usamos:

[size=11]Quote:
[/size]

%i - Para números Inteiros
%d - Para número inteiros
%s - Para tipo String - Sequência de caracteres
%f - Para tipo Float, números decimais.

Quando devo usar format? Quando você quer incluir variáveis dentro de caracteres.
O que é variável? Assunto meio complexo, mas o que você deve saber aqui, é que elas começam com new na linguagem pawn, diferente das POO.
Qual diferença do %i e %d? Nenhuma, tanto faz um ou outro. Os dois são inteiros.

Exemplos:


Código:
new Strj[128]; 

// Exemplo números inteiros: 
new numero = 18; 
format(Strj, sizeof(Strj), "Esse Número é %d", numero); 
format(Strj, sizeof(Strj), "Esse Número é %i", numero); 

// Exemplo números do tipo String(Caracteres) 
new nome[] = "Jonathan"; 
format(Strj, sizeof(Strj), "Meu Nome é: %s", nome); 

// Exemplo números do tipo Float 
new numero = 18.5; 
format(Strj, sizeof(Strj), "Esse número é: %f", numero);  


Observações: Usei apenas uma variável Strj para não ficar criando toda hora e alocando mais memória no servidor. Botei 128 pois é o número de caráteres máximo no chat. No caso do Dialog, você vai precisar muito mais, pois não é só aquela linha pequena do Chat, você pode por muito mais informações. Lembrando que o sizeof retorna o valor da variável, que no caso aí é 128(Strj).

Com isso, concluímos que vamos usar format em alguns casos, pois é para você puxar uma variável. Exemplo em um dialog de entrada:

[size=11]Quote:
[/size]

Seu Nick: %s está registrado!
Bem-Vindo ao servidor, digite sua senha para conectar-se!

O %s é um caracter do tipo String, ou seja, usamos para pegar o nome do Player.


Colocando Cores em Dialogs/Mensagens

Essas cores, para você está vendo pela primeira vez, são em hexadecimais. Você pode ver aqui diversos jeitos diferentes de se fazer. Vou fazer aqui uma menos usual e menos trabalhosa:

[size=11]PHP Code:
[/size]
Código:
#define COR_VERMELHO_HEX "{00FF00}"  


[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "Aqui está branco por conta do ( -1 ), e "COR_VERMELHO_HEX" aqui está vermelho por conta da sua cor definida em cima.");  


Podemos também fazer direto:
[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "{FFFFFF}Aqui está branco, {00FF00}Aqui verde, {FFFFFF}Aqui dnv está branco, {FF0000} mas agora está vermelho.");  


Porque eu recomendo fazer do primeiro jeito? Porque eu quero! Mentira, é porque imagine que você queira usar em vários dialogs, você vai querer copiar e colar sempre os hexadecimais? Pode ser que sim, mas aí fica a critério do programador.



Lembrando que tudo que eu mencionei até agora, não é usado somente em dialogs e muito menos exclusivo da linguagem pawn.


O que é dialog?

No SAMP, simplesmente falando, é uma caixa de dialog onde você pode interagir com o Player, podendo ser com perguntas, listas, etc. Para você entender melhor, é aquela caixinha preta no qual você coloca a senha, informações, entre outras coisas, ao logar no servidor.

Estilos de DIALOGS

[size=11]Quote:
[/size]

0 - DIALOG_STYLE_MSGBOX - Quando você quer transmitir uma mensagem
1 - DIALOG_STYLE_INPUT - Quando você quer que o Player interaja com algo. Ou seja, um campo de texto.
2 - DIALOG_STYLE_LIST - Quando você quer mostrar uma lista de opções ao player.
3 - DIALOG_STYLE_PASSWORD - Quando você quer que o Player bote uma senha.
4 - DIALOG_STYLE_TABLIST - Um Dialog List com tabelas.( apenas 0.3.7+ ) 
5 - DIALOG_STYLE_TABLIST_HEADERS - Um Dialog list com tabelas e subtítulos.( apenas 0.3.7+ )

Estrutura do Dialog



Código:
ShowPlayerDialog(PAR1, PAR2, PAR3, "PAR4", "PAR5", "PAR6", "PAR7");  





ShowPlayerDialog: Função de Mostrar a Dialog.
PAR1: Parâmetro onde botamos o ID(pronúncia: Aídi e não idê) do player. Normalmente é playerid pois geralmente é para o player que está fazendo a ação.
PAR2: ID do dialog. Daremos uma identificação pra ele. No seu caso é seu CPF, aqui é número natural. Não podem haver dois iguais pois causará conflito.
PAR3: Estilo do dialog. Nome ou ID.
PAR4: Título do dialog
PAR5: Texto do dialog
PAR6: Texto do botão um do dialog
PAR7: Texto do botão dois do dialog

Vamos a um exemplo do tipo DIALOG_STYLE_MSGBOX simples:



Código:
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_MSGBOX, "Aviso!", "Aqui é apenas uma mensagem para você!", "Fechar", "Ok");  



Entendendo a public OnPlayerDialogResponse

Esse método já vem como nativo. Você não precisa cria-ló. Basta pesquisar no pawno ou caso não exista, adicione no final do GameMode.

[size=11]PHP Code:
[/size]
Código:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    // bloco de códigos 

    return false; // ou return 0 
}  


Ela é chamada toda vez que você aperta em um dos dois botões do dialog. Seus parâmetros são: playerid, que no caso é o ID do Player, dialogid que é o "CPF" de seu Dialog, response que vai detectar se tu apertou no botão da direita ou esquerda, listitem para detectar qual opção você colocou caso você utilize DIALOG_STYLE_LIST, DIALOG_STYLE_TABLIST ou DIALOG_STYLE_TABLIST_HEADERS, e inputtext para pegar o que você colocou no campo de texto, no caso o DIALOG_STYLE_INPUT ou DIALOG_STYLE_PASSWORD.



Estrutura do DIALOG_STYLE_MSGBOX

Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_msgbox

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 1281, DIALOG_STYLE_MSGBOX, "{F60000}Meu Título em Cor Diferente", "Bem Vindo ao Servidor\nEsse é meu Primeiro DIALOG MSG", "Abrir", "Okay");  



Como já estudamos os parâmetros, sabemos o que está ocorrendo ai. Vale ressaltar que o Dialog 1281 é apenas um exemplo, você pode por qual quiser, contanto que seja diferente dos outros.

Vamos agora para um segundo exemplo mais complexo:
[size=11]PHP Code:
[/size]
Código:
new Exemplo[50]; 
new Nome[] = "Jonathan Feitosa"; 

format(Exemplo, sizeof(Exemplo), "Olá %s!\nBem Vindo ao servidor!", Nome); 
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Welcome!", Exemplo, "Fechar", "Okay");  


Nesse caso, utilizando o format, podemos adicionar variáveis em nossos dialogs. E isso servirá para todos os dialogs! Não vai mudar nada.


Agora, vamos por a resposta em nossos dialogs! Servirá para detectar quando o Player apertar no Botão1 ou Botão2.



Código:
// Adicione em algum comando, ou qualquer lugar para abrir nosso Dialog: 
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Meu Primeiro Dialog", "Aperte em Ganhar Grana para ganhar 1000 reais\nAperte em Perder Grana para perder 1000 reais", "Ganhar Grana", "Perder Grana"); 

// Na public do seu GameMode: 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    if(dialogid == 1) // o "CPF do dialog", Se eu botei 1 lá, devo botar 1 aqui ! 
    { 
        if(response) // Se apertou no Botão 1 (Ganhar Grana) 
        { 
            GivePlayerMoney(playerid, 1000); 
            SendClientMessage(playerid, -1, "Você ganhou 1000 reais!");  
        } 
        if(!response) // ou else = Se apertou no Botão 2 (Perder Grana) 
        { 
            SendClientMessage(playerid, -1, "Você perdeu 1000 reais!"); 
            GivePlayerMoney(playerid, 1000); 
        } 
        return true;  
    } 
    return false; 
}  


Estrutura do DIALOG_STYLE_INPUT e DIALOG_STYLE_PASSWORD

Input:
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_input

Password:
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_password

Exemplo:


Código:
ShowPlayerDialog(playerid, 4444, DIALOG_STYLE_INPUT, "Título do Servidor", 
"Digite sua senha no campo Texto", "Selecionar", "Cancelar");  


Nada muda aqui, sempre fica como padrão. Apenas pulei uma linha ali para ficar mais fácil de você enxergar.

O DIALOG_STYLEE_PASSWORD é igual ao DIALOG_STYLE_INPUT, só que as caracteres ficam ocultas no PASSWORD.

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4444, DIALOG_STYLE_PASSWORD, "Título do Servidor", 
"Digite sua senha no campo Texto", "Selecionar", "Cancelar");  


Na estrutura dos dois, utilizaremos meio diferente no DialogResponse:

Código:
// Adicione em algum comando, ou qualquer lugar para abrir nosso Dialog: 
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Escreva seu primeiro texto!", "Escreva seu nome!\n\nExemplo: Arlindo", "Confirmar", "Sair"); 

// Na public do seu GameMode: 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    if(dialogid == 1) // o "CPF do dialog", Se eu botei 1 lá, devo botar 1 aqui ! 
    { 
        if(response) // Se apertou no Botão Confirmar 
        { 
            new Strjf[50]; 
            format(Strjf, sizeof(Strjf), "Muito Bem, Seu nome de acordo com o texto que você botou é: %s", inputtext 
            SendClientMessage(playerid, -1, Strjf);  
        } 
        // Se ele apertar no botão sair, o dialog sumirá pois não botei nenhuma ação para ele  
        return true;  
    } 
    return false; 
}  



Estrutura do DIALOG_STYLE_LIST, DIALOG_STYLE_TABLIST e DIALOG_STYLE_TABLIST_HEADERS 


DIALOG_STYLE_LIST
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_list



Código:
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_LIST, "{33CCFF}Teleportes do Meu Servidor", "{FFFF00}Ir DM\n{33AA33}IR Derby", "Selecionar", "Sair");  


Como aprendemos, o \n serve para pular linhas. No dialog list, ela serve para adicionarmos as opções de nossas Listas.
[size=11]PHP Code:
[/size]
Código:
"{FFFF00}IR DM\n{33AA33}IR Derby" 

/* 
Saída: 
Opção 1: IR DM 
Opção 2: IR Derby  

Quanto mais /n, mais opções teremos no nosso dialog. 
*/  


DIALOG_STYLE_TABLIST [b](0.3.7)[/b]
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_tablist

É quase igual aqo Dialog List. Como você sabe, o \t era como se fosse um TAB. Nessa versão do SAMP, ela passou a ter mais utilidade nos dialogs. Ela dar um 'tab' correto, tendo seu limite até o fim da tela. Vou pegar o exemplo da imagem para ficar mais fácil:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4112, DIALOG_STYLE_TABLIST, "Buy Weapon", 
"Deagle\t$5000\t100\n\ 
Sawnoff\t$5000\t100\n\ 
Pistol\t$1000\t50", // Etc. 
"Select", "Cancel");  



Explicando melhor como é:
[size=11]PHP Code:
[/size]
Código:
"Deagle\t$5000\t100\n\Sawnoff\t$5000\t100\n\Pistol\t$1000\t50" 

// para melhor ver: 

"Deagle\t$5000\t100\n 
\Sawnoff\t$5000\t100\n 
\Pistol\t$1000\t50" 

/* 
"Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou parar" 
[...] */  


Se não entendeu, sugiro que releia o tutorial.

DIALOG_STYLE_TABLIST_HEADERS [b](0.3.7)[/b]
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_tablist_headers

É igual o DIALOG_STYLE_TABLIST, só que vem com título nas colunas. Vou pegar o exemplo da imagem para ficar mais fácil.

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4444, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon", 
"Weapon\tPrice\tAmmo\n\ 
Deagle\t$5000\t100\n\ 
Sawnoff\t$5000\t100\n\ 
Pistol\t$1000\t50", // Etc. 
"Select", "Cancel");  



Explicando melhor como é:
[size=11]PHP Code:
[/size]
Código:
"Weapon\tPrice\tAmmo\n\Deagle\t$5000\t100\n\Sawnoff\t$5000\t100\n\Pistol\t$1000\t50" 

// para melhor ver: 
"Weapon\tPrice\tAmmo\n 
\Deagle\t$5000\t100\n 
\Sawnoff\t$5000\t100\n 
\Pistol\t$1000\t50" 

/* 
"Titulo da Coluna 1\tTitulo da Coluna \tTitulo da Coluna 3 e agora vou para as opções\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou parar" 
[...]  


Veja um outro exemplo:

Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. 8uIUo9f

Exemplo da Imagem:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon", "Coluna 1\tColune 2\tColuna3\tColuna 4\n\Deagle\t$5000\t100\tteste\n\Sawnoff\t$5000\t100\tteste\n\Pistol\t$1000\t50\tteste", "Selecionar", "Cancel"); 

// Ou para melhor visualizar: 
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon", 
"Coluna 1\tColune 2\tColuna 3\tColuna 4\n\ 
Deagle\t$5000\t100\tteste\n\ 
Sawnoff\t$5000\t100\tteste\n\ 
Pistol\t$1000\t50\tteste", // Etc. 
"Selecionar", "Cancel");  


Se não entendeu, sugiro que releia o tutorial.


Então, A RESPOSTA DO DIALOG_STYLE_LIST, DIALOG_STYLE_TABLIST e DIALOG_STYLE_TABLIST_HEADERS é IGUAL na public OnDialogResponse, pois todos são uma lista de opções, a unica diferença entre eles é que trazem mais informações em colunas e subtítulos. Veja como eles funcionam:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 234, DIALOG_STYLE_LIST, "Menu de Compras de armas", "Eagle\nAK-47\nCombat Shotgun", "Selecionar", "Sair"); 
  
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    if(dialogid == 234) // 'CPF' do Meu Dialog criado 
    { 
        if(response) // Se clicou no botão 'Selecionar' 
        { 
            if(listitem == 0) // Caso selecione o primeiro item - Eagle ( Começamos sempre do 0 ) 
            { 
                GivePlayerWeapon(playerid, WEAPON_DEAGLE, 1000); 
                SendClientMessage(playerid, -1, "Você ganhou uma eagle com 1000 balas"); 
            } 
            if(listitem == 1) // Caso selecione o segundo item - AK-47 
            { 
                GivePlayerWeapon(playerid, WEAPON_AK47, 120); 
                SendClientMessage(playerid, -1, "Você ganhou uma ak-47com 120balas"); 
            } 
            if(listitem == 2) // Caso selecione o terceiro item - Combat Shotgun 
            { 
                GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28); 
                SendClientMessage(playerid, -1, "Você ganhou uma shotgun com 28 balas"); 
            } 
        } 
        return true;  
    } 
  
    return false; 
}  


Como adicionar apenas um botão nos dialogs

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_LIST, "Meu Botão", "Tutorial Meu Botão !!", "Selecionar", "Cancelar");  


Vamos destacar apenas nossos botões no dialog acima:

[size=11]PHP Code:
[/size]
Código:
"Selecionar", "Cancelar")  


[size=11]Quote:
[/size]

Botão 1= Selecionar
Botão 2 = Cancelar

Para ficar com um botão apenas, você deve deixar apenas:

[size=11]PHP Code:
[/size]
Código:
"Selecionar", "")  


Ou seja, o segundo botão ficará vazio Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Smile

[size=18]strcat,strlen ou format para concatenar dialogs?
[/size]


Sem dúvidas format. Bem mais otimizado e rápido. 
Tire dúvidas de velocidades de loop's, o que mais influencia em LAG no servidor junto com timers.


Em Breve aqui: 
Como Organizar meus IDS para não dar conflito.
Dialogs sobre Dialogs
Sistema Simples de GPS

Créditos: Eu e editores da Wiki-SAMP.

Dúvidas, sugestões, erros, avisar-me pois também sou humano. Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Smile

Weslley_Script

Manual sobre Dialogs [Atualizado 0.3.7] - Ter 21 Jul 2015 - 11:12

Estou atualizando meus tutoriais de dialog para 0.3.7 por pedidos de amigos e editando todos meus antigos sobre o mesmo assunto para esse. ( 21/04/2015 e 22/04/2015 ).
#EmFinalizaçãoAinda

Antes de começarmos a desenvolver nossos dialogs, devemos aprender algumas coisas básicas:

Barra de Escape

[size=11]Quote:
[/size][table border="0" cellpadding="6" cellspacing="0" width="100%"]
Em várias linguagens de programação o caractere de aspas duplas (") é utilizado para delimitar uma cadeia de caracteres. Caso seja necessário utilizar o caractere de aspas duplas dentro da cadeia sem evocar seu significado de delimitar, utiliza-se o caractere de escape para que o compilador interprete as aspas duplas como um caractere da cadeia. Em geral, este caractere é a barra contrária (\). - Wikipédia
codigo bloqueado

Ou seja, ele quer dizer que, se você por: 
[size=11]PHP Code:
[/size]

Código:
SendClientMessage(playerid, -1, "Olá Mundo, meu nome é "Jonathan" ");  


O compilador irá reclamar e vai causar erro de Sintaxe. Então o certo de se fazer é adicionar a barra contrária(escape) para que o compilador entenda como um simples caractere do seu texto. Veja:
[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "Olá Mundo, meu nome é \"Jonathan\" ");  


O que é \n e \r?

Ambos servem para pular linhas, mas diferem no quesito do Sistema O. 
O \r é usado para pular linhas apenas no Windows, e \n Linux e Windows. Por isso a gente encontra apenas \n, e não \r. Fique espero em questões sobre essas em concursos Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Smile.

Exemplo:
[size=11]PHP Code:
[/size]
Código:
print("Oi, eu sou o: \nJFS"); 

/* Saída: 
Oi, eu sou o: 
JFS 
*/  


Usando o \t em dialog

É como se fosse um TAB. Melhoraram bastante na 0.3.7!
Veja um exemplo em imagem de como era.
Veja um exemplo de como está agora. Aliás, usando DIALOG_LIST está do mesmo jeito. Só que agora temos mais duas opções de dialogs, uma delas é a da segunda imagem. Sobre isso vou falar ao decorrer do tutorial.

Entendo a função format

Vamos primeiro entender o básico de todas as linguagens de programação e o que mais usamos:

[size=11]Quote:
[/size][table border="0" cellpadding="6" cellspacing="0" width="100%"]
%i - Para números Inteiros
%d - Para número inteiros
%s - Para tipo String - Sequência de caracteres
%f - Para tipo Float, números decimais.

codigo bloqueado

Quando devo usar format? Quando você quer incluir variáveis dentro de caracteres.
O que é variável? Assunto meio complexo, mas o que você deve saber aqui, é que elas começam com new na linguagem pawn, diferente das POO.
Qual diferença do %i e %d? Nenhuma, tanto faz um ou outro. Os dois são inteiros.

Exemplos:


[size=11]PHP Code:
[/size]
Código:
new Strj[128]; 

// Exemplo números inteiros: 
new numero = 18; 
format(Strj, sizeof(Strj), "Esse Número é %d", numero); 
format(Strj, sizeof(Strj), "Esse Número é %i", numero); 

// Exemplo números do tipo String(Caracteres) 
new nome[] = "Jonathan"; 
format(Strj, sizeof(Strj), "Meu Nome é: %s", nome); 

// Exemplo números do tipo Float 
new numero = 18.5; 
format(Strj, sizeof(Strj), "Esse número é: %f", numero);  


Observações: Usei apenas uma variável Strj para não ficar criando toda hora e alocando mais memória no servidor. Botei 128 pois é o número de caráteres máximo no chat. No caso do Dialog, você vai precisar muito mais, pois não é só aquela linha pequena do Chat, você pode por muito mais informações. Lembrando que o sizeof retorna o valor da variável, que no caso aí é 128(Strj).

Com isso, concluímos que vamos usar format em alguns casos, pois é para você puxar uma variável. Exemplo em um dialog de entrada:

[size=11]Quote:
[/size][table border="0" cellpadding="6" cellspacing="0" width="100%"]
Seu Nick: %s está registrado!
Bem-Vindo ao servidor, digite sua senha para conectar-se!

codigo bloqueado

O %s é um caracter do tipo String, ou seja, usamos para pegar o nome do Player.


Colocando Cores em Dialogs/Mensagens

Essas cores, para você está vendo pela primeira vez, são em hexadecimais. Você pode ver aqui diversos jeitos diferentes de se fazer. Vou fazer aqui uma menos usual e menos trabalhosa:

[size=11]PHP Code:
[/size]
Código:
#define COR_VERMELHO_HEX "{00FF00}"  


[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "Aqui está branco por conta do ( -1 ), e "COR_VERMELHO_HEX" aqui está vermelho por conta da sua cor definida em cima.");  


Podemos também fazer direto:
[size=11]PHP Code:
[/size]
Código:
SendClientMessage(playerid, -1, "{FFFFFF}Aqui está branco, {00FF00}Aqui verde, {FFFFFF}Aqui dnv está branco, {FF0000} mas agora está vermelho.");  


Porque eu recomendo fazer do primeiro jeito? Porque eu quero! Mentira, é porque imagine que você queira usar em vários dialogs, você vai querer copiar e colar sempre os hexadecimais? Pode ser que sim, mas aí fica a critério do programador.



Lembrando que tudo que eu mencionei até agora, não é usado somente em dialogs e muito menos exclusivo da linguagem pawn.


O que é dialog?

No SAMP, simplesmente falando, é uma caixa de dialog onde você pode interagir com o Player, podendo ser com perguntas, listas, etc. Para você entender melhor, é aquela caixinha preta no qual você coloca a senha, informações, entre outras coisas, ao logar no servidor.

Estilos de DIALOGS

[size=11]Quote:
[/size][table border="0" cellpadding="6" cellspacing="0" width="100%"]
0 - DIALOG_STYLE_MSGBOX - Quando você quer transmitir uma mensagem
1 - DIALOG_STYLE_INPUT - Quando você quer que o Player interaja com algo. Ou seja, um campo de texto.
2 - DIALOG_STYLE_LIST - Quando você quer mostrar uma lista de opções ao player.
3 - DIALOG_STYLE_PASSWORD - Quando você quer que o Player bote uma senha.
4 - DIALOG_STYLE_TABLIST - Um Dialog List com tabelas.( apenas 0.3.7+ ) 
5 - DIALOG_STYLE_TABLIST_HEADERS - Um Dialog list com tabelas e subtítulos.( apenas 0.3.7+ )

codigo bloqueado

Estrutura do Dialog

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(PAR1, PAR2, PAR3, "PAR4", "PAR5", "PAR6", "PAR7");  


[size=11]Quote:
[/size][table border="0" cellpadding="6" cellspacing="0" width="100%"]
ShowPlayerDialog: Função de Mostrar a Dialog.
PAR1: Parâmetro onde botamos o ID(pronúncia: Aídi e não idê) do player. Normalmente é playerid pois geralmente é para o player que está fazendo a ação.
PAR2: ID do dialog. Daremos uma identificação pra ele. No seu caso é seu CPF, aqui é número natural. Não podem haver dois iguais pois causará conflito.
PAR3: Estilo do dialog. Nome ou ID.
PAR4: Título do dialog
PAR5: Texto do dialog
PAR6: Texto do botão um do dialog
PAR7: Texto do botão dois do dialog

codigo bloqueado

Vamos a um exemplo do tipo DIALOG_STYLE_MSGBOX simples:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_MSGBOX, "Aviso!", "Aqui é apenas uma mensagem para você!", "Fechar", "Ok");  



Entendendo a public OnPlayerDialogResponse

Esse método já vem como nativo. Você não precisa cria-ló. Basta pesquisar no pawno ou caso não exista, adicione no final do GameMode.

[size=11]PHP Code:
[/size]
Código:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    // bloco de códigos 

    return false; // ou return 0 
}  


Ela é chamada toda vez que você aperta em um dos dois botões do dialog. Seus parâmetros são: playerid, que no caso é o ID do Player, dialogid que é o "CPF" de seu Dialog, response que vai detectar se tu apertou no botão da direita ou esquerda, listitem para detectar qual opção você colocou caso você utilize DIALOG_STYLE_LIST, DIALOG_STYLE_TABLIST ou DIALOG_STYLE_TABLIST_HEADERS, e inputtext para pegar o que você colocou no campo de texto, no caso o DIALOG_STYLE_INPUT ou DIALOG_STYLE_PASSWORD.



Estrutura do DIALOG_STYLE_MSGBOX

Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_msgbox

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 1281, DIALOG_STYLE_MSGBOX, "{F60000}Meu Título em Cor Diferente", "Bem Vindo ao Servidor\nEsse é meu Primeiro DIALOG MSG", "Abrir", "Okay");  



Como já estudamos os parâmetros, sabemos o que está ocorrendo ai. Vale ressaltar que o Dialog 1281 é apenas um exemplo, você pode por qual quiser, contanto que seja diferente dos outros.

Vamos agora para um segundo exemplo mais complexo:
[size=11]PHP Code:
[/size]
Código:
new Exemplo[50]; 
new Nome[] = "Jonathan Feitosa"; 

format(Exemplo, sizeof(Exemplo), "Olá %s!\nBem Vindo ao servidor!", Nome); 
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Welcome!", Exemplo, "Fechar", "Okay");  


Nesse caso, utilizando o format, podemos adicionar variáveis em nossos dialogs. E isso servirá para todos os dialogs! Não vai mudar nada.


Agora, vamos por a resposta em nossos dialogs! Servirá para detectar quando o Player apertar no Botão1 ou Botão2.

[size=11]PHP Code:
[/size]
Código:
// Adicione em algum comando, ou qualquer lugar para abrir nosso Dialog: 
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Meu Primeiro Dialog", "Aperte em Ganhar Grana para ganhar 1000 reais\nAperte em Perder Grana para perder 1000 reais", "Ganhar Grana", "Perder Grana"); 

// Na public do seu GameMode: 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    if(dialogid == 1) // o "CPF do dialog", Se eu botei 1 lá, devo botar 1 aqui ! 
    { 
        if(response) // Se apertou no Botão 1 (Ganhar Grana) 
        { 
            GivePlayerMoney(playerid, 1000); 
            SendClientMessage(playerid, -1, "Você ganhou 1000 reais!");  
        } 
        if(!response) // ou else = Se apertou no Botão 2 (Perder Grana) 
        { 
            SendClientMessage(playerid, -1, "Você perdeu 1000 reais!"); 
            GivePlayerMoney(playerid, 1000); 
        } 
        return true;  
    } 
    return false; 
}  


Estrutura do DIALOG_STYLE_INPUT e DIALOG_STYLE_PASSWORD

Input:
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_input

Password:
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_password

Exemplo:
[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4444, DIALOG_STYLE_INPUT, "Título do Servidor", 
"Digite sua senha no campo Texto", "Selecionar", "Cancelar");  


Nada muda aqui, sempre fica como padrão. Apenas pulei uma linha ali para ficar mais fácil de você enxergar.

O DIALOG_STYLEE_PASSWORD é igual ao DIALOG_STYLE_INPUT, só que as caracteres ficam ocultas no PASSWORD.

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4444, DIALOG_STYLE_PASSWORD, "Título do Servidor", 
"Digite sua senha no campo Texto", "Selecionar", "Cancelar");  


Na estrutura dos dois, utilizaremos meio diferente no DialogResponse:

[size=11]PHP Code:
[/size]
Código:
// Adicione em algum comando, ou qualquer lugar para abrir nosso Dialog: 
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Escreva seu primeiro texto!", "Escreva seu nome!\n\nExemplo: Arlindo", "Confirmar", "Sair"); 

// Na public do seu GameMode: 
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    if(dialogid == 1) // o "CPF do dialog", Se eu botei 1 lá, devo botar 1 aqui ! 
    { 
        if(response) // Se apertou no Botão Confirmar 
        { 
            new Strjf[50]; 
            format(Strjf, sizeof(Strjf), "Muito Bem, Seu nome de acordo com o texto que você botou é: %s", inputtext 
            SendClientMessage(playerid, -1, Strjf);  
        } 
        // Se ele apertar no botão sair, o dialog sumirá pois não botei nenhuma ação para ele  
        return true;  
    } 
    return false; 
}  



Estrutura do DIALOG_STYLE_LIST, DIALOG_STYLE_TABLIST e DIALOG_STYLE_TABLIST_HEADERS 


DIALOG_STYLE_LIST
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_list

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_LIST, "{33CCFF}Teleportes do Meu Servidor", "{FFFF00}Ir DM\n{33AA33}IR Derby", "Selecionar", "Sair");  


Como aprendemos, o \n serve para pular linhas. No dialog list, ela serve para adicionarmos as opções de nossas Listas.
[size=11]PHP Code:
[/size]
Código:
"{FFFF00}IR DM\n{33AA33}IR Derby" 

/* 
Saída: 
Opção 1: IR DM 
Opção 2: IR Derby  

Quanto mais /n, mais opções teremos no nosso dialog. 
*/  


DIALOG_STYLE_TABLIST [b](0.3.7)[/b]
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_tablist

É quase igual aqo Dialog List. Como você sabe, o \t era como se fosse um TAB. Nessa versão do SAMP, ela passou a ter mais utilidade nos dialogs. Ela dar um 'tab' correto, tendo seu limite até o fim da tela. Vou pegar o exemplo da imagem para ficar mais fácil:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4112, DIALOG_STYLE_TABLIST, "Buy Weapon", 
"Deagle\t$5000\t100\n\ 
Sawnoff\t$5000\t100\n\ 
Pistol\t$1000\t50", // Etc. 
"Select", "Cancel");  



Explicando melhor como é:
[size=11]PHP Code:
[/size]
Código:
"Deagle\t$5000\t100\n\Sawnoff\t$5000\t100\n\Pistol\t$1000\t50" 

// para melhor ver: 

"Deagle\t$5000\t100\n 
\Sawnoff\t$5000\t100\n 
\Pistol\t$1000\t50" 

/* 
"Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou parar" 
[...] */  


Se não entendeu, sugiro que releia o tutorial.

DIALOG_STYLE_TABLIST_HEADERS [b](0.3.7)[/b]
Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Dialog_style_tablist_headers

É igual o DIALOG_STYLE_TABLIST, só que vem com título nas colunas. Vou pegar o exemplo da imagem para ficar mais fácil.

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 4444, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon", 
"Weapon\tPrice\tAmmo\n\ 
Deagle\t$5000\t100\n\ 
Sawnoff\t$5000\t100\n\ 
Pistol\t$1000\t50", // Etc. 
"Select", "Cancel");  



Explicando melhor como é:
[size=11]PHP Code:
[/size]
Código:
"Weapon\tPrice\tAmmo\n\Deagle\t$5000\t100\n\Sawnoff\t$5000\t100\n\Pistol\t$1000\t50" 

// para melhor ver: 
"Weapon\tPrice\tAmmo\n 
\Deagle\t$5000\t100\n 
\Sawnoff\t$5000\t100\n 
\Pistol\t$1000\t50" 

/* 
"Titulo da Coluna 1\tTitulo da Coluna \tTitulo da Coluna 3 e agora vou para as opções\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou pular de linha(opção)\n 
Aqui é a Coluna 1\tAqui é a Coluna 2\tAqui é a Coluna 3 e agora vou parar" 
[...]  


Veja um outro exemplo:

Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. 8uIUo9f

Exemplo da Imagem:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon", "Coluna 1\tColune 2\tColuna3\tColuna 4\n\Deagle\t$5000\t100\tteste\n\Sawnoff\t$5000\t100\tteste\n\Pistol\t$1000\t50\tteste", "Selecionar", "Cancel"); 

// Ou para melhor visualizar: 
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_TABLIST_HEADERS, "Buy Weapon", 
"Coluna 1\tColune 2\tColuna 3\tColuna 4\n\ 
Deagle\t$5000\t100\tteste\n\ 
Sawnoff\t$5000\t100\tteste\n\ 
Pistol\t$1000\t50\tteste", // Etc. 
"Selecionar", "Cancel");  


Se não entendeu, sugiro que releia o tutorial.


Então, A RESPOSTA DO DIALOG_STYLE_LIST, DIALOG_STYLE_TABLIST e DIALOG_STYLE_TABLIST_HEADERS é IGUAL na public OnDialogResponse, pois todos são uma lista de opções, a unica diferença entre eles é que trazem mais informações em colunas e subtítulos. Veja como eles funcionam:

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 234, DIALOG_STYLE_LIST, "Menu de Compras de armas", "Eagle\nAK-47\nCombat Shotgun", "Selecionar", "Sair"); 
  
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) 

    if(dialogid == 234) // 'CPF' do Meu Dialog criado 
    { 
        if(response) // Se clicou no botão 'Selecionar' 
        { 
            if(listitem == 0) // Caso selecione o primeiro item - Eagle ( Começamos sempre do 0 ) 
            { 
                GivePlayerWeapon(playerid, WEAPON_DEAGLE, 1000); 
                SendClientMessage(playerid, -1, "Você ganhou uma eagle com 1000 balas"); 
            } 
            if(listitem == 1) // Caso selecione o segundo item - AK-47 
            { 
                GivePlayerWeapon(playerid, WEAPON_AK47, 120); 
                SendClientMessage(playerid, -1, "Você ganhou uma ak-47com 120balas"); 
            } 
            if(listitem == 2) // Caso selecione o terceiro item - Combat Shotgun 
            { 
                GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28); 
                SendClientMessage(playerid, -1, "Você ganhou uma shotgun com 28 balas"); 
            } 
        } 
        return true;  
    } 
  
    return false; 
}  


Como adicionar apenas um botão nos dialogs

[size=11]PHP Code:
[/size]
Código:
ShowPlayerDialog(playerid, 123, DIALOG_STYLE_LIST, "Meu Botão", "Tutorial Meu Botão !!", "Selecionar", "Cancelar");  


Vamos destacar apenas nossos botões no dialog acima:

[size=11]PHP Code:
[/size]
Código:
"Selecionar", "Cancelar")  


[size=11]Quote:
[/size][table border="0" cellpadding="6" cellspacing="0" width="100%"]
Botão 1= Selecionar
Botão 2 = Cancelar

codigo bloqueado

Para ficar com um botão apenas, você deve deixar apenas:

[size=11]PHP Code:
[/size]
Código:
"Selecionar", "")  


Ou seja, o segundo botão ficará vazio Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Smile

[size=18]strcat,strlen ou format para concatenar dialogs?
[/size]


Sem dúvidas format. Bem mais otimizado e rápido. 
Tire dúvidas de velocidades de loop's, o que mais influencia em LAG no servidor junto com timers.


Em Breve aqui: 
Como Organizar meus IDS para não dar conflito.
Dialogs sobre Dialogs
Sistema Simples de GPS

Créditos: Jonathan feitosa e editores da Wiki-SAMP.

Dúvidas, sugestões, erros, avisar-me pois também sou humano. Tópicos com a tag emfinalizaçãoainda em SSGamers - 12 Anos online por você. Smile


Ir para o topo

Data/hora atual: Sáb 27 Abr 2024 - 18:53