ATY Scripts Logo
ATY Scripts/Doku/Clothing/Clothing

Clothing

Clothing

ATY Clothing is the character creator, the clothing, barber and tattoo shops and the wardrobe for a FiveM server running QBCore or ESX. One menu does all of it, and the menu is built around the character: categories follow the body, you can click a point on the character to open the matching category, pieces that belong together are fitted from GTA's own data, every changed item has its own price, and the whole thing works from a mouse, a keyboard or a controller.

This page is the full guide: what it does, how to install it, how every part behaves and every setting that exists. The other pages go deeper on two topics:

  • Integrations — exports, events, hooks, menu types and category keys, and how to plug it into a multicharacter, housing or motel script
  • How To Take Images — the photo studio that makes the item pictures
  • Clothes as Items — wearable clothing items with aty_inventory and other inventories

What it does

Feature In short
Character creator Model, sex, heritage, skin tone, face shape, overlays, hair, apparel and tattoos in one menu
Shops 27 clothing, barber and tattoo shops on the map, plus shops locked to a job
Wardrobe Players save, wear and delete their own outfits
Presets Admins save character presets and an outfit catalogue (casual, work, activity) from inside the menu; a work outfit can be limited to a job
Match pieces A jacket brings its own arms and a suit its shirt, read from GTA's shop data
Price per item Every changed clothing slot has its own price, paid from cash or bank; each change can be undone or compared on its own
Hair fade Every freemode hairstyle gets its own scalp texture automatically; players can pick another by hand
Tattoo zones Head, torso, each arm and each leg; picking a zone moves the camera there, and clothes come off for the visit and return afterwards
Clothes as items With aty_inventory the skin and the worn items stay one story: every save puts the pieces on as items, and taking one off leaves the slot bare
Dedicated menus Gloves, belts and other accessories carved out of GTA's fixed slots
Keyboard and controller Every part of the menu works without a mouse
Character codes A whole character copied out as one code and pasted back in
Theme editor Admins restyle the menu live for every player and share the look as a code
Photo previews Items show a picture instead of a number
Shop ownership Players buy a shop, pay weekly rent and withdraw its takings
Languages English and Turkish

Requirements

Resource Needed Why
oxmysql Yes Database
ox_lib Yes Prompts, the shop-management menu and dialogs
PolyZone Yes Loaded by the manifest; zones only use it with Config.UsePolyZone = true
qb-core or es_extended Yes Set Config.Framework to match
ox_target or qb-target Optional Only with Config.DisplayMethod = "target"
aty_inventory Optional Only for clothes as items
aty_lib Optional Only names the shop blips on aty_escmenu's map
A Fivemanage API key Optional Only for the photo studio

The photo studio does not need screenshot-basic; it reads the game's frames itself.

Installation

1. Extract

Place the resource in your resources folder and keep the name aty_clothing — the scripts call their own exports by that name.

2. Import the SQL

Run aty_clothing.sql. It creates player_outfits (wardrobe outfits) and aty_clothing_shops (shop owners, balances and rent). Characters themselves stay where your framework keeps them: playerskins on QBCore, the skin column of users on ESX.

`CREATE TABLE IF NOT EXISTS` leaves an existing table as it is. If another clothing script already made a `player_outfits` table, it may lack the `skin` and `outfitId` columns this script writes, and every wardrobe save fails with `Unknown column 'skin'`. See Troubleshooting for the one-line fix.

3. Choose the framework

Set Config.Framework in config.lua to "qb" or "esx".

4. Start order

ensure oxmysql
ensure ox_lib
ensure PolyZone
ensure qb-core        # or es_extended
ensure aty_inventory  # optional: clothes as items (any position; it is looked up when a player buys)
ensure aty_clothing
Start the framework **before** `aty_clothing`. On QBCore the server side looks for `qb-core` the moment it loads; if it is not running yet, the resource fails to start. Start `ox_target` / `qb-target` before it too if you use them.

5. Grant admin

