Olá Pessoal, no meu sistema de cadastro/login possuem as funções de carregar e salvar a conta do player em DOF2. Porém um erro que veio a acontecer, é que cada vez que o player loga, ele recebe a mais (EX: Cada player começa com 50k, e ao logar ele recebe mais 50k e assim sucessivamente). Ja repassei o código varias vezes porém não acho nada de errado. Se alguém souber e poder me ajudar ficarei agardecido!
FUNÇÕES
Código:
#define Contas "Contas/%s.ini" //armazenamento dos dados na pasta contas//
#define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
#define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
#define Dialog_Registro 0 //DIALOG DO REGISTRO
#define Dialog_Login 1 //DIALOG DO LOGIN
enum InfoPlayer{
Senha,
Dinheiro
};
new Player[MAX_PLAYERS][InfoPlayer]; //VARIAVEL QUE ARMAZENA OS DADOS DO PLAYER(ENUM)
new Erro[MAX_PLAYERS]; //ARMAZENA O ERRO DA SENHA
Código:
public OnGameModeExit()
{
DOF2_Exit(); //Finalizando a include DOF2//
return 1;
}
public OnPlayerRequestClass(playerid, classid){
if(DOF2_FileExists( GetPlayerArquivo( playerid ) ) ){ //verifica se tem conta ou não
ShowPlayerDialog( playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "{B40404}SanAndreas Vida Real |Entrar|", "{FFFFFF}Bem-Vindo(a) de Volta ao Nosso Servidor!\n\nPor Favor Digite a Sua Senha Para Entrar!","Entrar","Sair");
}else{
ShowPlayerDialog( playerid, Dialog_Registro, DIALOG_STYLE_PASSWORD, "{B40404}SanAndreas Vida Real |Cadastro|", "{FFFFFF}Seja Muito Bem-Vindo(a) Em Nosso Servidor!\n\nPor Favor Insira uma Senha Segura Para Se Cadastrar!", "Cadastrar","Sair");
}
InterpolateCameraPos(playerid, 1441.803222, -1725.681884, 14.531348, 1561.565307, -1709.853637, 60.931102, 10000);
InterpolateCameraLookAt(playerid, 1445.357421, -1728.683471, 16.363838, 1557.271606, -1711.242919, 58.778495, 10000);
return 1;
}
Código:
public OnPlayerConnect(playerid)
{
LoadPlayer(playerid); //Carrega a Conta do Player
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SavePlayer(playerid); //SALVA A CONTA DO PLAYER
return 1;
}
Código:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid){
case Dialog_Registro:{
if( response ){
if( strlen( inputtext ) < 5 || strlen( inputtext ) > 20 || !strlen( inputtext ) ){
ShowPlayerDialog( playerid, Dialog_Registro ,DIALOG_STYLE_PASSWORD, "SanAndreas Vida Real |Registro|", "Sua Senha Deve Conter No Mínimo 5 Caracteres!\nE No Máximo 20!\nTente Novamente!","Registrar","Sair" );
return 1;
}
// Criar Arquivo E Colocar Os Valores //
DOF2_CreateFile( GetPlayerArquivo( playerid ) );
DOF2_SetString( GetPlayerArquivo( playerid ),"Senha", inputtext );
DOF2_SetInt( GetPlayerArquivo( playerid ), "Dinheiro",50000);
SendClientMessage(playerid, 0x19B519FF, "{FFFFFF}|SanAndreas Vida Real| Registrado Com Sucesso!.");
ShowPlayerDialog( playerid, Dialog_Login ,DIALOG_STYLE_PASSWORD, "{FFFFFF}SanAndreas Vida Real |Login|", "Digite Sua Senha Registrada Abaixo Para Fazer O Login!","Logar","Sair" );
}
else Kick( playerid );
}
case Dialog_Login:{
if( response ){
if( strlen( inputtext ) < 5 || strlen( inputtext ) > 20 || !strlen( inputtext ) ){
SendClientMessage( playerid, -1, "{19B519}|SanAndreas Vida_Real|» {FFFFFF}Digite Sua Senha Corretamente!." );
ShowPlayerDialog( playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "|SanAndreas Vida_Real| Login","Digite Sua Senha Para Entrar!","Entrar","Sair");
return 1;
}
if( strcmp( inputtext, DOF2_GetString( GetPlayerArquivo( playerid ), "Senha" )) == 0 ){
LoadPlayer( playerid );
SendClientMessage(playerid, 0x19B519FF, "SanAndreas Vida Real » {FFFFFF}Logado Com Sucesso!.");
}else{
Erro[ playerid ] ++; // Aquivo adiciona + 1 a variavel erro...
if ( Erro[ playerid ] == 5 ){
SavePlayer(playerid);
Kick ( playerid );
} // se a variavel chegar a 5, kicka o player pois ele errou 5 vezes a senha.
SendClientMessage( playerid, -1, "{FFFFFF}|SanAndreas Vida Real| Digite Sua Senha Corretamente!." );
ShowPlayerDialog( playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "|SanAndreas Vida Real Login|","Digite Sua Senha Para Entrar!","Entrar","Sair");
}
}else{
SavePlayer( playerid );
Kick( playerid );
}
}
}
return 1;
}
FUNÇÕES
Código:
GetPlayerArquivo(playerid){
new ArquivoPlayer[ 30 ];
format( ArquivoPlayer, sizeof( ArquivoPlayer ), Contas, GetPlayerNameEx( playerid ) );
return ArquivoPlayer;
}
stock GetPlayerNameEx(playerid){
new Nome[MAX_PLAYER_NAME];
GetPlayerName(playerid, Nome, sizeof(Nome));
return Nome;
}
SavePlayer(playerid){
if( DOF2_FileExists( GetPlayerArquivo( playerid ) ) ){
DOF2_CreateFile(GetPlayerArquivo(playerid));
DOF2_SetInt( GetPlayerArquivo( playerid ), "Dinheiro", GetPlayerMoney( playerid ));
DOF2_SaveFile();
}
return 1;
}
LoadPlayer(playerid){
if( DOF2_FileExists( GetPlayerArquivo( playerid ) ) ){
Player[ playerid ][ Dinheiro ] = DOF2_GetInt( GetPlayerArquivo( playerid ), "Dinheiro" );
GivePlayerMoney( playerid, Player[ playerid] [ Dinheiro ] );
}
return 1;
}
forward Kicka(p); public Kicka(p) { //KICKAR
#undef Kick
Kick(p);
#define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
return 1;
}
forward Bana(p); public Bana(p) {//BANIR
#undef Ban
Ban(p);
#define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
return 1;
}
Acadêmico em Engenharia de Software na Universidade do Estado de Santa Catarina - UDESC
Discord: Burunu#7448