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:

  1. Walk up to the dispatcher NPC at the tow yard.
  2. Open the shift menu and clock in — a work truck spawns with keys, a full tank, and tools on the bed.
  3. Wait for dispatch to call with a stranded motorist.
  4. Accept the call, drive out, and complete the work at the scene.
  5. Keep taking calls for as long as you like.
  6. 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.

Config.menuStyle supports:

  • 'nui': full-screen Vue menu with location camera, progression card, and crew portraits
  • 'menu': olink.menu flow 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

  • IDLE
  • WAITING
  • ON_CALL
  • WORKING

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.maxMissedCalls automatically ends the shift — the player is still paid for completed jobs
  • Config.Calls.enabledJobTypes can 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.expiredPenalty is 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

LevelTitleRequired Jobs
1Trainee0
2Mechanic15
3Senior Technician40
4Team Lead80
5Master Technician150

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 + tip

At 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 through o-link.phone when Config.usePhone = true, otherwise notification (default)
  • 'nui': on-screen popup summary when Config.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

Next Steps