Kartik Scripts

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/:

FileWhat it controlsRestart needed
shared/config.luaCommand access, arms & compatibility behaviour, studio locations, base prices, camera, colour swatches, character creator data, ped rules, item-lock behaviour.Yes
shared/config_inventory.luaItem-based clothing, equip animation, item→slot map, bare defaults.Yes
shared/config_theme.luaInterface colours and corner rounding.Yes
shared/config_designer.luaDesign studio limits, credits, price, and base garments.Yes
shared/config_tattoos.luaThe full tattoo catalog.Yes
shared/config_surgery.luaPed surgery: surgeon jobs, price range, payout, timeouts.Yes
shared/categories.luaWhich 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/citizenLOCK EDITOR in any clothing shop → kc_item_locks, see Access Control
Correct arms and "GOES WITH" pairings for addon garmentsCOMPAT 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)

KeyTypeWhat it does
Config.AdminOnlyCommandsboolGates the appearance/shop command names to admins.
Config.TakeoffCommandsboolRegisters /takeoff and /puton; false leaves them to another script.
Config.MediaUrlstringRemote fallback base URL for garment thumbnails.
Config.LocalestringWhich file in locales/ to use.
Config.DebugboolVerbose console output.
Config.SmartArmsboolAutomatic sleeve matching.
Config.AuthoredArmsboolPrefer admin-authored arm pairings over the heuristic.
Config.CompatPanelboolShow the "GOES WITH" panel to players.
Config.CompatEditorboolAllow admins to author compatibility in-game.
Config.StudiostableDesign Studio locations.
Config.PricestableBase price and multiplier per component/prop slot.
Config.CameratableFraming distances and FOV per view.
Config.HairColors / Config.MakeupColorstableThe 64-entry colour swatch palettes.
Config.Heritage / Config.FaceFeatures / Config.HeadOverlaystableCharacter creator data.
Config.PedstableThe custom ped catalog.
Config.PedsShowLockedboolGrey out locked peds (true) or hide them.
Config.PedShopOwnersOnlyboolOnly unlock holders may open a Ped Changer.
Config.PedUnlocksAreSingleUseboolAn unlock is spent when the ped is applied.
Config.PedsAllowGenderSwapboolAllow swapping to the other body.
Config.CreatorKeepCharacterGenderboolNew characters keep the gender picked in the multicharacter.
Config.PedChangeCooldownnumberCooldown between ped changes.
Config.PedChangeFeenumberBank charge per ped change; 0 disables.
Config.PedChangeLogToConsoleboolAlso print ped changes to the console.
Config.PedAdminBypassboolAdmins skip unlock/cooldown/gender rules.
Config.ItemLocksShowLockedboolGrey out restricted garments (true) or hide them.
Config.ItemLocksAdminBypassboolAdmins 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 /puton

Restart 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.MediaUrl at 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
SegmentValues
<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.webp anywhere. Naming the first colour 19_0.webp makes 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 = true

Studio 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_shops table 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' },
}
KeyDefaultDescription
Config.PedsShowLockedtrueShow locked peds greyed out rather than hiding them.
Config.PedChangeCooldown86400Seconds between ped changes per citizen. 0 disables the cooldown.
Config.PedsAllowGenderSwapfalseWhether a change may cross gender.
Config.PedChangeFee0Bank charge per change. 0 disables it.
Config.PedChangeLogToConsoletrueAlso print each change (it is always written to kc_ped_changes).
Config.PedShopOwnersOnlytrueOnly players who own a ped unlock can open a Ped Changer at all.
Config.PedAdminBypassfalseWhether admins skip the unlock, cooldown and gender rules.
Config.PedUnlocksAreSingleUsetrueAn unlock is spent the moment the ped is applied; buying the package again grants a fresh change.
Config.PedsOpenToAllfalseTurns 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.PedShopTabssee belowWhich 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 = true reverses 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.

KeyDefaultDescription
EnabledfalseTurns surgery on.
Jobs{ 'ambulance' }Jobs allowed to operate.
RequireOnDutytrueSurgeon must be on duty. Set false without a duty system.
MinPrice / MaxPrice5000 / 100000Price range the surgeon can charge.
PayTo'society''society' (falls back to the surgeon's bank) or 'surgeon'.
SocietyAccountnilAccount to pay; nil uses the surgeon's job name.
MaxDistance5.0Surgeon to patient distance, checked on offer and payment.
OfferTimeout30Seconds to accept.
SessionTimeout600Seconds to choose and pay.
AllowGenderSwapfalseAllow cross-gender surgery.
UseCooldowntrueApply Config.PedChangeCooldown to surgery.
Tabsall nineWhat 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',
}
TabOpens
pedThe model swap itself
heritageMother, father, third parent, skin tone, genetic mix
faceFace morph sliders and eye colour
hairHair style and colour
beardFacial hair, eyebrows and chest hair
makeupMakeup, blush, lipstick
skinBlemishes, ageing, complexion, sun damage, freckles, body blemishes
clothingThe full apparel wardrobe
tattoosEvery 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.

KeyDefaultDescription
EnabledfalseTurns player styling on.
Jobs{}Jobs allowed to be the stylist. Empty means anybody may.
RequireOnDutyfalseStylist must be on duty. Leave false without a duty system.
MinPrice / MaxPrice0 / 5000Price range. Both 0 makes styling free and skips the prompt.
MaxDistance3.0How close the two must stay, re-checked on every pick.
OfferTimeout30Seconds the client has to accept.
SessionTimeout900Seconds the stylist has to work.
Tabssee belowWhich tabs each shop type opens.
Tabs = {
    clothing = { 'clothing' },
    barber   = { 'hair', 'beard', 'makeup', 'skin' },
    tattoos  = { 'tattoos' },
    wardrobe = { 'clothing' },
}

[!WARNING] A shop type missing from Tabs hosts no styling at all, which is why ped is absent. A stylist picks your clothes, not your body, and the server strips ped from 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:

KeyDefaultDescription
Config.ItemLocksAdminBypassfalseWhether admins may wear restricted garments. Off by default so what staff see is what players get.
Config.ItemLocksShowLockedtrueWhether 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

KeyDescription
Config.HeritageMothers (22 entries) and Fathers (25 entries) available in the heritage blender, as { id, name }.
Config.FaceFeaturesThe 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.CreatorKeepCharacterGenderDefault 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.HeadOverlaysThe 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 register clothing_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²).

FieldDescription
idReferenced by submitted designs; do not rename once designs exist.
componentIdThe ped component the baked garment occupies.
canvasMust match the template texture's resolution, or the artwork upscales at bake time.
txd / txnThe texture dictionary and name the live studio preview replaces.
blank / yddThe blank template PNG and the mesh used for the 3D preview.
collection / packWhich streamed collection the bake writes into, and its drawable slot.

[!WARNING] Female bases (top_f, top2_f) ship commented out. The apparel meta, collection .ymt and 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_ARM
  • ZONE_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:

TableUsed by
Categories.ClothingThe apparel shop grid.
Categories.BarberThe barber & hair studio.
Categories.TattoosThe tattoo parlor.
Categories.PedsThe ped picker.
Categories.CreatorThe character creator's tabs.

Categories.List is an alias of Categories.Clothing, kept for older integrations.

[!TIP] shared/categories.lua decides which categories appear in each interface. Every store of the same type shows the same list. kc_shops has a categories column, but the shop UI does not read it yet, so per-store category lists are not supported today.

On this page