Installation Guide
Step-by-step setup for oxide-newspaperjob — dependencies, start order, the database, the required newspaper item, and a first-run check.
Step-by-step setup for oxide-newspaperjob.
Before You Start
These resources need to be installed and working first:
| Resource | What it does |
|---|---|
ox_lib | A common library used for translations, timers, and helpers |
oxmysql | Lets the script save player progress and settings to your database |
o-link | The bridge that connects this script to your framework (QBCore, Qbox, or ESX) |
What o-link handles
o-link is what lets this one script run on QBCore, Qbox, or ESX without changes. This script relies on it for:
- knowing when a player has loaded into a character
- showing notifications
- sending shift messages (texts or mail) to the player's phone
- paying out money and charging fines
- applying and removing the carrier uniform
- giving the player keys to the delivery bike
- the "press to interact" option on the depot worker
- the context menu, if you switch
Config.menuStyleto'menu' - progress bars
- giving and removing the newspaper item
There is nothing extra to set up for most of this. If o-link is already running on your server, this script connects to it automatically. The one thing that does need setup is the newspaper item itself — see Add the newspaper item below.
Installation
Place the resource
Copy the oxide-newspaperjob folder into your server's resources folder.
Set the start order
In your server.cfg, the order matters: these need to start before the job script.
ensure ox_lib
ensure oxmysql
ensure o-link
ensure oxide-newspaperjobDatabase — nothing to do
The script saves each player's level, delivery count, streak, and complaints in your database.
The job creates its own database tables the first time it starts, so there is no SQL script to run. (sql/install.sql is still included if you prefer to create the tables yourself or want to see the schema.)
The progression table below is shared by current Oxide job resources. It is only created if another Oxide job hasn't already created it:
CREATE TABLE IF NOT EXISTS `job_progression` (
`char_id` VARCHAR(60) NOT NULL,
`job` VARCHAR(40) NOT NULL,
`level` TINYINT NOT NULL DEFAULT 1,
`total_count` INT NOT NULL DEFAULT 0,
`daily_streak` INT NOT NULL DEFAULT 0,
`last_activity_date` DATE NULL,
`complaints` TINYINT UNSIGNED NOT NULL DEFAULT 0,
`timeout_until` DATETIME NULL,
PRIMARY KEY (`char_id`, `job`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;This script stores its rows with job = 'newspaper'.
The job creates two more shared tables in the same way:
oxide_settings, where the job saves its settingsjob_pending_payouts, where shift pay waits for a player who disconnected or logged out on shift, until their next login
Migrate from an older install (only if upgrading)
Only relevant if you ran an older version of the Oxide jobs that used separate per-job tables. In that case, run sql/migrate_unified_progression.sql once — it moves the old data into the shared table. Fresh installs can skip this.
Add the newspaper item
Players throw newspapers at houses to deliver them. The "newspaper" is an inventory item called weapon_newspaper, and it needs to be added to your inventory system. This step is required — the job will not work without it.
Follow the tab that matches your inventory (details below).
Add the Newspaper Item
Used by Qbox, and recommended for ESX.
Open ox_inventory/data/weapons.lua and copy the ['WEAPON_NEWSPAPER'] entry from itemimages/ox_inventory_weapons.lua (in the resource folder) into its Weapons table. The entry is paste-ready:
['WEAPON_NEWSPAPER'] = { label = 'Newspaper', weight = 50, throwable = true, model = 'WEAPON_ACIDPACKAGE', client = { image = 'WEAPON_ACIDPACKAGE.PNG' } },What this does, in plain terms: weapon_newspaper is not a real GTA weapon, so the model line tells the game to use the acid package — a real throwable from GTA — whenever a player pulls out a newspaper. The item keeps its own name and label; only the thing the character physically throws is borrowed.
A few notes:
- The name must be written in capitals exactly as shown:
WEAPON_NEWSPAPER. throwable = trueis required — it's how each newspaper gets used up when thrown.- The
imageline reuses the acid package picture that ships with ox_inventory. If you'd like a custom icon instead, drop aWEAPON_NEWSPAPER.pngintoox_inventory/web/images/and change the line to match.
After saving, restart ox_inventory and oxide-newspaperjob.
Stock QBCore.
Stock qb-inventory needs a few small file edits to support the newspaper. There is a full step-by-step guide for this: the QB Inventory Patch Guide.
Be aware that we hit a hotbar quirk on stock qb-inventory during testing (covered in that guide). If switching is an option for you, ox_inventory is the smoother path.
- qs-inventory / core_inventory and similar: these need a
weapon_newspaperentry that maps to theWEAPON_ACIDPACKAGEweapon and keeps anammovalue on the item. The approach is the same as the guides above, but the exact file and field names differ per inventory — check that inventory's documentation. - ESX default inventory: not supported. It can't store an ammo count on an item, which this job depends on. Use ox_inventory with ESX instead.
The throwable itself is the setting Config.Throw.weaponName (default WEAPON_ACIDPACKAGE), which needs game build 2802 or newer. On an older build the route still runs, with an owner-facing warning — throws just don't register until the weapon exists or you swap it. See Throwing.
Checking That It Works
ox_lib, oxmysql, o-link, and oxide-newspaperjob should all start without errors.Changing Settings
Once the resource has started for the first time, its settings live in your database and are edited in-game with /newspaper settings (admins only). Changes apply instantly, no restart needed. The config files under shared/ are only factory defaults, imported on the very first start — after that, editing them changes nothing unless you restart and press Reset to default on that setting.
So: tweak the files before the first start if you like, and use /newspaper settings from then on. See How Settings Work.
Optional Setup
The job settings below (phone messages, shift summary, uniforms) are changed in-game with /newspaper settings (admins only), as described in Changing Settings.
Shift messages on the phone
When Config.usePhone = true (the default), the depot sends the player messages on their phone:
- a welcome message when they clock in
- incident notices: a lost bike, running out of papers, a route cancelled after going down on the job, and a clock-out after a hospital stay
- a full pay stub when they clock out
This goes through o-link's phone module, so it works with whatever phone script o-link is set up for on your server. Supported phones: qb-phone, lb-phone, gksphone, okokPhone, qs-smartphone, qs-smartphone-pro, yseries, and Oxide Phone.
How each message arrives depends on the phone:
| Phone | Messages arrive as |
|---|---|
| Oxide Phone, gksphone, okokPhone, qs-smartphone (Quasar V3) | A text message from the depot. Texts need o-link 1.11.0 or newer |
| qb-phone, lb-phone, yseries, qs-smartphone-pro, older qs-smartphone versions |
On any phone, a message arrives as mail if the text can't be sent, or if your server runs an o-link older than 1.11.0.
Oxide Phone's Gigs app
If you run Oxide Phone, players can follow this job in its Gigs app: the depots and whether each one has room, the route they're on (current house, progress, pay so far, and tips), and their level. While a player carries an Oxide Phone and the Gigs app is switched on (it is by default), shift updates arrive there as Gigs notifications instead of texts. The pay stub at clock-out never goes to the Gigs app; it always arrives as a text or mail.
You don't need to set anything up for this — just run Oxide Phone and this job.
Servers without a phone
If your server has no phone, turn off Use phone (Config.usePhone) under General in /newspaper settings. Nothing is sent to the phone then. Players still get on-screen notifications for a lost bike, running out of papers, a cancelled route, and a hospital clock-out, plus the clock-out summary described below.
The on-screen clock-out summary
Separate from the phone messages, Shift summary (Config.shiftSummary) controls what the player sees on screen the moment they clock out:
Config.shiftSummary = 'nui' -- a pop-up summary window
Config.shiftSummary = 'text' -- a simple notificationAdmin permission
/newspaper settings and the /newspaperbuilder depot tool are admin only. They use the same admin check as every Oxide resource, so there's nothing extra to set up per resource.
If you're already running QBCore, Qbox, or ESX admins, those admins pass automatically — you don't need to do anything.
To make someone an admin, add them to the admin group and grant that group the admin ace by adding these two lines to your server.cfg:
add_principal identifier.license:<their-license> group.admin
add_ace group.admin admin allowReplace <their-license> with the player's license identifier. See Admin Tools for the settings editor and the builder.
Uniforms
A carrier uniform option can be shown in the shift menu, but it ships disabled (Config.uniformsEnabled = false).
The shipped outfit values (factory defaults in shared/config/outfits.lua) are placeholders. If you want uniforms, turn on Uniforms in /newspaper settings and fill in Male outfit and Female outfit (on the Advanced tab) with clothing values that fit your server's clothing pack.
Review the other settings
Everything about the job is adjustable — pay rates, timers, fines, levels, bike model, blips, and more. See the Configuration Reference for every setting explained.
A Note on the UI
The interface is pre-built and included (the web/dist folder). You do not need to install Node.js or build anything. Rebuilding is only needed if you edit the source files under web/src.