SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 14/06/2012, 02:12 AM   #1
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Tutorial DOF2 - Registro/Login

Tutorial - DOF2

Bom eu vi algumas pessoas pedindo tutoriais sobre DOF2, e decidi criar esse tutorial simples, com algumas funções mais utilizadas. O sistema que fiz é o típico Registro e Login, um sistema fácil e simples de se fazer, ainda mais quando se fala de DOF2.

Bom, vamos começar o tutorial, se tiver algo para complementar, peço que avise para mim corrigir o problema pois ainda não sei usar todas as funções da include.


Funções que iremos usar

Iremos usar as seguintes funções nesse sistema de Registro e Login:

pawn Code:
DOF2_Exit(); //Função para fechar a include (Creio eu) que terá que sempre ser colocada na callback OnGameModeExit
DOF2_SaveFile(); //Para salvar as alterações feitas no arquivo
DOF2_GetInt(file[],key[],tag[]=""); //Armazena o valor correspondente na variável
DOF2_SetInt(file[],key[],value,tag[]=""); //Substitui a 'key' existente no arquivo pela 'tag' no arquivo
DOF2_FileExists(file[]); //Verifica se o arquivo existe
DOF2_CreateFile(file[],password[]=""); //Cria um arquivo
É claro que tem muitas outras funções de DOF2, mais essas são as mais usadas em vários sistemas e eu sei usá-las melhor.


Começando...

Primeiramente, vamos adicionar as includes ao nosso sistema.
pawn Code:
//TOPO DO GM/FS
#include    a_samp
#include    DOF2

Após isso, iremos definir o Id das DIALOGS.
pawn Code:
#define     DIALOG_REGISTRO         1
#define     DIALOG_LOGAR            2

Agora, vamos adicionar uma enum para armazenar as informações do jogador, juntamente criando a variável para o player e uma outra variável para verificar se o player errou a senha e ser kickado após errar 'X' vezes.
pawn Code:
enum Informacoes
{
    Senha,
    Matou,
    Morreu,
    Dinheiro
}

new Player[MAX_PLAYERS][Informacoes];
new Erro[MAX_PLAYERS];

Como já foi dito, na callback OnGameModeExit(); será adicionado:
pawn Code:
public OnGameModeExit()
{
    DOF2_Exit();
    return 1;
}

Bom, agora o player precisa se registrar antes de entrar no jogo, quando o player se conectar no servidor, irá aparecer uma Dialog para Registro, caso sua conta esteja criada na pasta "Contas" retorna a Dialog de Login. Ficando assim:
pawn Code:
public OnPlayerConnect(playerid)
{
    new arquivo[40], name[MAX_PLAYER_NAME]; //'arquivo' uma string para a format | 'name' para pegar o nome do playerid
    GetPlayerName(playerid, name, 32); //Pega o nome do playerid
    format(arquivo, 40, "Contas/%s.ini", name); //Formata o arquivo com o nome do playerid
    if(DOF2_FileExists(arquivo)) //Verifica se a pasta existe
    { //Caso existir, irá retornar a dialog de Login
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você é Registrado, digite sua senha para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
    }
    else  //Caso o arquivo não exista
    { //Irá retornar a dialog de registro
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Você ainda não é Registrado, digite uma senha para se registrar!", "Confirma", "Cancelar");
    }
    return 1;
}

