Configuration Guide

Reference for the current oxide-landscapingjob config surface.

Reference for the current oxide-landscapingjob config surface.


Config File Map

FilePurpose
shared/config.luaCore toggles
shared/config/job.luaProgression, pay, timer, crew, complaints
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

Core Settings

shared/config.lua

SettingDefaultDescription
Config.DebugfalseExtra console logging for diagnosing problems. Leave off normally
Config.usePhonetrueSend shift messages to the player's phone as emails (requires a phone resource o-link supports)
Config.shiftSummary'text'How the end-of-shift pay summary is shown: 'text' (phone email) or 'nui' (on-screen pop-up)
Config.menuStyle'nui'Shift menu style: 'nui' (full custom menu) or 'menu' (simple text menu)
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.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).


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
  • offsetvector3 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
  • offsetvector3 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

Set Config.Blip.enabled = false to hide office blips on the map entirely.

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

Each office entry includes:

  • name
  • coords
  • heading
  • vehicleSpawn
  • optional menuCamera

menuCamera is used only by the NUI menu flow and contains:

  • coords
  • heading
  • fov

Yards contain:

  • name
  • coords
  • patches
  • optional obstacles

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)

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 and re-show all tutorials with /landscapingtutorialreset.

To remove an event entirely, delete its entry from Config.Tutorials.


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 YARD-BUILDING.md for the full walkthrough.


Next Steps