> 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_police/index/index.md).

# Client

## Events (General)

### Job Menu

* Open job menu (F6) via event.
* **Event Name:** `rcore_police:client:api:openJobMenu`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:openJobMenu")
```

### Cuff

* Cuffs the closest player to the initiator.
* **Event Name:** `rcore_police:client:api:Cuff`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Cuff")
```

### Escort

* Escort the closest player to the initiator.
* **Event Name:** `rcore_police:client:api:Escort`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Escort")
```

### Licenses

* Allows to show Licenses of closest player to the initiator.
* **Event Name:** `rcore_police:client:api:Licenses`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Licenses")
```

### InVehicle

* Allows to put closest player to closest vehicle seat.
* **Event Name:** `rcore_police:client:api:InVehicle`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:InVehicle")
```

### FromVehicle

* Allows to get closest player from closest vehicle seat.
* **Event Name:** `rcore_police:client:api:FromVehicle`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:FromVehicle")
```

### Search

* Allows to search closest player if supported inventory is running
* **Event Name:** `rcore_police:client:api:Search`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Search")
```

### Jail

* Allows to open Jail dialog for closest player if supported jail is running
* **Event Name:** `rcore_police:client:api:Jail`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Jail")
```

### Emergency

* Allows to call panic button
* **Event Name:** `rcore_police:client:api:Emergency`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Emergency")
```

### Fine

* Allows to Fine closest player to you
* **Event Name:** `rcore_police:client:api:Fine`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Fine")
```

### Impound

* Allows to Impound closest vehicle to you
* **Event Name:** `rcore_police:client:api:Impound`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Impound")
```

### UnlockVehicle

* Allows to UnlockVehicle closest vehicle to you
* **Event Name:** `rcore_police:client:api:UnlockVehicle`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:UnlockVehicle")
```

### VehicleInfo

* Allows to get VehicleInfo of closest vehicle to you
* **Event Name:** `rcore_police:client:api:VehicleInfo`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:VehicleInfo")
```

### Radar

* Allows to get in editor mode and place speed camera.
* **Event Name:** `rcore_police:client:api:Radar`
* **Example:**

```lua
TriggerEvent("rcore_police:client:api:Radar")
```

### registerHook

* Registers a **custom hook** to define logic that affects tackling behavior in the `rcore_police` system.

<details>

<summary>rcore_police:tackle:registerHook</summary>

* **Type:** `boolean`
* **Default value:** `false`
* **Example:**

```lua
local function PreventTackleInWater(ctx, callback)
    -- Example condition: could check if the initiator is swimming
    callback(true) -- allow tackle
end

TriggerEvent("rcore_police:tackle:registerHook", "PreventInWater", PreventTackleInWater)
```

</details>

## Exports (States)

### IsPlayerCuffed

* Used for checking if player is cuffed

<details>

<summary>IsPlayerCuffed</summary>

* **Type:** `boolean`
* **Default value:** `false`

**Check initiator if cuffed**

* **Params:**
  * None
* **Returns:**
  * `boolean`: `true` if player is cuffed, otherwise `false`.
* **Example:**

```lua
-- return: boolean
local isCuffed  = exports['rcore_police']:IsPlayerCuffed()

if isCuffed then
    print('Player is cuffed')
else
    print('Player is not cuffed or an error occurred:', statusOrErr)
end
```

**Check any player on client**

* **Params:**

  | Name       | Type     | Description                                        |
  | ---------- | -------- | -------------------------------------------------- |
  | `playerId` | `number` | ID of player which you want to get state of cuffed |
* **Returns:**
  * `boolean`: `true` if player is cuffed, otherwise `false`.
* **Example:**

```lua
-- playerId: number
-- return: boolean
local isCuffed = exports['rcore_police']:IsPlayerCuffed(playerId)

if isCuffed then
    print('Player is cuffed')
else
    print('Player is not cuffed or an error occurred:', statusOrErr)
end
```

</details>

### IsPlayerEscorted

* Used for checking if player is escorted

<details>

<summary>IsPlayerEscorted</summary>

* **Type:** `boolean`
* **Default value:** `false`

**Check initiator if escorted**

* **Params:**
  * None
* **Returns:**
  * `boolean`: `true` if player is escorted, otherwise `false`.
* **Example:**

```lua
-- return: boolean
local isEscorted = exports['rcore_police']:IsPlayerEscorted()

if isEscorted then
    print('Player is escorted')
else
    print('Player is not escorted')
end
```

**Check any player on client**

* **Params:**

  | Name       | Type     | Description                                          |
  | ---------- | -------- | ---------------------------------------------------- |
  | `playerId` | `number` | ID of player which you want to get state of escorted |
* **Returns:**
  * `boolean`: `true` if player is escorted, otherwise `false`.
* **Example:**

```lua

-- playerId: number
-- return: boolean
local isEscorted  = exports['rcore_police']:IsPlayerEscorted(playerId)

