Troubleshooting Guide

Common issues and current fixes for oxide-landscapingjob.

Common issues and current fixes for oxide-landscapingjob.


Startup Issues

Resource Fails to Start

Check dependency order:

ensure ox_lib
ensure oxmysql
ensure o-link
ensure oxide-landscapingjob

If xsound is missing, audio is disabled but the job still runs.

Missing Dependency Errors

On startup, the resource checks that ox_lib, oxmysql, and o-link are running. If any of them is missing or started after the landscaping job, it prints a red error naming the missing resource and refuses to start. Fix your server.cfg order and restart.

No Startup Message

A healthy startup prints a resourceInitialized log line from oxide-landscapingjob in the server console (or, if you use oxide-logger with file/Discord logging turned on, in those places instead).

If no startup message appears anywhere, the resource never finished starting — look for red dependency errors from oxide-landscapingjob higher up in the console and fix those first.


Database Issues

Progression Is Not Saving

Verify that sql/install.sql has been imported and that job_progression exists.

The landscaping job expects rows keyed by:

  • char_id
  • job = 'landscaping'

Old Progression Table Still Exists

If your server still has landscapingjob_progression or other legacy job progression tables, run sql/migrate_unified_progression.sql once after backing up the database.

Reset Complaints Manually

To clear a player's complaints and lift their suspension, run this in your database tool, replacing CHAR_ID with the player's character ID:

UPDATE job_progression
SET complaints = 0, timeout_until = NULL
WHERE char_id = 'CHAR_ID' AND job = 'landscaping';

Clock-In Issues

Cannot Clock In

Check:

  1. the player is near the office NPC
  2. the office is not full
  3. the player is not timed out by the complaint system
  4. the spawn area is not occupied
  5. progression can load from job_progression

Spawn Area Busy

Clock-in checks for nearby players and vehicles around the office spawn point. Clear the area around the configured vehicleSpawn and try again.

NPC Exists But No Interaction

The manager NPC is interacted with through your server's targeting system (the "third eye"), connected via o-link. Verify:

  • o-link is running correctly and your targeting resource works on other objects
  • the character is fully loaded (try relogging)
  • the NPC spawned at a sensible position (not inside a wall or under the map)

Yard and Mowing Issues

Yard Will Not Start

Make sure:

  • you are at the assigned yard marker
  • you are within interaction distance
  • the shift is active

Grass Patches Are Not Being Cut

Check:

  • blades are lowered with G
  • you are using the mower, not the van
  • Config.Mowing.detectionRadius is not too small for your use case
  • the current yard is actually active

Obstacles Cannot Be Picked Up

By default, obstacle interactions use Config.Obstacles.useTarget = true.

Verify:

  • o-link targeting is working
  • you are on foot
  • you are close enough

If you change to prompt-style interaction, re-test pickupRadius.

Mower Breaks and the Yard Feels Stuck

Check Config.Mower.allowFinishYardOnBreakdown.

  • true: the player can repair and resume
  • false: the current yard is forfeited and the resource moves on

Shift Menu Does Not Open

Check:

  • the player has a loaded character
  • o-link is active
  • web/dist exists if you are using Config.menuStyle = 'nui'

If you want a simpler fallback, set:

Config.menuStyle = 'menu'

The menu's interface files live in the web/dist folder inside the resource, and they ship with the download. If that folder is missing or empty (sometimes caused by an incomplete upload to your server), re-upload the resource and make sure web/dist made it across, then restart.

The scripted menu camera only works in NUI mode and only when the selected office has a menuCamera block in shared/config/locations.lua.


Uniform Issues

Uniform Button Is Missing

Check:

Config.uniformsEnabled = true

in shared/config/outfits.lua.

Uniform Does Not Revert

The job takes a snapshot of the player's clothes before putting on the uniform, and restores it through your server's clothing system (via o-link) at clock-out. If clothes are not coming back, test whether outfit changes work in your clothing resource generally — if they don't, the problem is there, not in this job.


Crew Issues

Invite Fails

Current crew invites are server-ID based, but the server still validates:

  • inviter is clocked in
  • inviter is not already in a crew
  • target is valid
  • target is not already on shift
  • target is not already in a crew
  • target is within Config.Crew.inviteRange

The shipped range is 15.0.

Crew State Gets Out of Sync

Crew state is managed live in memory. If a member unloads, disconnects, or dies mid-shift, the resource tries to transfer or clean up state automatically. Restarting the resource clears crew session state.


Payment Issues

No Money Received

Pay is handed out when the player clocks out, and only if there is anything left after deductions. It goes to the account named in Config.Payment.payoutAccount (default 'bank').

Check:

  • the player completed at least one yard
  • deductions (damage, gas, tax) did not eat the whole payout — the shift summary shows the math
  • money works in your other resources (the payment goes through o-link)
  • Config.Payment.payoutAccount is an account name your framework actually has ('bank' and 'cash' are safe choices)

Van Destruction Fine Feels Wrong

Van destruction withdraws the fine from Config.Payment.fineAccount (default 'cash'). Change it in shared/config/job.lua if you want fines pulled from 'bank' or another account.

Shift Summary Did Not Arrive

Check:

  • Config.shiftSummary is set to 'text' if you expect a phone message, or 'nui' if you expect an on-screen pop-up
  • Config.usePhone = true if you expect a phone message
  • your server runs a phone resource that o-link supports (qb-phone, lb-phone, gksphone, okokPhone, qs-smartphone, yseries)

If your phone isn't on that list, the emails won't deliver — set Config.shiftSummary = 'nui' and Config.usePhone = false instead. The pay itself is never affected; this only changes how the summary is shown.


Builder Issues

Exported Yards Do Not Show Up In Game

This is expected — /mowerexport only writes the exported_locations.lua file. The game keeps using whatever is in shared/config/locations.lua until you copy the exported data into that file and restart the resource. See YARD-BUILDING.md for the full steps.

/mowerremoveyard Cannot Find a Yard

Run /mowerimport first so the current runtime data is loaded into the session, then use the exact yard name.


Debugging

Enable:

Config.Debug = true

This enables the resource's debug logger and helps track:

  • progression loads and saves
  • state transitions
  • builder operations
  • yard flow

Next Steps