Feature Guide

Overview of the current oxide-pizzajob gameplay flow and systems.

Overview of the current oxide-pizzajob gameplay flow and systems.

Shift Flow

Players manage the job from the counter NPC at each Pizza This! location using the configured o-link target integration.

Config.menuStyle supports:

  • 'nui': full-screen Vue menu with cinematic camera and progression card
  • 'menu': olink.menu flow for servers that want a lighter interface

Both modes support:

  • clocking in and out
  • viewing progression and complaint state
  • requesting a new batch of orders
  • cancelling the batch they're on (only shown while a batch is running — see Cancelling the current orders)
  • toggling the pizza uniform (only shown when uniforms are turned on — see Uniform System)

Summary modes

Config.shiftSummary controls the immediate clock-out presentation:

  • 'nui': popup summary screen
  • 'text': notification summary

Separately from that, when Config.usePhone is on, the player also gets the detailed pay summary on their phone as a text or mail. See Phone Messaging.

Shift states

  • IDLE
  • CLOCKED_IN
  • DELIVERING

Normal flow is:

IDLE -> CLOCKED_IN -> DELIVERING -> CLOCKED_IN

Slot limits

Each shop has a configurable maximum number of concurrent shift slots (Config.MaxSlotsPerLocation, default 3). If all slots are full, new players cannot clock in at that location.

Order Types

When requesting orders from the counter menu, the server generates a batch based on the player's current progression level.

Order TypePay MultiplierUnlock LevelRoll Chance
Standard1.0x1fallback
Priority1.5x420% when eligible
Catering3.0x510% when eligible
  • Standard orders are the default delivery flow.
  • Priority orders add a higher payout multiplier.
  • Catering orders are high-value bulk deliveries.

Delivery Phase

Delivery flow

Player clocks in at a shop counter.
The first batch is automatically requested after the pickup progress bar.
A GPS blip and route appear for the first delivery address.
A timer starts based on distance.
Player carries the pizza box prop to a nearby vehicle and stores it.
Player drives to the delivery zone.
On exit, the pizza box re-attaches automatically.
Player walks to the marker and presses E to deliver.
A customer NPC spawns and plays a reaction animation based on delivery quality.
Payment feedback appears and the route advances to the next order.

After all deliveries in a batch are complete, the shift returns to CLOCKED_IN.

Delivery zones

Each shop location has a set of delivery zones with minimum level requirements:

LocationLevel 1 ZonesLevel 2 ZonesLevel 3 Zones
Downtown Pizza This161422
Del Perro Pizza This101010
Mission Row Pizza This101010

Higher-level zones are generally further from the shop.

Mission timers

The timer is distance-based:

Config.Timer.baseTime + math.floor(distance * Config.Timer.timePerDistanceUnit)

If the timer expires:

  • the delivery can still be completed
  • the late-delivery penalty multiplier is applied (Config.Timer.expiredPenalty, default 0.85)
  • rush orders use their own configured time limit

Cancelling the current orders

A player who picks up a batch and then can't finish it — the address is across a blocked road, a friend needs them, or they just want a different area — can drop the batch without ending their shift. There are two ways to do it:

  • From the shift menu: a Cancel Current Task option appears in the counter menu, but only while a batch is actually running.
  • From the delivery vehicle: aim the third-eye (interaction) at the work vehicle and pick Cancel Current Task.

Either way, a short confirmation menu appears first, so nobody cancels by accident.

When the batch is cancelled:

  • the remaining orders are dropped and the pizza box is put away
  • the player stays clocked in and keeps the delivery vehicle — no need to drive back to the shop
  • deliveries already completed still count, and their earnings are still paid out at clock-out
  • no complaint is added and no fine is charged — cancelling is not a punishment

The only cost is a short wait before the next batch. By default the player must wait 60 seconds; asking the counter NPC sooner tells them how many seconds are left. The wait is tied to the character, so disconnecting and coming back doesn't skip it. Adjust or disable it with Config.Cancel.cooldownSeconds — see Configuration → Cancel.

Random Events

Each delivery can roll a random event.

Customer Not Home

  • 8% chance by default
  • Player must wait through a short progress bar before completion.

Rush Order

  • 10% chance by default
  • Uses a tighter time limit.
  • Awards an extra 1.5x multiplier if completed in time.

Wrong Address

  • 5% chance by default
  • The player gets a "the address seems wrong... rerouting!" message and the delivery point is set to a different address than the one they were originally sent to.
  • This is a flavor event. The delivery is completed normally at the address shown on the map, with no change to the payout.

Progression

Progression is stored in the unified job_progression table under job = 'pizza'.

Level rewards

Levels increase:

  • pay multiplier
  • tip chance
  • tip range
  • batch size
  • access to Priority and Catering orders

Default progression is 5 levels from Trainee through Veteran.

Daily streaks

Completing at least one delivery on consecutive real-world days increases daily_streak up to Config.Payment.maxStreakDays (default 7). Missing a day resets the streak to 1.

Complaints and timeout

Complaints are added for:

  • delivery vehicle destruction
  • death or downed state during shift

Complaints decay as deliveries are completed. Reaching Config.Complaints.maxComplaints (default 3) causes a temporary timeout of Config.Complaints.timeoutMinutes (default 30 minutes).

Payment

Per-delivery payment includes:

  • base pay
  • distance bonus
  • speed bonus
  • order multiplier
  • rush multiplier
  • level multiplier
  • damaged-pizza multiplier
  • late-delivery multiplier
  • streak bonus
  • random tip

Per-delivery formula:

subtotal = (basePay + distanceBonus + speedBonus)
           * orderMultiplier
           * rushMultiplier
           * levelMultiplier
           * qualityMultiplier
           * timerMultiplier
