Configuration Guide
Reference for the current oxide-landscapingjob config surface.
Reference for the current oxide-landscapingjob config surface.
Config File Map
| File | Purpose |
|---|---|
shared/config.lua | Core toggles |
shared/config/job.lua | Progression, pay, timer, crew, complaints |
shared/config/vehicles.lua | Van, mower, blades, damage, audio, particles |
shared/config/mowing.lua | Grass models, obstacle models, interaction, animations |
shared/config/visuals.lua | NPC, blips, markers, waypoints, yard editor |
shared/config/locations.lua | Office locations and shipped yard data |
shared/config/outfits.lua | Optional uniforms |
shared/config/tutorials.lua | Tutorial text and onboarding toggles |
Core Settings
shared/config.lua
| Setting | Default | Description |
|---|---|---|
Config.Debug | false | Extra console logging for diagnosing problems. Leave off normally |
Config.usePhone | true | Send 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.MaxSlotsPerLocation | 3 | How 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 = 3Crew Settings
shared/config/job.lua
| Setting | Default |
|---|---|
Config.Crew.maxSize | 2 |
Config.Crew.inviteRange | 15.0 |
Config.Crew.inviteTimeout | 30 |
Config.Crew.coopBonusPercent | 0.15 |
Notes:
- Crew invites are ID-based in the current UI flow.
- The server still enforces
inviteRangewhen validating the invite.
Payment Settings
shared/config/job.lua
| Setting | Default |
|---|---|
Config.Payment.basePayPerYard | 75 |
Config.Payment.speedBonusAmount | 30 |
Config.Payment.speedBonusTimePercent | 0.60 |
Config.Payment.vehicleDestroyFine | 100 |
Config.Payment.streakBonusPerDay | 10 |
Config.Payment.maxStreakDays | 7 |
Config.Payment.gasFeePercent | 0.05 |
Config.Payment.taxPercent | 0.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
| Level | Title Key | Required Yards | Max Yards | Pay Multiplier | Mower Speed | Tip Chance | Tip Range |
|---|---|---|---|---|---|---|---|
| 1 | level.trainee | 0 | 3 | 1.0x | 1.0x | 10% | $5-$15 |
| 2 | level.groundskeeper | 12 | 4 | 1.1x | 1.1x | 15% | $5-$20 |
| 3 | level.landscaper | 35 | 5 | 1.2x | 1.2x | 25% | $10-$30 |
| 4 | level.senior_landscaper | 70 | 5 | 1.35x | 1.35x | 30% | $10-$40 |
| 5 | level.foreman | 130 | 6 | 1.5x | 1.5x | 40% | $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:
| Setting | Default |
|---|---|
Config.YardTiers.smallMax | 50 |
Config.YardTiers.mediumMax | 149 |
Tier multipliers are defined in shared/init.lua:
- small:
1.0 - medium:
1.5 - large:
2.0
Timer settings:
| Setting | Default |
|---|---|
Config.Timer.baseTime | 120 |
Config.Timer.timePerPatch | 5 |
Config.Timer.expiredPenalty | 0.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
| Setting | Default |
|---|---|
Config.Complaints.maxComplaints | 3 |
Config.Complaints.timeoutMinutes | 30 |
Config.Complaints.vehicleDestroyPenalty | 1 |
Config.Complaints.deathPenalty | 1 |
Config.Complaints.decayPerYard | 1 |
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
| Setting | Default |
|---|---|
Config.Rumpo.model | 'bison3' |
Config.Rumpo.primaryColor | { 255, 255, 255 } |
Config.Rumpo.secondaryColor | { 255, 255, 255 } |
Config.Rumpo.plate | 'LAWN' |
Config.Rumpo.healthCheckInterval | 1000 |
Config.Rumpo.destroyedThreshold | 150 |
Config.Rumpo.damageChargeRate | 0.50 |
Config.Rumpo.damageChargeThreshold | 950 |
Config.Rumpo.livery | -1 |
Config.Rumpo.extras | nil |
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
| Setting | Default |
|---|---|
Config.Mower.model | 'mower' |
Config.Mower.spawnOffsetBehind | 1.5 |
Config.Mower.healthCheckInterval | 1000 |
Config.Mower.destroyedThreshold | 150 |
Config.Mower.repairHealth | 800 |
Config.Mower.showOpenHood | false |
Config.Mower.allowFinishYardOnBreakdown | true |
Config.Mower.livery | -1 |
Config.Mower.extras | nil |
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 nameoffset—vector3relative to the mowerscale— float
Blade Settings
| Setting | Default |
|---|---|
Config.Mower.blades.key | 'G' |
Config.Mower.blades.baseMowingSpeed | 3.0 |
Config.Mower.blades.basePowerMultiplier | 0.3 |
Config.Mower.blades.normalMaxSpeed | 15.0 |
Config.Mower.blades.normalPowerMultiplier | 1.0 |
Blade Particles
Config.Mower.blades.particle defines the grass-cutting effects:
dict— particle dictionary (default'core')burstName— non-looped burst played per patch cutloopedName— looped effect while blades are down and the mower is movingscale— floatoffset—vector3relative 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.2loopVolume = 0.3engineFailVolume = 0.4distance = 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
| Setting | Default |
|---|---|
Config.Obstacles.detectionRadius | 2.0 |
Config.Obstacles.damagePerHit | 350 |
Config.Obstacles.pickupRadius | 5.0 |
Config.Obstacles.useTarget | true |
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
| Setting | Default |
|---|---|
Config.Mowing.detectionRadius | 2.0 |
Config.Mowing.fadeSteps | 17 |
Config.Mowing.fadeStepInterval | 60 |
Config.Mowing.mowerCheckInterval | 100 |
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
| Setting | Default |
|---|---|
Config.NpcModel | 's_m_y_construct_01' |
Config.NpcScenario | 'WORLD_HUMAN_CLIPBOARD' |
Office Blip
| Setting | Default |
|---|---|
Config.Blip.enabled | true |
Config.Blip.sprite | 616 |
Config.Blip.color | 2 |
Config.Blip.scale | 0.6 |
Config.Blip.label | blip.landscaping_office |
Set Config.Blip.enabled = false to hide office blips on the map entirely.
Yard Blip
| Setting | Default |
|---|---|
Config.YardBlip.sprite | 496 |
Config.YardBlip.color | 2 |
Config.YardBlip.scale | 0.7 |
Yard Marker
| Setting | Default |
|---|---|
Config.YardMarker.type | 25 |
Config.YardMarker.scale | vector3(2.0, 2.0, 0.5) |
Config.YardMarker.color | { r=50, g=200, b=50, a=120 } |
Config.YardMarker.approachDistance | 30.0 |
Config.YardMarker.interactDistance | 5.0 |
Floating Waypoints
| Setting | Default |
|---|---|
Config.Waypoints.enabled | true |
Config.Waypoints.heightOffset | 5.0 |
Config.Waypoints.updateInterval | 0 |
Config.Waypoints.scaleMin | 0.5 |
Config.Waypoints.scaleMax | 1.0 |
Config.Waypoints.scaleNearDist | 30.0 |
Config.Waypoints.scaleFarDist | 300.0 |
Config.Waypoints.color | { r=50, g=200, b=50 } |
Yard Editor
| Setting | Default |
|---|---|
Config.YardEditor.ghostAlpha | 150 |
Config.YardEditor.mouseSensitivity | 3.0 |
Config.YardEditor.headingSensitivity | 2.0 |
Config.YardEditor.zStep | 0.01 |
Config.YardEditor.raycastDistance | 100.0 |
Config.YardEditor.defaultSpeed | 0.5 |
Config.YardEditor.maxSpeed | 5.0 |
Config.YardEditor.minSpeed | 0.05 |
Config.YardEditor.speedStep | 0.25 |
Locations and Menu Camera
shared/config/locations.lua
Each office entry includes:
namecoordsheadingvehicleSpawn- optional
menuCamera
menuCamera is used only by the NUI menu flow and contains:
coordsheadingfov
Yards contain:
namecoordspatches- optional
obstacles
Uniforms
shared/config/outfits.lua
| Setting | Default | Description |
|---|---|---|
Config.uniformsEnabled | false | Enables the uniform toggle in the menu and the server uniform callbacks |
The file also defines:
Config.LandscapingOutfitMaleConfig.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 classtitle— locale keybody— locale keyduration— 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.