Configuration Guide

Complete reference for all configuration options in oxide-landscapingjob.

Config File: config.lua

Core Settings

Basic resource configuration.

SettingTypeDefaultDescription
Config.DebugbooleanfalseEnable debug console output
Config.usePhonebooleantrueSend SMS/email via phone instead of toast notifications
Config.MaxSlotsPerLocationnumber3Maximum concurrent workers per office location
Config.Debug = false
Config.usePhone = true
Config.MaxSlotsPerLocation = 3

Crew Settings

Configure the 2-player co-op system.

SettingTypeDefaultDescription
Config.Crew.maxSizenumber2Maximum crew members
Config.Crew.inviteRangenumber10.0Meters within which a partner can be invited
Config.Crew.inviteTimeoutnumber30Seconds before invite expires
Config.Crew.coopBonusPercentnumber0.1515% 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.

SettingTypeDefaultDescription
Config.Payment.basePayPerYardnumber75Base pay per completed yard ($)
Config.Payment.speedBonusAmountnumber30Bonus for finishing quickly ($)
Config.Payment.speedBonusTimePercentnumber0.60Must finish within 60% of allowed time
Config.Payment.vehicleDestroyFinenumber100Fine for destroying the company van ($)
Config.Payment.streakBonusPerDaynumber10Bonus per streak day ($)
Config.Payment.maxStreakDaysnumber7Maximum streak bonus days
Config.Payment.gasFeePercentnumber0.055% of gross pay deducted as gas fee
Config.Payment.taxPercentnumber0.1010% 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.

LevelTitleYards RequiredMax YardsPay MultiplierMower SpeedTip ChanceTip Range
1Trainee031.0x1.0x10%$5-$15
2Groundskeeper1241.1x1.1x15%$5-$20
3Landscaper3551.2x1.2x25%$10-$30
4Senior Landscaper7051.35x1.35x30%$10-$40
5Foreman13061.5x1.5x40%$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:

FieldTypeDescription
titlestringDisplay name for the level
requiredYardsnumberTotal yards needed to reach this level
maxYardsnumberMaximum yards assigned per shift
payMultipliernumberMultiplier applied to base pay
mowerSpeedMultipliernumberMultiplier applied to mower speed
tipChancenumberProbability of receiving a tip (0.0 - 1.0)
tipRangetableMin and max tip amount in dollars

Vehicle Settings

Configure the company van (Rumpo).

SettingTypeDefaultDescription
Config.Rumpo.modelstring'bison3'Vehicle model name
Config.Rumpo.primaryColortable{ 255, 255, 255 }Primary color RGB
Config.Rumpo.secondaryColortable{ 255, 255, 255 }Secondary color RGB
Config.Rumpo.platestring'LAWN'License plate text
Config.Rumpo.healthCheckIntervalnumber1000Health check interval in ms
Config.Rumpo.destroyedThresholdnumber150Engine health below this = destroyed
Config.Rumpo.damageChargeRatenumber0.50Dollars per body health point lost
Config.Rumpo.damageChargeThresholdnumber950Only 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.

SettingTypeDefaultDescription
Config.Mower.modelstring'mower'Vehicle model name
Config.Mower.spawnOffsetBehindnumber1.5Meters behind van to spawn mower
Config.Mower.healthCheckIntervalnumber1000Health check interval in ms
Config.Mower.destroyedThresholdnumber150Engine health below this = destroyed
Config.Mower.repairHealthnumber800Engine health restored by repair
Config.Mower.showOpenHoodbooleanfalseShow "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.

SettingTypeDefaultDescription
keystring'G'Keybind to toggle blades
baseMowingSpeednumber3.0Max speed with blades down (m/s)
basePowerMultipliernumber0.3Engine power with blades down
normalMaxSpeednumber15.0Max speed with blades up (m/s)
normalPowerMultipliernumber1.0Engine 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):

SettingTypeDefaultDescription
dictstring'core'Particle dictionary
burstNamestring'ent_dst_veg_shrub'Burst effect per patch cut
loopedNamestring'ent_amb_wind_grass_dir'Looped effect while moving
scalenumber1.0Particle scale
offsetvector3(0.0, -0.8, -0.3)Offset below/behind mower

Sound Settings (nested under Config.Mower.blades.sound):

SettingTypeDefaultDescription
togglestring'lower_mechanical_whirr.ogg'Sound on blade toggle
mowerLoopstring'lawn_mower_engine_loop.ogg'Looped engine sound
engineFailstring'engine_fail.ogg'Sound on mower destruction
toggleVolumenumber0.2Toggle sound volume
loopVolumenumber0.3Loop sound volume
engineFailVolumenumber0.4Engine fail volume
distancenumber30Max 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.

SettingTypeDefaultDescription
Config.Obstacles.detectionRadiusnumber2.0Mower distance to trigger damage
Config.Obstacles.damagePerHitnumber350Engine damage per obstacle collision
Config.Obstacles.pickupRadiusnumber4.0On-foot distance for pickup prompt
Config.Obstacles.useTargetbooleantrueUse 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.

