Troubleshooting Guide

Solutions for common issues with oxide-landscapingjob.

Shift Issues

Can't Clock In

Symptoms:

  • "Talk to Manager" option not appearing
  • Clock in fails with an error message

Solutions:

  1. Check location slots

    • Each office has a maximum of Config.MaxSlotsPerLocation workers (default: 3)
    • If all slots are full, try a different office
  2. Check for suspension

    • If you have 3+ complaints, you are temporarily suspended
    • Wait for the timeout to expire (default: 30 minutes)
    • Check with debug mode: look for "Temporarily suspended" messages
  3. Verify dependencies are running

    # server.cfg - Ensure correct order
    ensure ox_lib
    ensure oxmysql
    ensure community_bridge
    ensure xsound
    ensure oxide-landscapingjob
  4. Check database table exists

    • Import sql/install.sql if not already done
    • Verify the landscapingjob_progression table exists
  5. Already clocked in

    • You cannot clock in while already on a shift
    • Clock out first or restart the resource

Suspended from Work

Symptoms:

  • "Temporarily suspended" message when trying to clock in
  • Cannot start a shift

Solutions:

  1. Wait for timeout

    • Default suspension is 30 minutes (Config.Complaints.timeoutMinutes)
    • The remaining time is shown in the error message
  2. Check complaint count

    • Open the manager menu to see your current complaints
    • Complaints are earned by destroying vehicles or dying on shift
  3. Reduce complaints

    • Complete yards successfully to decay complaints (Config.Complaints.decayPerYard)
  4. Admin reset (database)

    UPDATE landscapingjob_progression SET complaints = 0, timeout_until = NULL WHERE char_id = 'CHAR_ID';

NPC Not Appearing

Symptoms:

  • Map blip exists but no NPC at the location
  • Target interaction zone not working

Solutions:

  1. Check resource is started

    • Verify oxide-landscapingjob is running in your server console
  2. Check NPC model

    • Default model s_m_y_construct_01 should be available in base GTA
    • Try changing Config.NpcModel if using a custom model
  3. Verify location coordinates

    • Check Config.Locations for valid coordinates
    • NPCs may spawn inside buildings or underground if coordinates are wrong
  4. Restart the resource

    restart oxide-landscapingjob

Vehicle Issues

Van Not Spawning

Symptoms:

  • Clock in succeeds but no company van appears
  • Yards assigned but no vehicle

Solutions:

  1. Check vehicle spawn point

    • The vehicleSpawn coordinate may be blocked by another vehicle or object
    • Verify the coordinate is on flat, accessible ground
  2. Check vehicle model

    • Default model bison3 must be available
    • If using a custom model, ensure it is streamed/loaded
  3. Check for model conflicts

    • Other resources may be blocking vehicle spawns
    • Try with minimal resources running
  4. Verify spawn with debug

    Config.Debug = true
    -- Look for: 'Assigned X yards to player Y'

Mower Stuck on Roof

Symptoms:

  • Mower cosmetic prop visible on van but won't unload
  • Unload animation plays but mower doesn't spawn

Solutions:

  1. Check mower spawn area

    • Mower spawns behind the van (Config.Mower.spawnOffsetBehind)
    • Ensure nothing is blocking the rear of the van
  2. Check mower model

    • Default model mower must be available
    • Verify no model conflicts
  3. Move the van

    • Park on flat ground with space behind
    • Try a different location

Sounds Not Playing

Symptoms:

  • No mower engine sound
  • No blade toggle sound
  • Mowing is silent

Solutions:

  1. Verify xsound is running

    ensure xsound
  2. Check sound files exist

    • Verify sounds/ directory contains the .ogg files:
      • lower_mechanical_whirr.ogg
      • lawn_mower_engine_loop.ogg
      • engine_fail.ogg
  3. Check xsound version

    • Ensure you have a compatible version of xsound
    • Update to the latest version
  4. Check volume settings

    • Sound volumes are configurable in Config.Mower.blades.sound
    • Default volumes: toggle 0.2, loop 0.3, fail 0.4

