Configuration
Every config option for whereiaml_vehicleshop.
Configuration is split across three files. You normally only touch these.
config/shared.lua
Shared between client and server (safe for the client to know).
| Option | Description |
|---|---|
Config.Locale | Fallback locale key (loaded from locales/<locale>.json). |
Config.Debug | Print debug logs. Keep false in production. |
Config.ColorMode | 'index' (snap the picked colour to the nearest GTA palette colour so index-based mechanic shops can re-spray it — recommended) or 'custom' (store the exact RGB hex + finish; index-only mechanic shops cannot re-spray until they clear the custom colour). The Finish selector only shows in 'custom' mode. |
Config.Notifications | 'custom' (built-in Mantine top-center notifications) or 'framework' (qbx/ox notifications). |
Config.Categories | Tabs shown in the UI. Each id must match a vehicle category. |
Config.CatalogSource | 'framework' (pull vehicles + prices from QBox) or 'config' (use Config.Catalog; required on ESX). |
Config.Catalog | Manual catalog. Each entry: model, name, brand, price, category, optional image, optional vehicleType. |
Config.Dealerships | World dealerships (see below). |
Config.Doors | Which doors are exposed in the UI (GTA door indices). |
Dealership entry
{
id = 'pdm',
label = 'Premium Deluxe Motorsport',
ped = 'a_m_y_business_01',
coords = vec4(-56.51, -1096.6, 26.42, 25.0), -- dealer ped + interaction
blip = { enabled = true, sprite = 326, color = 3, scale = 0.8 },
categories = nil, -- nil = sells all categories
studio = { -- hidden private showroom
podium = vec4(-1395.0, -3000.0, 13.95, 240.0),
ped = vec3(-1398.5, -3002.5, 13.95),
},
spawn = vec4(-57.08, -1073.53, 26.22, 71.23), -- where a purchased car is delivered
-- spawn can also be a list of points; the server picks the first one that is free:
-- spawn = { vec4(-57.08, -1073.53, 26.22, 71.23), vec4(-60.2, -1071.0, 26.22, 71.23) },
-- garage = 'motelgarage', -- optional per-dealership garage override (delivery = 'garage')
testdrive = vec4(-1336.0, -3044.0, 13.94, 329.0), -- where the test drive starts
}spawn accepts a single vec4 or a list of vec4. The server delivers to the first point with no
vehicle parked on it, so purchased cars never spawn on top of each other. If every listed point is
taken it nudges the first one forward along its heading until a clear spot is found.
config/client.lua
Camera, mouse controls and test-drive behavior.
| Option | Description |
|---|---|
camera.fov / distance / minDistance / maxDistance / height / pitch | Showroom orbit camera. |
controls.rotateSpeed | Mouse drag → vehicle rotation sensitivity. |
controls.pitchSpeed | Mouse drag → camera pitch sensitivity. |
controls.zoomSpeed | Scroll → zoom sensitivity. |
controls.rotateLerp | Rotation smoothing (0..1). |
testDrive.duration | Seconds before the test drive auto-returns. |
testDrive.returnToShop | Re-open the dealership after a test drive so the player keeps browsing. |
config/server.lua
Payment, finance and anti-abuse. Server-authoritative.
| Option | Description |
|---|---|
paymentMethods | Which methods are offered: 'cash', 'bank', 'finance'. |
delivery | 'world' (spawn at the dealership spawn point, occupancy-checked so cars never stack) or 'garage' (send straight to a garage, no world spawn). |
garage | Garage a purchase is deposited into when delivery = 'garage'. QBox: a qbx_garages id (e.g. 'motelgarage'); a per-dealership garage field overrides it. ESX: requires a stored column on owned_vehicles. |
finance.enabled | Toggle financing. |
finance.minDownPercent | Minimum down payment (% of price). |
finance.interestPercent | Total interest added to the financed amount. |
finance.maxPayments | Number of installments. |
finance.paymentCron | ox_lib cron expression for collecting payments. Shown to players in human form (e.g. 0 0 * * 0 → "every Sunday at 00:00"). |
finance.maxMissedPayments | Missed payments before repossession. |
finance.downPaymentFrom / installmentFrom | Money type charged ('cash' or 'bank'). |
antiAbuse.purchaseCooldown | Minimum ms between purchase attempts per player. |
plateFormat | Plate format passed to the framework. |
The finance due day shown to players is derived from finance.paymentCron automatically —
change the cron and the UI updates the wording.
Mechanic-shop colours. With Config.ColorMode = 'index' (default) a purchased car's paint is
stored as a standard GTA palette index, so qbx_customs and other index-based shops can re-spray it
with no edits to those resources. Use 'custom' only if you want exact-hex paints and your mechanic
shop supports custom colours.