add_ace group.admin aty_clothing.admin allow
# or one player directly:
add_ace identifier.license:YOUR_LICENSE_HERE aty_clothing.admin allow

Framework admin groups count as well — see Permissions.

6. Photo studio key (optional, for item pictures)

set aty_clothing_fivemanage "YOUR_FIVEMANAGE_API_KEY"
Use **`set`**, never `setr`. `setr` replicates the value to every player, which would hand them your Fivemanage key. The key does not go in `config.lua` either — that file is sent to every client. The rest of the setup is on How To Take Images.

Verifying the install

Check Expected
Server console on start No errors from aty_clothing
/skin self creator as an admin The character creator opens
Walk into a shop marked on the map A prompt; E opens the shop
clothingcompat in the server console A status line for the piece-matching data
Buy a mask, or save one in the creator, with aty_inventory running A mask is worn as an item (clothingitems status shows the setup; see clothes as items)

Updating

Copy the new files over the old folder, then run refresh and restart aty_clothing. A release never contains the files the server writes, so copying over keeps your theme, presets, matching data and photo records. If you delete the old folder first, back those files up.

A tour of the menu

The menu is the same everywhere; what changes is which categories a shop offers.

The stage. The character stands in front of a camera. Left-drag orbits the camera, right-drag turns the character, the wheel zooms towards the cursor and middle-drag moves the camera up and down. Small markers sit on the body: clicking one opens the matching category and moves the camera there. With Config.Camera.FocusOnCategory = true, picking a category from the list moves the camera too.

The categories. A rail lists what the shop offers — for example Face & body, Face adjust, Overlays, Hair, Apparel and Tattoos in the creator. Apparel is split into shelves: Outfits, Clothing, Upper body, Hand & wrist and Head.

The rows. Each setting is a row: a picker with a style number and a texture number, a slider or a colour grid. With Show Preview on, pickers show a picture of every item instead of a number. A changed row shows its own price in a shop, and carries two small buttons: Undo puts that one row back, and Hold to compare shows the old value for as long as you hold it.

The hint bar. The bar at the bottom follows the device you used last (mouse, keyboard or controller) and holds two switches: Show Preview and Match pieces. Both are remembered. Export and Import at the top right copy the character as a code and paste one back in.

Leaving. Esc goes back one step and then leaves; leaving a shop without buying puts the character back as it was. Buying asks for confirmation first.

Features in depth

Character creator

The creator is the menu a new character sees, and the menu /skin <id> creator opens for an admin. It offers every category and is free to use.

Category What is in it
Ped Selector The model list (shared/peds.lua), only when Config.PedSelector.Enabled is on
Face & body Sex, character presets, heritage (mother, father, how much of each), skin tone and eye colour
Face adjust Nose, brow, cheeks, eyes, lips, jaw, chin and neck, each from -1.0 to 1.0
Overlays Blemishes, ageing, makeup, blush, complexion, sun damage, lipstick, moles and body blemishes
Hair Hair and its colours, eyebrows, beard, chest hair and the hair fade
Apparel Every clothing slot and prop
Tattoos The six tattoo zones

/skin <id> creator charges only when the player is within 30 m of a shop. Hand a new character to the creator from a multicharacter script by following the example in Integrations.

Clothing shops

A clothing shop offers a wardrobe shelf and the Apparel category. The player changes what they like and presses Buy; the shop charges once per changed slot.

  • One fee per slot. A garment's model and texture count as one change, and the arms a jacket brings with it are not charged separately
  • Cash or bank. The player chooses in the menu; each shop's takings are credited to the shop if it has an owner (see Shop ownership)
  • Face, hair, makeup and tattoos have no price in a clothing shop
  • Undo and compare work per row, so a player can reject one change without losing the others
  • Nothing is bought until Buy. Leaving restores the character

The server works out the total from the character's saved clothes and the new clothes, so the figure in the menu cannot be tampered with. A player with no saved clothes to compare against pays the flat Config.ShopSystem.ClothingPrice.

Matching pieces

