Problem with data saving. -
sobolanux - 08.11.2010
Hi there. I`ve got a little confusing and annoying trouble with saving player data when they /q or crash.
I have under OnPlayerDisconnect this :
Code:
public OnPlayerDisconnect(playerid, reason)
{
new Float:x, Float:y, Float:z, Float:rot;
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
GetPlayerFacingAngle(playerid, Float:rot);
SetPVarFloat(playerid, "Money", GetPlayerMoney(playerid));
if(reason == 0)
{
SetPVarFloat(playerid, "loc_X", Float:x);
SetPVarFloat(playerid, "loc_Y", Float:y);
SetPVarFloat(playerid, "loc_Z", Float:z);
SetPVarFloat(playerid, "loc_angle", Float:rot);
return 1;
}
else
{
if(GetPVarInt(playerid, "last_pos_spawn" )== 1)
{
SetPVarFloat(playerid, "loc_X", Float:x);
SetPVarFloat(playerid, "loc_Y", Float:y);
SetPVarFloat(playerid, "loc_Z", Float:z);
SetPVarFloat(playerid, "loc_angle", Float:rot);
return 1;
}
else if(GetPVarInt(playerid, "has_rented_h") == 0)
{
SetPVarFloat(playerid, "loc_X", Float:x);
SetPVarFloat(playerid, "loc_Y", Float:y);
SetPVarFloat(playerid, "loc_Z", Float:z);
SetPVarFloat(playerid, "loc_angle", Float:rot);
return 1;
}
}
// save data - !!!!! MUST BE LAST ONE !!!!!
SavePlayerData(playerid);
return 1;
}
And a forwarded function SavePlayerData(playerid) :
Code:
public SavePlayerData(playerid)
{
new pName[MAX_PLAYER_NAME], file[128], inventory[128];
GetPlayerName(playerid, pName, sizeof(pName));
format(file, sizeof(file), "/Accounts/%s.ini", pName);
format(inventory, sizeof(inventory), "/Accounts/%s_inv.ini", pName);
// stats
dini_IntSet(file, "XP", GetPVarInt(playerid, "XP"));
dini_FloatSet(file, "Money", GetPVarFloat(playerid, "Money"));
dini_FloatSet(file, "BankAcc", GetPVarFloat(playerid, "BankAcc"));
dini_IntSet(file, "Level", GetPVarInt(playerid, "Level"));
dini_IntSet(file, "AdminLevel", GetPVarInt(playerid, "AdminLevel"));
dini_Set(file, "Name", pName);
// password doesn`t save!
dini_FloatSet(file, "loc_X", GetPVarFloat(playerid, "loc_X"));
dini_FloatSet(file, "loc_Y", GetPVarFloat(playerid, "loc_Y"));
dini_FloatSet(file, "loc_Z", GetPVarFloat(playerid, "loc_Z"));
dini_FloatSet(file, "loc_angle", GetPVarFloat(playerid, "loc_angle"));
dini_IntSet(file, "ooc_status", GetPVarInt(playerid, "ooc_status"));
dini_IntSet(file, "pm_status", GetPVarInt(playerid, "pm_status"));
dini_IntSet(file, "Phone_#", GetPVarInt(playerid, "Phone_#"));
dini_IntSet(file, "Phone_Credit", GetPVarInt(playerid, "Phone_Credit"));
dini_IntSet(file, "has_rented_h", GetPVarInt(playerid, "has_rented_h"));
dini_IntSet(file, "last_pos_spawn", GetPVarInt(playerid, "last_pos_spawn"));
// inventory
GetPVarString(playerid, "item_1", InvItem1, sizeof(InvItem1));
GetPVarString(playerid, "item_2", InvItem2, sizeof(InvItem2));
GetPVarString(playerid, "item_3", InvItem3, sizeof(InvItem3));
GetPVarString(playerid, "item_4", InvItem4, sizeof(InvItem4));
GetPVarString(playerid, "item_5", InvItem5, sizeof(InvItem5));
GetPVarString(playerid, "item_6", InvItem6, sizeof(InvItem6));
GetPVarString(playerid, "item_7", InvItem7, sizeof(InvItem7));
GetPVarString(playerid, "item_8", InvItem8, sizeof(InvItem8));
GetPVarString(playerid, "item_9", InvItem9, sizeof(InvItem9));
GetPVarString(playerid, "item_10", InvItem10, sizeof(InvItem10));
dini_Set(inventory, "item_1", InvItem1);
dini_Set(inventory, "item_2", InvItem2);
dini_Set(inventory, "item_3", InvItem3);
dini_Set(inventory, "item_4", InvItem4);
dini_Set(inventory, "item_5", InvItem5);
dini_Set(inventory, "item_6", InvItem6);
dini_Set(inventory, "item_7", InvItem7);
dini_Set(inventory, "item_8", InvItem8);
dini_Set(inventory, "item_9", InvItem9);
dini_Set(inventory, "item_10", InvItem10);
return 1;
}
By any means I can`t make this thing work ... so I`ve gotta ask for your help guys. Maybe you`re much luckier than me.
Re: Problem with data saving. -
smeti - 08.11.2010
Code:
delete the function return 1;
public OnPlayerDisconnect(playerid, reason)
{
new Float:x, Float:y, Float:z, Float:rot;
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
GetPlayerFacingAngle(playerid, Float:rot);
SetPVarFloat(playerid, "Money", GetPlayerMoney(playerid));
if(reason == 0)
{
SetPVarFloat(playerid, "loc_X", Float:x);
SetPVarFloat(playerid, "loc_Y", Float:y);
SetPVarFloat(playerid, "loc_Z", Float:z);
SetPVarFloat(playerid, "loc_angle", Float:rot);
// return 1;
}
else
{
if(GetPVarInt(playerid, "last_pos_spawn" )== 1)
{
SetPVarFloat(playerid, "loc_X", Float:x);
SetPVarFloat(playerid, "loc_Y", Float:y);
SetPVarFloat(playerid, "loc_Z", Float:z);
SetPVarFloat(playerid, "loc_angle", Float:rot);
// return 1;
}
else if(GetPVarInt(playerid, "has_rented_h") == 0)
{
SetPVarFloat(playerid, "loc_X", Float:x);
SetPVarFloat(playerid, "loc_Y", Float:y);
SetPVarFloat(playerid, "loc_Z", Float:z);
SetPVarFloat(playerid, "loc_angle", Float:rot);
// return 1;
}
}
// save data - !!!!! MUST BE LAST ONE !!!!!
SavePlayerData(playerid);
return 1;
}