# Setup and Items

This page covers the setup parts you should finish before editing benches or recipes: dependencies, `server.cfg` order, database behavior, localization, inventory items, image paths, and the optional camp fire object note.

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

## Recommended server.cfg Start Order

```lua
start oxmysql
start ox_lib
start framework -- es_extended, qb-core, or qbx_core
-- other resources
start 0r_lib
start 0r-craft-v2
```

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

## Localization

This script follows the server locale from `ox_lib`.

Set your server language in `server.cfg`:

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

Then make sure the matching file exists inside:

```lua
locales/
```

## Camp Fire Object Note

`3fe_campfire` is not listed as a hard dependency in `fxmanifest.lua`.

However, the default bench config includes a Camp Fire bench with:

```lua
objectModel = '3fe_beach_fire'
```

That means you have two valid choices:

* keep that bench only if your server already has that object available
* disable or replace the Camp Fire bench in `escrow/bench/config.lua`

## Ready To Paste Item Tables

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

These blocks focus on the default craft ingredients, food outputs, and attachment items used by the recipe and component config.

Weapon outputs such as `WEAPON_ASSAULTRIFLE`, `WEAPON_PISTOL`, `WEAPON_KNIFE`, and similar names are normal weapon entries and should already exist in the weapon system used by your server.

## OX Inventory

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

```lua
--- # start 0r-craft-v2
['scrapmetal'] = { label = 'Scrap Metal', weight = 100, stack = true },
['iron'] = { label = 'Iron', weight = 100, stack = true },
['screwdriver'] = { label = 'Screwdriver', weight = 100, stack = true },
['carbonfiber'] = { label = 'Carbon Fiber', weight = 100, stack = true },
['scope_lens'] = { label = 'Scope Lens', weight = 100, stack = true },
['steel'] = { label = 'Steel', weight = 100, stack = true },
['screws'] = { label = 'Screws', weight = 100, stack = true },
['plastic'] = { label = 'Plastic', weight = 100, stack = true },
['triggerkit'] = { label = 'Trigger Kit', weight = 100, stack = true },
['ducttape'] = { label = 'Tape', weight = 100, stack = true },
['wood'] = { label = 'Wood', weight = 100, stack = true },
['emptybottle'] = { label = 'Empty Bottle', weight = 100, stack = true },
['alcohol'] = { label = 'Alcohol', weight = 100, stack = true },
['cloth'] = { label = 'Cloth', weight = 100, stack = true },
['gunoil'] = { label = 'Gun Oil', weight = 100, stack = true },
['wrench'] = { label = 'Wrench', weight = 100, stack = true },
['raw_meat'] = { label = 'Raw Meat', weight = 100, stack = true },
['salt'] = { label = 'Salt', weight = 100, stack = true },
['spices'] = { label = 'Spices', weight = 100, stack = true },
['lettuce'] = { label = 'Lettuce', weight = 100, stack = true },
['tomato'] = { label = 'Tomato', weight = 100, stack = true },
['wrapbread'] = { label = 'Wrap', weight = 100, stack = true },
['bun'] = { label = 'Bun', weight = 100, stack = true },
['cheese'] = { label = 'Cheese', weight = 100, stack = true },
['beef_patty'] = { label = 'Patty', weight = 100, stack = true },
['coffee_beans'] = { label = 'Coffee Beans', weight = 100, stack = true },
['water'] = { label = 'Water Bottle', weight = 100, stack = true },
['sugar'] = { label = 'Sugar', weight = 100, stack = true },
['grilled_steak'] = { label = 'Grilled Steak', weight = 100, stack = true },
['veggie_wrap'] = { label = 'Veggie Wrap', weight = 100, stack = true },
['cheeseburger'] = { label = 'Cheeseburger', weight = 100, stack = true },
['coffee'] = { label = 'Hot Coffee', weight = 100, stack = true },
['clip_attachment'] = { label = 'Clip Attachment', weight = 100, stack = true },
['scope_attachment'] = { label = 'Scope Attachment', weight = 100, stack = true },
['smallscope_attachment'] = { label = 'Small Scope Attachment', weight = 100, stack = true },
['medscope_attachment'] = { label = 'Medium Scope Attachment', weight = 100, stack = true },
['grip_attachment'] = { label = 'Grip Attachment', weight = 100, stack = true },
['flashlight_attachment'] = { label = 'Flashlight Attachment', weight = 100, stack = true },
['suppressor_attachment'] = { label = 'Suppressor Attachment', weight = 100, stack = true },
['luxuryfinish_attachment'] = { label = 'Luxury Finish Attachment', weight = 100, stack = true },
['at_clip_extended_pistol'] = { label = 'Extended Pistol Clip', weight = 100, stack = true },
['at_clip_extended_smg'] = { label = 'Extended SMG Clip', weight = 100, stack = true },
['at_clip_drum_smg'] = { label = 'Drum Mag', weight = 100, stack = true },
['at_clip_extended_rifle'] = { label = 'Extended Rifle Clip', weight = 100, stack = true },
['at_clip_drum_rifle'] = { label = 'Drum Rifle Mag', weight = 100, stack = true },
['at_clip_extended_shotgun'] = { label = 'Extended Shotgun Clip', weight = 100, stack = true },
['at_clip_drum_shotgun'] = { label = 'Drum Shotgun Mag', weight = 100, stack = true },
['at_clip_extended_mg'] = { label = 'Extended MG Clip', weight = 100, stack = true },
['at_clip_extended_sniper'] = { label = 'Extended Sniper Clip', weight = 100, stack = true },
['at_flashlight'] = { label = 'Flashlight', weight = 100, stack = true },
['at_suppressor_light'] = { label = 'Suppressor', weight = 100, stack = true },
['at_suppressor_heavy'] = { label = 'Heavy Suppressor', weight = 100, stack = true },
['at_skin_luxe'] = { label = 'Luxury Finish', weight = 100, stack = true },
['at_grip'] = { label = 'Grip', weight = 100, stack = true },
['at_scope_macro'] = { label = 'Macro Scope', weight = 100, stack = true },
['at_scope_small'] = { label = 'Small Scope', weight = 100, stack = true },
['at_scope_medium'] = { label = 'Medium Scope', weight = 100, stack = true },
['at_scope_large'] = { label = 'Large Scope', weight = 100, stack = true },
['at_scope_advanced'] = { label = 'Advanced Scope', weight = 100, stack = true },
--- # end 0r-craft-v2
```

