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
//TOPO DO GM/FS
#include a_samp
#include DOF2
#define DIALOG_REGISTRO 1
#define DIALOG_LOGAR 2
enum Informacoes
{
Senha,
Matou,
Morreu,
Dinheiro
}
new Player[MAX_PLAYERS][Informacoes];
new Erro[MAX_PLAYERS];
public OnGameModeExit()
{
DOF2_Exit();
return 1;
}
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;
}
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;
}
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;
}
#include a_samp
#include DOF2
#define DIALOG_REGISTRO 1
#define DIALOG_LOGAR 2
enum Informacoes
{
Senha,
Matou,
Morreu,
Dinheiro
}
new Player[MAX_PLAYERS][Informacoes];
new Erro[MAX_PLAYERS];
main()
{
print("Tutorial feito por: EditPawn");
}
public OnGameModeExit()
{
DOF2_Exit();
return 1;
}
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;
}
public OnPlayerDisconnect(playerid)
{
SalvarContas(playerid);
return 1;
}
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;
}
stock Contas(playerid)
{
new arquivo[40], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, 32);
format(arquivo, 40, "Contas/%s.ini", name);
return arquivo;
}
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;
}
Player[playerid][Senha] = strval(inputtext);
Se eu entendi bem a include DOF2 isso aki 'DOF2_CheckLogin' nгo vai funcionar no seu caso!
pawn Код:
Fora isso acho que muitos que nгo conhecem DOF2 vгo aprender a usa-la! |
legal, mas podia ter explicado algumas funзхes como DOF2_SetString, SetFloat, GetString... etc
|
pawn Code:
pawn Code:
|
Gostei, mas poderia tambйm ter melhorado nos seguintes pontos ( coisas bem simples ) :
Poderia ter usado menos cйlulas ( new arquivo[64]; ), afinal vocк nгo chegarб a usar nem 40. E da mesma forma, bastava um else |
Prefiro a idйia de ensinar a usar DOF2 por completo do que tentar ensinar a criar somente um sistema de registro/login... Porйm, ficou legal (:
|
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_GetInt(file[],key[],tag[]=""); // e o GetInt ele pega oque foi setado no arquivo
pawn Code:
|
Player[playerid][pAdmin] = DOF2_GetInt(arquivo, "Admin"):
Ficou bom cara eu mesmo tava precisando desse tuto, e muitos aqui no fуrum tambйm, gostei!
Nгo dou +rep porque dei recentemente ![]() |