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

FilePurpose
shared/config.luaGlobal toggles and shift limits
shared/config/job.luaPayment, random events, complaints, timer, order cancelling, reactions, animations
shared/config/levels.luaProgression level definitions
shared/config/locations.luaPizza shops and delivery zones
shared/config/vehicles.luaVehicle and pizza prop settings
shared/config/visuals.luaNPC, blip, customer, marker, and waypoint settings
shared/config/outfits.luaUniform definitions
shared/config/tutorials.luaTutorial card definitions
shared/config/models.luaModel replacements for game builds that lack a model
shared/init.luaShared enums and o-link bootstrap

General Settings

File: shared/config.lua

SettingTypeDefaultDescription
Config.DebugbooleanfalseEnables [oxide-pizzajob] debug logs
Config.menuStylestring'nui''nui' for the Vue menu, 'menu' for olink.menu
Config.usePhonebooleantrueSend 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.shiftSummarystring'text''nui' for popup summary, 'text' for notification summary
Config.UseHudAccentbooleantrueThe 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.MaxSlotsPerLocationnumber3Maximum concurrent shifts per shop
shared/config.lua
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 = 3

Job Settings

File: shared/config/job.lua

Payment

SettingDefaultDescription
Config.Payment.basePay50Flat base pay per delivery
Config.Payment.distanceBonusPerUnit0.50Bonus per distance unit
Config.Payment.speedBonusAmount25Bonus for beating the timer
Config.Payment.speedBonusTimeLimit180Speed bonus threshold in seconds
Config.Payment.damagedPizzaThreshold300Vehicle body health threshold for damaged pizza
Config.Payment.damagedPizzaMultiplier0.5Damaged pizza pay multiplier
Config.Payment.vehicleDestroyFine100Cash fine when the vehicle is destroyed
Config.Payment.streakBonusPerDay10Daily streak bonus per day
Config.Payment.maxStreakDays7Maximum streak count used for bonus calculation
Config.Payment.minDeliveryTimePerDistanceUnit0.05Anti-teleport minimum time scaling
Config.Payment.absoluteMinDeliveryTime10Absolute anti-teleport minimum in seconds
Config.Payment.maxTravelSpeed50.0Fastest 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.gasFeePercent0.05Gas deduction percentage
Config.Payment.taxPercent0.10Tax 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

SettingDefaultDescription
Config.RandomEvents.customerNotHome.chance0.08Chance to force a wait at the door
Config.RandomEvents.customerNotHome.waitTime10Wait duration in seconds
Config.RandomEvents.rushOrder.chance0.10Chance to roll a rush order
Config.RandomEvents.rushOrder.bonusMultiplier1.5Rush order bonus multiplier
Config.RandomEvents.rushOrder.timeLimit120Rush order time limit
Config.RandomEvents.wrongAddress.chance0.05Chance to reroute to a corrected destination

Complaints

SettingDefaultDescription
Config.Complaints.maxComplaints3Timeout threshold
Config.Complaints.timeoutMinutes30Timeout duration
Config.Complaints.vehicleDestroyPenalty1Complaints added on vehicle destruction
Config.Complaints.deathPenalty1Complaints added on death
Config.Complaints.decayPerDelivery1Complaints removed per successful delivery

Timer

SettingDefaultDescription
Config.Timer.baseTime90Base time in seconds
Config.Timer.timePerDistanceUnit0.3Distance-based timer scaling
Config.Timer.expiredPenalty0.85Late-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.

SettingDefaultDescription
Config.Cancel.cooldownSeconds60Seconds 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:

  • excellent
  • good
  • poor
  • bad

Each tier includes walk speed, animation data, and an optional locale key for feedback.

Animations

Config.Animations currently defines:

  • pickup: counter order pickup animation
  • deliver: handoff animation

Levels

File: shared/config/levels.lua

Each entry in Config.Levels defines:

FieldDescription
titleDisplay title
requiredDeliveriesDeliveries required to unlock the level
maxOrdersMaximum batch size
vehicleVehicle model used at the level
vehicleLiveryLivery index to apply to the vehicle (-1 = leave the model's default)
vehicleExtrasOptional table of vehicle extras to force off, e.g. { [1] = false } (nil = leave defaults)
tipChanceTip probability
tipRangeMin/max tip range
payMultiplierPay multiplier
priorityOrdersEnables Priority orders
cateringOrdersEnables 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:

FieldDescription
nameShop display name, shown on the map and in the shift menu
coordsWhere the counter NPC stands and where players interact — written as vector3(x, y, z)
headingWhich way the counter NPC faces, in degrees (0–360)
vehicleSpawnWhere the delivery vehicle appears on clock-in — written as vector4(x, y, z, heading), so it also sets which way the vehicle points
menuCameraThe camera shot behind the shift menu (see below)
deliveryZonesThe list of addresses this shop delivers to

menuCamera is only used when Config.menuStyle = 'nui':

FieldDescription
coordsWhere the camera sits — vector3(x, y, z)
headingWhich way the camera looks, in degrees
fovHow 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:

FieldDescription
coordsDelivery destination — where the customer meets the player
minLevelMinimum job level before this address is used
labelStreet 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 deliveryZones list 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 at minLevel = 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.

SettingDefaultDescription
Config.Vehicle.spawnDistance5.0Spawn-area clearance threshold
Config.Vehicle.healthCheckInterval1000Vehicle health polling interval in ms
Config.Vehicle.destroyedThreshold150Engine 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.damageChargeRate0.50Charge per health point below threshold
Config.Vehicle.damageChargeThreshold950Body 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

SettingDefault
Config.NpcModel'S_M_Y_Chef_01'
Config.NpcScenario'WORLD_HUMAN_CLIPBOARD'
Config.Blip.enabledtrue
Config.Blip.sprite267
Config.Blip.color1
Config.Blip.scale0.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

SettingDefaultDescription
Config.uniformsEnabledfalseTurns the uniform toggle on or off (off by default)

Separate outfit definitions exist for:

  • Config.PizzaOutfitMale
  • Config.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_clockin
  • first_delivery_start
  • first_store_pizza
  • first_delivery_complete
  • first_timer_expired
  • first_vehicle_damage
  • first_level_up
  • first_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.

SettingDefaultDescription
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.IDLE
  • ShiftState.CLOCKED_IN
  • ShiftState.DELIVERING

OrderType

  • OrderType.STANDARD
  • OrderType.PRIORITY
  • OrderType.CATERING

DeliveryRating

  • DeliveryRating.EXCELLENT
  • DeliveryRating.GOOD
  • DeliveryRating.POOR
  • DeliveryRating.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:

ActionCooldown
completeDelivery5000 ms
requestOrders3000 ms
clockIn2000 ms
clockOut2000 ms
vehicleDestroyed10000 ms
cancelTask2000 ms

Next Steps