Configuration Guide

How settings work in oxide-landscapingjob (the /landscaping settings editor, factory defaults and file-owned yards), plus every setting and its default.

Reference for the current oxide-landscapingjob config surface.


How Settings Work

Settings are edited in-game with the /landscaping settings command (admins only). Changes save to your database and apply instantly — no restart needed. Values are checked before saving, and a bad value is rejected with a reason.

The config files in the shared/ folder are the factory defaults. The job keeps its live settings in your database, in the shared oxide_settings table:

  • The first time the job starts, it copies the config files into the database. Edits you made to the files before that first start are what gets copied.
  • From then on, the database wins. Editing a config file on a server that has already started changes nothing, even after a restart. Only brand-new settings added by a future update are imported from the files.
  • To change a setting, use /landscaping settings in-game (admins only). Changes save straight away and apply live, with no restart. A Basic / Advanced switch at the top picks which settings you see.
  • Reset to default on a setting puts it back to its value in the config file, as the file was when the server last started, and replaces the whole setting. So a file edit only takes effect after a restart and pressing Reset to default on that setting.

This includes the offices (Config.Locations): on an install that has already started once, add or change offices through /landscaping settings (under Locations & Yards), not by hand-editing the files. See Adding a Second Office.

Three things stay in the files (edit the file and restart): Config.UseHudAccent, Config.SettingsCommand in shared/config/models.lua (the command named in missing-model warnings), and the yards in Config.Yards.

Yards stay in the file. Config.Yards — every yard with its grass patches and obstacles — is too large to sync live, so it is never stored in the database. Yards stay in shared/config/locations.lua, are built in-world with /moweryard, and go live after you paste the export into that file and restart the resource. The menu shows the yards but doesn't edit them. See the Yard Building Guide.

Other resources can read and change settings through the GetSetting and SetSetting server exports — see the API Reference.

The tables below document every setting and its factory default.


Config File Map

FilePurpose
shared/config.luaCore toggles
shared/config/job.luaProgression, pay, timer, crew, complaints, cancel cooldown
shared/config/vehicles.luaVan, mower, blades, damage, audio, particles
shared/config/mowing.luaGrass models, obstacle models, interaction, animations
shared/config/visuals.luaNPC, blips, markers, waypoints, yard editor
shared/config/locations.luaOffice locations and shipped yard data
shared/config/outfits.luaOptional uniforms
shared/config/tutorials.luaTutorial text and onboarding toggles
shared/config/models.luaModel replacements for game builds that lack a model

Core Settings

shared/config.lua

SettingDefaultDescription
Config.DebugfalseExtra console logging for diagnosing problems. Leave off normally
Config.usePhonetrueSend shift messages and the end-of-shift pay summary to the player's phone (requires a phone resource o-link supports). They arrive as texts on phones that support them and as mail on the rest; texts need o-link 1.11.0 or newer, and an older o-link sends mail. On Oxide Phone with the Gigs app on, shift messages (not the pay summary) show as Gigs notifications instead. false sends nothing to the phone; the on-screen notifications still show. See Phone Shift Messages
Config.shiftSummary'text'Currently has no effect in this job. The pay summary follows Config.usePhone
Config.menuStyle'nui'Shift menu style: 'nui' (full custom menu) or 'menu' (simple text menu)
Config.UseHudAccenttrueThe yard overlay and the tutorial hints use your server's accent colour from Oxide HUD, set in Oxide HUD's Config.Theme. false keeps the job's own colours. Without Oxide HUD, or with no accent set there, nothing changes. Config file only: it is not in /landscaping settings, so change it in the file and restart
Config.MaxSlotsPerLocation3How many players can work from one office at the same time
Config.Debug = false
Config.usePhone = true
Config.shiftSummary = 'text'
Config.menuStyle = 'nui'
Config.UseHudAccent = true
Config.MaxSlotsPerLocation = 3

Crew Settings

shared/config/job.lua

SettingDefault
Config.Crew.maxSize2
Config.Crew.inviteRange15.0
Config.Crew.inviteTimeout30
Config.Crew.coopBonusPercent0.15

Notes:

  • Crew invites are ID-based in the current UI flow.
  • The server still enforces inviteRange when validating the invite.

Payment Settings

shared/config/job.lua

SettingDefault
Config.Payment.basePayPerYard75
Config.Payment.speedBonusAmount30
Config.Payment.speedBonusTimePercent0.60
Config.Payment.vehicleDestroyFine100
Config.Payment.streakBonusPerDay10
Config.Payment.maxStreakDays7
Config.Payment.gasFeePercent0.05
Config.Payment.taxPercent0.10
Config.Payment.payoutAccount'bank'
Config.Payment.fineAccount'cash'

