How to save player status on server restart ?
#1

My Server is don't saving accounts !! on Server Restart/Crash !!

But It saves on OnPlayerDisconnect !!

Anyone know ? How to Call OnPlayerDisconnect before GamemodeExit ?

I tried -
-Using the saving method on Gamemodeexit with for newmax players ++i something like that :P
-I tried creating a function to save all accounts..
- I tried to kick all on gamemodeexit..

All did'nt helped me any other way :X

Codes -

OnPlayerDisconnect - [Working]
Код:
if(PLAYERLIST_authed[playerid] == 1)
	{
		dUserSetINT(PlayerName(playerid)).("Bankcash",BankCash[playerid]);
		dUserSetINT(PlayerName(playerid)).("money",GetPlayerCash(playerid));
		dUserSetINT(PlayerName(playerid)).("Score",GetPlayerScore(playerid));
	 	dUserSetINT(PlayerName(playerid)).("Adminlevel",AdminLevel[playerid]);
		dUserSetINT(PlayerName(playerid)).("ArmyAir",CanUseAArmy[playerid]);
		dUserSetINT(PlayerName(playerid)).("ArmyLand",CanUseLArmy[playerid]);
		dUserSetINT(PlayerName(playerid)).("CIA",CanUseCIA[playerid]);
		dUserSetINT(PlayerName(playerid)).("SWAT",CanUseSWAT[playerid]);
		dUserSetINT(PlayerName(playerid)).("VIP",IsVIP[playerid]);
        dUserSetINT(PlayerName(playerid)).("backweap",backweap[playerid]);
        dUserSetINT(PlayerName(playerid)).("BailCards",BailCards[playerid]);
		dUserSetINT(PlayerName(playerid)).("RegularPlayer",IsRegularPlayer[playerid]);
		dUserSetINT(PlayerName(playerid)).("TRP",IsTRP[playerid]);
		dUserSetINT(PlayerName(playerid)).("DrugHouseOwner",DrugHouseOwner[playerid]);
		dUserSetINT(PlayerName(playerid)).("OttoOwner",OttoOwner[playerid]);
		dUserSetINT(PlayerName(playerid)).("TSkill",TerroristSkill[playerid]);
		dUserSetINT(PlayerName(playerid)).("RobSkill",RobSkill[playerid]);
        dUserSetINT(PlayerName(playerid)).("CopRank",CopRank[playerid]);

		dUserSetINT(PlayerName(playerid)).("HasPackC4",HasPackC4[playerid]);
		dUserSetINT(PlayerName(playerid)).("HasPackRope",HasPackRope[playerid]);
		dUserSetINT(PlayerName(playerid)).("HasPackMoney",HasPackMoney[playerid]);
		dUserSetINT(PlayerName(playerid)).("SavedWantedLevel",SavedWantedLevel[playerid]);
		dUserSetINT(PlayerName(playerid)).("SavedJailTime",SavedJailTime[playerid]);
		dUserSetINT(PlayerName(playerid)).("Kills",Kills[playerid]);
		dUserSetINT(PlayerName(playerid)).("Deaths",Deaths[playerid]);

	    dUserSetINT(PlayerName(playerid)).("PlayingTimeHour",PlayerPlayingTimeHour[playerid]);
        dUserSetINT(PlayerName(playerid)).("PlayingTimeMin",PlayerPlayingTimeMin[playerid]);
        dUserSetINT(PlayerName(playerid)).("PlayingTimeSec",PlayerPlayingTimeSec[playerid]);
        dUserSetINT(PlayerName(playerid)).("CFamily",CanUseCFamily[playerid]);
        dUserSetINT(PlayerName(playerid)).("JailKidnap",JailKidnap[playerid]);
        dUserSetINT(PlayerName(playerid)).("Warns",Warns[playerid]);
	}
