21.09.2016, 06:48
Hey guys, whenever a player disconnects the server, their position is always saved and it works when a player quits, or is kicked/banned. However if the player times out it doesn't save properly and then spawns them at blueberry.
If you guys have any ideas they would greatly be appreciated. Here is my load, save and ondisconnect callbacks.
If you need anymore information let me know.
Cheers Tass.
If you guys have any ideas they would greatly be appreciated. Here is my load, save and ondisconnect callbacks.
PHP код:
public SaveAccountStats(playerid)
{
new query1[1024],query2[1024],query3[1024],Float:pos[4],cash;
cash=GetPlayerMoney(playerid);
if(LoggedIn[playerid] == 1)
{
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
GetPlayerFacingAngle(playerid, pos[3]);
mysql_format(ServerMySQL,query1,sizeof(query1),"UPDATE `Users` SET Name ='%s',pIP='%s',pCash = %d,pAdmin=%d, pXPos = %f, pYPos = %f, pZPos = %f, pAPos = %f,Interior=%d WHERE Name = '%s'",GetName(playerid),playerip[playerid],cash,PlayerInfo[playerid][pAdmin], pos[0], pos[1], pos[2], pos[3],PlayerInfo[playerid][Interior],GetName(playerid));
mysql_tquery(ServerMySQL, query1, "", "");
mysql_format(ServerMySQL,query2,sizeof(query2),"UPDATE Users SET pSkin=%d,Support=%d,VIP=%d, VIPJoinDate='%s', VIPExpireDate='%s', muted=%d, pUCAdmin=%d, pBanned=%d WHERE Name='%s'",PlayerInfo[playerid][pSkin],PlayerInfo[playerid][Support],PlayerInfo[playerid][VIP], PlayerInfo[playerid][VIPJoinDate],PlayerInfo[playerid][VIPExpireDate], PlayerInfo[playerid][muted], PlayerInfo[playerid][pUCAdmin], PlayerInfo[playerid][pBanned],GetName(playerid));
mysql_tquery(ServerMySQL,query2,"","");
mysql_format(ServerMySQL,query3,sizeof(query3),"UPDATE Users SET pBannedBy='%s', pReason='%s',Vehicle=%d WHERE Name='%s'", PlayerInfo[playerid][pBannedBy], PlayerInfo[playerid][pReason],PlayerInfo[playerid][Vehicle],GetName(playerid));
mysql_tquery(ServerMySQL,query3,"","");
}
return 1;
}
public OnAccountLoad(playerid)
{
PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "pAdmin");
cache_get_field_content(0,"pIP",PlayerInfo[playerid][pIP]);
PlayerInfo[playerid][pCash] = cache_get_field_content_int(0,"pCash");
PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0,"pAdmin");
PlayerInfo[playerid][pXPos] = cache_get_field_content_float(0,"pXPos");
PlayerInfo[playerid][pYPos] = cache_get_field_content_float(0,"pYPos");
PlayerInfo[playerid][pZPos] = cache_get_field_content_float(0,"pZPos");
PlayerInfo[playerid][pAPos] = cache_get_field_content_float(0,"pAPos");
PlayerInfo[playerid][Interior] = cache_get_field_content_int(0,"Interior");
PlayerInfo[playerid][pSkin] = cache_get_field_content_int(0,"pSkin");
PlayerInfo[playerid][Support]= cache_get_field_content_int(0,"Support");
PlayerInfo[playerid][pUCAdmin] = cache_get_field_content_int(0,"pUCAdmin");
PlayerInfo[playerid][TotalTime] = cache_get_field_content_int(0,"TotalTime");
PlayerInfo[playerid][ConnectTime]= cache_get_field_content_int(0,"ConnectTime");
PlayerInfo[playerid][VIP]= cache_get_field_content_int(0,"VIP");
cache_get_field_content(0,"VIPJoinDate",PlayerInfo[playerid][VIPJoinDate]);
cache_get_field_content(0,"VIPExpireDate",PlayerInfo[playerid][VIPExpireDate]);
PlayerInfo[playerid][muted]= cache_get_field_content_int(0,"muted");
PlayerInfo[playerid][hours] = cache_get_field_content_int(0,"hours");
PlayerInfo[playerid][minutes] = cache_get_field_content_int(0,"minutes");
PlayerInfo[playerid][seconds] = cache_get_field_content_int(0,"seconds");
PlayerInfo[playerid][pDriverLicense] = cache_get_field_content_int(0,"pDriverLicense");
PlayerInfo[playerid][WantedLvl] = cache_get_field_content_int(0,"WantedLvl");
PlayerInfo[playerid][pInJail] = cache_get_field_content_int(0,"pInJail");
PlayerInfo[playerid][pInJailTime] = cache_get_field_content_int(0,"pInJailTime");
PlayerInfo[playerid][pBanned] = cache_get_field_content_int(0,"pBanned");
PlayerInfo[playerid][Vehicle] = cache_get_field_content_int(0,"Vehicle");
cache_get_field_content(0,"pBannedBy", PlayerInfo[playerid][pBannedBy]);
cache_get_field_content(0,"pReason",PlayerInfo[playerid][pReason]);
cache_get_field_content(0,"BannedIP",PlayerInfo[playerid][BannedIP]);
PlayerInfo[playerid][OrgID] = cache_get_field_content_int(0,"OrgID");
PlayerInfo[playerid][OrgTier] = cache_get_field_content_int(0,"OrgTier");
cache_get_field_content(0,"OrgRank",PlayerInfo[playerid][OrgRank]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
if(PlayerInfo[playerid][pBanned] == 1)
{
SendClientMessage(playerid, -1, "You have been banned from this server.");
Kick(playerid);
}
LoggedIn[playerid] = 1; //Changes the value of our variable "Logged" to 1("true").
SendClientMessage(playerid, -1, "You have successfully logged in.");
if(PlayerInfo[playerid][pAdmin] != 0)
{
new msgID[128], msg[128];
if(PlayerInfo[playerid][pUCAdmin] == 0)
{
format(msgID, 32, "Administration Level - %d", PlayerInfo[playerid][pAdmin]);
SendClientMessage(playerid, COLOR_ADMIN, msgID);
if(PlayerInfo[playerid][pAdmin] >= 6)
{
format(msg,sizeof(msg), "* %s (ID%d) has logged in as Administrator Level 5.", GetName(playerid), playerid);
}
else
{
format(msg, sizeof(msg), "* %s (ID%d) has logged in as Administrator Level %d.", GetName(playerid), playerid, PlayerInfo[playerid][pAdmin]);
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(PlayerInfo[i][pAdmin] != 0 && i != playerid) SendClientMessage(i,COLOR_ADMIN,msg);
}
}
else
{
format(msgID, 64, "Administration Level - %d (Undercover)", PlayerInfo[playerid][pAdmin]);
SendClientMessage(playerid, COLOR_ADMIN, msgID);
}
}
if(PlayerInfo[playerid][muted] == 1)
{
new string[128];
format(string,sizeof(string), "[Anti - Spam] %s has joined the server and has been auto-muted!", GetName(playerid));
SendClientMessageToAll(0xFFFFFF, string);
SetTimerEx("AutoUnMute",AutoUnmuteTime*60000,false,"i",playerid);
}
if(PlayerInfo[playerid][VIP] == 1)
{
SendClientMessage(playerid, COLOR_VIP2, "Vip Level - Donator");
if(PlayerInfo[playerid][VIP] == 1)
{
new year, month, day;
getdate(year, month, day);
new spyear[32], spmonth[32], spday[32];
strmid(spyear, PlayerInfo[playerid][VIPExpireDate], 6, 10, 32);
strmid(spmonth, PlayerInfo[playerid][VIPExpireDate], 0, 2, 32);
strmid(spday, PlayerInfo[playerid][VIPExpireDate], 3, 5, 32);
new pyear = strval(spyear);
new pmonth = strval(spmonth);
new pday = strval(spday);
if(pyear == 2016 && pmonth == 1)
{
format(PlayerInfo[playerid][VIPExpireDate], 32, "%02d/%02d/%d", pmonth, pday, pyear +1);
}
if(year > pyear && month == pmonth && day > pday)
{
SendClientMessage(playerid, COLOR_ORANGE, "Sorry, your VIP has expired. Please donate to get it restored.");
RemoveVIP(playerid);
}
if(month == pmonth && day > pday)
{
SendClientMessage(playerid, COLOR_ORANGE, "Sorry, your VIP has expired. Please donate to get it restored.");
RemoveVIP(playerid);
}
}
}
return true;
}
public OnPlayerDisconnect(playerid, reason)
{
new temp[pInfo];
PlayerTextDrawDestroy(playerid, TxtZones[playerid]);
PlayerTextDrawDestroy(playerid, SpeedoText[playerid]);
if(HasTrash[playerid]) Trash_ResetPlayer(playerid);
if(PlayerInfo[playerid][Vehicle] > 0) DestroyVehicle(pvehicle[playerid][0]);
Cash[playerid]=0;
Help[playerid] = 0;
if( LoggedIn[playerid] == 1)
{
SaveAccountStats(playerid);
LoggedIn[playerid]=0;
}
if(reason == 0)
{
SendConnectionMessage(playerid, 2);
}
else if(reason == 1)
{
SendConnectionMessage(playerid, 3);
}
else
{
SendConnectionMessage(playerid, 0);
}
if(PlayerInfo[playerid][Vehicle] > -1)
{
DestroyVehicle(pvehicle[playerid][0]);
}
PlayerInfo[playerid]=temp;
if(IsBeingSpeced[playerid] == 1 || IsBeingSpeced[playerid] == 2)//If the player being spectated, disconnects, then turn off the spec mode for the spectator.
{
foreach(Player,i)
{
if(spectatorid[i] == playerid)
{
TogglePlayerSpectating(i,false);// This justifies what's above, if it's not off then you'll be either spectating your connect screen, or somewhere in blueberry (I don't know why)
}
}
}
SaveAccountStats(playerid);
sellon[playerid] = 1; //Enable the player to sell cars
if(checkon[playerid] == 1) //If they are online and the checkpoint is active
{
DisablePlayerCheckpoint(playerid); //Remove the checkpoint
} //Remove the checkpoint
checkon[playerid] = 0; //Set the checkpoint variable to 0
return 1;
}
Cheers Tass.