GTA decides which arms a torso needs and which undershirts fit a jacket, but it keeps that in shop data rather than in the clothing itself. aty_clothing reads that data and uses it twice:

  • Forced pieces. Pick a jacket and the arms that go with it are set for you
  • Filtered lists. The undershirt list shows only the shirts that fit the jacket you wear

The first time an admin opens the menu, the data is read in the background and kept in compat.json; it is read again when the game build changes or with /clothingcompat, and the console confirms every read. Players can switch Match pieces off in the hint bar, and then nothing is forced or filtered. For addon clothing, which GTA has no data for, fill in Config.Compatibility by hand.

Barber and hair fade

The barber offers Hair and Overlays: hair style and colours, eyebrows, beard, chest hair, makeup, blush and the other face overlays.

GTA does not put the scalp texture of short and shaved styles in the hair component. It is a separate "ped decoration", and without it a buzz cut or shaved sides show bare skin. With Config.AutomaticFade = true, every style of the freemode models gets its own scalp texture the moment it is picked, with no setup.

Players can overrule it in Hair › Hair Fade:

Choice Result
Automatic The fade that belongs to the hairstyle
None Hair only, no scalp texture
A design (126 of them) That fade, whatever the style

The choice is saved with the character (hair_fade), travels in character codes and presets, and is applied again whenever the character loads. Set Config.AutomaticFade = false to draw the hair component alone, as older versions did.

Tattoo shop

A tattoo shop offers the Tattoos category. It has six zones: head, torso, left and right arm, left and right leg. Picking a zone moves the camera to that part of the body, and a tattoo can be applied with an opacity.

GTA draws tattoos under clothes only where the skin shows, so the shop takes off the jacket, shirt, trousers and arms pieces for the visit. They are remembered, and come back:

  • when the player switches to another category
  • when they press Show clothes in the tattoo menu (a second press hides them again)
  • when they close the menu, however they close it

Wardrobe

A wardrobe is a place on the map (and, for jobs, a locker) where a player saves, wears and deletes their own outfits.

  • Saving. The player names the outfit and saves it. The name must be unique per character
  • What is in an outfit. Clothes and accessories only; never face, hair or tattoos
  • The limit. Config.Wardrobe.MaxOutfits (20 by default) per character
  • Wearing. The wardrobe and the creator are free
  • Confirmed saves. The wardrobe waits for the server to confirm the save. If it fails, the name stays in the box and the server console says why (outfit not saved for player …)

A purchase can also offer to keep the outfit it just bought. Outfits live in player_outfits. Wardrobes can be tied to a job with Config.JobWardrobes; the uniforms of a whole job are presets, not wardrobe outfits.

Presets

Presets are the admin's catalogue, built in game. Dress the character, open Face & body › Character presets or Apparel › Outfits (Casual, Work, Activity) and use Save the current look.

  • A character preset stores a face, hair and overlays (a starting point in the creator)
  • An outfit preset stores clothes and props, and belongs to a group: Casual, Work or Activity
  • A work outfit can carry a job and a minimum grade, and then only that job sees it
  • Presets go to presets.json and appear for every player at once; the limit is 200, with names up to 40 characters
  • A preset holding something the blacklist withholds is hidden from that player
  • Wearing a preset in a shop is a normal change: priced and undoable

Presets written in config.lua are built in and cannot be deleted in game. See Presets in the configuration for their format.

Character codes

Export (top right) turns the whole character into one text code and copies it. Import reads a code back and rebuilds that character, with a message when the text is not a character code. A code holds the model, heritage, face, overlays, hair with its fade, clothing, props and tattoos, so it is a way to move a character between servers, to share a look, or to keep a backup. Treat it like the character itself: anyone with the code can wear it.

Clothes as items