if isEscorted then
    print('Player is escorted')
else
    print('Player is not escorted')
end
```

</details>

### IsPlayerHeadBagged

<details>

<summary>IsPlayerHeadBagged</summary>

* **Type:** `boolean`
* **Default value:** `false`

**Check initiator if IsPlayerHeadBagged**

* **Params:**
  * None
* **Returns:**
  * `boolean`: `true` if player is IsPlayerHeadBagged, otherwise `false`.
* **Example:**

```lua
-- return: boolean
local isHeadBagged = exports['rcore_police']:IsPlayerHeadBagged()

if isHeadBagged then
    print('Player is IsPlayerHeadBagged')
else
    print('Player is not IsPlayerHeadBagged')
end
```

**Check any player on client**

* **Params:**

  | Name       | Type     | Description                                                    |
  | ---------- | -------- | -------------------------------------------------------------- |
  | `playerId` | `number` | ID of player which you want to get state of IsPlayerHeadBagged |
* **Returns:**
  * `boolean`: `true` if player is IsPlayerHeadBagged, otherwise `false`.
* **Example:**

```lua

-- playerId: number
-- return: boolean
local isHeadBagged = exports['rcore_police']:IsPlayerHeadBagged(playerId)

if isHeadBagged then
    print('Player is IsPlayerHeadBagged')
else
    print('Player is not IsPlayerHeadBagged')
end
```

</details>

## Exports (General)

### GetPoliceOnline

* Used for getting all police officers online

<details>

<summary>GetPoliceOnline</summary>

* **Type:** `number`
* **Default value::** `0`
* **Returns:**
  * `number`: Number of officers online, by default returns 0 when not any online
* **Example:**

```lua
-- return: number
local policeOnline = exports['rcore_police']:GetPoliceOnline()

if policeOnline then
    print('Online units: ', retval)
end
```

</details>

## Wheel Clamp

### PlaceWheelClamp

* Function for placing wheel clamp on closest vehicle wheel bone.

<details>

<summary>PlaceWheelClamp</summary>

* **Type:** `void`
* **Returns:** nothing
* **Example:**

```lua
exports["rcore_police"]:PlaceWheelClamp()
```

</details>

### RemoveWheelClamp

* Function for removing wheel clamp from closest vehicle wheel bone.

<details>

<summary>RemoveWheelClamp</summary>

* **Type:** `void`
* **Returns:** nothing
* **Example:**

```lua
exports["rcore_police"]:RemoveWheelClamp()
```

</details>

### DoesVehicleHaveWheelClamp

* Function for checking if a vehicle has a wheel clamp.
* By default, it automatically checks the closest vehicle.
* An `entityId` can be passed optionally.
* Useful for disabling interaction with vehicles when clamped.

<details>

<summary>DoesVehicleHaveWheelClamp</summary>

* **Type:** `(boolean, string)`
* **Returns:**
  * `boolean retval` → `true` if the vehicle has a wheel clamp, `false` otherwise
  * `string statusCode` → status/result message
* **Example:**

```lua
---@return boolean retval     -- true if the vehicle has a wheel clamp, false otherwise
---@return string statusCode  -- status/result message

local vehicleId = yourVehicleId -- Fully optional and not required, it checks closest vehicle near player which initiate the export.
local retval, statusCode = exports["rcore_police"]:DoesVehicleHaveWheelClamp(vehicleId)

if retval then
    print("Vehicle is clamped: " .. statusCode)
else
    print("Vehicle is free: " .. statusCode)
end
```

</details>

### IsPlayerDead

> ⚠️ **Experimental:** This export is **experimental** and is not guaranteed to work. It is used internally by rcore\_police and **no support is provided** for external usage.

<details>

<summary>IsPlayerDead</summary>

* **Type:** `(boolean)`
* **Returns:**
  * `boolean`
* **Example:**

```lua
---@return boolean retval     -- (dead: yes/no)

local playerId = targetId -- If not provided it checks the player which invokes the export (yourself).
local retval = exports["rcore_police"]:IsPlayerDead(targetId)
```

</details>

### IsPlayerHandsup

<details>

<summary>IsPlayerHandsup</summary>

* **Type:** `(boolean)`
* **Returns:**
  * `boolean`
* **Example:**

```lua
---@return boolean retval     -- (playerHandsUp: yes/no)

local playerId = targetId -- If not provided it checks the player which invokes the export (yourself).
local retval = exports["rcore_police"]:IsPlayerHandsup(targetId)
```

</details>

### OpenInvoiceMenu

<details>

<summary>OpenInvoiceMenu</summary>

* **Type:** `(boolean)`
* **Returns:**
  * `boolean`
* **Example:**

```lua
---@return boolean retval     -- (open menu: yes/no)
local retval = exports["rcore_police"]:OpenInvoiceMenu()
```

</details>
