> For the complete documentation index, see [llms.txt](https://fantasy-scripts.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fantasy-scripts.gitbook.io/docs/police-system/items.md).

# Items

## Items to add before you use fs-police

Officers use 15 items of fs-police's own: handcuffs, test kits, the PD camera, barriers and evidence bags. Your inventory has to know them, or the armory cannot hand them over and officers cannot use them.

The pictures are in `docs/images/` (100 x 100, the same look as the NoPixel V inventory). Copy them into your inventory's picture folder:

| Inventory     | Picture folder              |
| ------------- | --------------------------- |
| ox\_inventory | `ox_inventory/web/images/`  |
| qb-inventory  | `qb-inventory/html/images/` |

**If an item is already in your list, do not add it twice.** Lua keeps the last one it reads and quietly ignores the first, so you would end up editing a line that does nothing.

Skip to whichever inventory you run.

***

### 1a. ox\_inventory (recommended)

Open `ox_inventory/data/items.lua` and paste this inside the list, above the closing `}` at the bottom of the file.

```lua
    -- ── fs-police ───────────────────────────────────────────────────────
    ['handcuffs'] = {
        label = 'Handcuffs',
        weight = 300,
        description = 'Needed to cuff somebody; you get them back when you uncuff.',
    },
    ['ankle_bracelet'] = {
        label = 'Ankle Bracelet',
        weight = 250,
        description = 'Tracks the wearer. Shows on "Check Bracelets".',
    },
    ['evidence_kit'] = {
        label = 'Evidence Kit',
        weight = 600,
        description = 'Draws DNA at booking, bags evidence at a scene and lifts fingerprints.',
    },
    ['gsr_kit'] = {
        label = 'GSR Test Kit',
        weight = 200,
        description = "Tests a person's hands for gunshot residue.",
    },
    ['pd_camera'] = {
        label = 'PD Camera',
        weight = 900,
        stack = false,
        close = true,
        description = 'Photos go to the MDT gallery; mugshots at the booking wall.',
    },
    ['spikestrip'] = {
        label = 'Spike Strip',
        weight = 3000,
        close = true,
        description = 'Lay it across the road. Pick it up again with [E].',
    },
    ['police_barrier'] = { label = 'Police Barrier', weight = 5000, close = true },
    ['police_barrier2'] = { label = 'Road Works Barrier', weight = 5000, close = true },
    ['cone_barrier'] = { label = 'Traffic Cone', weight = 1000, close = true },
    ['concrete_barrier'] = { label = 'Concrete Barrier', weight = 15000, close = true },
    ['concrete_barrier2'] = { label = 'Concrete Block', weight = 12000, close = true },
    ['water_barrier'] = { label = 'Water Barrier', weight = 6000, close = true },
    ['evidence_bag'] = {
        label = 'Evidence Bag',
        weight = 50,
        stack = false,
        description = 'Sealed evidence from a scene. Take it to the Forensic Lab at the station.',
    },
    ['evidence_storage'] = {
        label = 'Evidence Storage',
        weight = 500,
        stack = false,
        close = true,
        description = 'Holds 10 evidence bags.',
    },
    ['evidence_case'] = {
        label = 'Large Evidence Case',
        weight = 1500,
        stack = false,
        close = true,
        description = 'Holds 30 evidence bags.',
    },
```

#### The two evidence cases

Evidence Storage and the Large Evidence Case open like a small bag and only take evidence bags. A recent ox\_inventory lets fs-police set that up by itself. If your cases open as an ordinary item instead, add this to `ox_inventory/modules/items/containers.lua`, next to the `paperbag` lines:

```lua
setContainerProperties('evidence_storage', {
    slots = 10,
    maxWeight = 1000,
    whitelist = { 'evidence_bag' }
})

setContainerProperties('evidence_case', {
    slots = 30,
    maxWeight = 3000,
    whitelist = { 'evidence_bag' }
})
```

#### Already in ox\_inventory

The armory also sells guns, ammo, `armour`, `bandage` and `radio`. ox\_inventory has all of these already; nothing to add.

***

### 1b. QBCore without ox\_inventory

Open `qb-core/shared/items.lua` and paste this inside the list:

```lua
    handcuffs         = { name = 'handcuffs', label = 'Handcuffs', weight = 300, type = 'item', image = 'handcuffs.png', unique = false, useable = false, shouldClose = true, description = 'Needed to cuff somebody' },
    ankle_bracelet    = { name = 'ankle_bracelet', label = 'Ankle Bracelet', weight = 250, type = 'item', image = 'ankle_bracelet.png', unique = false, useable = false, shouldClose = true, description = 'Tracks the wearer' },
    evidence_kit      = { name = 'evidence_kit', label = 'Evidence Kit', weight = 600, type = 'item', image = 'evidence_kit.png', unique = false, useable = false, shouldClose = true, description = 'Draws DNA, bags evidence, lifts prints' },
    gsr_kit           = { name = 'gsr_kit', label = 'GSR Test Kit', weight = 200, type = 'item', image = 'gsr_kit.png', unique = false, useable = false, shouldClose = true, description = 'Tests hands for gunshot residue' },
    pd_camera         = { name = 'pd_camera', label = 'PD Camera', weight = 900, type = 'item', image = 'pd_camera.png', unique = true, useable = true, shouldClose = true, description = 'Photos for the MDT gallery' },
    spikestrip        = { name = 'spikestrip', label = 'Spike Strip', weight = 3000, type = 'item', image = 'spikestrip.png', unique = false, useable = true, shouldClose = true, description = 'Lay it across the road' },
    police_barrier    = { name = 'police_barrier', label = 'Police Barrier', weight = 5000, type = 'item', image = 'police_barrier.png', unique = false, useable = true, shouldClose = true, description = '' },
    police_barrier2   = { name = 'police_barrier2', label = 'Road Works Barrier', weight = 5000, type = 'item', image = 'police_barrier2.png', unique = false, useable = true, shouldClose = true, description = '' },
    cone_barrier      = { name = 'cone_barrier', label = 'Traffic Cone', weight = 1000, type = 'item', image = 'cone_barrier.png', unique = false, useable = true, shouldClose = true, description = '' },
    concrete_barrier  = { name = 'concrete_barrier', label = 'Concrete Barrier', weight = 15000, type = 'item', image = 'concrete_barrier.png', unique = false, useable = true, shouldClose = true, description = '' },
    concrete_barrier2 = { name = 'concrete_barrier2', label = 'Concrete Block', weight = 12000, type = 'item', image = 'concrete_barrier2.png', unique = false, useable = true, shouldClose = true, description = '' },
    water_barrier     = { name = 'water_barrier', label = 'Water Barrier', weight = 6000, type = 'item', image = 'water_barrier.png', unique = false, useable = true, shouldClose = true, description = '' },
```

Leave out the three evidence bag items: without ox\_inventory there are no evidence bags, and picking evidence up files its lab report straight away.

**The armory's item names are ox\_inventory's.** On qb-inventory change the ammo in `config/armory.lua` to QBCore's names (`ammo-9` becomes `pistol_ammo`, `ammo-rifle` becomes `rifle_ammo`, and so on), and `armour` to `armor`.

***

### 1c. ESX without ox\_inventory

Run this once in your database (HeidiSQL, phpMyAdmin...):

```sql
INSERT IGNORE INTO `items` (`name`, `label`, `weight`) VALUES
    ('handcuffs', 'Handcuffs', 1),
    ('ankle_bracelet', 'Ankle Bracelet', 1),
    ('evidence_kit', 'Evidence Kit', 1),
    ('gsr_kit', 'GSR Test Kit', 1),
    ('pd_camera', 'PD Camera', 1),
    ('spikestrip', 'Spike Strip', 3),
    ('police_barrier', 'Police Barrier', 5),
    ('police_barrier2', 'Road Works Barrier', 5),
    ('cone_barrier', 'Traffic Cone', 1),
    ('concrete_barrier', 'Concrete Barrier', 15),
    ('concrete_barrier2', 'Concrete Block', 12),
    ('water_barrier', 'Water Barrier', 6);
```

ESX without ox\_inventory has no pictures and no evidence bags. Most ESX servers today run ox\_inventory, and fs-police is at its best with it.

***

### 2. Don't want officers to need an item?

Every item fs-police asks for can be switched off by setting it to `''`:

| Setting              | File                      | Item                                           |
| -------------------- | ------------------------- | ---------------------------------------------- |
| `cuffItem`           | `config/interactions.lua` | handcuffs                                      |
| `gsrItem`            | `config/interactions.lua` | GSR test kit                                   |
| `dnaItem`            | `config/interactions.lua` | evidence kit, at booking                       |
| `braceletItem`       | `config/interactions.lua` | ankle bracelet                                 |
| `Config.Camera.item` | `config/interactions.lua` | PD camera (it is then in the radial menu only) |
| `kitItem`            | `config/evidence.lua`     | evidence kit, at a scene                       |
| `item`               | `config/radio.lua`        | radio                                          |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://fantasy-scripts.gitbook.io/docs/police-system/items.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
