Features
Overview of the current oxide-roadsideassistancejob gameplay flow and systems.
Shift Flow
Players manage the job from the dispatcher NPC at the tow yard using the configured o-link target integration.
A typical shift:
- Walk up to the dispatcher NPC at the tow yard.
- Open the shift menu and clock in — a work truck spawns with keys, a full tank, and tools on the bed.
- Wait for dispatch to call with a stranded motorist.
- Accept the call, drive out, and complete the work at the scene.
- Keep taking calls for as long as you like.
- Return to the dispatcher and clock out to get paid for the whole shift.
Each tow yard only has room for a limited number of workers at once (Config.MaxSlotsPerLocation, default 3). If the yard is full, players have to wait for a slot to open.
Menu modes
Config.menuStyle supports:
'nui': full-screen Vue menu with location camera, progression card, and crew portraits'menu':olink.menuflow for servers that want a lighter interface
Both modes support:
- clocking in and out
- viewing progression and complaint state
- inviting a crew partner
- responding to pending crew invites
- the uniform on/off button (when uniforms are enabled)
Shift states
IDLEWAITINGON_CALLWORKING
Normal flow is:
IDLE -> WAITING -> ON_CALL -> WORKING -> WAITING
Dispatch System
After clock-in, dispatch waits a random amount of time between Config.Calls.minIntervalSeconds and Config.Calls.maxIntervalSeconds (15–45 seconds by default), then sends an incoming service call showing the job type and how far away it is.
Current call behavior
- Accept with
E - Decline with
Backspace - Response window is
Config.Calls.responseTimeSeconds(30 seconds) - Missed and declined calls both count toward the same cap
- Hitting
Config.Calls.maxMissedCallsautomatically ends the shift — the player is still paid for completed jobs Config.Calls.enabledJobTypescan restrict dispatch to specific job types
Event rotation
The resource tracks used events during a shift and avoids sending a player to the same spot twice in a row. Once all events are used, the pool resets.
Job Types
There are 4 job types. Each one walks the player through its steps with on-screen guidance and interaction prompts.
Fuel Help
- Take the jerry can from the truck
- Move to the vehicle fuel target
- Complete the fueling interaction
Wheel Change
- Take the jack from the truck
- Place the jack under the stranded vehicle
- Change the selected wheel using the spare
- Remove the jack
One tire index is selected at runtime for the scene.
Battery Change
- Remove the dead battery from the stranded vehicle
- Retrieve the replacement battery from the truck
- Install the new battery
Towing
Load the stranded vehicle, drive it to the delivery location, and unload it there.
There are two towing styles, chosen with Config.Vehicle.mode:
- Flatbed (the default) — a flatbed truck whose bed is a separate animated prop. The player pulls out a winch hook, attaches it to the stranded car, and the winch pulls the car up onto the bed as it lowers and tilts. At the drop-off the bed lowers again and the car rolls off.
- Tow truck — the classic tow-arm hook. The player hooks the car to the arm, drives it over, and unhooks it at the drop-off.
You can switch between the two at any time by changing Config.Vehicle.mode ('flatbed' or 'towtruck'). See Configuration for the flatbed truck's own settings.
Towing uses event.deliveryCoords when present, otherwise Config.TowingDeliveryPoint, otherwise the tow yard as the last fallback. After delivery the towed vehicle fades out automatically (Config.Calls.deliveredVehicleDespawn).
Finding the stranded vehicle
Holding H near the scene (within Config.StrandedMarker.range, 50 meters by default) shows a name card over the stranded vehicle. The marker only appears while the key is held — there is no always-on floating marker.
Mission Timers
Timers are distance-based, not fixed per event.
Current formula:
timeLimit = Config.Timer.baseTime + math.floor(distance * Config.Timer.timePerDistanceUnit)If the timer expires:
- the job can still be completed — nothing fails
- the speed bonus is lost
Config.Timer.expiredPenaltyis applied to the pay calculation (85% by default)
The Work Truck
The truck spawns with the tools for every job type sitting on the bed:
- car jack
- spare wheel
- jerry can
- battery
- 3 safety cones
These are attached to the work vehicle and moved between truck, player, and job scene through o-link.target interactions. The truck also receives keys through o-link.vehiclekey and a full tank of fuel.
The truck is managed by the server: it survives a crew member crashing or disconnecting, transfers to the crew partner, and is reliably cleaned up on clock-out, respawn, disconnect, and resource restart.
If the truck takes damage during the shift, a repair charge is deducted from the final pay. If it gets destroyed, the active job ends, the destruction fine is taken from cash on the spot, a complaint is added, and no more calls come in until the player clocks out.
Safety Cone System
Cones can be taken from the truck, carried, ghost-placed, picked back up, and returned.
Current defaults:
- 3 cones max
- 6m placement range
- $5 per cone bonus when the job completes
Placed cones also create traffic speed zones through the configured safety zone system.
Progression
Progression is stored in the unified job_progression table under job = 'roadside'.
Level rewards
| Level | Title | Required Jobs |
|---|---|---|
| 1 | Trainee | 0 |
| 2 | Mechanic | 15 |
| 3 | Senior Technician | 40 |
| 4 | Team Lead | 80 |
| 5 | Master Technician | 150 |
Levels increase:
- pay multiplier (1.0× up to 1.5×)
- tip chance
- tip range
Daily streaks
Completing at least one job on consecutive real-world days increases daily_streak up to the configured cap. Each streak day adds a $10 bonus to every completed job, capped at 7 days by default.
Complaints and timeout
Complaints are added for:
- work truck destruction
- death or downed state during shift
Complaints decay as jobs are completed. Reaching the configured limit (3 by default) causes a temporary timeout (30 minutes by default).
Payment
Per-job payment includes:
- base pay by job type ($60 fuel / $80 wheel / $70 battery / $100 towing)
- distance bonus
- on-time speed bonus
- cone bonus
- level multiplier
- late-job penalty multiplier
- streak bonus
- random tip
Per-job formula:
subtotal = floor((basePay + distanceBonus + speedBonus + coneBonus) * levelMultiplier * timerMultiplier)
total = subtotal + streakBonus + tipAt clock-out, the shift total has deductions taken out:
- vehicle damage repair charge
- 5% gas fee
- 10% taxes
The final amount is deposited to the account set by Config.Payment.payoutAccount (bank by default) through o-link.money. The $200 truck-destruction fine is the one exception — it's taken from cash immediately when the truck is lost.
Players still get paid for completed work even if the shift ends unexpectedly — hospitalization, disconnecting, or a server restart all settle the shift automatically.
Crew System
Crews are limited to 2 players who share the same truck and calls.
Crew behavior
- The inviter must already be on shift and becomes the crew leader
- The invite target must be nearby and expires after 60 seconds
- The target cannot already be in a crew or active shift
- The leader is the only member who accepts or rejects dispatch calls
- Both members can participate in the scene and receive pay and job progress
- Crew jobs add
Config.Crew.coopBonusPercent(15% by default)
Crew continuity
If one member clocks out, disconnects, or goes down, the other can keep working — the server-managed truck and the shift carry over to whoever remains.
NPC and Scene Presentation
For non-towing jobs, stranded NPC drivers exit the vehicle, wait nearby, and switch between ambient and reactive animations depending on player distance and timer state — waving the player over, pacing, and getting visibly impatient when the timer runs low.
Breakdown scenes can include:
- hazard lights
- cosmetic damage
- engine smoke
- flat tires for wheel jobs
AI traffic also slows down around the scene while work is in progress.
Summary Output
Config.shiftSummary controls how end-of-shift information is shown:
'text': service message througho-link.phonewhenConfig.usePhone = true, otherwise notification (default)'nui': on-screen popup summary whenConfig.menuStyle ~= 'menu'
Tutorials
The resource includes 14 tutorial prompts covering:
- first clock-in
- incoming calls
- first decline or miss
- each job type, including a separate hint for flatbed towing
- cone usage
- late completion
- vehicle destruction
- first completion
- crew formation
- level-up
Each hint only shows once per player. Players can manage them with:
/roadside tutorials— turn hints on or off/roadside tutorialreset— make all hints show again
Uniforms
Optional opt-in roadside uniform, off by default. When enabled, players get a shift-menu button to put the uniform on or take it off while clocked in. The player's prior appearance is restored automatically on clock-out, respawn, or disconnect.
- Toggled by
Config.uniformsEnabled - Separate component/prop sets for male and female peds
- Configured in
shared/config/outfits.lua