Configuration Reference
Complete reference for oxide-newspaperjob configuration files.
Every setting in oxide-newspaperjob, explained.
All settings live in plain text files you can open with any text editor (Notepad++, VS Code, etc.). After changing a setting, restart the resource (restart oxide-newspaperjob in the server console) for it to take effect.
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 |
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 emails (welcome, incidents, pay stub) to the player's phone |
Config.shiftSummary | 'text' | What the player sees on clock-out: 'nui' for a pop-up window, 'text' for a notification |
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 |
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: don't edit this file by hand. The in-game builder (/newspaperbuilder) places depots and houses where you're standing and exports a ready-to-paste config. See Admin.
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): stand where you want the worker, place the bike spawn and the houses by walking to them, and the builder prints a finished depot entry you can paste straight into shared/config/locations.lua.
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 ...
},
},
}Save the file and restart the resource (restart oxide-newspaperjob in the server console). The new depot's blip should appear on the map right away.
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.
The tip text itself lives in locales/en.json, so it can be translated.
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 |