payoutAccount is where net shift pay is deposited. fineAccount is where the van-destruction fine is withdrawn from. Both accept any account name your o-link money provider supports ('bank', 'cash', 'dirty', etc.).


Level Definitions

shared/config/job.lua

LevelTitle KeyRequired YardsMax YardsPay MultiplierMower SpeedTip ChanceTip Range
1level.trainee031.0x1.0x10%$5-$15
2level.groundskeeper1241.1x1.1x15%$5-$20
3level.landscaper3551.2x1.2x25%$10-$30
4level.senior_landscaper7051.35x1.35x30%$10-$40
5level.foreman13061.5x1.5x40%$15-$50

The "Title Key" column is a translation key — the text players actually see comes from locales/en.json, so you can rename the ranks there without touching the config.


Yard Tiers and Timer

shared/config/job.lua

Tier thresholds:

SettingDefault
Config.YardTiers.smallMax50
Config.YardTiers.mediumMax149

Tier multipliers are defined in shared/init.lua:

  • small: 1.0
  • medium: 1.5
  • large: 2.0

Timer settings:

SettingDefault
Config.Timer.baseTime120
Config.Timer.timePerPatch5
Config.Timer.expiredPenalty0.85

Every yard gets a time limit of baseTime seconds plus timePerPatch seconds per grass patch. Finishing after the timer runs out doesn't fail the yard — the pay for it is just multiplied by expiredPenalty (0.85 = a 15% pay cut).


Cancel Cooldown

shared/config/job.lua

Players can drop the yard they're on without clocking out (see Cancelling the Current Yard). This setting controls the short wait afterwards.

SettingDefaultDescription
Config.Cancel.cooldownSeconds60How long a player must wait after cancelling before starting another yard. Set to 0 for no wait
Config.Cancel = {
    cooldownSeconds = 60,   -- seconds; 0 = no wait
}

In a crew, both members get the cooldown, because either of them can start the next yard. Cancelling carries no fine and no complaint — this wait is the only cost.


Complaint Settings

shared/config/job.lua

SettingDefault
Config.Complaints.maxComplaints3
Config.Complaints.timeoutMinutes30
Config.Complaints.vehicleDestroyPenalty1
Config.Complaints.deathPenalty1
Config.Complaints.decayPerYard1

Players collect complaints for destroying company vehicles or dying on shift. Reaching maxComplaints suspends them from the job for timeoutMinutes minutes (and resets the count). Each completed yard removes decayPerYard complaints, so steady workers stay clean.


Vehicle Settings

shared/config/vehicles.lua

Company Vehicle

SettingDefault
Config.Rumpo.model'bison3'
Config.Rumpo.primaryColor{ 255, 255, 255 }
Config.Rumpo.secondaryColor{ 255, 255, 255 }
Config.Rumpo.plate'LAWN'
Config.Rumpo.healthCheckInterval1000
Config.Rumpo.destroyedThreshold150
Config.Rumpo.damageChargeRate0.50
Config.Rumpo.damageChargeThreshold950
Config.Rumpo.livery-1
Config.Rumpo.extrasnil

livery selects a livery index for replacement van models that ship multiple liveries (-1 keeps the model default). extras is an optional { [extraId] = enabled } map for forcing extras on/off on custom models.

Config.Rumpo.mowerAttach controls the cosmetic mower position on the van.

Mower

SettingDefault
Config.Mower.model'mower'
Config.Mower.spawnOffsetBehind1.5
Config.Mower.healthCheckInterval1000
Config.Mower.destroyedThreshold150
Config.Mower.repairHealth800
Config.Mower.showOpenHoodfalse
Config.Mower.allowFinishYardOnBreakdowntrue
Config.Mower.livery-1
Config.Mower.extrasnil

When allowFinishYardOnBreakdown = true, the current yard can be resumed after repair. The breakdown still counts toward complaint handling.

livery / extras work the same as on the van and are useful only if the stock mower model is replaced.

Mower Damage Particles

Config.Mower.damage.smoke and Config.Mower.damage.hitEffect describe the particle effects shown when the mower takes damage or hits an obstacle. Each entry contains:

  • dict — particle dictionary (default 'core')
  • name — particle effect name
  • offset — vector3 relative to the mower
  • scale — float

Blade Settings