On a server where clothes are items, aty_clothing keeps the character's skin, the inventory's worn items and the database as one story, in both directions, with aty_inventory (and a documented path for core_inventory and any other inventory):

  • After every save — a shop purchase, the creator, an admin's /skin, a wardrobe outfit, a login — every clothing slot of the skin is handed to the inventory. A slot without an item gets one made and put straight on, the piece it replaces goes to the bag, and a slot the skin leaves empty takes its worn item off
  • When the player puts a clothing item on or takes one off, the saved skin follows. A piece taken off leaves the slot bare; the clothes the skin had saved do not come back
  • A top remembers its sleeves, and taking one off bares the arms with it
Config.ClothingItems = {
    Enabled = true,
    Inventory = "auto",   -- "auto", "aty_inventory", "core_inventory" or "custom"
    Equip = true,         -- false: a purchase only adds what it sold to the bag
    OnLogin = true,       -- tell the inventory what the skin wears when a player spawns
}

Undershirts, chains, decals, bracelets and arms are not items in aty_inventory and stay part of the skin. clothingitems status and clothingitems sync <id> in the server console show what is set up and run the sync for one player.

The full guide — the model, when each step runs, both sides' settings, the support matrix for other inventories, the custom hook and troubleshooting — is on Clothes as Items.

Photo previews

With Show Preview on, every picker shows a picture of its items instead of a number: clothes, accessories, hair, face types, makeup and the other overlays. An admin takes the pictures once with /clothingphotos. The studio photographs every item on a green screen, cuts the background out and uploads the result to Fivemanage, and the server keeps the list of links. A run can be split between several players' games and each photographs its own part, so a full run finishes faster. See How To Take Images.

Theme editor

/clothingtheme opens the editor over the live menu: colours (accent, panels, text, danger, success, warning), panel opacity, surface contrast, corner roundness, scene darkening and font, plus seven ready-made themes. Save for everyone stores it in theme.json and restyles every player's menu at once. Copy code and Paste code move a theme between servers. Leave with Close at the top of the editor or with Esc; with unsaved changes it asks first, and the menu goes back to the saved theme. Until a theme is saved, the accent comes from Config.UI.Primary ("#69ffec").

Shop ownership

A shop from Config.ShopLocations can have an owner. At the shop, a player presses F6 (or the target option) for the management menu.

  • An unowned shop is bought for PurchasePrice, in cash
  • Clothing sold there goes to the shop's balance; the owner withdraws it minus the commission
  • The owner pays WeeklyRent in cash once it is due. With AutoRentDeduction, every check takes overdue rent from the shop's balance, and a shop whose balance cannot cover it is taken back with its balance cleared
  • Owners, balances and rent are in aty_clothing_shops

Job shops and wardrobes

Config.JobShops are shops that only certain jobs can enter, with a minimum grade, and Config.JobWardrobes are lockers that only certain jobs can open. Job shops draw no map blip. They share the shop menu: a police-only clothing shop is an ordinary shop with jobs = { "police" }.

Blacklist

The blacklist hides values from players who should not wear them, for example a police-only uniform, and the server refuses a purchase or a save that contains one. See Blacklist in the configuration.

Dedicated menus

GTA has twelve fixed clothing slots and no way to add one. Config.Slots carves a menu out of an existing slot, so "Gloves" is the arms slot showing only the drawables you tag, and a belt or a watch strap can be carved the same way. See Dedicated menus.

Commands

Command Who What it does
/skin [id] [type] Admin Opens the menu for a player (id is a server ID or self). type: clothing (default), barber, tattoo or creator
/ped [id] [model] Framework admin Gives a player any ped model
/refreshskin Everyone Reloads your saved appearance — fixes invisible body parts or a desync. Once every 5 seconds
/clothingtheme Admin Opens the theme editor on the live menu
/clothingphotos Admin Opens the photo studio — see How To Take Images
/clothingcompat Admin Reads GTA's "which pieces go together" data again
`/skin` with a shop type is a normal shop visit: the player pays for what changes. Use `creator` for a free edit — it only charges when the player is within 30 m of a shop. From the server console, `skin` takes a player ID; `clothingcompat` and `clothingphotos` print a status report instead.

Permissions