Agora, vamos as dialogs, onde irá ser para o player logar ou registrar.
pawn Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new arquivo[40], name[MAX_PLAYER_NAME]; //'arquivo' uma string para a format | 'name' para pegar o nome do playerid
    GetPlayerName(playerid, name, 32); //Para pegar o nome do playerid
    format(arquivo, 40, "Contas/%s.ini", name); //Formata o arquivo com o nome do playerid
    if(dialogid == DIALOG_REGISTRO)
    {
        if(!strval(inputtext)) //Verifica se o player digitou LETRAS, caso for true
        { //Retorna a dialog de registro novamente para ele digitar NÚMEROS
            ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Digite apenas números!\nDigite sua senha novamente para se registrar!", "Confirma", "Cancelar");
            return 1;
        }
        if(!response) //Verifica se ele clicar em 'Cancelar"
        { //Caso ele clicar em cancelar, irá retornar ao playerid KICK
            Kick(playerid);
            return 1;
        }
        else //Verifica se ele Confirma o Registro
        { //Caso for true, ira criar o arquivo na pasta CONTAS
            Player[playerid][Senha] = strval(inputtext); //Player[playerid][Senha] vai ser igual ao que ele digitar na dialog Registro
            DOF2_CreateFile(arquivo); //Vai criar o arquvivo na pasta Contas
            DOF2_SetInt(arquivo, "Senha", Player[playerid][Senha]); //Vai salvar a senha do playerid
            DOF2_SetInt(arquivo, "Matou", Player[playerid][Matou]); //Vai salvar quantas vezes ele matou
            DOF2_SetInt(arquivo, "Morreu", Player[playerid][Morreu]); //Vai salvar quantas vezes ele morreu
            DOF2_SetInt(arquivo, "Dinheiro", Player[playerid][Dinheiro]); //Vai salvar o dinheiro dele
            DOF2_SaveFile(); //E finalmente salvando o arquivo, sem essa função o arquivo não será salvo!
            //Retornando a dialog de Login ao player no final para ele logar no server
            ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você se cadastrou, agora é só logar com sua senha registrada!", "Confirma", "Cancelar");
        }
    }
    if(dialogid == DIALOG_LOGAR)
    {
        if(!strval(inputtext)) //Verifica se o player digitou letras, caso for true
        { //Retorna a dialog de Login novamente para ele digitar NÚMEROS
            ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Digite apenas números!\nDigite sua senha cadastrada para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
            return 1;
        }
        if(!response) //Verifica se ele clicar em 'Cancelar"
        { //Caso ele clicar em cancelar, irá retornar ao playerid KICK
            Kick(playerid);
            return 1;
        }
        else //Verifica se ele Confirma o Login
        { //Caso for true, ira verificar se o que ele digitar será a mesma senha que ele se registrou anteriormente
            Player[playerid][Senha] = DOF2_GetInt(arquivo, "Senha"); //Pega a senha do jogador no arquivo da conta
            if(strval(inputtext) == Player[playerid][Senha]) //Se o que ele digitar for igual ao valor que carregou aqui em cima /\
            { //Retornará os dados do player e após irá dar Spawn no mesmo
                Player[playerid][Matou] = DOF2_GetInt(arquivo, "Matou"); //Pega quantos ele matou no arquivo
                Player[playerid][Morreu] = DOF2_GetInt(arquivo, "Morreu"); //Pega quantos ele morreu no arquivo
                Player[playerid][Dinheiro] = DOF2_GetInt(arquivo, "Dinheiro"); //Pega o dinheiro e iguala ao Player[playerid][Dinheiro]
                GivePlayerMoney(playerid, Player[playerid][Dinheiro]); //Da o dinheiro carregado acima
                SpawnPlayer(playerid); //Spawna o player
            }
            else //Caso ele digitar a senha errada
            {
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
                Erro[playerid]++; //O erro vai aumentar cada vez que ele errar
                if(Erro[playerid] == 5) //Quando chegar à 5 vezes, irá retornar a msg e o Ban
                {
                    SendClientMessage(playerid, -1, "Sua conta está banida por errar 5 vezes a sua senha, contacte o Admin para retirar seu Ban!");
                    Ban(playerid);
                    return 1;
                }
            }
        }
    }
    return 1;
}

Se caso o player sair do servidor, vamos precisar salvar a conta dele, para não dar erros depois na hora que ele for logar e não estiver salvo suas informaçoes(Dinheiro, Kills, Deaths). Então na callback OnPlayerDisconnect(playerid);
pawn Code:
public OnPlayerDisconnect(playerid)
{
    new arquivo[40], name[MAX_PLAYER_NAME]; //'arquivo' uma string para a format | 'name' para pegar o nome do playerid
    GetPlayerName(playerid, name, 32); //Para pegar o nome do playerid
    format(arquivo, 40, "Contas/%s.ini", name); //Formata o arquivo com o nome do playerid
    if(DOF2_FileExists(arquivo)) //Verifica se o arquivo da conta do playerid existe
    {
        Player[playerid][Dinheiro] = GetPlayerMoney(playerid); //Pega o dinheiro que o player tem no momento e iguala a Var de informações dele
        DOF2_SetInt(arquivo, "Senha", Player[playerid][Senha]); //Salva a senha, caso ele tenha modificado
        DOF2_SetInt(arquivo, "Matou", Player[playerid][Matou]); //Salva quantos players ele matou
        DOF2_SetInt(arquivo, "Morreu", Player[playerid][Morreu]); //Salva quantas vezes ele morreu
        DOF2_SetInt(arquivo, "Dinheiro", Player[playerid][Dinheiro]); //Salva o dinheiro que foi igualado ao GetPlayerMoney logo acima no começo da função
        DOF2_SaveFile(); //E finalmente salvando o arquivo
    }
    return 1;
}


Sobre o Tutorial

Bom, o sistema é SIMPLES e não muito otimizado, poderia ser mais otimizado com menos linhas, mas prefiro fazer assim para que possamos entender melhor e para quem ainda não sabe mecher com Pawn possa interpretar melhor os códigos.


Requerimentos