{% endtab %}
{% endtabs %}

## QB Core

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

```lua
scrapmetal = { name = 'scrapmetal', label = 'Scrap Metal', weight = 100, type = 'item', image = 'scrapmetal.png', unique = false, useable = false, shouldClose = false, description = 'Scrap Metal' },
iron = { name = 'iron', label = 'Iron', weight = 100, type = 'item', image = 'iron.png', unique = false, useable = false, shouldClose = false, description = 'Iron' },
screwdriver = { name = 'screwdriver', label = 'Screwdriver', weight = 100, type = 'item', image = 'screwdriver.png', unique = false, useable = false, shouldClose = false, description = 'Screwdriver' },
carbonfiber = { name = 'carbonfiber', label = 'Carbon Fiber', weight = 100, type = 'item', image = 'carbonfiber.png', unique = false, useable = false, shouldClose = false, description = 'Carbon Fiber' },
scope_lens = { name = 'scope_lens', label = 'Scope Lens', weight = 100, type = 'item', image = 'scope_lens.png', unique = false, useable = false, shouldClose = false, description = 'Scope Lens' },
steel = { name = 'steel', label = 'Steel', weight = 100, type = 'item', image = 'steel.png', unique = false, useable = false, shouldClose = false, description = 'Steel' },
screws = { name = 'screws', label = 'Screws', weight = 100, type = 'item', image = 'screws.png', unique = false, useable = false, shouldClose = false, description = 'Screws' },
plastic = { name = 'plastic', label = 'Plastic', weight = 100, type = 'item', image = 'plastic.png', unique = false, useable = false, shouldClose = false, description = 'Plastic' },
triggerkit = { name = 'triggerkit', label = 'Trigger Kit', weight = 100, type = 'item', image = 'triggerkit.png', unique = false, useable = false, shouldClose = false, description = 'Trigger Kit' },
ducttape = { name = 'ducttape', label = 'Tape', weight = 100, type = 'item', image = 'ducttape.png', unique = false, useable = false, shouldClose = false, description = 'Tape' },
wood = { name = 'wood', label = 'Wood', weight = 100, type = 'item', image = 'wood.png', unique = false, useable = false, shouldClose = false, description = 'Wood' },
emptybottle = { name = 'emptybottle', label = 'Empty Bottle', weight = 100, type = 'item', image = 'emptybottle.png', unique = false, useable = false, shouldClose = false, description = 'Empty Bottle' },
alcohol = { name = 'alcohol', label = 'Alcohol', weight = 100, type = 'item', image = 'alcohol.png', unique = false, useable = false, shouldClose = false, description = 'Alcohol' },
cloth = { name = 'cloth', label = 'Cloth', weight = 100, type = 'item', image = 'cloth.png', unique = false, useable = false, shouldClose = false, description = 'Cloth' },
gunoil = { name = 'gunoil', label = 'Gun Oil', weight = 100, type = 'item', image = 'gunoil.png', unique = false, useable = false, shouldClose = false, description = 'Gun Oil' },
wrench = { name = 'wrench', label = 'Wrench', weight = 100, type = 'item', image = 'wrench.png', unique = false, useable = false, shouldClose = false, description = 'Wrench' },
raw_meat = { name = 'raw_meat', label = 'Raw Meat', weight = 100, type = 'item', image = 'raw_meat.png', unique = false, useable = false, shouldClose = false, description = 'Raw Meat' },
salt = { name = 'salt', label = 'Salt', weight = 100, type = 'item', image = 'salt.png', unique = false, useable = false, shouldClose = false, description = 'Salt' },
spices = { name = 'spices', label = 'Spices', weight = 100, type = 'item', image = 'spices.png', unique = false, useable = false, shouldClose = false, description = 'Spices' },
lettuce = { name = 'lettuce', label = 'Lettuce', weight = 100, type = 'item', image = 'lettuce.png', unique = false, useable = false, shouldClose = false, description = 'Lettuce' },
tomato = { name = 'tomato', label = 'Tomato', weight = 100, type = 'item', image = 'tomato.png', unique = false, useable = false, shouldClose = false, description = 'Tomato' },
wrapbread = { name = 'wrapbread', label = 'Wrap', weight = 100, type = 'item', image = 'wrapbread.png', unique = false, useable = false, shouldClose = false, description = 'Wrap' },
bun = { name = 'bun', label = 'Bun', weight = 100, type = 'item', image = 'bun.png', unique = false, useable = false, shouldClose = false, description = 'Bun' },
cheese = { name = 'cheese', label = 'Cheese', weight = 100, type = 'item', image = 'cheese.png', unique = false, useable = false, shouldClose = false, description = 'Cheese' },
beef_patty = { name = 'beef_patty', label = 'Patty', weight = 100, type = 'item', image = 'beef_patty.png', unique = false, useable = false, shouldClose = false, description = 'Patty' },
coffee_beans = { name = 'coffee_beans', label = 'Coffee Beans', weight = 100, type = 'item', image = 'coffee_beans.png', unique = false, useable = false, shouldClose = false, description = 'Coffee Beans' },
water = { name = 'water', label = 'Water Bottle', weight = 100, type = 'item', image = 'water.png', unique = false, useable = false, shouldClose = false, description = 'Water Bottle' },
sugar = { name = 'sugar', label = 'Sugar', weight = 100, type = 'item', image = 'sugar.png', unique = false, useable = false, shouldClose = false, description = 'Sugar' },
grilled_steak = { name = 'grilled_steak', label = 'Grilled Steak', weight = 100, type = 'item', image = 'grilled_steak.png', unique = false, useable = false, shouldClose = false, description = 'Grilled Steak' },
veggie_wrap = { name = 'veggie_wrap', label = 'Veggie Wrap', weight = 100, type = 'item', image = 'veggie_wrap.png', unique = false, useable = false, shouldClose = false, description = 'Veggie Wrap' },
cheeseburger = { name = 'cheeseburger', label = 'Cheeseburger', weight = 100, type = 'item', image = 'cheeseburger.png', unique = false, useable = false, shouldClose = false, description = 'Cheeseburger' },
coffee = { name = 'coffee', label = 'Hot Coffee', weight = 100, type = 'item', image = 'coffee.png', unique = false, useable = false, shouldClose = false, description = 'Hot Coffee' },
clip_attachment = { name = 'clip_attachment', label = 'Clip Attachment', weight = 100, type = 'item', image = 'clip_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Clip Attachment' },
scope_attachment = { name = 'scope_attachment', label = 'Scope Attachment', weight = 100, type = 'item', image = 'scope_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Scope Attachment' },
smallscope_attachment = { name = 'smallscope_attachment', label = 'Small Scope Attachment', weight = 100, type = 'item', image = 'smallscope_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Small Scope Attachment' },
medscope_attachment = { name = 'medscope_attachment', label = 'Medium Scope Attachment', weight = 100, type = 'item', image = 'medscope_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Medium Scope Attachment' },
grip_attachment = { name = 'grip_attachment', label = 'Grip Attachment', weight = 100, type = 'item', image = 'grip_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Grip Attachment' },
flashlight_attachment = { name = 'flashlight_attachment', label = 'Flashlight Attachment', weight = 100, type = 'item', image = 'flashlight_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Flashlight Attachment' },
suppressor_attachment = { name = 'suppressor_attachment', label = 'Suppressor Attachment', weight = 100, type = 'item', image = 'suppressor_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Suppressor Attachment' },
luxuryfinish_attachment = { name = 'luxuryfinish_attachment', label = 'Luxury Finish Attachment', weight = 100, type = 'item', image = 'luxuryfinish_attachment.png', unique = false, useable = false, shouldClose = false, description = 'Luxury Finish Attachment' },
at_clip_extended_pistol = { name = 'at_clip_extended_pistol', label = 'Extended Pistol Clip', weight = 100, type = 'item', image = 'at_clip_extended_pistol.png', unique = false, useable = false, shouldClose = false, description = 'Extended Pistol Clip' },
at_clip_extended_smg = { name = 'at_clip_extended_smg', label = 'Extended SMG Clip', weight = 100, type = 'item', image = 'at_clip_extended_smg.png', unique = false, useable = false, shouldClose = false, description = 'Extended SMG Clip' },
at_clip_drum_smg = { name = 'at_clip_drum_smg', label = 'Drum Mag', weight = 100, type = 'item', image = 'at_clip_drum_smg.png', unique = false, useable = false, shouldClose = false, description = 'Drum Mag' },
at_clip_extended_rifle = { name = 'at_clip_extended_rifle', label = 'Extended Rifle Clip', weight = 100, type = 'item', image = 'at_clip_extended_rifle.png', unique = false, useable = false, shouldClose = false, description = 'Extended Rifle Clip' },
at_clip_drum_rifle = { name = 'at_clip_drum_rifle', label = 'Drum Rifle Mag', weight = 100, type = 'item', image = 'at_clip_drum_rifle.png', unique = false, useable = false, shouldClose = false, description = 'Drum Rifle Mag' },
at_clip_extended_shotgun = { name = 'at_clip_extended_shotgun', label = 'Extended Shotgun Clip', weight = 100, type = 'item', image = 'at_clip_extended_shotgun.png', unique = false, useable = false, shouldClose = false, description = 'Extended Shotgun Clip' },
at_clip_drum_shotgun = { name = 'at_clip_drum_shotgun', label = 'Drum Shotgun Mag', weight = 100, type = 'item', image = 'at_clip_drum_shotgun.png', unique = false, useable = false, shouldClose = false, description = 'Drum Shotgun Mag' },
at_clip_extended_mg = { name = 'at_clip_extended_mg', label = 'Extended MG Clip', weight = 100, type = 'item', image = 'at_clip_extended_mg.png', unique = false, useable = false, shouldClose = false, description = 'Extended MG Clip' },
at_clip_extended_sniper = { name = 'at_clip_extended_sniper', label = 'Extended Sniper Clip', weight = 100, type = 'item', image = 'at_clip_extended_sniper.png', unique = false, useable = false, shouldClose = false, description = 'Extended Sniper Clip' },
at_flashlight = { name = 'at_flashlight', label = 'Flashlight', weight = 100, type = 'item', image = 'at_flashlight.png', unique = false, useable = false, shouldClose = false, description = 'Flashlight' },
at_suppressor_light = { name = 'at_suppressor_light', label = 'Suppressor', weight = 100, type = 'item', image = 'at_suppressor_light.png', unique = false, useable = false, shouldClose = false, description = 'Suppressor' },
at_suppressor_heavy = { name = 'at_suppressor_heavy', label = 'Heavy Suppressor', weight = 100, type = 'item', image = 'at_suppressor_heavy.png', unique = false, useable = false, shouldClose = false, description = 'Heavy Suppressor' },
at_skin_luxe = { name = 'at_skin_luxe', label = 'Luxury Finish', weight = 100, type = 'item', image = 'at_skin_luxe.png', unique = false, useable = false, shouldClose = false, description = 'Luxury Finish' },
at_grip = { name = 'at_grip', label = 'Grip', weight = 100, type = 'item', image = 'at_grip.png', unique = false, useable = false, shouldClose = false, description = 'Grip' },
at_scope_macro = { name = 'at_scope_macro', label = 'Macro Scope', weight = 100, type = 'item', image = 'at_scope_macro.png', unique = false, useable = false, shouldClose = false, description = 'Macro Scope' },
at_scope_small = { name = 'at_scope_small', label = 'Small Scope', weight = 100, type = 'item', image = 'at_scope_small.png', unique = false, useable = false, shouldClose = false, description = 'Small Scope' },
at_scope_medium = { name = 'at_scope_medium', label = 'Medium Scope', weight = 100, type = 'item', image = 'at_scope_medium.png', unique = false, useable = false, shouldClose = false, description = 'Medium Scope' },
at_scope_large = { name = 'at_scope_large', label = 'Large Scope', weight = 100, type = 'item', image = 'at_scope_large.png', unique = false, useable = false, shouldClose = false, description = 'Large Scope' },
at_scope_advanced = { name = 'at_scope_advanced', label = 'Advanced Scope', weight = 100, type = 'item', image = 'at_scope_advanced.png', unique = false, useable = false, shouldClose = false, description = 'Advanced Scope' },
```

{% endtab %}
{% endtabs %}

If your image path is different, update `Config.InventoryImagesFolder` in `config.lua`.

## Final Checklist

* `0r_lib` starts without errors
* `0r-craft-v2` starts without errors
* Your recipe 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
* The Camp Fire bench is either supported by your server object setup or disabled