OnGamemodeExit - [Not Working]
Код:
for(new i=0;i<MAX_PLAYERS;i++)
	{
	if(IsPlayerConnected(i))
	{
	if(PLAYERLIST_authed[i] == 1)
	{
		dUserSetINT(PlayerName(i)).("Bankcash",BankCash[i]);
		dUserSetINT(PlayerName(i)).("money",GetPlayerCash(i));
		dUserSetINT(PlayerName(i)).("Score",GetPlayerScore(i));
	 	dUserSetINT(PlayerName(i)).("Adminlevel",AdminLevel[i]);
		dUserSetINT(PlayerName(i)).("ArmyAir",CanUseAArmy[i]);
		dUserSetINT(PlayerName(i)).("ArmyLand",CanUseLArmy[i]);
		dUserSetINT(PlayerName(i)).("CIA",CanUseCIA[i]);
		dUserSetINT(PlayerName(i)).("SWAT",CanUseSWAT[i]);
		dUserSetINT(PlayerName(i)).("VIP",IsVIP[i]);
		dUserSetINT(PlayerName(i)).("backweap",backweap[i]);
		dUserSetINT(PlayerName(i)).("RegularPlayer",IsRegularPlayer[i]);
		dUserSetINT(PlayerName(i)).("TRP",IsTRP[i]);
		dUserSetINT(PlayerName(i)).("DrugHouseOwner",DrugHouseOwner[i]);
		dUserSetINT(PlayerName(i)).("OttoOwner",OttoOwner[i]);
		dUserSetINT(PlayerName(i)).("TSkill",TerroristSkill[i]);
		dUserSetINT(PlayerName(i)).("RobSkill",RobSkill[i]);
        dUserSetINT(PlayerName(i)).("CopRank",CopRank[i]);
		dUserSetINT(PlayerName(i)).("HasPackC4",HasPackC4[i]);
		dUserSetINT(PlayerName(i)).("HasPackRope",HasPackRope[i]);
		dUserSetINT(PlayerName(i)).("HasPackMoney",HasPackMoney[i]);
		dUserSetINT(PlayerName(i)).("SavedWantedLevel",SavedWantedLevel[i]);
		dUserSetINT(PlayerName(i)).("SavedJailTime",SavedJailTime[i]);
		dUserSetINT(PlayerName(i)).("Kills",Kills[i]);
		dUserSetINT(PlayerName(i)).("Deaths",Deaths[i]);

		dUserSetINT(PlayerName(i)).("PlayingTimeHour",PlayerPlayingTimeHour[i]);
        dUserSetINT(PlayerName(i)).("PlayingTimeMin",PlayerPlayingTimeMin[i]);
        dUserSetINT(PlayerName(i)).("PlayingTimeSec",PlayerPlayingTimeSec[i]);

        dUserSetINT(PlayerName(i)).("CFamily",CanUseCFamily[i]);

        dUserSetINT(PlayerName(i)).("JailKidnap",JailKidnap[i]);
        dUserSetINT(PlayerName(i)).("Warns",Warns[i]);
	}
	}
	}
Reply
#2

Show us your code.
Reply
#3

But I just want to /gmx....gamemodeexit still does'nt called ?
Reply
#4

I am saving account on disconnect and everything is fine with GMX.
Reply
#5

Kick everyone and then use /gmx.
Reply
#6

If you saved everything when it changes, you don't have to worry about saving the accounts again when you want to restart the server.

If your player receives money or he paid to buy something, save the money.
When he gets score points, save the score.
When he gets a wanted level (or clears it), save the wanted level.

When you're certain everything is saved when it changes, you don't need to save it again when they disconnect.
Also, when your server suddenly crashes, you don't have any data-loss, as everything was already saved whenever it changed.

I'm doing the same thing with MySQL.
If some value changes, save it.
In case of a sudden server-reboot or crash, there is 0 dataloss.
I don't even have any data-save code under OnPlayerDisconnect.


pawn Код:
// This callback gets called when a player disconnects from the server
public OnPlayerDisconnect(playerid, reason)
{
    // Destroying the player-textdraws isn't required, as they are destroyed automatically by SAMP when a player disconnects

    // Setup local variables
    new Msg[128];

    // Send a message to all players to let them know somebody left the server
    switch (reason)
    {
        case 0: format(Msg, 128, "{0000FF}Player '{FFFF00}%s{0000FF}' (id: {FFFF00}%i{0000FF}) has left the server (Timed out)", APlayerData[playerid][Name], playerid);
        case 1: format(Msg, 128, "{0000FF}Player '{FFFF00}%s{0000FF}' (id: {FFFF00}%i{0000FF}) has left the server (Leaving)", APlayerData[playerid][Name], playerid);
        case 2: format(Msg, 128, "{0000FF}Player '{FFFF00}%s{0000FF}' (id: {FFFF00}%i{0000FF}) has left the server (Kicked/banned)", APlayerData[playerid][Name], playerid);
    }
    SendClientMessageToAll(0xFFFFFFFF, Msg);

    return 1;
}
That's my entire OnPlayerDisconnect callback.
Reply
#7

Yeah 0 dataloss but you are constantly updating DB which could cause lags when you have more players.
Reply
#8

Actully i can't do that "Save Status Everytime when it changed" because My GM is so bIG....
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)