[Tutorial] Sistema de Registro / Login em DOF2
#1

* Introduзгo

Bom galera, sei que jб exitem muitos tutoriais sobre isso mais to aqui mais uma vez porque sei que pode ser ъtil para novatos etc. Hoje vou ensinar como criar um sistema de registro/login com salva
mento em DOF2.

* Mгos a Obra

=> Vamos comeзar com as includes no topo do seu GM adicione :

pawn Код:
#include <DOF2>
OBS: Se nгo tem a include pode baixa-lб no Link : http://www.4shared.com/file/EFmfDfJd/DOF2.html


=> Vamos definir o id dos dialogs

pawn Код:
#define DIALOG_LOGAR 1
#define DIALOG_REGISTRO 2
=> Vamos Criar um Enum(Significa "enumerar" os itens) do salvamento.

pawn Код:
enum pInfo //criando o enum
{
    pSkin, // Variavel da skin
    pSenha // variavel da senha, Lembrando que o Ultimo Item nao precisa da Vнrgula
};
new PlayerInfo[MAX_PLAYERS][pInfo]; //Significa que cada vez que vocк digitar "PlayerInfo" Vai entender que й pra executar as variaveis da enum "pInfo".
=> Vamos criar a variavel de erro que vai armazenar quantas vezes o player errou a senha

pawn Код:
new Erro[MAX_PLAYERS];
=> Vamos na public (OnGamemodeExit() - Se for Um gamemode) ou (OnFilterScriptInit() - Se for um filterscript) e adicione isso:

pawn Код:
DOF2_Exit(); // Para desligar a Include DOF2
=> Vamos em (OnPlayerConnect(playerid) e adicione isso:

pawn Код:
new name[MAX_PLAYER_NAME]; // Cria a variavel de nome
    new arquivo[40]; // variavel arquivo
    GetPlayerName(playerid, name, 32);// Serve para pegar o nome do player
    format(arquivo, 40, "Jogadores/%s.ini", name); // formata a string arquivo e cria um arquivo na pasta "Jogadores"
    if(DOF2_FileExists(arquivo)) // se tiver registrado
    {
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
    }
    else // se nao tiver registrado
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Registro", "Status da conta : Nгo Registrada\n digite uma senha para se registrar!", "Registrar", "Cancelar");
    }
=> Vamos em OnPlayerDisconnect e adicione isso :

pawn Код:
new arquivo[40], name[MAX_PLAYER_NAME]; // cria a variavel name com 40 celulas e a variavel Name
    GetPlayerName(playerid, name, 32); // Pega o nome do player
    format(arquivo, 40, "Jogadores/%s.ini", name); // Formata o arquivo que existe na pasta Jogadores
    if(DOF2_FileExists(arquivo)) // se o arquivo existir
    {
        DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][pSenha]); // seta a senha do player para o que ele digitou
        DOF2_SetInt(arquivo, "Skin", PlayerInfo[playerid][pSkin]); // seta a skin para o id da skin atual
        DOF2_SaveFile(); // finalmente salvando o arquivo
    }
=> Vamos na Public OnPlayerSpawn e adicione isso :

