timer problem
#1

hey guys, i have an arrest command that is supposed to put a player in jail for 30 seconds when a cop arrests them

it does put the player in jail perfectly but it doesnt release them after 30 seconds.

i cant seem to find what went wrong, i get no compile errors, which is good for the 6400 lines my gamemode now has

this is my /ar command

Код:
COMMAND:ar(playerid, params[])
{
	if(GetPlayerColor(playerid) == 0x0259EAAA)
	{
	    new toplayer;
	    if(!sscanf(params, "ui", toplayer))
	    {
	        if(IsPlayerConnected(toplayer))
	        {
	            new Float:X, Float:Y, Float:Z;
    			GetPlayerPos(playerid, X,Y,Z);
    			if(GetPlayerColor(toplayer) == 0x0259EAAA) return SendClientMessage(playerid, 0xAA3333AA, "You can't Arrest your Squad Mates!");
    			if(GetPlayerColor(toplayer) == 0xFFFFFFFF) return SendClientMessage(playerid, 0xAA3333AA, "This Player isn't Wanted!");
    			if(GetPlayerState(toplayer) == PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xAA3333AA, "You Can only Arrest Criminals who are on Foot!");
    			if(GetPlayerState(toplayer) == PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, 0xAA3333AA, "You Can only Arrest Criminals who are on Foot!");
    			if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xAA3333AA, "You Cannot Arrest a Criminal while in a Vehicle!");
    			if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, 0xAA3333AA, "You Cannot Arrest a Criminal while in a Vehicle!");
    			if(IsPlayerInRangeOfPoint(toplayer, 5.0, X,Y,Z))
    			{
		            new string[64];
		            new name[MAX_PLAYER_NAME], PlayerName[MAX_PLAYER_NAME];
		            GetPlayerName(playerid, name, sizeof(name));
		            GetPlayerName(toplayer, PlayerName, sizeof(PlayerName));
		            format(string, sizeof(string), "Officer %s Has Arrested and Jailed you for 60 Seconds!", name);
		            SendClientMessage(playerid, 0x0259EAAA, string);
		            format(string, sizeof(string), "%s Has Been Arrested!", PlayerName);
		            SendClientMessageToAll(0x0259EAAA, string);
		            SetPlayerPos(toplayer, 264.6288,77.5742,1001.0391);
		            SetPlayerInterior(toplayer, 6);
		            SetPlayerColor(toplayer, 0xFFFFFFFF);//Civilian Color
		            SetPlayerWantedLevel(toplayer, 0);
		            ResetPlayerWeapons(toplayer);
		            jailed[toplayer] = 1;
		            //SetTimerEx("UnJail",60000,false,"i",playerid); // original timer
		            SetTimerEx("UnJail", 30000, 0, "i", playerid); // new timer
		            return 1;
				}
				else return SendClientMessage(playerid, 0x0259EAAA, "You Are Not Near The Player.");
	        }
	        else return SendClientMessage(playerid, 0x0259EAAA, "Player Is Not Connected.");
	    }
	    else return SendClientMessage(playerid, 0x0259EAAA, "USAGE: /ar [PlayerId/PartOfName]");
	}
	else return SendClientMessage(playerid, 0x0259EAAA, "You Are Not Cop!");
}
my forward

Код:
forward UnJail(playerid);
and now the public
Код:
public UnJail(playerid)
{
	for(new i; i < MAX_PLAYERS; i++)
 	{
		if(jailed[i] == 1)
		{
            new pname[MAX_PLAYER_NAME];
			new string[48];
            GetPlayerName(i, pname, sizeof(pname));
			SetPlayerPos(i, 255.2078,86.6854,1002.4453);
			SetPlayerInterior(i, 6);
			SetPlayerFacingAngle(i, 90);
			format(string, sizeof(string), "%s (%d) has been Released from Jail.", pname, i);
			SendClientMessageToAll(0xFFFFFFFF, string);
			jailed[i] = 0;
		}
		return 1;
	}
	return 1;
}
Reply
#2

In public you have a playerid parameter. So why you loop through all players and unjail them, when timer should work for only one player?
Reply
#3

You're using SetTimerEx, where you can (You also did) add playerid, why would you use a loop?
pawn Код:
public UnJail(playerid)
{
    if(jailed[playerid] == 1)
    {
        new pname[MAX_PLAYER_NAME];
        new string[60]; // 48 is too small for "(24 character name) (%d) has been Released from Jail."
        GetPlayerName(playerid, pname, sizeof(pname));
        SetPlayerPos(playerid, 255.2078,86.6854,1002.4453);
        SetPlayerInterior(playerid, 6);
        SetPlayerFacingAngle(playerid, 90);
        format(string, sizeof(string), "%s (%d) has been Released from Jail.", pname, playerid);
        SendClientMessageToAll(0xFFFFFFFF, string);
        jailed[playerid] = 0;
    }
    // You don't have to return anything (not 100% sure, but that's what I do and it works just fine)
}
Reply
#4

thanks for the help guys problem is solved!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)