Tutoriais

Sistema de Registro e Login - Dialogs ( SII )

Já vi inúmeras pessoas, querendo mudar do antigo sistema de arquivos Dini file para uma mais recente, como Y_INI, djSON e até mesmo Fini. A maioria deles entende o formato Dini, e exemplos, até mesmo tutoriais dos sistemas mais novos, por vezes, ajudar, mas para alguns dos mais recentes dos desenvolvedores "isto pode ser uma luta. Criei este tutorial para ajudar aqueles que desejam atualizar "para um novo sistema, um sistema melhor.

Oque é isso?
Este é um tutorial simples sobre como fazer um sistema de login e registro em dialog ( SII )

Step 1
Em primeiro lugar, você vai precisar fazer o download da include SII. Você pode encontrá-lo aqui: http://forum.sa-mp.com/showthread.php?t=58458. Depois de ter baixado, coloque-o em sua Pasta Pawno > include

Step 2
Adicione a include no topo do gm
pawn Code:

#include <SII>

A include SII contém todas as funções necessárias que você vai usar para criar seu sistema de login e registro.

Step 3
Vamos definir algumas dialogs
pawn Code:

#define DIALOG_REGISTRO 2000
#define DIALOG_LOGAR 2001



Step 4
Vamos adicionar algumas cores:
pawn Code:

#define BRANCO "{FFFFFF}"
#define VERMELHO "{F81414}"
#define VERDE "{00FF22}"
#define AZUL CLARO "{00CED1}"



Step 5
Vamos criar uma nova variavel, em qualquer lugar abaixo de seus defines
pawn Code:

new gPlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];


Step 6
Em seguida, vamos adicionar um enum, também conhecido como uma enumeração.
pawn Code:

enum pInfo
{
    pSenha,
    pScore,
    pDinheiro,
    pAdmin
}
new PlayerInfo[MAX_PLAYERS][pInfo];

Uma enumeração armazena muitas coisas em uma variável. Isto é extremamente eficiente e eficaz, em vez de criar um conjunto de variáveis ??diferentes.

Step 7
Vamos criar uma função stock:
pawn Code:

stock ObterINI(playerid)
{
  new conta[64];
  format(conta,30,"Contas/%s.ini",gPlayerName[playerid]);
  return conta;
}

A função stock vai carregar o arquivo do usuário.

Step 8
Estaremos utilizando a função 'fexist' nativo para procurar nosso arquivo. Parâmetros são definidos para a nossa função de ações que nós criamos. Se o arquivo existir, você receberá um dialog de "Login". Se isso não acontecer, você receberá uma dialog registo.
pawn Code:

public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, gPlayerName[playerid], MAX_PLAYER_NAME);
    if (fexist(ObterINI(playerid)))
    {
        ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_INPUT,""BRANCO"Login",""BRANCO"Digite sua senha abaixo para efetuar login.","logar","Quit");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT,""BRANCO"Registrando",""BRANCO"Digite sua senha abaixo para registrar uma nova conta.","Registrar","Quit");
    }
    return 1;
}

Step 9

Vá na callback OnDialogResponse e adiciona isto dentro.
pawn Code:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REGISTRO:
        {
            if (!response) return Kick(playerid);
            if (response)
            {
                if(!strlen(inputtext)) {
                ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, ""BRANCO"Registrando...",""VERMELHO"Você digitou uma senha inválida.\n"BRANCO"Digite sua senha abaixo para registrar uma nova conta.","Registro","Quit");
                }

                if(INI_Open(ObterINI(playerid))) {
                INI_WriteString("Senha",inputtext);
                INI_WriteInt("Score",1);
                INI_WriteInt("Dinheiro",5000);
                INI_WriteInt("Admin",0);

                INI_Save();
                INI_Close();

                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_INPUT,""BRANCO"Logar",""BRANCO"Digite sua senha abaixo para efetuar login.","Logar","Quit");
            }
        }
    }
        case DIALOG_LOGAR:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(!strlen(inputtext)) {
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_INPUT, ""BRANCO"Logar",""VERMELHO"Você digitou uma senha inválida.\n"BRANCO"Digite sua senha abaixo para efetuar login.","Logar","Quit");
                }

                if(INI_Open(ObterINI(playerid))) {
                INI_ReadString(PlayerInfo[playerid][pSenha],"Senha",20);

                if(strcmp(inputtext,PlayerInfo[playerid][pSenha],false)) {
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_INPUT, ""BRANCO"Logar",""VERMELHO"Você digitou uma senha incorreta.\n"BRANCO"Digite sua senha abaixo para acessar.","Logar","Quit");
                }

                SetPlayerScore( playerid, INI_ReadInt("Score" ) );
                ResetPlayerMoney( playerid );
                GivePlayerMoney( playerid, INI_ReadInt( "Dinheiro" ) );
                PlayerInfo[playerid][pAdmin] = INI_ReadInt("Admin");
                INI_Close();
                }
            }
        }
    }
    return 1;
}

Case Dialog REGISTRO:

Em vez de usar o 'if' para definir minhas dialogs, eu usei case em que parecem ter menos espaço e são supostamente 'rápido'. (! response) a função se o primeiro botão não foi clicado, ele irá kickar o jogador.

O if(!strlen(inputtext)) explica que nada foi digitado na caixa de dialog (input), você seria então solicitado a outra caixa de dialog que mostra 'Senha incorreta'.

Se tudo correr bem, o INI_Open função é então executado que carrega e abre o arquivo de usuários. Uma vez aberto, INI_WriteInt dos INI_WriteString 'outras funções' pode ser chamado. Em seguida, é terminar pelo "INI_Save 'função que salva os valores que tenham sido estabelecidas e / ou cordas que tenha sido inscrita. Finalmente, 'INI_Close' fecha o arquivo de usuários.

Uma vez terminado, você será solicitado para o dialog "Login".

Case Dialog LOGAR

A única coisa que está acontecendo (com exceção do userfile sendo aberta e fechada), o 'INI_ReadInt' e 'INI_ReadString' função é chamada. Quando o jogador faz login, ele carrega 'stats' dos jogadores ou por assim dizer.

Exemplo: Se o jogador teve, $ 1000 reais, antes que ele desconectado, "INI_ReadInt" a função irá ler esse valor, que seria chamado com GivePlayerMoney para carregar o valor do jogador Dinheiro.

Step 10
Finalmente, vamos precisar para salvar o stats jogador, quando ele se desconecta.
pawn Code:

public OnPlayerDisconnect(playerid, reason)
{
    if(INI_Open(ObterINI(playerid))) {
  
    INI_WriteInt("Score",PlayerInfo[playerid][pScore]);
    INI_WriteInt("Dinheiro",GetPlayerMoney(playerid));
    INI_WriteInt("Admin",PlayerInfo[playerid][pAdmin]);

    INI_Save();
    INI_Close();
    }
    return 1;
}

Eu escolhi o callback OnPlayerDisconnect para salvar 'stats' jogador porque isso cria lag muito menos como oposição ao OnPlayerUpdate.
Chefao_AbduS=Sitema

Xat Samp Extreme