Installation Guide
Setup guide for oxide-landscapingjob.
Prerequisites
Required Resources
| Resource | Required | Purpose |
|---|---|---|
ox_lib | Yes | Locale support, shared helpers, and UI utility usage |
oxmysql | Yes | Database access |
o-link | Yes | Integration layer used by this job |
xsound | No | 3D mower audio |
o-link Features Used
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:
ensure ox_lib
ensure oxmysql
ensure o-link
ensure xsound
ensure oxide-landscapingjobxsound 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:
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.luashared/config/job.luashared/config/vehicles.luashared/config/mowing.luashared/config/visuals.luashared/config/locations.luashared/config/outfits.luashared/config/tutorials.lua
Core toggles:
Config.Debug = false
Config.usePhone = true
Config.shiftSummary = 'text'
Config.menuStyle = 'nui'
Config.MaxSlotsPerLocation = 3See 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
Mowing Check
G.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
Menu Mode
Config.menuStyle controls the manager UI:
"nui": Vue NUI shift menu, default"menu":o-linkcontext menu fallback
Uniforms
Uniform support is controlled in shared/config/outfits.lua:
Config.uniformsEnabled = trueWhen 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:
add_ace group.admin admin allowThis 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.