Universal Mechanic Workstation
One polished NUI for every service shop on your server — repair, performance tuning, and full cosmetic customization with server-authoritative pricing and persistent mods for player-owned vehicles.
One polished NUI for every service shop on the server — Benny's, dealership service bays, custom tuner garages, roadside vans. Repair, performance tuning and full cosmetic customisation of the nearest vehicle, with money charged authoritatively server-side and mods that persist for player-owned vehicles.
Built on the Mosley's / CEO-dashboard visual style (dark grouped sidebar, amber tuner accent) and the full mechanic icon pack.
Features
| Bench | What it does |
|---|---|
| Dashboard | Live engine / body / fuel / cleanliness rings, work order, and a parts catalog wall. |
| Repair Assessment | Full diagnostic inspection — per-system condition grades (engine/body/tank/cleanliness), a four-corner tyre check, an overall 0–100 score, and an itemised repair order that only quotes the systems actually flagged. One-click Approve Full Repair or Itemised Repairs (it tells you which is cheaper). |
| Repair & Service | Full repair, engine repair, jump-start, body repair, fix tyres, recover/flip, wash, pressure detail, reset-to-stock. |
| Performance | Engine / transmission / brakes / suspension level ladders (A → S), armour plating, ECU tune, full race kit, turbo, tyre smoke. |
| Wheels & Tyres | Wheel type, rim style, horn, bulletproof tyres, drift tyres. |
| Body Kit | Spoiler, bumpers, skirts, exhaust, roll cage, hood, fenders, roof, trim, seats. |
| Paint & Style | Respray (primary/secondary), remove wrap, plate styles, window tint, neon underglow, xenon, livery, stereo. |
- Authoritative pricing — the NUI only displays prices; the server re-derives
every charge from
config.lua, so the UI can never spoof a price. - Owned-vehicle persistence — changes to a player-owned car are saved via
qbx_vehicles:SaveVehicle(falls back to writing themodsblob by plate). - Works on any nearby car — takes network control of vehicles the operator doesn't own, so mechanics can service customers.
Install
- Drop the
rr-mechanicfolder into your resources (it's already inside[custom], which is ensured as a group — it will load on next restart). Otherwise addensure rr-mechanicto your server.cfg afterox_lib,qbx_coreandqbx_vehicles. - Restart the server (or
ensure rr-mechanic). - Open it with
/mechanic(default).
Dependencies: ox_lib, qbx_core, qbx_vehicles (+ oxmysql). ox_target is optional (used only if a location enables a target zone).
Configuration (config.lua)
Config.Brand— title, tagline and accent colour shown in the header. Rename per shop / per buyer; the accent recolours the whole UI live.Config.Jobs/Config.RequireOnDuty— who can operate it.Config.OpenForEveryone—truewhile testing (anyone can/mechanic); flip tofalsefor live so onlyConfig.Jobscan open it.Config.Command/Config.Keybind— the command + optional key.Config.Prices— authoritative price per action (0= free).Config.Locations— add one entry per physical shop for a blip + a press-[E]marker and/or anox_targetzone. All locations open the same NUI.
Adding a shop location
Config.Locations = {
{
label = "Benny's Original Motorworks",
coords = vec3(-205.0, -1310.0, 31.3),
jobs = { 'mechanic', 'bennys' },
blip = { sprite = 446, color = 5, scale = 0.8 },
marker = true, -- press-[E] marker
target = true, -- ox_target zone (if ox_target is running)
},
}
Opening it from other resources
The workstation is the single mechanic UI for the whole server. Open it from a ped, a phone app, another script, etc:
-- client
exports['rr-mechanic']:open()
-- or
TriggerEvent('rr-mechanic:client:open')
exports['rr-mechanic']:isOpen() returns whether it's currently open.
Notes
- Performance level ladders render dynamically from each vehicle's available mods, so a 4-tier car shows A/B/C/S and a higher-tier car shows up to S+.
- Cosmetic/body steps and most actions apply instantly with a toast; only Reset to Stock asks for confirmation.
- The price table and the operator job-check are validated again on the server for every charge — the client is never trusted.
