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!

SSGamers - 12 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] Tutorial DOF2 - Registro/Login

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031967
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Tutorial DOF2 - Registro/Login Empty [Tutorial] Tutorial DOF2 - Registro/Login

    Mensagem por Weslley_Script Qua 22 Mar 2023 - 11:19

    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:




    Código:
    [center][left]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[/left][/center]
    [size=14]Й 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.[/size]




    Comeзando...

    Primeiramente, vamos adicionar as includes ao nosso sistema.


    Código:
    [center][left]//TOPO DO GM/FS
    #include    a_samp
    #include    DOF2[/left][/center]
    [size=14]Apуs isso, iremos definir o Id das DIALOGS.[/size]





    Código:
    [center][left]#define     DIALOG_REGISTRO         1
    #define     DIALOG_LOGAR            2[/left][/center]
    [size=14]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.[/size]





    Código:
    enum Informacoes
    {
        Senha,
        Matou,
        Morreu,
        Dinheiro
    }

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

    Como jб foi dito, na callback OnGameModeExit(); serб adicionado:



    Código:
    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:



    Código:
    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.



    Código:
    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);



    Código:
    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



    Código:
    #include    a_samp
    #include    DOF2




    Código:
    #define     DIALOG_REGISTRO         1
    #define     DIALOG_LOGAR            2




    Código:
    enum Informacoes
    {
        Senha,
        Matou,
        Morreu,
        Dinheiro
    }




    Código:
    new Player[MAX_PLAYERS][Informacoes];
    new Erro[MAX_PLAYERS];




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

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




    Código:
    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;
    }



    Código:
    public OnPlayerDisconnect(playerid)
    {
        SalvarContas(playerid);
        return 1;
    }




    Código:
    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;
    }


    Código:

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



    Código:
    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 '-' [Tutorial] Tutorial DOF2 - Registro/Login Biggrin

    @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.



    [Tutorial] Tutorial DOF2 - Registro/Login D07Xwqb
    [Tutorial] Tutorial DOF2 - Registro/Login Yjab9HN

      Data/hora atual: Dom 28 Abr 2024 - 1:27