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:

ResourceRequiredPurpose
ox_libYesShared helper library (translations, menus, dialogs)
oxmysqlYesLets the resource save player progress and settings to your database
o-linkYesConnection layer between this job and your framework (QBCore, Qbox, ESX)
xsoundNoAdds realistic mower engine sounds. The job works fine without it

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:

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

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

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;

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 settings
  • job_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 switches
  • shared/config/job.lua — pay, levels, crew, complaints, cancel cooldown
  • shared/config/vehicles.lua — the van and the mower
  • shared/config/mowing.lua — grass, obstacles, animations
  • shared/config/visuals.lua — map blips, markers, the office NPC
  • shared/config/locations.lua — office locations and yard layouts
  • shared/config/outfits.lua — optional work uniforms
  • shared/config/tutorials.lua — first-time player hints
  • shared/config/models.lua — model replacements

The most important switches, found in shared/config.lua:

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 once

Yards 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

Join the server with a loaded character.
Drive to the landscaping office (green mower blip on the map).
Walk up to the manager NPC and interact with him.
Open the shift menu and clock in.
Confirm that a company van spawns, you are assigned yards (shown as green blips on the map), and on-screen guidance points you to the first yard.

Mowing Check

Drive the van to an assigned yard.
Walk into the green circle at the yard and start the job.
Unload the mower from the back of the van.
Sit on the mower and lower the blades with G.
Drive over the grass patches — they should disappear as you mow. If the yard has junk lying around (toys, boxes, rocks), get off and pick those up by hand.

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:

PhoneArrives as
Oxide Phone, gksphone, okokPhone, qs-smartphone (Quasar V3)A text message
qb-phone, lb-phone, yseries, qs-smartphone-pro, older qs-smartphone versionsMail

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.

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:

server.cfg
add_ace group.admin admin allow

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

Next Steps