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

FileWhat's in it
shared/config.luaThe main switches: menu style, phone, depot slots
shared/config/job.luaPay rates, complaints, timers, route cancelling, throwing, paper supply
shared/config/levels.luaThe five job levels and what each unlocks
shared/config/locations.luaThe depots and every deliverable house
shared/config/vehicles.luaThe delivery bike
shared/config/visuals.luaThe depot worker, map icons, and markers
shared/config/outfits.luaThe carrier uniform
shared/config/tutorials.luaThe first-time player tips

Main Settings

File: shared/config.lua

SettingDefaultWhat it does
Config.DebugfalsePrints 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.usePhonetrueSends 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.MaxSlotsPerLocation3How 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

SettingDefaultWhat it does
basePay12Flat pay for every delivered house, in dollars
distanceBonusPerUnit0.20Extra pay per meter between the depot and the house — farther houses pay more
speedBonusAmount8Flat bonus for finishing a route inside the time limit
streakBonusPerDay5Extra pay per house for each day of the player's daily streak
maxStreakDays7The streak stops growing past this many days
minDeliveryTimePerDistanceUnit0.01Anti-cheat: minimum seconds a delivery must take, per meter of distance
absoluteMinDeliveryTime2Anti-cheat: no delivery can ever count in under this many seconds
gasFeePercent0.0Fuel deduction from the shift payout — zero, it's a bicycle
taxPercent0.10Tax taken off the shift payout (0.10 = 10%)
bikeLostFine75The 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

SettingDefaultWhat it does
maxComplaints3Complaints needed to trigger a suspension
timeoutMinutes30How long the suspension lasts
bikeLostPenalty1Complaints added for losing the bike
deathPenalty1Complaints added for dying on shift
outOfAmmoPenalty1Complaints added for running out of papers mid-route
decayPerDelivery1Complaints removed for each completed delivery

Route Timer

File: shared/config/job.lua, Config.Timer

SettingDefaultWhat it does
baseTime300Seconds every route gets, regardless of size
timePerHouse30Extra seconds added per house on the route
expiredPenalty0.85If 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.

SettingDefaultWhat it does
cooldownSeconds60How 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

SettingDefaultWhat it does
hitRadius8.0How close (in meters) a paper must land to the target to count — each level sets its own, this is the fallback
weaponNameWEAPON_ACIDPACKAGEThe 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
maxPlayerToTargetDist80.0Anti-cheat: how far the player can stand from the house and still score a hit

Paper Supply

File: shared/config/job.lua, Config.Supply

SettingDefaultWhat it does
spareAmmo5Spare papers given on top of one-per-house
bonusAmmoPerLevel2Extra 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.

SettingDefaultWhat it does
dict'anim@heists@box_carry@'Animation set
anim'idle'Animation within that set
duration3000How 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.

SettingDefaultWhat it does
enabledtrueShow the bag or not
model'xm3_p_xm3_m_bag_var22_arm_s'Which prop to use
bone24818Where on the body it attaches (the default is the upper back)
offsetvec3(-0.30, -0.02, 0.0)Fine-tunes the position
rotationvec3(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:

FieldWhat it does
titleThe level's display name
requiredDeliveriesTotal lifetime deliveries needed to reach the level
maxHousesThe biggest route the level can get
hitRadiusHow close throws must land, in meters — lower at higher levels
tipChanceOdds of a tip per house (0.08 = 8%)
tipRangeThe smallest and largest possible tip
payMultiplierMultiplies 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:

FieldWhat it does
nameThe depot's name, shown on the map and in the menu
coordsWhere the depot worker stands — written as vector3(x, y, z)
headingWhich way the worker faces, in degrees (0–360)
vehicleSpawnWhere the BMX appears on clock-in — written as vector4(x, y, z, heading), so it includes the direction the bike points
menuCameraWhere the menu's camera sits and looks from (see below)
deliveryZonesThe 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:

FieldWhat it does
coordsWhere the camera floats — 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 depots use 50.0

Each house in deliveryZones has:

FieldWhat it does
coordsThe spot the paper must land near
minLevelThe job level needed before this house shows up on routes
labelThe 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 deliveryZones list 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

SettingDefaultWhat it does
model'bmx'The bike model
primaryColor{ 15, 15, 15 }Main color (red, green, blue values)
secondaryColor{ 240, 230, 100 }Accent color
spawnDistance5.0How much clear space the spawn point needs
bikeLostCheckInterval2000How often (milliseconds) the script checks whether the bike still exists and is nearby
bikeLostMaxDistance300.0Walk farther than this from the bike (in meters) and it counts as abandoned
livery-1Paint job number, for replacement bike models that have them (the stock BMX has none)
extrasnilOptional vehicle extras to toggle, for replacement models

Map Icons and the Depot Worker

File: shared/config/visuals.lua

SettingDefaultWhat 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.enabledtrueShow depots on the map or not
Config.Blip.sprite945The map icon
Config.Blip.color5The icon color (yellow)
Config.Blip.scale0.5The 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:

SettingDefaultWhat it does
type28The marker style (28 = sphere)
scalevector3(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
coloryellow, semi-transparentThe marker color (red, green, blue, alpha values)
bobUpAndDownfalseMakes the marker float up and down
rotatefalseMakes 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

SettingDefaultWhat it does
Config.uniformsEnabledfalseAdds 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):

ActionCooldown
Completing a house500 ms
Requesting a route3000 ms
Clocking in2000 ms
Clocking out2000 ms
Reporting a lost bike10000 ms
Reporting empty papers5000 ms
Cancelling the current route2000 ms

Next Steps