Ola pessoal, como estou fazendo meu GM do zero, usando Fini, vim ajudar o pessoal do forum que nao sabem usar a Fini.Este e meu 1o tutorial, pode CRITIAR porque eu preciso saber o que eu errei para me aprimorar.Entao vamos comecar:Va no topo do seu GM e coloque:#include <fini> //vai carregar a include fini#define DIALOG_LOGIN 1 //define nossa dialog de login e registerDepois 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 trabalhonew UserInfo[pInfo][MAX_PLAYERS];//acopla o pInfo a variavel UserInfonew pName[MAX_PLAYER_NAME]; //define a variavel de nome, mas para todo o GM evitando repeticoesAgora vamos as forwards://toda public que criamos precisa de uma forward :Dforward OnPlayerLogin(playerid,password[]); //para loginforward OnPlayerSave(playerid); //para salvar os dadosforward OnPlayerRegister(playerid, password[]); //para registrarAgora vamos as publics nativas do SAMP:public OnPlayerConnect(playerid){//public para quando o player conecta//vamos definir 2 string para nos 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}Nao 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 atencao 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 definicoes :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 so para seguranca 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 contrario nao vai acontecer o spawn if(UserInfo[cLog][playerid] == 0) { SendClientMessage(playerid, COLOR_WHITE, "Impossivel 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 seguranca//se nao 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 e 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 e o ID da dialod de registro { if(strlen(inputtext) == 0) //caso naum escreva nada