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;
}
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; // try to remove it
}
if(LoggedIn[playerid] == 1) SaveAccountStats(playerid);
static string[64];
switch(reason)
{
case 0: format(string,sizeof string,"» "cred"%s has left the server. (Timed out)",GetPName(playerid));
case 1: format(string,sizeof string,"» "cred"%s has left the server. (Leaving)",GetPName(playerid));
case 2: format(string,sizeof string,"» "cred"%s has left the server. (Kicked/Banned)",GetPName(playerid));
}
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_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));
Unless you get the player's position in a timer and store it to global array, you can't retrieve them when the client crashes/timeouts.
Another option is what I did in the example script: using the last saved position: https://github.com/pBlueG/SA-MP-MySQ....pwn#L343-L349 |
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_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));