[Tutorial] Sistema de Registro e Login - Dialogs ( SII )
#1

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: https://sampforum.blast.hk/showthread.php?tid=58458. Depois de ter baixado, coloque-o em sua Pasta Pawno > include

Step 2
Adicione a include no topo do gm
pawn Код:
#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 Код:
#define DIALOG_REGISTRO 2000
#define DIALOG_LOGAR 2001
Step 4
Vamos adicionar algumas cores:
pawn Код:
#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 Код:
new gPlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
Step 6
Em seguida, vamos adicionar um enum, tambйm conhecido como uma enumeraзгo.
pawn Код:
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 Код:
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 Код:
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 Код:
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 Код:
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.


Downloads:

SII Include - https://sampforum.blast.hk/showthread.php?tid=58458

PASTEBIN - http://pastebin.com/pB9GZvXV


Creditos:

|_MeGaTroN_| - Pelo Tutorial
[DRuG]Slick - Pela include SII
Reply
#2

Minha duvida e . pq tem 2 "" em algumas partes do dialog?
Reply
#3

Mt bom
Reply
#4

Quote:
Originally Posted by [NC]BlackSky
Посмотреть сообщение
Minha duvida e . pq tem 2 "" em algumas partes do dialog?
""BRANCO" Define a cor se eu vc tirar o " ira causar erros o BRANCO sera definido como outro titulo da dialog

Quote:
Originally Posted by 4LiSs0N
Посмотреть сообщение
Mt bom
Obrigado;
Reply
#5

Entendi - '-'
Reply
#6

A definiзгo ""BRANCO"" й para que faзa somente a leitura da cor em { }

Muito bom cara.
Reply
#7

'---'
FOREVER ALONE!
Reply
#8

vlw funfo aki, mais tipo, o cara loga e depois tem q apertar spwan pra nascer, tem como digitar o login e jah dar spawn altomatico ?
Reply
#9

Quote:
Originally Posted by guizaofb
Посмотреть сообщение
vlw funfo aki, mais tipo, o cara loga e depois tem q apertar spwan pra nascer, tem como digitar o login e jah dar spawn altomatico ?
pawn Код:
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);
                SpawnPlayer(playerid);

                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 );
                SpawnPlayer(playerid);
                GivePlayerMoney( playerid, INI_ReadInt( "Dinheiro" ) );
                PlayerInfo[playerid][pAdmin] = INI_ReadInt("Admin");
                INI_Close();
                }
            }
        }
    }
    return 1;
}
Reply
#10

vish vei, dei ctrl + c, ctrl + v e ainda n funfo, fico mesma coisa... o cara faz o login e aparece o bagulio de spawn obrigando o player a clicar la para dar spawn

eu ja vou te dar +rep pelo tutorial =D

____EDIT

ele me mando codigo pm e arrumei vlws
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)