# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.rcore.cz/paid-resources/rcore_prison/configurations/config.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