SettingDefault
Config.Mower.blades.key'G'
Config.Mower.blades.baseMowingSpeed3.0
Config.Mower.blades.basePowerMultiplier0.3
Config.Mower.blades.normalMaxSpeed15.0
Config.Mower.blades.normalPowerMultiplier1.0

Blade Particles

Config.Mower.blades.particle defines the grass-cutting effects:

  • dict — particle dictionary (default 'core')
  • burstName — non-looped burst played per patch cut
  • loopedName — looped effect while blades are down and the mower is moving
  • scale — float
  • offset — vector3 relative to the mower

Blade Audio

xsound-backed audio settings:

  • toggle = 'lower_mechanical_whirr.ogg'
  • mowerLoop = 'lawn_mower_engine_loop.ogg'
  • engineFail = 'engine_fail.ogg'
  • toggleVolume = 0.2
  • loopVolume = 0.3
  • engineFailVolume = 0.4
  • distance = 30

Mowing and Obstacles

shared/config/mowing.lua

Grass Props

Config.GrassProps contains the valid patch models used by the shipped yards and the yard editor.

Obstacle Props

Config.ObstacleProps contains the valid obstacle models used by the shipped yards and the yard editor.

Obstacle Settings

SettingDefault
Config.Obstacles.detectionRadius2.0
Config.Obstacles.damagePerHit350
Config.Obstacles.pickupRadius5.0
Config.Obstacles.useTargettrue
Config.Obstacles.highlight.key'H'
Config.Obstacles.highlight.color{ r=255, g=200, b=0, a=255 }

highlight.key is the default binding for the +landscaping_highlight keybind (rebindable from the FiveM keybinds menu). Holding it during an active yard with remaining obstacles outlines them in highlight.color; otherwise it shows yard waypoints.

Mowing Detection

SettingDefault
Config.Mowing.detectionRadius2.0
Config.Mowing.fadeSteps17
Config.Mowing.fadeStepInterval60
Config.Mowing.mowerCheckInterval100

fadeSteps is the number of alpha steps used when a cut patch fades out. fadeStepInterval is the delay in milliseconds between each step. mowerCheckInterval is the polling interval in milliseconds for mower-to-patch proximity checks.

Animations

Configured actions:

  • unload mower
  • load mower
  • repair mower
  • pick up obstacle

Animation labels are locale keys, not hardcoded strings.


Visual Settings

shared/config/visuals.lua

NPC

SettingDefault
Config.NpcModel's_m_y_construct_01'
Config.NpcScenario'WORLD_HUMAN_CLIPBOARD'

Office Blip

SettingDefault
Config.Blip.enabledtrue
Config.Blip.sprite616
Config.Blip.color2
Config.Blip.scale0.6
Config.Blip.labelblip.landscaping_office

To hide office blips on the map entirely, turn off Show blip under NPCs & Blips → Depot blip in /landscaping settings (Config.Blip.enabled = false).

Yard Blip

SettingDefault
Config.YardBlip.sprite496
Config.YardBlip.color2
Config.YardBlip.scale0.7

Yard Marker

SettingDefault
Config.YardMarker.type25
Config.YardMarker.scalevector3(2.0, 2.0, 0.5)
Config.YardMarker.color{ r=50, g=200, b=50, a=120 }
Config.YardMarker.approachDistance30.0
Config.YardMarker.interactDistance5.0

Floating Waypoints

SettingDefault
Config.Waypoints.enabledtrue
Config.Waypoints.heightOffset5.0
Config.Waypoints.updateInterval0
Config.Waypoints.scaleMin0.5
Config.Waypoints.scaleMax1.0
Config.Waypoints.scaleNearDist30.0
Config.Waypoints.scaleFarDist300.0
Config.Waypoints.color{ r=50, g=200, b=50 }

Yard Editor

SettingDefault
Config.YardEditor.ghostAlpha150
Config.YardEditor.mouseSensitivity3.0
Config.YardEditor.headingSensitivity2.0
Config.YardEditor.zStep0.01
Config.YardEditor.raycastDistance100.0
Config.YardEditor.defaultSpeed0.5
Config.YardEditor.maxSpeed5.0
Config.YardEditor.minSpeed0.05
Config.YardEditor.speedStep0.25

Locations and Menu Camera

shared/config/locations.lua

This file holds two separate lists: Config.Locations (the offices players clock in at) and Config.Yards (the lawns they get sent to). Offices are database-managed like every other setting; yards stay in this file (see How Settings Work).

Config.Locations — offices

Each office entry includes:

