Overview
Diamond Butcher Job provides two multi-stage production lines. Players process beef through a conveyor, grinder, and packing stations; poultry is plucked, gutted, chopped, and packaged. Finished goods can be sold to a configurable NPC.
diamond_butcherjob version 1.0.0. Where the bundled README and the current code disagree, the code is treated as the source of truth.config.lua, but the shipped manifest hard-requires es_extended; do not treat those bridges as supported until a tested compatibility patch is released.Compatibility matrix
| Area | System | Status in v1.0.0 |
|---|---|---|
| Framework | ESX Legacy | Supported as shipped. The manifest requires es_extended. |
| Framework | QBCore | Bridge code exists in config.lua, but the manifest still hard-requires ESX. Treat this as incomplete until the resource is patched and tested. |
| Framework | Standalone | Detection code exists, but the manifest hard-requires ESX. Not supported as shipped. |
| Inventory | ox_inventory | Required. Client item checks and all selling operations call ox_inventory directly. |
| Target | ox_target | Required. Every station and the selling NPC use ox_target. |
| Library | ox_lib | Required. Used for callbacks, progress bars, context menus, dialogs, and optional notifications. |
| Database | oxmysql | Loaded by the manifest and therefore required to start v1.0.0, although the current scripts do not run database queries. |
Requirements
Required resources
- es_extended — framework required by the current manifest.
- ox_inventory — item lookup, item removal during selling, item images in menus, and standalone item operations.
- ox_target — station and NPC interactions.
- ox_lib — callbacks, progress UI, context menus, alerts, and dialogs.
- oxmysql — loaded by
fxmanifest.lua, even though v1.0.0 contains no SQL queries.
Optional resources
- Notifier, core_notify, or mythic_notify when selected in
Config.NotificationSystem. - An external hunting or farming script that gives players
raw_meatandraw_chicken. - An ESX job creator or database access to create the
butcherjob.
Config.NotificationSystem = 'ox_lib'. ox_lib is already required, so this avoids adding another notification dependency.Installation
- Keep the resource folder name.
Place the resource at
resources/[jobs]/diamond_butcherjob. The external event examples on this page assume that exact folder and resource name. - Install and start all dependencies.
Use the startup order below. The resource must start after ox_lib, ox_target, ox_inventory, oxmysql, and ESX.
- Register all nine items.
Copy the provided item definitions into
ox_inventory/data/items.lua. Make sure commas before and after the pasted block are correct. - Copy the item images.
Copy every PNG from
diamond_butcherjob/install/imagesintoox_inventory/web/images. - Create the butcher job.
The resource does not create jobs automatically. Add an ESX job named exactly
butcher, or changeConfig.RequiredJobNameto an existing job. - Choose a notification system.
Set
Config.NotificationSystemto an installed provider.ox_libis the simplest supported choice. - Provide raw materials.
Connect a hunting, farming, shop, or admin system that supplies
raw_meatandraw_chicken. - Restart and run the acceptance test.
Test the complete beef and chicken chains, each sell mode, the job restriction, cancellation, full inventory behavior, and
/propfix.
Recommended server.cfg order
# Database/library resources loaded by the manifest
ensure oxmysql
ensure ox_lib
# Framework supported by the shipped v1.0.0 manifest
ensure es_extended
# Required inventory and targeting resources
ensure ox_inventory
ensure ox_target
# Optional notification resource only when selected in config.lua
# ensure Notifier
# ensure core_notify
# ensure mythic_notify
# Start the job after every dependency
ensure diamond_butcherjobdiamond_butcherjob after another resource has been written to use its events. Renaming changes the resource name used by future exports and support instructions.Job Setup
By default, Config.RequireJob = true and Config.RequiredJobName = 'butcher'. The script checks only the job name; it does not require a grade, boss status, or on-duty state.
Common ESX Legacy SQL example
-- Example for the common ESX Legacy jobs/job_grades schema.
-- Back up the database and adapt columns if your schema differs.
INSERT IGNORE INTO `jobs` (`name`, `label`)
VALUES ('butcher', 'Butcher');
INSERT IGNORE INTO `job_grades`
(`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`)
VALUES
('butcher', 0, 'trainee', 'Trainee', 0, '{}', '{}'),
('butcher', 1, 'worker', 'Butcher', 0, '{}', '{}'),
('butcher', 2, 'senior', 'Senior Butcher', 0, '{}', '{}'),
('butcher', 3, 'boss', 'Manager', 0, '{}', '{}');jobs and job_grades rows before importing. The script itself does not use a society account or boss menu.Disable the job restriction
Config.RequireJob = false
-- All players can now use processing stations and sell goods.Inventory Items and Images
The package contains definitions and matching PNG images for all nine required items. The note at the bottom of the bundled ox_inventory.txt says images were not supplied, but that note is outdated.
| Item | Label | Stage | Used for | Image |
|---|---|---|---|---|
raw_meat | Raw Meat | Input | Beef conveyor | raw_meat.png |
processed_meat | Processed Meat | Intermediate | Meat grinder or sale | processed_meat.png |
ground_beef | Ground Beef | Intermediate | Beef packaging | ground_beef.png |
packed_groundbeef | Ground Beef | Final product | Sellable | packed_groundbeef.png |
raw_chicken | Raw Chicken | Input | Chicken plucking | raw_chicken.png |
plucked_chicken | Plucked Chicken | Intermediate | Chicken gutting | plucked_chicken.png |
gutted_chicken | Gutted Chicken | Intermediate | Chicken chopping | gutted_chicken.png |
chopped_chicken | Chopped Chicken | Intermediate / sellable | Chicken packaging or sale | chopped_chicken.png |
packaged_chicken | Chicken fillet | Final product | Sellable | packaged_chicken.png |
Provided ox_inventory definitions
["raw_meat"] = {
label = "Raw Meat",
weight = 200,
},
["raw_chicken"] = {
label = "Raw Chicken",
weight = 100,
},
["processed_meat"] = {
label = "Processed Meat",
weight = 200,
stack = true,
close = true,
description = 'Freshly butchered and processed meat.'
},
["ground_beef"] = {
label = "Ground Beef",
weight = 200,
stack = true,
close = true,
description = 'Fresh from the meat grinder and ready to pack.'
},
["packed_groundbeef"] = {
label = "Ground Beef",
weight = 200,
stack = true,
close = true,
description = 'Freshly packed ground beef, ready to cook.'
},
["packaged_chicken"] = {
label = "Chicken fillet",
weight = 100,
stack = true,
close = true,
description = 'Freshly packed chicken, ready to cook.'
},
['plucked_chicken'] = {
label = 'Plucked Chicken',
weight = 100,
stack = true,
close = true,
description = 'Freshly plucked, ready to be gutted.'
},
['gutted_chicken'] = {
label = 'Gutted Chicken',
weight = 100,
stack = true,
close = true,
description = 'Freshly gutted chicken, ready to be chopped.'
},
['chopped_chicken'] = {
label = 'Chopped Chicken',
weight = 100,
stack = true,
close = true,
description = 'Freshly chopped chicken, ready to pack.'
}Image installation
Source: diamond_butcherjob/install/images/*.png
Destination: ox_inventory/web/images/Workflow and Locations
Beef workflow
Players obtain raw_meat, use the conveyor to create processed_meat, use the grinder to create ground_beef, and package it into packed_groundbeef.
Chicken workflow
Players obtain raw_chicken, then use the plucking, gutting, chopping, and packaging stations in order.
Configured stations
| Station group | Count | Configured area | Conversion | Duration |
|---|---|---|---|---|
| Beef conveyor | 1 | 998.27, -2142.66, 29.53 | raw_meat → processed_meat | 9,000 ms |
| Beef grinder | 1 | 975.20, -2120.03, 31.38 | processed_meat → ground_beef | 7,000 ms |
| Beef packaging | 6 | 982–985, -2118 to -2124, 30.76 | ground_beef → packed_groundbeef | 6,000 ms |
| Chicken plucking | 4 | -90 to -93, 6235–6240, 31.09 | raw_chicken → plucked_chicken | 6,000 ms |
| Chicken gutting | 3 | -78 to -79, 6228–6230, 31.09 | plucked_chicken → gutted_chicken | 6,000 ms |
| Chicken chopping | 3 | -96 to -100, 6202–6208, 31.13–31.23 | gutted_chicken → chopped_chicken | 6,000 ms |
| Chicken packaging | 4 | -101 to -107, 6205–6212, 31.03 | chopped_chicken → packaged_chicken | 6,000 ms |
| Selling NPC | 1 | 464.215, -700.840, 27.511 | Sells configured finished goods | N/A |
Server-enforced yields
| Required item | Reward item | Yield per action |
|---|---|---|
raw_meat | processed_meat | 1–3 |
processed_meat | ground_beef | 1–3 |
ground_beef | packed_groundbeef | 1–3 |
raw_chicken | plucked_chicken | 1 |
plucked_chicken | gutted_chicken | 1 |
gutted_chicken | chopped_chicken | 1 |
chopped_chicken | packaged_chicken | 1–3 |
Default sell prices
| Item | Price each |
|---|---|
processed_meat | $18 |
packed_groundbeef | $30 |
packaged_chicken | $24 |
chopped_chicken | $16 |
The NPC offers two modes: sell every configured sellable item in the player inventory, or choose one item and quantity.
Configuration Reference
| Setting | Purpose | Owner note |
|---|---|---|
Config.NotificationSystem | Selects the notification provider. | Valid code paths: core_notify, ox_lib, notifier, mythic_notify, esx, or fallback printing. |
Config.Framework | Automatic or manual framework selection. | Use esx or auto for the shipped v1.0.0 manifest. |
Config.RequireJob | Turns the job restriction on or off. | When false, all players can process and sell. |
Config.RequiredJobName | Required framework job name. | Default: butcher. |
Config.Conveyor | Beef conveyor coordinates, models, travel, items, and target radius. | The configured conveyor model must exist near the target coordinates. |
Config.Grinder | Grinder coordinates, prop, animation duration, and conversion. | Changing items requires matching the yield table. |
Config.PackagingStations | List of beef packing stations. | Add or remove table entries to change station count. |
Config.ChickenPlucking | Raw-to-plucked station list. | Each entry creates one ox_target sphere. |
Config.ChickenGutting | Plucked-to-gutted station list. | Each entry creates one ox_target sphere. |
Config.ChickenChopping | Gutted-to-chopped station list. | Each entry creates one ox_target sphere. |
Config.ChickenPackaging | Chopped-to-packaged station list. | Each entry creates one ox_target sphere. |
Config.ProcessingYields | Server-side minimum and maximum rewards. | Every allowed conversion should be explicitly defined. |
Config.SellPed | NPC model, position, scenario, target label, and invincibility. | The distance property is present but not used by v1.0.0. |
Config.SellPoint.prices | Sellable item whitelist and unit price. | Removing an item here removes it from both sell modes. |
Config.Locale | Language key used by locale.lua. | Only English is included. |
Example economy adjustment
Config.ProcessingYields.raw_meat.processed_meat = { min = 1, max = 2 }
Config.SellPoint.prices.packed_groundbeef = 25
Config.SellPoint.prices.packaged_chicken = 20Raw Material and Hunting Integration
Diamond Butcher Job does not spawn animals or generate raw inputs. Another resource must add raw_meat and raw_chicken to the player's inventory. The bundled README recommends ars_hunting, but any hunting, farming, shop, reward, or admin system can be used.
External hunting item example
-- Example item rewards inside an external hunting resource
meat = {
{
item = 'raw_meat',
chance = 100,
maxQuantity = 3,
},
}
-- Use raw_chicken for poultry hunting/collection sources.
-- The item names must exactly match Diamond Butcher Job's config.lua.Integration checklist
- The hunting item keys match
Config.Conveyor.requiredItemand the chicken plucking station item. - The items exist in ox_inventory.
- Matching PNG images exist in ox_inventory's image directory.
- The hunting resource starts before players attempt the butcher workflow.
- The server economy accounts for both hunting yield and butcher processing yield.
Events, Callback, and Exports
Supported external client event: open main menu
Opens the NPC's main context menu from another client resource.
-- Client-side: open the main butcher NPC menu
TriggerEvent('diamond_butcherjob:openButcherMenu')Supported external client event: open selling menu
Opens the sell-all / sell-specific menu directly. Server-side selling still checks the configured job.
-- Client-side: open the selling menu directly
TriggerEvent('diamond_butcherjob:openSellDialog')Available ox_lib callback: check job access
Returns the result of Config.HasJob(source). This is useful when another client resource needs to show or hide a butcher interaction.
-- Client-side, requires ox_lib
local isButcher = lib.callback.await('diamond_butcherjob:hasJob', false)
if isButcher then
print('Player has access to the butcher job')
endExport status
| Side | Export | Status |
|---|---|---|
| Client | None | No exports(...) declarations are present in v1.0.0. |
| Server | None | No exports(...) declarations are present in v1.0.0. |
Commands
| Command | Side | Permission | Purpose |
|---|---|---|---|
/propfix | Client | None | Detaches and deletes the entity currently attached to the player's ped, then clears tasks. |
/propfix removes the entity attached to the player, not only butcher props. Use it when a processing prop remains stuck after cancellation or interruption.Troubleshooting
The resource will not start
DependenciesConfirm the folder is named diamond_butcherjob and that oxmysql, ox_lib, ESX, ox_inventory, and ox_target are already started. Check for “could not find dependency” messages.
Notifications throw an export error
ConfigThe default is notifier. Change it to ox_lib unless the Notifier resource is installed and named exactly Notifier.
Players are denied at every station
JobVerify the framework job name is exactly the same as Config.RequiredJobName. The default is butcher. Restart after changing framework job definitions.
The item exists but the station says it is missing
InventoryConfirm ox_inventory is the active inventory and the item key matches character-for-character. Labels do not matter; keys do.
The conveyor says no belt was found
MapThe client searches for model p_beefsplitter_s within the configured search radius. Check the MLO/map, coordinates, model, and searchRadius.
Item icons are blank in the sell menu
ImagesCopy the supplied PNG files into ox_inventory/web/images, keep the lowercase filenames unchanged, then restart ox_inventory or the server.
Players have no raw meat or chicken source
GameplayInstall or configure a hunting/farming resource, or add the inputs to a shop. The butcher resource does not generate raw materials.
A prop remains attached
CleanupRun /propfix. If this happens regularly, collect the station name, cancellation method, and client console error for support.
Support-ticket checklist
- Diamond Butcher Job version and folder name.
- Framework version and exact job name.
- ox_inventory, ox_target, ox_lib, and oxmysql versions.
- Selected notification provider.
- Full client F8 and server-console errors.
- Station, item, and exact reproduction steps.
- Any edits made to config.lua, locale.lua, or the manifest.
Updates and File Map
Editable files
| File | Purpose |
|---|---|
config.lua | Framework bridge, job access, inventory wrappers, all stations, yields, selling, and notifications. |
locale.lua | English strings and translation helper. |
fxmanifest.lua | Version, scripts, dependencies, and resource metadata. |
client/client.lua | Targets, animations, props, menus, dialogs, and local command. |
server/server.lua | Job callback, processing, item sales, and server command code. |
install/ox_inventory.txt | Provided item definitions. |
install/images/*.png | Provided inventory images. |
Safe update procedure
- Back up the entire resource and your edited
config.luaandlocale.lua. - Compare the new manifest, config structure, item keys, and event/API notes.
- Do not overwrite custom coordinates or economy values blindly.
- Restart in a test environment and run both complete processing chains.
- Confirm external resources still use supported events or exports for the installed version.
Still stuck after following the guide?
Open a support request with the resource version, framework, inventory, relevant configuration, full console error, and the exact steps needed to reproduce the issue.