SettingTypeDefaultDescription
Config.Mowing.detectionRadiusnumber2.0Distance from mower to cut a patch
Config.Mowing.fadeStepsnumber17Number of alpha steps in fade-out
Config.Mowing.fadeStepIntervalnumber60Milliseconds between each fade step
Config.Mowing.mowerCheckIntervalnumber100Milliseconds 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.

SettingTypeDefaultDescription
Config.YardTiers.smallMaxnumber501-50 patches = Small
Config.YardTiers.mediumMaxnumber14951-149 patches = Medium
Config.YardTiers = {
    smallMax = 50,
    mediumMax = 149,
    -- 150+ patches = Large
}

Tier Payment Multipliers (defined in shared/init.lua):

TierMultiplier
Small1.0x
Medium1.5x
Large2.0x

Timer Settings

Configure the yard time limit system.

SettingTypeDefaultDescription
Config.Timer.baseTimenumber120Base seconds for any yard
Config.Timer.timePerPatchnumber5Additional seconds per grass patch
Config.Timer.expiredPenaltynumber0.85Pay 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.

SettingTypeDefaultDescription
Config.Complaints.maxComplaintsnumber3Complaints before timeout
Config.Complaints.timeoutMinutesnumber30Lockout duration in minutes
Config.Complaints.vehicleDestroyPenaltynumber1Complaints per vehicle destruction
Config.Complaints.deathPenaltynumber1Complaints per death on shift
Config.Complaints.decayPerYardnumber1Complaints 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.

ActionDurationLabelAnimation
Unload Mower4000ms"Unloading mower..."mini@repair / fixing_a_ped
Load Mower4000ms"Loading mower..."mini@repair / fixing_a_ped
Repair Mower5000ms"Repairing mower..."mini@repair / fixing_a_player
Pickup Obstacle5000ms"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.

SettingTypeDefaultDescription
Config.NpcModelstring's_m_y_construct_01'Ped model for the NPC
Config.NpcScenariostring'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.

SettingTypeDefaultDescription
Config.Blip.spritenumber446Blip icon (lawn mower)
Config.Blip.colornumber2Blip color (green)
Config.Blip.scalenumber0.6Blip size
Config.Blip.labelstring'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.

SettingTypeDefaultDescription
Config.YardBlip.spritenumber496Blip icon (waypoint marker)
Config.YardBlip.colornumber2Blip color (green)
Config.YardBlip.scalenumber0.7Blip size
Config.YardBlip = {
    sprite = 496,
    color = 2,
    scale = 0.7,
}

Yard Marker Settings

Configure the ground marker displayed at yard entry points.

SettingTypeDefaultDescription
Config.YardMarker.typenumber25Marker type (horizontal circle)
Config.YardMarker.scalevector3(2.0, 2.0, 0.5)Marker dimensions
Config.YardMarker.colortable{ r=50, g=200, b=50, a=120 }Green with transparency
Config.YardMarker.approachDistancenumber30.0Start drawing within this range
Config.YardMarker.interactDistancenumber5.0Press 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.

SettingTypeDefaultDescription
Config.Waypoints.enabledbooleantrueEnable floating waypoints
Config.Waypoints.heightOffsetnumber5.0Z offset above yard center
Config.Waypoints.updateIntervalnumber0Update frequency (0 = every frame)
Config.Waypoints.scaleMinnumber0.5Scale at far distance
Config.Waypoints.scaleMaxnumber1.0Scale at near distance
Config.Waypoints.scaleNearDistnumber30.0Full scale within this range
Config.Waypoints.scaleFarDistnumber300.0Minimum scale beyond this range
Config.Waypoints.colortable{ 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.

SettingTypeDefaultDescription
Config.YardEditor.ghostAlphanumber150Ghost prop transparency (0-255)
Config.YardEditor.mouseSensitivitynumber3.0Camera look sensitivity
Config.YardEditor.headingSensitivitynumber2.0Precision mode rotation sensitivity
Config.YardEditor.zStepnumber0.01Z offset per scroll tick
Config.YardEditor.raycastDistancenumber100.0Max raycast distance from camera
Config.YardEditor.defaultSpeednumber0.5Default camera movement speed
Config.YardEditor.maxSpeednumber5.0Maximum camera speed
Config.YardEditor.minSpeednumber0.05Minimum camera speed
Config.YardEditor.speedStepnumber0.25Speed 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:

FieldTypeDescription
namestringOffice display name (shown in menu and phone messages)
coordsvector3NPC spawn position
headingnumberNPC facing direction
vehicleSpawnvector4Company 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:

FieldTypeDescription
namestringYard display name (shown in HUD and blips)
coordsvector3Yard center point (used for marker, blip, proximity)
patchestableArray of grass patch definitions
obstaclestableArray of obstacle definitions (optional)

Patch/Obstacle Fields:

FieldTypeDescription
coordsvector3World position
modelstringProp model name (must be in Config.GrassProps or Config.ObstacleProps)
headingnumberRotation in degrees

Build new yards using the visual yard editor. See Yard Building Guide for a full walkthrough.