Mowing Issues

Patches Not Detecting

Symptoms:

  • Driving mower over grass but patches don't disappear
  • No mowing progress

Solutions:

  1. Check blades are lowered

    • Press G to lower blades (default key)
    • Look for the blade hint in the HUD
  2. Check detection radius

    • Default: Config.Mowing.detectionRadius = 2.0 meters
    • Drive slowly and directly over patches
    • Increase the radius if patches are too hard to hit
  3. Check mower speed

    • Blades-down speed is capped at 3.0 m/s by default
    • If moving too fast, patches may be skipped between checks
  4. Verify yard is started

    • You must enter the yard marker and press [E] to start
    • Patches only register after the yard is activated
  5. Check mower check interval

    • Default: Config.Mowing.mowerCheckInterval = 100 ms
    • Lower values catch patches more reliably but use more CPU

Obstacles Not Interactable

Symptoms:

  • Obstacles visible but no target/prompt to pick up
  • "Pick up" option missing

Solutions:

  1. Check interaction mode

    • If Config.Obstacles.useTarget = true: requires third-eye target system
    • If Config.Obstacles.useTarget = false: requires proximity within pickupRadius
  2. Verify target system is working

    • Test other target interactions in your server
    • Restart your target resource
  3. Check pickup radius

    • Default: Config.Obstacles.pickupRadius = 4.0 meters
    • Must be on foot (not in mower)
  4. Highlight obstacles

    • Hold H to outline remaining obstacles
    • Verify obstacles are actually present

Crew Issues

Invite Not Working

Symptoms:

  • "No eligible partner nearby" when inviting
  • Invite button does nothing

Solutions:

  1. Check partner requirements

    • Partner must be within 10m (Config.Crew.inviteRange)
    • Partner must NOT be clocked in at any office
    • Partner must NOT be in another crew
  2. Check you are clocked in

    • You must be on an active shift to invite
  3. Check you are not in a crew already

    • Only one crew at a time
    • Clock out and back in to reset
  4. Rate limit

    • Crew invites have a 5-second cooldown
    • Wait and try again

Crew Sync Problems

Symptoms:

  • Partner can't see patches being mowed
  • Yard progress not syncing between crew members

Solutions:

  1. Check server console

    • Enable debug mode and look for crew-related messages
    • Verify both players show as crew members
  2. Both must be near the yard

    • Yard rendering is proximity-based (250m broadcast range)
    • Both players should be at the yard
  3. Restart the resource

    • Crew state is in-memory and resets on resource restart
    • Both players will need to clock in again

Payment Issues

Incorrect Payment

Symptoms:

  • Pay seems too low or too high
  • Deductions don't match expectations

Solutions:

  1. Review the payment formula

    Subtotal = (basePay + speedBonus) × tierMultiplier × levelMultiplier × timerMultiplier
    Total = Subtotal + streakBonus + tip
    Net = Gross - vehicleDamage - gasFee - taxes
  2. Check level multiplier

    • Your level affects pay via Config.Levels[level].payMultiplier
    • Level 1 has 1.0x, Level 5 has 1.5x
  3. Check timer penalty

    • Exceeding the time limit applies a 15% penalty (Config.Timer.expiredPenalty = 0.85)
  4. Check vehicle damage

    • Van body damage below 950 health incurs charges at $0.50/hp
    • Use /mowerexport and check console for breakdown details
  5. Enable phone for full breakdown

    • Set Config.usePhone = true to receive a detailed shift summary via SMS

No Payout

Symptoms:

  • Clock out but receive $0
  • Shift summary shows no earnings

Solutions:

  1. Complete at least one yard

    • Payment is only earned for completed yards
    • Cancelled or incomplete yards don't count
  2. Check deductions

    • If vehicle damage + gas + taxes exceed gross pay, net pay is $0
    • The minimum net pay is $0 (never goes negative)
  3. Check debug output

    Config.Debug = true
    -- Look for: 'Player X completed yard Y, paid $Z'

