O sistema de registro que uso й esse !
#include "PAP"
#define DIALOGO_REGISTRO 1
#define DIALOGO_LOGIN 2
#define vermelho 0xFF0000FF
#define verde 0x00CC00AA
enum j_info
{
j_Skin,
j_Matou,
j_Morreu,
bool:j_Logado,
Float:j_pos[4], // X, Y, Z e вngulo.
};
new JogadorInfo[MAX_PLAYERS][j_info];
/*
Lembre-se de que if(JogadorInfo[playerid][j_Logado]) й a mesma coisa de if(JogadorInfo[playerid][j_Logado] == 1)
e que if(!JogadorInfo[playerid][j_Logado]) й a mesma coisa de if(JogadorInfo[playerid][j_Logado] == 0)
*/
public OnFilterScriptExit()
{
for(new i; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) SalvarDadosJogador(i);
return 1;
}
public OnPlayerConnect(playerid)
{
if(!pap_JogadorRegistrado(playerid))
{
ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT, "Registrando nova conta", " Digite uma senha para criar sua conta.", "Cancelar", "Logar");
// SendClientMessage(playerid, vermelho, "Nгo possui conta, use /registrar <senha>");
}
else
{
ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_INPUT, "Logando em sua conta", " Digite sua senha.", "Cancelar", "Logar");
// SendClientMessage(playerid, verde, "Possui conta, use /logar <senha>");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(JogadorInfo[playerid][j_Logado]) // Se o jogador estб logado, seus dados serгo salvos...
{
SalvarDadosJogador(playerid);
JogadorInfo[playerid][j_Logado] = false; // Indica que o jogador deixou de ficar "logado".
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(JogadorInfo[playerid][j_Logado]) // Se o jogador estб logado...
{
if(killerid != INVALID_PLAYER_ID) JogadorInfo[killerid][j_Matou]++; // Se o jogador foi morto por alguйm, esse alguйm terб mais 'j_Matou'
JogadorInfo[playerid][j_Morreu]++;
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOGO_REGISTRO)
{
if(response) return 0; // Se o jogador clicar em 'cancelar'
if(!strlen(inputtext))
{
SendClientMessage(playerid, vermelho, "Digite uma senha!");
ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT, "Registrando nova conta", " Digite uma senha para criar sua conta.", "Cancelar", "Logar");
return 0;
}
if(strlen(inputtext) > 64)
{
SendClientMessage(playerid, vermelho, "Senha muito grande! Use no mбximo 64 caracteres.");
ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT, "Registrando nova conta", " Digite uma senha para criar sua conta.", "Cancelar", "Logar");
return 0;
}
new senha[MAX_PCOD_CHAR];
psf_CopiarStr(senha, inputtext); // Copiando a senha que o jogador digitou (de inputtext) para a variбvel 'senha'
if(pap_IniciarConta(playerid, senha)) // Certo, a funзгo pap_IniciarConta retornou a 1, sendo assim podemos salvar os dados que queremos, jб que a conta foi iniciada!
{
new
dinheiro,
ip[18],
Float:jx,
Float:jy,
Float:jz,
Float:ja;
JogadorInfo[playerid][j_Skin] = GetPlayerSkin(playerid); // Pega a skin que o jogador possui ao registrar
dinheiro = GetPlayerMoney(playerid); // Pega o dinheiro que o jogador possui ao registrar
GetPlayerIp(playerid, ip, sizeof(ip));
GetPlayerPos(playerid, jx, jy, jz); // Pega a posiзгo que o jogador estб ao registrar
GetPlayerFacingAngle(playerid, ja);
pap_SalvarInt(playerid, "Skin", JogadorInfo[playerid][j_Skin]);
pap_SalvarInt(playerid, "Dinheiro", dinheiro);
pap_SalvarInt(playerid, "Matou", 0);
pap_SalvarInt(playerid, "Morreu", 0);
pap_SalvarFloat(playerid, "X", jx);
pap_SalvarFloat(playerid, "Y", jy);
pap_SalvarFloat(playerid, "Z", jz);
pap_SalvarFloat(playerid, "Ang", ja);
pap_SalvarStr(playerid, "IP", ip);
new str[128];
format(str, sizeof(str), "Conta criada. Senha: %s", senha);
SendClientMessage(playerid, verde, str);
JogadorInfo[playerid][j_Logado] = true;
}
return 1;
}
else if(dialogid == DIALOGO_LOGIN)
{
if(response) return 0; // Se o jogador clicar em 'cancelar'
if(!strlen(inputtext))
{
SendClientMessage(playerid, vermelho, "Digite sua senha!");
ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_INPUT, "Logando em sua conta", " Digite sua senha.", "Cancelar", "Logar");
return 0;
}
if(strlen(inputtext) > 64)
{
SendClientMessage(playerid, vermelho, "Senha muito grande! Use no mбximo 64 caracteres.");
ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_INPUT, "Logando em sua conta", " Digite sua senha.", "Cancelar", "Logar");
return 0;
}
new senha[MAX_PCOD_CHAR];
psf_CopiarStr(senha, inputtext); // Copiando a senha que o jogador digitou (de inputtext) para a variбvel 'senha'
if(pap_VerificarSenha(playerid, senha))
{
new dinheiro = pap_CarregarInt(playerid, "Dinheiro");
JogadorInfo[playerid][j_Skin] = pap_CarregarInt(playerid, "Skin");
JogadorInfo[playerid][j_Matou] = pap_CarregarInt(playerid, "Matou");
JogadorInfo[playerid][j_Morreu] = pap_CarregarInt(playerid, "Morreu");
JogadorInfo[playerid][j_pos][0] = pap_CarregarFloat(playerid, "X");
JogadorInfo[playerid][j_pos][1] = pap_CarregarFloat(playerid, "Y");
JogadorInfo[playerid][j_pos][2] = pap_CarregarFloat(playerid, "Z");
JogadorInfo[playerid][j_pos][3] = pap_CarregarFloat(playerid, "Ang");
GivePlayerMoney(playerid, dinheiro);
SetPlayerPos(playerid, JogadorInfo[playerid][j_pos][0], JogadorInfo[playerid][j_pos][1], JogadorInfo[playerid][j_pos][2]); // Serб teleportado para o ъltimo lugar salvo
SetPlayerFacingAngle(playerid, JogadorInfo[playerid][j_pos][3]);
SendClientMessage(playerid, verde, "Logado!");
JogadorInfo[playerid][j_Logado] = true;
}
else
{
SendClientMessage(playerid, vermelho, "Senha errada!");
ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_INPUT, "Logando em sua conta", " Digite sua senha.", "Cancelar", "Logar");
}
}
return 0;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new
idx,
tmp[256];
tmp = psf_strtok(cmdtext, idx);
if(!strcmp(tmp, "/papcomandos", true))
{
SendClientMessage(playerid, verde, "PAP Teste FS - Comandos");
SendClientMessage(playerid, verde, "/registrar - /logar");
// SendClientMessage(playerid, verde, "/registrar <senha> - /logar <senha>");
SendClientMessage(playerid, verde, "/mudarsenha <nova_senha> - /mudarmeunome <novo_nome>");
SendClientMessage(playerid, verde, "/salvarmeusdados - /salvartextoqualquer <chave> <o_que_quer_salvar>");
SendClientMessage(playerid, verde, "/lerdados <chave>");
return 1;
}
if(!strcmp(tmp, "/registrar", true))
{
if(pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Jб estб registrado!");
if(JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Jб estб logado!");
else
{
ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT, "Registrando nova conta", " Digite uma senha para criar sua conta.", "Cancelar", "Logar");
}
return 1;
}
/* if(!strcmp(tmp, "/registrar", true))
{
if(pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Jб estб registrado!");
if(JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Jб estб logado!");
else
{
tmp = psf_strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, vermelho, "/registrar <senha>");
if(pap_IniciarConta(playerid, tmp)) // Certo, a funзгo pap_IniciarConta retornou a 1, sendo assim podemos salvar os dados que queremos, jб que a conta foi iniciada!
{
new
dinheiro,
ip[18],
Float:jx,
Float:jy,
Float:jz,
Float:ja;
JogadorInfo[playerid][j_Skin] = GetPlayerSkin(playerid);
dinheiro = GetPlayerMoney(playerid);
GetPlayerIp(playerid, ip, sizeof(ip));
GetPlayerPos(playerid, jx, jy, jz);
GetPlayerFacingAngle(playerid, ja);
pap_SalvarInt(playerid, "Skin", JogadorInfo[playerid][j_Skin]);
pap_SalvarInt(playerid, "Dinheiro", dinheiro);
pap_SalvarInt(playerid, "Matou", 0);
pap_SalvarInt(playerid, "Morreu", 0);
pap_SalvarFloat(playerid, "X", jx);
pap_SalvarFloat(playerid, "Y", jy);
pap_SalvarFloat(playerid, "Z", jz);
pap_SalvarFloat(playerid, "Ang", ja);
pap_SalvarStr(playerid, "IP", ip);
new str[128];
format(str, sizeof(str), "Conta criada. Senha: %s", tmp);
SendClientMessage(playerid, verde, str);
JogadorInfo[playerid][j_Logado] = true;
}
}
return 1;
}
*/
if(!strcmp(tmp, "/logar", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo estб registrado!");
if(JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Jб estб logado!");
ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_INPUT, "Logando em sua conta", " Digite sua senha.", "Cancelar", "Logar");
return 1;
}
/*
if(!strcmp(tmp, "/logar", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo estб registrado!");
if(JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Jб estб logado!");
tmp = psf_strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, vermelho, "/logar <senha>");
if(pap_VerificarSenha(playerid, tmp))
{
new dinheiro = pap_CarregarInt(playerid, "Dinheiro");
JogadorInfo[playerid][j_Skin] = pap_CarregarInt(playerid, "Skin");
JogadorInfo[playerid][j_Matou] = pap_CarregarInt(playerid, "Matou");
JogadorInfo[playerid][j_Morreu] = pap_CarregarInt(playerid, "Morreu");
JogadorInfo[playerid][j_pos][0] = pap_CarregarFloat(playerid, "X");
JogadorInfo[playerid][j_pos][1] = pap_CarregarFloat(playerid, "Y");
JogadorInfo[playerid][j_pos][2] = pap_CarregarFloat(playerid, "Z");
JogadorInfo[playerid][j_pos][3] = pap_CarregarFloat(playerid, "Ang");
GivePlayerMoney(playerid, dinheiro);
SetPlayerPos(playerid, JogadorInfo[playerid][j_pos][0], JogadorInfo[playerid][j_pos][1], JogadorInfo[playerid][j_pos][2]); // Serб teleportado para o ъltimo lugar salvo
SetPlayerFacingAngle(playerid, JogadorInfo[playerid][j_pos][3]);
SendClientMessage(playerid, verde, "Logado!");
JogadorInfo[playerid][j_Logado] = true;
}
else SendClientMessage(playerid, vermelho, "Senha errada!");
return 1;
}
*/
if(!strcmp(tmp, "/mudarsenha", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo tem registro!");
if(!JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Nгo estб logado!");
tmp = psf_strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, vermelho, "/mudarsenha <nova_senha>");
pap_MudarSenha(playerid, tmp);
SendClientMessage(playerid, verde, "Senha alterada");
return 1;
}
if(!strcmp(tmp, "/mudarmeunome", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo tem registro!");
if(!JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Nгo estб logado!");
tmp = psf_strtok(cmdtext, idx);
if(!strlen(tmp) || strlen(tmp) > MAX_PLAYER_NAME) return SendClientMessage(playerid, vermelho, "/mudarmeunome <novo_nome> (OBS.: nгo ultrapase o limite de caracteres do nome)");
new nome_arquivo_anterior[64];
nome_arquivo_anterior = pap_ArquivoJogador(playerid);
pap_MudarNomeArquivoJogador(nome_arquivo_anterior, tmp);
SetPlayerName(playerid, tmp);
SendClientMessage(playerid, verde, "Nome alterado.");
return 1;
}
if(!strcmp(tmp, "/salvarmeusdados", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo tem registro!");
if(!JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Nгo estб logado!");
SalvarDadosJogador(playerid);
SendClientMessage(playerid, verde, "Seus dados foram salvos!");
return 1;
}
if(!strcmp(tmp, "/salvartextoqualquer", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo tem registro!");
if(!JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Nгo estб logado!");
new
str[128],
chave[MAX_psf_strtok],
texto[MAX_psf_strtok];
chave = psf_strtok(cmdtext, idx);
if(!strlen(chave)) return SendClientMessage(playerid, vermelho, "/salvartextoqualquer <chave> <o_que_quer_salvar>");
texto = psf_strtok(cmdtext, idx);
if(!strlen(texto)) return SendClientMessage(playerid, vermelho, "/salvartextoqualquer <chave> <o_que_quer_salvar>");
pap_SalvarStr(playerid, chave, texto);
format(str, sizeof(str), "'%s' salvo na chave '%s' do arquivo de sua conta.", texto, chave);
SendClientMessage(playerid, verde, str);
format(str, sizeof(str), "Digite /verdados %s, para ler, do arquivo, o que vocк salvou", chave);
SendClientMessage(playerid, verde, str);
return 1;
}
if(!strcmp(tmp, "/lerdados", true))
{
if(!pap_JogadorRegistrado(playerid)) return SendClientMessage(playerid, vermelho, "Nгo tem registro!");
if(!JogadorInfo[playerid][j_Logado]) return SendClientMessage(playerid, vermelho, "Nгo estб logado!");
new
str[128],
chave[MAX_psf_strtok];
chave = psf_strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, vermelho, "/lerdados <chave>");
new valorsalvo[256];
valorsalvo = pap_CarregarStr(playerid, chave);
format(str, sizeof(str), "Valor: %s", valorsalvo);
SendClientMessage(playerid, verde, str);
return 1;
}
return 0;
}
stock SalvarDadosJogador(playerid) // Note que as funзхes sгo muito semelhantes com as do comando /registrar, pois possuem o mesmo objetivo: salvar dados.
{
new
dinheiro,
ip[18],
Float:jx,
Float:jy,
Float:jz,
Float:ja;
JogadorInfo[playerid][j_Skin] = GetPlayerSkin(playerid);
dinheiro = GetPlayerMoney(playerid);
GetPlayerIp(playerid, ip, sizeof(ip));
GetPlayerPos(playerid, jx, jy, jz);
GetPlayerFacingAngle(playerid, ja);
pap_SalvarInt(playerid, "Skin", JogadorInfo[playerid][j_Skin]);
pap_SalvarInt(playerid, "Dinheiro", dinheiro);
pap_SalvarInt(playerid, "Matou", JogadorInfo[playerid][j_Matou]);
pap_SalvarInt(playerid, "Morreu", JogadorInfo[playerid][j_Morreu]);
pap_SalvarFloat(playerid, "X", jx);
pap_SalvarFloat(playerid, "Y", jy);
pap_SalvarFloat(playerid, "Z", jz);
pap_SalvarFloat(playerid, "Ang", ja);
pap_SalvarStr(playerid, "IP", ip);
}