Main/resources/[inventory]/qs-inventory/config/crafting.lua
2025-06-07 08:51:21 +02:00

254 lines
8.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
Configuring the Crafting System
The qs-inventory's crafting system is entirely independent, meaning it operates without
needing additional DLC. This crafting system is designed to be intuitive and adaptable
to your server needs, allowing you to create complex recipes and control crafting outcomes
with ease.
Noteworthy features:
- Customizable success rates per item (1-100%), which sets the probability of successful crafting.
- Reputation-based access to crafting recipes (specific to QBCore) that allows items to unlock
based on a player's reputation points.
Read through each section to understand the structure of the system, and check examples below
for reference on crafting items.
**Important:** If you use the Reputation system, be sure to configure the 'rep' fields and thresholds
based on your servers design.
]]
Config.Crafting = true -- Toggle the crafting system on or off
--[[
Reputation System (Exclusive to QBCore Framework)
The reputation system restricts certain crafting items until a player reaches a required level.
This can be configured per item in the crafting recipes. For example, a higher-level item
may require a specific amount of reputation points to unlock.
Built-in Reputation Types for QBCore:
- 'craftingrep' and 'attachmentcraftingrep'
Set thresholds to only show items that match or exceed a players reputation level.
]]
Config.CraftingReputation = false -- Enable to activate reputation gating for crafting items (QBCore only)
Config.ThresholdItems = false -- Items only visible if rep >= threshold; QBCore-only feature
--[[
Crafting Recipes Configuration
Below is an example of how to define crafting items. Each entry contains:
- Item name and amount crafted
- Resource costs required for crafting
- Slot position, item type, and crafting time
- Reputation requirements and chance of successful crafting
Customize each field to suit your server, and remember to set 'chance' carefully.
Higher chance values reduce the likelihood of item breakage.
]]
-- Example Item Entry Structure
--[[
[1] = {
name = "weapon_pistol", -- The name of the item being crafted
amount = 50, -- Quantity available for crafting
info = {}, -- Information field for metadata (ignore if unsure)
costs = { -- List of required materials to craft this item
["iron"] = 80,
["metalscrap"] = 120,
["rubber"] = 8,
["steel"] = 133,
["lockpick"] = 5,
},
type = "weapon", -- Specify if 'item' or 'weapon'
slot = 1, -- Position slot in the crafting menu
rep = 'attachmentcraftingrep', -- Required reputation type (QBCore only)
points = 1, -- Reputation points awarded on crafting (QBCore only)
threshold = 0, -- Required reputation level for visibility (QBCore only)
time = 5500, -- Crafting time in milliseconds
chance = 100 -- Success chance percentage (1-100)
},
]]
--[[
Custom Event for Crafting
External scripts can call the crafting system using the following sample structure.
Set up custom crafting recipes and triggers based on your server events.
]]
-- Sample External Crafting Event
function OpenCrafting()
local CustomCrafting = {
[1] = {
name = 'weapon_pistol',
amount = 50,
info = {},
costs = { ['tosti'] = 1 },
type = 'weapon',
slot = 1,
rep = 'attachmentcraftingrep',
points = 1,
threshold = 0,
time = 5500,
chance = 100
},
[2] = {
name = 'water_bottle',
amount = 1,
info = {},
costs = { ['tosti'] = 1 },
type = 'item',
slot = 2,
rep = 'attachmentcraftingrep',
points = 1,
threshold = 0,
time = 8500,
chance = 100
},
}
local crafting = {
label = 'Craft',
items = exports['qs-inventory']:SetUpCrafing(CustomCrafting)
}
TriggerServerEvent('inventory:server:SetInventoryItems', CustomCrafting)
TriggerServerEvent('inventory:server:OpenInventory', 'customcrafting', crafting.label, crafting)
end
--[[ Crafting Tables Definition
Define specific crafting tables for different jobs or locations:
- Each table can have unique items and requirements.
- You can control access based on job roles, grades, or specific blip visibility on the map.
]]
Config.CraftingTables = {
[1] = {
name = 'Police Crafting',
isjob = 'police',
grades = 'all',
text = '[E] - Police Craft',
blip = {
enabled = true,
title = 'Police Crafting',
scale = 1.0,
display = 4,
colour = 0,
id = 365
},
location = vec3(459.771423, -989.050537, 24.898926),
items = {
[1] = {
name = 'weapon_pistol',
amount = 50,
info = {},
costs = {
['iron'] = 80,
['metalscrap'] = 70,
['rubber'] = 8,
['steel'] = 60,
['lockpick'] = 5,
},
type = 'weapon',
slot = 1,
rep = 'attachmentcraftingrep',
points = 1,
threshold = 0,
time = 5500,
chance = 100
},
[2] = {
name = 'weapon_smg',
amount = 1,
info = {},
costs = {
['iron'] = 80,
['metalscrap'] = 120,
['rubber'] = 10,
['steel'] = 65,
['lockpick'] = 10,
},
type = 'weapon',
slot = 2,
rep = 'attachmentcraftingrep',
points = 1,
threshold = 0,
time = 8500,
chance = 100
},
[3] = {
name = 'weapon_carbinerifle',
amount = 1,
info = {},
costs = {
['iron'] = 120,
['metalscrap'] = 120,
['rubber'] = 20,
['steel'] = 90,
['lockpick'] = 14,
},
type = 'weapon',
slot = 3,
rep = 'craftingrep',
points = 2,
threshold = 0,
time = 12000,
chance = 100
}
}
},
[2] = {
name = 'Attachment Crafting',
isjob = false,
grades = 'all',
text = '[E] - Craft Attachment',
blip = {
enabled = true,
title = 'Attachment Crafting',
scale = 1.0,
display = 4,
colour = 0,
id = 365
},
location = vec3(90.303299, 3745.503418, 39.771484),
items = {
[1] = {
name = 'pistol_extendedclip',
amount = 50,
info = {},
costs = {
['metalscrap'] = 140,
['steel'] = 250,
['rubber'] = 60,
},
type = 'item',
slot = 1,
rep = 'attachmentcraftingrep',
points = 1,
threshold = 0,
time = 8000,
chance = 90
},
[2] = {
name = 'pistol_suppressor',
amount = 50,
info = {},
costs = {
['metalscrap'] = 165,
['steel'] = 285,
['rubber'] = 75,
},
type = 'item',
slot = 2,
rep = 'attachmentcraftingrep',
points = 1,
threshold = 0,
time = 8000,
chance = 90
},
}
},
-- Continue with the same structure for the other Crafting Tables...
}