Include a_samp
Include DOF2 - PASTEBIN


Sistema Completo e mais Otimizado

pawn Code:
#include    a_samp
#include    DOF2

#define     DIALOG_REGISTRO         1
#define     DIALOG_LOGAR            2

enum Informacoes
{
    Senha,
    Matou,
    Morreu,
    Dinheiro
}

new Player[MAX_PLAYERS][Informacoes];
new Erro[MAX_PLAYERS];

main()
{
    print("Tutorial feito por: EditPawn");
}

public OnGameModeExit()
{
    DOF2_Exit();
    return 1;
}

public OnPlayerConnect(playerid)
{
    if(DOF2_FileExists(Contas(playerid))) ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você é Registrado, digite sua senha para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
    else ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Você ainda não é Registrado, digite uma senha para se registrar!", "Confirma", "Cancelar");
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    SalvarContas(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_REGISTRO)
    {
        if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Digite apenas números!\nDigite sua senha novamente para se registrar!", "Confirma", "Cancelar");
        if(!response) return Kick(playerid);
        else
        {
            Player[playerid][Senha] = strval(inputtext);
            SalvarContas(playerid);
            ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você se cadastrou, agora é só logar com sua senha registrada!", "Confirma", "Cancelar");
        }
    }
    if(dialogid == DIALOG_LOGAR)
    {
        if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Digite apenas números!\nDigite sua senha cadastrada para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
        if(!response) return Kick(playerid);
        else
        {
            Player[playerid][Senha] = DOF2_GetInt(Contas(playerid), "Senha");
            if(strval(inputtext) == Player[playerid][Senha])
            {
                Player[playerid][Matou] = DOF2_GetInt(Contas(playerid), "Matou");
                Player[playerid][Morreu] = DOF2_GetInt(Contas(playerid), "Morreu");
                Player[playerid][Dinheiro] = DOF2_GetInt(Contas(playerid), "Dinheiro");
                GivePlayerMoney(playerid, Player[playerid][Dinheiro]);
            }
            else
            {
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
                Erro[playerid]++;
                if(Erro[playerid] == 5)
                {
                    SendClientMessage(playerid, -1, "Sua conta está banida por errar 5 vezes a sua senha, contacte o Admin para retirar seu Ban!");
                    Ban(playerid);
                    return 1;
                }
            }
        }
    }
    return 1;
}

stock Contas(playerid)
{
    new arquivo[40], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, 32);
    format(arquivo, 40, "Contas/%s.ini", name);
    return arquivo;
}

stock SalvarContas(playerid)
{
    if(!DOF2_FileExists(Contas(playerid))) DOF2_CreateFile(Contas(playerid));
    else
    {
        Player[playerid][Dinheiro] = GetPlayerMoney(playerid);
        DOF2_SetInt(Contas(playerid), "Senha", Player[playerid][Senha]);
        DOF2_SetInt(Contas(playerid), "Matou", Player[playerid][Matou]);
        DOF2_SetInt(Contas(playerid), "Morreu", Player[playerid][Morreu]);
        DOF2_SetInt(Contas(playerid), "Dinheiro", Player[playerid][Dinheiro]);
        DOF2_SaveFile();
    }
    return 1;
}


Créditos

EditPawn - Por criar o Tutorial


Dúvidas/Sugestões/Críticas

Bom, ainda não sei usar todas as funções do DOF2 como já falei anteriormente, mas caso haja algum erro, dúvida, sugestões ou até mesmo críticas, estarei a disposição a responder ao mesmo. Espero que seja útil à quem ainda não sabe mecher com DOF2.

Espero que gostem do meu primeiro tuto '-'

@EDIT
Esqueci de mencionar...
Terá que criar a pasta 'Contas' na ScriptFiles para salvar as contas.

@EDIT²
Arrumei as células e else '-'

@EDIT³
Trocado e Arrumado no sistema de login o DOF2_CheckLogin para outro sistema.
Attached Files
File Type: rar DOF2.rar (10.1 KB, 538 views)
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!

Last edited by EditPawn; 19/06/2012 at 04:21 PM.
EditPawn is offline   Reply With Quote
Old 14/06/2012, 02:13 AM   #2
dPlaYer_
High-roller
 
dPlaYer_'s Avatar
 
Join Date: Jul 2011
Location: Salvador
Posts: 1,739
Reputation: 179
Default Re: Tutorial DOF2 - Registro/Login

Nice '-'


passou por aqui
__________________
dPlaYer_ is offline   Reply With Quote
Old 14/06/2012, 02:19 AM   #3
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Re: Tutorial DOF2 - Registro/Login

Quote:
Originally Posted by dPlaYer_ View Post
Nice '-'


