Configuration Reference
How settings work in oxide-pizzajob (the /pizza settings editor and factory defaults), plus every setting and its default — pay, events, cancelling, levels, shops, vehicles, visuals, and model compatibility.
Complete reference for oxide-pizzajob configuration files.
How Settings Work
Settings are edited in-game with the /pizza settings command (admins only). Changes save to your database and apply instantly — no restart needed. Values are checked before saving, and a bad value is rejected with a reason.
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, even after a restart. Only brand-new settings added by a future update are imported from the files.
Every setting in the editor has a Reset to default button (the circular arrow). It loads that setting from the config files as they were when the server last started. So to use a file edit on a server that has already started: edit the file, restart the server, then open /pizza settings and press Reset to default on that setting. Reset replaces the whole setting with the file's version, so anything in it you changed in the editor goes back to the file's value too.
Every setting is database-managed this way — including Config.Locations (the pizza shops and their delivery zones). On an install that has already started once, add or change shops through the /pizza settings editor (Pizza shops, under Locations). Pressing Reset to default on Pizza shops replaces the whole shop list with the one in shared/config/locations.lua.
Two settings are never copied into the database, so they are always read from the files: Config.UseHudAccent in shared/config.lua, and Config.SettingsCommand in shared/config/models.lua, which only sets the command named in missing-model warnings.
Other resources can read and change these settings too, through the GetSetting and SetSetting server exports. See the API Reference.
The tables below document every setting and its factory default.
Config File Map
| File | Purpose |
|---|---|
shared/config.lua | Global toggles and shift limits |
shared/config/job.lua | Payment, random events, complaints, timer, order cancelling, reactions, animations |
shared/config/levels.lua | Progression level definitions |
shared/config/locations.lua | Pizza shops and delivery zones |
shared/config/vehicles.lua | Vehicle and pizza prop settings |
shared/config/visuals.lua | NPC, blip, customer, marker, and waypoint settings |
shared/config/outfits.lua | Uniform definitions |
shared/config/tutorials.lua | Tutorial card definitions |
shared/config/models.lua | Model replacements for game builds that lack a model |
shared/init.lua | Shared enums and o-link bootstrap |
General Settings
File: shared/config.lua
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Debug | boolean | false | Enables [oxide-pizzajob] debug logs |
Config.menuStyle | string | 'nui' | 'nui' for the Vue menu, 'menu' for olink.menu |
Config.usePhone | boolean | true | Send shift messages (welcome, incidents and the pay summary) to the player's phone. They arrive as texts on phones that support them and as mail on the rest. Texts need o-link 1.11.0 or newer; with an older o-link every message arrives as mail. When false, no phone messages are sent; the on-screen notifications still show. See Phone Messaging |
Config.shiftSummary | string | 'text' | 'nui' for popup summary, 'text' for notification summary |
Config.UseHudAccent | boolean | true | The delivery timer and the tutorial cards use your server's accent colour from Oxide HUD, set in Oxide HUD's Config.Theme. false keeps the job's own colours. Without Oxide HUD, or with no accent set there, nothing changes. Config file only: it is not in /pizza settings, so change it in the file and restart |
Config.MaxSlotsPerLocation | number | 3 | Maximum concurrent shifts per shop |
Config = {}
Config.Debug = false
Config.menuStyle = 'nui' -- 'nui' for Vue shift menu, 'menu' for olink.menu context menu
Config.usePhone = true -- Send shift messages to the player's phone
Config.shiftSummary = 'text' -- 'nui' for popup summary, 'text' for notification summary
Config.UseHudAccent = true
Config.MaxSlotsPerLocation = 3Job Settings
File: shared/config/job.lua
Payment
| Setting | Default | Description |
|---|---|---|
Config.Payment.basePay | 50 | Flat base pay per delivery |
Config.Payment.distanceBonusPerUnit | 0.50 | Bonus per distance unit |
Config.Payment.speedBonusAmount | 25 | Bonus for beating the timer |
Config.Payment.speedBonusTimeLimit | 180 | Speed bonus threshold in seconds |
Config.Payment.damagedPizzaThreshold | 300 | Vehicle body health threshold for damaged pizza |
Config.Payment.damagedPizzaMultiplier | 0.5 | Damaged pizza pay multiplier |
Config.Payment.vehicleDestroyFine | 100 | Cash fine when the vehicle is destroyed |
Config.Payment.streakBonusPerDay | 10 | Daily streak bonus per day |
Config.Payment.maxStreakDays | 7 | Maximum streak count used for bonus calculation |
Config.Payment.minDeliveryTimePerDistanceUnit | 0.05 | Anti-teleport minimum time scaling |
Config.Payment.absoluteMinDeliveryTime | 10 | Absolute anti-teleport minimum in seconds |
Config.Payment.maxTravelSpeed | 50.0 | Fastest believable trip in the editor, in metres per second along a straight line. An order reached faster than this from the shop, counted from when the batch was handed out (only possible by teleporting), pays no distance bonus and no speed bonus. The delivery still counts. This is a second check behind the two minimum times above, which turn a delivery down outright. Raise it if your server has very fast vehicles |
Config.Payment.gasFeePercent | 0.05 | Gas deduction percentage |
Config.Payment.taxPercent | 0.10 | Tax deduction percentage |
Config.Payment.payoutAccount | 'bank' | Account the net shift payout is deposited into (e.g. bank, cash, dirty) |
Config.Payment.tipAccount | 'cash' | Account per-delivery tips are paid into |
Config.Payment.fineAccount | 'cash' | Account the vehicle-destroy fine is taken from |
The vehicle-destruction fine can never take more money than the player has — notifications report the amount actually charged.
Random Events
| Setting | Default | Description |
|---|---|---|
Config.RandomEvents.customerNotHome.chance | 0.08 | Chance to force a wait at the door |
Config.RandomEvents.customerNotHome.waitTime | 10 | Wait duration in seconds |
Config.RandomEvents.rushOrder.chance | 0.10 | Chance to roll a rush order |
Config.RandomEvents.rushOrder.bonusMultiplier | 1.5 | Rush order bonus multiplier |
Config.RandomEvents.rushOrder.timeLimit | 120 | Rush order time limit |
Config.RandomEvents.wrongAddress.chance | 0.05 | Chance to reroute to a corrected destination |
Complaints
| Setting | Default | Description |
|---|---|---|
Config.Complaints.maxComplaints | 3 | Timeout threshold |
Config.Complaints.timeoutMinutes | 30 | Timeout duration |
Config.Complaints.vehicleDestroyPenalty | 1 | Complaints added on vehicle destruction |
Config.Complaints.deathPenalty | 1 | Complaints added on death |
Config.Complaints.decayPerDelivery | 1 | Complaints removed per successful delivery |
Timer
| Setting | Default | Description |
|---|---|---|
Config.Timer.baseTime | 90 | Base time in seconds |
Config.Timer.timePerDistanceUnit | 0.3 | Distance-based timer scaling |
Config.Timer.expiredPenalty | 0.85 | Late-delivery multiplier |
Current timer formula:
timeLimit = Config.Timer.baseTime + math.floor(distance * Config.Timer.timePerDistanceUnit)Cancel
Players can drop the batch of orders they're on without clocking out, using the Cancel Current Task option in the shift menu or on the delivery vehicle. Cancelling costs them nothing except a short wait before the next batch.
| Setting | Default | Description |
|---|---|---|
Config.Cancel.cooldownSeconds | 60 | Seconds a player must wait after cancelling before the counter will hand out new orders. Set to 0 to remove the wait completely |
Config.Cancel = {
cooldownSeconds = 60, -- Wait before new orders can be requested after cancelling (0 = no cooldown)
}The wait is stored against the character, not the player's connection, so relogging does not reset it. While it is running, requesting orders tells the player how many seconds are left. See Cancelling the current orders.
Customer Reactions
Config.CustomerReactions defines reaction tiers for:
excellentgoodpoorbad
Each tier includes walk speed, animation data, and an optional locale key for feedback.
Animations
Config.Animations currently defines:
pickup: counter order pickup animationdeliver: handoff animation
Levels
File: shared/config/levels.lua
Each entry in Config.Levels defines:
| Field | Description |
|---|---|
title | Display title |
requiredDeliveries | Deliveries required to unlock the level |
maxOrders | Maximum batch size |
vehicle | Vehicle model used at the level |
vehicleLivery | Livery index to apply to the vehicle (-1 = leave the model's default) |
vehicleExtras | Optional table of vehicle extras to force off, e.g. { [1] = false } (nil = leave defaults) |
tipChance | Tip probability |
tipRange | Min/max tip range |
payMultiplier | Pay multiplier |
priorityOrders | Enables Priority orders |
cateringOrders | Enables Catering orders |
The default config ships with 5 levels from Trainee through Veteran.
Locations
File: shared/config/locations.lua
Config.Locations is a list of pizza shops. The resource ships with 3, and you can have as many as you like. Each location entry contains:
| Field | Description |
|---|---|
name | Shop display name, shown on the map and in the shift menu |
coords | Where the counter NPC stands and where players interact — written as vector3(x, y, z) |
heading | Which way the counter NPC faces, in degrees (0–360) |
vehicleSpawn | Where the delivery vehicle appears on clock-in — written as vector4(x, y, z, heading), so it also sets which way the vehicle points |
menuCamera | The camera shot behind the shift menu (see below) |
deliveryZones | The list of addresses this shop delivers to |
menuCamera is only used when Config.menuStyle = 'nui':
| Field | Description |
|---|---|
coords | Where the camera sits — vector3(x, y, z) |
heading | Which way the camera looks, in degrees |
fov | How wide the shot is. Smaller numbers zoom in, larger numbers pull back. The shipped shops use 50.0 and 40.0 |
Each delivery zone contains:
| Field | Description |
|---|---|
coords | Delivery destination — where the customer meets the player |
minLevel | Minimum job level before this address is used |
label | Street name shown to players |
Adding another shop
Every entry in Config.Locations is a complete, self-contained shop. Add another entry and you get a second Pizza This! location with its own counter NPC, its own map blip, its own vehicle spawn, and its own set of addresses. Nothing else needs to be enabled.
Two things to know before you build one:
- Addresses belong to the shop they're listed under. The
deliveryZoneslist inside a shop entry is the only set of addresses that shop uses. A player who clocks in at shop 3 is never sent to shop 1's addresses, so give each shop enough of its own — at minimum a few atminLevel = 1, and enough overall to fill the largest batch (3 orders at the top levels in the shipped config). - A shift belongs to the shop the player clocked in at. Slots (
Config.MaxSlotsPerLocation, 3 by default) are counted per shop, so four shops means three drivers each, twelve in total. Players clock out at the shop where they started.
The counter NPC, the map blip, and the interaction prompt are created automatically for every entry in the list — there is nothing to register by hand.
You can edit, reorder or delete shops while drivers are on shift. A shift keeps its shop as long as the shop keeps either its name or its counter NPC spot (Clerk spot in the editor), so Get Orders still shows at the right shop and drivers keep their slots. If you delete a shop (or change its name and its clerk spot in the same save), the shifts there end straight away and are paid as a clock-out would pay them, the pay summary goes to the player's phone (when Config.usePhone is on), and the player is told "Your shop was removed, so your shift has ended."
On an install that has already started once, Config.Locations lives in the database, so add or edit shops through the /pizza settings editor (admins only, Pizza shops under Locations) — changes save and apply live, and the new shop's counter NPC and map blip appear right away without a restart. The Clerk spot, Vehicle spawn and Doorstep fields have a Place in world button that hides the menu and lets you put a preview exactly where you want it, so you don't need the builder commands. The Location Builder commands still capture coordinates by walking to each spot.
Editing shared/config/locations.lua on an install that has already started changes nothing on its own, even after a restart. To use the file, put every shop you want in it, restart the server, then press Reset to default on Pizza shops: that replaces the whole shop list, including any changes made in the editor, with the file's list. On a brand-new install, before the resource's very first start, editing the file is enough, because that is when the factory defaults are imported.
The editor has no field for menuCamera, so a shop you add in game opens the shift menu without the cinematic camera shot. Shops that already have one keep it when you edit them. To give a new shop a camera, add its menuCamera in shared/config/locations.lua and use Reset to default as above.
The shape of a single shop entry looks like this (the same fields you fill in through the editor, apart from menuCamera):
Config.Locations = {
-- ... the shops that already ship with the resource ...
{
name = 'Sandy Shores Pizza This', -- shown on the map and in the menu
coords = vector3(1960.00, 3740.00, 32.34), -- where the counter NPC stands
heading = 210.0, -- which way the NPC faces
vehicleSpawn = vector4(1955.00, 3745.00, 32.20, 120.0), -- where the vehicle appears
menuCamera = {
coords = vector3(1957.00, 3737.00, 34.00),
heading = 30.0,
fov = 50.0,
},
deliveryZones = {
{ coords = vector3(1975.00, 3820.00, 32.40), minLevel = 1, label = 'Alhambra Dr' },
{ coords = vector3(1988.00, 3830.00, 32.40), minLevel = 1, label = 'Alhambra Dr' },
-- ... add as many addresses as you want ...
},
},
}On a running install, enter these same values through /pizza settings. The new shop is saved to the database and its blip and counter NPC appear on the map right away — no restart needed. (Editing the file on a running install only takes effect after a restart and Reset to default on Pizza shops, as described above.)
Vehicles
File: shared/config/vehicles.lua
Vehicle Settings
There is no Config.Vehicle.model — the delivery vehicle model is set per level via the vehicle field in shared/config/levels.lua.
| Setting | Default | Description |
|---|---|---|
Config.Vehicle.spawnDistance | 5.0 | Spawn-area clearance threshold |
Config.Vehicle.healthCheckInterval | 1000 | Vehicle health polling interval in ms |
Config.Vehicle.destroyedThreshold | 150 | Engine health threshold for destruction handling |
Config.Vehicle.primaryColor | { 207, 31, 33 } | Primary RGB color |
Config.Vehicle.secondaryColor | { 255, 255, 255 } | Secondary RGB color |
Config.Vehicle.damageChargeRate | 0.50 | Charge per health point below threshold |
Config.Vehicle.damageChargeThreshold | 950 | Body health threshold for damage charge |
Spawned vehicles receive the configured colors and the PIZZA plate.
Pizza Prop
Config.PizzaProp defines:
- prop model
- attachment bone
- attachment offset and rotation
- carry animation data
Visuals
File: shared/config/visuals.lua
NPC and Blip Settings
| Setting | Default |
|---|---|
Config.NpcModel | 'S_M_Y_Chef_01' |
Config.NpcScenario | 'WORLD_HUMAN_CLIPBOARD' |
Config.Blip.enabled | true |
Config.Blip.sprite | 267 |
Config.Blip.color | 1 |
Config.Blip.scale | 0.5 |
Config.Blip.label | 'Pizza Shop' |
Customer Peds
Config.CustomerPeds is the random ped pool used for delivery customers.
Delivery Marker
Config.DeliveryMarker controls the in-world marker type, scale, color, and motion flags.
Waypoints
Config.Waypoints controls:
- height offset
- minimum and maximum scale
- near and far scaling distances
- render update interval
Outfits
File: shared/config/outfits.lua
| Setting | Default | Description |
|---|---|---|
Config.uniformsEnabled | false | Turns the uniform toggle on or off (off by default) |
Separate outfit definitions exist for:
Config.PizzaOutfitMaleConfig.PizzaOutfitFemale
Each outfit contains components and props arrays. These are applied through olink.clothing.
The default outfit values are placeholders — set your server's real uniform component IDs before enabling uniforms.
Tutorials
File: shared/config/tutorials.lua
The resource includes tutorial entries for:
first_clockinfirst_delivery_startfirst_store_pizzafirst_delivery_completefirst_timer_expiredfirst_vehicle_damagefirst_level_upfirst_batch_complete
Each entry defines an icon and the title/body text keys. An entry can also set position and duration, but these are optional and most tooltips leave them at the defaults (top-right, 10 seconds).
With Oxide HUD, every tutorial card left at the default position (top right) appears where each player puts the tutorial cards in the /hud editor. A card you give another position keeps that position.
Model Compatibility
File: shared/config/models.lua
Every model this job spawns is checked before it is requested. A model that doesn't exist on a player's game build (older builds lack newer DLC props) is skipped instantly with a warning naming it, instead of freezing the load. Nothing is substituted automatically — you choose the replacement.
| Setting | Default | Description |
|---|---|---|
Config.ModelSwaps | {} | List of { from = '...', to = '...' } rows. Replaces a prop, ped or vehicle model everywhere this job uses it |
Config.ModelSwaps = {
{ from = 'm25_1_prop_m51_dog_bowl_full', to = 'prop_cs_bowl_01' },
}On a running install, add rows under Compatibility in /pizza settings.
When a player reports a missing model, the server logs it and notifies online admins once per model, pointing them at /pizza settings. The warnings are capped per player and in total, so one misbehaving client can't flood admins or fill the log. A missing delivery-customer ped is skipped without a long timeout.
Enums
File: shared/init.lua
ShiftState
ShiftState.IDLEShiftState.CLOCKED_INShiftState.DELIVERING
OrderType
OrderType.STANDARDOrderType.PRIORITYOrderType.CATERING
DeliveryRating
DeliveryRating.EXCELLENTDeliveryRating.GOODDeliveryRating.POORDeliveryRating.BAD
Rate Limits
File: server/main.lua
Server-side rate limiting prevents action spam. These cooldowns are built in and don't need any configuration:
| Action | Cooldown |
|---|---|
completeDelivery | 5000 ms |
requestOrders | 3000 ms |
clockIn | 2000 ms |
clockOut | 2000 ms |
vehicleDestroyed | 10000 ms |
cancelTask | 2000 ms |