Configuration
All configuration is done through config.lua. This file is not escrowed.
Core Settings
Config = {}
Config.Debug = false -- Enable debug prints in console
Config.TestMode = false -- Load 4 test stores in downtown LS
-- Framework override (leave false for auto-detection)
-- Config.FrameworkOverride = "qbx" | "qbcore" | "esx" | "standalone"`Config.Debug`
Enables verbose logging in the server and client console. Keep false in production.
`Config.TestMode`
When true, loads a reduced set of 4 test stores (one of each type) in downtown LS for quick testing. Set to false to load all 28 production stores.
Pricing
ORB Clothing includes an optional pricing system, configured via Config.Pricing:
Config.Pricing = {
enabled = true, -- false makes all customization free
currency = "cash", -- 'cash' | 'bank'
items = {
-- Per-category prices (set a category to 0 to make it free)
},
storeMultiplier = {
-- Multiply prices per store type
},
}Compatibility Mode
Config.CompatMode mirrors saved appearance to legacy clothing systems so other resources keep working:
Config.CompatMode = {
qbClothing = true, -- Mirror to qb-clothing tables
skinchanger = false, -- ESX skinchanger compatibility
esxSkin = false, -- esx_skin compatibility
}Store Types
Store types are defined in Config.StoreTypes. Each type sets which customization tabs open, the default blip, the interaction zone size, and the opening camera:
Config.StoreTypes = {
clothing = {
tabs = { "clothing" },
blip = { sprite = 73, color = 33, scale = 0.8, name = "Clothing Store" },
defaultSize = vector2(14.0, 10.0),
openCamera = "full",
},
accessories = {
tabs = { "accessories" },
blip = { sprite = 617, color = 44, scale = 0.8, name = "Accessories Store" },
defaultSize = vector2(10.0, 10.0),
openCamera = "upper",
},
barber = {
tabs = { "hair", "features", "makeup" },
blip = { sprite = 71, color = 51, scale = 0.8, name = "Barber Shop" },
defaultSize = vector2(4.0, 6.0),
openCamera = "face",
},
tattoo = {
tabs = { "tattoos" },
blip = { sprite = 75, color = 1, scale = 0.8, name = "Tattoo Parlor" },
defaultSize = vector2(7.0, 4.5),
openCamera = "full",
},
}Store Locations
Individual store locations live in Config.AllStoreLocations (production) and Config.TestStoreLocations (test). The active list is selected automatically:
Config.StoreLocations = Config.TestMode and Config.TestStoreLocations or Config.AllStoreLocationsEach entry uses a vector4 for the player-facing coords (XYZ + heading), a type, and a pedPosition (where the shopkeeper ped stands):
Config.AllStoreLocations = {
{ coords = vector4(76.198, -1393.723, 29.375, 90.717), type = "clothing",
pedPosition = vector4(75.39, -1398.28, 29.38, 6.73) },
-- Optional per-store zone size override:
{ coords = vector4(-1194.865, -773.079, 17.323, 307.0), type = "clothing",
size = vector2(11.0, 13.0), pedPosition = vector4(-1194.86, -773.08, 17.32, 130.71) },
}Barber locations also support a chairs table so the player sits during customization. See the comments in config.lua for the full chair format.
Camera Configuration
Camera angles are defined once in Config.Camera and referenced by name from each store type's openCamera field:
Config.Camera = {
DefaultFov = 50.0,
Positions = {
full = { offset = vector3(0.0, 2.8, 0.0), pointAt = vector3(0.0, 0.0, 0.0) },
face = { offset = vector3(0.0, 1.6, 0.6), pointAt = vector3(0.0, 0.0, 0.65) },
head = { offset = vector3(0.0, 1.0, 0.65), pointAt = vector3(0.0, 0.0, 0.68) },
upper = { offset = vector3(0.0, 1.8, 0.15), pointAt = vector3(0.0, 0.0, 0.2) },
lower = { offset = vector3(0.0, 2.0, -0.4), pointAt = vector3(0.0, 0.0, -0.45)},
feet = { offset = vector3(0.0, 1.8, -0.7), pointAt = vector3(0.0, 0.0, -0.75)},
},
}Admin Settings
Config.AdminPermission = "admin" -- permission group required for /storeadmin
Config.AdminStoreFile = "data/admin_stores.json" -- where admin-created stores are savedThe admin panel is opened with /storeadmin. Access requires the configured permission group, checked server-side (ACE permission or framework admin group).