Oxide Landscaping

Landscaping job system for FiveM servers.

Overview

oxide-landscapingjob is a landscaping gig job. Players clock in at a landscaping office, receive a company vehicle and a set of assigned yards, then complete those yards by unloading a mower, cutting grass patches, clearing obstacles, and returning to the office for payout.

The current resource is built around o-link for framework-facing integrations, uses oxmysql for persistent progression data, and optionally uses xsound for 3D mower audio.

Technical

DependencyRequiredPurpose
o-linkYesShared integration layer for character, money, clothing, phone, target, menu, fuel, vehicle keys, notifications, and callbacks
ox_libYesLocale loading, input dialogs, and shared utility support
oxmysqlYesPersistent progression storage
xsoundNo3D mower audio; the job still works without it

Database: Unified job_progression table with one row per char_id and job, where this resource stores progression under the landscaping job key.

Frontend: Vue 3 + Vite + Tailwind CSS for the default shift menu and in-shift HUD overlay.

Features

  • 5-level progression with persistent yard count, streaks, complaints, and timeout state
  • Company van plus ride-on mower workflow with loading, unloading, repair, and breakdown handling
  • Yard timers, size tiers, speed bonuses, streak bonuses, tips, taxes, gas fees, and vehicle damage deductions
  • Two-player crews with shared yards, shared vehicle flow, and an ID-based invite system
  • Configurable default NUI shift menu or o-link context menu fallback
  • Optional work uniforms with automatic reversion on clock-out and character unload
  • In-game yard builder with export, import, listing, and removal commands

Current Runtime Notes

  • Shift payouts are deposited to the account set in Config.Payment.payoutAccount (default bank) through olink.money.Add(...).
  • Company vehicle destruction fines are taken from the account set in Config.Payment.fineAccount (default cash) through olink.money.Remove(...).
  • When Config.usePhone = true, the resource sends shift emails through olink.phone.SendEmail(...).
  • The builder exports merged yard and location data to exported_locations.lua for reuse or manual merging.

Documentation