Ad Code

Responsive Advertisement

[TUTORIAL] Sistema de login e registro - Diálogos - Usando Y_INI



 





Sistema de login e registro - Diálogos - Usando Y_INI

Sistema de login e registro - Diálogos - Usando Y_INI


O que é isso?
Um tutorial simples de como fazer um sistema de Login e Registro usando Y_INI.

O que é Y_INI?
Y_INI é um extenso leitor e gravador de arquivos baseado em .INI, também conhecido como 'Sistema de Gerenciamento de Arquivos' criado por Y_Less. Isso está incluído na biblioteca / diretório YSI junto com outros itens úteis, como y_commands (YCMD) e y_groups.


Qual é a diferença entre este e meu escritor de arquivo?
Y_INI não apenas foi dito, mas provou ser um dos leitores e gravadores de arquivos .INI mais rápidos e eficientes criados. Você pode ler mais visitando:





Etapa I
Adicione o Y_INI Include no início do script.
Código de peão:
#include <YSI \ y_ini>
Isso inclui todas as funções necessárias para criar nosso sistema de Login e Registro.


Etapa II
Vamos definir alguns Diálogos.

Código de peão:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4


Etapa III
Definindo o 'PATH' do arquivo .INI.

Código de peão:
#define PATH "/Users/%s.ini"

Etapa IV
Vamos adicionar algumas cores.

Código de peão:
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"

Etapa V
Vamos usar um enum para armazenar nossas variáveis.

Código de peão:
enum pInfo
{
    pPass,
    pCash,
    pAdmin,
    pKills,
    pDeaths
}
novo PlayerInfo [ MAX_PLAYERS ] [ pInfo ] ;

Etapa VI
Agora vamos criar uma função para carregar os dados do usuário.


Código de peão:
encaminhar LoadUser_data ( playerid, nome [ ] , valor [ ] ) ;
public LoadUser_data ( playerid, nome [ ] , valor [ ] )
{
    INI_Int ( "Senha" , PlayerInfo [ playerid ] [ pPass ] ) ;
    INI_Int ( "Dinheiro" , PlayerInfo [ playerid ] [ pCash ] ) ;
    INI_Int ( "Admin", PlayerInfo [ playerid ] [ pAdmin ] ) ;
    INI_Int ( "Kills" , PlayerInfo [ playerid ] [ pKills ] ) ;
    INI_Int ( "Mortes" , PlayerInfo [ playerid ] [ pMortees ] ) ;
    return 1 ;
}


Etapa VII
Vamos criar uma função de estoque simples.

Código de peão:
estoque UserPath ( playerid )
{
    nova string [ 128 ] , playername [ MAX_PLAYER_NAME ] ;
    GetPlayerName ( playerid, playername, sizeof ( playername ) ) ;
    formato ( string, sizeof ( string ) , PATH, playername ) ; string de
    retorno ;
}
A função de estoque 'UserPath' vai simplesmente 'pegar' o 'PATH' do arquivo do usuário.


Etapa VIII
Adicione este código abaixo de sua função de estoque anterior.
Código de peão:
/ * Créditos para Dracoblue * /
estoque udb_hash ( buf [ ] ) {
    new length = strlen ( buf ) ;
    novo s1 = 1 ;
    novo s2 = 0 ;
    novo n;
    para ( n = 0 ; n < comprimento; n ++ )
    {
       s1 = ( s1 + buf [ n ] ) % 65521 ;
       s2 = ( s2 + s1 )     % 65521 ;
    }
    return ( s2 << 16 ) + s1;
}

O estoque acima é um simples 'hasher' e será usado para fazer hash de senhas, Créditos para Dracoblue.


Etapa IX
Agora vamos usar o callback 'OnPlayerConnect' para verificar se o jogador está registrado ou não.
Código de peão:
public OnPlayerConnect ( playerid )
{
    if ( fexist ( UserPath ( playerid ) ) )
    {
        INI_ParseFile ( UserPath ( playerid ) , "LoadUser_% s" , .bExtra = true, .extra = playerid ) ;
        ShowPlayerDialog ( playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "" COL_WHITE "Login" , "" COL_WHITE "Digite sua senha abaixo para fazer o login." ,"Login" , "Sair" ) ;
    }
    else
    {
        ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "" COL_WHITE "Registrando ..." , "" COL_WHITE "Digite sua senha abaixo para registrar uma nova conta." , "Registrar" , "Sair" ) ;
    }
    return 1 ;
}
Estaremos usando a função nativa 'fexist' para pesquisar nosso arquivo. Os parâmetros são definidos para nossa função de estoque que criamos. Se o arquivo existir, você receberá uma caixa de diálogo 'Login'. Caso contrário, você receberá uma caixa de diálogo de registro.


Etapa X

