16.02.2012, 21:40
(
Последний раз редактировалось |_MeGaTroN_|; 21.02.2012 в 11:15.
)
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
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
Step 4
Vamos adicionar algumas cores:
Step 5
Vamos criar uma nova variavel, em qualquer lugar abaixo de seus defines
Step 6
Em seguida, vamos adicionar um enum, tambйm conhecido como uma enumeraзгo.
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:
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.
Step 9
Vб na callback OnDialogResponse e adiciona isto dentro.
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".
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.
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
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>
Step 3
Vamos definir algumas dialogs
pawn Код:
#define DIALOG_REGISTRO 2000
#define DIALOG_LOGAR 2001
Vamos adicionar algumas cores:
pawn Код:
#define BRANCO "{FFFFFF}"
#define VERMELHO "{F81414}"
#define VERDE "{00FF22}"
#define AZUL CLARO "{00CED1}"
Vamos criar uma nova variavel, em qualquer lugar abaixo de seus defines
pawn Код:
new gPlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
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];
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;
}
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;
}
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;
}
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;
}
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