10.07.2016, 10:25
I've a problem. When a user quits on the server with ajail, and comes back, his timer is no longer avaible, but he is still in ajail and the timer is not visible.
I need to do something like saving timer at /q and giving it back at onplayerconnect
but how?
Код:
public OnPlayerDisconnect(playerid, reason) { if(!IsPlayerNPC(playerid)) { if(pInfo[playerid][pLogged] == 1) { SaveStats(playerid); } DestroyDynamic3DTextLabel(PlayerLabel[playerid]); PlayersAlive--; ResetVars(playerid); DisconnectVars(playerid); DeletePlayerTD(playerid); new log[128]; format(log,sizeof(log),"~w~%s~b~ has disconnected",PlayerName(playerid)); UpdateAnnouncement(log); new str[256]; switch(reason) { case 0: format(str,sizeof(str),"*"COL_GREEN" Player %s(%i) has left the server Reason: Timed Out",PlayerName(playerid),playerid); case 1: format(str,sizeof(str),"*"COL_GREEN" Player %s(%i) has left the server Reason: Leaving",PlayerName(playerid),playerid); case 2: format(str,sizeof(str),"*"COL_GREEN" Player %s(%i) has left the server Reason: Kicked/Banned",PlayerName(playerid),playerid); } SendMessageToAllAdmins(str,-1); if(IsBeingSpeced[playerid] == 1) { foreach(Player,i) { if(spectatorid[i] == playerid) { TogglePlayerSpectating(i,false); giveWeaponAllow[i] = 1; } } } } return 1; } public AjailCount(playerid) { if(--pInfo[playerid][pJailed] < 1) { KillTimer(playertimer[playerid]); SendClientMessage(playerid, COLOR_RED, "Your time in Ajail is over.."); SetPlayerInterior(playerid, 0);//You can change interior SetPlayerVirtualWorld(playerid, 0); //You can change virtual world SetPlayerPos(playerid, 1529.6,-1691.2,13.3); } else { new str[32]; format(str,sizeof(str),"%02d:%02d",((pInfo[playerid][pJailed]/60)%60),pInfo[playerid][pJailed]%60); if(!GameTextForPlayer(playerid, str, 1200, 5)) KillTimer(playertimer[playerid]); } return 1; } JailPlayer(playerid, targetid, time, reason[]) { new string[128], adminname[MAX_PLAYER_NAME + 1], targetname[MAX_PLAYER_NAME + 1]; GetPlayerName(playerid, adminname, MAX_PLAYER_NAME); GetPlayerName(targetid, targetname, MAX_PLAYER_NAME); SetPlayerPos(targetid, 346.870025, 309.259033, 999.155700); SetPlayerVirtualWorld(targetid, 2); SetPlayerInterior(targetid,6); ResetPlayerWeapons(targetid); ResetPlayerInventory(targetid); AddSlotToInventoryWorld(targetid,"Bandage",1); pInfo[targetid][BackpackSlotsUsed] = 1; SendClientMessage(targetid,-1,"*"COL_RED" Your inventory has been reset!"); pInfo[playerid][pJailed] = time * 60; format(string, sizeof(string), "Administrator %s ajailed %s for %d minutes. Reason: %s", adminname, targetname, time, reason); SendClientMessageToAll(COLOR_RED, string); KillTimer(playertimer[targetid]); playertimer[targetid] = SetTimerEx("AjailCount", 1000, true, "i", targetid); } CMD:ajail(playerid, params[]) { if(pInfo[playerid][pAdminLevel] < 1) SendClientMessage(playerid, COLOR_RED, "ERROR: You are not Admin"); else { new targetid, time, reason[64]; if(sscanf(params, "uds[64]", targetid, time, reason)) SendClientMessage(playerid, -1, "USAGE: /ajail <playerid> <time> <reason>"); else if(targetid > MAX_PLAYERS) SendClientMessage(playerid, COLOR_RED, "ERROR: Not connected !"); else if(time < 1) SendClientMessage(playerid, COLOR_RED, "ERROR: Minimum 1 minute !"); else if(pInfo[targetid][pJailed] > 0) SendClientMessage(playerid, COLOR_RED, "ERROR: Already in Jail !"); else JailPlayer(playerid, targetid, time, reason); } return 1; } CMD:unjail(playerid, params[]) { if(pInfo[playerid][pAdminLevel] < 1) return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not admin!"); new targetid; if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, -1, "USAGE: /unajail <playerid>"); if(pInfo[targetid][pJailed] == 0) return SendClientMessage(playerid, COLOR_RED, "ERROR: Player not in ajail right now!"); new string[128], adminname[24], targetname[24]; GetPlayerName(playerid, adminname, MAX_PLAYER_NAME); GetPlayerName(targetid, targetname, MAX_PLAYER_NAME); format(string, sizeof(string), "Administrator %s took %s out of Admin Jail.", adminname, targetname); SendMessageToAllAdmins(string, -1); pInfo[playerid][pJailed] = 0; return 1; }
I need to do something like saving timer at /q and giving it back at onplayerconnect
but how?