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:

ResourceWhat it does
ox_libA common library used for translations, timers, and helpers
oxmysqlLets the script save player progress and settings to your database
o-linkThe bridge that connects this script to your framework (QBCore, Qbox, or ESX)

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.menuStyle to '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.

server.cfg
ensure ox_lib
ensure oxmysql
ensure o-link
ensure oxide-newspaperjob

Database — 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:

sql/install.sql
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 settings
  • job_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:

ox_inventory/data/weapons.lua
['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 = true is required — it's how each newspaper gets used up when thrown.
  • The image line reuses the acid package picture that ships with ox_inventory. If you'd like a custom icon instead, drop a WEAPON_NEWSPAPER.png into ox_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_newspaper entry that maps to the WEAPON_ACIDPACKAGE weapon and keeps an ammo value 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

Start the server and watch the console — ox_lib, oxmysql, o-link, and oxide-newspaperjob should all start without errors.
Join the server and load into a character. Two "Newspaper Depot" icons should appear on the map — the script ships with the Los Santos Meteor and Mirror Park Papers depots.
Walk up to the worker at the depot. An interaction prompt should appear.
Clock in. A BMX bike should appear nearby and your first route should start automatically — you'll get newspapers, a map route, and a marker pointing at the first house.
Ride to the house and throw a newspaper at the marked spot. You should see the route progress tick up, your paper count go down, and a pay breakdown notification.

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:

PhoneMessages 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 versionsMail

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 notification

Admin 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:

server.cfg
add_principal identifier.license:<their-license> group.admin
add_ace group.admin admin allow

Replace <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.

Next Steps