SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

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

SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 13 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
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.

    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7]

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11643
    Moedas : 1032951
    Data de inscrição : 06/10/2011
    Idade : 29
    Localização : Brasil

    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Empty [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7]

    Mensagem por Weslley_Script Sáb 8 Abr 2023 - 6:24

    Estou atualizando meus tutoriais de dialogo 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 diálogos, devemos aprender algumas coisas básicas:

    Barra de Escape
    Citar:


    Em várias linguagens de programação o caractere de aspas duplas (") é utilizado para delimitar uma cadeia de caracteres. 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:
    PHP como:

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

    O compilador irá reclamar e 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:
    PHP como:

    Código:
    SendClientMessage(playerid, -1, "Olб Mundo, meu nome й \"Jonathan\" "); 

    O que é \ne \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 ensaios em concursos [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Smile.

    Exemplo:
    PHP como:

    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 diálogos, uma delas é a da segunda imagem. Sobre isso vou falar ao decorrer do tutorial.

    Entendo um formato divertido

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


    %i - Para números inteiros
    %d - Para números inteiros
    %s - Para tipo String - Sequência de caracteres
    %f - Para tipo Float, números decimais.
    Quando devo usar formato? 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 uma nova linguagem peão, diferente das POO.
    Qual diferença faz %ie %d? Nenhuma, tanto faz um ou outro. Os dois são inteiros.

    Exemplos:

    PHP como:

    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 é 128(Strj).

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


    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:
    PHP como:

    Código:
    #define COR_VERMELHO_HEX "{00FF00}" 

    PHP como:

    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:
    PHP como:

    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ê quer usar em vários diálogos, você vai querer copiar e colar sempre os hexadecimais? Pode ser que sim, mas fica a critério do programador.



    Lembrando que tudo que eu mencionei até agora, não é usado somente em diálogos e muito menos exclusivo da linguagem peão.


    O que é diálogo?

    No SAMP, simplesmente falando, é uma caixa de diálogo 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
    Citar:


    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 Diálogo
    PHP como:

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

    Citar:


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

    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.
    PHP como:

    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 diálogo. 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

    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Dialog_style_msgbox
    PHP como:

    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:
    PHP como:

    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, usando o formato, podemos adicionar variáveis ​​em nossos diálogos. E isso serveá para todos os diálogos! Não vai mudar nada.


    Agora, vamos por a resposta em nossos diálogos! Servirá para detectar quando o Player apertar no Botгo1 ou Botгo2.
    PHP como:

    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

    Entrada:
    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Dialog_style_input

    Senha:
    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Dialog_style_password

    Exemplo:
    PHP como:

    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 padro. Apenas pulei uma linha ali para ficar mais fácil de você enxergar.

    O DIALOG_STYLEE_PASSWORD é igual ao DIALOG_STYLE_INPUT, sу que os caracteres ficam ocultos no PASSWORD.
    PHP como:

    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:
    PHP como:

    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
    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Dialog_style_list
    PHP como:

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

    Como observamos, o \n serve para pular linhas. No dialog list, ela serve para adicionarmos as opções de nossas Listas.
    PHP como:

    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 (0.3.7)
    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] 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 diálogos. Ela dá um 'tab' correto, tendo seu limite até o fim da tela. Vou pegar o exemplo da imagem para ficar mais fácil:
    PHP como:

    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 é:
    PHP como:

    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 você não entendeu, sugiro que releia o tutorial.

    DIALOG_STYLE_TABLIST_HEADERS (0.3.7)
    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Dialog_style_tablist_headers

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

    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 é:
    PHP como:

    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:

    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] 8uIUo9f

    Exemplo da Imagem:
    PHP como:

    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 você 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 única diferença entre eles й que trazem mais informaзхes em conversas e legendas. Veja como eles funcionam:
    PHP como:

    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 diálogos
    PHP como:

    Código:
    ShowPlayerDialog(playerid, 123, DIALOG_STYLE_LIST, "Meu Botгo", "Tutorial Meu Botгo !!", "Selecionar", "Cancelar"); 

    Vamos destacar apenas nossos botхes no diálogo acima:
    PHP como:

    Código:
    "Selecionar", "Cancelar") 

    Citar:

    Botão 1 = selecionar
    Botão 2 = Cancelar
    Para ficar com um boto apenas, voc deve deixar apenas:
    PHP como:

    Código:
    "Selecionar", "") 

    Ou seja, o segundo botão ficará vazio [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Smile

    strcat,strlen ou format para concatenar diálogos?


    Formato sem dъvidas. Bem mais otimizado e rápido.


    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, avise-me pois também sou humano.[Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Smile



    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] D07Xwqb
    [Tutorial] Manual sobre Diálogos [Atualizado 0.3.7] Yjab9HN

      Data/hora atual: Ter 26 Nov 2024 - 1:52