passou por aqui
Obrigado pela colaboração e a atenção
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!
EditPawn is offline   Reply With Quote
Old 14/06/2012, 02:30 AM   #4
Maklister
High-roller
 
Maklister's Avatar
 
Join Date: May 2012
Location: » San Andreas « User type: » High-roller «
Posts: 2,136
Reputation: 135
Default Re: Tutorial DOF2 - Registro/Login

Parabens

UP
Maklister is offline   Reply With Quote
Old 14/06/2012, 02:36 AM   #5
paulor
High-roller
 
Join Date: Nov 2011
Location: Brasil
Posts: 3,117
Reputation: 222
Default Re: Tutorial DOF2 - Registro/Login

Se eu entendi bem a include DOF2 isso aki 'DOF2_CheckLogin' não vai funcionar no seu caso!

pawn Code:
Player[playerid][Senha] = strval(inputtext);
E isso não vai funcionar se o Player digitar caracteres!

Fora isso acho que muitos que não conhecem DOF2 vão aprender a usa-la!
__________________
Meus Projetos - contato@paulorwd.com.br
[IMG]https://sites.******.com/site/facesbypaulo/MetropoleGames.png[/IMG]
paulor is offline   Reply With Quote
Old 14/06/2012, 02:40 AM   #6
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Re: Tutorial DOF2 - Registro/Login

Quote:
Originally Posted by Murilo_sousa View Post
Parabens

UP
Vlw '-'

Quote:
Originally Posted by paulor View Post
Se eu entendi bem a include DOF2 isso aki 'DOF2_CheckLogin' não vai funcionar no seu caso!

pawn Code:
Player[playerid][Senha] = strval(inputtext);
E isso não vai funcionar se o Player digitar caracteres!

Fora isso acho que muitos que não conhecem DOF2 vão aprender a usa-la!
DOF2_CheckLogin, funcionou aqui, e eu fiz para ser usado realmente Números para a senha..
Eu testei o sistema e funcionou perfeitamente sem bug's.

E obrigado pela sua atenção, fiz exatamente para ajudar quem ainda nao sabe mecher com DOF2.
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!
EditPawn is offline   Reply With Quote
Old 14/06/2012, 03:12 AM   #7
Juninho_Oakley
Gangsta
 
Juninho_Oakley's Avatar
 
Join Date: Aug 2011
Location: Fim do Mundo
Posts: 509
Reputation: 28
Default Re: Tutorial DOF2 - Registro/Login

Muito bom seu tutorial
__________________
Favorite Games





Graphic Card


User

Juninho_Oakley is offline   Reply With Quote
Old 14/06/2012, 03:19 AM   #8
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Re: Tutorial DOF2 - Registro/Login

Quote:
Originally Posted by Juninho_Oakley View Post
Muito bom seu tutorial
Obrigado Juninho
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!
EditPawn is offline   Reply With Quote
Old 14/06/2012, 04:01 AM   #9
Lucas_Alemao
Gangsta
 
Lucas_Alemao's Avatar
 
Join Date: Jan 2012
Location: Brasil/Paraná
Posts: 808
Reputation: 50
Default Re: Tutorial DOF2 - Registro/Login

legal, mas podia ter explicado algumas funções como DOF2_SetString, SetFloat, GetString... etc
__________________
Lucas_Alemao is offline   Reply With Quote
Old 14/06/2012, 04:03 AM   #10
EditPawn
Gangsta
 
EditPawn's Avatar
 
Join Date: May 2012
Posts: 966
Reputation: 67
Default Re: Tutorial DOF2 - Registro/Login

Quote:
Originally Posted by Lucas_Alemao View Post
legal, mas podia ter explicado algumas funções como DOF2_SetString, SetFloat, GetString... etc
verdade '-'
Vlw Lucas
__________________
Usando zCmd/sscanf/SQLite
Voltando com pawn e novo Projeto a caminho.

Projetos:
[Tutorial] DOF2 - Registro/Login
[GameMode] Brasil Zombie Games LS - BASE
[FilterScript] E_Anims v2.0
[Include] eDistance System

Code:
Se não houver crítica não haverá evolução!
EditPawn is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tutorial] Register & Login System with Dialogs - DOF2 Jafet_Macario Tutorials 33 21/08/2018 09:10 AM
[Tutorial] A simple registration & login system with Dialogs - Using DOF2 SmiT Tutorials 17 01/07/2013 07:41 AM
[FilterScript] Sistema de registro ( DOF2 - bIni - SII) Paramount. Lançamentos/Releases 22 29/11/2012 08:10 PM
[FilterScript] Sistema de "Registro em DOF2" - Simples / Pedido do Luciano* CidadeNovaRP Lançamentos/Releases 30 11/11/2012 07:31 PM


All times are GMT. The time now is 01:37 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.