total = subtotal + streakBonus + tip

An order reached faster than any vehicle could drive there (Config.Payment.maxTravelSpeed, 50 metres per second in a straight line from the shop, counted from when the batch was handed out) pays no distance bonus and no speed bonus. Normal driving never triggers it.

How players get paid

There are two parts:

  • Tips are paid immediately, in cash, the moment each delivery is completed.
  • Everything else (base pay, bonuses, streak, etc.) is added up across the whole shift and paid out as one lump sum when the player clocks out.

The lump sum has deductions taken off before it is paid:

  • vehicle damage charge
  • gas fee (Config.Payment.gasFeePercent, default 5%)
  • taxes (Config.Payment.taxPercent, default 10%)

The final net amount is paid into the account set by Config.Payment.payoutAccount (default bank). Tips go to Config.Payment.tipAccount (default cash), and the vehicle-destroy fine is taken from Config.Payment.fineAccount (default cash). All money handling goes through o-link.money.

The lump sum is also paid when a shift ends without a clock-out: when the resource restarts (every running shift is paid) or when an admin deletes the player's shop. The pay summary still goes to the player's phone when Config.usePhone is on, but no on-screen summary shows.

A player who disconnects, logs out or switches character on shift isn't paid at that moment, because their character may already be gone. Their net pay is worked out as a clock-out would, kept in the database, and paid a few seconds after that character next loads in, with a notification saying how much it was. It is paid once, even if the server restarts in between. If the database is unreachable at that moment, the job keeps the pay and saves it again every minute, or pays it straight away if the player comes back first.

A shift lost to going down is not paid: the lump sum is dropped when the player is taken to hospital, and also when they leave before respawning. Tips already paid are kept.

Customer Reactions

Customers react based on delivery performance:

  • excellent: fast delivery
  • good: on-time standard delivery
  • poor: late delivery
  • bad: damaged pizza

The customer NPC walks to the player, performs the reaction animation, receives the pizza prop, then walks away and despawns.

Pizza Prop System

Players carry a visible pizza box prop (prop_pizza_box_02) during deliveries.

Prop behavior

  • attached on foot with the configured carry animation
  • stored in the work vehicle through an o-link.target local entity action
  • vehicle entry blocked while the pizza is unstored
  • detached on vehicle entry and re-attached on vehicle exit
  • transferred to the customer on delivery

Vehicle System

The delivery vehicle:

  • uses the current level's configured model, livery, and extras
  • gets custom colors and the PIZZA plate
  • receives keys through o-link.vehiclekey
  • gets full fuel through o-link.fuel
  • is health-monitored during the shift

If the vehicle is destroyed:

  • current deliveries are cancelled
  • a complaint is added
  • the configured destroy fine is removed from cash (never more than the player has)
  • the player returns to CLOCKED_IN

HUD Overlay

A NUI delivery panel appears during DELIVERING showing:

  • current timer
  • late indicator
  • batch progress

With Oxide HUD

On a server running Oxide HUD (free, needs o-link 1.12.1 or newer), players can move the delivery timer and the tutorial cards in the /hud editor, or switch them off. Both hide with the HUD (pause menu, character select, death) and use the server's accent colour (see Config.UseHudAccent in General Settings). Without Oxide HUD everything stays where it is.

Waypoints

A 3D floating waypoint marker appears above the active destination. It scales by distance and can be shown by holding H.

Phone Messaging

When Config.usePhone is true, the pizza shop sends the player a phone message for:

  • the welcome, when the first batch of the shift is handed out (it names the first delivery address)
  • vehicle destruction, with the repair fee that was charged
  • going down or dying on shift
  • being taken to hospital, which also ends the shift
  • the detailed pay summary at clock-out, and when a restart or a deleted shop ends the shift

How each message arrives depends on the phone your server runs:

PhoneArrives as
Oxide Phone, gksphone, okokPhone, qs-smartphone (Quasar V3)A text message from the shop
qb-phone, lb-phone, yseries, qs-smartphone-pro, older qs-smartphone versionsMail

Any message that can't be sent as a text is sent as mail instead. Texts need o-link 1.11.0 or newer; see Installation → Phone messaging.

The immediate clock-out UI still follows Config.shiftSummary.

Gigs app on Oxide Phone

If your server runs Oxide Phone, its Gigs app shows this job: the pizza shops and whether each one has room for another driver, the player's current shift (the order they're on, batch progress, pay so far and tips), and their level.

While the player carries an Oxide Phone and the Gigs app is on, shift updates arrive there as Gigs notifications instead of texts. The pay summary at clock-out is the exception: it always arrives as a text or mail. There is nothing to set up — just run Oxide Phone and this job.

Uniform System

Uniforms are turned off by default (Config.uniformsEnabled = false). When you turn them on, players can put on or take off a pizza uniform from the shift menu. Separate outfits are configured for male and female character models through o-link.clothing. The resource saves the player's current outfit before applying the uniform and puts it back when the uniform is removed or the shift ends.

The default outfit values are placeholders — you must set your server's real uniform component IDs before the uniform will look correct. Set them in /pizza settings under Uniforms (Male outfit and Female outfit), or in shared/config/outfits.lua before the resource's first start. A file edit after that needs a restart and Reset to default on the outfit.

Tutorials

The resource includes 8 tutorial cards covering:

  • first clock-in
  • first delivery start
  • first pizza storage
  • first delivery complete
  • first timer expiry
  • first vehicle damage
  • first level-up
  • first batch complete

Players can toggle or reset tutorials with:

  • /pizzatutorials (or /pizza tutorials)
  • /pizzatutorialreset (or /pizza tutorialreset)

Next Steps