FieldRequiredDescription
nameYesThe office name, shown on the map blip and at the top of the shift menu
coordsYesWhere the manager NPC stands (vector3)
headingYesWhich way the NPC faces, 0–360
vehicleSpawnYesWhere the van and mower appear (vector4 — position plus the direction the van points)
menuCameraNoThe camera shot used by the NUI menu. Leave it out and the menu opens without a camera move

menuCamera contains:

FieldDescription
coordsWhere the camera sits (vector3)
headingWhich way the camera looks, 0–360
fovHow zoomed in it is — lower zooms in, higher shows more. 65 is the shipped value

Config.Yards — lawns

Each yard entry includes:

FieldRequiredDescription
nameYesThe yard name, shown on its map blip and in the pay summary
coordsYesThe yard's center point — the marker the player drives to and starts the job at (vector3)
patchesYesThe grass to be cut. Each entry is { coords = vector3(...), model = '...', heading = ... }. The number of patches decides the yard's size tier and its time limit
obstaclesNoJunk to be cleared before the yard counts as done. Same shape as a patch: { coords, model, heading }. Driving the mower into one damages the engine

Valid model names come from Config.GrassProps (patches) and Config.ObstacleProps (obstacles) in shared/config/mowing.lua.


Adding a Second Office

Config.Locations ships with one office, but it's a list — you can add as many as you like (up to 50), and each entry is a complete, independent depot with its own NPC, blip, and vehicle spawn.

What you need to know first

  • Blips and NPCs appear on their own. The job creates a manager NPC and a map blip for every office in the list, when it starts and again each time you save the list. There's nothing else to register and nothing else to switch on.
  • A shift belongs to the office the player clocked in at. The van spawns at that office's vehicleSpawn, and the "return to the office" route at the end of a shift points back to it.
  • Worker slots are counted per office. Config.MaxSlotsPerLocation (default 3) applies to each office separately, so two offices means six people can be on shift at once.
  • Offices can be changed while people are on shift. In /landscaping settings (Locations & Yards, Depots) you can edit, reorder or delete offices while landscapers are working. A shift keeps its office as long as the office keeps either its name or its manager's spot (Clerk spot in the editor), and the slot counts carry over. If you delete an office (or change both its name and its manager's spot in the same save), the shifts there end straight away and are paid what a clock-out would pay, the pay summary is sent, and the players are told "Your location was removed, so your shift has ended."
  • Yards are shared between all offices. This is the important one. Config.Yards is a single pool for the whole server — yards are not attached to an office. Whichever office a player clocks in at, they're assigned yards drawn at random from that same pool.
  • A yard can only be worked by one player (or one crew) at a time. So adding offices without adding yards means more workers competing for the same lawns. If everything is taken, players are told no yards are available. Plan on roughly enough yards to cover every worker slot across all your offices, times the biggest round a level 5 worker gets (6 yards).
  • Progression is shared. A player's level, yard count, and streak follow their character, not the office.

Adding one

Offices are stored in the database (see How Settings Work), so you add them in-game, not in shared/config/locations.lua:

  1. Run /landscaping settings and open Locations & Yards.

  2. Under Depots, press Add. A new, empty office opens.

  3. Fill in its four fields. All of them are required:

    Menu fieldIn the config fileWhat it is
    NamenameThe office name, shown on its map blip and in the shift menu
    Clerk spotcoordsWhere the manager NPC stands
    FacingheadingWhich way the NPC faces, 0–360
    Van spawnvehicleSpawnWhere the van and mower appear, plus the direction the van points
  4. Set Clerk spot and Van spawn with the Place in world button (the crosshair) instead of typing numbers. The menu hides, you pick the spot in the world with a preview of the manager or the van, and the menu comes back with the spot filled in. Placing the manager also sets Facing. Teleport here takes you to a spot that's already set. If the button says it needs an updated o-link, update o-link or type the numbers in.

  5. Press Save Changes.

The new office is live as soon as you save: its manager and blip appear and players can clock in there, with no restart. Shifts already running carry on at their own offices.

The menu has no field for the shift menu's camera shot (menuCamera), so a new office opens the shift menu without a camera move. Editing an office in the menu keeps the camera it already has.

Using the config file instead

shared/config/locations.lua only holds the factory default office list. Adding an office there changes nothing on a server that has already started, even after a restart. If you'd rather work in the file (for example to give an office a menuCamera):

  1. Put every office you want into Config.Locations, in the shape below, and restart the resource.
  2. In /landscaping settings → Locations & Yards, press Reset to default on Depots.

