> For the complete documentation index, see [llms.txt](https://documentation.rcore.cz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.rcore.cz/paid-resources/rcore_prison/configurations/config.md).

# Main Config

* Welcome to the main configuration file of the RCore Prison

## General Settings

<details>

<summary>Debug</summary>

#### `Debug`

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Enables or disables overall debugging for `rcore_prison`.

#### `DebugInventory`

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Enables debugging related to the inventory module.

#### `DebugClothing`

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Enables debugging related to the clothing module.

#### `DebugAPI`

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Enables debugging related to the API system.

#### `DebugEnviroment`

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Enables debugging related to the environment.

#### `ErrorDebug`

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Makes error tracking easier.

#### `DebugLevel`

* **Type:** `table`
* **Default:**

  ```lua
  {
      'NETWORK',
      'INFO',
      'CRITICAL',
      'SUCCESS',
      'ERROR',
      'API',
      'DEBUG',
      'MENU',
  }
  ```
* **Description:** Defines the levels of debugging information to be displayed.

</details>

<details>

<summary>Locale</summary>

* **Type:** `string`
* **Default:** `'en'`
* **Options:** `['en']` *(additional languages may be supported)*
* **Description:** Sets the language for the system.

</details>

<details>

<summary>Time</summary>

* **Type:** `enum`
* **Default:** `TIMES.MIN`
* **Options:** `['SEC', 'MIN', 'HOURS', 'DAYS', 'WEEK', 'MONTHS']`
* **Description:** Defines the time unit for jail durations.

</details>

## Integrations / Framework settings

<details>

<summary>Framework</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Frameworks:**
  * **AUTO\_DETECT:** Automatically detects the framework.
  * **Framework.ESX:** `es_extended` ([GitHub](https://github.com/esx-framework/esx_core))
  * **Framework.QBCore:** `qb-core` ([GitHub](https://github.com/qbcore-framework/qb-core))
  * **Framework.QBOX:** `qbx_core` ([GitHub](https://github.com/Qbox-project/qbx_core))
  * **Framework.NDCore:** `ND_Core` ([GitHub](https://github.com/ND-Framework/ND_Core))
  * **STANDALONE:** No framework found; you will need to integrate it.
* **Example:**
* **Note:** Leave it on AUTO\_DETECT, if you one of supported frameworks (recommended).

```lua
Framework = AUTO_DETECT -- Will automatically pick up supported framework(s) from list if found on server.
Framework.ESX -- Will try to load ESX if failed to pick up, it will switch to standalone.
```

</details>

<details>

<summary>Inventories</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Inventories:**
  * **AUTO\_DETECT:** Auto-detect inventory \[Only detecting supported inventories below]
  * **Inventories.ESX:** `es_extended` ([GitHub](https://github.com/esx-framework/esx_core))
  * **Inventories.QB:** `qb-inventory` ([GitHub](https://github.com/qbcore-framework/qb-inventory))
  * **Inventories.PS:** `ps-inventory` ([GitHub](https://github.com/Project-Sloth/ps-inventory))
  * **Inventories.QS:** `qs-inventory`
  * **Inventories.LJ:** `lj-inventory`
  * **Inventories.MF:** `mf-inventory`
  * **Inventories.OX:** `ox-inventory`
  * **Inventories.CHEEZA:** `inventory`
  * **Inventories.CODEM:** `codem-inventory`
  * **Inventories.TGIANN:** `tgiann-inventory`
  * **Inventories.ORIGEN:** `origen-inventory`
  * **Inventories.CORE:** `core_inventory`
  * **STANDALONE:** No inventory found; you will need to integrate it.
* **Example:**
* **Note:** Leave it on AUTO\_DETECT, if you one of supported inventories (recommended).

```lua
Inventories = AUTO_DETECT -- Will automatically pick up supported inventorie(s) from list if found on server.
Inventories.OX -- Will try to load ox_inventory if failed to pick up, it will switch to standalone.
```

</details>

<details>

<summary>Map</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Prison Maps:**
  * **AUTO\_DETECT:** Auto-detect prison map \[Only detecting supported maps below]
  * **Map.RCORE**
  * **Map.PROMPT**
  * **Map.UNCLE**
  * **Map.ALCATRAZ**
  * **Map.YBN**
  * **Map.DESERTOS**
  * **Map.GABZ**
  * **STANDALONE:** No prison map found; loading standalone preset (`data/presets/standalone.lua`)
* **Note:** Leave it on AUTO\_DETECT, if you one of supported inventories (recommended).

```lua
Map = AUTO_DETECT -- Will automatically pick up supported map(s) from list if found on server.
Map.RCORE -- Will try to load RCORE map if failed to pick up, it will switch to standalone.
```

</details>

<details>

<summary>Interactions</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Interactions:**
  * **AUTO\_DETECT:** Auto-detect interactions \[Only detecting supported interactions below]
  * **Interactions.OX:** `ox_target`
  * **Interactions.QB:** `qb-target`
  * **Interactions.MV:** `ps-inventory`
  * **Interactions.NONE:** Distance interaction using \[E]
  * **STANDALONE:** No target interaction found; distance interaction using \[E] will be used
* **Note:** Leave it on AUTO\_DETECT, if you one of supported inventories (recommended).

```lua
Interactions = AUTO_DETECT -- Will try to load supported target system, if failed to find then it will load standalone (key press) interact
Interactions.NONE -- It will set interaction to key press [E]
```

</details>

<details>

<summary>Database</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Database Connectors:**
  * **AUTO\_DETECT:** Auto-detect DB connector
  * **Database.OX:** `oxmysql`
  * **Database.MYSQL\_ASYNC:** `mysql-async`
  * **Database.GHMATTI:** `ghmattimysql`
  * **STANDALONE:** No DB connector found
* **Note:** Leave it on AUTO\_DETECT, if you one of supported databases (recommended).

```lua
Database = AUTO_DETECT -- Will automatically pick up db connector(s) from list if found on server.
Database.OX -- Will try to load OX, if fails to detect - no db connector found (prison cannot run without database)
```

</details>

<details>

<summary>Cloth</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Clothing Systems:**
  * **AUTO\_DETECT:** Auto-detect clothing \[Only detecting supported clothing below]
  * **Cloth.RCORE:** `rcore_clothing` ([Store](https://store.rcore.cz/package/6430968))
  * **Cloth.ESX:** `skinchanger` ([GitHub](https://github.com/esx-framework/esx_core/tree/main/\[core]/skinchanger))
  * **Cloth.QB:** `qb-clothing` ([GitHub](https://github.com/qbcore-framework/qb-clothing))
  * **Cloth.IAPPEARANCE:** `illenium-appearance` ([GitHub](https://github.com/iLLeniumStudios/illenium-appearance))
  * **Cloth.CODEM:** `codem-appearance` *(Experimental)*
  * **Cloth.CRM:** `crm-appearance` *(Experimental)*
  * **Cloth.TGIANN:** `tgiann-clothing` *(Experimental)*
  * **Cloth.WASABI:** `fivem-appearance - wasabi fork` *(Experimental)*
* **Note:** Leave it on AUTO\_DETECT, if you one of supported clothing system (recommended).

```lua
Cloth = AUTO_DETECT -- Will automatically pick up clothing system
Cloth = Cloth.RCORE -- Will try to use RCore Clothing resource
```

</details>

<details>

<summary>Phones</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Phone Resources:**
  * **AUTO\_DETECT:** Auto-detect phone resource
  * **Phones.LB:** `lb_phone`
  * **STANDALONE:** Phone booths will not be usable.
* **Note:** Leave it on AUTO\_DETECT, if you one of supported phone system (recommended).

```lua
Phones = AUTO_DETECT -- Will automatically pick up phone system
Phones = Phones.STANDALONE -- No supported phone for phone boots is loaded.
```

</details>

<details>

<summary>Notifies</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Notify Resources:**
  * **AUTO\_DETECT:** Auto-detect Notify resource
  * **Notifies.BRUTAL:** `brutal_notify`
  * **Notifies.PNOTIFY:** `qb-pNotify`
  * **Notifies.OX:** `ox_lib`
  * **Notifies.ESX\_NOTIFY:** `esx_notify`
  * **Notifies.QBCORE:** `qb-core`
  * **Notifies.ESX:** `es_extended`
  * **Notifies.MYTHIC:** `mythic_notify`
  * **Notifies.OKOK:** `okokNotify`
  * **STANDALONE:** Will use native notifications included in the resource
* **Note:** Leave it on AUTO\_DETECT, if you one of supported notifies system (recommended).

```lua
Notifies = AUTO_DETECT -- Will automatically pick up notifies system
Notifies = Notifies.STANDALONE -- It will use native notifications if failed to find any supported.
```

</details>

<details>

<summary>TextUI</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported TextUI Resources:**
  * **AUTO\_DETECT:** Auto-detect TextUI resource
  * **TextUI.RCORE:** `rcore_prison`
  * **TextUI.OX:** `ox_lib`
  * **TextUI.QBCORE:** `qb-core`
  * **TextUI.ESX:** `esx_textui`
  * **STANDALONE:** No TextUI resource found
* **Note:** Leave it on AUTO\_DETECT, if you one of supported Text UI system (recommended).

```lua
TextUI = AUTO_DETECT -- Will automatically pick up TextUI system
TextUI = TextUI.STANDALONE -- It will use RCore TextUI if not any found
```

</details>

<details>

<summary>Menus</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Menus:**
  * **AUTO\_DETECT:** Auto-detect menu
  * **Menus.RCORE:** `rcore_prison`
  * **Menus.ESX\_CONTEXT:** `esx_context`
  * **Menus.OX:** `ox_lib - context`
  * **Menus.QB:** `qb-menu`
  * **STANDALONE:** Defaults to `rcore_prison`
* **Note:** Leave it on AUTO\_DETECT, if you one of supported Menu system (recommended).

```lua
Menus = AUTO_DETECT -- Will automatically pick up Menus system
Menus = Menus.OX -- Will try to pickup ox_lib contenxt for menus inside prison.
Menus = Menus.STANDALONE -- It will use RCore Menu if not any found
```

</details>

<details>

<summary>Dispatches</summary>

* **Type:** `enum`
* **Default:** `AUTO_DETECT`
* **Supported Dispatch Resources:**
  * **AUTO\_DETECT:** Auto-detect dispatch resources
  * **Dispatches.RCORE:** `rcore_dispatch`
  * **Dispatches.QS:** `qs-dispatch`
  * **Dispatches.PS:** `ps-dispatch`
  * **Dispatches.CD:** `cd_dispatch`
  * **Dispatches.CORE:** `core_dispatch`
  * **Dispatches.CODEM:** `codem_dispatch`
  * **Dispatches.LOVE\_SCRIPTS:** `emergency_dispatch`
  * **Dispatches.ORIGEN:** `origen_police`
  * **Dispatches.TK:** `tk_dispatch`
  * **Dispatches.DUSA:** `dusa_Dispatch`
  * **STANDALONE:** No dispatch resource found; you will need to integrate it
* **Note:** Leave it on AUTO\_DETECT, if you one of supported Dispatches system (recommended).

```lua
Dispatches = AUTO_DETECT -- Will automatically pick up Dispatches system from the list
Dispatches = Dispatches.RCORE -- It will try to use RCore Dispatch for Prison break.
Dispatches = Dispatches.STANDALONE -- It will use standalone solution inside RCore Prison
```

</details>

<details>

<summary>Framework Admin Groups</summary>

* **Type:** `table`
* **Description:** Defines admin groups based on the framework.

```lua
FrameworkAdminGroups = {
    [Framework.ESX] = { 'superadmin', 'admin' },
    [Framework.QBCore] = { 'god', 'admin' },
    [Framework.QBOX] = { 'god', 'admin' },
},
```

</details>

<details>

<summary>Framework Events</summary>

* **Type:** `table`
* **Description:** Framework event mappings.

```lua
FrameworkEvents = {
    ['QBCore:Client:OnJobUpdate'] = 'QBCore:Client:OnJobUpdate',
    ['esx:playerLoaded'] = 'esx:playerLoaded',
    ['esx:setJob'] = 'esx:setJob',
    ['esx_skin:getPlayerSkin'] = 'esx_skin:getPlayerSkin',
    ['skinchanger:loadSkin'] = 'skinchanger:loadSkin',
    ['skinchanger:getSkin'] = 'skinchanger:getSkin',
    ['skinchanger:loadClothes'] = 'skinchanger:loadClothes',
    ['qb-clothing:client:loadOutfit'] = 'qb-clothing:client:loadOutfit',
    ['qb-clothing:client:loadPlayerClothing'] = 'qb-clothing:client:loadPlayerClothing'
},
```

</details>

## Other

<details>

<summary>AllowAdminGroupsUseJailCommands</summary>

* **Type:** `boolean`
* **Description:** This is used for allowing admin groups to use prison commands which are restricted to police/sheriff jobs

```lua
AllowAdminGroupsUseJailCommands = false
```

</details>

<details>

<summary>RestrictCommandsForDistance</summary>

* **Type:** `boolean`
* **Description:** This is used for restricting commands for distance to inmates.

```lua
RestrictCommandsForDistance = false
```

</details>

<details>

<summary>RestrictDistance</summary>

* **Type:** `float`
* **Description:** This is the distance for restricting commands

```lua
RestrictDistance = 10.0,
```

</details>

<details>

<summary>RegisterChatSuggestions</summary>

* **Type:** `boolean`
* **Description:** Allow to register chat suggestions (enable/disable)

```lua
RegisterChatSuggestions = true,
```

</details>

<details>

<summary>Jobs / Companion system</summary>

* **Type:** `table`
* **Description:** This allows to handle companion for specific jobs and remove new prisoner jobs based off the job list.

```lua
  Prisoners = {
      Companion = true,                -- This is used for enabling companion system, player with the specific job are not going to be attacked by Prison Guards
      CompanionRefreshCycleTime = 1.5, -- This is the time for refreshing prisoners (default in sec)
      CompanionJobList = {
          ['police'] = true,
          ['sheriff'] = true,
          ['ambulance'] = true,
      },

      RemovePlayerJobWhenJailed = false,        -- This is used for removing player job when citizen is jailed (supports: ESX, QBCore)
      RemovePlayerSetDefaultJob = 'unemployed', -- This is the default job set when RemovePlayerJobWhenJailed is enabled
      RemoveJobList = {
          ['police'] = true,                    --
          ['ambulance'] = true,
          ['sheriff'] = true,
      }
  },
```

</details>

<details>

<summary>ReduceSentenceType</summary>

* **Type:** `enum`
* **Default:** `SentenceTypes.ONLINE`
* **Options:** `SentenceTypes.ONLINE, SentenceTypes.OFFLINE`
* **Description:** \[OFFLINE - Prisoners are not required to be on server for sentence reduce, ONLINE - Prisoners are required to be on server for sentence reducing!]

</details>

<details>

<summary>DisableClothing</summary>

* **Type:** `boolean`
* **Default:** `false`
* **Description:** Option to disable clothing

</details>

<details>

<summary>CanPrisonerBeReleasedWhenOnSolitary</summary>

* **Type:** `boolean`
* **Default:** `true`
* **Description:** This is used for enabling prisoner to be released when they are on solitary

</details>

<details>

<summary>RenderJailTime</summary>

* **Type:** `boolean`
* **Default:** `true`
* **Description:** This is used for rendering jail time on the screen

</details>

<details>

<summary>RenderNPCBlips</summary>

* **Type:** `boolean`
* **Default:** `true`
* **Description:** This is used for rendering blips on map (only for prisoners)

</details>

<details>

<summary>JailByNPCSettings</summary>

* **Type:** `table`
* **Default:** `true`
* **Description:** This is used for jailing by NPC (settings)

```lua
JailByNPCSettings = {
    JailDistance = 10.0, -- This is the distance for jailing player by NPC
    JailTime = 60,       -- This is the jail time for NPC jail (default in min)
    ResetPedPool = 5,    -- This is the time for resetting ped pool - so same ped can jail other users. (default in min)
},
```

</details>

## Prison break

<details>

<summary>Dispatch settings</summary>

* **Type:** `table`
* **Description:** This is settings for the dispatch allows to call dispatch when destroyed wall/escaped from prison.

```lua
DispatchSettings = {
    InvokeWhenDestroyedWall = false,      -- This is used for invoking dispatch when wall is destroyed (without NPC seen player destroying wall)
    InvokeWhenPlayerEscapePrison = false, -- This is used for invoking dispatch when player escaped from Prison (without NPC seen player escaping)
}
```

</details>

<details>

<summary>Escape.RequiredPolice</summary>

* **Type:** `number`
* **Default value:** `3`
* **Description:** How many police officers needs to be online for Prison break start.

</details>

<details>

<summary>Escape.PoliceCheck</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for enabling checking if there is enough Police officers to start Prison break

</details>

<details>

<summary>Escape.Enable</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling prison break system

</details>

<details>

<summary>Escape.MarkerColor</summary>

* **Type:** `vec4`
* **Default value:** `{ r = 255, g = 0, b = 0, a = 100 }`
* **Description:** This is the color of the marker for interaction with wall

</details>

<details>

<summary>Escape.ViewCone</summary>

* **Type:** `number`
* **Default value:** `160`
* **Description:** View angle for NPC guards

</details>

<details>

<summary>Escape.WallLodSyncDistance</summary>

* **Type:** `number`
* **Default value:** `300`
* **Description:** This is the distance for syncing walls (recommended value)

</details>

<details>

<summary>Escape.AutoCatch</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for auto catching the prisoners are escaping with guards to put them in solitary

</details>

<details>

<summary>Escape.SolitaryTime</summary>

* **Type:** `number`
* **Default value:** `5`
* **Description:** This is the time for solitary (default in min) when prisoner is caught

</details>

<details>

<summary>Escape.DisableBugEscape</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** Player are only allowed to escape through included Prison break system!

</details>

<details>

<summary>Escape.WhenEscapeRemoveInmateStash</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for removing inmates stash when they are escaping

</details>

<details>

<summary>Escape.BugEscapeCycleTime</summary>

* **Type:** `number`
* **Default value:** `1`
* **Description:** This is the time for checking if prisoner is in area (default in minutes)

</details>

<details>

<summary>Escape.ViewNPCDistance</summary>

* **Type:** `number`
* **Default value:** `30`
* **Description:** This is the distance for viewing NPC

</details>

<details>

<summary>Escape.RepairWallTime</summary>

* **Type:** `number`
* **Default value:** `10`
* **Description:** This is the time for repairing the wall (default in seconds)

</details>

<details>

<summary>Escape.RepairWallKey</summary>

* **Type:** `string`
* **Default value:** `'E'`
* **Description:** This is the interaction key for repairing wall

</details>

<details>

<summary>Escape.ResetTime</summary>

* **Type:** `number`
* **Default value:** `30`
* **Description:** This is the time for resetting the escape (default in min)

</details>

<details>

<summary>Escape.EnableAutomaticReset</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is the time for resetting the escape (default in min)

</details>

<details>

<summary>Escape.NeedItem</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for needing item to escape from the prison

</details>

<details>

<summary>Escape.ItemName</summary>

* **Type:** `string`
* **Default value:** `wire_cutter`
* **Description:** This is the item name for escaping from the prison

</details>

<details>

<summary>Escape.NotifyJobs</summary>

* **Type:** `array`
* **Default value:** `{ 'police', 'leo' }`
* **Description:** This is the list of the jobs which are going to be notified when prisoner is escaping when using supported dispatch system

</details>

<details>

<summary>Escape.DisablePatrollingGuards</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This allows to enable/disable spawning of patrolling NPC guards.

</details>

<details>

<summary>Escape.Experimental.RemoveCuttersAfterWallDestroyed</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This will enable removing wire\_cutter (ItemName) from player inventory when destroying wall

</details>

<details>

<summary>Escape.Experimental.CuttingSequence</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This will enable/disable cutting sequence

</details>

<details>

<summary>Escape.Experimental.CuttingSequenceTime</summary>

* **Type:** `number`
* **Default value:** `15`
* **Description:** How much the cutting should take before wall breaks (in seconds)

</details>

<details>

<summary>Escape.Experimental.ClearPlayerInventoryWhenEscape</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This will enable/disable clearing of player inventory if he escaped

</details>

## Guards

<details>

<summary>Guards.EnableJailAllCitizensWhenAttackedGuard</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for jailing all citizens when guard is attacked

</details>

<details>

<summary>Guards.JailTime</summary>

* **Type:** `number`
* **Default value:** `20`
* **Description:** This is the jail time for attacking guard (default in min)

</details>

## Solitary

<details>

<summary>Solitary.DistanceCheck</summary>

* **Type:** `number`
* **Default value:** `10`
* **Description:** This is the distance for checking if player is in his solitary cell.

</details>

<details>

<summary>Solitary.GuardDistanceCheck</summary>

* **Type:** `number`
* **Default value:** `10`
* **Description:** This is the distance for checking if player is in the guard area.

</details>

<details>

<summary>Solitary.Time</summary>

* **Type:** `number`
* **Default value:** `3`
* **Description:** This is the time for solitary (default in min) - when guard is attacked by prisoner

</details>

## Release checkpoint

<details>

<summary>Release.AtCheckpoint</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for releasing prisoner at the checkpoint, if disabled prisoner will be released at the prison.

</details>

## Circuit

<details>

<summary>Circuit.Lifes</summary>

* **Type:** `number`
* **Default value:** `3`
* **Description:** How much lifes person has for Electrician

</details>

<details>

<summary>Circuit.Difficulty</summary>

* **Type:** `number`
* **Default value:** `1`
* **Description:** 1, 2, 3, 4, 5, 6 --> This is ignored when EachJobLevelIncreaseDifficulty is enabled

</details>

<details>

<summary>Circuit.Keybinds</summary>

* **Type:** `table`
* **Default value:** `{ ['ARROW_UP'] = 172, ['ARROW_DOWN'] = 173, ['LEFT_ARROW'] = 174, ['RIGHT_ARROW'] = 175, ['BACKSPACE'] = 177, }`
* **Description:** Default keys used for the circuit minigame.

</details>

## Commands

<details>

<summary>Commands.Keybinds</summary>

* **Type:** `table`
* **Default value:**

```lua
Commands = {
    Jail = 'jail',                    -- This is the command for jailing player
    Unjail = 'unjail',                -- This is the command for unjailing player
    Startcs = 'startcs',              -- This is the command for starting the community service
    Removecs = 'removecs',            -- This is the command for removing the community service
    JailCP = 'jailcp',                -- This is command for opening jail dashboard
    StopAlarm = 'stopalarm',          -- This is the command for stopping the alarm
    Solitary = 'solitary',            -- This is the command for sending player to solitary cell(s)
    RemoveSolitary = 'rsolitary',     -- This is the command for removing player from solitary cell(s)
    ResetPrisonBreak = 'resetescape', -- This is the command for resetting the prison break
}
```

* **Description:** This is list of commands that are used in prison.

</details>

## UI Configuration

<details>

<summary>Menu.Position</summary>

* **Type:** `string`
* **Default value:** `top-right`
* **Description:** This is the position of the menu \['top-left', 'top-right', 'bottom-left', 'bottom-right']

</details>

<details>

<summary>Helpkeys.Position</summary>

* **Type:** `string`
* **Default value:** `top-left`
* **Description:** This is the position of the help keys \['top-left', 'top-right', 'bottom-left', 'bottom-right']

</details>

<details>

<summary>Text.Position</summary>

* **Type:** `string`
* **Default value:** `bottom-right`
* **Description:** This is the position of the text \['top-left', 'top-right', 'bottom-left', 'bottom-right']

</details>

<details>

<summary>Subtitles.Position</summary>

* **Type:** `string`
* **Default value:** `bottom-center`
* **Description:** This is the position of the subtitles \['top-left', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right']

</details>

## Zone interaction

<details>

<summary>Zone</summary>

* **Type:** `table`
* **Default value:**

```lua
Zone = {
    CheckDist = 1.5,               -- This is the distance for checking if player is in the zone
    InteractKey = 'E',             -- This is the key for interacting with the zone
    HelpkeysInteractKeyName = 'E', -- This is the key name for the help keys
    Size = vec3(1.0, 1.0, 1.0),    -- This is the size of the zones
},

```

* **Description:** Configuration when not using any target system in Prison.

</details>

## Jobs

<details>

<summary>Jobs</summary>

* **Type:** `table`
* **Default value:**

```lua
Jobs = {
    ['police'] = true, 
    ['sheriff'] = true,
},
```

* **Description:** Table of jobs which are allowed to perform RCore Prison commands

</details>

## Prison Jobs

<details>

<summary>PrisonJobs</summary>

* **Type:** `table`
* **Default value:**

```lua
PrisonJobs = {
    PlayerJobCoolDown = 2,                                     -- This is the cooldown for player to get new job (default: 2 min)
    ResetJobPoolCooldown = 1,                                  -- This is the cooldown for resetting job pool (default: 1 min)
    RequiredDelivery = 5,                                      -- This is the required delivery for prisoner to be released

    TargetHighlight = false,                                   -- This is used for highlighting the target (Only for targets)
    TargetHiglightColor = { r = 50, g = 149, b = 1, a = 255 }, -- This is the color of the target highlight

    SetCustomRequiredDeliveries = true,                        -- This is used for setting custom required deliveries for each job

    -- By default using ox_lib skillCheck, can be changed to own via minigame in rcore_prison/modules/base/client/api/cl-jobs.lua

    Minigame = {
        Cooking = true,
        Janitor = true,
        CleanGround = true,
        BushTrimming = true,
    },

    Electrician = {
        EachJobLevelIncreaseDifficulty = true -- This is used for increasing difficulty for each job level
    },

    LeaveJobKey = 'G', -- This is the key for leaving the job
    DoJobKey = 'E',    -- This is the key for doing the job

    Stepper = {
        DoTask = 'SPACE', -- This is the key for doing exercises
        StopTask = 'H',   -- This is the key for stopping exercise
    },

    -- This is the list of the rewards which are going to be given to player when they finish the job(s)

    Rewards = {
        {
            type = 'ITEM',
            list = {}
        },
        {
            type = 'CREDITS',
            min = 100,
            max = 500,
        },
        {
            type = 'REDUCE_SENTENCE',
            value = 5 -- This is the value for reducing sentence time as reward (5 min)
        }
    },

    RenderInteractZoneDistance = 100.0, -- This is the distance for rendering interact zone
    InRadius = 1.5,                     -- This is the distance for checking if player is in radius

    RequiredDeliveries = {              -- This is the required deliveries for each job
        [JOBS.ELECTRICIAN] = 2,
        [JOBS.GARDENER] = 2,
        [JOBS.CLEAN_GROUND] = 1,
        [JOBS.BUSH_TRIMMING] = 3,
        [JOBS.COOK] = 1,
        [JOBS.LAUNDRY] = 3,
    }
},
```

* **Description:** Configuration for Prison Jobs

</details>

## General

<details>

<summary>DisplayPrisonMap</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for displaying prison map on the game map! (The map consumes 0.02ms to render!)

</details>

<details>

<summary>PrisonYardAnnoucement</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for announcing prisoners about the yard time!

</details>

<details>

<summary>BroadcastNewPrisoner</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for broadcasting new prisoner to all players on server.

</details>

<details>

<summary>AutoUncuffNewPrisoner</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for auto uncuffing new prisoner when they are jailed.

</details>

## Phone Booths

<details>

<summary>PhoneBooth.Enabled</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This allow to enable/disable phone booths

</details>

<details>

<summary>PhoneBooth.Lenght</summary>

* **Type:** `number`
* **Default value:** `7`
* **Description:** This is the lenght of the phone number \[7 - lb-phone]

</details>

<details>

<summary>PhoneBooth.Format</summary>

* **Type:** `{phone-format}`
* **Default value:** `{3}-{4}`
* **Description:** This is the format of the phone number \[{3}-{4}: lb-phone]

</details>

## Chairs

<details>

<summary>Chairs.Enable</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for enabling chairs system

</details>

<details>

<summary>Chairs.RaycastDistCheck</summary>

* **Type:** `number`
* **Default value:** `5`
* **Description:** This is the distance for checking if player is near the chair

</details>

<details>

<summary>Chairs.SeatDistCheck</summary>

* **Type:** `float`
* **Default value:** `1.5`
* **Description:** This is the distance for checking if player is near the chair

</details>

<details>

<summary>Chairs.DebugSeatPos</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for debugging the chair positions

</details>

<details>

<summary>Chairs.HealLayingPlayers</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for healing players when they are laying on the bed

</details>

<details>

<summary>Chairs.HealModifier</summary>

* **Type:** `float`
* **Default value:** `0.5`
* **Description:** This is the heal modifier for laying players

</details>

<details>

<summary>Chairs.HealLayingPlayersTimeCycle</summary>

* **Type:** `number`
* **Default value:** `1`
* **Description:** This is the time in minutes for healing laying players (default in 1 min)

</details>

## Prison GYM

* Supported stats resources: \[RTX\_GYM]
* Can be added in rcore\_prison/modules/base/client/client/api/cl-gym.lua

<details>

<summary>GYM.DoExerciseKey</summary>

* **Type:** `string`
* **Default value:** `SPACE`
* **Description:** This is the key for doing exercises

</details>

<details>

<summary>GYM.StopExerciseKey</summary>

* **Type:** `string`
* **Default value:** `H`
* **Description:** This is the key for stopping exercise

</details>

## UI

<details>

<summary>UI.DisableAddSentencePlayerId</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This will allow to define if AddSentence via playerId is enabled/disabled

</details>

<details>

<summary>UI.AddSentenceReasonRequired</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This will define Add Sentence - sentence reason is required

</details>

## Outfits

<details>

<summary>Outfits.RestorePlayerOutfitOnRelease</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for setting outfit on release

</details>

## Economy Item

<details>

<summary>EconomyItem</summary>

* **Type:** `string`
* **Default value:** `cigarrete`
* **Description:** This is the economy item for prison

</details>

## Prison Accounts

<details>

<summary>Accounts.Enable</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling prisoner accounts system

</details>

<details>

<summary>Accounts.DeleteAccountWhenReleased</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for deleting account when prisoner is released

</details>

## Prolog

<details>

<summary>Prolog.Enable</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling prolog system

</details>

<details>

<summary>Prolog.ResetCache</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for resetting cache when prolog is started

</details>

## COMS (Community Service)

<details>

<summary>COMS.Enable</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling coms system

</details>

<details>

<summary>COMS.RenderPerollTime</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for rendering peroll time on the screen

</details>

<details>

<summary>COMS.Blip.enable</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** Do you want to show blip on map?

</details>

<details>

<summary>COMS.Blip.sprite</summary>

* **Type:** `number`
* **Default value:** `643`
* **Description:** Sprite used for the COMS Blip

</details>

<details>

<summary>COMS.Blip.scale</summary>

* **Type:** `float`
* **Default value:** `1.0`
* **Description:** Blip scale

</details>

<details>

<summary>COMS.RenderAreaOnlyForCOMSCitizens</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for rendering area only for coms citizens.

</details>

<details>

<summary>COMS.DisableGameControls</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for disabling game controls when player is cleaning. (recommend to keep it)

</details>

<details>

<summary>COMS.InteractKey</summary>

* **Type:** `string`
* **Default value:** `E`
* **Description:** Interaction key for cleaning trash on street.

</details>

<details>

<summary>COMS.CleaningAnimTime</summary>

* **Type:** `number`
* **Default value:** `10 * 1000`
* **Description:** The duration of animation how long it will take to clean a trash on ground

</details>

<details>

<summary>COMS.RenderDistance</summary>

* **Type:** `float`
* **Default value:** `150.0`
* **Description:** This is the distance for rendering coms area

</details>

<details>

<summary>COMS.InRadius</summary>

* **Type:** `float`
* **Default value:** `100.0`
* **Description:** This is the distance for checking if player is in radius

</details>

<details>

<summary>COMS.InRadius</summary>

* **Type:** `table`
* **Default value:**

```lua
{
  'prop_rub_cardpile_05',
  'prop_rub_binbag_03',
  'prop_skid_box_06',
  'prop_rub_flotsam_01',
  'prop_rub_litter_03c',
  'prop_rub_binbag_06',
  'prop_rub_cardpile_06',
}
```

* **Description:** This is list of props which are used for the COMS area that are spawned as "trash"

</details>

<details>

<summary>COMS.Outline.color</summary>

* **Type:** `vec3`
* **Default value:** `x = 250, y = 149, z = 68`
* **Description:** This allows to define outline colorfor props

</details>

<details>

<summary>COMS.Outline.opacity</summary>

* **Type:** `number`
* **Default value:** `80`
* **Description:** Opacity of the outline

</details>

## Image paths

<details>

<summary>ImagePath</summary>

* **Type:** `table`
* **Default value:**

```lua
{
    [Inventories.OX] = 'nui://ox_inventory/web/images',
    [Inventories.QB] = 'nui://qb-inventory/html/images',
    [Inventories.LJ] = 'nui://lj-inventory/html/images',
    [Inventories.QS] = 'nui://qs-inventory/html/images',
    [Inventories.PS] = 'nui://ps-inventory/html/images',
    [Inventories.TGIANN] = 'nui://inventory_images/images',
    [Inventories.ESX] = '', -- When running es_extended the images are being loaded from rcore_prison/modules/nui/web/build/images/items
}
```

* **Description:** This is list inventory and their image paths to load images for our UI (canteen, trade with inmates..)

</details>

## Alcatraz

<details>

<summary>Alcatraz.BackToLosSantosPos</summary>

* **Type:** `vec4`
* **Default value:** `vector4(13.7, -2784.97, 2.53, 359.96)`
* **Description:** This is location where player will be returned via "Boat" when interacting with NPC on Alcatraz at boat dock.

</details>

## Canteen

<details>

<summary>Canteen.Enable</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling canteen system

</details>

<details>

<summary>Canteen.CreditItems</summary>

* **Type:** `array`
* **Default value:**

```lua
{
    { name = 'water',     price = 30, label = 'Water' }, -- You can define custom label
    { name = 'fries',     price = 7 },
    { name = 'sprunk',    price = 7 },
    { name = 'cigarrete', price = 80 },
}
```

* **Description:** This is list of items in credits store

</details>

<details>

<summary>Canteen.FreeFoodPackage</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling free food package system

</details>

<details>

<summary>Canteen.FreeFoodPackageCooldown</summary>

* **Type:** `number`
* **Default value:** `5`
* **Description:** This is the cooldown for free food package system (5 min)

</details>

<details>

<summary>Canteen.FreeFoodPackageItems</summary>

* **Type:** `array`
* **Default value:**

```lua
{
    { name = 'water',  count = 1, label = 'Water' },
    { name = 'sprunk', count = 1 },
}
```

* **Description:** This is list of items that will be gaven to player when taking free package!

</details>

## Stash

<details>

<summary>Stash.EnableStashing</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for enabling stashing system of citizen items

</details>

<details>

<summary>Stash.ReturnItemsOnRelease</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for returning items when citizen is released from prison

</details>

<details>

<summary>Stash.AntiExploit</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This will block many attempt for getting items from stash

</details>

<details>

<summary>Stash.KeepItemsState</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for keeping items when citizen is jailed into prison.

</details>

<details>

<summary>Stash.KeepItems</summary>

* **Type:** `table`
* **Default value:**

```lua
{
    ['bread'] = true,
    ['water'] = true,
    ['sludgie'] = true,
    ['money'] = true, -- Doesnt work with qs-inventory
    ['cash'] = true,  -- Doesnt work with qs-inventory
}
```

* **Description:** List of items that will be kept in players inventory when Stash.KeepItemsState is true.

</details>

## Jail

<details>

<summary>Jail.FetchClosestPlayer</summary>

* **Type:** `float`
* **Default value:** `10.0`
* **Description:** This is the distance for fetching closest player around player ./jailcp - Add Sentence

</details>

## Cigar Production

<details>

<summary>CigarProduction.RewardCooldown</summary>

* **Type:** `number`
* **Default value:** `5`
* **Description:** This is the reward cooldown for minigame (default in minutes)

</details>

<details>

<summary>CigarProduction.RewardMin</summary>

* **Type:** `number`
* **Default value:** `1`
* **Description:** This is the reward amount for minigame (min)

</details>

<details>

<summary>CigarProduction.RewardMax</summary>

* **Type:** `number`
* **Default value:** `10`
* **Description:** This is the reward amount for minigame (max)

</details>

<details>

<summary>CigarProduction.RewardMax</summary>

* **Type:** `string`
* **Default value:** `cigarrete`
* **Description:** This is the reward item for minigame when finished

</details>

<details>

<summary>Minigame settings</summary>

* **Type:** `table`
* **Default value:**

```lua
{
    AnimDict = 'anim@amb@business@coc@coc_unpack_cut_left@', -- Animation dictionary for minigame
    AnimName = 'coke_cut_v5_coccutter',                      -- Animation name for minigame

    Steps = 5,                                               -- How many blocks script is going to generate?
    MoveStep = 0.09,                                         -- Speed of arrowKeys generation block (> 0.02!!)
    Tolerance = 0.025,                                       -- What tolenrace should script ignore?
    TimeAcc = 0.3,                                           -- Calc behind keyPress minigame

    Keys = { 'W', 'S', 'A', 'D' },                           -- Option to define own keys for minigame, no need for change! :)

    -- KEY_LABEL => KEY_VALUE
    -- https://docs.fivem.net/docs/game-references/controls/

    -- TRAVERSE MAP

    -- If you want to use different Keys layout, you need to define key in TraverseMap

    -- LEFT SIDE -> KEY VALUE
    -- RIGHT SIDE -> STRING KEY

    TraverseMap = {
        [20] = "Z",
        [32] = 'W',
        [33] = 'S',
        [34] = 'A',
        [35] = 'D',
        [44] = "Q",
    },

    Keybinds = {
        ['W'] = 32,
        ['S'] = 33,
        ['A'] = 34,
        ['D'] = 35,
        ['ARROW_UP'] = 172,
        ['ARROW_DOWN'] = 173,
        ['LEFT_ARROW'] = 174,
        ['RIGHT_ARROW'] = 175,
    }
},
```

* **Description:** This is list inventory and their image paths to load images for our UI (canteen, trade with inmates..)

</details>

## NPC Settings

<details>

<summary>EnableSpawnNPCInsidePrison</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Description:** This is used for enabling spawn NPC inside the prison

</details>

## Teleport

<details>

<summary>Teleport.WhenReleasedTeleportPrisonerInFrontOfPrison</summary>

* **Type:** `boolean`
* **Default value:** `true`
* **Description:** This is used for teleporting prisoner in front of the prison when released

</details>
