Installation Guide

Setup guide for oxide-landscapingjob.

Prerequisites

Required Resources

ResourceRequiredPurpose
ox_libYesLocale support, shared helpers, and UI utility usage
oxmysqlYesDatabase access
o-linkYesIntegration layer used by this job
xsoundNo3D mower audio

This resource uses o-link for:

  • callbacks
  • character identity lookups
  • notifications
  • phone/email delivery
  • local entity targets
  • help text
  • progress bars
  • context menus
  • clothing appearance changes
  • fuel and vehicle key helpers
  • money transactions
  • player-ready / player-unload lifecycle events

Make sure your o-link installation is working before starting this resource.

Installation

Place the Resource

Put oxide-landscapingjob in your server's resources directory.

Ensure Dependencies First

Add the resource after its required dependencies in server.cfg:

server.cfg
ensure ox_lib
ensure oxmysql
ensure o-link
ensure xsound
ensure oxide-landscapingjob

xsound is optional. If it is missing, the resource prints a warning and disables mower audio.

Import the Database Schema

Import sql/install.sql. The current schema creates a unified job_progression table:

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 resource stores progression rows with job = "landscaping".

Run the Optional Migration If Needed

Skip this step on a fresh install.

If you previously ran an older version of an Oxide job that used its own progression table (for example landscapingjob_progression), run sql/migrate_unified_progression.sql once. It copies player progress from the old tables of every Oxide job (landscaping, pizza, postal, animal control, newspaper, roadside) into the shared table, then removes the old tables.

Back up your database before running the migration. If you are updating multiple Oxide jobs that use this migration, only run the script once total.

Review the Config

The resource is configured from:

  • shared/config.lua
  • shared/config/job.lua
  • shared/config/vehicles.lua
  • shared/config/mowing.lua
  • shared/config/visuals.lua
  • shared/config/locations.lua
  • shared/config/outfits.lua
  • shared/config/tutorials.lua

Core toggles:

shared/config.lua
Config.Debug = false
Config.usePhone = true
Config.shiftSummary = 'text'
Config.menuStyle = 'nui'
Config.MaxSlotsPerLocation = 3

See the Configuration Guide for the full reference.

Verification

Startup Check

Start your server and watch the console. On a healthy startup you will see a resourceInitialized log line from oxide-landscapingjob (if you use oxide-logger with file or Discord logging, it appears there instead of the console).

If a required resource (o-link, ox_lib, or oxmysql) is missing or started in the wrong order, you will instead see a clear red error from oxide-landscapingjob telling you which one — fix that and restart.

In-Game Check

Join with a loaded character.
Go to the configured landscaping office.
Interact with the NPC manager.
Open the shift menu.
Clock in and confirm a van is spawned, yards are assigned, and the yard blips and guidance appear.

Mowing Check

Drive to an assigned yard.
Start the yard at the marker.
Unload the mower from the van.
Lower the blades with G.
Confirm patches disappear and obstacle interactions work.

Optional Setup

Phone / Email Shift Messages

When Config.usePhone = true, the job sends players service emails for the shift welcome message and the end-of-shift pay summary.

These messages are delivered through o-link, which supports popular phone resources like qb-phone, lb-phone, gksphone, okokPhone, qs-smartphone, and yseries. If your server doesn't run a supported phone, the emails simply won't arrive — set Config.usePhone = false so players aren't left waiting on messages. Important moments (pay received, van destroyed, etc.) always also show as regular on-screen notifications, with or without a phone.

Shift Summary Mode

Config.shiftSummary controls how the end-of-shift summary is delivered:

  • "text": send the summary through the phone/email flow
  • "nui": show the summary in the NUI flow

Config.menuStyle controls the manager UI:

  • "nui": Vue NUI shift menu, default
  • "menu": o-link context menu fallback

Uniforms

Uniform support is controlled in shared/config/outfits.lua:

Config.uniformsEnabled = true

When enabled, players can equip and remove uniforms from the shift menu while clocked in.

Admin Permission for the Yard Builder

The yard builder commands (for creating your own offices and yards) require admin permission. Add this line to your server.cfg:

server.cfg
add_ace group.admin admin allow

This gives everyone in your admin group access to the builder commands. Standard QBCore/QBX/ESX admins pass the check automatically. See the Admin Commands Reference for the full command list.

Next Steps