Problema de salvamento DOF2 - zGu1Zin_ - 06/11/2025
não tá salvando o dinheiro skin e score o que faco
Código: enum pInfo
{
Dinheiro,
Skin,
Score
};
new Player[MAX_PLAYERS][pInfo];
public OnPlayerRequestClass(playerid, classid)
{
if(DOF2_FileExists(Arquivo(playerid)))
{
ShowPlayerDialog(playerid, Login, DIALOG_STYLE_INPUT, "Login", "Digite Sua Senha Para Logar No Servido", "Logar", "Sair");
}
if(!DOF2_FileExists(Arquivo(playerid)))
{
ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_INPUT, "Registro", "Digite Uma Senha Para Registrar Sua Conta No Servido", "Registrar", "Sair");
}
return 1;
}
public OnPlayerUpdate(playerid)
{
update(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == Registro)
{
if(response)
{
if(strlen(inputtext) < 5 || strlen(inputtext) > 10) return SendClientMessage(playerid, -1, "{FF0000}Sua Senha Deve Ter 5 Entre 10 Letras Ou Numeros"), ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_INPUT, "Registro", "Digite Uma Senha Para Registrar Sua Conta No Servido", "Registrar", "Sair");
DOF2_CreateFile(Arquivo(playerid));
DOF2_SetString(Arquivo(playerid), "Senha", inputtext);
DOF2_SetInt(Arquivo(playerid), "Dinheiro", 5000);
DOF2_SetInt(Arquivo(playerid), "Skin", 0);
DOF2_SetInt(Arquivo(playerid), "Score", 0);
DOF2_SaveFile();
ShowPlayerDialog(playerid, Login, DIALOG_STYLE_INPUT, "Login", "Digite Sua Senha Para Logar No Servido", "Logar", "Sair");
}
else
{
Kick(playerid);
}
return 1;
}
if(dialogid == Login)
{
if(response)
{
if(strcmp(inputtext, DOF2_GetString(Arquivo(playerid), "Senha")) == 0)
{
SetSpawnInfo(playerid, 0, Player[playerid][Skin], 1154.1945,-1767.0381,16.5938,1.2957,0,0,0,0,0,0);
CarregarContas(playerid);
SpawnPlayer(playerid);
}
else
{
SendClientMessage(playerid, -1, "{FF0000}Sua Senha Esta Incorreta");
ShowPlayerDialog(playerid, Login, DIALOG_STYLE_INPUT, "Login", "Digite Sua Senha Para Logar No Servido", "Logar", "Sair");
}
}
else
{
Kick(playerid);
}
return 1;
}
return 1;
}
stock pName(playerid)
{
new Name [MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
return Name;
}
stock Arquivo(playerid)
{
new str[120];
format(str, 120, "Contas/%s.ini", pName(playerid));
return str;
}
stock CarregarContas(playerid)
{
Player[playerid][Dinheiro] = DOF2_GetInt(Arquivo(playerid), "Dinheiro");
Player[playerid][Skin] = DOF2_GetInt(Arquivo(playerid), "Skin");
Player[playerid][Score] = DOF2_GetInt(Arquivo(playerid), "Score");
return 1;
}
stock update(playerid)
{
DOF2_SetInt(Arquivo(playerid), "Dinheiro", GetPlayerMoney(playerid));
DOF2_SetInt(Arquivo(playerid), "Skin", GetPlayerSkin(playerid));
DOF2_SetInt(Arquivo(playerid), "score", GetPlayerScore(playerid));
DOF2_SaveFile();
return 1;
}
RE: Problema de salvamento DOF2 - xbruno1000x - 07/11/2025
Seu sistema de salvamento está quase certo, o problema é o momento em que está salvando. Não se salva usando OnPlayerUpdate, pois essa callback é chamada milhares de vezes por minuto e prejudica o desempenho do seu gamemode. Coloque o salvamento na OnPlayerDisconnect, você só precisa salvar quando o jogador sair do servidor.
Além disso, existem outros problemas no seu código.
Problema 1:
Você não verifica se o jogador está logado. O sistema irá salvar informações de quando o player está com tudo zerado por cima de infos corretas, pois ela salva em qualquer circunstancia.
Código: new bool:logado[MAX_PLAYERS];
//Quando efetuar login
logado[playerid] = true;
//Quando sair do servidor
logado[playerid] = false;
//Quando quiser verificar se esta logado
if(logado[playerid]){
}
Adicionando uma verifacação de logado como essa já deve resolver seu problema. Mas não recomendo manter o uso de OnPlayerUpdate.
Problema 2:
Inconsistencia no campo score.
Em alguns pontos você verifica por score com letras minusculas, em outros você usa Score.
No update(playerid) você está salvando assim:
Código: DOF2_SetInt(Arquivo(playerid), "score", GetPlayerScore(playerid));
Mas quando carrega, usa:
Código: Player[playerid][Score] = DOF2_GetInt(Arquivo(playerid), "Score");
O ideal é normalizar e deixar tudo igual:
Código: stock update(playerid)
{
DOF2_SetInt(Arquivo(playerid), "Dinheiro", GetPlayerMoney(playerid));
DOF2_SetInt(Arquivo(playerid), "Skin", GetPlayerSkin(playerid));
DOF2_SetInt(Arquivo(playerid), "Score", GetPlayerScore(playerid)); // corrigido
DOF2_SaveFile();
return 1;
}
|