Código de peão:
public OnDialogResponse ( playerid, dialogid, response, listitem, inputtext [ ] )
{
    switch ( dialogid )
    {
        case DIALOG_REGISTER :
        {
            if ( ! response ) return Kick ( playerid ) ;
            if ( resposta )
            {
                if ( ! strlen ( inputtext ) ) return ShowPlayerDialog ( playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE "Registrando ..." , "" COL_RED "Você digitou uma senha inválida. \ N " COL_WHITE "Digite sua senha abaixo para registrar uma nova conta." , "Registrar" , "Sair" ) ;
                novo INI : Arquivo = INI_Open ( UserPath ( playerid ) ) ;
                INI_SetTag ( Arquivo, "dados" ) ;
                INI_WriteInt ( Arquivo, "Senha" ,) ) ;
                INI_WriteInt ( Arquivo, "Dinheiro" , 0 ) ;
                INI_WriteInt ( Arquivo, "Admin" , 0 ) ;
                INI_WriteInt ( Arquivo, "Kills" , 0 ) ;
                INI_WriteInt ( Arquivo, "Mortes" , 0 ) ;
                INI_Close ( Arquivo ) ;

                SetSpawnInfo ( playerid, 0 , 0, 1958,33 , 1343,12 , 15,36 , 269,15 , 0 , 0 , 0 , 0 , 0 , 0 ) ;
                SpawnPlayer ( playerid ) ;
                ShowPlayerDialog ( playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX, "" COL_WHITE "Sucesso!" , "" COL_GREEN "Ótimo! Seu sistema Y_INI funciona perfeitamente. Relog para salvar suas estatísticas!" , "Ok" , "" ) ;
           
        }

        case DIALOG_LOGIN :
        {
            if ( ! resposta ) return Kick ( playerid ) ;
            if ( resposta )
            {
                if ( udb_hash ( inputtext ) == PlayerInfo [ playerid ] [ pPass ] )
                {
                    INI_ParseFile ( UserPath ( playerid ) , "LoadUser_% s" , .bExtra = true, .extra =playerid ) ;
                    GivePlayerMoney ( playerid, PlayerInfo [ playerid ] [ pCash ] ) ;
                    ShowPlayerDialog ( playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX, "" COL_WHITE "Sucesso!" , "" COL_GREEN "Você fez login com sucesso!" , "Ok" , "" ) ;
                }
                else
                {
                    ShowPlayerDialog ( playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "", "" COL_RED "Você digitou uma senha incorreta. \ N " COL_WHITE "Digite sua senha abaixo para fazer o login." , "Login" , "Sair" ) ;
                }
                return 1 ;
            }
        }
    }
    return 1 ;
}

Em vez de usar a instrução 'if' para definir meus diálogos, usei casos porque eles parecem ocupar menos espaço e são supostamente 'mais rápidos'. A (! Resposta) é a função se o primeiro botão não tiver sido clicado, ele chutará o jogador.

O if (! Strlen (texto de entrada)) explica se nada foi inserido na caixa de diálogo (entrada), você será solicitado a outra caixa de diálogo que mostra 'Senha incorreta'.

Se tudo correr bem, a função INI_Open é então 'executada' que carrega e abre o Userfile. Uma vez aberta, a função 'INI_WriteInt' é então chamada e começa a escrever os dados no arquivo do usuário. O udb_hash geraria um código hash a partir do texto de entrada do jogador (o que você digitou). E depois que tudo isso for concluído, ele é fechado por 'INI_Close'

Quando terminar, você será solicitado a acessar a caixa de diálogo 'Login'.


Em 'DIALOG_LOGIN', se a resposta for falsa (você clicou em 'SAIR), você será expulso. Se as informações corretas forem fornecidas (senha fornecida), a função INI_Parsefile fará a varredura e carregará os dados do seu player.


Etapa XI
Não se esqueça, você precisaria de uma maneira de salvar essas variáveis. O retorno de chamada OnPlayerDisconnect simplesmente abre novamente os arquivos, grava quaisquer valores que foram armazenados e, em seguida, fecha-o.
Código de peão:
public OnPlayerDisconnect ( playerid, motivo )
{
    new INI : File = INI_Open ( UserPath ( playerid ) ) ;
    INI_SetTag ( Arquivo, "dados" ) ;
    INI_WriteInt ( File, "Cash" , GetPlayerMoney ( playerid ) ) ;
    INI_WriteInt ( Arquivo, "Admin" , PlayerInfo [ playerid ] [ pAdmin ] ) ;
    INI_WriteInt ( Arquivo, "Kills" , PlayerInfo [ playerid ] [ pKills ] ) ;
    INI_WriteInt ( File, "Deaths" , PlayerInfo [ playerid ] [ pDeaths ] ) ;
    INI_Close ( Arquivo ) ;
    return 1 ;
}

Etapa XII
Finalmente, adicione isso a OnPlayerDeath para agregar valor (es) a mortes e mortes.

Código de peão:
public OnPlayerDeath ( playerid, killerid, motivo )
{
    PlayerInfo [ killerid ] [ pKills ] ++ ;
    PlayerInfo [ playerid ] [ pDeaths ] ++ ;
    return 1 ;
}

Transferências:

Pastebin - http://pastebin.com/



Postar um comentário

0 Comentários

© 2022 PawnScript All Rights Reversed