A player is a clothing admin when any of these is true:

Check Framework
ACE aty_clothing.admin Any
Group admin, god or superadmin ESX
Permission admin or god QBCore

The server console always counts. Admins run the admin commands, save and delete presets in the menu and see every job's uniforms; the server checks again on each action. /ped is registered through the framework's command system, so it follows the framework's admin permission or group rather than the ACE.

What the server checks

The menu runs on the player's machine, so everything that costs money or grants something is decided on the server:

  • The price of a purchase is worked out from the character's saved clothes and the new ones; the menu's figure is only a display
  • A purchase or a save containing a blacklisted value is refused
  • Admin actions (presets, the theme, the photo studio) are checked on each call
  • A wardrobe save is checked for a name, the outfit limit and a duplicate name
  • Shop ownership (buying a shop, withdrawing, paying rent) runs on the server

Configuration

Everything lives in config.lua.

General

Key Default What it does
Config.Framework "qb" "qb" or "esx"
Config.DisplayMethod "drawtext" Shop and wardrobe prompt: "target", "3dtext", "drawtext" or "none"
Config.UsePolyZone false true: PolyZone boxes from width, length, minZ, maxZ. false: 2 m around coords
Config.Multicharacter true ESX only. false makes the script load the skin itself on esx:playerLoaded
Config.TriggerPlayerLoadedOnCreation false After the creator saves, fire the framework's player-loaded events
Config.PedSelector.Enabled true Offer the Ped Selector (models in shared/peds.lua) wherever pedSelector is listed
Config.UseScreenFade true Fade to black while the menu opens and closes
Config.HideMinimap true Hide the minimap while the menu is open
Config.AutomaticFade true Give every freemode hairstyle its own scalp texture; see Barber and hair fade
Config.UI.Primary "#69ffec" The accent colour until a theme is saved
Config.DrawText left-centre Position, icon and icon colour of the "drawtext" prompt

"target" uses ox_target when it is running, otherwise qb-target. "none" hides only the prompt — zones and the E key keep working, so you can draw your own (see Integrations).

Hooks

Config.Hooks.OnMenuOpen(menuType, shopData) and Config.Hooks.OnMenuClose(menuType) run when the menu opens and closes, so you can hide a HUD or the chat. menuType is "creator", "clothing", "barber", "tattoo" or "market". The same moments fire two client events for other resources, with no config edit: aty_clothing:client:menuOpened and aty_clothing:client:menuClosed.

Language

Set Locale = 'en' or 'tr' at the top of shared/locale.lua; the translations are in the same file. A typo there no longer stops the resource: the console names the broken line and English is used until you fix it, and missing keys fall back to English. Leave shared/locale.default.lua alone — it is that fallback.

Shops

Config.ShopLocations = {
    [1] = { shopType = "clothing", title = "Clothing Shop", -- shopType: a key of Config.ShopCategories
            coords = vector3(1693.2, 4828.11, 42.07),
            width = 2.0, length = 2.0, minZ = 39.0, maxZ = 46.0 }, -- zone for PolyZone and target
}

Config.JobShops (Enabled, Locations) takes the same fields plus jobs = { "police" } and a minimum grade. Config.Blips sets the sprite, colour, scale and name for clothing, barber and tattoo shops; job shops get no blip.

Public shops and job shops share one ID space when a player walks in: a public shop whose key is also used in `Config.JobShops.Locations` (both start at `[1]` by default) is checked against that job shop's jobs. Give job shops keys the public list does not use, such as `[101]`. The same goes for `Config.Wardrobe` and `Config.JobWardrobes`.

Wardrobes

Config.Wardrobe.Locations uses the same location fields, and MaxOutfits (default 20) caps the saved outfits per character. Config.JobWardrobes adds jobs and grade. A wardrobe holds the player's own outfits: clothes and accessories only, never face, hair or tattoos, and each name once per character. A whole job's uniforms are presets.

What each shop offers