HUD Issues

Overlay Not Showing

Symptoms:

  • No timer or progress bar during mowing
  • Blade hint not appearing

Solutions:

  1. Check web build

    • Verify web/dist/ exists with compiled assets
    • If missing, run:
      cd oxide-landscapingjob/web && npm install && npm run build
  2. Check NUI

    • Press F8 and check for JavaScript errors
    • Verify fxmanifest.lua includes ui_page 'web/dist/index.html'
  3. Verify yard is started

    • HUD only appears after entering a yard marker and pressing [E]

Timer Stuck

Symptoms:

  • Timer shows but doesn't count down
  • Timer frozen at a value

Solutions:

  1. Check for client errors

    • Press F8 and look for NUI errors
    • The timer is driven by the Vue component receiving updateTimer events
  2. Restart the resource

    • Timer state is client-side and resets on restart

Performance Issues

Too Many Objects

Symptoms:

  • FPS drops when near yards
  • Objects flickering or not loading

Solutions:

  1. Reduce patch count per yard

    • Large yards (150+ patches) create many local objects
    • Keep yards under 50 patches for best performance
  2. Check render distance

    • Yard objects only spawn when players are within 250m
    • Multiple active yards in the same area compound the load
  3. Verify objects are non-networked

    • The resource uses local (non-networked) objects to avoid entity limits
    • If you see entity limit warnings, another resource may be conflicting
  4. Reduce concurrent workers

    Config.MaxSlotsPerLocation = 2  -- Fewer workers = fewer active yards

High Server CPU

Solutions:

  1. Check mower detection interval

    Config.Mowing.mowerCheckInterval = 200  -- 200ms instead of 100ms
  2. Reduce health check frequency

    Config.Rumpo.healthCheckInterval = 2000  -- 2 sec instead of 1
    Config.Mower.healthCheckInterval = 2000
  3. Disable debug mode

    Config.Debug = false
  4. Check rate limits

    • The resource has built-in rate limiting for all callbacks
    • If you see excessive callback spam in the console, check for exploits

Yard Editor Issues

Editor Not Opening

Symptoms:

  • /moweryard runs but no freecam appears
  • Still controlling player ped

Solutions:

  1. Check permissions

    • Requires admin.landscapingjob ACE permission
    • Add to your server.cfg:
      add_ace group.admin admin.landscapingjob allow
  2. Check for active yard

    • Only one yard can be in progress at a time
    • Use /mowercancel to clear any stuck state
  3. Check client errors

    • Press F8 for any error messages
    • The editor requires camera and entity permissions

Ghost Prop Not Visible

Symptoms:

  • Editor opens but no preview prop at crosshair
  • Can't see what you're placing

Solutions:

  1. Check model loading

    • The ghost prop model may fail to load
    • Try cycling models with E/Q
  2. Check raycast

    • The ghost follows a raycast from the camera to the ground
    • Point at the ground, not the sky
    • Maximum raycast distance: 100m (Config.YardEditor.raycastDistance)
  3. Check alpha

    • Ghost prop alpha: Config.YardEditor.ghostAlpha = 150
    • Increase if too transparent to see

Debug Mode

Enable comprehensive logging:

-- config.lua
Config.Debug = true

Console output includes:

  • Resource initialization
  • Yard assignment and completion
  • Payment calculations
  • Crew formation and dissolution
  • Vehicle destruction events
  • Death handling
  • Visual state changes
  • Editor operations

Log prefix: [oxide-landscapingjob]

Disable in production to reduce console spam.

Getting Help

If issues persist:

  1. Enable debug mode and collect console output
  2. Check server console for errors during the issue
  3. Check client console (F8) for JavaScript or NUI errors
  4. Verify community_bridge is running and up to date
  5. Test with minimal resources to isolate conflicts