system-jail-include allows you to implement a jail system in a simple and efficient way.
This include automatically:
- Assigns the player a default
(x, y, z)position and interior. - Resets the player’s weapons.
- Assigns each jailed player an independent virtual world, avoiding conflicts if multiple players are in jail at the same time.
If you don’t want to use the default jail location, you can customize it using the OnPlayerEnterJail callback.
Examples use:
- Copy
system_jail.incto your/pawno/includefolder. - Include it in your gamemode:
#include <system_jail>- Make sure you have YSI-Includes in your
includefolder so the gamemode compiles correctly.
You can set a maximum number of jailed players (default is 10) by defining MAX_JAILED after including the library:
#include <system_jail>
#undef MAX_JAILED
#define MAX_JAILED (5)OnPlayerEnterJail(playerid, const minutes)– called when a player enters jail.
Example:
public OnPlayerEnterJail(playerid, const minutes)
{
printf("Player ID: %d entered jail.", playerid);
printf("They will be released in %d minutes.", minutes);
return 1;
}You can detect if a player has an indefinite jail time:
public OnPlayerEnterJail(playerid, const minutes)
{
if(minutes == NO_TIME)
{
printf("You have been jailed indefinitely.");
return 1;
}
printf("Player ID: %d entered jail.", playerid);
printf("They will be released in %d minutes.", minutes);
return 1;
}You can also set a custom jail position for a player:
public OnPlayerEnterJail(playerid, const minutes)
{
SetPlayerPos(playerid, 2125.4805, 1584.6116, 20.3906);
SetPlayerInterior(playerid, 0);
if(minutes == NO_TIME)
{
printf("You have been jailed indefinitely.");
return 1;
}
printf("Player ID: %d entered jail.", playerid);
printf("They will be released in %d minutes.", minutes);
return 1;
}The player’s virtual world is automatically handled by the include.
OnPlayerLeaveJail(playerid)– called when a player leaves jail.
Example:
public OnPlayerLeaveJail(playerid)
{
printf("Player ID: %d has been released from jail.", playerid);
return 1;
}OnPlayerComplyOneMinute(playerid, const minutes)– called every time a player completes one minute in jail.
Example:
public OnPlayerComplyOneMinute(playerid, const minutes)
{
printf("Player ID: %d has %d minutes left in jail.", playerid, minutes);
return 1;
}IsPlayerInJail(playerid)– checks if a player is currently in jail.
Example:
public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
if(IsPlayerInJail(playerid))
{
printf("Player ID: %d cannot use commands.", playerid);
return 0;
}
return 1;
}GetUsersInJail()– returns the number of players currently in jail.
Example:
cmd:totaljail(playerid)
{
printf("Total players in jail: %d", GetUsersInJail());
return 1;
}GetPlayerPositionInJail(playerid)– gets the position of the player in the jail queue.
Example:
cmd:position(playerid)
{
GetPlayerPositionInJail(playerid);
printf("Player ID: %d is at position: %d", playerid, position + 1);
return 1;
}The variable
positionis automatically declared.
GetPlayerTimeInJail(playerid)– returns the remaining time in seconds for the player to be released. You can also get minutes and seconds separately.
Example 1:
cmd:time(playerid)
{
printf("You have %d seconds left in jail.", GetPlayerTimeInJail(playerid));
return 1;
}Example 2:
cmd:time(playerid)
{
new minutes, seconds;
GetPlayerTimeInJail(playerid, minutes, seconds);
printf("Time left: %02d:%02d", minutes, seconds);
return 1;
}PutPlayerInJail(playerid, minutes = NO_TIME)– sends a player to jail. Ifminutesis omitted, the jail time is unlimited.
Example:
cmd:jail(playerid)
{
PutPlayerInJail(playerid, 3); // 3 minutes
return 1;
}Indefinite jail:
cmd:jail(playerid)
{
PutPlayerInJail(playerid);
return 1;
}RemovePlayerJail(playerid)– removes a player from jail.
Example:
cmd:unjail(playerid)
{
RemovePlayerJail(playerid);
return 1;
}ShowPlayersInJail(playerid)– displays a menu with all jailed players.
Example:
cmd:encarcelados(playerid)
{
ShowPlayersInJail(playerid);
return 1;
}#include <a_samp>
#include <Pawn.CMD>
#include <sscanf>
#include <system_jail>
public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
if(IsPlayerInJail(playerid))
{
new minutes, seconds, string[77];
GetPlayerTimeInJail(playerid, minutes, seconds);
if(minutes != 0)
format(string, sizeof(string), "[Jail]: %d minutes and %d seconds left.", minutes, seconds);
else
format(string, sizeof(string), "[Jail]: %d seconds left.", seconds);
SendClientMessage(playerid, -1, string);
return 0;
}
return 1;
}
public OnPlayerComplyOneMinute(playerid, const minutes)
{
new string[46];
format(string, sizeof(string), "[Jail]: %d minutes left.", minutes);
SendClientMessage(playerid, -1, string);
return 1;
}
public OnPlayerEnterJail(playerid, const minutes)
{
new string[45];
format(string, sizeof(string), "[Jail]: You will be released in %d minutes.", minutes);
SendClientMessage(playerid, -1, string);
return 1;
}
public OnPlayerLeaveJail(playerid)
{
SendClientMessage(playerid, -1, "[Jail]: You are free!");
SpawnPlayer(playerid);
return 1;
}