Config.ShopCategories = {
    ["clothing"] = { "wardrobe", "apparel" },
    ["barber"]   = { "hair", "overlays" },
    ["tattoo"]   = { "tattoos" },
    ["market"]   = { "apparel" },
    ["creator"]  = { "pedSelector", "faceBody", "faceAdjust", "overlays", "hair", "apparel", "tattoos" },
}
Key Contains
pedSelector Ped Selector — the model list
faceBody Sex, character presets, heritage, skin tone, eye colour
faceAdjust Nose, brow, cheeks, eyes, lips, jaw, chin, neck
overlays Blemishes, ageing, makeup, blush, complexion, sun damage, lipstick, moles, body blemishes
hair Hair and its colour, eyebrows, beard, chest hair, hair fade
apparel Shelves: Outfits, Clothing, Upper body, Hand & wrist, Head
tattoos Head, torso, left and right arm, left and right leg
wardrobe Saved outfits

Narrow a category with "category:part": "apparel:handWrist" is a jewellery counter, "tattoos:tattooHead" sells head tattoos only. The pre-v3 keys (dna, hairs, clothes, accessories, headTattoo …) still work. All parts and old keys are listed in Integrations.

Dedicated menus

Config.Slots = {
    gloves = {
        control = "arms",          -- the picker it is carved from
        category = "apparel",
        section = "handWrist",     -- Apparel shelf: clothing, upperBody, handWrist, head
        label = "ui_slot_gloves", description = "ui_slot_gloves_desc", -- locale keys or plain text
        icon = "righthand",
        male = {}, female = {},    -- drawables: numbers or { from, to } ranges
    },
}

control is arms or any clothing or prop picker ending in _1 (torso_1, helmet_1 …). Tagged pieces leave the original menu unless hideFromBase = false; none adds a "nothing" entry (0 for most slots, -1 for props). An empty list hides the menu, and gloves ships empty because the numbers depend on your clothing — photograph the slot to find them. Two pieces on one slot still cannot be worn together; that is the game's rule.

Prices

Config.ClothingPrices = {
    Default = 100,
    Slots = {
        tshirt = 100, torso = 100, arms = 100, decals = 100, pants = 100,
        shoes = 100, mask = 100, bproof = 100, chain = 100, bags = 100,
        helmet = 100, glasses = 100, ears = 100, watches = 100, bracelets = 100,
    },
}
  • One fee per changed slot: a garment's model and texture count once, and the arms a jacket brings with it are not charged separately
  • Face, hair, makeup and tattoos have no price
  • A slot left out of Slots costs Default; set it to 0 to make it free
  • The server works out the total from the character's saved clothes, so the menu's figure cannot be tampered with. The player pays with Cash or Bank, chosen in the menu
  • A player with no saved clothes to compare against pays Config.ShopSystem.ClothingPrice

Clothes as items

See the feature and the full guide, Clothes as Items.

Config.ClothingItems = {
    Enabled = true,
    Inventory = "auto",
    Equip = true,
    OnLogin = true,
    -- Custom = function(src, pieces, skin) end,
}
Key Default What it does
Enabled true Turns it off without touching the inventory
Inventory "auto" "auto" finds a supported inventory that is running; or "aty_inventory", "core_inventory", "custom", or the name of a renamed aty_inventory
Equip true The two-way flow. false: a purchase only adds what it sold to the bag
OnLogin true Tell the inventory what the skin wears when a player spawns; it makes only what is missing
Custom — function(src, pieces, skin) for Inventory = "custom"

Shop ownership

Config.ShopSystem = {
    Enabled = true, PurchasePrice = 50000, WeeklyRent = 5000,
    Commission = { Enabled = true, Rate = 5.0 }, -- % kept from each withdrawal
    RentCheckInterval = 24 * 60 * 60 * 1000,     -- ms
    AutoRentDeduction = true,
    ClothingPrice = 100,                         -- flat fee, see Prices
}

Config.ShopManage turns the management menu on and sets its Label and Icon; its Key only changes the prompt text, the key itself is always F6.

