08.11.2010, 09:14
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 :
And a forwarded function SavePlayerData(playerid) :
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.
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; }
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; }