[TUT] - Sistema de Login/Registro em Fini

Vá no topo do seu GM e coloque:
#include <fini> //vai carregar a include fini #define DIALOG_LOGIN 1 //define nossa dialog de login e register

Depois coloque o seguinte no topo, mas perto de suas news.
enum pInfo{     cKey[128],     cLevel,     cReg,     cSkin,     cLog,     cGrana }//define a variavel pInfo para diminiur nosso trabalho new UserInfo[pInfo][MAX_PLAYERS];//acopla o pInfo a variavel UserInfo new pName[MAX_PLAYER_NAME]; //define a variavel de nome, mas para todo o GM evitando repetições

Agora vamos as forwards:
//toda public que criamos precisa de uma forward :D forward OnPlayerLogin(playerid,password[]); //para login forward OnPlayerSave(playerid); //para salvar os dados forward OnPlayerRegister(playerid, password[]); //para registrar

Agora vamos as publics nativas do SAMP:
public OnPlayerConnect(playerid) { //public para quando o player conecta //vamos definir 2 string para nós usarmos no login     new string[80];     new string2[160];     GetPlayerName(playerid, pName, sizeof(pName)); //pega o nome do player     format(string, sizeof(string), "contas/%s.cfg",pName);//formata a string que verifica se existe o arquivo     if(Fini_Exists(string))//verifica se existe o arquivo     {         //formata a string que aparecera no dialog para login         format(string2, sizeof(string2), "{F5DEB3}Bem vindo ao Seu Servidor\n\n{B22222}Nome: {F5DEB3}%s\n{B22222}Status: {F5DEB3}Registrado\n\n Digite sua senha para logar:",pName);         //mostra nossa dialog que formatamos a cima         ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{B22222}Logar",string2,"Logar","Cancelar");     }     else     {         //formata a string que aparecera no dialog para registro         format(string2, sizeof(string2), "{F5DEB3}Bem vindo ao Seu Servido\n\n{B22222}Nome: {F5DEB3}%s\n{B22222}Status: {F5DEB3}Não registrado\n\n Digite sua senha para registrar:",pName);         //mostra nossa dialog formatada a cima         ShowPlayerDialog(playerid,DIALOG_LOGIN+1,DIALOG_STYLE_INPUT,"{B22222}Registro",string2,"Registrar","Cancelar");         //preste atenção no id dessa diaog: "DIALOG_LOGIN+1"         //como definimos o "DIALOG_LOGIN" como 1 aqui ele pegara 1+1 e dara um novo id para o registro         //evitando muitas definições :D     }     return 1; } public OnPlayerDisconnect(playerid) { //public para quando o player sai do serv     OnPlayerSave(playerid);//aki vai chamar a public q salva     UserInfo[cLog][playerid] = 0;//desloga o player     printf("Dados de ID: %d salvos com sucesso\n",playerid);//coloquei isso só para segurança pq mostra se salvou mesmo :P     return 1; } public OnPlayerRequestSpawn(playerid) { //public nativa do samp para  quando o player clika em spawn //aqui embaixo ele vai verificar se o player estiver logado vai pode dar spawn, caso contrário não vai acontecer o spawn     if(UserInfo[cLog][playerid] == 0)     {         SendClientMessage(playerid, COLOR_WHITE, "Impossível ter spawn sem antes de logar.");//avisa o player         return 0;//retorna 0 assim naum da spawn      }     //setiver logado efetua o spawn      return 1; } public OnPlayerSpawn(playerid) { //puclic quando da spawn //mais segurança //se não tiver logado congela o player //caso contrario descongela :D     if(UserInfo[cLog][playerid] == 0)     {         TogglePlayerControllable(playerid, 0);//aki congela         return 1;     }     else     {         TogglePlayerControllable(playerid, 1);//aki descongela         return 1;     } } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { //public nativa do samp para resposta de dialog //vamos configurar os retornos do login e registro //aki embaixo vai verificar o login     if(dialogid == DIALOG_LOGIN) //DIALOG_LOGIN é o ID da dialog de login     {         if(strlen(inputtext) == 0) //caso naum escreva nada retorna o login informando o erro da senha         {             ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{B22222}Registro","\n{B22222}Senha incorreta!\n{F5DEB3}Insira sua senha novamente:","Logar","Cancelar");         }else{             OnPlayerLogin(playerid,inputtext); //se escrever algo chama a public de login e passa a senha e o id da player         }         return 1;     } //aki embaixo vai verificar o registro     if(dialogid == DIALOG_LOGIN+1) //DIALOG_LOGIN+1 é o ID da dialod de registro     {         if(strlen(inputtext) == 0) //caso naum escreva nada retorna o registro informando q precisa de senha         {             ShowPlayerDialog(playerid,DIALOG_LOGIN+1,DIALOG_STYLE_INPUT,"{B22222}Registro","\n{F5DEB3}Para registrar é necessário uma senha:","Registrar","Cancelar");         }else{             OnPlayerRegister(playerid,inputtext); //se escrever algo chama a public de registro e passa a senha e o id da player         }         return 1;     }         return 1; }

Até aqui tudo entendido?
Se as publics que citamos a cima já existem no seu GM só coloque o que colocamos nelas aqui nas suas publics
Agora finalizando vamos as publics de login, registro e salvamento.
public OnPlayerLogin(playerid,password[]) { //public que efetua o login     new string[80]; //string para o nome do player     GetPlayerName(playerid, pName, sizeof(pName)); //pega o noem do player pelo ID que foi passado     format(string, sizeof(string), "contas/%s.cfg",pName); //formata a onde esta o arquivo de registro, se quiser mudar o local de salvamento antere o contas só não apague o %s     Fini_OpenFile(string);//abre o arquivo     if(strcmp(password,Fini_GetStr("Senha"), true) == 0) //verifica se a senha q foi passada     {      //se a senha for igual faz isso aki embaixo         UserInfo[cLevel][playerid] = Fini_GetValue("Level"); //Pega o level         UserInfo[cReg][playerid] = Fini_GetValue("Reg"); //Pega a variavel de registro         UserInfo[cSkin][playerid] = Fini_GetValue("Skin"); //Pega a skin         UserInfo[cGrana][playerid] = Fini_GetValue("Grana"); //Pega o grana do player         GivePlayerMoney(playerid, UserInfo[cGrana][playerid]); //devolve a grana salva         UserInfo[cLog][playerid] = 1; //deixa como logado     }     else     {         //caso a senha não seja igual ele manda pro login de novo         ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{B22222}Logar","{B22222}Senha incorreta!\n{F5DEB3}Insira sua senha novamente:","Logar","Cancelar");     }     Fini_CloseFile();//fecha o arquivo do player } public OnPlayerSave(playerid) { //public q efetua o salvamento //coisas que tem no login e aqui são iguais não vou repetir     new string[80];     GetPlayerName(playerid, pName, sizeof(pName));     format(string, sizeof(string), "contas/%s.cfg",pName);     Fini_OpenFile(string);//abre o arquivo formatado a cima     Fini_SetVal("Level", UserInfo[cLevel][playerid]);//salva o level     Fini_SetVal("Reg", UserInfo[cReg][playerid]);//salva se foi registrado     Fini_SetVal("Skin", UserInfo[cSkin][playerid]);//salva a skin     Fini_SetVal("Grana", GetPlayerMoney(playerid));//salva a grana     Fini_SaveFile(string);//salva o arquivo para efetuar as mudanças     Fini_CloseFile();//fecha o arquivo, 1º salva depois fecha :@ } public OnPlayerRegister(playerid, password[]) { //por ultimo o registro     new string[80];     GetPlayerName(playerid, pName, sizeof(pName));     format(string, sizeof(string), "contas/%s.cfg",pName);     Fini_Create(string);//cria o arquivo do player     Fini_OpenFile(string);//abre o arquivo do player     Fini_SetStr("Senha", password);//salva a senha     Fini_SetVal("Level", UserInfo[cLevel][playerid]);//salva o level, coloquei assim, pois vc pode querer dar level automaticamente                                                     //, mas como eu naum coloquei nehum valor no GM ele vai salvar como 0     Fini_SetVal("Reg", 1);//salva se foi registrado     Fini_SetVal("Skin", 178);//salva a skin, eu coloquei essa pq eu gosto, mas vc pode trocar     Fini_SetVal("Grana", GetPlayerMoney(playerid)); //salva a gran do player     Fini_SaveFile(string);//salva o arquivo     Fini_CloseFile();// fecha o arquivo     new string2[160];//string para definir o login, pq apos registrar temos q logar :D     // \/ formata o q aparecera no login     format(string2, sizeof(string2), "{F5DEB3}Bem vindo ao Seu Servidor\n\n{B22222}Nome: {F5DEB3}%s\n{B22222}Status: {F5DEB3}Registrado\n\n Digite sua senha para logar:",pName);     //Dialog que efetua o login :D     ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"{B22222}Logar",string2,"Logar","Cancelar"); }

Créditos: deregudegu
Falcon - Tutorial, Sherlock Holmes do Bugs(by drakins)
Drakins(banido) e KylePT pelo Desenvolvimento de Fini Cache File System
Jhony - Tester

COMPARTILHE

VEJA TAMBÉM

Próxima
« Anterior
Anterior
Próximo »