Presets

Presets in config.lua are built in and cannot be deleted in game. gender is required because drawable numbers belong to one model; an entry that does not validate is skipped with a console warning.

Config.Presets = {
    { kind = "outfit",   -- "character" (face, hair, overlays) or "outfit" (clothes, props)
      group = "work",    -- outfits only: "casual", "work" or "activity"
      name = "Patrol", gender = "male", job = "police", grade = 0,
      values = { torso_1 = 0, torso_2 = 0, tshirt_1 = 15, arms = 0, pants_1 = 0, shoes_1 = 1, helmet_1 = -1 } },
}

Matching pieces

Nothing to fill in for GTA's own clothing. Config.Compatibility is laid over the game's data, for addon clothing (which has none) and wherever you want to overrule the game:

Config.Compatibility = {
    male = {
        Arms = { [15] = 15, [26] = 6 },          -- torso drawable -> arms drawable
        Undershirts = { [26] = { 15, 57, 58 } }, -- torso drawable -> undershirts that fit
    },
    female = { Arms = {}, Undershirts = {} },
}

A torso with no Undershirts entry lists every undershirt.

Blacklist

Config.Blacklist = {
    ["hair_1"] = { [21] = { "police" } }, -- hair_1 21: police only
}

Keyed by any skin key (textures such as torso_2 too), then value, then the jobs allowed. Other players cannot pick it, and the server refuses a purchase or save that contains it.

Camera

Config.Camera = {
    OrbitSpeed = 0.10, PedTurnSpeed = 0.14, PanSpeed = 0.0028, ZoomSpeed = 0.07,
    Inertia = true,          -- a released drag coasts to a stop
    FocusOnCategory = false, -- true: picking a category moves the camera to that body part
}

Clicking a marker on the character always moves the camera there.

QBCore clothing events

Config.QBClothingEvents answers the events other QBCore scripts expect from qb-clothing (qb-clothing:saveSkin, qb-clothing:loadPlayerSkin and the rest), so scripts written for it keep working. See Compatibility with other clothing resources.

Photos

Config.Photos sets the studio position, backdrop and camera per slot — see How To Take Images.

Controls

Action Mouse Keyboard Controller
Orbit the camera Left drag A / D —
Turn the character Right drag Z / C Right stick left / right
Camera height Middle drag W / S Right stick up / down
Zoom Wheel (towards the cursor) — LT out / RT in
Open a part of the body Click its marker — —
Move between items — ↑ ↓ D-pad / left stick
Change a value — ← → D-pad / left stick
Previous / next category — Q / E LB / RB
Select Click Enter A
Undo — Ctrl+Z X
Buy (shops) / Save (creator) — P Y
Re-centre on the whole character — R R3
Search the menu — F —
Back one step, then leave Esc leaves Esc (Backspace: back only) B

Dragging a slider does not turn the camera, and a left/right picker you have clicked can be stepped with the arrow keys.

Files the server writes

File Written by Holds
theme.json Theme editor The saved theme
presets.json Preset shelves Presets saved in game
compat.json Piece matching GTA's piece data for the current game build
photos/<gender>_<kind>_<slot>.json Photo studio Which picture belongs to which item

They sit inside the resource folder and are never part of a release, so an update does not overwrite them. The server needs write access there; photos/ ships with a README so the folder exists, because the server cannot create one.

Skin data structure

What the exports and the database carry: a flat table of these keys.

