Thumbnail Clothing Store & Wardrobe
Shop for clothes by clicking real preview images — thumbnail grid, live on-ped preview, colour swatches, favourites, named outfits, share codes, job wardrobes and VIP stores. Built on illenium-appearance.
A premium, thumbnail-grid clothing system for FiveM. Players click real preview images to dress their ped live, browse by category, favourite items, and save named outfits — all in a clean command-center UI that docks to the side so the character stays on screen. Framework-agnostic (Qbox / QBCore / ESX) and built on top of illenium-appearance for rock-solid persistence.
Version: 1.0.0 · by G.A.S. Team Developers
✨ Features
- 🖼️ Thumbnail grid — browse every category (tops, pants, hats, glasses, accessories, hair, and more) as real preview images, not blind index numbers.
- 👁️ Live preview — the change appears on your real ped in-world instantly.
- 🎨 Colour swatches — flip through every texture/colour with live preview.
- ⭐ Favourites & recently-worn — star items; they surface in a quick tab.
- 👔 Named outfits — save a look, wear it in one click (shares the standard
player_outfitstable, so it's compatible with illenium outfits). - 🔗 Share outfits by code — turn any saved outfit into a short share code; friends import the exact look with one paste. Live-previews before they save.
- 🧰 Job / gang wardrobes — grade-gated clothing-room presets that appear in the Outfits tab only for the right job or gang. Config-driven, wear-only.
- 🔒 Private / VIP stores — lock any store or wardrobe by job, gang, grade, or ACE permission. Access is verified server-side, not just hidden.
- 🚫 Blacklist — hide broken / EUP-only / restricted drawables per gender & category so they never show in any store.
- 🛠️ In-game admin mode —
/clothingadmin(ACE-gated) adds controls to every tile: hide an item from all stores or move it to another category. Stored in the database, applies instantly, fully reversible — no config edits. - 📝 Discord logging — optional webhook embeds for purchases, saves, shares and imports (who, what, how much) — a clean audit trail for your server.
- 💰 Optional paid stores — charge on save, per-store pricing, bank or cash.
- 🎥 Smart camera — the view glides to the body part you're shopping (shoes → feet, hats → head), orbits 360° around the ped (buttons or **click-drag the screen**), scroll-wheel zoom, one-click reset.
- 🔎 Search — jump straight to an item number.
- 🔊 Polished UX — subtle UI sounds, smooth animations, responsive 1080p→4K.
- 🧠 Auto-clean grid — empty/blank capture slots are hidden automatically.
- 🌍 Localised — all text in
locales/, add any language.
📦 Requirements
- ox_lib
- oxmysql
- illenium-appearance — the appearance engine (persistence, character creation, barber/surgeon)
- uz_AutoShot — generates the clothing thumbnails (free)
- A Qbox, QBCore, or ESX server (auto-detected)
🚀 Installation
- Drop the folder into
resources/[custom]/rr-clothing/. - Add to
server.cfgafter its dependencies:
``cfg ensure ox_lib ensure oxmysql ensure illenium-appearance ensure uz_AutoShot ensure rr-clothing ``
- Generate thumbnails (once): in-game run
/shotmaker(uz_AutoShot) and capture every category for both a male and a female ped, thenrestart uz_AutoShot. See uz_AutoShot docs. - Generate the blank-slot map (once, after capturing):
`` powershell -ExecutionPolicy Bypass -File tools\gen-blanks.ps1 ` then restart rr-clothing`. This hides empty capture slots from the grid.
- Make it your main clothing menu: disable your appearance script's own
clothing stores. For illenium-appearance, set in its
shared/config.lua:
``lua Config.DisableClothingStores = true `` (barber/surgeon/tattoo/character-creation stay on illenium.)
- Restart the server. The
rr_clothing_favoritestable auto-creates.
🎮 Usage
| Action | How |
|---|---|
| Open wardrobe | /clothing command, a clothing-store blip, or exports['rr-clothing']:open() |
| Try on an item | Click its thumbnail — previews live on your ped |
| Change colour | Pick a swatch in the Colour bar |
| Favourite | Hover an item, tap the ★ |
| Save an outfit | Outfits tab → Save current outfit |
| Wear a saved outfit | Outfits tab → the shirt icon |
| Rotate / zoom | Top-bar buttons |
| Save changes | Save (charged if the store has a price) |
| Discard | Cancel / Esc |
⚙️ Configuration (config.lua)
| Option | Description |
|---|---|
Config.Command | Command that opens the wardrobe (default clothing) |
Config.Keybind | Optional default key for the command |
Config.ThumbnailBase / Config.ThumbnailFormat | Where captured images are served (default uz_AutoShot) |
Config.Price / Config.Account | Cost on save (0 = free) and bank/cash |
Config.Logs | Discord webhook logging (purchases / saves / shares / imports) |
Config.UseTarget | true = ox_target, false = press-E marker |
Config.Stores | Clothing-store locations (seeded with GTA defaults; per-store price + access control: job/jobs/grade/gang/ace/label) |
Config.Locations | Extra press-E points (great for private/job wardrobes) |
Config.JobOutfits | Grade-gated job/gang outfit presets shown in the Outfits tab |
Config.Blacklist | Per-gender/category drawable indices to hide from the grid |
Config.Blip | Store blip sprite/colour/name (false to hide) |
Config.Sounds | UI sounds on/off |
Config.Rotate/Zoom/Ped knobs | Camera feel |
Config.Categories | Category order, icons, component/prop ids |
Private / VIP & job stores
Add any of job, jobs (list), grade (minimum), gang, or ace to a Config.Stores / Config.Locations entry to lock it. Example:
{ coords = vec4(441.0, -981.0, 30.7, 90.0), label = 'PD Locker', job = 'police', grade = 0 },
{ coords = vec4(-1300.0, -1080.0, 7.0, 30.0), label = 'VIP Boutique', ace = 'clothing.vip', price = 500 },
Grant ACE access in server.cfg: add_ace group.vip clothing.vip allow.
Admin mode
/clothingadmin opens the wardrobe with moderation controls on every tile (hide from all stores / move to another category, with badges + one-click undo). Access is verified server-side via Config.AdminAce. Grant it in server.cfg:
add_ace group.admin rrclothing.admin allow
Hidden items vanish for players instantly; "moved" items show under the category you picked (e.g. re-file a vest GTA misplaces under Accessories into Armor). All rules live in the rr_clothing_hidden / rr_clothing_moves tables.
Share codes & job outfits
Saved outfits get a Share button that returns an 8-character code; anyone can paste it into Outfits → Import by code to try the exact look, then Save to keep it. Job/gang presets are defined in Config.JobOutfits and only appear for players with the matching job/gang and grade.
🧑💻 For developers
-- open the wardrobe from any resource
exports['rr-clothing']:open() -- free / inherits Config.Price
exports['rr-clothing']:open(250) -- charge $250 on save
Money is abstracted in bridge.lua (Qbox / QBCore / ESX). Add a block there to support any other framework.
🌍 Localisation
All player-facing text lives in locales/en.json. Copy it to locales/<lang>.json, translate, and set setr ox:locale <lang> in server.cfg.
📄 License
MIT © 2026 Real Results / G.A.S. Team Developers. Support & more scripts: gasteamdevelopers.com
