Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ______________________________________
- |__SISTEMA_BASE_DE_REGISTRO_&_LOGIN__|http://forum.sa-mp.com/showthread.php?p=3673290#post3673290
- |______________BY_F1N4L______________|http://forum.sa-mp.com/member.php?u=204784
- |_____________13_04_2016_____________|
- |__________v_0.3z_&_v_0.3.7__________|
- ::Escrever em um arquivo de texto uma sequência de caracteres (letras / números / símbolos);
- CallBack INI_WriteString("arquivo", "key", "valor")
- ::Escrever em um arquivo de texto números com casas decimais;
- CallBack INI_WriteFloat("arquivo", "key", "valor")
- ::Escrever em um arquivo de texto apenas números inteiros;
- CallBack INI_WriteInt("arquivo", "key", "valor")
- ::Escrever em um arquivo de texto valores true/false;
- CallBack INI_WriteBool("arquivo", "key", "bool:valor")
- ::Fazer a leitura do arquivo em determinada Palavra-Chave, neste caso, uma sequência de caracteres (letras / números / símbolos);
- CallBack INI_ReadString("arquivo", "key")
- ::Fazer a leitura do arquivo em determinada Palavra-Chave, neste caso, apenas números inteiros;
- CallBack INI_ReadInt("arquivo", "key")
- ::Faz a leitura do arquivo em determinada Palavra-Chave, neste caso, números com casas decimais;
- CallBack INI_ReadFloat("arquivo", "key")
- ::Fazer a leitura do arquivo em determinada Palavra-Chave, neste caso, valores true/false;
- CallBack INI_ReadBool("arquivo", "key")
- ::Criar um arquivo com o formato especificado;
- CallBack INI_Create("arquivo")
- ::Deletar determinado arquivo;
- CallBack INI_Delete("arquivo")
- ::Abrir determinado arquivo;
- CallBack INI_Open("arquivo")
- ::Salvar todos os dados.
- CallBack INI_Save()
- ::Printar no console o nome de determinada Palavra-Chave e seu respectivo valor.
- CallBack INI_Print()
- */
- #include a_samp // By SA:MP Team
- #include zcmd // By Zeex
- #include sscanf2 // By Y_Less
- #include bini // By Ips Bruno
- /*
- Vamos criar os macros para os diálogos.
- */
- #define DIALOG_REGISTRO 1000
- #define DIALOG_LOGIN 1001
- /*
- Vamos criar agora o enumerador responsável pelos seguintes dados:
- *Nome
- *Senha
- *Dinheiro
- *IP
- *Admin
- *Logado
- */
- enum pInfo
- {
- pNome[MAX_PLAYER_NAME],
- pSenha[20],
- pDinheiro,
- pScore,
- pIP[20],
- pAdmin,
- bool:pLogado
- }
- /*
- Criamos a variável onde será armazenado os valores obtidos no enumerador.
- */
- new User[MAX_PLAYERS][pInfo];
- public OnGameModeInit()
- {
- return 1;
- }
- public OnGameModeExit()
- {
- /*
- Ao finalizar o servidor precisamo fechar o arquivo do player.
- */
- INI_Exit();
- return 1;
- }
- /*
- Obviamente precisamos verificar se o player está ou não registrado.
- Para isso criamos uma condicional para checar se o arquivo com seu nome existe.
- */
- public OnPlayerConnect(playerid)
- {
- for(new i; pInfo:i < pInfo; i++)
- {
- User[playerid][pInfo:i] = 0;
- }
- if(fexist(PastaContas(playerid)))
- {
- /*
- Se o arquivo com o nome do player existe, vamos abrir o arquivo
- e pegar o valor da senha para compará-la com o que o player digitar.
- */
- INI_Open(PastaContas(playerid));
- INI_ReadString(PastaContas(playerid), "Senha");
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "TITULO DA DIALOG", "TEXTO DA DIALOG DE LOGIN", "LOGAR","SAIR");
- }
- else
- {
- /*
- Se o arquivo com o nome do player não existir, irá abrir o diálogo DIALOG_REGISTRO.
- */
- ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "TITULO DA DIALOG", "TEXTO DA DIALOG DE REGISTRO", "REGISTRAR","SAIR");
- }
- return 1;
- }
- /*
- Salvaremos os seguintes dados:
- *Dinheiro
- *Admin
- Por que não salvamos...?
- *Nome
- *IP
- *Senha
- RE: Simplesmente porque esses dados não precisam ser alterados posteriormente,
- pois são salvos ao se registrar e por isso não precisamos fazê-lo novamente.
- Caso queiramos alterar Nome/IP/Senha ingame.
- Neste caso não iremos guardar o valor de Nome/IP/Senha em uma variável,
- mas sim, escrever diretamente nos arquivos, caso contrário a modificação
- não será salva.
- */
- public OnPlayerDisconnect(playerid, reason)
- {
- /*
- Verificamos se o player está logado.
- */
- if(User[playerid][pLogado] == true)
- {
- /*
- Escrevemos dentro do arquivo os valores respectivos das variáveis.
- */
- INI_WriteInt(PastaContas(playerid), "Dinheiro", User[playerid][pDinheiro]);
- INI_WriteInt(PastaContas(playerid), "Admin", User[playerid][pAdmin]);
- INI_WriteInt(PastaContas(playerid), "Score", User[playerid][pScore]);
- /*
- Salvamos os dados do player.
- OBS: BINI não necessita de INI_Save, pois salva automaticamente dentro do arquivo .amx.
- Porém, como dito por ele (Bruno): Para evitar problemas com crash/bug, adicionamos por segurança.
- */
- INI_Save();
- }
- for(new i; pInfo:i < pInfo; i++)
- {
- User[playerid][pInfo:i] = 0;
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- /*
- Definimos a resposta do diálogo DIALOG_REGISTRO.
- */
- if(dialogid == DIALOG_REGISTRO)
- {
- if(response)
- {
- /*
- OBS: Não usarei condicional para verificar se o player digitou uma senha válida.
- Verificamos se o player deixou em branco o campo do inputtext.
- */
- if(!strlen(inputtext))
- {
- SendClientMessage(playerid, -1, "Senha inválida!");
- ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "TITULO DA DIALOG", "TEXTO DA DIALOG DE REGISTRO", "REGISTRAR","SAIR");
- return 1;
- }
- /*
- Verificamos se o player digitou uma senha entre 3 - 20 caracteres.
- */
- if(strlen(inputtext) < 3 || strlen(inputtext) > 20)
- {
- SendClientMessage(playerid, -1, "Tamanho de senha inválido. Utilize entre 3 - 20");
- ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "TITULO DA DIALOG", "TEXTO DA DIALOG DE REGISTRO", "REGISTRAR","SAIR");
- return 1;
- }
- /*
- Criaremos o arquivo com o nome do player.
- */
- INI_Create(PastaContas(playerid));
- /*
- Escrevemos os valores dentro do arquivo nas seguintes Palavras-Chave.
- */
- INI_WriteString(PastaContas(playerid), "Nome", GetName(playerid));
- INI_WriteString(PastaContas(playerid), "Senha", inputtext);
- INI_WriteString(PastaContas(playerid), "IP", GetIP(playerid));
- INI_WriteInt(PastaContas(playerid), "Dinheiro", User[playerid][pDinheiro]=0);
- INI_WriteInt(PastaContas(playerid), "Score", User[playerid][pScore]=0);
- INI_WriteInt(PastaContas(playerid), "Admin", User[playerid][pAdmin]=0);
- /*
- Setamos o player como logado.
- */
- User[playerid][pLogado] = true;
- SendClientMessage(playerid, -1, "Você se registrou com sucesso no servidor.");
- }
- else
- {
- /*
- Caso a resposta seja SAIR o player tomará um Kick.
- */
- Kick(playerid);
- }
- }
- /*
- Definimos a resposta do diálogo DIALOG_LOGIN.
- */
- else if(dialogid == DIALOG_LOGIN)
- {
- if(response)
- {
- /*
- Verificamos se o player deixou em branco o campo do inputtext.
- */
- if(!strlen(inputtext))
- {
- SendClientMessage(playerid, -1, "Você errou a senha!");
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "TITULO DA DIALOG", "TEXTO DA DIALOG DE LOGIN", "LOGAR","SAIR");
- return 1;
- }
- /*
- Vamos comparar se a senha digitada no inputtext é EXATAMENTE a mesma contida no arquivo .ini (por isso o uso de FALSE).
- TRUE = Não diferencia os caracteres [Letras maiúsculas/minúsculas]
- FALSE = Diferencia os caracteres [Letras maiúsculas/minúsculas]
- */
- if(strcmp(inputtext, INI_ReadString(PastaContas(playerid), "Senha"), false) == 0)
- {
- /*
- Caso a senha esteja correta, irá fazer a leitura das seguintes Keys:
- *Dinheiro
- *Admin
- *Score
- */
- User[playerid][pDinheiro] = INI_ReadInt(PastaContas(playerid), "Dinheiro");
- ResetPlayerMoney(playerid);
- GivePlayerMoney(playerid, User[playerid][pDinheiro]);
- User[playerid][pAdmin] = INI_ReadInt(PastaContas(playerid), "Admin");
- User[playerid][pScore] = INI_ReadInt(PastaContas(playerid), "Score");
- SetPlayerScore(playerid, User[playerid][pScore]);
- /*
- Setamos o player como logado.
- */
- User[playerid][pLogado] = true;
- SendClientMessage(playerid, -1, "Você logou com sucesso!");
- }
- else
- {
- /*
- Caso a senha for incorreta.
- */
- SendClientMessage(playerid, -1, "Você errou a senha!");
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "TITULO DA DIALOG", "TEXTO DA DIALOG DE LOGIN", "LOGAR","SAIR");
- }
- }
- else
- {
- /*
- Caso a resposta seja SAIR o player tomará um Kick.
- */
- Kick(playerid);
- }
- }
- return 1;
- }
- /*
- Alguns comandos para exemplificar cada função.
- */
- CMD:setdinheiro(playerid, params[])
- {
- new ID, Quantia, String[128];
- if(sscanf(params, "ui", ID, Quantia)) return SendClientMessage(playerid, -1, "/setdinheiro [id] [quantia]");
- /*
- Resetamos o dinheiro, para posteriormente definir um valor a ele, junto com a variável de dinheiro.
- */
- ResetPlayerMoney(ID);
- GivePlayerMoney(ID, User[ID][pDinheiro] = Quantia);
- format(String, sizeof(String), "Você setou %i de dinheiro para o player %s", Quantia, GetName(ID));
- SendClientMessage(playerid, -1, String);
- return 1;
- }
- CMD:mym(playerid, params[])
- {
- new String[128];
- format(String, sizeof(String), "Você tem R$ %i de dinheiro", User[playerid][pDinheiro]);
- SendClientMessage(playerid, -1, String);
- return 1;
- }
- CMD:setscore(playerid, params[])
- {
- new ID, Score, String[128];
- if(sscanf(params, "ui", ID, Score)) return SendClientMessage(playerid, -1, "/setscore [id] [score]");
- /*
- Setamos o valor do score na variável e automaticamente InGame.
- */
- SetPlayerScore(ID, User[ID][pScore] = Score);
- format(String, sizeof(String), "Você setou %i de score para o player %s", Score, GetName(ID));
- SendClientMessage(playerid, -1, String);
- return 1;
- }
- CMD:setadmin(playerid, params[])
- {
- new ID, Level, String[128];
- if(sscanf(params, "ui", ID, Level)) return SendClientMessage(playerid, -1, "/setadmin [id] [level]");
- /*
- Setamos o valor da variável igual ao valor da var Level.
- */
- User[ID][pAdmin] = Level;
- format(String, sizeof(String), "Você setou level admin %i para o player %s", Level, GetName(ID));
- SendClientMessage(playerid, -1, String);
- return 1;
- }
- /*
- Pegamos o Nick do player.
- */
- stock GetName(playerid)
- {
- new Nome[MAX_PLAYER_NAME];
- GetPlayerName(playerid, Nome, sizeof(Nome));
- return Nome;
- }
- /*
- Pegamos o IP do player.
- */
- stock GetIP(playerid)
- {
- new IP[30];
- GetPlayerIp(playerid, IP, sizeof(IP));
- return IP;
- }
- /*
- Definimos o local do arquivo e o nome desse arquivo.
- */
- stock PastaContas(playerid)
- {
- new Contas[24];
- format(Contas, sizeof(Contas), "Contas/%s.ini", GetName(playerid));
- return Contas;
- }
Advertisement
Add Comment
Please, Sign In to add comment