#include <DOF2>
#define DIALOG_LOGAR 1
#define DIALOG_REGISTRO 2
enum pInfo //criando o enum
{
pSkin, // Variavel da skin
pSenha // variavel da senha, Lembrando que o Ultimo Item nao precisa da Vнrgula
};
new PlayerInfo[MAX_PLAYERS][pInfo]; //Significa que cada vez que vocк digitar "PlayerInfo" Vai entender que й pra executar as variaveis da enum "pInfo".
new Erro[MAX_PLAYERS];
DOF2_Exit(); // Para desligar a Include DOF2
new name[MAX_PLAYER_NAME]; // Cria a variavel de nome
new arquivo[40]; // variavel arquivo
GetPlayerName(playerid, name, 32);// Serve para pegar o nome do player
format(arquivo, 40, "Jogadores/%s.ini", name); // formata a string arquivo e cria um arquivo na pasta "Jogadores"
if(DOF2_FileExists(arquivo)) // se tiver registrado
{
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
}
else // se nao tiver registrado
{
ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Registro", "Status da conta : Nгo Registrada\n digite uma senha para se registrar!", "Registrar", "Cancelar");
}
new arquivo[40], name[MAX_PLAYER_NAME]; // cria a variavel name com 40 celulas e a variavel Name
GetPlayerName(playerid, name, 32); // Pega o nome do player
format(arquivo, 40, "Jogadores/%s.ini", name); // Formata o arquivo que existe na pasta Jogadores
if(DOF2_FileExists(arquivo)) // se o arquivo existir
{
DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][pSenha]); // seta a senha do player para o que ele digitou
DOF2_SetInt(arquivo, "Skin", PlayerInfo[playerid][pSkin]); // seta a skin para o id da skin atual
DOF2_SaveFile(); // finalmente salvando o arquivo
}
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]); // Seta a skin do player quando ele spawnar para a skin salva
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new arquivo[40], name[MAX_PLAYER_NAME]; // criando a string arquivo com 40 celulas e criando a variavel name
GetPlayerName(playerid, name, 32); // pegando o nome do player
format(arquivo, 40, "Jogadores/%s.ini", name); // formatando o arquivo para a pasta Jogadores
if(dialogid == DIALOG_REGISTRO) // Dialog registro
{
if(!strval(inputtext)) // se ele nao digitar numeros da erro e volta no dialog de registro
{
ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Registro", "Status da conta : Nгo Registrada\n digite uma senha para se registrar!", "Registrar", "Cancelar");
SendClientMessage(playerid, -1, "[BBS] Erro, Digite apenas nъmeros para se registrar.");
return 1;
}
if(!response) se ele apertar o botao Cancelar, kicka ele !
{
Kick(playerid);
return 1;
}
else // se ele colocar a senha certa cria os arquivos
{
PlayerInfo[playerid][pSenha] = strval(inputtext); // pega a senha que ele digitou no campo do dialog
DOF2_CreateFile(arquivo); // cria o arquivo na pasta Jogadores
DOF2_SetInt(arquivo, "Senha", PlayerInfo[playerid][pSenha]); // seta a senha para a que ele digitou no dialog
DOF2_SetInt(arquivo, "Skin", 23); // seta a skin dele para 23, podendo mudar para qualquer numero.
DOF2_SaveFile(); // salva o arquivo
SendClientMessage(playerid, -1, "[BBS] Sua Conta foi Registrada, Agora digite sua senha novamente para logar!");
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
}
}
if(dialogid == DIALOG_LOGAR)
{
if(!strval(inputtext)) // se ele nao digitar apenas numeros volta o dialog de login
{
SendClientMessage(playerid, -1, "[BBS] Erro, Digite apenas nъmeros para se logar.");
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
return 1;
}
if(!response) // se ele clickar em Cancelar kicka ele !
{
Kick(playerid);
return 1;
}
else // Se ele colocar a senha certa
{
PlayerInfo[playerid][pSenha] = DOF2_GetInt(arquivo, "Senha"); // pega a senha salva dele
if(strval(inputtext) == PlayerInfo[playerid][pSenha]) // pega a senha que ele digitou
{
PlayerInfo[playerid][pSkin] = DOF2_GetInt(arquivo, "Skin"); // pega a skin do player
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]); // seta a skin do player para a skin salva
SpawnPlayer(playerid); // em seguida, spawna o player
}
else // se ele errar a senha mostra o dialog denovo
{
ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "{00FF00}[{00FF00}B{00FF00}B{FFFF00}S{FFFF00}]{FFFFFF} - Login", "Status da conta : Registrada\n digite sua senha para logar!\nSe errar 5 vezes sua conta serб banida!", "Logar", "Cancelar");
Erro[playerid]++; // e adiciona 1 erro
if(Erro[playerid] == 5) // se ele errar 5 vezes ele serб banido !
{
SendClientMessage(playerid, -1, "Sua conta estб banida por errar 5 vezes a sua senha, contacte o Admin para retirar seu Ban!");
Ban(playerid);
return 1;
}
}
}
}
return 1;
}
stock ReturnPlayer(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
Poderia ser melhor , podia ter melhorado a explicaзгo e o cуdigo existe coisas desnecessбrias e coisas б melhorar.
5/10 #OFF KK First. |
Nгo vou mentir, a ideia e o esforзo valeram.. Muito bom.
Ultimamente tem tido uns tutoriais que vem explicando apenas uma certa 'orientaзгo de tags', exemplo: "Vocк pega esse cуdigo aqui, e cola nessa callback aqui, e ai vocк vai ver que vai funcionar.", o conceito de tutorial й um pouco diferente, ele indica algo que vai auxiliar a pessoa no aprendizado de alguma coisa, passo a passo diante do funcionamento(ou seja, quando vocк entende oque estб fazendo...). Nгo estou querendo crнticar vocк, nem outros que talvez se sintam ofendidos, mas estou tentando alerta-los uma forma de melhorar para o prуximo tutorial, espero que leve isso como uma dica para o seu prуximo tutorial sair explкndido. Abraзos. |
Poderia ter poupado linhas e ter indentado melhor os cуdigos.
Bom trabalho. RP++; |
Parabйns pela iniciativa...
Vocк mostrou a base onde todo mundo precisa quando vai comeзar um gamemode do 0, e ainda usando o DOF2... Parabйns continue assim... @REP |
Parabйns bom tutorial como o maikonk disse (Vocк mostrou a base onde todo mundo precisa quando vai comeзar um gamemode do 0, e ainda usando o DOF2...)
DOF2 (eu sу uso ele assim como o ZCMD, fбcil, prбtico e rбpido) Um dos maiores problemas de quem quer montar um servidor й o sistema de login/registro, Vocк poderia ter utilizado tambйm variбveis dos salvamentos em geral como gTeam, Nick e outros seria bacana ficaria mais completo 9/10 +repp parabйns novamente pela iniciativa. |
Seria melhor trocar o "Ban" pelo o "Kick".
Уtimo tutorial, bom para iniciantes ! Cumpts. |