Configuration
All configuration is done in config.lua. Below is a breakdown of each section.
Framework
lua
Framework = 'qb-core', -- 'qb-core' or 'esx'
FrameworkResource = 'qb-core', -- Resource name
NewFrameworkVersion = true, -- ESX only: false for < 1.8
SharedObject = 'es_extended:getSharedObject', -- ESX onlyDatabase
lua
EnableDatabaseOptimization = true, -- Uses primary key for fast upserts
EnableCheckConstraint = true, -- Auto-check SQL constraints on start
EnableDatabaseAutoCreation = true, -- Auto-create tables if missing
DeleteInventoryIfEmpty = true, -- Clean up empty non-player inventoriesWARNING
Database optimization requires the name column in coreinventories to be a primary key. Run this if it's not:
sql
ALTER TABLE `coreinventories` ADD CONSTRAINT name_pk PRIMARY KEY (`name`);Item Defaults
lua
DefaultItemSizeX = 1, -- Default grid width
DefaultItemSizeY = 1, -- Default grid height
DefaultDurability = 100, -- Default durability percentage
ShootingDurabilityDegradation = 0.1, -- How fast guns break (higher = faster)
BrokenItemColor = '#f21f58', -- Color overlay for broken itemsInventory Settings
lua
OpenKey = 'tab', -- Key to open inventory
DropShowDistance = 5.01, -- Distance to see drop markers
SaveKeybinds = true, -- Persist player keybinds across sessions
UIStyle = 'sleek', -- 'sleek' or 'classic'
InventoryBlur = true, -- Blur background when inventory is openDefault UI Colors
lua
DefaultInventorySettings = {
inventorycolor = '#ffffff',
labelcolor = '#ffffff',
slotcolor = '#1f1f1f',
slotborder = '#3b3b3b',
slothover = '#ffffff',
durabilitycolor = '#a442f5',
autoplacing = true,
itemSize = 47
},TIP
Players can customize these colors in-game through the inventory settings menu.
Notifications
lua
EnableItemNotification = true, -- Show add/remove item notifications
DisableNotificationForSpecificItems = {
-- ['ammo_pistol'] = true, -- Disable notification for specific items
},Item Behavior
lua
CloseAfterUse = {'lockpick', 'phone', 'id_card'}, -- Close inventory on use
SoulboundItems = {}, -- Items that survive clearInventory
EnableDiscovery = true, -- Items must be right-click discovered
EnableDestroyItem = true, -- Allow destroying items
EnableDestroyOnAllInventory = false, -- Allow destroy in other inventoriesBackpacks
lua
SyncBackpacks = true, -- Sync backpack model to player ped
EnableBackpackIntoBackpack = false, -- Prevent backpack nestingMetadata Display
lua
ShowInformationsOnHover = false, -- Show info tab on hover
ShownMetadata = {
['firstname'] = 'Firstname',
['lastname'] = 'Lastname',
['birthdate'] = 'Date of birth',
['gender'] = 'Sex',
['type'] = 'Type',
['uses'] = 'Uses',
['quality'] = 'Quality'
},Item Display
lua
ShowItemName = true, -- Show item name on slot
ShowItemCount = true, -- Show stack count
ShowItemAmmunition = true, -- Show ammo count on weaponsItem Quality Colors
lua
Quality = {
common = false, -- No color (uses category color)
rare = "#0096FF",
epic = "#fc03c2",
legendary = "#ffd51c",
import = "#ff1c2f"
},Set quality in item metadata to apply these background colors.
Money as Item
lua
MoneyAsItem = true, -- Display cash as inventory item
AccountMoneyAsItem = 'cash', -- Framework account name
ItemMoneyAsItem = 'money', -- Item name for cash
DirtyMoneyAsItem = true, -- Display dirty money as item
AccountDirtyMoneyAsItem = 'black_money',
ItemDirtyMoneyAsItem = 'markedbills',
MoneyCases = {
['wallet'] = true, -- Items that can hold money
},Starting Items
Items given to new characters on first join:
lua
StartItems = {
['phone'] = {amount = 1, metadata = {}},
['bread'] = {amount = 3, metadata = {}},
['water'] = {amount = 3, metadata = {}}
},Combine Recipes
Simple item combining (right-click to combine):
lua
CombineItems = {
['lockpick'] = {'iron', 'wood'}, -- Combine iron + wood = lockpick
},Weapon UI
lua
EnableSecondaryWeaponSlot = true, -- Two weapon slots
EnableMeleeWeaponSlot = true, -- Dedicated melee slot
EnableWeaponUI = true, -- HUD when weapon is drawn
WeaponUIRight = 0, -- UI horizontal position
WeaponUITop = 20, -- UI vertical positionWeapon Screenshots
Auto-generate weapon images with greenscreen removal:
lua
EnableWeaponScreenshots = false, -- Requires screenshot-basic
WeaponScreenshotWebhook = '', -- Discord webhook for image hosting3D Model Display
lua
Use3DModelAlways = false, -- Always render 3D models in UI
Use3DModelInteriors = false, -- Use 3D model only indoors
BlurIf3DModel = true, -- Blur surroundings with 3D model
HeightRecognizedAsInterior = -10, -- Z-height threshold for interiors
ModelPosition = 1, -- 0 = Left, 1 = Middle, 2 = RightDynamic Environment
The dynamic environment system renders player models, vehicles, and trunk scenes in the inventory UI:
lua
DynamicEnvironment = {
Enable = false,
Position = vector3(0.0, 0.0, -100.0),
Camera = {
FOV = 30.01,
FOVAnimation = true,
Rotation = false
},
Player = {
Enable = true,
CameraOffset = vector3(0.0, 4.0, 0.0),
},
Vehicle = {
Enable = true,
CameraOffset = vector3(6.0, 6.0, 1.0),
LightsEnabled = true
},
Trunk = {
Enable = true,
CameraOffset = vector3(0.0, -7.0, 0.5),
PlayerDistanceFromVehicle = 3.0,
}
},Vehicle Trunks
lua
Trunks = {
[0] = 'small_trunk', -- Compacts
[1] = 'small_trunk', -- Sedans
[2] = 'big_trunk', -- SUVs
-- ... by GTA vehicle class
},
SpecificTrunks = {
['sultan'] = 'big_trunk', -- Override by model name
},
BlackListedVehicleClassTrunk = {
[8] = true, -- Motorcycles
[13] = true, -- Bicycles
},Storage Points
Define world storage locations accessible by job:
lua
Storage = {
['departament1'] = {
coords = vector3(474.81, -994.62, 26.27),
inventory = 'big_storage',
jobs = {'police'},
prop = nil, -- Optional prop model
personal = false, -- Shared or per-player
},
},LB Phone Integration
lua
UsingLbPhoneUniqueItemFeature = false,
LbPhoneItemName = {
['phone'] = true,
},Discord Logging
Configured in config_discord.lua:
lua
ConfigDiscord = {
DiscordLog = false,
DiscordDisplayAllPlayerData = true,
DiscordWebhookUsed = 'WEBHOOK_URL',
DiscordWebHookGive = 'WEBHOOK_URL',
DiscordWebHookGiveCommand = 'WEBHOOK_URL',
DiscordWebHookMove = 'WEBHOOK_URL',
DiscordWebHookDrop = 'WEBHOOK_URL',
DiscordWebHookDestroy = 'WEBHOOK_URL',
DiscordWebHookStack = 'WEBHOOK_URL',
}Separate webhooks allow you to route different action types to different Discord channels.
