by Avenida Team ESX · QBCore · vRP · Standalone · oxmysql

Clothing store

A clothing store with saved outfits, company wardrobes and an editor that prices the catalogue from inside the game. Every component and every prop, bought one garment at a time or as a whole look, with a server-side ledger that stops anyone wearing what they never paid for.

Delivery Instant
Updates Free for life
Support Daily on Discord
01 · FEATURES

What it does

02 · SPECS

Technical
specifications

Framework Auto-detected QBCore · ESX · vRP · Standalone · Custom
Dependencies oxmysql ox_lib · ox_target · ox_inventory supported
Stores 21 included 15 sections · 4 mask and bag boutiques
In-game locales 15 included ar · cs · de · en · es · fr · id · it · nl · pl · pt-br · ro · ru · th · tr
Performance 0.00ms idle Nothing runs while no one is in a store
03 · INCLUDED

Everything you
get

  • Fifteen locale files, shipped filled

    Your players read the script in their own language from the first start, and the files sit outside escrow so you can edit any line in production. Honest note: they are translated and reviewed by us, not proofread by native speakers of all fifteen. Tell us what reads wrong in yours and it gets fixed.

  • Eight bridges, one file each

    Framework, notifications, interaction, clothing, inventory, decorations, screenshots and compat. Every file documents its targets, what it detects, and what each target costs you. Detection probes the actual export rather than the resource state, so a renamed export degrades quietly instead of throwing at boot.

  • The whole catalogue stays open

    Stores, sections, prices, tax and discount, blocked drawables, VIP lists and the overrides the in-game editor writes. `config/*.lua`, `locales/*.lua` and `bridges/*.lua` are escrow exempt and editable in production.

  • An install report you can paste into support

    `/avenida_clotheshops_check` prints which bridge was picked for each category, whether the tables and columns exist, and what your game build actually ships. It answers most integration questions before you have to ask them.

04 · DOCUMENTATION

Integration guide

01

Installation

  1. Drop the resource

    Grab the script from your Tebex account, then copy the avenida_clotheshops/ folder into your resources directory and add ensure avenida_clotheshops to your server config, after ensure oxmysql.

  2. Run the SQL

    Run section [A] of INSTALL.sql on your database. Section [B] is conditional, the file header says when you need it.

  3. Grant the admin permissions

    Add add_ace group.admin avenida_clotheshops.admin allow and add_ace group.admin avenida_clotheshops.vip allow to your server config. The first one opens the catalogue editor, the second unlocks whatever you put behind the VIP list.

  4. Price the catalogue from in game

    Set Config.DevMode.Enabled = true, walk into a store and open the editor. Set prices, hide what you do not sell, restrict what belongs to a job. Everything lands in config/clothes_overrides.lua. Turn DevMode back off when you are done, it is checked again server side on every save.

  5. Verify the integrations

    Set Config.Debug = true, restart, and read the console: one line per bridge category names the target that was picked. Config.Debug only controls logging, it is not the editor switch.

02

Quickstart

Price a section three different ways

Each store declares its own sections, and each section its own pricing mode. A flat rate for a whole section, a multiplier that makes later drawables dearer, or a table when only a handful of pieces deserve their own price.

lua
-- config/clothes_shops.lua
categories = {
    tops = {
        enabled = true,
        price   = { mode = 'fixed', base = 300 },
    },
    pants = {
        enabled = true,
        -- price = base + index * mult
        price   = { mode = 'multiplier', base = 100, mult = 2 },
    },
    mask = {
        enabled = true,
        price   = { mode = 'table', map = { [12] = 900, [45] = 1500 } },
        -- only these drawables are offered
        whitelist = { 12, 45, 51 },
    },
}
03

API Reference

Public exports grouped by domain. Each row shows the call signature and what it does, not how it does it.

Client

  • GetSkinData
    exports['avenida_clotheshops']:GetSkinData()

    The outfit the player wears, component by component, props included. This is what the store writes on purchase, so it is always in step with what the wardrobe shows.

  • ApplySkin
    exports['avenida_clotheshops']:ApplySkin(data, ped)

    Applies a complete appearance to a ped. Applying an outfit clears the decoration slot, so this call puts the barber and tattoo work back afterwards rather than leaving a bare skin.

  • ApplyClothing
    exports['avenida_clotheshops']:ApplyClothing(data, ped, temporary)

    Changes the clothes and nothing else. With temporary set to true the outfit lives for the session only, which is how a uniform handed out by a job should behave.

Server

  • GetBagStorage
    exports['avenida_clotheshops']:GetBagStorage(sex, drawable) --> { weight, slots } | nil

    The capacity a backpack drawable grants, weight and slots, or nil when that drawable carries nothing. Call it from your inventory resource so a bag bought in the store actually holds something.

04

Recipes

Real-world copy-paste examples. Drop them into your own resource, tweak the values, ship.

A store is one entry. It carries its display name, its payment method, its currency symbol, an optional tax and discount applied to the cart total, and the sections it offers. Keep the key stable: it is the store id saved inside outfits, and renaming it after players have shopped there breaks their data.

lua
-- config/clothes_shops.lua
Config.Clothes.Shops[22] = {
    name       = 'Ponsonbys - Rockford Hills',
    payment    = 'bank',
    currency   = '$',
    tax        = 0.20,        -- +20% on the cart
    discount   = 0.00,
    outfitMode = true,
    blip = { sprite = 73, color = 4, scale = 0.7, coords = vec3(-708.2, -152.2, 37.4) },
    categories = {
        tops  = { enabled = true, price = { mode = 'fixed', base = 900 } },
        shoes = { enabled = true, price = { mode = 'fixed', base = 450 } },
    },
}
05

Troubleshooting

  • Check `Config.Clothes.RequireOwnership`. The ledger seeds a character from what they are already wearing the first time it sees them, so turning it on does not take a wardrobe away. What it does refuse is a write for a garment with no purchase behind it, which is also what a tampered client sends. If a resource of yours dresses players in pieces they never bought, either register those purchases or set the flag to false.
REVIEWS

What buyers say

4.8 5 verified reviews

  • Haldor

    brilliant scripts and great support 10 /10

    View on Discord ↗
  • BigOppGrimeyy GangWrld NYC

    10/10 was having a problem and these guys ain't stop till it was fix customer service is great definitely buying again

    View on Discord ↗
  • 00hugi

    Super scripts and even better and fast support. Thanks a lot!!

    View on Discord ↗
  • reapersrow

    Amazing support from the developers and a smooth script!

    View on Discord ↗
  • Necro Huston RP

    Best service Ive ever received! He even helped me fix problems not associated with his script!

    View on Discord ↗
Cart
Spirit RP
Discord