Configuration Guide

A beginner-friendly guide to creating and configuring shops.


Quick Start

Open configs/shops.lua and copy this template:

['my_shop'] = {
    name = 'My Shop Name',
    subtitle = 'My Shop Subtitle',
    shopType = '247store',
    location = vector3(0.0, 0.0, 0.0),
    blip = {
        sprite = 52,
        color = 2,
        scale = 0.7,
        display = 4
    },
    ped = {
        enabled = true,
        model = 'mp_m_shopkeep_01',
        coords = vector3(0.0, 0.0, 0.0),
        heading = 0.0,
        scenario = 'WORLD_HUMAN_STAND_MOBILE'
    },
    registers = {
        enabled = false,
        coords = {}
    },
    items = {},
    ownership = {
        enabled = false,
        coords = vector3(0.0, 0.0, 0.0),
        price = 0
    }
}

Then just:

  1. Change 'my_shop' to a unique name

  2. Fill in your coordinates

  3. Pick a shopType from the list below (configure anything else you'd want to change)

  4. Done!


Shop Types

Pick one of these for your shopType:

Type
What it sells

247store

Food, drinks, basic supplies

liquorstore

Alcohol, snacks

hardware

Tools, materials, repair kits

pharmacy

Medical supplies

gunstore

Weapons, ammo, attachments

pawn

Sell your Items

Brief Note: the pawn type is a hardcoded value. If used the shop turns into a shop where you SELL items. Example:


Adding a New Shop Type

If the existing shop types don't fit your needs:

Step 1: Add display settings in configs/config.lua:

Step 2: Add base products (if using BaseProducts):

Step 3: Add categories for your items:

Step 4: Add to product whitelist in configs/management.lua (for owned shops):


Categories Explained

Categories group items together in the shop UI. They're configured in configs/config.lua.

Each category has:

  • title - Display name

  • color - Badge color

  • types - Which shop types use it (empty = all shops)

  • items - Which items belong to it

Available colors: emerald, purple, orange, red, slate, blue, green, yellow, pink, indigo, cyan, teal, lime, amber, rose, fuchsia, violet, sky, gray


Configuration Explained

Basic Info

Map Blip

Common blip sprites:

  • 52 = Shopping cart (convenience stores)

  • 93 = Goblet (liquor stores)

  • 402 = Wrench (hardware)

  • 110 = Gun (weapon shops)

Shop Ped (The Clerk)

Common ped models:

  • mp_m_shopkeep_01 = Standard shopkeeper

  • s_m_y_ammucity_01 = Gun store clerk

  • a_m_m_eastsa_02 = Casual male

  • s_m_m_cntrybar_01 = Country/hardware store worker

Common scenarios:

  • WORLD_HUMAN_STAND_MOBILE = Standing with phone

  • WORLD_HUMAN_CLIPBOARD = Holding clipboard

  • WORLD_HUMAN_STAND_IMPATIENT = Standing, looking around

Cash Registers (Optional)

If your shop doesn't have physical registers, just use:

Shop Items

Note: This is ignored if BaseProducts is enabled in config.lua (it is by default). When enabled, all shops of the same type share the same items.

Player Ownership

If you don't want players to own this shop:


Item Display Overrides

Any item can override its display name, description, and image in the shop UI. These work in BaseProducts, individual shop items (configs/shops.lua), and ProductWhitelist entries (configs/management.lua).

Field
Description

label

Custom display name (overrides the auto-fetched inventory label)

description

Custom description text (overrides the auto-fetched inventory description)

image

Custom image — either a filename (e.g., 'lockpick_gold.png') resolved via your inventory's image directory, or a full path (e.g., 'nui://my_resource/images/custom.png' or a URL)

In BaseProducts or shop items:

In ProductWhitelist:

These overrides apply across the entire UI — shop display, management menu, stock ordering, analytics, and transaction history.

Item Metadata

You can assign metadata to any item sold through shops (owned and unowned). Metadata is passed to the inventory system when a player purchases the item — this is useful for things like durability, quality, or any custom field your server uses.

In BaseProducts or shop items:

In ProductWhitelist:

For weapons, configured metadata is merged with weapon serial metadata (weapon fields take priority on conflict).

Display Metadata (ox_inventory only)

If you're using ox_inventory, you can register custom metadata keys so they appear in the item tooltip. Add a displayMetadata table to any item.

There are two formats:

String format — the key is shown with a simple label (booleans display as "Yes"/"No", numbers display as-is):

Table format — for booleans, you can customize what "true" and "false" display as:

You can combine both formats on the same item:

Note: Do NOT add ox_inventory built-in keys like durability, description, ammo, serial, components, weapontint, type, or label to the displayMetadata table — ox_inventory handles those already and they will be ignored.

ApplyMetadata Groups

Instead of adding metadata to every item individually, you can define global metadata groups in configs/config.lua that automatically apply metadata to purchased items based on rules.

How priority works:

  1. Groups are applied in order (top to bottom) — later groups override earlier ones for the same key

  2. Per-item metadata (from BaseProducts/shop items/ProductWhitelist) overrides group values

  3. Weapon serial metadata (serial, registered) always takes highest priority

So if a lockpick is purchased: it first gets durability = 100 from the 'all' group, then that's overridden to durability = 50 by the specific group. If the lockpick also had metadata = { durability = 75 } in its item config, that would win over both groups.

Item Variants

You can sell multiple variants of the same item, each as a completely separate product. Items with different metadata are treated as entirely separate items by the resource — they have their own stock, their own sales tracking, and their own display.

For example, if you have a single water item in your inventory system, you can sell a regular version and a premium version side by side, each with different prices, labels, images, and metadata.

In BaseProducts or shop items:

In ProductWhitelist (for owned shops):

For owned shops, each variant gets its own independent stock — ordering, withdrawing, and transferring from inventory all respect variant boundaries. In the management UI, variants display as water: Premium Spring Water so you can easily tell them apart.

Another example — a weed shop selling different strains, all using the same base weed item:

Each strain shows up as its own product with its own price, image, and metadata — but they all use the same weed item in the inventory system.

Common Examples

Example 1: Basic 24/7 Store

Example 2: Hidden Illegal Shop (Dirty Money Only)

Example 3: Gun Store with License Requirements

Last updated