Configuration
This section includes all configurable files for the selected script. Most settings are configured automatically, but each config.lua file contains a header comment explaining the purpose and usage of every configuration type. Be sure to read the header of each file carefully to fully understand how to customize and adapt the system for QBCORE, ESX, or standalone environments, ensuring seamless integration with your server.
qs-inventory/config/config.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
---@generic T
---@param data {[string]: string}
---@return string | false
local function DependencyCheck(data) -- [CORE] Detects the first started dependency and returns its alias.
for k, v in pairs(data) do
if GetResourceState(k):find('started') ~= nil then
return v
end
end
return false
end
Config = Config or {} -- [CORE] Main configuration table.
Locales = Locales or {} -- [CORE] Language packs container.
--──────────────────────────────────────────────────────────────────────────────
-- Language Selection [EDIT]
-- [INFO] Choose your preferred language in locales/* or add your own.
-- Available:
-- 'ar','bg','ca','cs','da','de','el','en','es','fa','fr','hi','hu','it','ja',
-- 'ko','nl','no','pl','pt','ro','ru','sl','sv','th','tr','zh-CN','zh-TW'
--──────────────────────────────────────────────────────────────────────────────
Config.Language = 'en' -- [EDIT]
--[[ [INFO]
Choose your preferred language!
In this section, you can select the main language for your asset. We have a wide
selection of default languages available, located in the locales/* folder.
If your language is not listed, you can create a new one by adding a file
in locales and customizing it to your needs.
]]
--──────────────────────────────────────────────────────────────────────────────
-- Framework Detection & Configuration (Inventory) [AUTO]
-- [INFO] Auto-detects qb-core / es_extended / qbx_core. If you renamed them,
-- set adapters or assign manually. Avoid edits unless you know the framework.
--──────────────────────────────────────────────────────────────────────────────
local frameworks = { -- [CORE] Resource name → internal alias
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb'
}
Config.Framework = DependencyCheck(frameworks) or 'none' -- [AUTO]
local qbxHas = GetResourceState('qbx_core') == 'started' -- [AUTO]
Config.QBX = qbxHas -- [AUTO]
--[[ [INFO]
Manual setup (only if necessary):
1) Clear Config.Framework auto-detection and set your custom alias.
2) Update framework-specific calls in client/server where required.
Warning: Wrong edits here can break core functionality.
]]
--──────────────────────────────────────────────────────────────────────────────
-- Security [EDIT]
-- [INFO] Disables client-side shop generation via `inventory:server:OpenInventory`.
-- If enabled, you must use the provided server exports/events to create & open shops.
--──────────────────────────────────────────────────────────────────────────────
Config.DisableShopGenerationOnClient = false -- [EDIT] true = client shop-gen disabled
-- [INFO] Safe APIs to use when disabling client shop-gen:
-- Server exports: CreateShop, OpenShop
-- Server event: inventory:openShop
-- Example (client): TriggerServerEvent('inventory:openShop', 'shop_name')
--──────────────────────────────────────────────────────────────────────────────
-- Backward Compatibility (qs-inventory Migration) [EDIT]
-- [INFO] One-time migration from older qs-inventory data. Set true ONCE.
-- After completion (console shows 'Backward compatibility has been completed'),
-- immediately set back to false. Do NOT change other settings during migration.
--──────────────────────────────────────────────────────────────────────────────
Config.FetchOldInventory = false -- [EDIT] Use true once for migration, then false.
--──────────────────────────────────────────────────────────────────────────────
-- Targeting [EDIT]
-- [INFO] Enable qb-target / ox_target. If false, targeting is disabled.
--──────────────────────────────────────────────────────────────────────────────
Config.UseTarget = false -- [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- General Inventory Settings [EDIT]
-- [INFO] Core behavior for interactions, UI and safety features.
--──────────────────────────────────────────────────────────────────────────────
Config.ThrowKeybind = 'E' -- [EDIT] Key to throw items; false to disable.
Config.PoliceCanSeeSixthSlot = true -- [EDIT] Police can see protected 6th slot.
Config.PoliceJobs = { 'police', 'sheriff' } -- [EDIT] Jobs treated as police.
Config.BlockedSlot = true -- [EDIT] Lock 6th slot to prevent stealing.
Config.GiveItemHideName = false -- [EDIT] Hide item names on give; show only ID.
Config.OpenProgressBar = false -- [EDIT] Show progress bar on open (dup-prevention).
Config.EnableSounds = true -- [EDIT] Toggle default inventory sounds.
Config.EnableThrow = true -- [EDIT] Allow throwing items.
Config.UseJonskaItemThrow = false -- [EDIT] Use custom throw (see custom/misc/jonska.lua).
Config.EnableTrade = true -- [EDIT] Safe MMORPG-style trade.
Config.EnableChangeLabel = true -- [EDIT] One-click rename items.
Config.Handsup = true -- [EDIT] Enable hands-up & robbery options.
Config.StealDeadPlayer = true -- [EDIT] Allow looting dead players.
Config.StealWithoutWeapons = false -- [EDIT] Can only rob if target is hands-up w/o weapon.
Config.PlaceableItems = true -- [EDIT] Enable placeable items.
--──────────────────────────────────────────────────────────────────────────────
-- Player Inventory Capacity [EDIT]
-- [INFO] Changing weight/slots can require wipes to avoid dupes. Be cautious.
--──────────────────────────────────────────────────────────────────────────────
Config.InventoryWeight = { -- [EDIT]
weight = 120000, -- [INFO] Max weight (grams).
slots = 41, -- [INFO] Set 40 to remove protected 6th slot.
}
--──────────────────────────────────────────────────────────────────────────────
-- Drop (Ground) Capacity [EDIT]
--──────────────────────────────────────────────────────────────────────────────
Config.DropWeight = { -- [EDIT]
weight = 20000000, -- [INFO] Max ground drop capacity (grams).
slots = 130, -- [INFO] Max slots for a ground drop.
}
--──────────────────────────────────────────────────────────────────────────────
-- Label Change [EDIT]
--──────────────────────────────────────────────────────────────────────────────
Config.LabelChange = true -- [EDIT] Allow item renaming.
Config.LabelChangePrice = false -- [EDIT] Price or false for free.
Config.BlockedLabelChangeItems = { -- [EDIT] Items that cannot be renamed.
money = true,
phone = true,
}
--──────────────────────────────────────────────────────────────────────────────
-- Hotbar [EDIT]
--──────────────────────────────────────────────────────────────────────────────
Config.UsableItemsFromHotbar = true -- [EDIT] Use items from hotbar (1–5).
Config.BlockedItemsHotbar = { -- [EDIT] Items blocked from hotbar use.
'lockpick',
-- Add more here ...
}
--──────────────────────────────────────────────────────────────────────────────
-- Backpack & Item Rules [EDIT]
-- [INFO] One-per-item limits, non-stealable and non-storable item lists.
--──────────────────────────────────────────────────────────────────────────────
Config.OnePerItem = { -- [EDIT] Max quantity per item type.
backpack = 1,
-- Add more items as needed.
}
Config.notStolenItems = { -- [EDIT] Items that cannot be stolen.
id_card = true,
water_bottle = true,
tosti = true,
}
Config.notStoredItems = { -- [EDIT] Items that cannot be stashed.
backpack = true,
}
--──────────────────────────────────────────────────────────────────────────────
-- Armor [EDIT]
--──────────────────────────────────────────────────────────────────────────────
Config.DrawableArmor = 100 -- [EDIT] Armor points granted when wearing an armor vest.
--──────────────────────────────────────────────────────────────────────────────
-- Clothing System Integration [EDIT]
-- [INFO] Enables or disables clothing system integration. Refer to documentation:
-- ESX Docs: https://docs.quasar-store.com/ Inventory > Functions > Clothing
-- QB Docs: https://docs.quasar-store.com/
--──────────────────────────────────────────────────────────────────────────────
Config.Clothing = true -- [EDIT] Enables clothing options in inventory (adds clothing button).
---@type ClotheSlot[]
Config.ClothingSlots = { -- [EDIT] Define which slots are used for clothing pieces.
{
name = 'helmet', slot = 1, type = 'head', wearType = 'prop', componentId = 0,
anim = { dict = 'mp_masks@standard_car@ds@', anim = 'put_on_mask', flags = 49 }
},
{
name = 'mask', slot = 2, type = 'head', wearType = 'drawable', componentId = 1,
anim = { dict = 'mp_masks@standard_car@ds@', anim = 'put_on_mask', flags = 49 }
},
{
name = 'glasses', slot = 3, type = 'head', wearType = 'prop', componentId = 1,
anim = { dict = 'clothingspecs', anim = 'take_off', flags = 49 }
},
{
name = 'torso', slot = 4, type = 'body', wearType = 'drawable', componentId = 11,
anim = { dict = 'missmic4', anim = 'michael_tux_fidget', flags = 49 }
},
{
name = 'tshirt', slot = 5, type = 'body', wearType = 'drawable', componentId = 8,
anim = { dict = 'clothingtie', anim = 'try_tie_negative_a', flags = 49 }
},
{
name = 'jeans', slot = 6, type = 'body', wearType = 'drawable', componentId = 4,
anim = { dict = 'missmic4', anim = 'michael_tux_fidget', flags = 49 }
},
{
name = 'arms', slot = 7, type = 'body', wearType = 'drawable', componentId = 3,
anim = { dict = 'nmt_3_rcm-10', anim = 'cs_nigel_dual-10', flags = 49 }
},
{
name = 'shoes', slot = 8, type = 'body', wearType = 'drawable', componentId = 6,
anim = { dict = 'random@domestic', anim = 'pickup_low', flags = 49 }
},
{
name = 'ears', slot = 9, type = 'body', wearType = 'prop', componentId = 2,
anim = { dict = 'mp_cp_stolen_tut', anim = 'b_think', flags = 49 }
},
{
name = 'bag', slot = 10, type = 'addon', wearType = 'drawable', componentId = 5,
anim = { dict = 'anim@heists@ornate_bank@grab_cash', anim = 'intro', flags = 49 }
},
{
name = 'watch', slot = 11, type = 'addon', wearType = 'prop', componentId = 6,
anim = { dict = 'nmt_3_rcm-10', anim = 'cs_nigel_dual-10', flags = 49 }
},
{
name = 'bracelets', slot = 12, type = 'addon', wearType = 'prop', componentId = 7,
anim = { dict = 'nmt_3_rcm-10', anim = 'cs_nigel_dual-10', flags = 49 }
},
{
name = 'chain', slot = 13, type = 'addon', wearType = 'drawable', componentId = 7,
anim = { dict = 'nmt_3_rcm-10', anim = 'cs_nigel_dual-10', flags = 49 }
},
{
name = 'vest', slot = 14, type = 'addon', wearType = 'drawable', componentId = 9,
anim = { dict = 'nmt_3_rcm-10', anim = 'cs_nigel_dual-10', flags = 49 }
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Appearance System Detection [AUTO]
-- [INFO] Auto-detects supported appearance/clothing resources.
--──────────────────────────────────────────────────────────────────────────────
local appearances = { -- [CORE] Resource name → internal alias
['illenium-appearance'] = 'illenium',
['qs-appearance'] = 'illenium',
['rcore_clothing'] = 'rcore',
['esx_skin'] = 'esx',
['qb-clothing'] = 'qb'
}
Config.Appearance = DependencyCheck(appearances) or 'standalone' -- [AUTO]
Config.TakePreviousClothes = false -- [EDIT] Adds previous worn clothes back to inventory when changing.
--──────────────────────────────────────────────────────────────────────────────
-- Drop Settings [EDIT]
-- [INFO] Control dropped items visuals and refresh system.
--──────────────────────────────────────────────────────────────────────────────
Config.ItemDropObject = `prop_paper_bag_small` -- [EDIT] Model for dropped items (false = no object)
Config.DropRefreshTime = 15 * 60 -- [EDIT] Refresh time for ground items (seconds)
Config.MaxDropViewDistance = 9.5 -- [EDIT] Max view distance for dropped items
--──────────────────────────────────────────────────────────────────────────────
-- Gender System [EDIT]
-- [INFO] Defines available gender labels for use in UI and logic.
--──────────────────────────────────────────────────────────────────────────────
Config.Genders = {
['m'] = 'Male',
['f'] = 'Female',
[1] = 'Male',
[2] = 'Female'
}
--──────────────────────────────────────────────────────────────────────────────
-- Visual Configuration [EDIT]
-- [INFO] Controls animations, UI logo, idle camera and sidebar visibility.
--──────────────────────────────────────────────────────────────────────────────
Config.OpenInventoryAnim = true -- [EDIT] Play animation when opening inventory
Config.OpenInventoryScene = false -- [EDIT] Toggle scene animation
Config.Logo = 'https://i.ibb.co/CJfj6KV/Mini-copia.png' -- [EDIT] Logo (URL or local path)
Config.IdleCamera = true -- [EDIT] Enable idle camera while inventory open
--──────────────────────────────────────────────────────────────────────────────
-- Sidebar & Display Options [EDIT]
-- [INFO] Defines what stats and menus appear in the UI.
--──────────────────────────────────────────────────────────────────────────────
Config.InventoryOptions = {
['clothes'] = Config.Clothing, -- [EDIT] Enable clothing button
['configuration']= true, -- [EDIT] Show config menu
['health'] = true, -- [EDIT] Show player health
['armor'] = true, -- [EDIT] Show armor level
['hunger'] = true, -- [EDIT] Show hunger
['thirst'] = true, -- [EDIT] Show thirst
['id'] = true, -- [EDIT] Show player ID
['money'] = true, -- [EDIT] Show cash
['bank'] = true, -- [EDIT] Show bank balance
['blackmoney'] = true, -- [EDIT] Show black money
}
--──────────────────────────────────────────────────────────────────────────────
-- Item Mini Icons [EDIT]
-- [INFO] Assign FontAwesome icons to items in UI. (https://fontawesome.com/)
--──────────────────────────────────────────────────────────────────────────────
Config.ItemMiniIcons = {
['tosti'] = { icon = 'fa-solid fa-utensils' },
['water_bottle'] = { icon = 'fa-solid fa-utensils' },
}
--──────────────────────────────────────────────────────────────────────────────
-- Item Rarities [EDIT]
-- [INFO] Define rarity gradients for inventory visuals.
--──────────────────────────────────────────────────────────────────────────────
Config.ItemRarities = {
{ name = 'common', css = 'background-image: linear-gradient(to top, rgba(211,211,211,0.5), rgba(211,211,211,0) 60%)' },
{ name = 'epic', css = 'background-image: linear-gradient(to top, rgba(128,0,128,0.5), rgba(128,0,128,0) 60%)' },
{ name = 'legendary', css = 'background-image: linear-gradient(to top, rgba(255,215,0,0.5), rgba(255,215,0,0) 60%)' },
}
--──────────────────────────────────────────────────────────────────────────────
-- Default Character Appearance [EDIT]
-- [INFO] Base clothing sets per gender. Adjust for custom clothing systems.
--──────────────────────────────────────────────────────────────────────────────
Config.Defaults = {
['female'] = {
torso = 18, jeans = 19, shoes = 34, arms = 15, helmet = -1, glasses = -1,
mask = 0, tshirt = 2, ears = -1, bag = 0, watch = -1, chain = 0,
bracelets = -1, vest = 0,
},
['male'] = {
torso = 15, jeans = 14, shoes = 34, arms = 15, helmet = -1, glasses = -1,
mask = 0, tshirt = 15, ears = -1, bag = 0, watch = -1, chain = 0,
bracelets = -1, vest = 0,
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Compact Inventory [EDIT]
-- [INFO] Turns your inventory into a compact, side-mounted interface allowing
-- movement while open — signature Quasar experience.
--──────────────────────────────────────────────────────────────────────────────
Config.CompactInventory = false -- [EDIT] Enables compact view for a smaller, mobile-friendly layout.
--──────────────────────────────────────────────────────────────────────────────
-- Key Bindings [EDIT]
-- [INFO] Define shortcut keys for inventory actions. See documentation for keymap setup.
--──────────────────────────────────────────────────────────────────────────────
Config.KeyBinds = { -- [EDIT]
inventory = 'TAB', -- [INFO] Open inventory
hotbar = 'Z', -- [INFO] Show hotbar
reload = 'R', -- [INFO] Reload action
handsup = 'X', -- [INFO] Hands-up/robbery gesture
}
--──────────────────────────────────────────────────────────────────────────────
-- Debug & Development Tools [EDIT]
-- [INFO] Enables development logs and debugging prints. Use only during testing.
--──────────────────────────────────────────────────────────────────────────────
Config.Debug = false -- [EDIT] Detailed console prints
Config.ZoneDebug = false -- [EDIT] Display additional zone debug info
Config.InventoryPrefix = 'inventory' -- [ADV] Internal prefix; changing requires code adjustments
Config.SaveInventoryInterval = 12500 -- [EDIT] Autosave interval (ms)
Config.BypassQbInventory = true -- [EDIT] Bypass qb-inventory for QS compatibility
--[[ [INFO]
The system now saves inventories when updates occur instead of on close,
reducing duplication risks. Avoid frequent restarts, as unsaved data may be lost.
Command available:
/save-inventories → Manually saves all inventories before restart.
]]
--──────────────────────────────────────────────────────────────────────────────
-- Free Mode Keys [EDIT]
-- [INFO] Controls for object manipulation during free placement/edit modes.
--──────────────────────────────────────────────────────────────────────────────
Config.FreeModeKeys = {
ChangeKey = Keys['LEFTCTRL'], -- [EDIT] Toggle free mode
MoreSpeed = Keys['.'], -- [EDIT] Increase move speed
LessSpeed = Keys[','], -- [EDIT] Decrease move speed
MoveToTop = Keys['TOP'], -- [EDIT] Move upward
MoveToDown = Keys['DOWN'], -- [EDIT] Move downward
MoveToForward = Keys['TOP'], -- [EDIT] Move forward
MoveToBack = Keys['DOWN'], -- [EDIT] Move backward
MoveToRight = Keys['RIGHT'], -- [EDIT] Move right
MoveToLeft = Keys['LEFT'], -- [EDIT] Move left
RotateToTop = Keys['6'], -- [EDIT] Rotate upward
RotateToDown = Keys['7'], -- [EDIT] Rotate downward
RotateToLeft = Keys['8'], -- [EDIT] Rotate left
RotateToRight = Keys['9'], -- [EDIT] Rotate right
TiltToTop = Keys['Z'], -- [EDIT] Tilt upward
TiltToDown = Keys['X'], -- [EDIT] Tilt downward
TiltToLeft = Keys['C'], -- [EDIT] Tilt left
TiltToRight = Keys['V'], -- [EDIT] Tilt right
StickToTheGround = Keys['LEFTALT'], -- [EDIT] Snap object to ground
}
--──────────────────────────────────────────────────────────────────────────────
-- Editor Action Controls [EDIT]
-- [INFO] Keybinds used in world/zone editing for point and rotation handling.
--──────────────────────────────────────────────────────────────────────────────
ActionControls = {
leftClick = { label = 'Place Object', codes = { 24 } },
forward = { label = 'Forward +/-', codes = { 33, 32 } },
right = { label = 'Right +/-', codes = { 35, 34 } },
up = { label = 'Up +/-', codes = { 52, 51 } },
add_point = { label = 'Add Point', codes = { 24 } },
undo_point = { label = 'Undo Last', codes = { 25 } },
rotate_z = { label = 'RotateZ +/-', codes = { 20, 79 } },
rotate_z_scroll = { label = 'RotateZ +/-', codes = { 17, 16 } },
offset_z = { label = 'Offset Z +/-', codes = { 44, 46 } },
boundary_height = { label = 'Z Boundary +/-', codes = { 20, 73 } },
done = { label = 'Done', codes = { 191 } },
cancel = { label = 'Cancel', codes = { 194 } },
throw = { label = 'Throw', codes = { 24, 25 } },
}
--──────────────────────────────────────────────────────────────────────────────
-- Free Camera Options [EDIT]
-- [INFO] Camera movement and rotation speed configuration for editors/previews.
--──────────────────────────────────────────────────────────────────────────────
CameraOptions = {
lookSpeedX = 1000.0, -- [EDIT] Horizontal camera movement speed
lookSpeedY = 1000.0, -- [EDIT] Vertical camera movement speed
moveSpeed = 20.0, -- [EDIT] Free camera move speed
climbSpeed = 10.0, -- [EDIT] Up/Down movement speed
rotateSpeed = 20.0, -- [EDIT] Rotation speed
}qs-inventory/config/crafting.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Crafting System [EDIT]
-- [INFO] Independent crafting, no DLC required. Supports success chance, and
-- (opcional) reputación en QBCore para bloquear/mostrar recetas.
--──────────────────────────────────────────────────────────────────────────────
Config.Crafting = true -- [EDIT] Toggle the crafting system on/off
--[[ [INFO]
Noteworthy features:
- Per-item success chance (1–100%)
- Reputation-based visibility (QBCore): 'craftingrep' / 'attachmentcraftingrep'
- Configure 'rep' fields and thresholds per your server design.
]]
--──────────────────────────────────────────────────────────────────────────────
-- Reputation (QBCore only) [EDIT]
-- [INFO] Gate items behind reputation levels. Only for QBCore frameworks.
--──────────────────────────────────────────────────────────────────────────────
Config.CraftingReputation = false -- [EDIT] Enable reputation gating (QBCore)
Config.ThresholdItems = false -- [EDIT] Show items only if rep >= threshold (QBCore)
--──────────────────────────────────────────────────────────────────────────────
-- Example Item Entry (Reference) [INFO]
--──────────────────────────────────────────────────────────────────────────────
--[[
[1] = {
name = "weapon_pistol",
amount = 50,
info = {},
costs = {
["iron"] = 80,
["metalscrap"] = 120,
["rubber"] = 8,
["steel"] = 133,
["lockpick"] = 5,
},
type = "weapon", -- "item" | "weapon"
slot = 1,
rep = 'attachmentcraftingrep', -- QBCore only
points = 1, -- QBCore only (reward on craft)
threshold = 0, -- QBCore only (visibility)
time = 5500, -- ms
chance = 100 -- 1..100 success probability
},
]]
--──────────────────────────────────────────────────────────────────────────────
-- External Crafting Event (Sample) [ADV]
-- [INFO] Example to open a custom crafting menu from another script/event.
-- ⚠ Posible typo: export 'SetUpCrafing' → suele ser 'SetUpCrafting'. Mantengo tu nombre.
--──────────────────────────────────────────────────────────────────────────────
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 items = exports['qs-inventory']:SetUpCrafing(CustomCrafting) -- [INFO] Revisa el nombre del export si fuera necesario.
local crafting = { label = 'Craft', items = items }
TriggerServerEvent('inventory:server:SetInventoryItems', items)
TriggerServerEvent('inventory:server:OpenInventory', 'customcrafting', crafting.label, crafting)
end
--──────────────────────────────────────────────────────────────────────────────
-- Crafting Tables [EDIT]
-- [INFO] Define mesas de crafteo por job/ubicación, con blip y recetas propias.
--──────────────────────────────────────────────────────────────────────────────
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...
}
qs-inventory/config/customWeapons.lua
--──────────────────────────────────────────────────────────────────────────────
-- Custom Weapons [EDIT]
-- [INFO] Map weapon names to allowed attachments and durability loss per shot.
-- [INFO] You must also register these in items.lua and weapons.lua.
-- [REF] Example reference: https://github.com/NoobySloth/Custom-Weapons/tree/main
--──────────────────────────────────────────────────────────────────────────────
Config.CustomWeapons = {
-- -- Example:
-- ['WEAPON_AK47'] = {
-- attachments = {
-- defaultclip = { component = 'COMPONENT_AK47_CLIP_01', item = 'rifle_defaultclip' }, -- [EDIT]
-- extendedclip = { component = 'COMPONENT_AK47_CLIP_02', item = 'rifle_extendedclip' }, -- [EDIT]
-- -- Add more: scope = { component = 'COMPONENT_AK47_SCOPE', item = 'rifle_scope' },
-- },
-- durability = 0.15 -- [EDIT] Durability decay per shot (0.0–1.0; higher = wears faster)
-- },
}qs-inventory/config/defaultColors.js
//──────────────────────────────────────────────────────────────────────────────
// Quasar Store · Configuration Guidelines
//──────────────────────────────────────────────────────────────────────────────
// This configuration file defines all adjustable parameters for the script.
// Comments are standardized to help you identify which sections you can safely edit.
//
// • [EDIT] – Safe for users to modify. Adjust these values as needed.
// • [INFO] – Informational note describing what the variable or block does.
// • [ADV] – Advanced settings. Change only if you understand the logic behind it.
// • [CORE] – Core functionality. Do not modify unless you are a developer.
// • [AUTO] – Automatically handled by the system. Never edit manually.
//
// Always make a backup before editing configuration files.
// Incorrect changes in [CORE] or [AUTO] sections can break the resource.
//──────────────────────────────────────────────────────────────────────────────
//──────────────────────────────────────────────────────────────────────────────
// Interface · Default Color Configuration [EDIT]
//──────────────────────────────────────────────────────────────────────────────
// [INFO] Defines the base color palette and visual balance for the interface.
// All values must be in hexadecimal format. Avoid RGB to prevent rendering issues.
// Use the RESET button in UI to restore factory defaults.
//──────────────────────────────────────────────────────────────────────────────
// Primary and Secondary Colors
const defaultPrimaryColor = "#0E151B" // [EDIT] Base color for main UI backgrounds and buttons
const defaultPrimaryOpacity = "0.2" // [EDIT] Opacity level for primary color (0.0–1.0)
const defaultSecondaryColor = "#0E151B" // [EDIT] Secondary UI color for complementary elements
const defaultSecondaryOpacity = "1.0" // [EDIT] Full opacity for strong visibility
// Borders and Text
const defaultBorderColor = "#00A3FF" // [EDIT] Highlight color for UI borders and interactive elements
const defaultBorderOpacity = "0.6" // [EDIT] Semi-transparent level for UI borders
const defaultBorderRadius = "1px" // [EDIT] Defines corner roundness for UI boxes
const defaultTextColor = "#FFFFFF" // [EDIT] Default text color ensuring readability on dark UI
qs-inventory/config/garbage.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Garbage Scavenging [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Controls the lootable garbage cans system. Players can search bins or dumpsters
-- around the map to find random items with dynamic amounts and rarity.
-- Each prop listed below can be configured individually for slot count and loot pool.
--──────────────────────────────────────────────────────────────────────────────
Config.GarbageItems = {} -- [INFO] Reserved for future garbage-related flags or logic extensions.
--──────────────────────────────────────────────────────────────────────────────
-- Garbage Objects (Registered Props) [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] This list defines the in-world dumpster models that can be looted.
-- If your server does not use targeting, this section can be ignored.
--──────────────────────────────────────────────────────────────────────────────
Config.GarbageObjects = {
'prop_dumpster_02a', -- Standard dumpster
'prop_dumpster_4b', -- Large blue dumpster
'prop_dumpster_4a', -- Large green dumpster
'prop_dumpster_3a', -- Small gray dumpster
'prop_dumpster_02b', -- Alternate dumpster model
'prop_dumpster_01a' -- Basic dumpster model
}
--──────────────────────────────────────────────────────────────────────────────
-- Loot Tables Per Prop [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Maps dumpster models (joaat hashes) to their respective loot inventories.
-- Each entry defines:
-- • label → UI label shown when looting
-- • slots → max number of items the container can hold
-- • items → actual loot entries with random quantity ranges
--──────────────────────────────────────────────────────────────────────────────
Config.GarbageItemsForProp = {
[joaat('prop_dumpster_02a')] = {
label = 'Garbage', -- [INFO] UI label displayed when interacting
slots = 30, -- [EDIT] Total available item slots in dumpster
items = {
[1] = {
[1] = {
name = 'aluminum',
amount = { min = 1, max = 5 },
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'metalscrap',
amount = { min = 1, max = 5 },
info = {},
type = 'item',
slot = 2,
},
},
[2] = {
[1] = {
name = 'iron',
amount = { min = 1, max = 5 },
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'steel',
amount = { min = 1, max = 5 },
info = {},
type = 'item',
slot = 2,
},
},
}
},
[joaat('prop_dumpster_4b')] = {
label = 'Garbage',
slots = 30,
items = {
[1] = {
[1] = {
name = 'aluminum',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'plastic',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
[2] = {
[1] = {
name = 'plastic',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'metalscrap',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
}
},
[joaat('prop_dumpster_4a')] = {
label = 'Garbage',
slots = 30,
items = {
[1] = {
[1] = {
name = 'aluminum',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'metalscrap',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
[2] = {
[1] = {
name = 'glass',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'joint',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
}
},
[joaat('prop_dumpster_3a')] = {
label = 'Garbage',
slots = 30,
items = {
[1] = {
[1] = {
name = 'aluminum',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'lighter',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
[2] = {
[1] = {
name = 'metalscrap',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'rubber',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
}
},
[joaat('prop_dumpster_02b')] = {
label = 'Garbage',
slots = 30,
items = {
[1] = {
[1] = {
name = 'metalscrap',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'rubber',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
[2] = {
[1] = {
name = 'iron',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'steel',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
}
},
[joaat('prop_dumpster_01a')] = {
label = 'Garbage',
slots = 30,
items = {
[1] = {
[1] = {
name = 'plastic',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'metalscrap',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
[2] = {
[1] = {
name = 'lighter',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 1,
},
[2] = {
name = 'metalscrap',
amount = {
min = 1,
max = 5
},
info = {},
type = 'item',
slot = 2,
},
},
}
},
}
qs-inventory/config/selling.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Seller Configuration [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines in-game stores and seller NPCs, including item lists, prices,
-- payment accounts, and map blip settings. Each entry represents a store
-- with its own location, available items, and visual configuration.
--──────────────────────────────────────────────────────────────────────────────
Config.SellItems = {
--──────────────────────────────────────────────────────────────────────────
-- Seller NPC Configuration [EDIT]
--──────────────────────────────────────────────────────────────────────────
['Seller item'] = {
coords = vec3(2682.7588, 3284.8857, 55.2103), -- [EDIT] Store location on map
blip = { -- [EDIT] Map blip configuration
active = true, -- [EDIT] Enables or disables visibility
name = 'Seller', -- [EDIT] Blip title displayed on the map
sprite = 89, -- [EDIT] Blip icon ID
color = 1, -- [EDIT] Color of the blip
scale = 0.5, -- [EDIT] Blip icon size
account = 'money', -- [EDIT] Payment source ('money', 'bank', etc.)
},
items = { -- [EDIT] Items available for sale
{
name = 'sandwich',
price = 3,
amount = 1,
info = {},
type = 'item',
slot = 1,
},
{
name = 'tosti',
price = 2,
amount = 1,
info = {},
type = 'item',
slot = 2,
},
{
name = 'water_bottle',
price = 2,
amount = 1,
info = {},
type = 'item',
slot = 3,
},
}
},
--──────────────────────────────────────────────────────────────────────────
-- 24/7 Store Configuration [EDIT]
--──────────────────────────────────────────────────────────────────────────
['24/7'] = {
coords = vec3(2679.9326, 3276.6897, 54.4058), -- [EDIT] Store location
blip = { -- [EDIT] Blip settings for 24/7 store
active = true,
name = '24/7 Store',
sprite = 89,
color = 1,
scale = 0.5,
account = 'money',
},
items = { -- [EDIT] Items sold in this store
{
name = 'tosti',
price = 1,
amount = 1,
info = {},
type = 'item',
slot = 1,
},
}
},
}
qs-inventory/config/storage.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Storage Containers [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines items that act as physical containers capable of holding other items.
-- Example: a cigarette box containing multiple cigarettes.
-- Containers have their own weight, slot capacity, and optional default contents.
--
-- How it works:
-- • Define a container item (e.g. 'cigarettebox').
-- • Set its internal storage capacity (slots + weight).
-- • Optionally preload items inside with metadata and amounts.
--
-- This feature enhances immersion and realism, especially for roleplay setups.
--──────────────────────────────────────────────────────────────────────────────
Config.Storage = {
[1] = {
name = "cigarettebox", -- [EDIT] Unique name of the container item
label = "Cigarette Box", -- [EDIT] Display name in inventory
weight = 50, -- [EDIT] Max total weight the container can hold
slots = 1, -- [EDIT] Max number of different item types allowed
items = { -- [EDIT] Default contents of this container
[1] = {
name = "cigarette", -- [INFO] Item identifier
label = "Cigarette", -- [INFO] Display name
description = "A single cigarette",-- [INFO] Short description
useable = true, -- [EDIT] Can the item be used
type = "item", -- [INFO] Inventory type
amount = 20, -- [EDIT] Default quantity
weight = 1, -- [EDIT] Weight per unit
unique = false, -- [EDIT] Unique (non-stackable)
slot = 1, -- [INFO] Slot position inside container
info = {}, -- [ADV] Metadata or custom data
},
-- [EDIT] Add more default items here if needed.
},
},
-- [EDIT] Add more container definitions below.
}
qs-inventory/config/vehicles.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle Configuration System [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines storage and access rules for vehicles, including trunk and glovebox.
-- Supports ownership checks, police access overrides, and custom vehicle setups.
--──────────────────────────────────────────────────────────────────────────────
Config.IsVehicleOwned = false -- [EDIT] If true, only owned vehicles retain trunk data.
Config.UseItemInVehicle = true -- [EDIT] Disable item usage inside vehicles when false.
Config.WeaponsOnVehicle = true -- [EDIT] Disable weapon storage in vehicles when false (may affect performance).
Config.OpenTrunkAll = true -- [EDIT] Allow any player to open any trunk.
Config.OpenTrunkPolice = true -- [EDIT] Allow police to bypass trunk restrictions.
Config.OpenTrunkPoliceGrade = 0 -- [EDIT] Minimum police grade to open trunks when restricted.
Config.OpenGloveboxesAll = true -- [EDIT] Allow any player to open any glovebox.
Config.OpenGloveboxesPolice = true -- [EDIT] Allow police to bypass glovebox restrictions.
Config.OpenGloveboxesPoliceGrade = 0 -- [EDIT] Minimum police grade to open gloveboxes when restricted.
--──────────────────────────────────────────────────────────────────────────────
-- Vehicle Class Storage Capacities [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines weight and slot capacity for gloveboxes and trunks by vehicle class.
-- Reference: https://docs.fivem.net/natives/?_0x29439776AAA00A62
--──────────────────────────────────────────────────────────────────────────────
Config.VehicleClass = {
[0] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 38000, slots = 30 } },
[1] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 50000, slots = 40 } },
[2] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 75000, slots = 50 } },
[3] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 42000, slots = 35 } },
[4] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 38000, slots = 30 } },
[5] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 30000, slots = 25 } },
[6] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 30000, slots = 25 } },
[7] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 30000, slots = 25 } },
[8] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 15000, slots = 15 } },
[9] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 60000, slots = 35 } },
[10] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 60000, slots = 35 } },
[11] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 60000, slots = 35 } },
[12] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 35 } },
[13] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 0, slots = 0 } },
[14] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
[15] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
[16] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
[17] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
[18] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
[19] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
[20] = { glovebox = { maxweight = 100000, slots = 5 }, trunk = { maxweight = 120000, slots = 50 } },
}
--──────────────────────────────────────────────────────────────────────────────
-- Custom Vehicle Storage (Model Overrides) [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines specific trunk/glovebox capacities for individual models, overriding class values.
--──────────────────────────────────────────────────────────────────────────────
Config.CustomTrunk = {
[joaat('adder')] = { slots = 5, maxweight = 100000 },
}
Config.CustomGlovebox = {
[joaat('adder')] = { slots = 5, maxweight = 100000 },
}
--──────────────────────────────────────────────────────────────────────────────
-- Front Trunk (Rear Engine Vehicles) [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] For vehicles with rear engines, defines models where trunk is accessed from the front.
--──────────────────────────────────────────────────────────────────────────────
Config.BackEngineVehicles = {
[`ninef`] = true,
[`adder`] = true,
[`vagner`] = true,
[`t20`] = true,
[`infernus`] = true,
[`zentorno`] = true,
[`reaper`] = true,
[`comet2`] = true,
[`comet3`] = true,
[`jester`] = true,
[`jester2`] = true,
[`cheetah`] = true,
[`cheetah2`] = true,
[`prototipo`] = true,
[`turismor`] = true,
[`pfister811`] = true,
[`ardent`] = true,
[`nero`] = true,
[`nero2`] = true,
[`tempesta`] = true,
[`vacca`] = true,
[`bullet`] = true,
[`osiris`] = true,
[`entityxf`] = true,
[`turismo2`] = true,
[`fmj`] = true,
[`re7b`] = true,
[`tyrus`] = true,
[`italigtb`] = true,
[`penetrator`] = true,
[`monroe`] = true,
[`ninef2`] = true,
[`stingergt`] = true,
[`surfer`] = true,
[`surfer2`] = true,
[`gp1`] = true,
[`autarch`] = true,
[`tyrant`] = true,
-- [EDIT] Add more front-trunk vehicles here if needed.
}
qs-inventory/config/vending.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Vending Machine Configuration [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines vending machine categories, their available items, and prop models.
-- Each category can contain multiple items with prices and stock amounts.
-- Machines link to these categories by model name for contextual interaction.
--──────────────────────────────────────────────────────────────────────────────
Config.VendingMachines = {
--──────────────────────────────────────────────────────────────────────────
-- Drinks Category [EDIT]
--──────────────────────────────────────────────────────────────────────────
['drinks'] = {
Label = 'Drinks',
Items = {
[1] = {
name = 'kurkakola', -- [INFO] Drink item name
price = 4, -- [EDIT] Item price
amount = 50, -- [EDIT] Stock quantity
info = {}, -- [ADV] Metadata
type = 'item', -- [INFO] Type of entry
slot = 1, -- [INFO] Slot index in menu
},
[2] = {
name = 'water_bottle',
price = 4,
amount = 50,
info = {},
type = 'item',
slot = 2,
},
},
},
--──────────────────────────────────────────────────────────────────────────
-- Candy Category [EDIT]
--──────────────────────────────────────────────────────────────────────────
['candy'] = {
Label = 'Candy',
Items = {
[1] = {
name = 'chocolate', -- [INFO] Candy item
price = 4, -- [EDIT] Item price
amount = 50, -- [EDIT] Stock
info = {},
type = 'item',
slot = 1,
},
},
},
--──────────────────────────────────────────────────────────────────────────
-- Coffee Category [EDIT]
--──────────────────────────────────────────────────────────────────────────
['coffee'] = {
Label = 'Coffee',
Items = {
[1] = {
name = 'coffee', -- [INFO] Coffee item
price = 4,
amount = 50,
info = {},
type = 'item',
slot = 1,
},
},
},
--──────────────────────────────────────────────────────────────────────────
-- Water Category [EDIT]
--──────────────────────────────────────────────────────────────────────────
['water'] = {
Label = 'Water',
Items = {
[1] = {
name = 'water_bottle', -- [INFO] Water bottle item
price = 4,
amount = 50,
info = {},
type = 'item',
slot = 1,
},
},
},
}
--──────────────────────────────────────────────────────────────────────────────
-- Vending Machine Models [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Lists vending machine props and links them to a category defined above.
-- Allows interaction with corresponding items based on prop model type.
--──────────────────────────────────────────────────────────────────────────────
Config.Vendings = {
[1] = { Model = 'prop_vend_coffe_01', Category = 'coffee' },
[2] = { Model = 'prop_vend_water_01', Category = 'water' },
[3] = { Model = 'prop_watercooler', Category = 'water' },
[4] = { Model = 'prop_watercooler_Dark', Category = 'water' },
[5] = { Model = 'prop_vend_snak_01', Category = 'candy' },
[6] = { Model = 'prop_vend_snak_01_tu', Category = 'candy' },
[7] = { Model = 'prop_vend_fridge01', Category = 'drinks' },
[8] = { Model = 'prop_vend_soda_01', Category = 'drinks' },
[9] = { Model = 'prop_vend_soda_02', Category = 'drinks' },
}
qs-inventory/config/weapons.lua
--──────────────────────────────────────────────────────────────────────────────
-- Quasar Store · Configuration Guidelines
--──────────────────────────────────────────────────────────────────────────────
-- This configuration file defines all adjustable parameters for the script.
-- Comments are standardized to help you identify which sections you can safely edit.
--
-- • [EDIT] – Safe for users to modify. Adjust these values as needed.
-- • [INFO] – Informational note describing what the variable or block does.
-- • [ADV] – Advanced settings. Change only if you understand the logic behind it.
-- • [CORE] – Core functionality. Do not modify unless you are a developer.
-- • [AUTO] – Automatically handled by the system. Never edit manually.
--
-- Always make a backup before editing configuration files.
-- Incorrect changes in [CORE] or [AUTO] sections can break the resource.
--──────────────────────────────────────────────────────────────────────────────
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Global Settings [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] General behavior toggles for tints, magazines and durability exclusions.
--──────────────────────────────────────────────────────────────────────────────
Config.RemoveTintAfterRemoving = false -- [EDIT] Remove weapon tints when discarded/removed.
Config.ForceToOnlyOneMagazine = true -- [EDIT] Only one magazine in use at a time.
Config.DurabilityBlockedWeapons = { -- [EDIT] Weapons excluded from durability loss.
'weapon_stungun',
'weapon_nightstick',
'weapon_flashlight',
'weapon_unarmed',
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Attachment Lines [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Customize UI line anchors for attachments on weapon preview.
--──────────────────────────────────────────────────────────────────────────────
Config.WeaponAttachmentLines = {
['suppressor'] = { bones = { 'WAPSupp', 'WAPSupp_2' }, offset = vec2(-25, -20) },
['flash'] = { bones = { 'WAPFlshLasr', 'WAPFlshLasr_2' }, offset = vec2( 5, 24) },
['scope'] = { bones = { 'WAPScop', 'WAPScop_2' }, offset = vec2( 5, -25) },
['barrel'] = { bones = { 'Gun_GripR', 'Gun_GripR_2' }, offset = vec2( 20, 20) },
['grip'] = { bones = { 'WAPGrip', 'WAPGrip_2' }, offset = vec2(-20, 20) },
['clip'] = { bones = { 'WAPClip', 'WAPClip_2' }, offset = vec2(-40, 10) },
['tint'] = { default = true, offset = vec2( 20, 0) },
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Throwables [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] List of throwable items enabled in the game.
--──────────────────────────────────────────────────────────────────────────────
Config.Throwables = {
'ball',
'bzgas',
'flare',
'grenade',
'molotov',
'pipebomb',
'proxmine',
'smokegrenade',
'snowball',
'stickybomb',
'newspaper',
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Ammo Items [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Maps inventory ammo items to native ammo types. `isForEveryWeapon` acts as a wildcard.
--──────────────────────────────────────────────────────────────────────────────
---@type table<number, {item: string, type: string, isForEveryWeapon?: boolean}>
Config.AmmoItems = {
{ item = 'pistol_ammo', type = 'AMMO_PISTOL' },
{ item = 'rifle_ammo', type = 'AMMO_RIFLE' },
{ item = 'smg_ammo', type = 'AMMO_SMG' },
{ item = 'shotgun_ammo', type = 'AMMO_SHOTGUN' },
{ item = 'mg_ammo', type = 'AMMO_MG' },
{ item = 'emp_ammo', type = 'AMMO_EMPLAUNCHER' },
{ item = 'rpg_ammo', type = 'AMMO_RPG' },
{ item = 'grenadelauncher_ammo', type = 'AMMO_GRENADELAUNCHER' },
{ item = 'snp_ammo', type = 'AMMO_SNIPER' },
{ item = 'police_rifle_ammo', type = 'AMMO_POLICE_RIFLE' },
{ item = 'master_ammo', isForEveryWeapon = true },
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Durability Multipliers [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Higher numbers degrade faster. Tune per weapon to balance your economy/combat.
--──────────────────────────────────────────────────────────────────────────────
Config.DurabilityMultiplier = {
-- Melee
weapon_dagger = 0.15,
weapon_bat = 0.15,
weapon_bottle = 0.15,
weapon_crowbar = 0.15,
weapon_candycane = 0.15,
weapon_golfclub = 0.15,
weapon_hammer = 0.15,
weapon_hatchet = 0.15,
weapon_knuckle = 0.15,
weapon_knife = 0.15,
weapon_machete = 0.15,
weapon_switchblade = 0.15,
weapon_wrench = 0.15,
weapon_battleaxe = 0.15,
weapon_poolcue = 0.15,
weapon_briefcase = 0.15,
weapon_briefcase_02 = 0.15,
weapon_garbagebag = 0.15,
weapon_handcuffs = 0.15,
weapon_bread = 0.15,
weapon_stone_hatchet = 0.15,
-- Handguns
weapon_pistol = 0.15,
weapon_pistol_mk2 = 0.15,
weapon_combatpistol = 0.15,
weapon_appistol = 0.15,
weapon_pistol50 = 0.15,
weapon_snspistol = 0.15,
weapon_heavypistol = 0.15,
weapon_vintagepistol = 0.15,
weapon_flaregun = 0.15,
weapon_marksmanpistol = 0.15,
weapon_revolver = 0.15,
weapon_revolver_mk2 = 0.15,
weapon_doubleaction = 0.15,
weapon_snspistol_mk2 = 0.15,
weapon_raypistol = 0.15,
weapon_ceramicpistol = 0.15,
weapon_navyrevolver = 0.15,
weapon_gadgetpistol = 0.15,
weapon_pistolxm3 = 0.15,
-- Submachine Guns
weapon_microsmg = 0.15,
weapon_smg = 0.15,
weapon_smg_mk2 = 0.15,
weapon_assaultsmg = 0.15,
weapon_combatpdw = 0.15,
weapon_machinepistol = 0.15,
weapon_minismg = 0.15,
weapon_raycarbine = 0.15,
-- Shotguns
weapon_pumpshotgun = 0.15,
weapon_sawnoffshotgun = 0.15,
weapon_assaultshotgun = 0.15,
weapon_bullpupshotgun = 0.15,
weapon_musket = 0.15,
weapon_heavyshotgun = 0.15,
weapon_dbshotgun = 0.15,
weapon_autoshotgun = 0.15,
weapon_pumpshotgun_mk2 = 0.15,
weapon_combatshotgun = 0.15,
-- Assault Rifles
weapon_assaultrifle = 0.15,
weapon_assaultrifle_mk2 = 0.15,
weapon_carbinerifle = 0.15,
weapon_carbinerifle_mk2 = 0.15,
weapon_advancedrifle = 0.15,
weapon_specialcarbine = 0.15,
weapon_bullpuprifle = 0.15,
weapon_compactrifle = 0.15,
weapon_specialcarbine_mk2 = 0.15,
weapon_bullpuprifle_mk2 = 0.15,
weapon_militaryrifle = 0.15,
weapon_heavyrifle = 0.15,
-- Light Machine Guns
weapon_mg = 0.15,
weapon_combatmg = 0.15,
weapon_gusenberg = 0.15,
weapon_combatmg_mk2 = 0.15,
-- Sniper Rifles
weapon_sniperrifle = 0.15,
weapon_heavysniper = 0.15,
weapon_marksmanrifle = 0.15,
weapon_remotesniper = 0.15,
weapon_heavysniper_mk2 = 0.15,
weapon_marksmanrifle_mk2 = 0.15,
-- Heavy Weapons
weapon_rpg = 0.15,
weapon_grenadelauncher = 0.15,
weapon_grenadelauncher_smoke = 0.15,
weapon_emplauncher = 0.15,
weapon_minigun = 0.15,
weapon_firework = 0.15,
weapon_railgun = 0.15,
weapon_hominglauncher = 0.15,
weapon_compactlauncher = 0.15,
weapon_rayminigun = 0.15,
weapon_railgunxm3 = 0.15,
-- Throwables
weapon_grenade = 0.15,
weapon_bzgas = 0.15,
weapon_molotov = 0.15,
weapon_stickybomb = 0.15,
weapon_proxmine = 0.15,
weapon_snowball = 0.15,
weapon_pipebomb = 0.15,
weapon_ball = 0.15,
weapon_smokegrenade = 0.15,
weapon_flare = 0.15,
-- Misc
weapon_petrolcan = 0.15,
weapon_fireextinguisher = 0.15,
weapon_hazardcan = 0.15,
weapon_fertilizercan = 0.15,
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Repair System [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines repair points, repair kit settings, and weapon repair costs.
--──────────────────────────────────────────────────────────────────────────────
Config.WeaponRepairItemAddition = 10 -- [EDIT] Amount added to repair kit usage counter.
Config.WeaponRepairPoints = {
[1] = {
coords = vector3(964.02, -1267.41, 34.97), -- [EDIT] Location of repair station.
IsRepairing = false, -- [AUTO] Tracks ongoing repair.
RepairingData = {}, -- [AUTO] Holds repair data.
},
-- [EDIT] Add more repair points if needed.
}
Config.WeaponRepairCosts = {
['Pistol'] = 1000,
['Submachine Gun'] = 3000,
['Light Machine Gun'] = 4000,
['Assault Rifle'] = 5000,
['Sniper Rifle'] = 7000,
['Shotgun'] = 6000,
['Heavy Weapons'] = 10000,
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Stealing System [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Enables the ability to steal weapon parts with a configurable chance.
--──────────────────────────────────────────────────────────────────────────────
Config.CanStealWeaponParts = false -- [EDIT] Toggle ability to steal weapon parts.
Config.WeaponPartStealChance = 20 -- [EDIT] Probability (1–100) for successful part theft.
Config.AvailableWeaponParts = { -- [EDIT] Items obtainable via part stealing.
'electronickit',
'ironoxide',
'metalscrap',
-- Add more items here if desired.
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Attachments & Tints [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Defines available attachments and tints for each weapon type.
-- Each attachment includes a component, label, and item link.
-- Naming convention: use clear identifiers like pistol_flashlight or rifle_scope.
--──────────────────────────────────────────────────────────────────────────────
Config.WeaponAttachments = {
--──────────────────────────────────────────────────────────────────────────
-- Pistol Attachments [EDIT]
--──────────────────────────────────────────────────────────────────────────
['WEAPON_PISTOL'] = {
defaultclip = { component = 'COMPONENT_PISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_PISTOL_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP_02', item = 'pistol_suppressor' },
luxuryfinish = { component = 'COMPONENT_PISTOL_VARMOD_LUXE', item = 'luxuryfinish_weapontint' },
},
['WEAPON_COMBATPISTOL'] = {
defaultclip = { component = 'COMPONENT_COMBATPISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_COMBATPISTOL_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'pistol_suppressor' },
luxuryfinish = { component = 'COMPONENT_COMBATPISTOL_VARMOD_LOWRIDER', item = 'luxuryfinish_weapontint' }
},
['WEAPON_PISTOL50'] = {
defaultclip = { component = 'COMPONENT_PISTOL50_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_PISTOL50_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'pistol_suppressor' },
luxuryfinish = { component = 'COMPONENT_PISTOL50_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_APPISTOL'] = {
defaultclip = { component = 'COMPONENT_APPISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_APPISTOL_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'pistol_suppressor' },
luxuryfinish = { component = 'COMPONENT_APPISTOL_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_REVOLVER'] = {
defaultclip = { component = 'COMPONENT_REVOLVER_CLIP_01', item = 'pistol_defaultclip' },
luxuryfinish = { component = 'COMPONENT_REVOLVER_VARMOD_BOSS', item = 'luxuryfinish_weapontint' }
},
['WEAPON_SNSPISTOL'] = {
defaultclip = { component = 'COMPONENT_SNSPISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_SNSPISTOL_CLIP_02', item = 'pistol_extendedclip' },
grip = { component = 'COMPONENT_SNSPISTOL_VARMOD_LOWRIDER', item = 'pistol_grip' },
luxuryfinish = { component = 'COMPONENT_SNSPISTOL_VARMOD_LOWRIDER', item = 'luxuryfinish_weapontint' }
},
['WEAPON_HEAVYPISTOL'] = {
defaultclip = { component = 'COMPONENT_HEAVYPISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_HEAVYPISTOL_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'pistol_suppressor' },
grip = { component = 'COMPONENT_HEAVYPISTOL_VARMOD_LUXE', item = 'pistol_grip' },
luxuryfinish = { component = 'COMPONENT_HEAVYPISTOL_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_VINTAGEPISTOL'] = {
defaultclip = { component = 'COMPONENT_VINTAGEPISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_VINTAGEPISTOL_CLIP_02', item = 'pistol_extendedclip' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'pistol_suppressor' }
},
['WEAPON_CERAMICPISTOL'] = {
defaultclip = { component = 'COMPONENT_CERAMICPISTOL_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_CERAMICPISTOL_CLIP_02', item = 'pistol_extendedclip' },
suppressor = { component = 'COMPONENT_CERAMICPISTOL_SUPP', item = 'pistol_suppressor' }
},
['WEAPON_PISTOL_MK2'] = {
defaultclip = { component = 'COMPONENT_PISTOL_MK2_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_PISTOL_MK2_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH_02', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP_02', item = 'pistol_suppressor' },
compensator = { component = 'COMPONENT_AT_PI_COMP', item = 'pistol_compensator' },
holoscope = { component = 'COMPONENT_AT_PI_RAIL', item = 'pistol_holoscope' },
digicamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_02', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_03', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_04', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_05', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_06', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_07', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_08', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_09', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_10', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_11', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_PISTOL_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
['WEAPON_REVOLVER_MK2'] = {
defaultclip = { component = 'COMPONENT_REVOLVER_MK2_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_REVOLVER_MK2_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'pistol_flashlight' },
holoscope = { component = 'COMPONENT_AT_SIGHTS', item = 'pistol_holoscope' },
smallscope = { component = 'COMPONENT_AT_SCOPE_MACRO_MK2', item = 'pistol_smallscope' },
compensator = { component = 'COMPONENT_AT_PI_COMP_03', item = 'pistol_compensator' },
digicamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_02', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_03', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_04', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_05', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_06', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_07', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_08', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_09', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_10', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_11', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_REVOLVER_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
['WEAPON_SNSPISTOL_MK2'] = {
defaultclip = { component = 'COMPONENT_SNSPISTOL_MK2_CLIP_01', item = 'pistol_defaultclip' },
extendedclip = { component = 'COMPONENT_SNSPISTOL_MK2_CLIP_02', item = 'pistol_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH_03', item = 'pistol_flashlight' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'pistol_suppressor' },
compensator = { component = 'COMPONENT_AT_PI_COMP_02', item = 'pistol_compensator' },
digicamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_02', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_03', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_04', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_05', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_06', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_07', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_08', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_09', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_10', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_11', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_SNSPISTOL_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
-- SMG WEAPONS
['WEAPON_MICROSMG'] = {
defaultclip = { component = 'COMPONENT_MICROSMG_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_MICROSMG_CLIP_02', item = 'smg_extendedclip' },
flashlight = { component = 'COMPONENT_AT_PI_FLSH', item = 'smg_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MACRO', item = 'smg_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'smg_suppressor' },
luxuryfinish = { component = 'COMPONENT_MICROSMG_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_SMG'] = {
defaultclip = { component = 'COMPONENT_SMG_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_SMG_CLIP_02', item = 'smg_extendedclip' },
drum = { component = 'COMPONENT_SMG_CLIP_03', item = 'smg_drum' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'smg_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MACRO_02', item = 'smg_scope' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'smg_suppressor' },
luxuryfinish = { component = 'COMPONENT_SMG_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_ASSAULTSMG'] = {
defaultclip = { component = 'COMPONENT_ASSAULTSMG_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_ASSAULTSMG_CLIP_02', item = 'smg_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'smg_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MACRO', item = 'smg_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'smg_suppressor' },
luxuryfinish = { component = 'COMPONENT_ASSAULTSMG_VARMOD_LOWRIDER', item = 'luxuryfinish_weapontint' }
},
['WEAPON_MINISMG'] = {
defaultclip = { component = 'COMPONENT_MINISMG_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_MINISMG_CLIP_02', item = 'smg_extendedclip' }
},
['WEAPON_MACHINEPISTOL'] = {
defaultclip = { component = 'COMPONENT_MACHINEPISTOL_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_MACHINEPISTOL_CLIP_02', item = 'smg_extendedclip' },
drum = { component = 'COMPONENT_MACHINEPISTOL_CLIP_03', item = 'smg_drum' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'smg_suppressor' }
},
['WEAPON_COMBATPDW'] = {
defaultclip = { component = 'COMPONENT_COMBATPDW_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_COMBATPDW_CLIP_02', item = 'smg_extendedclip' },
drum = { component = 'COMPONENT_COMBATPDW_CLIP_03', item = 'smg_drum' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'smg_flashlight' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'smg_grip' },
scope = { component = 'COMPONENT_AT_SCOPE_SMALL', item = 'smg_scope' }
},
-- SMG MK2 WEAPONS
['WEAPON_SMG_MK2'] = {
defaultclip = { component = 'COMPONENT_SMG_MK2_CLIP_01', item = 'smg_defaultclip' },
extendedclip = { component = 'COMPONENT_SMG_MK2_CLIP_02', item = 'smg_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'smg_flashlight' },
holoscope = { component = 'COMPONENT_AT_SIGHTS_SMG', item = 'smg_holoscope' },
scope = { component = 'COMPONENT_AT_SCOPE_SMALL_SMG_MK2', item = 'smg_scope' },
drum = { component = 'COMPONENT_SMG_MK2_CLIP_Drum', item = 'smg_drum' },
suppressor = { component = 'COMPONENT_AT_PI_SUPP', item = 'smg_suppressor' },
barrel = { component = 'COMPONENT_AT_SB_BARREL_02', item = 'smg_barrel' },
digicamo = { component = 'COMPONENT_SMG_MK2_CAMO', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_SMG_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_SMG_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_SMG_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_SMG_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_SMG_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_SMG_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_SMG_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_SMG_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_SMG_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_SMG_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
-- SHOTGUNS
['WEAPON_PUMPSHOTGUN'] = {
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'shotgun_flashlight' },
suppressor = { component = 'COMPONENT_AT_SR_SUPP', item = 'shotgun_suppressor' },
luxuryfinish = { component = 'COMPONENT_PUMPSHOTGUN_VARMOD_LOWRIDER', item = 'luxuryfinish_weapontint' }
},
['WEAPON_SAWNOFFSHOTGUN'] = {
luxuryfinish = { component = 'COMPONENT_SAWNOFFSHOTGUN_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_ASSAULTSHOTGUN'] = {
defaultclip = { component = 'COMPONENT_ASSAULTSHOTGUN_CLIP_01', item = 'shotgun_defaultclip' },
extendedclip = { component = 'COMPONENT_ASSAULTSHOTGUN_CLIP_02', item = 'shotgun_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'shotgun_flashlight' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'shotgun_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'shotgun_grip' }
},
['WEAPON_BULLPUPSHOTGUN'] = {
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'shotgun_flashlight' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'shotgun_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'shotgun_grip' }
},
['WEAPON_HEAVYSHOTGUN'] = {
defaultclip = { component = 'COMPONENT_HEAVYSHOTGUN_CLIP_01', item = 'shotgun_defaultclip' },
extendedclip = { component = 'COMPONENT_HEAVYSHOTGUN_CLIP_02', item = 'shotgun_extendedclip' },
drum = { component = 'COMPONENT_HEAVYSHOTGUN_CLIP_03', item = 'shotgun_drum' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'shotgun_flashlight' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'shotgun_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'shotgun_grip' }
},
['WEAPON_COMBATSHOTGUN'] = {
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'shotgun_flashlight' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'shotgun_suppressor' }
},
['WEAPON_PUMPSHOTGUN_MK2'] = {
defaultclip = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CLIP_01', item = 'shotgun_defaultclip' },
extendedclip = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CLIP_02', item = 'shotgun_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'shotgun_flashlight' },
suppressor = { component = 'COMPONENT_AT_SR_SUPP_03', item = 'shotgun_suppressor' },
squaremuzzle = { component = 'COMPONENT_AT_MUZZLE_08', item = 'shotgun_squaredmuzzle' },
holoscope = { component = 'COMPONENT_AT_SCOPE_SMALL_MK2', item = 'shotgun_holoscope' },
scope = { component = 'COMPONENT_AT_SCOPE_SMALL_MK2', item = 'shotgun_scope' },
digicamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_PUMPSHOTGUN_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
-- RIFLES
['WEAPON_ASSAULTRIFLE'] = {
defaultclip = { component = 'COMPONENT_ASSAULTRIFLE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_ASSAULTRIFLE_CLIP_02', item = 'rifle_extendedclip' },
drum = { component = 'COMPONENT_ASSAULTRIFLE_CLIP_03', item = 'rifle_drum' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MACRO', item = 'rifle_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'rifle_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'rifle_grip' },
luxuryfinish = { component = 'COMPONENT_ASSAULTRIFLE_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_CARBINERIFLE'] = {
defaultclip = { component = 'COMPONENT_CARBINERIFLE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_CARBINERIFLE_CLIP_02', item = 'rifle_extendedclip' },
drum = { component = 'COMPONENT_CARBINERIFLE_CLIP_03', item = 'rifle_drum' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MEDIUM', item = 'rifle_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'rifle_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'rifle_grip' },
luxuryfinish = { component = 'COMPONENT_CARBINERIFLE_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_ADVANCEDRIFLE'] = {
defaultclip = { component = 'COMPONENT_ADVANCEDRIFLE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_ADVANCEDRIFLE_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_SMALL', item = 'rifle_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'rifle_suppressor' },
luxuryfinish = { component = 'COMPONENT_ADVANCEDRIFLE_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_SPECIALCARBINE'] = {
defaultclip = { component = 'COMPONENT_SPECIALCARBINE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_SPECIALCARBINE_CLIP_02', item = 'rifle_extendedclip' },
drum = { component = 'COMPONENT_SPECIALCARBINE_CLIP_03', item = 'rifle_drum' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MEDIUM', item = 'rifle_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'rifle_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'rifle_grip' },
luxuryfinish = { component = 'COMPONENT_SPECIALCARBINE_VARMOD_LOWRIDER', item = 'luxuryfinish_weapontint' }
},
['WEAPON_BULLPUPRIFLE'] = {
defaultclip = { component = 'COMPONENT_BULLPUPRIFLE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_BULLPUPRIFLE_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_SMALL', item = 'rifle_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'rifle_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'rifle_grip' },
luxuryfinish = { component = 'COMPONENT_BULLPUPRIFLE_VARMOD_LOW', item = 'luxuryfinish_weapontint' }
},
['WEAPON_COMPACTRIFLE'] = {
defaultclip = { component = 'COMPONENT_COMPACTRIFLE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_COMPACTRIFLE_CLIP_02', item = 'rifle_extendedclip' },
drum = { component = 'COMPONENT_COMPACTRIFLE_CLIP_03', item = 'rifle_drum' }
},
['WEAPON_HEAVYRIFLE'] = {
defaultclip = { component = 'COMPONENT_HEAVYRIFLE_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_HEAVYRIFLE_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_MEDIUM', item = 'rifle_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'rifle_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'rifle_grip' },
luxuryfinish = { component = 'COMPONENT_BULLPUPRIFLE_VARMOD_LOW', item = 'luxuryfinish_weapontint' }
},
['WEAPON_ASSAULTRIFLE_MK2'] = {
defaultclip = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
holographic = { component = 'COMPONENT_AT_SIGHTS', item = 'rifle_holoscope' },
smallscope = { component = 'COMPONENT_AT_SCOPE_MACRO_MK2', item = 'rifle_smallscope' },
largescope = { component = 'COMPONENT_AT_SCOPE_MEDIUM_MK2', item = 'rifle_largescope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'rifle_suppressor' },
digicamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_ASSAULTRIFLE_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
['WEAPON_CARBINERIFLE_MK2'] = {
defaultclip = { component = 'COMPONENT_CARBINERIFLE_MK2_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_CARBINERIFLE_MK2_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
holographic = { component = 'COMPONENT_AT_SIGHTS', item = 'rifle_holoscope' },
smallscope = { component = 'COMPONENT_AT_SCOPE_MACRO_MK2', item = 'rifle_smallscope' },
largescope = { component = 'COMPONENT_AT_SCOPE_MEDIUM_MK2', item = 'rifle_largescope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'rifle_suppressor' },
digicamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_CARBINERIFLE_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
['WEAPON_SPECIALCARBINE_MK2'] = {
defaultclip = { component = 'COMPONENT_SPECIALCARBINE_MK2_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_SPECIALCARBINE_MK2_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
holographic = { component = 'COMPONENT_AT_SIGHTS', item = 'rifle_holoscope' },
smallscope = { component = 'COMPONENT_AT_SCOPE_MACRO_MK2', item = 'rifle_smallscope' },
largescope = { component = 'COMPONENT_AT_SCOPE_MEDIUM_MK2', item = 'rifle_largescope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'rifle_suppressor' },
digicamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_SPECIALCARBINE_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
['WEAPON_BULLPUPRIFLE_MK2'] = {
defaultclip = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CLIP_01', item = 'rifle_defaultclip' },
extendedclip = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CLIP_02', item = 'rifle_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'rifle_flashlight' },
holographic = { component = 'COMPONENT_AT_SIGHTS', item = 'rifle_holoscope' },
smallscope = { component = 'COMPONENT_AT_SCOPE_MACRO_02_MK2', item = 'rifle_smallscope' },
largescope = { component = 'COMPONENT_AT_SCOPE_SMALL_MK2', item = 'rifle_largescope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'rifle_suppressor' },
digicamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO', item = 'digital_weapontint' },
brushcamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_BULLPUPRIFLE_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
},
-- SNIPERS
['WEAPON_SNIPERRIFLE'] = {
defaultclip = { component = 'COMPONENT_SNIPERRIFLE_CLIP_01', item = 'sniper_defaultclip' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP_02', item = 'sniper_suppressor' },
scope = { component = 'COMPONENT_AT_SCOPE_LARGE', item = 'sniper_scope' },
largescope = { component = 'COMPONENT_AT_SCOPE_MAX', item = 'sniper_largescope' }
},
['WEAPON_HEAVYSNIPER'] = {
defaultclip = { component = 'COMPONENT_HEAVYSNIPER_CLIP_01', item = 'sniper_defaultclip' },
scope = { component = 'COMPONENT_AT_SCOPE_LARGE', item = 'sniper_scope' },
largescope = { component = 'COMPONENT_AT_SCOPE_MAX', item = 'sniper_largescope' }
},
['WEAPON_MARKSMANRIFLE'] = {
defaultclip = { component = 'COMPONENT_MARKSMANRIFLE_CLIP_01', item = 'sniper_defaultclip' },
extendedclip = { component = 'COMPONENT_MARKSMANRIFLE_CLIP_02', item = 'sniper_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'sniper_flashlight' },
scope = { component = 'COMPONENT_AT_SCOPE_LARGE_FIXED_ZOOM', item = 'sniper_scope' },
suppressor = { component = 'COMPONENT_AT_AR_SUPP', item = 'sniper_suppressor' },
grip = { component = 'COMPONENT_AT_AR_AFGRIP', item = 'sniper_grip' },
luxuryfinish = { component = 'COMPONENT_MARKSMANRIFLE_VARMOD_LUXE', item = 'luxuryfinish_weapontint' }
},
['WEAPON_HEAVYSNIPER_MK2'] = {
defaultclip = { component = 'COMPONENT_HEAVYSNIPER_MK2_CLIP_01', item = 'sniper_defaultclip' },
extendedclip = { component = 'COMPONENT_HEAVYSNIPER_MK2_CLIP_02', item = 'sniper_extendedclip' },
flashlight = { component = 'COMPONENT_AT_AR_FLSH', item = 'sniper_flashlight' },
holographic = { component = 'COMPONENT_AT_SIGHTS', item = 'sniper_holoscope' },
smallscope = { component = 'COMPONENT_AT_SCOPE_SMALL_MK2', item = 'sniper_smallscope' },
largescope = { component = 'COMPONENT_AT_SCOPE_LARGE_MK2', item = 'sniper_largescope' },
suppressor = { component = 'COMPONENT_AT_SR_SUPP_03', item = 'sniper_suppressor' },
squaredmuzzle = { component = 'COMPONENT_AT_MUZZLE_08', item = 'sniper_squaredmuzzle' },
barrel = { component = 'COMPONENT_AT_SR_BARREL_02', item = 'sniper_barrel' },
digicamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO', item = 'weapon_digicamo' },
brushcamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_02', item = 'brushstroke_weapontint' },
woodcamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_03', item = 'woodland_weapontint' },
skullcamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_04', item = 'skull_weapontint' },
sessantacamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_05', item = 'sessanta_weapontint' },
perseuscamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_06', item = 'perseus_weapontint' },
leopardcamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_07', item = 'leopard_weapontint' },
zebracamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_08', item = 'zebra_weapontint' },
geocamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_09', item = 'geometric_weapontint' },
boomcamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_10', item = 'boom_weapontint' },
patriotcamo = { component = 'COMPONENT_HEAVYSNIPER_MK2_CAMO_IND_01', item = 'patriot_weapontint' }
}
-- Additional weapon attachments continue as needed
}
---──────────────────────────────────────────────────────────────────────────────
-- Weapons · Tint Configuration & Hash Details [EDIT]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Define custom tints per weapon using weapon hash, texture dictionary (YTD) and texture name.
-- Reference hashes: https://wiki.rage.mp/index.php?title=Weapons
-- Entry format:
-- [index] = { name = 'Weapon Name', hash = 'WeaponHashCode', ytd = 'TextureDictionary', texture = 'TextureName' }
--──────────────────────────────────────────────────────────────────────────────
Config.WeaponTints = {
-- Pistols
[1] = { name = 'Pistol', hash = '453432689', ytd = 'w_pi_pistol', texture = 'w_pi_pistol' },
[2] = { name = 'Pistol Mk II', hash = '3219281620', ytd = 'w_pi_pistolmk2', texture = 'w_pi_pistolmk2' },
[3] = { name = 'Combat Pistol', hash = '1593441988', ytd = 'w_pi_combatpistol', texture = 'w_pi_combatpistol' },
[4] = { name = 'Pistol .50', hash = '-1716589765', ytd = 'w_pi_pistol50', texture = 'w_pi_pistol50' },
[5] = { name = 'SNS Pistol', hash = '-1076751822', ytd = 'w_pi_sns_pistol', texture = 'w_pi_sns_pistol' },
[6] = { name = 'Heavy Pistol', hash = '-771403250', ytd = 'w_pi_heavypistol', texture = 'w_pi_heavypistol' },
[7] = { name = 'Vintage Pistol', hash = '137902532', ytd = 'w_pi_vintage_pistol', texture = 'w_pi_vintage_pistol' },
[8] = { name = 'Marksman Pistol', hash = '-598887786', ytd = 'w_pi_singleshot', texture = 'w_pi_singleshot_dm' },
[9] = { name = 'Revolver', hash = '-1045183535', ytd = 'w_pi_revolver', texture = 'w_pi_revolver' },
[10] = { name = 'Stun Gun', hash = '911657153', ytd = 'w_pi_stungun', texture = 'w_pi_stungun' },
[11] = { name = 'Double-Action Revolver', hash = '-1746263880', ytd = 'w_pi_revolver', texture = 'w_pi_revolver' },
[12] = { name = 'Navy Revolver', hash = '-2056364401', ytd = 'w_pi_revolver', texture = 'w_pi_revolver' },
[13] = { name = 'Ceramic Pistol', hash = '727643628', ytd = 'w_pi_ceramic_pistol', texture = 'w_pi_ceramic_pistol' },
-- SMGs / MGs
[14] = { name = 'Micro SMG', hash = '324215364', ytd = 'w_sb_microsmg', texture = 'w_sb_microsmg' },
[15] = { name = 'Machine Pistol', hash = '-619010992', ytd = 'w_sb_compactsmg', texture = 'w_sb_compactsmg' },
[16] = { name = 'SMG', hash = '736523883', ytd = 'w_sb_smg', texture = 'w_sb_smg' },
[17] = { name = 'SMG Mk II', hash = '2024373456', ytd = 'w_sb_smgmk2', texture = 'w_sb_smgmk2' },
[18] = { name = 'Assault SMG', hash = '-270015777', ytd = 'w_sb_assaultsmg', texture = 'w_sb_assaultsmg' },
[19] = { name = 'Mini SMG', hash = '-1121678507', ytd = 'w_sb_minismg', texture = 'w_sb_minismg_dm' },
[20] = { name = 'Combat PDW', hash = '171789620', ytd = 'w_sb_pdw', texture = 'w_sb_pdw' },
-- Assault Rifles / Carbines
[21] = { name = 'Assault Rifle', hash = '-1074790547', ytd = 'w_ar_assaultrifle', texture = 'w_ar_assaultrifle' },
[22] = { name = 'Assault Rifle Mk II', hash = '961495388', ytd = 'w_ar_assaultriflemk2', texture = 'w_ar_assaultriflemk2' },
[23] = { name = 'Carbine Rifle', hash = '-2084633992', ytd = 'w_ar_carbinerifle', texture = 'w_ar_carbinerifle' },
[24] = { name = 'Carbine Rifle Mk II', hash = '-86904375', ytd = 'w_ar_carbineriflemk2', texture = 'w_ar_carbineriflemk2' },
[25] = { name = 'Special Carbine', hash = '-1063057011', ytd = 'w_ar_specialcarbine', texture = 'w_ar_specialcarbine_tint' },
[26] = { name = 'Special Carbine Mk II', hash = '-1768145561', ytd = 'w_ar_specialcarbine_mk2', texture = 'w_ar_specialcarbine_mk2' },
[27] = { name = 'Bullpup Rifle', hash = '2132975508', ytd = 'w_ar_bullpuprifle', texture = 'w_ar_bullpuprifle' },
-- Snipers
[28] = { name = 'Sniper Rifle', hash = '100416529', ytd = 'w_sr_sniperrifle', texture = 'w_sr_sniperrifle' },
[29] = { name = 'Heavy Sniper', hash = '205991906', ytd = 'w_sr_heavysniper', texture = 'w_sr_heavysniper' },
[30] = { name = 'Heavy Sniper Mk II', hash = '177293209', ytd = 'w_sr_heavysnipermk2', texture = 'w_sr_heavysnipermk2' },
[31] = { name = 'Marksman Rifle', hash = '-952879014', ytd = 'w_sr_marksmanrifle', texture = 'w_sr_marksmanrifle' },
-- Shotguns
[32] = { name = 'Pump Shotgun', hash = '487013001', ytd = 'w_sg_pumpshotgun', texture = 'w_sg_pumpshotgun' },
[33] = { name = 'Sawed-Off Shotgun', hash = '2017895192', ytd = 'w_sg_sawnoff', texture = 'w_sg_sawnoff' },
[34] = { name = 'Bullpup Shotgun', hash = '-1654528753', ytd = 'w_sg_bullpupshotgun', texture = 'w_sg_bullpupshotgun' },
[35] = { name = 'Double Barrel Shotgun', hash = '-275439685', ytd = 'w_sg_doublebarrel', texture = 'w_sg_doublebarrel_dm' },
-- Others
[36] = { name = 'Railgun', hash = '1834241177', ytd = 'w_ar_railgun', texture = 'w_ar_railgun' },
[37] = { name = 'Minigun', hash = '1119849093', ytd = 'w_mg_minigun', texture = 'w_mg_minigun' },
[38] = { name = 'Widowmaker', hash = '-1238556825', ytd = 'w_mg_sminigun', texture = 'w_mg_sminigun' },
[39] = { name = 'Unholy Hellbringer', hash = '1198256469', ytd = 'w_ar_carbinerifle', texture = 'w_ar_carbinerifle' },
-- Pump Shotgun Mk II
[40] = { name = 'Pump Shotgun Mk II', hash = '1432025498', ytd = 'w_sg_pumpshotgunmk2', texture = 'w_sg_pumpshotgunmk2' },
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Sync Exports (Do Not Modify) [CORE]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Essential for synchronizing attachments/tints across server & clients.
-- Avoid editing unless you fully understand the implications.
--──────────────────────────────────────────────────────────────────────────────
RegisterNetEvent('qb-weapons:getWeaponsAttachments', function(cb)
cb(Config.WeaponAttachments)
end)
exports('GetWeaponTints', function()
return Config.WeaponTints
end)
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Attachment Items (Linking Inventory Items → Attachment Keys) [EDIT]
--──────────────────────────────────────────────────────────────────────────────
---@type AttachmentItem[]
Config.WeaponAttachmentItems = {
-- Rifles
{
item = 'rifle_suppressor',
attachment = 'suppressor',
type = 'suppressor'
},
{
item = 'rifle_smallscope',
attachment = 'smallscope',
type = 'scope'
},
{
item = 'rifle_grip',
attachment = 'grip',
type = 'grip'
},
{
item = 'rifle_defaultclip',
attachment = 'defaultclip',
type = 'clip'
},
{
item = 'rifle_extendedclip',
attachment = 'extendedclip',
type = 'clip'
},
{
item = 'rifle_drum',
attachment = 'drum',
type = 'clip'
},
{
item = 'rifle_flashlight',
attachment = 'flashlight',
type = 'flash'
},
{
item = 'rifle_largescope',
attachment = 'largescope',
type = 'scope'
},
{
item = 'rifle_holoscope',
attachment = 'holographic',
type = 'scope'
},
-- Custom Tints
{
item = 'luxuryfinish_weapontint',
attachment = 'luxuryfinish',
type = 'tint'
},
{
item = 'digital_weapontint',
attachment = 'digicamo',
type = 'tint'
},
{
item = 'brushstroke_weapontint',
attachment = 'brushcamo',
type = 'tint'
},
{
item = 'woodland_weapontint',
attachment = 'woodcamo',
type = 'tint'
},
{
item = 'skull_weapontint',
attachment = 'skullcamo',
type = 'tint'
},
{
item = 'sessanta_weapontint',
attachment = 'sessantacamo',
type = 'tint'
},
{
item = 'perseus_weapontint',
attachment = 'perseuscamo',
type = 'tint'
},
{
item = 'leopard_weapontint',
attachment = 'leopardcamo',
type = 'tint'
},
{
item = 'zebra_weapontint',
attachment = 'zebracamo',
type = 'tint'
},
{
item = 'geometric_weapontint',
attachment = 'geocamo',
type = 'tint'
},
{
item = 'boom_weapontint',
attachment = 'boomcamo',
type = 'tint'
},
{
item = 'patriot_weapontint',
attachment = 'patriotcamo',
type = 'tint'
},
-- Sniper
{
item = 'sniper_suppressor',
attachment = 'suppressor',
type = 'suppressor'
},
{
item = 'sniper_scope',
attachment = 'scope',
type = 'scope'
},
{
item = 'sniper_defaultclip',
attachment = 'defaultclip',
type = 'clip'
},
{
item = 'sniper_extendedclip',
attachment = 'extendedclip',
type = 'clip'
},
{
item = 'sniper_squaredmuzzle',
attachment = 'squaredmuzzle',
type = 'suppressor'
},
{
item = 'sniper_barrel',
attachment = 'barrel',
type = 'barrel'
},
{
item = 'sniper_flashlight',
attachment = 'flashlight',
type = 'flash'
},
{
item = 'sniper_holoscope',
attachment = 'holographic',
type = 'scope'
},
{
item = 'sniper_smallscope',
attachment = 'smallscope',
type = 'scope'
},
{
item = 'sniper_largescope',
attachment = 'largescope',
type = 'scope'
},
{
item = 'sniper_grip',
attachment = 'grip',
type = 'grip'
},
-- Pistol
{
item = 'pistol_defaultclip',
attachment = 'clip',
type = 'clip'
},
{
item = 'pistol_extendedclip',
attachment = 'extendedclip',
type = 'clip'
},
{
item = 'pistol_flashlight',
attachment = 'flashlight',
type = 'flash'
},
{
item = 'pistol_suppressor',
attachment = 'suppressor',
type = 'suppressor'
},
{
item = 'pistol_holoscope',
attachment = 'holoscope',
type = 'scope'
},
{
item = 'pistol_smallscope',
attachment = 'scope',
type = 'scope'
},
{
item = 'pistol_compensator',
attachment = 'suppressor',
type = 'suppressor'
},
-- SMG
{
item = 'smg_defaultclip',
attachment = 'defaultclip',
type = 'clip'
},
{
item = 'smg_extendedclip',
attachment = 'extendedclip',
type = 'clip'
},
{
item = 'smg_suppressor',
attachment = 'suppressor',
type = 'suppressor'
},
{
item = 'smg_drum',
attachment = 'drum',
type = 'clip'
},
{
item = 'smg_scope',
attachment = 'scope',
type = 'scope'
},
{
item = 'smg_barrel',
attachment = 'barrel',
type = 'barrel'
},
-- Shotgun
{
item = 'shotgun_defaultclip',
attachment = 'defaultclip',
type = 'clip'
},
{
item = 'shotgun_extendedclip',
attachment = 'extendedclip',
type = 'clip'
},
{
item = 'shotgun_flashlight',
attachment = 'flashlight',
type = 'flash'
},
{
item = 'shotgun_suppressor',
attachment = 'suppressor',
type = 'suppressor'
},
{
item = 'shotgun_grip',
attachment = 'grip',
type = 'grip'
},
{
item = 'shotgun_drum',
attachment = 'drum',
type = 'clip'
},
{
item = 'shotgun_squaredmuzzle',
attachment = 'squaredmuzzle',
type = 'suppressor'
},
{
item = 'shotgun_holoscope',
attachment = 'holographic',
type = 'scope'
},
{
item = 'shotgun_smallscope',
attachment = 'smallscope',
type = 'scope'
},
-- Tints for every weapon
{
attachment = 'black_weapontint',
label = 'Black Tint',
type = 'tint',
item = 'black_weapontint',
tint = 0,
forEveryWeapon = true
},
{
attachment = 'green_weapontint',
label = 'Green Tint',
type = 'tint',
item = 'green_weapontint',
tint = 1,
forEveryWeapon = true
},
{
attachment = 'gold_weapontint',
label = 'Gold Tint',
type = 'tint',
item = 'gold_weapontint',
tint = 2,
forEveryWeapon = true
},
{
attachment = 'pink_weapontint',
label = 'Pink Tint',
type = 'tint',
item = 'pink_weapontint',
tint = 3,
forEveryWeapon = true
},
{
attachment = 'army_weapontint',
label = 'Army Tint',
type = 'tint',
item = 'army_weapontint',
tint = 4,
forEveryWeapon = true
},
{
attachment = 'lspd_weapontint',
label = 'LSPD Tint',
type = 'tint',
item = 'lspd_weapontint',
tint = 5,
forEveryWeapon = true
},
{
attachment = 'orange_weapontint',
label = 'Orange Tint',
type = 'tint',
item = 'orange_weapontint',
tint = 6,
forEveryWeapon = true
},
{
attachment = 'plat_weapontint',
label = 'Platinum Tint',
type = 'tint',
item = 'plat_weapontint',
tint = 7,
forEveryWeapon = true
},
{
item = 'weapontint_url',
attachment = 'weapontint_url',
type = 'tint',
isUrlTint = true,
tint = -1,
forEveryWeapon = true
}
}
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Runtime Helpers [CORE]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Derives tint items from WeaponAttachmentItems (type == 'tint') and
-- injects attachment items flagged as `forEveryWeapon` into all weapons.
-- Requiere utilidades: table.filter, table.deepclone.
--──────────────────────────────────────────────────────────────────────────────
local weaponTints = table.deepclone(table.filter(Config.WeaponAttachmentItems, function(tint)
return tint.type == 'tint'
end))
for k in pairs(Config.WeaponAttachments) do
for _, x in pairs(Config.WeaponAttachmentItems) do
if x.forEveryWeapon then
Config.WeaponAttachments[k][x.item] = x
end
end
end
--──────────────────────────────────────────────────────────────────────────────
-- Weapons · Exports [CORE]
--──────────────────────────────────────────────────────────────────────────────
-- [INFO] Public accessors for tints, attachments, and attachment item mapping.
--──────────────────────────────────────────────────────────────────────────────
---@return AttachmentItem[]
function GetConfigTints()
return weaponTints
end
exports('getConfigWeaponTints', GetConfigTints)
exports('GetWeaponAttachments', function()
return Config.WeaponAttachments
end)
exports('GetWeaponAttachmentItems', function()
return Config.WeaponAttachmentItems
end)