Configuration
[!IMPORTANT] Most of kartik-clothing is configured in-game, not in these files. Stores, garment restrictions and blacklists, arms/accessory pairing, ped unlocks and design moderation all live in the UI and are saved straight to the database. Start at the Admin Guide, Where To Change What to find the right place for a given task; this page is the reference for the settings that genuinely do live in
shared/.
The config files are deliberately small. Seven files in shared/:
| File | What it controls | Restart needed |
|---|---|---|
shared/config.lua | Command access, arms & compatibility behaviour, studio locations, base prices, camera, colour swatches, character creator data, ped rules, item-lock behaviour. | Yes |
shared/config_inventory.lua | Item-based clothing, equip animation, item→slot map, bare defaults. | Yes |
shared/config_theme.lua | Interface colours and corner rounding. | Yes |
shared/config_designer.lua | Design studio limits, credits, price, and base garments. | Yes |
shared/config_tattoos.lua | The full tattoo catalog. | Yes |
shared/config_surgery.lua | Ped surgery: surgeon jobs, price range, payout, timeouts. | Yes |
shared/categories.lua | Which categories appear in each UI. | Yes |
🚫 What is not in a config file
| Looking for… | It lives here instead |
|---|---|
| Store locations, blips, interaction zones, per-store price multipliers, job-locked stores | /shopmanager UI → kc_shops |
| Blacklisting a garment, or locking one to a job/grade/citizen | LOCK EDITOR in any clothing shop → kc_item_locks, see Access Control |
| Correct arms and "GOES WITH" pairings for addon garments | COMPAT EDITOR in any clothing shop → kc_item_compat |
| Ped model entitlements | /shopmanager → Peds & Locking, or /pedunlock · /pedlock |
| Approving player-made designs | /shopmanager → Design Queue |
📇 Every Key At A Glance (shared/config.lua)
| Key | Type | What it does |
|---|---|---|
Config.AdminOnlyCommands | bool | Gates the appearance/shop command names to admins. |
Config.TakeoffCommands | bool | Registers /takeoff and /puton; false leaves them to another script. |
Config.MediaUrl | string | Remote fallback base URL for garment thumbnails. |
Config.Locale | string | Which file in locales/ to use. |
Config.Debug | bool | Verbose console output. |
Config.SmartArms | bool | Automatic sleeve matching. |
Config.AuthoredArms | bool | Prefer admin-authored arm pairings over the heuristic. |
Config.CompatPanel | bool | Show the "GOES WITH" panel to players. |
Config.CompatEditor | bool | Allow admins to author compatibility in-game. |
Config.Studios | table | Design Studio locations. |
Config.Prices | table | Base price and multiplier per component/prop slot. |
Config.Camera | table | Framing distances and FOV per view. |
Config.HairColors / Config.MakeupColors | table | The 64-entry colour swatch palettes. |
Config.Heritage / Config.FaceFeatures / Config.HeadOverlays | table | Character creator data. |
Config.Peds | table | The custom ped catalog. |
Config.PedsShowLocked | bool | Grey out locked peds (true) or hide them. |
Config.PedShopOwnersOnly | bool | Only unlock holders may open a Ped Changer. |
Config.PedUnlocksAreSingleUse | bool | An unlock is spent when the ped is applied. |
Config.PedsAllowGenderSwap | bool | Allow swapping to the other body. |
Config.CreatorKeepCharacterGender | bool | New characters keep the gender picked in the multicharacter. |
Config.PedChangeCooldown | number | Cooldown between ped changes. |
Config.PedChangeFee | number | Bank charge per ped change; 0 disables. |
Config.PedChangeLogToConsole | bool | Also print ped changes to the console. |
Config.PedAdminBypass | bool | Admins skip unlock/cooldown/gender rules. |
Config.ItemLocksShowLocked | bool | Grey out restricted garments (true) or hide them. |
Config.ItemLocksAdminBypass | bool | Admins may wear restricted garments. |
The sections below explain the ones that need more than a line.
⚙️ Main Configuration (shared/config.lua)
Access To Commands
Restrict the appearance and shop commands (/clothing, /barber, /tattoos, /wardrobe, /designstudio, /creator, /shopmanager and the lock/compat commands) to administrators (group.admin):
Config.AdminOnlyCommands = true -- false makes the appearance commands public[!NOTE] This gates command names only. Permission for the actions themselves, saving a lock, editing compatibility, granting a ped, approving a design, is re-checked server side on every call, so a player who spoofs the UI still cannot write anything. What counts as an admin per framework is listed in the Admin Guide.
Take Off / Put On Commands
/takeoff and /puton are on by default. If another script (for example FiveCode Clothing) already uses those command names, turn ours off so the two don't clash:
Config.TakeoffCommands = false -- true (default) registers /takeoff and /putonRestart kartik-clothing after changing it. Everything else (shops, wardrobe, saved looks, clothing items) keeps working. See /takeoff & /puton.
Media Fallback URL
An optional remote CDN or GitHub raw base URL used for clothing preview thumbnails when a local NUI asset is missing. Leave it as '' to use local previews and icon fallbacks only.
Config.MediaUrl = 'https://raw.githubusercontent.com/kartik1410/kartik-clothing-images/main/preview'The default points at the public image repository:
Base-game preview thumbnails for every component, prop, overlay, and tattoogithub.com[!TIP] Fork or clone that repository, add your own addon clothing shots, and point
Config.MediaUrlat your raw URL. Keep the folder layout identical, the UI builds paths, it does not search.
🗂️ Required Folder & File Format
Images are looked up at:
<Config.MediaUrl>/<gender>/<folder>/<drawable>.webp -- texture 0
<Config.MediaUrl>/<gender>/<folder>/<drawable>_<texture>.webp -- texture 1 and up| Segment | Values |
|---|---|
<gender> | male or female |
<folder> | 0–11 for a component id, prop_0 … prop_7 for a prop, overlay_0 … overlay_12 for a head overlay, tattoo_ZONE_TORSO and friends for tattoos |
<drawable> | The drawable index, e.g. 19 |
<texture> | The texture index, omitted entirely for texture 0 |
preview/male/11/19.webp -- Tops, drawable 19, first colour
preview/male/11/19_2.webp -- Tops, drawable 19, third colour
preview/female/prop_0/4.webp -- Hats, drawable 4
preview/male/overlay_1/3.webp -- Facial hair, style 3[!WARNING] Texture 0 carries no suffix. There is no
19_0.webpanywhere. Naming the first colour19_0.webpmakes it 404 and show as a blank card, while every other colour of the same garment loads correctly.
[!TIP] Never used GitHub before? Hosting Your Own Preview Images walks through it from making an account to uploading with GitHub Desktop, no command line needed.
The same layout works locally in the resource's own preview/ folder, the UI tries nui://kartik-clothing/preview/... first and falls back to Config.MediaUrl only when that misses. Use /takeshots to generate correctly named shots for your own addon clothing.
Locale & Debug
Config.Locale = 'en' -- picks the file in locales/
Config.Debug = false -- verbose console output💪 Arms & Compatibility
These four keys decide how much the script does for a player when they put a top on. See Garment Compatibility.
-- Read the arms GTA ships with a garment and apply them automatically, so
-- sleeves always match. Base-game clothing only - addon clothing has no such
-- metadata to read.
Config.SmartArms = false
-- Arms an admin deliberately paired with a garment via /setarms or the in-shop
-- editor. These are not a guess, so they apply even with SmartArms off - which
-- is the entire point for addon clothing the game knows nothing about.
Config.AuthoredArms = true
-- The GOES WITH side panel, showing undershirts, gloves and chains that match
-- the selected garment. A garment with no data of either kind stays hidden.
Config.CompatPanel = true
-- Whether admins may author compatibility from inside the shop. Off means the
-- editor button never appears and the write callbacks refuse everyone; rows
-- already in kc_item_compat still apply.
Config.CompatEditor = trueStudio Locations
Where players can open the Custom Garment Design Studio.
Config.Studios = {
{
label = 'Vespucci Design Studio',
coords = vec3(72.29, -1399.1, 29.38),
heading = 250.0,
ped = `s_f_y_shop_mid`,
blip = { sprite = 366, colour = 4, scale = 0.7 },
},
}[!NOTE] Clothing shop locations are not configured here, they are stored in the
kc_shopstable and managed live through/shopmanager.
Pricing Rules & Multipliers
Price for a variation is base + (index * multiplier).
Config.Prices = {
defaultBase = 25,
defaultMultiplier = 2,
components = {
[11] = { base = 50, multiplier = 3 }, -- Tops (Jackets, Shirts)
[8] = { base = 20, multiplier = 2 }, -- Undershirts
[4] = { base = 40, multiplier = 2.5 }, -- Pants
[6] = { base = 35, multiplier = 2 }, -- Shoes
[1] = { base = 30, multiplier = 1.5 }, -- Masks
[7] = { base = 25, multiplier = 1 }, -- Chains/Necklaces
[5] = { base = 45, multiplier = 3 }, -- Bags/Parachutes
[9] = { base = 60, multiplier = 4 }, -- Armor/Vests
[3] = { base = 15, multiplier = 1 }, -- Torso/Gloves
[10] = { base = 25, multiplier = 2 }, -- Decals/Badges
},
props = {
[0] = { base = 20, multiplier = 1.5 }, -- Hats/Caps
[1] = { base = 15, multiplier = 1 }, -- Glasses
[2] = { base = 25, multiplier = 2 }, -- Ears
[6] = { base = 50, multiplier = 5 }, -- Watches
[7] = { base = 30, multiplier = 2 } -- Bracelets
}
}Camera Framing
Field of view and the distance/height the camera sits at for each zoom stop.
Config.Camera = {
fov = 40.0,
lateralRatio = 0.0, -- 0.0 = centered framing
offsets = {
head = { z = 0.65, dist = 0.95 },
torso = { z = 0.20, dist = 1.65 },
legs = { z = -0.35, dist = 1.75 },
feet = { z = -0.75, dist = 1.25 },
full = { z = 0.0, dist = 2.40 },
},
default = { z = 0.0, dist = 2.40 }
}🧑 Ped Catalog & Change Rules
Config.Peds is a declaration only, listing a ped here makes it available, and it becomes locked the moment you map it to a Tebex package in /shopmanager. See Ped Catalog & Unlocks.
Config.Peds = {
{ model = 'mp_m_freemode_01', label = 'Male', gender = 'male', freemode = true },
{ model = 'mp_f_freemode_01', label = 'Female', gender = 'female', freemode = true },
{ model = 'g_m_m_armgoon_01', label = 'Goon', gender = 'male' },
{ model = 'u_m_y_zombie_01', label = 'Zombie', gender = 'male' },
{ model = 'a_m_y_hipster_01', label = 'Hipster', gender = 'male' },
}| Key | Default | Description |
|---|---|---|
Config.PedsShowLocked | true | Show locked peds greyed out rather than hiding them. |
Config.PedChangeCooldown | 86400 | Seconds between ped changes per citizen. 0 disables the cooldown. |
Config.PedsAllowGenderSwap | false | Whether a change may cross gender. |
Config.PedChangeFee | 0 | Bank charge per change. 0 disables it. |
Config.PedChangeLogToConsole | true | Also print each change (it is always written to kc_ped_changes). |
Config.PedShopOwnersOnly | true | Only players who own a ped unlock can open a Ped Changer at all. |
Config.PedAdminBypass | false | Whether admins skip the unlock, cooldown and gender rules. |
Config.PedUnlocksAreSingleUse | true | An unlock is spent the moment the ped is applied; buying the package again grants a fresh change. |
Config.PedsOpenToAll | false | Turns the Ped Changer into an open wardrobe, anyone may open it and switch to any ped that carries no Tebex package, as often as the cooldown and fee allow. Sold peds still need and still spend their unlock. |
Config.PedShopTabs | see below | Which tabs the Ped Changer opens besides the ped list. |
[!NOTE] These rules apply to a citizen who already has a saved character. The first character creation is always free.
Ped Changer Tabs
The Ped Changer is a full appearance session, not just a model picker: pick a body, then set its face, hair and skin in the same visit.
Config.PedShopTabs = { 'ped', 'heritage', 'face', 'hair', 'beard', 'makeup', 'skin' }Tab names are the ones listed under Ped Surgery below. 'ped' is the model list itself.
[!TIP] Tabs that need a freemode body,
heritage,face,beard,makeup,skin, are dropped automatically while a story ped is selected, because head blend and overlays do nothing on one. You don't need to manage that yourself.
[!WARNING]
Config.PedsOpenToAll = truereverses the rule the rest of this section is built on, that changing body is an identity change you pay for once. Combined with the appearance tabs above it turns the Ped Changer into a walk-in character editor. Turn it on for a server where the ped is a costume; leave it off where the ped is a face.
💉 Ped Surgery (shared/config_surgery.lua)
Surgeons change a patient's ped for in-game bank money. Off by default. Tebex peds are never offered. See Ped Surgery for the full flow.
| Key | Default | Description |
|---|---|---|
Enabled | false | Turns surgery on. |
Jobs | { 'ambulance' } | Jobs allowed to operate. |
RequireOnDuty | true | Surgeon must be on duty. Set false without a duty system. |
MinPrice / MaxPrice | 5000 / 100000 | Price range the surgeon can charge. |
PayTo | 'society' | 'society' (falls back to the surgeon's bank) or 'surgeon'. |
SocietyAccount | nil | Account to pay; nil uses the surgeon's job name. |
MaxDistance | 5.0 | Surgeon to patient distance, checked on offer and payment. |
OfferTimeout | 30 | Seconds to accept. |
SessionTimeout | 600 | Seconds to choose and pay. |
AllowGenderSwap | false | Allow cross-gender surgery. |
UseCooldown | true | Apply Config.PedChangeCooldown to surgery. |
Tabs | all nine | What the patient may change once the surgery starts. |
Surgery Tabs
A surgery is a full character re-edit by default. The one price covers every tab, and nothing picked inside it is charged through the clothing cart.
Tabs = {
'ped', 'heritage', 'face', 'hair', 'beard', 'makeup', 'skin', 'clothing', 'tattoos',
}| Tab | Opens |
|---|---|
ped | The model swap itself |
heritage | Mother, father, third parent, skin tone, genetic mix |
face | Face morph sliders and eye colour |
hair | Hair style and colour |
beard | Facial hair, eyebrows and chest hair |
makeup | Makeup, blush, lipstick |
skin | Blemishes, ageing, complexion, sun damage, freckles, body blemishes |
clothing | The full apparel wardrobe |
tattoos | Every tattoo zone |
Trim the list to sell something narrower. An empty list falls back to { 'ped' }.
💇 Player Styling (shared/config_styling.lua)
One player dresses another, inside a shop, with the shop type deciding which tabs open. Off by default. See Player to Player Styling for the full flow.
| Key | Default | Description |
|---|---|---|
Enabled | false | Turns player styling on. |
Jobs | {} | Jobs allowed to be the stylist. Empty means anybody may. |
RequireOnDuty | false | Stylist must be on duty. Leave false without a duty system. |
MinPrice / MaxPrice | 0 / 5000 | Price range. Both 0 makes styling free and skips the prompt. |
MaxDistance | 3.0 | How close the two must stay, re-checked on every pick. |
OfferTimeout | 30 | Seconds the client has to accept. |
SessionTimeout | 900 | Seconds the stylist has to work. |
Tabs | see below | Which tabs each shop type opens. |
Tabs = {
clothing = { 'clothing' },
barber = { 'hair', 'beard', 'makeup', 'skin' },
tattoos = { 'tattoos' },
wardrobe = { 'clothing' },
}[!WARNING] A shop type missing from
Tabshosts no styling at all, which is whypedis absent. A stylist picks your clothes, not your body, and the server stripspedfrom any list that names it.
🔒 Item Locks & Restrictions
The locks themselves are not configured here, you author them in the LOCK EDITOR inside any clothing shop (or with /lockitem · /lockworn), and they are stored in kc_item_locks. See Access Control & Blacklists for the full picture and Item Locks for the walkthrough.
These two keys only change how existing locks behave:
| Key | Default | Description |
|---|---|---|
Config.ItemLocksAdminBypass | false | Whether admins may wear restricted garments. Off by default so what staff see is what players get. |
Config.ItemLocksShowLocked | true | Whether a restricted garment is greyed out in the grid (true) or hidden entirely (false). The server strips it on save either way. |
🎨 Colour Swatch Palettes
Config.HairColors: 64 HEX definitions matching GTA V's hair dye swatches (Jet Black, Ash Blonde, Platinum, Auburn, Pastel Pink, Neon Cyan, Lime Green…).Config.MakeupColors: 64 HEX definitions for lipstick, eyeshadow, blush and face paint overlays.
Each entry is { id = <game index>, name = '<label>', hex = '#rrggbb' }. The id must stay aligned with the game's palette index; the name and hex are display only.
🧬 Character Creator Data
| Key | Description |
|---|---|
Config.Heritage | Mothers (22 entries) and Fathers (25 entries) available in the heritage blender, as { id, name }. |
Config.FaceFeatures | The 20 face structure sliders, each with a group (Nose, Brows & Eyes, Cheeks & Jaw, Mouth & Lips, Chin & Neck) used to bucket them in the UI. |
Config.CreatorKeepCharacterGender | Default true. When a multicharacter opens the creator for a new character, the creator stays on the gender picked there: peds of the other gender are hidden, and the Model tab is skipped when only one body is left. Set to false to let new characters pick either body. |
Config.HeadOverlays | The 12 head overlays and their colorType, 0 none, 1 hair-colour palette, 2 makeup palette. |
🎭 Interface Theme (shared/config_theme.lua)
Recolours every screen in the resource. Setting accent alone is usually enough; anything you leave commented out keeps its shipped default. Restart the resource to apply.
To try colours before committing, use /shopmanager → Interface Theme: it previews live, for you only, and generates this block for you to paste. See Interface Theming.
Config.Theme = {
accent = '#ffffff', -- Primary action, active tab, selection border, header highlight
canvas = '#090a0e', -- Surfaces, darkest to lightest
panel = '#111318',
raised = '#181b22',
input = '#0b0c10',
line = '#22262f',
lineSoft = '#16181f',
text = '#f0f2f5', -- Text colours
text2 = '#b8c0ce',
text3 = '#8a93a6',
ok = '#3d8c75', -- Status colours
warn = '#b88d3d',
bad = '#a33c30',
radius = 12, -- Corner rounding in px
}Ready-made accents: Azure #4f8ff7, Sky #38bdf8, Teal #2dd4bf, Emerald #34d399, Violet #a78bfa, Rose #fb7185, Amber #f0b24b, Brass #c5a880, Crimson #ef4444, White #ffffff.
🎒 Item-Based Clothing (shared/config_inventory.lua)
Turns clothing into inventory items. See Inventory Clothing Items.
[!IMPORTANT] When
Config.Inventory.Enabled = true, you must registerclothing_item(or slot-specific item names) in your inventory system (ox_inventory,qb-core,qs-inventory,codem-inventory). See the Item-Based Clothing Installation Guide for exact item registration code snippets.
Config.Inventory = {
Enabled = true, -- Master toggle for item-based clothing
RemoveOnEquip = true, -- Consume the item once it is on the ped
UseGenericItem = true, -- One item for everything, vs slot-specific item names
DefaultItem = 'clothing_item',
AutoEquip = true, -- Equip immediately on use
ToggleEquip = true, -- Using it again takes the piece back off
PinkFrogSync = 'auto', -- PinkFrog ox_inventory v3 clothing slot sync: 'auto', true or false
ProgressBar = {
Enabled = true,
Duration = 2000, -- ms
AnimDict = 'clothingtie',
AnimClip = 'try_tie_neutral_a',
},
Items = {
['clothing_item'] = { label = 'Clothing Item', description = 'Generic wearable clothing piece' },
['mask'] = { slot = 1, isProp = false, label = 'Mask' },
['gloves'] = { slot = 3, isProp = false, label = 'Torso / Gloves' },
['pants'] = { slot = 4, isProp = false, label = 'Pants' },
['bag'] = { slot = 5, isProp = false, label = 'Bag / Parachute' },
['shoes'] = { slot = 6, isProp = false, label = 'Shoes' },
['accessory'] = { slot = 7, isProp = false, label = 'Accessory' },
['undershirt'] = { slot = 8, isProp = false, label = 'Undershirt' },
['armor'] = { slot = 9, isProp = false, label = 'Body Armor' },
['torso'] = { slot = 11, isProp = false, label = 'Jacket / Top' },
['hat'] = { slot = 0, isProp = true, label = 'Hat / Cap' },
['glasses'] = { slot = 1, isProp = true, label = 'Glasses' },
['earring'] = { slot = 2, isProp = true, label = 'Ear Accessory' },
['watch'] = { slot = 6, isProp = true, label = 'Watch' },
}
}PinkFrogSync keeps PinkFrog's ox_inventory v3 clothing slots in sync. See PinkFrog Inventory.
Bare Defaults
The drawable a slot falls back to when a piece is removed, with /takeoff, when unequipping an item, or when a locked garment is stripped on save. Set per body, because drawable ids do not line up between the two peds.
Config.BareDefaults = {
male = {
components = { [1] = 0, [3] = 15, [4] = 14, [5] = 0, [6] = 1, [7] = 0, [8] = 15, [9] = 0, [10] = 0, [11] = 15 }
},
female = {
components = { [1] = 0, [3] = 15, [4] = 15, [5] = 0, [6] = 35, [7] = 0, [8] = 14, [9] = 0, [10] = 0, [11] = 15 }
}
}Glove arms (Config.GloveArms)
Optional. Lists which arms drawables are gloves for /takeoff gloves, and which bare arms each one swaps to, per gender. Key = arms drawable with gloves, value = bare arms drawable for the same top.
Config.GloveArms = {
male = { [20] = 0, [21] = 1 },
female = {}
}Leave a gender empty ({}) to use the default: arms 0 to 15 count as bare, anything else is taken off to the [3] value in Config.BareDefaults.
🎨 Design Studio Configuration (shared/config_designer.lua)
Limits
Enforced server-side and mirrored in the UI.
Designer.Limits = {
maxLayers = 24, -- Graphic layers per design
maxNameLength = 32,
maxPendingPerPlayer = 3, -- Designs awaiting moderation
maxOwnedPerPlayer = 25, -- Approved + live designs
maxUploadBytes = 8 * 1024 * 1024, -- 8 MB ceiling per uploaded file
canvasMax = 2048, -- A base's canvas must match its template texture, or it upscales at bake
submitBytesPerSec = 1024 * 1024, -- Latent-event pacing for a submit
}Credits
A credit is one design submission. Every citizen receives StarterAmount once, the first time anything asks for their balance. See Tebex Monetization & Design Credits.
Designer.Credits = {
Enabled = true, -- false = submissions cost no credits
StarterAmount = 3, -- Free credits, granted once per citizen
CostPerSubmit = 1,
Tebex = {
Enabled = false, -- Packages are mapped to credit amounts in /shopmanager
},
}Price
Designer.Price = {
garment = 2500, -- In-game currency charged to publish a garment
}Base Garments
Each entry is a garment shell a player can design on: its mesh, its blank template, the texture target the studio binds its live preview to, and where the baked result lands.
Designer.Bases = {
{
id = 'tee_m',
label = 'T-Shirt',
kind = 'garment',
gender = 'male',
componentId = 11,
canvas = { w = 1024, h = 1024 },
txd = 'mp_m_freemode_01_kartikbase^jbib_diff_000_a_uni',
txn = 'jbib_diff_000_a_uni',
blank = 'assets/bases/tee_m/blank.png',
ydd = 'assets/bases/tee_m/mp_m_freemode_01_kartikbase^jbib_000_u.ydd',
collection = 'kartikbase',
pack = { drawable = 0, slots = 1 },
},
-- pant_m, jacket_m, shirt_m, shoes_m ...
}Shipped bases: tee_m (T-Shirt, 1024²), pant_m (Pants, 2048²), jacket_m (Jacket, 2048²), shirt_m (Shirt, 2048²), shoes_m (Shoes, 2048²).
| Field | Description |
|---|---|
id | Referenced by submitted designs; do not rename once designs exist. |
componentId | The ped component the baked garment occupies. |
canvas | Must match the template texture's resolution, or the artwork upscales at bake time. |
txd / txn | The texture dictionary and name the live studio preview replaces. |
blank / ydd | The blank template PNG and the mesh used for the 3D preview. |
collection / pack | Which streamed collection the bake writes into, and its drawable slot. |
[!WARNING] Female bases (
top_f,top2_f) ship commented out. The apparel meta, collection.ymtand baked filenames are male-ped only, so a female design would bake but never be wearable.
Designer.getBase(id) returns a base table by id, and is available to both client and server scripts.
💉 Tattoo Configuration (shared/config_tattoos.lua)
Config.Tattoos holds the native GTA V tattoo overlays, keyed by zone:
[!NOTE] Tattoos have no lock layer yet, job/gang-restricted or blacklisted tattoos are planned but not in yet. Today the only way to take a tattoo out of circulation is to delete or comment out its entry here. See Access Control.
ZONE_TORSO(chest, back, stomach)ZONE_HEAD(head, face, neck)ZONE_LEFT_ARM/ZONE_RIGHT_ARMZONE_LEFT_LEG/ZONE_RIGHT_LEG
Each entry carries the overlay name, a display label, the male and female overlay hashes, its zone, and the collection it streams from (mpbiker_overlays, mpsmuggler_overlays, mpairraces_overlays, …):
{
name = "TAT_AR_000",
label = "Turbulence",
hashMale = "MP_Airraces_Tattoo_000_M",
hashFemale = "MP_Airraces_Tattoo_000_F",
zone = "ZONE_TORSO",
collection = "mpairraces_overlays"
}🗂️ Categories (shared/categories.lua)
Controls which categories appear in each interface, and the order they appear in:
| Table | Used by |
|---|---|
Categories.Clothing | The apparel shop grid. |
Categories.Barber | The barber & hair studio. |
Categories.Tattoos | The tattoo parlor. |
Categories.Peds | The ped picker. |
Categories.Creator | The character creator's tabs. |
Categories.List is an alias of Categories.Clothing, kept for older integrations.
[!TIP]
shared/categories.luadecides which categories appear in each interface. Every store of the same type shows the same list.kc_shopshas acategoriescolumn, but the shop UI does not read it yet, so per-store category lists are not supported today.