Part Keys
Model sex (0 male, 1 female freemode), model (name or hash; ped is read when it is missing)
Heritage mom, dad, mom_texture, dad_texture (0-45), face_md_weight, skin_md_weight (0.0-1.0)
Face shape (-1.0 to 1.0) nose_1 … nose_6, eyebrow_high, eyebrow_forward, cheeks_1 … cheeks_3, eye_squint, lip_thickness, jaw_1, jaw_2, chin_1 … chin_4, neck_thickness
Hair and eyes hair_1, hair_2, hair_color_1, hair_color_2, hair_fade (0 automatic, 1 none, 2 and up a design), eye_color
Overlays with two colours eyebrows, beard, makeup, lipstick, bodyb — each _1 style (-1 none), _2 opacity 0-10, _3, _4 colours
Overlays with one colour blush, chest — _1, _2, _3
Overlays without colour age, blemishes, complexion, sun, moles, addbodyb — _1, _2
Clothing tshirt, torso, decals, pants, shoes, mask, bproof, chain, bags — _1 drawable, _2 texture. Arms are arms and arms_2
Props helmet, glasses, ears, watches, bracelets — _1 drawable (-1 none), _2 texture
Tattoos tattoos, a list of { collection, texture, zone, opacity }
-- a partial example
{ sex = 0, mom = 21, dad = 4, face_md_weight = 0.5, hair_1 = 3, beard_1 = 10, beard_2 = 10,
  torso_1 = 15, arms = 15, helmet_1 = -1,
  tattoos = { { collection = "mpairraces_overlays", texture = 1, zone = "body", opacity = 1.0 } } }

A tattoo's zone is head, body, leftArm, rightArm, leftLeg or rightLeg, and texture is the design's position in that zone of Config.Tattoos (shared/tattoos.lua), counting from 1. Records saved before v3 with arms or legs still load and keep drawing where they did before.

Troubleshooting

Symptom Cause and fix
The resource fails to start on QBCore qb-core was not running yet. Start the framework before aty_clothing
An admin command does nothing The player is not a clothing admin. Add the aty_clothing.admin ACE, or use the framework's admin group — see Permissions
No prompt at a shop, or the wrong one Check Config.DisplayMethod. With "target", ox_target or qb-target must be running; with "none" the zone and E still work
A shop opens for a job it should not A public shop and a job shop share a key. Give job shops their own keys, such as [101]
Wardrobe saves fail with Unknown column 'skin' Another clothing script made player_outfits first, with other columns. Run ALTER TABLE player_outfits ADD COLUMN skin TEXT NULL, ADD COLUMN outfitId VARCHAR(50) NULL;
A saved outfit is not in the wardrobe The save failed. The name stays in the box and the server console says why: outfit not saved for player … or wardrobe not read: …
Invisible body parts, or the look is out of sync /refreshskin reloads the saved appearance
Short hairstyles show bare scalp Config.AutomaticFade is false, or the character's Hair Fade is set to None
Clothes did not come back after the tattoo shop Press Show clothes, switch category, or close the menu; all three restore them
Pickers show numbers instead of pictures Show Preview is off in the hint bar, or the photo studio has not been run yet — see How To Take Images
Bought or created clothes do not become items Run clothingitems status in the server console. Config.ClothingItems.Enabled must be on, an inventory must be found, and aty_inventory's Config.Wear.enabled and Config.Wear.clothingItems set. The console names a missing item mapping or an inventory that is too old
A taken-off jacket comes back aty_inventory's Config.Wear.clothingRestore must be 'bare' and Equip must be on — see Clothes as Items
A piece did not become an item Undershirts, chains, decals, bracelets and arms have no worn slot, and a "nothing" value never becomes an item. A full bag leaves pieces out and says how many
Matching pieces do nothing for addon clothing GTA has no data for it. Fill in Config.Compatibility

Where next

  • Integrations — open the menu from your own script, read and apply appearances, listen to events
  • How To Take Images — make the item pictures
ATY Scripts LogoATY SCRIPTS

Hochoptimierte FiveM Scripts für QBCore & ESX. Maximale Performance, präziser Code, kein Lag.

Community beitreten

Partner

Offizieller Tebex-Partner. Sicherer Checkout und Cfx.re-Keymaster-Integration.

Rechtliches

Nicht verbunden mit Rockstar Games, Cfx.re, FiveM oder Take-Two Interactive. Käufe unterliegen den Tebex-Nutzungsbedingungen.

© 2026 ATY SCRIPTS. Alle Rechte vorbehalten.