Configuration Reference
Every oxide-newspaperjob setting and its factory default — plus how database-backed settings and the /newspaper settings editor work.
Every setting in oxide-newspaperjob, explained. Start with How Settings Work — the job keeps its settings in your database, so editing the config files does not always do what you expect.
How Settings Work
Settings are edited in-game with the /newspaper settings command (admins only). Changes save to your database and apply instantly — no restart needed.
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.
The files are still read at every start as the factory defaults behind the Reset to default button next to each setting in /newspaper settings. Pressing it replaces the stored value with the file's value and applies right away. So a file edit only takes effect after you restart the resource and then press Reset to default on that setting.
This includes the depots and delivery houses — they are stored in the database like every other setting, so you change them through /newspaper settings too, not by editing the file on a running server. The /newspaperbuilder tool (see Admin Tools) only captures coordinates into an export file: enter those values through /newspaper settings, or paste the export into shared/config/locations.lua, restart, and press Reset to default on Depots (see Adding another depot).
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.
So there are two ways to work:
- First-time setup: edit the files in
shared/before the resource's first start. Your values are imported automatically. - Changing a setting later: run
/newspaper settingsin game as an admin. See The Settings Editor for how the menu works.
The tables below document every setting and its factory default.
Which File Has What
| File | What's in it |
|---|---|
shared/config.lua | The main switches: menu style, phone, depot slots |
shared/config/job.lua | Pay rates, complaints, timers, route cancelling, throwing, paper supply |
shared/config/levels.lua | The five job levels and what each unlocks |
shared/config/locations.lua | The depots and every deliverable house |
shared/config/vehicles.lua | The delivery bike |
shared/config/visuals.lua | The depot worker, map icons, and markers |
shared/config/outfits.lua | The carrier uniform |
shared/config/tutorials.lua | The first-time player tips |
shared/config/models.lua | Model replacements for game builds that lack a model |
Main Settings
File: shared/config.lua
| Setting | Default | What it does |
|---|---|---|
Config.Debug | false | Prints extra [oxide-newspaperjob] messages to the console — only useful when troubleshooting |
Config.menuStyle | 'nui' | 'nui' for the full shift menu with camera, 'menu' for a plain context menu |
Config.usePhone | true | Sends shift messages (welcome, incidents, pay stub) to the player's phone: a text on phones that support texts, mail on the others. Texts need o-link 1.11.0 or newer; with an older o-link every message arrives as mail. Set to false to send nothing to the phone (the on-screen notifications still show). See Shift messages on the phone for which phones get which, and for Oxide Phone's Gigs app |
Config.shiftSummary | 'text' | What the player sees on clock-out: 'nui' for a pop-up window, 'text' for a notification |
Config.UseHudAccent | true | The route card 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 /newspaper settings, so change it in the file and restart |
Config.MaxSlotsPerLocation | 3 | How many players can work out of one depot at the same time |
Config.Item.weapon | 'weapon_newspaper' | The inventory item used as the throwable newspaper |
Pay
File: shared/config/job.lua, Config.Payment
| Setting | Default | What it does |
|---|---|---|
basePay | 12 | Flat pay for every delivered house, in dollars |
distanceBonusPerUnit | 0.20 | Extra pay per meter between the depot and the house — farther houses pay more |
speedBonusAmount | 8 | Flat bonus for finishing a route inside the time limit |
streakBonusPerDay | 5 | Extra pay per house for each day of the player's daily streak |
maxStreakDays | 7 | The streak stops growing past this many days |
minDeliveryTimePerDistanceUnit | 0.01 | Anti-cheat: minimum seconds a delivery must take, per meter of distance |
absoluteMinDeliveryTime | 2 | Anti-cheat: no delivery can ever count in under this many seconds |
maxTravelSpeed | 50.0 | Fastest believable trip in /newspaper settings, in meters per second along a straight line. A house reached faster than this from the depot, timed from the start of the route, pays no distance bonus, and that route gets no speed bonus. Only teleporting gets there that fast. The delivery still counts. Raise it if your server has very fast vehicles |
gasFeePercent | 0.0 | Fuel deduction from the shift payout — zero, it's a bicycle |
taxPercent | 0.10 | Tax taken off the shift payout (0.10 = 10%) |
bikeLostFine | 75 | The fine charged when the bike is lost or destroyed |
payoutAccount | 'bank' | Where the shift payout goes |
tipAccount | 'cash' | Where tips go (paid instantly at the house) |
fineAccount | 'cash' | Where the bike fine is taken from |
Complaints
File: shared/config/job.lua, Config.Complaints
| Setting | Default | What it does |
|---|---|---|
maxComplaints | 3 | Complaints needed to trigger a suspension |
timeoutMinutes | 30 | How long the suspension lasts |
bikeLostPenalty | 1 | Complaints added for losing the bike |
deathPenalty | 1 | Complaints added for dying on shift |
outOfAmmoPenalty | 1 | Complaints added for running out of papers mid-route |
decayPerDelivery | 1 | Complaints removed for each completed delivery |
Route Timer
File: shared/config/job.lua, Config.Timer
| Setting | Default | What it does |
|---|---|---|
baseTime | 300 | Seconds every route gets, regardless of size |
timePerHouse | 30 | Extra seconds added per house on the route |
expiredPenalty | 0.85 | If the timer runs out, route earnings are multiplied by this (0.85 = players keep 85%) |
Cancelling a Route
File: shared/config/job.lua, Config.Cancel
Players can drop the route they're on without clocking out, using the Cancel Current Task option in the shift menu or on the delivery bike. Cancelling costs them nothing except a short wait before the next route.
| Setting | Default | What it does |
|---|---|---|
cooldownSeconds | 60 | How many seconds a player must wait after cancelling before the depot worker will hand out another route. Set it to 0 to remove the wait completely |
Config.Cancel = {
cooldownSeconds = 60, -- Wait before a new route 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's running, asking for a route tells the player how many seconds are left.
Throwing
File: shared/config/job.lua, Config.Throw
| Setting | Default | What it does |
|---|---|---|
hitRadius | 8.0 | How close (in meters) a paper must land to the target to count — each level sets its own, this is the fallback |
weaponName | WEAPON_ACIDPACKAGE | The real GTA throwable used under the hood. Needs game build 2802 or newer — on an older build the job warns and tells you to replace it |
maxPlayerToTargetDist | 80.0 | Anti-cheat: how far the player can stand from the house and still score a hit |
Paper Supply
File: shared/config/job.lua, Config.Supply
| Setting | Default | What it does |
|---|---|---|
spareAmmo | 5 | Spare papers given on top of one-per-house |
bonusAmmoPerLevel | 2 | Extra spares for each job level above 1 |
Pickup Animation
File: shared/config/job.lua, Config.Animations.pickup — the short packing animation played at the depot before a route starts.
| Setting | Default | What it does |
|---|---|---|
dict | 'anim@heists@box_carry@' | Animation set |
anim | 'idle' | Animation within that set |
duration | 3000 | How long it plays, in milliseconds |
Newspaper Bag
File: shared/config/job.lua, Config.NewspaperBag — the bag prop shown on the player's back during a route.
| Setting | Default | What it does |
|---|---|---|
enabled | true | Show the bag or not |
model | 'xm3_p_xm3_m_bag_var22_arm_s' | Which prop to use |
bone | 24818 | Where on the body it attaches (the default is the upper back) |
offset | vec3(-0.30, -0.02, 0.0) | Fine-tunes the position |
rotation | vec3(0.0, 90.0, 180.0) | Fine-tunes the angle |
Levels
File: shared/config/levels.lua
Five levels ship by default, from Paper Carrier through Route Legend. Each entry in Config.Levels sets:
| Field | What it does |
|---|---|
title | The level's display name |
requiredDeliveries | Total lifetime deliveries needed to reach the level |
maxHouses | The biggest route the level can get |
hitRadius | How close throws must land, in meters — lower at higher levels |
tipChance | Odds of a tip per house (0.08 = 8%) |
tipRange | The smallest and largest possible tip |
payMultiplier | Multiplies the base + distance pay for every house |
You can add, remove, or re-tune levels freely — just keep requiredDeliveries increasing from one level to the next.
Depots and Houses
File: shared/config/locations.lua
Config.Locations is a list of depots. The script ships with 2 depots and 80 delivery houses between them, and you can have as many depots as you like. Each depot entry contains:
| Field | What it does |
|---|---|
name | The depot's name, shown on the map and in the menu |
coords | Where the depot worker stands — written as vector3(x, y, z) |
heading | Which way the worker faces, in degrees (0–360) |
vehicleSpawn | Where the BMX appears on clock-in — written as vector4(x, y, z, heading), so it includes the direction the bike points |
menuCamera | Where the menu's camera sits and looks from (see below) |
deliveryZones | The list of houses this depot delivers to |
menuCamera is only used when Config.menuStyle = 'nui'. It's the shot the player sees behind the shift menu:
| Field | What it does |
|---|---|
coords | Where the camera floats — 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 depots use 50.0 |
Each house in deliveryZones has:
| Field | What it does |
|---|---|
coords | The spot the paper must land near |
minLevel | The job level needed before this house shows up on routes |
label | The street name shown to the player |
Tip: you don't need to type coordinates by hand. In /newspaper settings → Locations (the Depots list), Place in world lets you pick a spot in the game world, with a live preview of the worker, the bike, or the house spot. The in-game builder (/newspaperbuilder) captures depots and houses where you're standing and exports a ready-to-paste list for this file, which takes effect after a restart and Reset to default on Depots. See Admin Tools.
Adding another depot
Every entry in Config.Locations is a complete, self-contained depot. Add another table entry — a new block wrapped in { } inside the list — and you get a second newspaper depot with its own worker, its own map blip, its own bike spawn, and its own set of houses. Nothing else needs to be turned on.
Two things to know before you build one:
- Houses belong to the depot they're listed under. The
deliveryZoneslist inside a depot entry is the only set of houses that depot hands out. A player who clocks in at depot 2 is never sent to depot 1's houses, so give each depot enough houses of its own (at minimum, more than the biggest route your top level can hand out — 16 houses at level 5 in the shipped config). - A shift belongs to the depot the player clocked in at. Slots (
Config.MaxSlotsPerLocation, 3 by default) are counted per depot, so three depots means three carriers each, nine in total. Players clock out at the depot where they started.
The worker, the map blip, and the interaction prompt are all created automatically for every entry in the list — you never have to register anything by hand.
The easiest way to build one is in-game with /newspaperbuilder (see Admin Tools): stand where you want the worker, place the bike spawn and the houses by walking to them, and the builder exports a finished Config.Locations list to paste into shared/config/locations.lua (see below for making it take effect).
If you'd rather write it by hand, copy an existing entry and change the values. The shape looks like this:
Config.Locations = {
-- ... the depots that already ship with the resource ...
{
name = 'Vespucci Beach Press', -- shown on the map and in the menu
coords = vector3(-1300.00, -1200.00, 4.5), -- where the depot worker stands
heading = 90.0, -- which way the worker faces
vehicleSpawn = vector4(-1296.00, -1204.00, 4.5, 180.0), -- where the bike appears
menuCamera = {
coords = vector3(-1303.00, -1203.00, 6.0),
heading = 270.0,
fov = 50.0,
},
deliveryZones = {
{ coords = vector3(-1250.00, -1150.00, 4.6), minLevel = 1, label = 'Bay City Ave' },
{ coords = vector3(-1244.00, -1142.00, 4.6), minLevel = 1, label = 'Bay City Ave' },
-- ... add as many houses as you want ...
},
},
}Once the job has started, the depots live in the database, and editing this file changes nothing on its own, even after a restart. There are two ways to change them:
- In-game: run
/newspaper settings(admins only) and open Depots under Locations. Add, edit, reorder or remove depots there, and edit each depot's Houses list. Place in world lets you pick the clerk spot, the bike spawn or a doorstep in the game world instead of typing coordinates. Save, and the change applies live: the new depot's blip appears on the map right away, no restart. The menu camera (menuCamera) is not in this editor, so a depot added here opens its shift menu without a camera shot. Depots that already had one keep it. - From the file: edit
shared/config/locations.lua(or paste a/newspaperbuilderexport into it, see Making the export take effect), restart the resource, then press Reset to default on Depots.
Reset to default on Depots replaces the whole stored list with the file's list, so any depot you changed in-game but not in the file is lost.
You can edit, reorder or delete depots while carriers are on shift. A shift keeps its depot as long as the depot keeps either its name or its worker spot, and the depot worker's Get Delivery Route option moves with it. If you delete a depot (or change its name and its worker spot in the same save), the shifts there end straight away and are paid as a clock-out would pay them, the usual pay stub goes to the phone, and the players are told "Your depot was removed, so your shift has ended." Slot counts stay correct either way.
The Bike
File: shared/config/vehicles.lua, Config.Vehicle
| Setting | Default | What it does |
|---|---|---|
model | 'bmx' | The bike model |
primaryColor | { 15, 15, 15 } | Main color (red, green, blue values) |
secondaryColor | { 240, 230, 100 } | Accent color |
spawnDistance | 5.0 | How much clear space the spawn point needs |
bikeLostCheckInterval | 2000 | How often (milliseconds) the script checks whether the bike still exists and is nearby |
bikeLostMaxDistance | 300.0 | Walk farther than this from the bike (in meters) and it counts as abandoned |
livery | -1 | Paint job number, for replacement bike models that have them (the stock BMX has none) |
extras | nil | Optional vehicle extras to toggle, for replacement models |
Map Icons and the Depot Worker
File: shared/config/visuals.lua
| Setting | Default | What it does |
|---|---|---|
Config.NpcModel | 'a_m_m_business_01' | What the depot worker looks like |
Config.NpcScenario | 'WORLD_HUMAN_CLIPBOARD' | What the worker is doing (holding a clipboard) |
Config.Blip.enabled | true | Show depots on the map or not |
Config.Blip.sprite | 945 | The map icon |
Config.Blip.color | 5 | The icon color (yellow) |
Config.Blip.scale | 0.5 | The icon size |
Config.Blip.label | 'Newspaper Depot' | Fallback map name if a depot has no name |
Config.DeliveryMarker controls the marker drawn around the active house target — it only appears when Config.Debug is on, as a tuning aid:
| Setting | Default | What it does |
|---|---|---|
type | 28 | The marker style (28 = sphere) |
scale | vector3(1.0, 1.0, 1.0) | Sizes the marker relative to the level's hit radius — at 1.0 it shows exactly where throws will count |
color | yellow, semi-transparent | The marker color (red, green, blue, alpha values) |
bobUpAndDown | false | Makes the marker float up and down |
rotate | false | Makes the marker spin |
Config.Waypoints tunes the floating house indicator (the one shown by holding H): how high it floats, how it scales with distance, and how often it refreshes.
Uniforms
File: shared/config/outfits.lua
| Setting | Default | What it does |
|---|---|---|
Config.uniformsEnabled | false | Adds a uniform option to the shift menu |
Config.NewspaperOutfitMale and Config.NewspaperOutfitFemale define the outfits as lists of clothing component and prop values. The shipped values are placeholders — set your own before enabling uniforms.
Tutorials
File: shared/config/tutorials.lua
Nine first-time tips ship by default, keyed by moment (first_clockin, first_throw_hit, first_bike_lost, and so on). Each defines an icon and the title/body text keys. Entries can optionally set a screen position and a duration in seconds — when omitted, tips show top-right for 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.
The tip text itself lives in locales/en.json, so it can be translated.
Model Replacements
File: shared/config/models.lua — the Compatibility section of /newspaper settings.
Every model the job spawns (the bike, the depot worker, the newspaper bag, and the throwable weapon) is checked before it loads. If a model doesn't exist on a player's game build — older builds lack newer DLC props — it is skipped instantly with a warning naming the model, instead of freezing the load. Nothing is swapped automatically; you choose the replacement.
| Setting | Default | What it does |
|---|---|---|
Config.ModelSwaps | {} (empty) | A list of { from = 'shipped_model', to = 'your_model' } rows. Each row replaces a model everywhere the job uses it — including models inside depot rows that have no field of their own |
Config.SettingsCommand | '/newspaper settings' | Where the missing-model warning tells admins to go |
Config.ModelSwaps = {
{ from = 'xm3_p_xm3_m_bag_var22_arm_s', to = 'your_bag_prop' },
}When a model is missing, online admins get a notification naming it, and the server log records it. Each missing model is reported once, and the warnings are capped per player and in total, so one misbehaving client can't flood admins or the log. Saving a swap lets that model report again if the replacement is also missing.
Rate Limits
The server enforces short cooldowns on player actions to block spam. These are fixed in server/main.lua (not in a config file):
| Action | Cooldown |
|---|---|
| Completing a house | 500 ms |
| Requesting a route | 3000 ms |
| Clocking in | 2000 ms |
| Clocking out | 2000 ms |
| Reporting a lost bike | 10000 ms |
| Reporting empty papers | 5000 ms |
| Cancelling the current route | 2000 ms |
Next Steps
QB Inventory Patch Guide
Patch instructions for running oxide-newspaperjob on stock qb-inventory and qb-weapons.
Feature Guide
How oxide-newspaperjob plays — the shift menu, the Oxide Phone Gigs app, routes, throwing, cancelling a route, paper supply, timers, levels, pay, complaints, the bike, and tutorials.