pawn Код:
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]); // Seta a skin do player quando ele spawnar para a skin salva
=> Vamos na public OnDialogResponde e Adicione isso :

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new arquivo[40], name[MAX_PLAYER_NAME]; // criando a string arquivo com 40 celulas e criando a variavel name
    GetPlayerName(playerid, name, 32); // pegando o nome do player
    format(arquivo, 40, "Jogadores/%s.ini", name); // formatando o arquivo para a pasta Jogadores
    if(dialogid == DIALOG_REGISTRO) // Dialog registro
    {
        if(!strval(inputtext)) // se ele nao digitar numeros da erro e volta no dialog de registro
        {
            ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Registro", "Status da conta : Nгo Registrada\n digite uma senha para se registrar!", "Registrar", "Cancelar");
        SendClientMessage(playerid, -1, "[BBS] Erro, Digite apenas nъmeros para se registrar.");
        return 1;
        }
        if(!response) se ele apertar o botao Cancelar, kicka ele !
        {
            Kick(playerid);
            return 1;
        }
        else // se ele colocar a senha certa cria os arquivos
        {
            PlayerInfo[playerid][pSenha] = strval(inputtext); // pega a senha que ele digitou no campo do dialog
            DOF2_CreateFile(arquivo); // cria o arquivo na pasta Jogadores
            DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][pSenha]); // seta a senha para a que ele digitou no dialog
            DOF2_SetInt(arquivo, "Skin", 23); // seta a skin dele para 23, podendo mudar para qualquer numero.
        DOF2_SaveFile(); // salva o arquivo
        SendClientMessage(playerid, -1, "[BBS] Sua Conta foi Registrada, Agora digite sua senha novamente para logar!");
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
        }
    }
    if(dialogid == DIALOG_LOGAR)
    {
        if(!strval(inputtext)) // se ele nao digitar apenas numeros volta o dialog de login
        {
            SendClientMessage(playerid, -1, "[BBS] Erro, Digite apenas nъmeros para se logar.");
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
        return 1;
        }
        if(!response) // se ele clickar em Cancelar kicka ele !
        {
            Kick(playerid);
            return 1;
        }
        else // Se ele colocar a senha certa
        {
            PlayerInfo[playerid][pSenha] = DOF2_GetInt(arquivo, "Senha"); // pega a senha salva dele
            if(strval(inputtext) == PlayerInfo[playerid][pSenha]) // pega a senha que ele digitou
            {
                PlayerInfo[playerid][pSkin] = DOF2_GetInt(arquivo, "Skin"); // pega a skin do player
                SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]); // seta a skin do player para a skin salva
                SpawnPlayer(playerid); // em seguida, spawna o player
            }
            else // se ele errar a senha mostra o dialog denovo
            {
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
                Erro[playerid]++; // e adiciona 1 erro
                if(Erro[playerid] == 5) // se ele errar 5 vezes ele serб banido !
                {
                    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;
}
=> No final do GM, crie a stock de pegar o nome do player

pawn Код:
stock ReturnPlayer(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    return name;
}
ScreenShots :

Login:



Registro:



Spawn:



Arquivo Criado :



Arquivos Salvos :



__________________________________________________ _______________________________________________

UFAAAA !! terminei, como perceberam o tutorial ficou bem grande
OBS: Se tiver algum erro me avisem PORFAVOR
Reply
#2

Poderia ser melhor , podia ter melhorado a explicaзгo e o cуdigo existe coisas desnecessбrias e coisas б melhorar.
5/10

#OFF
KK First.
Reply
#3

Quote:
Originally Posted by iMega
Посмотреть сообщение
Poderia ser melhor , podia ter melhorado a explicaзгo e o cуdigo existe coisas desnecessбrias e coisas б melhorar.
5/10

#OFF
KK First.
Obrigado pela Opniгo
Reply
#4

Nгo vou mentir, a ideia e o esforзo valeram.. Muito bom.

Ultimamente tem tido uns tutoriais que vem explicando apenas uma certa 'orientaзгo de tags', exemplo:
"Vocк pega esse cуdigo aqui, e cola nessa callback aqui, e ai vocк vai ver que vai funcionar.",

o conceito de tutorial й um pouco diferente, ele indica algo que vai auxiliar a pessoa no aprendizado de alguma coisa, passo a passo diante do funcionamento(ou seja, quando vocк entende oque estб fazendo...).
Nгo estou querendo crнticar vocк, nem outros que talvez se sintam ofendidos, mas estou tentando alerta-los uma forma de melhorar para o prуximo tutorial, espero que leve isso como uma dica para o seu prуximo tutorial sair explкndido.

Abraзos.
Reply
#5

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Nгo vou mentir, a ideia e o esforзo valeram.. Muito bom.

Ultimamente tem tido uns tutoriais que vem explicando apenas uma certa 'orientaзгo de tags', exemplo:
"Vocк pega esse cуdigo aqui, e cola nessa callback aqui, e ai vocк vai ver que vai funcionar.",

o conceito de tutorial й um pouco diferente, ele indica algo que vai auxiliar a pessoa no aprendizado de alguma coisa, passo a passo diante do funcionamento(ou seja, quando vocк entende oque estб fazendo...).
Nгo estou querendo crнticar vocк, nem outros que talvez se sintam ofendidos, mas estou tentando alerta-los uma forma de melhorar para o prуximo tutorial, espero que leve isso como uma dica para o seu prуximo tutorial sair explкndido.

Abraзos.
Vlw mano, Tentarei melhorar obrigado pela opniao
Reply
#6

Quote:
Originally Posted by GabrielSantos
Посмотреть сообщение
Vlw mano, Tentarei melhorar obrigado pela opniao
Pф, nem esquenta seu tuto ficou muito bom. :3
Reply
#7

Poderia ter poupado linhas e ter indentado melhor os cуdigos.

Bom trabalho.

RP++;
Reply
#8

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Pф, nem esquenta seu tuto ficou muito bom. :3
e a opniao dele nй mano, to deboa vlw ai
Reply
#9

Quote:
Originally Posted by StrondA_
Посмотреть сообщение
Poderia ter poupado linhas e ter indentado melhor os cуdigos.

Bom trabalho.

RP++;
Opa, Obrigado pela opniгo !
Reply
#10

Parabйns pela iniciativa...
Vocк mostrou a base onde todo mundo precisa quando vai comeзar um gamemode do 0, e ainda usando o DOF2...
Parabйns continue assim...

@REP
Reply
#11

Parabйns bom tutorial como o maikonk disse (Vocк mostrou a base onde todo mundo precisa quando vai comeзar um gamemode do 0, e ainda usando o DOF2...)

DOF2 (eu sу uso ele assim como o ZCMD, fбcil, prбtico e rбpido)

Um dos maiores problemas de quem quer montar um servidor й o sistema de login/registro, Vocк poderia ter utilizado tambйm variбveis dos salvamentos em geral como gTeam, Nick e outros seria bacana ficaria mais completo 9/10 +repp parabйns novamente pela iniciativa.
Reply
#12

Quote:
Originally Posted by maikonk
View Post
Parabйns pela iniciativa...
Vocк mostrou a base onde todo mundo precisa quando vai comeзar um gamemode do 0, e ainda usando o DOF2...
Parabйns continue assim...

@REP
Vlw
Reply
#13

Quote:
Originally Posted by focaximubh
View Post
Parabйns bom tutorial como o maikonk disse (Vocк mostrou a base onde todo mundo precisa quando vai comeзar um gamemode do 0, e ainda usando o DOF2...)

DOF2 (eu sу uso ele assim como o ZCMD, fбcil, prбtico e rбpido)

Um dos maiores problemas de quem quer montar um servidor й o sistema de login/registro, Vocк poderia ter utilizado tambйm variбveis dos salvamentos em geral como gTeam, Nick e outros seria bacana ficaria mais completo 9/10 +repp parabйns novamente pela iniciativa.
Obrigado!
Reply
#14

Muito bom, queria saber mais sobre o DOF2
+rep
Reply
#15

Legal o tutorial.
Reply
#16

Quote:
Originally Posted by lucaspilar
View Post
Muito bom, queria saber mais sobre o DOF2
+rep
Opa vlw
Reply
#17

Quote:
Originally Posted by ProKillerpa
View Post
Legal o tutorial.
Obrigado !
Reply
#18

Seria melhor trocar o "Ban" pelo o "Kick".
Уtimo tutorial, bom para iniciantes !

Cumpts.
Reply
#19

Quote:
Originally Posted by DarckWilly
View Post
Seria melhor trocar o "Ban" pelo o "Kick".
Уtimo tutorial, bom para iniciantes !

Cumpts.
Obrigado !
Reply
#20

Tente explicar mais os detalhes
Reply


Forum Jump:


Users browsing this thread: 6 Guest(s)