Command Palette
Search for a command to run...
SHOP & ZONES#
The shop configuration (config/shop.lua) defines shop zones, types, job outfits, and interaction settings.
Interaction Settings#
Configure how players interact with shop zones:
config/shop.luaShop.Interaction = { onex_interaction = true, interaction_type = 'midcontext' -- or 'leftinteraction' }
| Option | Type | Default | Description |
|---|---|---|---|
onex_interaction | boolean | true | Use onex-interaction system |
interaction_type | string | 'midcontext' | Interaction menu style |
Interaction Types:
'midcontext'- Centered context menu (default)'leftinteraction'- Left-side interaction menu
Shop Types#
Define available shop configurations:
config/shop.luaShop.Types = { newchar = { label = "Character Creation", categories = { "EditFamily", "EditFace", "EditClothes", "EditHair", "EditMakeup" }, allowSave = true, allowOutfits = false }, admin = { label = "Admin Menu", categories = { "EditFamily", "EditFace", "EditClothes", "EditHair", "EditMakeup", "EditTattoos" }, allowSave = true, allowOutfits = true }, clothes = { label = "Clothing Store", categories = { "EditClothes", "EditMakeup" }, allowSave = true, allowOutfits = true }, barber = { label = "Barber Shop", categories = { "EditHair" }, allowSave = true, allowOutfits = false }, tattoos = { label = "Tattoo Parlor", categories = { "EditTattoos" }, allowSave = true, allowOutfits = false }, family_edit = { label = "Plastic Surgery", categories = { "EditFamily", "EditFace" }, allowSave = true, allowOutfits = false }, pol_closet = { label = "Police Closet", categories = { "EditClothes" }, allowSave = false, allowOutfits = true, jobRestricted = "police" } }
| Property | Type | Description |
|---|---|---|
label | string | Display name in UI |
categories | table | Available editing categories |
allowSave | boolean | Allow saving appearance to database |
allowOutfits | boolean | Show outfit management options |
jobRestricted | string | Restrict to specific job (optional) |
Available Categories:
EditFamily- Heritage/parents selectionEditFace- Face features and overlaysEditClothes- Clothing components and propsEditHair- Hair style and colorEditMakeup- Makeup and overlaysEditTattoos- Tattoo management
Zone Debug#
Enable zone visualization for placement:
config/shop.luaShop.ZoneDubg = false
Set to true to see zone boundaries while configuring shop locations.
Shop Zones#
Pre-configured shop locations (26 total):
config/shop.luaShop.Zones = { -- Clothing Stores { id = "clothes_1", type = "clothes", coords = vector3(72.25, -1399.10, 29.37), size = vector3(10.0, 10.0, 4.0), rotation = 0, blip = { enabled = true, sprite = 73, color = 47, scale = 0.7, label = "Clothing Store" } }, -- Barber Shops { id = "barber_1", type = "barber", coords = vector3(-814.31, -183.82, 37.57), size = vector3(6.0, 6.0, 3.0), rotation = 0, blip = { enabled = true, sprite = 71, color = 0, scale = 0.7, label = "Barber Shop" } }, -- Tattoo Parlors { id = "tattoo_1", type = "tattoos", coords = vector3(1322.64, -1651.97, 52.27), size = vector3(8.0, 8.0, 3.0), rotation = 0, blip = { enabled = true, sprite = 75, color = 1, scale = 0.7, label = "Tattoo Parlor" } } -- ... more zones }
| Property | Type | Description |
|---|---|---|
id | string | Unique zone identifier |
type | string | Shop type reference |
coords | vector3 | Zone center position |
size | vector3 | Zone dimensions (x, y, z) |
rotation | number | Zone rotation (degrees) |
blip | table | Map blip configuration |
Blip Configuration:
| Property | Type | Description |
|---|---|---|
enabled | boolean | Show blip on map |
sprite | number | Blip sprite ID |
color | number | Blip color ID |
scale | number | Blip size |
label | string | Blip hover text |
Pre-Configured Locations#
| Type | Count | Sample Locations |
|---|---|---|
| Clothing Stores | 14 | Strawberry, Vespucci, Del Perro, etc. |
| Barber Shops | 7 | Rockford Hills, Mirror Park, etc. |
| Tattoo Parlors | 6 | Downtown, Chumash, etc. |
All 26 locations are pre-configured with optimal zone sizes and blip settings.
Outfit Save Components#
Configure which components are saved with outfits:
config/shop.luaShop.SaveOutfit_Things = { "face_skin", "mask", "hair", "arms", "pants", "bag", "shoes", "accessory", "shirt", "vest", "decals", "torso", "hat", "glass", "ear", "watch", "bracelet" }
Persist Uniforms#
Keep job uniforms across reconnects:
config/shop.luaShop.PersistUniforms = true
| Value | Description |
|---|---|
true | Restore job uniform on player spawn |
false | Reset to saved appearance on spawn |
Job Outfits#
Define job-specific uniforms with grade restrictions:
config/shop.luaShop.JobOutfits = { ["police"] = { label = "Police Department", outfits = { { label = "Patrol Uniform", minGrade = 0, outfit = { torso = { collection = "base", localIndex = 55, texture = 0 }, pants = { collection = "base", localIndex = 25, texture = 0 }, shoes = { collection = "base", localIndex = 10, texture = 0 }, -- ... more components } }, { label = "Detective Suit", minGrade = 3, outfit = { torso = { collection = "base", localIndex = 4, texture = 0 }, pants = { collection = "base", localIndex = 10, texture = 0 }, shoes = { collection = "base", localIndex = 10, texture = 1 }, } }, { label = "SWAT Gear", minGrade = 5, outfit = { torso = { collection = "base", localIndex = 15, texture = 0 }, vest = { collection = "base", localIndex = 12, texture = 0 }, -- ... tactical gear } } } }, ["ambulance"] = { label = "EMS", outfits = { { label = "EMT Uniform", minGrade = 0, outfit = { ... } }, { label = "Paramedic Uniform", minGrade = 2, outfit = { ... } } } } }
| Property | Type | Description |
|---|---|---|
label | string | Job display name |
outfits | table | Array of outfit definitions |
outfits[].label | string | Outfit name |
outfits[].minGrade | number | Minimum job grade required |
outfits[].outfit | table | Component definitions |
Job Outfit Zones#
Configure where job outfit menus appear:
config/shop.luaShop.JobOutfitCfg = { ["police"] = { zones = { { coords = vector3(461.8, -1001.0, 24.9), size = vector3(3.0, 3.0, 2.0), label = "LSPD Locker Room" } } }, ["ambulance"] = { zones = { { coords = vector3(311.2, -594.5, 43.3), size = vector3(4.0, 4.0, 2.0), label = "EMS Locker Room" } } } }
Shop-Specific Configurations#
Override settings for individual shops:
config/shop.luaShop.SpecificConfigurations = { ["clothes_1"] = { whitelist = { male = { torso = { 1, 2, 3, 10, 15 } -- Only allow these } }, blacklist = { female = { mask = { 50, 51, 52 } -- Block these } }, priceMultiplier = 1.5 -- 50% markup at this shop }, ["tattoo_1"] = { blacklist = { male = { tattoos = { "gang_1", "gang_2" } -- Block gang tattoos } } } }
| Property | Type | Description |
|---|---|---|
whitelist | table | Only allow listed items |
blacklist | table | Block listed items |
priceMultiplier | number | Shop-specific price modifier |
Adding Custom Zones#
To add a new shop zone:
config/shop.lua-- Add to Shop.Zones { id = "custom_shop_1", type = "clothes", -- Use existing type or create new coords = vector3(100.0, 200.0, 30.0), size = vector3(8.0, 8.0, 4.0), rotation = 45, blip = { enabled = true, sprite = 73, color = 47, scale = 0.7, label = "Custom Clothing Store" } }
Use Shop.ZoneDubg = true to visualize zones while adjusting coordinates and sizes.