# Setup and Items

This page covers the setup parts you should finish before editing jobs: dependencies, `server.cfg` order, database behavior, localization, item installation, image path setup, and optional helper resources.

## Required Dependencies

* [oxmysql](https://github.com/overextended/oxmysql/releases)
* [ox\_lib](https://github.com/overextended/ox_lib/releases)
* `0r_lib`
* Your framework: `es_extended`, `qb-core`, or `qbx_core`

## Optional Resources Used By Some Jobs

These are not hard dependencies in `fxmanifest.lua`, but the real source references them in some jobs:

* `object_gizmo`
* `3fe_woodbox`

Example:

* Moonshine uses `object_gizmo` if you keep the still placement flow
* Some source checks in `gun_smuggling` and `moonshine` look for `3fe_woodbox`

## Recommended server.cfg Start Order

```lua
start oxmysql
start ox_lib
start framework -- es_extended, qb-core, or qbx_core
start object_gizmo -- optional
-- other resources
start 0r_lib
start 0r-illegalpack
```

## Database

You do not need to import SQL manually for this script.

The real resource creates the profile table automatically in `modules/mysql/server.lua`:

```sql
CREATE TABLE `0resmon_illegal_profiles`
```

## Localization

This script uses `ox_lib` locale files.

Set your server language in `server.cfg`:

```cfg
set ox:locale "en"
```

Then make sure the matching file exists inside:

```lua
locales/
```

## Required Menu Item

If you keep item-based menu access enabled, this item must exist:

* `illegal_tablet`

The real source defines this under:

```lua
Config.IllegalMenu.openWithItem.itemName
```

## Ready To Paste Item Tables

If you want to install the items fast, use the blocks below directly in your inventory files.

{% hint style="warning" %}
Pay attention to weapon naming. The source uses `weapon_digiscanner` in the market list, while one job config also references `WEAPON_DIGISCANNER`. Your inventory and weapon integration must use the correct format for your framework.
{% endhint %}

## OX Inventory

{% tabs fullWidth="false" %}
{% tab title="weapons.lua" %}

```lua
['WEAPON_DIGISCANNER'] = {
    label = 'Digiscanner',
    weight = 1000,
    durability = 0.0,
},
['WEAPON_CROWBAR'] = {
    label = 'Crowbar',
    weight = 2500,
    durability = 0.1,
},
```

{% endtab %}

{% tab title="items.lua" %}

```lua
--- # start 0r-illegalpack
['illegal_tablet'] = { label = 'Illegal Tablet', weight = 1000, stack = false },
['lockpick'] = { label = 'Lockpick', weight = 0, stack = true },
['powdered_milk'] = { label = 'Powdered Milk', weight = 100, stack = true },
['money_sheet'] = { label = 'Money Sheet', weight = 100, stack = true },
['anchor'] = { label = 'Anchor', weight = 100, stack = true },
['plant_spray'] = { label = 'Plant Spray', weight = 100, stack = true },
['ammonia'] = { label = 'Ammonia', weight = 100, stack = true },
['sacid'] = { label = 'Sacid', weight = 100, stack = true },
['atm_hack_device'] = { label = 'ATM Hack Device', weight = 100, stack = true },
['blank_card'] = { label = 'Blank Card', weight = 100, stack = true },
['moonshine_still'] = { label = 'Moonshine Still', weight = 1000, stack = true },
['moonshine_pack'] = { label = 'Moonshine Pack', weight = 100, stack = true },
['stolen_bag'] = { label = 'Stolen Bag', weight = 1000, stack = true },
['scrapmetal'] = { label = 'Scrap Metal', weight = 100, stack = true },
['plastic'] = { label = 'Plastic', weight = 100, stack = true },
['glass'] = { label = 'Glass', weight = 100, stack = true },
['copperwire'] = { label = 'Copper Wire', weight = 100, stack = true },
['bandage'] = { label = 'Bandage', weight = 100, stack = true },
['painkiller'] = { label = 'Painkiller', weight = 100, stack = true },
['medkit'] = { label = 'Medkit', weight = 100, stack = true },
['adrenaline'] = { label = 'Adrenaline', weight = 100, stack = true },
['ammo-9'] = { label = '9mm Ammo', weight = 100, stack = true },
['unpacked_coke'] = { label = 'Unpacked Coke', weight = 1000, stack = true },
['cutted_coke'] = { label = 'Cutted Coke', weight = 1000, stack = true },
['packed_coke'] = { label = 'Packed Coke', weight = 1000, stack = true },
['uncutted_money'] = { label = 'Uncutted Money', weight = 100, stack = true },
['cutted_money'] = { label = 'Cutted Money', weight = 100, stack = true },
['fake_credit_card'] = { label = 'Fake Credit Card', weight = 100, stack = true },
['cooked_meth'] = { label = 'Cooked Meth', weight = 100, stack = true },
['breaked_meth'] = { label = 'Breaked Meth', weight = 100, stack = true },
['packed_meth'] = { label = 'Packed Meth', weight = 100, stack = true },
['old_corn'] = { label = 'Old Corn', weight = 100, stack = true },
['old_fruit'] = { label = 'Old Fruit', weight = 100, stack = true },
['tap_water'] = { label = 'Tap Water', weight = 100, stack = true },
['crushed_ingredients'] = { label = 'Crushed Ingredients', weight = 100, stack = true },
['blended_ingredients'] = { label = 'Blended Ingredients', weight = 100, stack = true },
['moonshine'] = { label = 'Moonshine', weight = 100, stack = true },
['unpacked_weed'] = { label = 'Unpacked Weed', weight = 100, stack = true },
['packed_weed'] = { label = 'Packed Weed', weight = 1000, stack = true },
['rolled_weed'] = { label = 'Rolled Weed', weight = 100, stack = true },
--- # end 0r-illegalpack
```

{% endtab %}
{% endtabs %}

## QB Core

{% tabs fullWidth="false" %}
{% tab title="shared/weapons.lua" %}

```lua
[`WEAPON_DIGISCANNER`] = { name = 'weapon_digiscanner', label = 'Digiscanner', weapontype = 'Miscellaneous', ammotype = nil, damagereason = 'Miscellaneous' },
```

{% endtab %}

{% tab title="shared/items.lua" %}

```lua
illegal_tablet      = { name = 'illegal_tablet', label = 'Illegal Tablet', weight = 100, type = 'item', image = 'illegal_tablet.png', unique = false, useable = true, shouldClose = false, description = 'Illegal Tablet' },
lockpick            = { name = 'lockpick', label = 'Lockpick', weight = 100, type = 'item', image = 'lockpick.png', unique = false, useable = false, shouldClose = false, description = 'Lockpick' },
powdered_milk       = { name = 'powdered_milk', label = 'Powdered Milk', weight = 100, type = 'item', image = 'powdered_milk.png', unique = false, useable = false, shouldClose = false, description = 'Powdered Milk' },
money_sheet         = { name = 'money_sheet', label = 'Money Sheet', weight = 100, type = 'item', image = 'money_sheet.png', unique = false, useable = false, shouldClose = false, description = 'Money Sheet' },
anchor              = { name = 'anchor', label = 'Anchor', weight = 100, type = 'item', image = 'anchor.png', unique = false, useable = false, shouldClose = false, description = 'Anchor' },
plant_spray         = { name = 'plant_spray', label = 'Plant Spray', weight = 100, type = 'item', image = 'plant_spray.png', unique = false, useable = false, shouldClose = false, description = 'Plant Spray' },
ammonia             = { name = 'ammonia', label = 'Ammonia', weight = 100, type = 'item', image = 'ammonia.png', unique = false, useable = false, shouldClose = false, description = 'Ammonia' },
sacid               = { name = 'sacid', label = 'Sacid', weight = 100, type = 'item', image = 'sacid.png', unique = false, useable = false, shouldClose = false, description = 'Sacid' },
atm_hack_device     = { name = 'atm_hack_device', label = 'ATM Hack Device', weight = 100, type = 'item', image = 'atm_hack_device.png', unique = false, useable = false, shouldClose = false, description = 'ATM Hack Device' },
blank_card          = { name = 'blank_card', label = 'Blank Card', weight = 100, type = 'item', image = 'blank_card.png', unique = false, useable = false, shouldClose = false, description = 'Blank Card' },
moonshine_still     = { name = 'moonshine_still', label = 'Moonshine Still', weight = 100, type = 'item', image = 'moonshine_still.png', unique = false, useable = false, shouldClose = false, description = 'Moonshine Still' },
moonshine_pack      = { name = 'moonshine_pack', label = 'Moonshine Pack', weight = 100, type = 'item', image = 'moonshine_pack.png', unique = false, useable = false, shouldClose = false, description = 'Moonshine Pack' },
stolen_bag          = { name = 'stolen_bag', label = 'Stolen Bag', weight = 100, type = 'item', image = 'stolen_bag.png', unique = false, useable = false, shouldClose = false, description = 'Stolen Bag' },
scrapmetal          = { name = 'scrapmetal', label = 'Scrap Metal', weight = 100, type = 'item', image = 'scrapmetal.png', unique = false, useable = false, shouldClose = false, description = 'Scrap Metal' },
plastic             = { name = 'plastic', label = 'Plastic', weight = 100, type = 'item', image = 'plastic.png', unique = false, useable = false, shouldClose = false, description = 'Plastic' },
glass               = { name = 'glass', label = 'Glass', weight = 100, type = 'item', image = 'glass.png', unique = false, useable = false, shouldClose = false, description = 'Glass' },
copperwire          = { name = 'copperwire', label = 'Copper Wire', weight = 100, type = 'item', image = 'copperwire.png', unique = false, useable = false, shouldClose = false, description = 'Copper Wire' },
bandage             = { name = 'bandage', label = 'Bandage', weight = 100, type = 'item', image = 'bandage.png', unique = false, useable = false, shouldClose = false, description = 'Bandage' },
painkiller          = { name = 'painkiller', label = 'Painkiller', weight = 100, type = 'item', image = 'painkiller.png', unique = false, useable = false, shouldClose = false, description = 'Painkiller' },
medkit              = { name = 'medkit', label = 'Medkit', weight = 100, type = 'item', image = 'medkit.png', unique = false, useable = false, shouldClose = false, description = 'Medkit' },
adrenaline          = { name = 'adrenaline', label = 'Adrenaline', weight = 100, type = 'item', image = 'adrenaline.png', unique = false, useable = false, shouldClose = false, description = 'Adrenaline' },
['ammo-9']          = { name = 'ammo-9', label = '9mm Ammo', weight = 100, type = 'item', image = 'ammo-9.png', unique = false, useable = false, shouldClose = false, description = '9mm Ammo' },
unpacked_coke       = { name = 'unpacked_coke', label = 'Unpacked Coke', weight = 100, type = 'item', image = 'unpacked_coke.png', unique = false, useable = false, shouldClose = false, description = 'Unpacked Coke' },
cutted_coke         = { name = 'cutted_coke', label = 'Cutted Coke', weight = 100, type = 'item', image = 'cutted_coke.png', unique = false, useable = false, shouldClose = false, description = 'Cutted Coke' },
packed_coke         = { name = 'packed_coke', label = 'Packed Coke', weight = 100, type = 'item', image = 'packed_coke.png', unique = false, useable = false, shouldClose = false, description = 'Packed Coke' },
uncutted_money      = { name = 'uncutted_money', label = 'Uncutted Money', weight = 100, type = 'item', image = 'uncutted_money.png', unique = false, useable = false, shouldClose = false, description = 'Uncutted Money' },
cutted_money        = { name = 'cutted_money', label = 'Cutted Money', weight = 100, type = 'item', image = 'cutted_money.png', unique = false, useable = false, shouldClose = false, description = 'Cutted Money' },
fake_credit_card    = { name = 'fake_credit_card', label = 'Fake Credit Card', weight = 100, type = 'item', image = 'fake_credit_card.png', unique = false, useable = false, shouldClose = false, description = 'Fake Credit Card' },
cooked_meth         = { name = 'cooked_meth', label = 'Cooked Meth', weight = 100, type = 'item', image = 'cooked_meth.png', unique = false, useable = false, shouldClose = false, description = 'Cooked Meth' },
breaked_meth        = { name = 'breaked_meth', label = 'Breaked Meth', weight = 100, type = 'item', image = 'breaked_meth.png', unique = false, useable = false, shouldClose = false, description = 'Breaked Meth' },
packed_meth         = { name = 'packed_meth', label = 'Packed Meth', weight = 100, type = 'item', image = 'packed_meth.png', unique = false, useable = false, shouldClose = false, description = 'Packed Meth' },
old_corn            = { name = 'old_corn', label = 'Old Corn', weight = 100, type = 'item', image = 'old_corn.png', unique = false, useable = false, shouldClose = false, description = 'Old Corn' },
old_fruit           = { name = 'old_fruit', label = 'Old Fruit', weight = 100, type = 'item', image = 'old_fruit.png', unique = false, useable = false, shouldClose = false, description = 'Old Fruit' },
tap_water           = { name = 'tap_water', label = 'Tap Water', weight = 100, type = 'item', image = 'tap_water.png', unique = false, useable = false, shouldClose = false, description = 'Tap Water' },
crushed_ingredients = { name = 'crushed_ingredients', label = 'Crushed Ingredients', weight = 100, type = 'item', image = 'crushed_ingredients.png', unique = false, useable = false, shouldClose = false, description = 'Crushed Ingredients' },
blended_ingredients = { name = 'blended_ingredients', label = 'Blended Ingredients', weight = 100, type = 'item', image = 'blended_ingredients.png', unique = false, useable = false, shouldClose = false, description = 'Blended Ingredients' },
moonshine           = { name = 'moonshine', label = 'Moonshine', weight = 100, type = 'item', image = 'moonshine.png', unique = false, useable = false, shouldClose = false, description = 'Moonshine' },
unpacked_weed       = { name = 'unpacked_weed', label = 'Unpacked Weed', weight = 100, type = 'item', image = 'unpacked_weed.png', unique = false, useable = false, shouldClose = false, description = 'Unpacked Weed' },
packed_weed         = { name = 'packed_weed', label = 'Packed Weed', weight = 100, type = 'item', image = 'packed_weed.png', unique = false, useable = false, shouldClose = false, description = 'Packed Weed' },
rolled_weed         = { name = 'rolled_weed', label = 'Rolled Weed', weight = 100, type = 'item', image = 'rolled_weed.png', unique = false, useable = false, shouldClose = false, description = 'Rolled Weed' },
```

{% endtab %}
{% endtabs %}

Item images should be copied into the folder used by your inventory, and the path should match:

```lua
Config.InventoryImagesFolder
```

## Final Checklist

* `0r_lib` starts without errors
* `0r-illegalpack` starts without errors
* `illegal_tablet` exists if `openWithItem.active = true`
* Your market items exist in the inventory system
* Your item images load from the folder set in `Config.InventoryImagesFolder`
* The profile table is created automatically in MySQL