Reset to default replaces the whole office list with the file's. Any office you added or changed in the menu but didn't also put in the file is gone, and shifts at an office that disappears end as described above.

Config.Locations = {
    {
        -- ... the existing The Mighty Bush entry, leave it alone ...
    },
    {
        name = 'Sandy Shores Grounds Crew',
        coords = vector3(1687.44, 3600.12, 35.62),
        heading = 210.0,
        vehicleSpawn = vector4(1681.90, 3593.55, 35.30, 120.0),

        menuCamera = {
            coords = vector3(1694.00, 3607.00, 40.00),
            heading = 190.0,
            fov = 65.0,
        },
    },
}

After the reset you should see a second blip on your map and a second manager standing at the new spot.

To gather coordinates for the file, the in-game builder commands also work: /mowerlocation <name> records the office where you're standing, and /mowervehicle records the van spawn. Both are admin-only, and /mowerexport writes the result to exported_locations.lua. The export leaves out menuCamera, so add it back by hand for any office that should keep its camera. See the Admin Commands Reference and the Yard Building Guide.

Adding yards to go with it

Because the yard pool is shared, adding an office near a new part of the map doesn't automatically give players work nearby — they'll still be sent to whichever yards are free, anywhere on the map. If you want workers at a new office to stay local, build new yards in that area and add them to Config.Yards. The Yard Building Guide walks through the in-game yard editor step by step.


Model Compatibility

shared/config/models.lua

Every model this job spawns is checked before it is requested. A model that doesn't exist on a player's game build (older builds lack newer DLC props) is skipped instantly with a warning naming it, instead of freezing the load and rendering nothing. Nothing is substituted automatically — you choose the replacement.

SettingDefaultDescription
Config.ModelSwaps{}List of { from = '...', to = '...' } rows. Replaces a prop, ped or vehicle model everywhere this job uses it
Config.ModelSwaps = {
    { from = 'm25_1_prop_m51_dog_bowl_full', to = 'prop_cs_bowl_01' },
}

On a running install, add rows under Compatibility in /landscaping settings. This is the only way to change the grass and obstacle models inside existing yards, because those are built with /moweryard rather than edited in the menu. Saving a swap rebuilds standing yard grass and obstacles live.

When a player reports a missing model, the server logs it and notifies online admins once per model, pointing them at /landscaping settings. The warnings are capped per player and in total, so one misbehaving client can't flood admins or fill the log.


Uniforms

shared/config/outfits.lua

SettingDefaultDescription
Config.uniformsEnabledfalseEnables the uniform toggle in the menu and the server uniform callbacks

The file also defines:

  • Config.LandscapingOutfitMale
  • Config.LandscapingOutfitFemale

These outfits are applied through olink.clothing.


Tutorials

shared/config/tutorials.lua

Config.Tutorials defines the one-time onboarding hints shown the first time a player encounters a given situation. Each entry is keyed by an event id and contains:

  • icon — Font Awesome class
  • title — locale key
  • body — locale key
  • duration — optional seconds (default applied by the tutorial module)
  • position — optional screen position (top-right, top-left, bottom-right, bottom-left, center-top, center, center-bottom)

With Oxide HUD, every hint left at the default position (top right) appears where each player puts the tutorial hints in the /hud editor. A hint you give another position keeps that position.

Shipped events: first_clockin, first_mower_unload, first_blades_lowered, first_obstacle, first_yard_complete, first_timer_expired, first_vehicle_damage, first_mower_damaged, first_level_up, first_crew.

Players can toggle tutorials on/off with /landscapingtutorials (or /landscaping tutorials) and re-show all tutorials with /landscapingtutorialreset (or /landscaping tutorialreset).

You can edit the cards in /landscaping settings → Tutorials (Advanced view), but not remove one there. To remove an event entirely, delete its entry from Config.Tutorials, restart the resource, then press Reset to default on Tutorial cards. That replaces every card with the file's version, so card edits made in the menu are lost.


Notes on Builder Exports

The in-game yard builder writes its output to exported_locations.lua in the resource folder. The game does not read that file directly — the live yards always come from shared/config/locations.lua.

After exporting, copy the contents of exported_locations.lua into shared/config/locations.lua and restart the resource. See the Yard Building Guide for the full walkthrough.

That restart makes the yards live, but not the offices. The export also holds the office list (Config.Locations), and offices are stored in the database, so the pasted list only becomes the new factory default. To use it, press Reset to default on Depots in /landscaping settings, which replaces the whole office list. Or skip the file and add offices in the menu (see Adding a Second Office).


Next Steps