CMD:jail(playerid, params[]) { if(pInfo[playerid][pLevel] >= 1) { new id, time = 0, reason[50]; if(isnull(params)) return SendClientMessage(playerid, yellow, "Usage: /Jail <Player ID> <Minutes> <Reason>"); sscanf(params, "uis[50]", id, time, reason); if(IsPlayerConnected(id) && id != playerid) { if(pInfo[id][Jailed] == 1) return SendClientMessage(playerid,red,"This player is already jailed. see /jailed"); if(pInfo[playerid][pLevel] <= pInfo[id][pLevel]) return ShowMessage(playerid, red, 6); if(!isnull(reason) && time == 0) format(Jstring,sizeof(Jstring),"Administrator %s has jailed player '%s' | Reason: %s",GetName(playerid),GetName(id),reason); else if(!isnull(reason) && time >= 1) format(Jstring,sizeof(Jstring),"Administrator %s has jailed '%s' for %d minutes (reason: %s)",GetName(playerid),GetName(id), time, reason); else if(isnull(reason) && time >= 1) format(Jstring,sizeof(Jstring),"Administrator %s has jailed '%s' for %d minutes",GetName(playerid),GetName(id), time); else format(Jstring,sizeof(Jstring),"Administrator %s has jailed '%s'",GetName(playerid),GetName(id)); CommandToAdmins(playerid,"jail"); SendClientMessageToAll(red,Jstring); pInfo[id][Jailed] = 1; TogglePlayerControllable(id, false); new Float:x, Float:y, Float:z; GetPlayerPos(id,x,y,z); SetPlayerCameraPos(id,x+7,y,z+5); SetPlayerCameraLookAt(id,x,y,z); JPlayer[id] = SetTimerEx("JailPlayer",3000,0,"d",id); if(GetPlayerState(id) == PLAYER_STATE_ONFOOT) SetPlayerSpecialAction(id,SPECIAL_ACTION_HANDSUP); if(time >= 1) { Jtimer[id] = SetTimerEx("Unjail",time*1000*60,0,"u",id); } return 1; } else return ShowMessage(playerid, red, 3); } else return ShowMessage(playerid, red, 1); }
It would be more appropriate to make a thread in scripting help for this kinda question.
You need to save the players jailed time when they disconnect and load up that info when he connects again, then check onplayerspawn if he has any remaining time, if he does, put him in jail again. |
CMD:jail(playerid,params[]) { if(PlayerInfo[playerid][LoggedIn] == 1) { if(PlayerInfo[playerid][Level] >= 1) { new tmp[256], tmp2[256], tmp3[256], Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index), tmp3 = strtok(params,Index); if(isnull(params)) return SendClientMessage(playerid, red, "USAGE: /jail [playerid] [minutes] [reason]"); new player1, playername[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME], string[128]; player1 = strval(tmp); if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID && (PlayerInfo[player1][Level] != ServerInfo[MaxAdminLevel]) ) { if(PlayerInfo[player1][Jailed] == 0) { GetPlayerName(player1, playername, sizeof(playername)); GetPlayerName(playerid, adminname, sizeof(adminname)); new jtime = strval(tmp2); if(jtime == 0) jtime = 9999; CMDMessageToAdmins(playerid,"JAIL"); PlayerInfo[player1][JailTime] = jtime*1000*60; JailPlayer(player1); Jail1(player1); PlayerInfo[player1][Jailed] = 1; if(jtime == 9999) { if(!strlen(params[strlen(tmp2)+1])) format(string,sizeof(string),"Administrator %s has jailed %s ",adminname, playername); else format(string,sizeof(string),"Administrator %s has jailed %s [reason: %s]",adminname, playername, params[strlen(tmp)+1] ); } else { if(!strlen(tmp3)) format(string,sizeof(string),"Administrator %s has jailed %s for %d minutes",adminname, playername, jtime); else format(string,sizeof(string),"Administrator %s has jailed %s for %d minutes [reason: %s]",adminname, playername, jtime, params[strlen(tmp2)+strlen(tmp)+1] ); } return SendClientMessageToAll(blue,string); } else return SendClientMessage(playerid, red, "Player is already in jail"); } else return SendClientMessage(playerid, red, "Player is not connected or is the highest level admin"); } else return SendClientMessage(playerid,red,"ERROR: You are not a high enough level to use this command"); } else return SendClientMessage(playerid,red,"ERROR: You must be logged in to use this commands"); }