#include <a_samp>
#include <dini>
//Defines de Dialogs
#define REGISTRO 0
#define LOGIN 1
//Outras defines
#define PASTA_CONTAS "/Contas/%s.ini" //Diret�rio onde as contas s�o salvas
#define MAX_SENHA 16 //Tamanho m�ximo da senha
#define MIN_SENHA 4 //Tamanho m�nimo da senha
//Define Cores
#define tcadm 0x33AAFFFF
#define Vermelho 0xFF0000AA
//enuns e new
enum pInfo
{
Senha[MAX_SENHA+1],
Logged,
LoginsFalsos
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new file[128];
new STRX[256];
new file2[128];
public OnPlayerRequestClass(playerid, classid)
{
//Coloque isso no OnPlayerRequestClass
new aname[MAX_PLAYER_NAME];
GetPlayerName(playerid, aname, sizeof(aname));
format(file, sizeof(file), PASTA_CONTAS, aname);
if(PlayerInfo[playerid][Logged] == 0)
{
if(!dini_Exists(file))
{
format(STRX, sizeof(STRX), "Voc� n�o tem uma conta registrada, %s!\n\nDigite uma senha e clique em \"Registrar\".", aname);
ShowPlayerDialog(playerid, REGISTRO, DIALOG_STYLE_INPUT, "CONTA", STRX, "Registrar", "Sair");
}
if(dini_Exists(file))
{
format(STRX, sizeof(STRX), "Bem-vindo(a) novamente, %! Logue-se em sua conta.\n\nDigite sua senha e clique em \"Logar\".", aname);
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_INPUT, "CONTA", STRX, "Logar", "Sair");
}
}
else
{
new stringz[256];
GetPlayerName(playerid, aname, MAX_PLAYER_NAME);
format(stringz, sizeof(stringz), "(INFO) %s Levou kick automatico por n�o se Registrar/Logar.", aname);
SendClientMessageToAll(tcadm,stringz);
Kick(playerid);
}
//
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//Coloque isso no OnPlayerDisconnect
PlayerInfo[playerid][Logged] = 0;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//Coloque isso no OnDialogResponse
if(dialogid == REGISTRO)
{
new aname[MAX_PLAYER_NAME];
GetPlayerName(playerid, aname, sizeof(aname));
format(file, sizeof(file), PASTA_CONTAS, aname);
if(response == 1)
{
if(strlen(inputtext) < MIN_SENHA || strlen(inputtext) > MAX_SENHA)
{
format(STRX, sizeof(STRX), "(INFO) A senha deve ter entre %d e %d caracteres!", MIN_SENHA, MAX_SENHA);
SendClientMessage(playerid, Vermelho, STRX);
format(STRX, sizeof(STRX), "Senha muito grande ou pequena, %s!\nColoque sua senha e clique em \"Registrar\".", aname);
ShowPlayerDialog(playerid, REGISTRO, DIALOG_STYLE_INPUT, "Registrando uma conta", STRX, "Registrar", "Sair");
return 1;
}
dini_Create(file);
dini_Set(file, "Senha", encrypt(inputtext));
//Coloque abaixo tudo que voc� queira salvar na conta do Jogador
SendClientMessage(playerid, 0x82C0FFAA, "[CONTA] Registrado com sucesso.");
format(STRX, sizeof(STRX), "Logue para poder jogar, %! Logue-se em sua conta.\n\nDigite sua senha e clique em \"Logar\". \n\n :: Brasil Nova Vers�o :: RPG!.",aname);
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_INPUT, "CONTA", STRX, "Logar", "Sair");
GameTextForPlayer(playerid, "~r~Registrado com sucesso", 8000, 3);
PlayerPlaySound(playerid, 1057, 0, 0, 0);
PlayerInfo[playerid][Logged] = 1;
}
else
{
format(STRX, sizeof(STRX), "Voc� tem que ter uma conta para jogar %s!\nColoque sua senha e clique em \"Registrar\".", aname);
ShowPlayerDialog(playerid, REGISTRO, DIALOG_STYLE_INPUT, "Registrando uma conta", STRX, "Registrar", "Sair");
}
}
if(dialogid == LOGIN)
{
new aname[MAX_PLAYER_NAME];
GetPlayerName(playerid, aname, sizeof(aname));
format(file, sizeof(file), PASTA_CONTAS, aname);
if(response == 1)
{
new senhaacc[256];
senhaacc = dini_Get(file, "Senha");
if(strcmp(encrypt(inputtext), senhaacc, true) == 0)
{
//Coloque abaixo tudo que vai acontecer quando o jogador logar
SetSpawnInfo(playerid, 1, dini_Int(file, "Skin"), dini_Int(file, "CasaX"), dini_Int(file, "CasaY"), dini_Int(file, "CasaZ"), 354.1657, 0, 0, 0, 0, 0, 0);
if(dini_Int(file2,"novato") == 2)
{
new string2[256];
new ip[128];
GetPlayerIp(playerid,ip,128);
format(string2, sizeof(string2), "Seu Nick: %s � Seu ID: %d � Seu IP: %s", aname,playerid,ip);
SendClientMessage(playerid, 0xFFFF00AA, string2);
SendClientMessage(playerid, 0xFFFF00AA, "Veja sua identidade, digite /identidade");
}
}
PlayerInfo[playerid][Logged] = 1;
SendClientMessage(playerid, 0x82C0FFAA, "[CONTA] Logado com sucesso.");
SpawnPlayer(playerid);
GameTextForPlayer(playerid, "~r~Logado com sucesso", 8000, 1);
PlayerPlaySound(playerid, 1057, 0, 0, 0);
}
else
{
PlayerInfo[playerid][LoginsFalsos]++;
if(PlayerInfo[playerid][LoginsFalsos] >= 3)
{
format(STRX, sizeof(STRX), "(INFO) %s Levou kick automatico. Raz�o: %d tentativas de login", aname, 3);
SendClientMessageToAll(tcadm, STRX);
Kick(playerid);
}
else
{
SendClientMessage(playerid, Vermelho,"[CONTA] Senha incorreta!");
format(STRX, sizeof(STRX), "Senha incorreta, %! Logue-se em sua conta.\n\nDigite sua senha e clique em \"Logar\".", aname);
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_INPUT, "CONTA", STRX, "Logar", "Sair");
}
}
}
else
{
new aname[MAX_PLAYER_NAME];
GetPlayerName(playerid,aname,sizeof(aname));
format(STRX, sizeof(STRX), "Logue para poder jogar, %! Logue-se em sua conta.\n\nDigite sua senha e clique em \"Logar\". \n\n :: Brasil Nova Vers�o :: RPG!.",aname);
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_INPUT, "CONTA", STRX, "Logar", "Sair");
}
return 1;
}
encrypt(pass[])
{
static charset[] = "qwertyaQWERTYUIOPZXCVBNMLKJHGFDSAsdfghzxcvbnuiopjklm1324657809_";
static css = 63;
new target[MAX_SENHA + 1];
new j = strlen(pass);
new sum = j;
new tmpp = 0;
new i;
new modw;
for (i = 0; i < MAX_SENHA || i < j; i++)
{
modw = i % MAX_SENHA;
tmpp = (i >= j) ? charset[(7 * i) % css] : pass[i];
sum = (sum + chrfind(tmpp, charset) + 1) % css;
target[modw] = charset[(sum + target[modw]) % css];
}
target[MAX_SENHA] = '\0';
return target;
}
stock chrfind(needle, haystack[], start = 0)
{
while(haystack[start])
{
if(haystack[start++] == needle)
{
return start-1;
}
}
return -1;
}
#pragma unused strtok