Installation Guide
Step-by-step setup guide for oxide-landscapingjob — dependencies, startup order, database, verification, and optional setup.
Step-by-step setup for oxide-landscapingjob.
Prerequisites
Required Resources
These must be installed and running on your server before the landscaping job will start:
| Resource | Required | Purpose |
|---|---|---|
ox_lib | Yes | Shared helper library (translations, menus, dialogs) |
oxmysql | Yes | Lets the resource save player progress and settings to your database |
o-link | Yes | Connection layer between this job and your framework (QBCore, Qbox, ESX) |
xsound | No | Adds realistic mower engine sounds. The job works fine without it |
What this job uses from o-link
You don't need to configure anything here — this is just so you know which parts of your server this job talks to through o-link:
- notifications and on-screen help text
- phone messages, as texts or mail (shift updates and pay summaries)
- paying players and charging fines
- player names and identity
- the interaction eye/target on the office manager
- progress bars and menus
- vehicle keys and fuel for the company van
- work uniforms (optional)
If o-link is already working with your other Oxide resources, you are good to go.
Installation
Place the Resource
Put the oxide-landscapingjob folder in your server's resources directory, alongside your other resources.
Start It After Its Dependencies
In your server.cfg, the landscaping job must start after the resources it needs. Make sure the lines appear in this order:
ensure ox_lib
ensure oxmysql
ensure o-link
ensure xsound
ensure oxide-landscapingjobxsound is optional. If you don't have it, leave that line out — the server console will print a warning and mower audio will simply be turned off. Everything else works normally.
Database — Nothing to Do
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;The landscaping job saves its rows in this table with job = 'landscaping'.
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 Old Data (Only If Upgrading)
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 factory settings live in these files. You can edit them now, before the first start: the first start copies them into your database (the oxide_settings table), and from then on you change settings in-game with /landscaping settings (admins only, applies live). Editing the files after that first start changes nothing, even after a restart. See How Settings Work.
shared/config.lua— main on/off switchesshared/config/job.lua— pay, levels, crew, complaints, cancel cooldownshared/config/vehicles.lua— the van and the mowershared/config/mowing.lua— grass, obstacles, animationsshared/config/visuals.lua— map blips, markers, the office NPCshared/config/locations.lua— office locations and yard layoutsshared/config/outfits.lua— optional work uniformsshared/config/tutorials.lua— first-time player hintsshared/config/models.lua— model replacements
The most important switches, found in shared/config.lua:
Config.Debug = false -- extra console logging, leave off normally
Config.usePhone = true -- send shift messages to the player's phone
Config.shiftSummary = 'text' -- currently has no effect in this job
Config.menuStyle = 'nui' -- which style of shift menu to use
Config.MaxSlotsPerLocation = 3 -- how many players can work from one office at onceYards are the exception and stay in shared/config/locations.lua, and Config.UseHudAccent is always read from shared/config.lua (edit it and restart). To bring a later file edit into the database, restart and press Reset to default on that setting in /landscaping settings.
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
Mowing Check
G.If all of that works, the resource is installed correctly.
Optional Setup
Phone Shift Messages
When Config.usePhone = true, the landscaping office sends players phone messages during their shift:
- a welcome when they clock in
- a note when they join a crew or a partner joins theirs
- a reminder to head back once all yards are done
- a warning if the van is destroyed or the mower breaks down
- a message if they die on shift, and another when they respawn and are clocked out
- the pay summary when they clock out
These messages are delivered through o-link, which supports these phone resources: Oxide Phone (oxide-phone), qb-phone, lb-phone, gksphone, okokPhone, qs-smartphone, qs-smartphone-pro, and yseries. How a message arrives depends on the phone:
| Phone | Arrives as |
|---|---|
Oxide Phone, gksphone, okokPhone, qs-smartphone (Quasar V3) | A text message |
qb-phone, lb-phone, yseries, qs-smartphone-pro, older qs-smartphone versions |
Mail is also the backup whenever a text can't be sent.
Texts need o-link 1.11.0 or newer. With an older o-link, every phone gets mail instead.
If your server doesn't run a supported phone, the messages simply won't arrive — turn off Use phone under General in /landscaping settings (Config.usePhone) 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.
Gigs App on Oxide Phone
If your server runs Oxide Phone, its Gigs app shows this job: the offices and whether each one has room, the player's current shift (the yard they're mowing, how many yards are done, their crew role, and their pay so far), and their level.
While a player carries an Oxide Phone and the Gigs app is turned on (it is by default), the shift messages above show up there as Gigs notifications instead of texts. The pay summary is the exception: it never goes to the Gigs app and always arrives as a text or mail. There's nothing to set up — just run Oxide Phone and this job.
End-of-Shift Pay Summary
When a player clocks out, they always get an on-screen notification with their net pay. With Config.usePhone = true, the full breakdown is also sent to their phone as a text or mail (see Phone Shift Messages): yards completed, the pay for each yard, any co-op bonus, gross pay, each deduction, and net pay.
Config.shiftSummary currently has no effect in this job — the summary works the same whichever value it has.
Menu Mode
Config.menuStyle controls what the shift menu looks like:
'nui': the full custom menu with a camera view of the office (default)'menu': a simple text menu — use this if you prefer something lightweight
Uniforms
Work uniforms are off by default (Config.uniformsEnabled). To turn them on, open /landscaping settings, switch on Uniforms under Uniforms, and save. No restart is needed.
When enabled, players get a button in the shift menu to put on a landscaping uniform while clocked in. Their own clothes are restored when they take it off or clock out. The outfit pieces are in the same group (Male outfit and Female outfit, Advanced view) if you want to change the look.
Admin Permission for the Settings Editor and Yard Builder
The /landscaping settings editor and 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 settings editor and builder commands. Standard QBCore/Qbox/ESX admins pass the check automatically. See the Admin Commands Reference for the full command list.