Skip to content

Retro Dealership

Check Config.CategoryMap in config/config.lua. Framework vehicle classes need to be mapped to shop categories - anything without a mapping gets excluded. Turn on Config.Debug = true to see which classes are being skipped in the server console.

Add an entry to config/locations_config.lua under Config.Shops:

Config.Shops['my_shop'] = {
label = 'My Shop',
logo = 'retrostore.png',
shopPrice = 300000,
stockMode = 'unlimited',
entry = { coords = vector3(x, y, z), heading = 0.0 },
npc_shop = vector4(x, y, z, heading),
marker_shop = vector3(x, y, z),
marker_owner = vector3(x, y, z),
blip = { coords = vector3(x, y, z), label = 'My Shop' },
categories = { 'SUPER', 'LUXURY', 'MUSCLE' },
testDrive = vector4(x, y, z, heading),
buySpawn = vector4(x, y, z, heading),
truckSpawn = vector4(x, y, z, heading),
vehicleSpawnSlots = { vector4(x, y, z, heading) },
vehicleParking = { vector4(x, y, z, heading) },
}
  • 'unlimited': All vehicles in the category list are available at default_sale price. No stock management, no ordering. Good for an unowned shop.
  • 'stock': Only vehicles in rs_dealerships_stock can be purchased. Stock comes from the order/delivery system.

Customers pay a minimum down-payment (Config.FinanceDownPayment, default 10%), then the rest splits into weekly payments over Config.FinanceWeeks (default 12). Interest at Config.FinanceInterest (10%) is applied. Tracked in rs_dealerships_finance.

Owners set open/close times through the Settings dashboard. The time check uses either real-world server time (Config.ShopHoursMode = 'real') or the GTA in-game clock ('game'). For real mode, Config.Timezone determines which timezone to use.

Shop level comes from cumulative total sales against Config.LevelThresholds. Higher levels unlock more stock slots, showcase slots, and vehicle classes (LUXURY, SUPER, HYPER). Rewards are defined in Config.LevelRewards.

When the owner places an order, a delivery timer starts (random between Config.DeliveryMinTime and Config.DeliveryMaxTime). Once ready, the owner does a self-pickup: a flatbed with trailer spawns at the port with the ordered vehicles. Drive them back to the shop and park them.

Large vehicles (classes in Config.LargeVehicleClasses) canโ€™t be loaded on the trailer - drive those directly.

Players submit a trade request at a shop with an asking price (capped at original price ร— (1 - depreciation)). The owner reviews and approves or rejects it. Approved vehicles go up for sale. When sold, the seller gets the asking price minus commission (if Config.UsedCarCommission is enabled). Commission goes to the shop account.

Put them in Config.CustomVehicles in config/customV_config.lua. These merge on top of framework vehicles. Use the same model name to override existing data.

Owners assign vehicles from stock to showcase slots through Settings, then position them with free-aim 3D placement (move, scroll for height, R to rotate). Showcase slot count is limited by shop level.

Owners hire nearby players through the Dashboard. Positions: Junior Staff (0), Sales Rep (1), Showroom Manager (2), Manager (3), Owner (4). Each role has configurable permissions. Staff automatically get the shopโ€™s dynamic job when they join the server.

Set Config.VehicleImageSource to a URL pattern with %s for the model name, or 'local' to use web/dist/images/{model}.png.