Configuration Guide
Complete reference for all configuration options in oxide-landscapingjob.
Config File: config.lua
Core Settings
Basic resource configuration.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Debug | boolean | false | Enable debug console output |
Config.usePhone | boolean | true | Send SMS/email via phone instead of toast notifications |
Config.MaxSlotsPerLocation | number | 3 | Maximum concurrent workers per office location |
Config.Debug = false
Config.usePhone = true
Config.MaxSlotsPerLocation = 3
Crew Settings
Configure the 2-player co-op system.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Crew.maxSize | number | 2 | Maximum crew members |
Config.Crew.inviteRange | number | 10.0 | Meters within which a partner can be invited |
Config.Crew.inviteTimeout | number | 30 | Seconds before invite expires |
Config.Crew.coopBonusPercent | number | 0.15 | 15% bonus per yard when in crew |
Config.Crew = {
maxSize = 2,
inviteRange = 10.0,
inviteTimeout = 30,
coopBonusPercent = 0.15,
}
Payment Settings
Configure the payment calculation system.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Payment.basePayPerYard | number | 75 | Base pay per completed yard ($) |
Config.Payment.speedBonusAmount | number | 30 | Bonus for finishing quickly ($) |
Config.Payment.speedBonusTimePercent | number | 0.60 | Must finish within 60% of allowed time |
Config.Payment.vehicleDestroyFine | number | 100 | Fine for destroying the company van ($) |
Config.Payment.streakBonusPerDay | number | 10 | Bonus per streak day ($) |
Config.Payment.maxStreakDays | number | 7 | Maximum streak bonus days |
Config.Payment.gasFeePercent | number | 0.05 | 5% of gross pay deducted as gas fee |
Config.Payment.taxPercent | number | 0.10 | 10% San Andreas income tax |
Config.Payment = {
basePayPerYard = 75,
speedBonusAmount = 30,
speedBonusTimePercent = 0.60,
vehicleDestroyFine = 100,
streakBonusPerDay = 10,
maxStreakDays = 7,
gasFeePercent = 0.05,
taxPercent = 0.10,
}
Level Definitions
Configure the 5-tier progression system. Each level unlocks better pay, faster mowing, and higher tip chances.
| Level | Title | Yards Required | Max Yards | Pay Multiplier | Mower Speed | Tip Chance | Tip Range |
|---|---|---|---|---|---|---|---|
| 1 | Trainee | 0 | 3 | 1.0x | 1.0x | 10% | $5-$15 |
| 2 | Groundskeeper | 12 | 4 | 1.1x | 1.1x | 15% | $5-$20 |
| 3 | Landscaper | 35 | 5 | 1.2x | 1.2x | 25% | $10-$30 |
| 4 | Senior Landscaper | 70 | 5 | 1.35x | 1.35x | 30% | $10-$40 |
| 5 | Foreman | 130 | 6 | 1.5x | 1.5x | 40% | $15-$50 |
Config.Levels = {
[1] = {
title = 'Trainee',
requiredYards = 0,
maxYards = 3,
payMultiplier = 1.0,
mowerSpeedMultiplier = 1.0,
tipChance = 0.10,
tipRange = { 5, 15 },
},
[2] = {
title = 'Groundskeeper',
requiredYards = 12,
maxYards = 4,
payMultiplier = 1.1,
mowerSpeedMultiplier = 1.1,
tipChance = 0.15,
tipRange = { 5, 20 },
},
[3] = {
title = 'Landscaper',
requiredYards = 35,
maxYards = 5,
payMultiplier = 1.2,
mowerSpeedMultiplier = 1.2,
tipChance = 0.25,
tipRange = { 10, 30 },
},
[4] = {
title = 'Senior Landscaper',
requiredYards = 70,
maxYards = 5,
payMultiplier = 1.35,
mowerSpeedMultiplier = 1.35,
tipChance = 0.30,
tipRange = { 10, 40 },
},
[5] = {
title = 'Foreman',
requiredYards = 130,
maxYards = 6,
payMultiplier = 1.5,
mowerSpeedMultiplier = 1.5,
tipChance = 0.40,
tipRange = { 15, 50 },
},
}
Field Descriptions:
| Field | Type | Description |
|---|---|---|
title | string | Display name for the level |
requiredYards | number | Total yards needed to reach this level |
maxYards | number | Maximum yards assigned per shift |
payMultiplier | number | Multiplier applied to base pay |
mowerSpeedMultiplier | number | Multiplier applied to mower speed |
tipChance | number | Probability of receiving a tip (0.0 - 1.0) |
tipRange | table | Min and max tip amount in dollars |
Vehicle Settings
Configure the company van (Rumpo).
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Rumpo.model | string | 'bison3' | Vehicle model name |
Config.Rumpo.primaryColor | table | { 255, 255, 255 } | Primary color RGB |
Config.Rumpo.secondaryColor | table | { 255, 255, 255 } | Secondary color RGB |
Config.Rumpo.plate | string | 'LAWN' | License plate text |
Config.Rumpo.healthCheckInterval | number | 1000 | Health check interval in ms |
Config.Rumpo.destroyedThreshold | number | 150 | Engine health below this = destroyed |
Config.Rumpo.damageChargeRate | number | 0.50 | Dollars per body health point lost |
Config.Rumpo.damageChargeThreshold | number | 950 | Only charge below this body health |
Config.Rumpo = {
model = 'bison3',
primaryColor = { 255, 255, 255 },
secondaryColor = { 255, 255, 255 },
plate = 'LAWN',
healthCheckInterval = 1000,
destroyedThreshold = 150,
damageChargeRate = 0.50,
damageChargeThreshold = 950,
mowerAttach = {
offset = vector3(0.0, -0.8, 1.7),
rotation = vector3(0.0, 0.0, 0.0),
},
}
Mower Attachment: The mowerAttach sub-table controls where the mower prop sits on the van's roof rack. Adjust offset if using a different van model.
Mower Settings
Configure the mower vehicle.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Mower.model | string | 'mower' | Vehicle model name |
Config.Mower.spawnOffsetBehind | number | 1.5 | Meters behind van to spawn mower |
Config.Mower.healthCheckInterval | number | 1000 | Health check interval in ms |
Config.Mower.destroyedThreshold | number | 150 | Engine health below this = destroyed |
Config.Mower.repairHealth | number | 800 | Engine health restored by repair |
Config.Mower.showOpenHood | boolean | false | Show "Open Hood" target option |
Config.Mower = {
model = 'mower',
spawnOffsetBehind = 1.5,
healthCheckInterval = 1000,
destroyedThreshold = 150,
repairHealth = 800,
showOpenHood = false,
}
Note: Set showOpenHood to false if another script already handles vehicle hood/repair interactions.
Blade Settings
Configure the mower blade toggle system. These settings are nested under Config.Mower.blades.
| Setting | Type | Default | Description |
|---|---|---|---|
key | string | 'G' | Keybind to toggle blades |
baseMowingSpeed | number | 3.0 | Max speed with blades down (m/s) |
basePowerMultiplier | number | 0.3 | Engine power with blades down |
normalMaxSpeed | number | 15.0 | Max speed with blades up (m/s) |
normalPowerMultiplier | number | 1.0 | Engine power with blades up |
Config.Mower.blades = {
key = 'G',
baseMowingSpeed = 3.0,
basePowerMultiplier = 0.3,
normalMaxSpeed = 15.0,
normalPowerMultiplier = 1.0,
}
Particle Settings (nested under Config.Mower.blades.particle):
| Setting | Type | Default | Description |
|---|---|---|---|
dict | string | 'core' | Particle dictionary |
burstName | string | 'ent_dst_veg_shrub' | Burst effect per patch cut |
loopedName | string | 'ent_amb_wind_grass_dir' | Looped effect while moving |
scale | number | 1.0 | Particle scale |
offset | vector3 | (0.0, -0.8, -0.3) | Offset below/behind mower |
Sound Settings (nested under Config.Mower.blades.sound):
| Setting | Type | Default | Description |
|---|---|---|---|
toggle | string | 'lower_mechanical_whirr.ogg' | Sound on blade toggle |
mowerLoop | string | 'lawn_mower_engine_loop.ogg' | Looped engine sound |
engineFail | string | 'engine_fail.ogg' | Sound on mower destruction |
toggleVolume | number | 0.2 | Toggle sound volume |
loopVolume | number | 0.3 | Loop sound volume |
engineFailVolume | number | 0.4 | Engine fail volume |
distance | number | 30 | Max audible distance in meters |
Grass Props
List of valid grass patch models. Used by the yard editor and config validation.
Config.GrassProps = {
'prop_grass_dry_02',
'prop_grass_dry_03',
'prop_snow_grass_01',
'prop_veg_grass_01_a',
'prop_veg_grass_01_b',
'prop_veg_grass_01_c',
'prop_veg_grass_01_d',
'prop_veg_grass_02_a',
}
Add or remove models to customize the available grass types for yard building.
Obstacle Props
List of valid obstacle models. Used by the yard editor and config validation.
Config.ObstacleProps = {
'v_16_study_skateboards',
'prop_bbq_4',
'vw_prop_casino_art_basketball_01a',
'prop_beachball_01',
'v_ret_fh_coolbox',
'prop_tool_shovel',
'vw_prop_casino_art_basketball_02a',
'prop_patio_lounger_3',
'm25_2_int_01_balloons_01',
'prop_rolled_yoga_mat',
'csx_rvrbldr_smla_',
'bkr_ware03_packagebox2',
'ng_proc_sodacup_02b',
'prop_ld_binbag_01',
'm25_1_int_01_cone_02',
'cs_x_rubweec',
'xm_rock_60',
'xm_rock_44',
'prop_tree_stump_01',
}
Obstacle Settings
Configure obstacle interaction and hazard behavior.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Obstacles.detectionRadius | number | 2.0 | Mower distance to trigger damage |
Config.Obstacles.damagePerHit | number | 350 | Engine damage per obstacle collision |
Config.Obstacles.pickupRadius | number | 4.0 | On-foot distance for pickup prompt |
Config.Obstacles.useTarget | boolean | true | Use third-eye target instead of proximity |
Config.Obstacles = {
detectionRadius = 2.0,
damagePerHit = 350,
pickupRadius = 4.0,
useTarget = true,
highlight = {
key = 'H',
color = { r = 255, g = 200, b = 0, a = 255 },
},
}
Highlight: Hold the configured key to outline remaining obstacles. The color is a yellow-orange RGBA value.
Mowing Detection
Configure how the mower detects and cuts grass patches.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Mowing.detectionRadius | number | 2.0 | Distance from mower to cut a patch |
Config.Mowing.fadeSteps | number | 17 | Number of alpha steps in fade-out |
Config.Mowing.fadeStepInterval | number | 60 | Milliseconds between each fade step |
Config.Mowing.mowerCheckInterval | number | 100 | Milliseconds between proximity checks |
Config.Mowing = {
detectionRadius = 2.0,
fadeSteps = 17,
fadeStepInterval = 60,
mowerCheckInterval = 100,
}
Yard Tiers
Configure the patch count thresholds that determine yard size tiers.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.YardTiers.smallMax | number | 50 | 1-50 patches = Small |
Config.YardTiers.mediumMax | number | 149 | 51-149 patches = Medium |
Config.YardTiers = {
smallMax = 50,
mediumMax = 149,
-- 150+ patches = Large
}
Tier Payment Multipliers (defined in shared/init.lua):
| Tier | Multiplier |
|---|---|
| Small | 1.0x |
| Medium | 1.5x |
| Large | 2.0x |
Timer Settings
Configure the yard time limit system.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Timer.baseTime | number | 120 | Base seconds for any yard |
Config.Timer.timePerPatch | number | 5 | Additional seconds per grass patch |
Config.Timer.expiredPenalty | number | 0.85 | Pay multiplier when timer expires (15% penalty) |
Config.Timer = {
baseTime = 120,
timePerPatch = 5,
expiredPenalty = 0.85,
}
Example: A yard with 20 patches gets 120 + (20 * 5) = 220 seconds (3 minutes 40 seconds).
Complaint Settings
Configure the complaint and suspension system.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Complaints.maxComplaints | number | 3 | Complaints before timeout |
Config.Complaints.timeoutMinutes | number | 30 | Lockout duration in minutes |
Config.Complaints.vehicleDestroyPenalty | number | 1 | Complaints per vehicle destruction |
Config.Complaints.deathPenalty | number | 1 | Complaints per death on shift |
Config.Complaints.decayPerYard | number | 1 | Complaints removed per successful yard |
Config.Complaints = {
maxComplaints = 3,
timeoutMinutes = 30,
vehicleDestroyPenalty = 1,
deathPenalty = 1,
decayPerYard = 1,
}
Animation Settings
Configure animation durations and dictionaries for job actions.
| Action | Duration | Label | Animation |
|---|---|---|---|
| Unload Mower | 4000ms | "Unloading mower..." | mini@repair / fixing_a_ped |
| Load Mower | 4000ms | "Loading mower..." | mini@repair / fixing_a_ped |
| Repair Mower | 5000ms | "Repairing mower..." | mini@repair / fixing_a_player |
| Pickup Obstacle | 5000ms | "Picking up..." | anim@amb@clubhouse@tutorial@bkr_tut_ig3@ / machinic_loop_mechandplayer |
Config.Animations = {
unloadMower = {
duration = 4000,
label = 'Unloading mower...',
dict = 'mini@repair',
anim = 'fixing_a_ped',
flags = 1,
},
loadMower = {
duration = 4000,
label = 'Loading mower...',
dict = 'mini@repair',
anim = 'fixing_a_ped',
flags = 1,
},
repairMower = {
duration = 5000,
label = 'Repairing mower...',
dict = 'mini@repair',
anim = 'fixing_a_player',
flags = 1,
},
pickupObstacle = {
duration = 5000,
label = 'Picking up...',
dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
anim = 'machinic_loop_mechandplayer',
flags = 1,
},
}
NPC Settings
Configure the office manager NPC.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.NpcModel | string | 's_m_y_construct_01' | Ped model for the NPC |
Config.NpcScenario | string | 'WORLD_HUMAN_CLIPBOARD' | Ambient scenario animation |
Config.NpcModel = 's_m_y_construct_01'
Config.NpcScenario = 'WORLD_HUMAN_CLIPBOARD'
Blip Settings
Configure the map blip for landscaping office locations.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Blip.sprite | number | 446 | Blip icon (lawn mower) |
Config.Blip.color | number | 2 | Blip color (green) |
Config.Blip.scale | number | 0.6 | Blip size |
Config.Blip.label | string | 'Landscaping Office' | Blip display name |
Config.Blip = {
sprite = 446,
color = 2,
scale = 0.6,
label = 'Landscaping Office',
}
Yard Blip Settings
Configure the map blip shown during an active shift for each assigned yard.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.YardBlip.sprite | number | 496 | Blip icon (waypoint marker) |
Config.YardBlip.color | number | 2 | Blip color (green) |
Config.YardBlip.scale | number | 0.7 | Blip size |
Config.YardBlip = {
sprite = 496,
color = 2,
scale = 0.7,
}
Yard Marker Settings
Configure the ground marker displayed at yard entry points.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.YardMarker.type | number | 25 | Marker type (horizontal circle) |
Config.YardMarker.scale | vector3 | (2.0, 2.0, 0.5) | Marker dimensions |
Config.YardMarker.color | table | { r=50, g=200, b=50, a=120 } | Green with transparency |
Config.YardMarker.approachDistance | number | 30.0 | Start drawing within this range |
Config.YardMarker.interactDistance | number | 5.0 | Press E within this range |
Config.YardMarker = {
type = 25,
scale = vector3(2.0, 2.0, 0.5),
color = { r = 50, g = 200, b = 50, a = 120 },
approachDistance = 30.0,
interactDistance = 5.0,
}
Waypoint Settings
Configure the floating 3D waypoint markers above assigned yards.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Waypoints.enabled | boolean | true | Enable floating waypoints |
Config.Waypoints.heightOffset | number | 5.0 | Z offset above yard center |
Config.Waypoints.updateInterval | number | 0 | Update frequency (0 = every frame) |
Config.Waypoints.scaleMin | number | 0.5 | Scale at far distance |
Config.Waypoints.scaleMax | number | 1.0 | Scale at near distance |
Config.Waypoints.scaleNearDist | number | 30.0 | Full scale within this range |
Config.Waypoints.scaleFarDist | number | 300.0 | Minimum scale beyond this range |
Config.Waypoints.color | table | { r=50, g=200, b=50 } | Waypoint color (green) |
Config.Waypoints = {
enabled = true,
heightOffset = 5.0,
updateInterval = 0,
scaleMin = 0.5,
scaleMax = 1.0,
scaleNearDist = 30.0,
scaleFarDist = 300.0,
color = { r = 50, g = 200, b = 50 },
}
Yard Editor Settings
Configure the visual freecam tool for building new yards. See Admin Commands for usage.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.YardEditor.ghostAlpha | number | 150 | Ghost prop transparency (0-255) |
Config.YardEditor.mouseSensitivity | number | 3.0 | Camera look sensitivity |
Config.YardEditor.headingSensitivity | number | 2.0 | Precision mode rotation sensitivity |
Config.YardEditor.zStep | number | 0.01 | Z offset per scroll tick |
Config.YardEditor.raycastDistance | number | 100.0 | Max raycast distance from camera |
Config.YardEditor.defaultSpeed | number | 0.5 | Default camera movement speed |
Config.YardEditor.maxSpeed | number | 5.0 | Maximum camera speed |
Config.YardEditor.minSpeed | number | 0.05 | Minimum camera speed |
Config.YardEditor.speedStep | number | 0.25 | Speed change per scroll tick |
Config.YardEditor = {
ghostAlpha = 150,
mouseSensitivity = 3.0,
headingSensitivity = 2.0,
zStep = 0.01,
raycastDistance = 100.0,
defaultSpeed = 0.5,
maxSpeed = 5.0,
minSpeed = 0.05,
speedStep = 0.25,
}
Locations
Define landscaping office spawn points. Each location has an NPC, a map blip, and a vehicle spawn.
Config.Locations = {
{
name = 'The Mighty Bush',
coords = vector3(-510.28, -53.01, 42.10),
heading = 343.0,
vehicleSpawn = vector4(-494.61, -55.19, 39.98, 158.7),
},
}
Field Descriptions:
| Field | Type | Description |
|---|---|---|
name | string | Office display name (shown in menu and phone messages) |
coords | vector3 | NPC spawn position |
heading | number | NPC facing direction |
vehicleSpawn | vector4 | Company van spawn position and heading |
Add new locations using the coordinate builder commands. See Yard Building Guide for a full walkthrough.
Yards
Define yard work areas with grass patches and obstacles.
Config.Yards = {
{
name = 'Rockford Hills Sign',
coords = vector3(-842.61, -76.51, 37.82),
patches = {
{ coords = vector3(-822.55, -60.09, 36.90), model = 'prop_veg_grass_01_d', heading = 0.9 },
-- ... more patches
},
obstacles = {
{ coords = vector3(-832.06, -67.93, 36.87), model = 'prop_bbq_4', heading = 355.9 },
-- ... more obstacles
},
},
}
Field Descriptions:
| Field | Type | Description |
|---|---|---|
name | string | Yard display name (shown in HUD and blips) |
coords | vector3 | Yard center point (used for marker, blip, proximity) |
patches | table | Array of grass patch definitions |
obstacles | table | Array of obstacle definitions (optional) |
Patch/Obstacle Fields:
| Field | Type | Description |
|---|---|---|
coords | vector3 | World position |
model | string | Prop model name (must be in Config.GrassProps or Config.ObstacleProps) |
heading | number | Rotation in degrees |
Build new yards using the visual yard editor. See Yard Building Guide for a full walkthrough.