Skip to content

StuntxTrap Rim Shop

QBCore ESX Qbox PolyZone Job / economy

Player-run rim shop: orders, society balance, delivery truck loop, stocking racks, and a catalog driven by your Stunt Rim Shop (or compatible) wheel pack’s carcols.meta.

At a glance

oxmysql · PolyZone · rim pack resource (default stuntrimshop_starter) · Tuner Auto Shop MLO + IPL client · folder name StuntxTrap-RimShop

Support Discord · Showcase video · YouTube @XVisonMods

Include your ensure order and any client/server errors if something fails after Dependencies.

Framework support

Supported. Add the rimshop job to qb-core/shared/jobs.lua (see QBCore job below). Set Config.Framework = 'auto' or 'qb'.

Supported. Run the esx_rimshop_job.sql block under Database (SQL) on this page (or import sql/esx_rimshop_job.sql if included). Set Config.Framework = 'auto' or 'esx'.

Supported via qbx_core (same job pattern as QBCore). Set Config.Framework = 'auto' or 'qb'.

Preview

Showcase · StuntxTrap Rim Shop

Direct link: youtu.be/Edy9t3dveiw

Features

  • Order UI at the shop laptop; boss menu at the configured point
  • Business cash in rimshop_society (MySQL)
  • mule2 delivery: depot → shop unload → unpack → stock racks
  • Rim preview / wheel paint zones (configurable)
  • Catalog built from carcols.meta in the rim pack resource

External requirements (read before install)

Tuner Auto Shop MLO

Download the free MLO from Cfx.re: Tuner Auto Shop.

  • Enforce the tuner game build on the server, e.g. +set sv_enforceGameBuild tuner (use a current server artifact).
  • Use the IPL client.lua that ships with the resource bundle (copy install/MLO-ipl_tunergarage_client.lua into your IPL resource as client.lua if you use the ipl_tunergarage helper).

Stunt Rim Shop — Starter 40 pack

Required for the default catalog: purchase/configure the Starter 40 pack (FiveM build). The resource folder name must match Config.RimResourceName (default stuntrimshop_starter).

Dependencies

Resource Notes
oxmysql Required
PolyZone Required (dependency 'PolyZone' in fxmanifest.lua)
stuntrimshop_starter (or your pack) Must contain carcols.meta
qb-core or qbx_core or es_extended One framework
ox_lib Optional (nicer prompts/notifications)

Configuration

Where to tune

Edit config.lua. Quick merge keys are in config.COPY_PASTE.lua. Config.RimResourceName must match the folder name of your rim pack.

Essentials (copy-paste)

Config.Framework = 'auto'          -- 'auto' | 'esx' | 'qb'
Config.BusinessJob = 'rimshop'
Config.RimResourceName = 'stuntrimshop_starter'
Config.BoxCutPolyZone.resourceName = 'PolyZone'

Database (SQL)

Run on your framework database (same DB as characters). If your download is missing sql/rimshop.sql or sql/esx_rimshop_job.sql, copy from below.

The resource can also create/patch tables on start; running SQL manually is still recommended.

Copy-paste — rimshop.sql (all frameworks)

CREATE TABLE IF NOT EXISTS rimshop_society (
    job_name VARCHAR(80) NOT NULL PRIMARY KEY,
    balance INT NOT NULL DEFAULT 0,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS rimshop_stock (
    id INT AUTO_INCREMENT PRIMARY KEY,
    rim_name VARCHAR(120) NOT NULL UNIQUE,
    stock_count INT NOT NULL DEFAULT 0,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS rimshop_retail_prices (
    rim_name VARCHAR(120) NOT NULL PRIMARY KEY,
    retail_price INT NOT NULL,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS rimshop_orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    citizenid VARCHAR(80) NOT NULL,
    player_name VARCHAR(100) NOT NULL,
    rim_name VARCHAR(120) NOT NULL,
    sets_ordered INT NOT NULL,
    boxes_total INT NOT NULL,
    boxes_stocked INT NOT NULL DEFAULT 0,
    status VARCHAR(40) NOT NULL DEFAULT 'active',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Copy-paste — esx_rimshop_job.sql (ESX only)

Skip on QBCore/Qbox — use the shared job snippet instead.

-- ESX Legacy — add Rim Shop job (matches Config.BusinessJob = 'rimshop')
-- Shop inventory for customer sales is rimshop_stock / rimshop_society (created by the resource), not ESX society accounts.
-- Retail sales remove Config.RimsPerRetailSale rim units per purchase (default 4) on all frameworks including ESX.
-- Run this on your ESX database (e.g. esxlegacy_* in HeidiSQL).
-- The resource can also auto-insert on start (Config.EsxAutoInsertJob) if columns match.
-- If a statement fails, adjust column names to match your `jobs` / `job_grades` tables.

INSERT IGNORE INTO `jobs` (`name`, `label`) VALUES ('rimshop', 'Rim Shop');

-- Grades 0–4 (boss = grade 4; script uses grade ≥ EsxBossMinGrade or grade_name boss)
INSERT IGNORE INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES
('rimshop', 0, 'recruit', 'Recruit', 200, '{}', '{}'),
('rimshop', 1, 'employee', 'Employee', 400, '{}', '{}'),
('rimshop', 2, 'senior', 'Senior Tech', 600, '{}', '{}'),
('rimshop', 3, 'manager', 'Manager', 800, '{}', '{}'),
('rimshop', 4, 'boss', 'Boss', 1200, '{}', '{}');
QBCore / Qbox — shared job snippet

Add to qb-core/shared/jobs.lua (adjust payments to your economy):

['rimshop'] = {
    label = 'Rim Shop',
    defaultDuty = true,
    offDutyPay = false,
    grades = {
        ['0'] = { name = 'recruit', payment = 200 },
        ['1'] = { name = 'employee', payment = 400 },
        ['2'] = { name = 'senior', payment = 600 },
        ['3'] = { name = 'manager', payment = 800 },
        ['4'] = { name = 'boss', isboss = true, payment = 1200 },
    },
},

Inventory items

This script does not add standalone consumable shop items by default; the flow is job + UI + delivery. If you extend it with items, align names with your qb-core/shared/items.lua or ox_inventory conventions.

Installation

Steps

  1. Install the Tuner Auto Shop MLO and ensure your IPL client.lua matches the bundle (see External requirements).
  2. Install PolyZone and oxmysql; place the Stunt Rim Shop FiveM resource and keep its folder name = Config.RimResourceName.
  3. Run the rimshop.sql SQL block on this page (or import sql/rimshop.sql if included). ESX: also run esx_rimshop_job.sql. QBCore/Qbox: add the rimshop job to shared jobs (snippet below).
  4. Drop StuntxTrap-RimShop in resources/.../ — folder name StuntxTrap-RimShop.
  5. ensure order example:

    ensure oxmysql
    ensure PolyZone
    ensure qb-core
    ensure ipl_tunergarage
    ensure stuntrimshop_starter
    ensure StuntxTrap-RimShop
    
  6. Restart the server. Assign players the rimshop job (boss grade for boss features if Config.RequireBoss is true).

Notes

Rim pack is mandatory for the catalog

Without a resource that exposes carcols.meta the way the Stunt pack does, the rim list will be empty.

  • Full install (MLO, coords, smoke test) and the same copy-paste SQL live in the resource’s INSTALL.md inside StuntxTrap-RimShop (ship this file even if sql/ is empty).