Coloque no topo:
#include <dini> #include <sscanf> #define PASTAPLAYERS "Registro"
Crie essas variaveis enumeradas:
enum gAdmin { bool:Logado, Nivel } new AdminInfo[MAX_PLAYERS][gAdmin]; new GivePlayerid; new Nome[24]; new string[200];
Explicação:
bool:Logado Serve para verificar se o playe está logado ou não.
Nivel serve para poder ter um nível.
___________________
-> Começando:
-------------------------
Crie:
CMD:registrar(playerid, params[]) { return 1; }
Info: Não pode conter Números Maiúsculos na parte do comando.
Agora adicione:
CMD:registrar(playerid, params[]) { GetPlayerName(playerid, Nome, 24); format(string, sizeof(string),"%s.txt", Nome); if(fexist(string)) return cmd_logar(playerid, params[]); static Senha; if(sscanf(params,"d", Senha[playerid])) return SendClientMessage(playerid, Cor,"[ERRO]: Correto é:/Registrar [Senha]"); dini_Create(string); AdminInfo[playerid][Logado] = true; dini_Set(string, "Nome", Nome); dini_Set(string, "Senha", Senha); dini_Set(string, "Nivel", AdminInfo[playerid][Nivel]); SendClientMessage(playerid, Cor,"[INFO]: Registrado com suscesso!"); return 1; }
Explicando:
if(sscanf(params,"d", Senha[playerid])) return SendClientMessage(playerid, Vermelho,"[ERRO]: Correto é: /Registrar [Senha]); Serve para verficar se a utilização do código está correcta.
GetPlayerName(playerid, Nome, 24): Serve para pegar nome do player.
if(fexist(string)) return cmd_logar(playerid, params[]): Se o Nome do playe estiver registrado ele Rerediciona para login.
AdminInfo[playerid][Logado] = true; para dizer que está logado.
___________________
Agora faremos o 'Login'
Crie também:
CMD:logar(playerid, params[]) { GetPlayerName(playerid, Nome, 24); format(string, sizeof(string),"%s.txt", Nome); if(!fexist(string)) return cmd_registrar(playerid, params); static Senha; if(sscanf(params,"d", Senha[playerid])) return SendClientMessage(playerid, Cor,"[ERRO]: Correto é:/logar [Senha]"); if(strcmp(dini_Get(string, "Senha"), inputtext, true) != 0) return SendClientMessage(playerid, Cor,"[ERRO]: Senha Icorreta!"); AdminInfo[playerid][Logado] = true; dini_Get(string, "Nivel"); AdminInfo[playerid][Nivel] = dini_Int(string,"Nivel"); SendClientMessage(playerid, Cor,"[INFO]: Logado com suscesso!"); return 1; }
Explicando:
f(!fexist(string)) return cmd_registrar(playerid, params[]); Verifica se o player existe, se não existir ele rerediciona para registro.
if(sscanf(params,"d", Senha[playerid])) Verifica se utilização do comando está correta.
if(strcmp(dini_Get(string, "Senha"), inputtext, true) != 0) Verifica se a senha está correta.
AdminInfo[playerid][Logado] = true; Bota como "Logado".
dini_Get(string, "Nivel"); AdminInfo[playerid][Nivel] = dini_Int(string,"Nivel"); Pega o Nivel do Player.
___________________
Sistema de níveis
-------------------------------
Crie logo abaixo dos outros comandos:
CMD:setlevel(playerid, params[]) { if(!IsPlayerAdmin(playerid)) if(AdminInfo[playerid][Nivel] < 5) return SendClientMessage(playerid, Cor,"[ERRO]: Seu nível é insuficiente para setar como admin ou não está logado na rcon."); static Level = 0; if(sscanf(params, "ud", GivePlayerid, Level) return SendClientMessage(playerid, Cor,"[ERRO]: Correto: /SetNivel [ID] [Nivel]."); if(Level > 5 || Level < 0) return SendClientMessage(playerid, Cor,"[ERRO]:Bote Nivel Maior que 1 e menor que 5!."); if(AdminInfo[GivePlayerid][Nivel] == Level) return SendClientMessage(playerid, Cor,"[ERRO]: Este player já tem este nível."); AdminInfo[GivePlayerid][Nivel] == Level; SendClientMessage(GivePlayerid, cor, "[INFO]: Parabéns, você é um adminstrador"); return 1; }
Explicando:
if(!IsPlayerAdmin(playerid)) if(AdminInfo[playerid][Nivel] < 5) return SendClientMessage(playerid, Cor,"[ERRO]: Seu nível é insuficiente para setar como admin ou não está logado na rcon."); Verifica se o Player que digitou é administrador logado na Rcon ou Admin Master.
if(sscanf(params, "ud", GivePlayerid, Level) Verifica se o comando está sendo utilizado corretamente.
if(Level > 5 || Level < 0) Verifica se o nível que o Adminstrador deu é incorreto.
if(AdminInfo[GivePlayerid][Nivel] == Level) Verifica se o Player já tem este nível.
AdminInfo[GivePlayerid][Nivel] == Level; dá nivel para player.
____________________
Final
--------------------------------
Crie "Copiosadamente" estes códigos.
public OnPlayerDisconnect(playerid, reason) { if(AdminInfo[playerid][Logado] == true) { dini_Set(string, "Nivel", AdminInfo[playerid][Nivel]); } return 1; }
Info: os códigos acima serve para salvar o nível quando player logado/registrado sair.
----------------------------------------
Mega tutorial by: [iPs]Garfield