Configuration
Complete configuration reference for shifts, crews, calls, vehicles, flatbeds, visuals, outfits, and protection.
Every setting in oxide-roadsideassistancejob, explained.
How Settings Work
Settings are edited in-game with the /roadside settings command (admins only). Changes save to your database and apply instantly — no restart needed.
The config files in the shared/ folder are factory defaults. The first time the resource starts, every value is imported from the files into the database; from then on, the database is the source of truth and editing the files has no effect on settings that are already stored. Only brand-new settings added by a future update are imported from the files.
A few settings are positions in the world rather than plain numbers:
- Tow yards, breakdown scenes, and the tow delivery point are edited in
/roadside settingsunder Locations & Events, like everything else. Their coordinate fields have a Place button that hides the menu and lets you drop a live preview (the dispatcher, the truck, or the stranded car) exactly where you want it, and a teleport button that jumps you to the stored spot. Saving applies immediately — dispatcher NPCs and blips move on the spot.
Prefer editing the files? You still can: change the value in the file, restart the server, then open /roadside settings and press the Reset to default arrow on that setting — reset restores whatever the file says.
The tables below document every setting and its factory default.
Config File Map
| File | What's in it |
|---|---|
shared/config.lua | Main on/off switches and menu modes |
shared/config/job.lua | Pay, crew, complaints, timers, call frequency |
shared/config/levels.lua | Level titles and rewards |
shared/config/locations.lua | The tow yard and the shared tow drop-off point |
shared/config/events.lua | The list of breakdown scenes players get sent to |
shared/config/vehicles.lua | The tow truck |
shared/config/flatbed.lua | The flatbed truck, its animated bed, and the winch |
shared/config/props.lua | Tools, animations, and attachment positions |
shared/config/visuals.lua | Map blips, NPCs, cones, traffic zones, effects |
shared/config/outfits.lua | Optional work uniforms |
shared/config/tutorials.lua | First-time player hints |
General Settings
File: shared/config.lua
| Setting | Default | What it does |
|---|---|---|
Config.usePhone | true | Sends service messages and pay summaries to the player's phone as emails. Set to false if your server's phone isn't supported — players get notifications instead |
Config.shiftSummary | 'text' | How the end-of-shift pay breakdown is shown: 'text' (phone email / notification) or 'nui' (on-screen pop-up) |
Config.menuStyle | 'nui' | The shift menu style: 'nui' (full custom menu) or 'menu' (simple text menu) |
Config.MaxSlotsPerLocation | 3 | How many players can be clocked in at one tow yard at the same time |
Note: the 'nui' pop-up summary only works when Config.menuStyle is not 'menu'.
Job Settings
File: shared/config/job.lua
Crew
| Setting | Default | What it does |
|---|---|---|
Config.Crew.maxSize | 2 | Crew size limit |
Config.Crew.inviteTimeout | 60 | Seconds before a crew invite expires |
Config.Crew.coopBonusPercent | 0.15 | Extra pay for crew jobs (0.15 = 15% bonus) |
Payment
| Setting | Default | What it does |
|---|---|---|
Config.Payment.distanceBonusPerUnit | 0.30 | Dollars earned per meter driven to the scene |
Config.Payment.speedBonusAmount | 25 | Bonus for finishing before the timer runs out |
Config.Payment.vehicleDestroyFine | 200 | Fine charged when the tow truck is destroyed |
Config.Payment.streakBonusPerDay | 10 | Bonus per streak day, added to every job |
Config.Payment.maxStreakDays | 7 | Daily streak cap |
Config.Payment.gasFeePercent | 0.05 | Gas fee taken out of the shift total (0.05 = 5%) |
Config.Payment.taxPercent | 0.10 | Taxes taken out of the shift total (0.10 = 10%) |
Config.Payment.payoutAccount | 'bank' | Which account shift pay goes into ('bank', 'cash', etc.) |
Config.Payment.fineAccount | 'cash' | Which account the truck-destruction fine comes out of |
Base pay per job type:
Config.Payment.basePay = {
[JobType.FUEL_HELP] = 60,
[JobType.CHANGE_WHEEL] = 80,
[JobType.TOWING] = 100,
[JobType.BATTERY_CHANGE] = 70,
}Complaints
| Setting | Default | What it does |
|---|---|---|
Config.Complaints.maxComplaints | 3 | Complaints before the player is suspended |
Config.Complaints.timeoutMinutes | 30 | How long the suspension lasts |
Config.Complaints.vehicleDestroyPenalty | 1 | Complaints added for destroying the truck |
Config.Complaints.deathPenalty | 1 | Complaints added for dying / going down on shift |
Config.Complaints.decayPerJob | 1 | Complaints removed per completed job |
Timer
| Setting | Default | What it does |
|---|---|---|
Config.Timer.baseTime | 90 | Starting time limit in seconds for every job |
Config.Timer.timePerDistanceUnit | 0.20 | Extra seconds added per meter between the player and the scene |
Config.Timer.expiredPenalty | 0.85 | Pay multiplier when the job finishes late (0.85 = paid 85%) |
So a job 1,000 meters away gets 90 + 200 = 290 seconds. Late jobs can still be finished — they just pay less and lose the speed bonus.
Calls
| Setting | Default | What it does |
|---|---|---|
Config.Calls.minIntervalSeconds | 15 | Shortest wait before the next call comes in |
Config.Calls.maxIntervalSeconds | 45 | Longest wait before the next call comes in |
Config.Calls.responseTimeSeconds | 30 | How long the player has to accept or decline |
Config.Calls.maxMissedCalls | 3 | Declined + expired calls allowed before auto clock-out |
Config.Calls.enabledJobTypes | nil | Restrict dispatch to specific job types. nil = all types. Set a list to limit it, e.g. { JobType.TOWING, JobType.FUEL_HELP } |
After a towed vehicle is dropped off, it's removed automatically. Config.Calls.deliveredVehicleDespawn controls that removal — it waits delay milliseconds, then fades the vehicle out over fadeMs milliseconds:
Config.Calls.deliveredVehicleDespawn = { delay = 2000, fadeMs = 1200 } -- wait 2s, fade over 1.2sStranded Vehicle Marker
An overhead marker floats over the stranded vehicle so players can find it, but only when they're close and holding a key.
| Setting | Default | What it does |
|---|---|---|
Config.StrandedMarker.key | 74 | Control id the player holds to show the marker (74 = H) |
Config.StrandedMarker.range | 50.0 | How close (in meters) the player must be for the marker to appear |
Levels
File: shared/config/levels.lua
Five levels by default, from Trainee to Master Technician. Each level entry defines:
title— the rank name shown to the playerrequiredJobs— total completed jobs needed to reach itpayMultiplier— multiplies every job's pay (1.0 up to 1.5 by default)tipChance— how often the motorist tips (0.10= 10% of jobs)tipRange— the smallest and largest possible tip
You can add, remove, or re-tune levels freely — just keep requiredJobs increasing from one level to the next.
Locations
File: shared/config/locations.lua
Shared tow drop-off point
Config.TowingDeliveryPoint = vector3(2387.94, 3088.48, 48.19)Towed cars get delivered here unless a breakdown scene defines its own drop-off. If you remove this line entirely, towed cars get delivered to the tow yard instead.
Tow yards
The resource ships with 1 tow yard. Each entry in Config.Locations has:
name— the label shown on the map blip and in messagescoordsandheading— where the dispatcher NPC standsvehicleSpawn— where the tow truck appears on clock-inmenuCamera— the camera angle used behind the full shift menu
To add or change tow yards, edit Config.Locations directly in this file — each entry is one yard.
Events (Breakdown Scenes)
File: shared/config/events.lua
Each event is one possible service call. The resource ships with 40 (10 per job type). Each entry has:
| Field | What it does |
|---|---|
type | The job type: JobType.FUEL_HELP, JobType.CHANGE_WHEEL, JobType.TOWING, or JobType.BATTERY_CHANGE |
label | The job name shown to the player (a translation key from locales/en.json) |
vehicle | The model of the stranded car (e.g. 'Asea') |
coords | Where the stranded car spawns, plus its facing direction |
fuelBone | Fuel jobs only, optional — which point on the car the fueling target attaches to (the fuel cap bone) |
deliveryCoords | Towing jobs only, optional — a custom drop-off for this scene |
npcDriver | true to spawn a stranded driver waiting by the car |
Dispatch avoids sending a player to the same spot twice in a row, and won't repeat a scene until all of them have been used in that shift.
To add or change breakdown scenes, edit Config.Events directly in this file — each entry is one scene.
Vehicle
File: shared/config/vehicles.lua
| Setting | Default | What it does |
|---|---|---|
Config.Vehicle.mode | 'flatbed' | Which towing style the job uses: 'flatbed' (the streamed flatbed truck with an animated bed and scripted winch — the default) or 'towtruck' (the native tow-arm hook). See the Flatbed section for the flatbed truck's own settings |
Config.Vehicle.model | 'towtruck' | The tow truck model used when Config.Vehicle.mode is 'towtruck' |
Config.Vehicle.spawnDistance | 5.0 | How clear the spawn area must be for the truck to appear |
Config.Vehicle.healthCheckInterval | 1000 | How often (in milliseconds) the truck's condition is checked |
Config.Vehicle.destroyedThreshold | 150 | Engine health below this counts as destroyed |
Config.Vehicle.damageChargeRate | 0.50 | Dollars charged per point of body damage at clock-out |
Config.Vehicle.damageChargeThreshold | 950 | Body health above this is considered "undamaged" — no charge |
Config.Vehicle.livery | -1 | Paint job index for models with multiple liveries (-1 = leave default) |
Config.Vehicle.extras | nil | Turn vehicle extras on/off, e.g. { [1] = false }. Useful for custom replacement models |
Flatbed
File: shared/config/flatbed.lua
These settings only apply when Config.Vehicle.mode is 'flatbed' (the default). The flatbed truck uses a separate animated bed prop and a scripted winch to load the stranded car, so its models and offsets live in their own file.
| Setting | Default | What it does |
|---|---|---|
Config.Flatbed.model | 'flatbed3' | The flatbed truck model |
Config.Flatbed.bedModel | 'inm_flatbed_base' | The animated bed prop that slides and tilts |
Config.Flatbed.truckExtras | { [1] = false } | Vehicle extras forced on the truck. Extra 1 is the truck's static built-in bed, turned off so the animated bed prop can replace it |
Config.Flatbed.slideDuration | 4.0 | Seconds for the bed to slide back or forward |
Config.Flatbed.tiltDuration | 2.0 | Seconds for the bed to tilt down or up |
The bed moves through a set of positions as it lowers and raises (raised → slide back → tilt down → lowered, then reverse). Those positions are stored in Config.Flatbed.bedOffsets, and the final resting spot of the towed car on the bed is Config.Flatbed.carRest:
Config.Flatbed.bedOffsets = {
raised = { pos = vec3(0.0, -3.8, 0.45), rot = vec3(0.0, 0.0, 0.0) },
back = { pos = vec3(0.0, -4.0, 0.0), rot = vec3(0.0, 0.0, 0.0) },
lowered = { pos = vec3(0.0, -0.4, -1.0), rot = vec3(12.0, 0.0, 0.0) },
}
Config.Flatbed.carRest = { pos = vec3(0.0, 1.5, 0.3), rot = vec3(0.0, 0.0, 0.0) }Winch
Config.Flatbed.winch controls the rope-and-hook the player pulls out to load the car:
| Setting | Default | What it does |
|---|---|---|
Config.Flatbed.winch.hookProp | 'prop_rope_hook_01' | The hook prop on the end of the rope |
Config.Flatbed.winch.ropeLength | 15.0 | Maximum rope length; the hook auto-drops beyond this |
Config.Flatbed.winch.maxAttachDistance | 12.0 | Furthest the car can be from the bed to still be winched |
Config.Flatbed.winch.pullDuration | 8.0 | Seconds to pull the car up onto the bed |
Config.Flatbed.winch.grabRange | 2.0 | How close to the anchor point you must be to grab or return the hook |
Config.Flatbed.winch.attachProgressDuration | 1500 | Milliseconds for the "attach hook" progress step |
Config.Flatbed.winch.dropKey | 73 | Control id for dropping the hook (73 = X) |
The winch also stores the rope anchor point on the bed (anchorOffset), and the hand/animation settings used while carrying and hooking the rope (pickupAnimation, handAttach). Most servers never need to touch these unless they swap the flatbed for a custom model.
The tools, spare wheel, and cones ride on the animated bed in flatbed mode, so their positions are stored here too as Config.Flatbed.props and Config.Flatbed.coneAttach — the equivalents of the truck-bed positions in shared/config/props.lua.
Props (Tools)
File: shared/config/props.lua
Controls the physical tools — the jack, spare wheel, jerry can, and battery:
- which prop models are used
- where they sit on the truck bed
- how they attach to the player's hands when carried
- the animations for fueling, wheel changes, and battery swaps
- jack raise/lower steps and timing
- which bone each wheel maps to on the stranded car
Most servers never need to touch this file unless they swap the tow truck for a custom model and need to adjust where the tools sit.
Visuals
File: shared/config/visuals.lua
Dispatcher and map blips
Config.NpcModel/Config.NpcScenario— who the dispatcher is and what he's doingConfig.Blip— the tow yard map blip (setConfig.Blip.enabled = falseto hide it)Config.EventBlip— the blip marking an active job sceneConfig.DeliveryBlip— the blip marking the tow drop-off
Stranded drivers
Config.DriverPeds— the pool of 16 possible stranded-driver looksConfig.StrandedNPC— where the driver stands, the animations they cycle through while waiting, how they act when the timer runs low, and from how far away they react to you
Scene dressing
Config.BreakdownVisuals— cosmetic damage, engine smoke, and hazard lights on the stranded car
Traffic safety
Config.SafetyZone — slows AI traffic around active scenes in rings (4 mph inside 15m, 15 mph inside 30m, 25 mph inside 50m by default), keeps ambient pedestrians away, and clears parked cars from the scene. Set enabled = false to turn all of it off.
Cones
| Setting | Default | What it does |
|---|---|---|
Config.Cones.enabled | true | Master switch for the cone system |
Config.Cones.model | 'prop_roadcone01a' | The cone prop |
Config.Cones.maxCones | 3 | Cones carried on the truck |
Config.Cones.bonusPerCone | 5 | Bonus per cone placed when the job completes |
Config.Cones.placementRange | 6.0 | How far from the player a cone can be placed (meters) |
The rest of the cone settings control where cones sit on the truck bed and how they're held.
Repair effects
Config.RepairEffects.spark — the spark effect shown during wheel and battery work.
Waypoints
Config.Waypoints — size and height of the floating marker shown when holding H during a job.
Outfits
File: shared/config/outfits.lua
| Setting | Default | What it does |
|---|---|---|
Config.uniformsEnabled | false | Master switch for the uniform system |
Config.RoadsideOutfitMale | placeholder | Clothing pieces for male characters |
Config.RoadsideOutfitFemale | placeholder | Clothing pieces for female characters |
When enabled, players get a button in the shift menu to put the uniform on or take it off while clocked in. Their own clothes come back automatically on clock-out, hospitalization, or disconnect.
Each outfit has:
components— clothing pieces as{ component_id, drawable, texture }props— accessories like hats as{ prop_id, drawable, texture }
The shipped values are placeholders — replace them with clothing IDs that fit your server before enabling uniforms.
Tutorials
File: shared/config/tutorials.lua
Config.Tutorials holds the 14 first-time hint pop-ups. Each entry defines:
icon— a Font Awesome icon nametitleandbody— translation keys fromlocales/en.jsonposition— where on screen it appears (optional, defaults to top-right)duration— how long it stays up in seconds (optional)
To change the actual hint text, edit locales/en.json.
Built-In Server Protection
File: server/main.lua (not meant to be edited)
The server automatically ignores suspiciously fast repeated requests (clocking in, accepting calls, completing jobs, crew invites, prop/cone syncing, uniform toggles, and so on) to protect against spam and cheating. This is built in — there's nothing to configure.