Before You Begin#
Before installing Garbage Job, make sure your server meets the requirements. Three things are mandatory — the database, ox_lib and a framework. Everything else is optional, and is either detected on its own or switched on in the config.
Requirement | Status | Notes |
|---|---|---|
| Required | Database access. The tables install themselves. |
| Required | Callbacks, the invitation dialog and the scheduled leaderboard resets. |
Framework | Required |
|
Target | Optional |
|
Vehicle keys | Optional | Hands the driver the keys of the job truck. Nine key resources are supported and detected on their own. |
Inventory | Optional |
|
Fuel | Optional | Fills the truck's tank when it spawns. |
Quasar add-ons | Optional |
|
Some layers are picked by looking at what is already running; the others are a line in config/config.lua:
Layer | How it is chosen |
|---|---|
Framework | Detected: |
Vehicle keys | Detected from the running resources; |
Inventory | Detected: |
Target | Manual: |
Fuel | Manual: |
Party, housing, text UI, job payouts | Detected: used whenever that resource is started. |
Every optional integration steps aside quietly when its resource is missing. Integrations has the details of each one.
github.comReleases · overextended/oxmysqlMySQL resource for FXServer.github.comReleases · overextended/ox_libA FiveM resource and script library for Lua and JS.Downloading Garbage Job#
After purchasing Garbage Job, the resource is automatically linked to your CFX Portal account.
Sign in to the CFX Portal using the same account used during checkout, open Granted Assets, and download Garbage Job.
After extracting the download, you should have the resource folder and an optional SQL folder:
qs-garbagejob/
├── config/
│ ├── config.lua -- every setting, the routes included
│ └── translations.lua -- the language and all nine translations
├── client/
│ ├── clothing.lua -- the work outfit (editable)
│ ├── target.lua -- target options (editable)
│ ├── framework/ -- ESX and QBCore bridges (editable)
│ └── vehiclekeys/ -- one file per keys resource (editable)
├── server/
│ ├── framework/ -- ESX, QBCore and inventory bridges (editable)
│ └── missions.lua -- the qs-inventory quest (editable)
├── web/build/ -- the interface, already built
└── fxmanifest.lua
[sql]/
└── qs-garbagejob.sql -- optional, see The DatabaseInstalling the Resource#
Move the qs-garbagejob folder into your server's resources directory. It can live anywhere inside it, including a category folder:
resources/
└── [qs]/
└── qs-garbagejob/Once copied, open your server.cfg and make sure every dependency — and everything it should detect — starts before Garbage Job:
ensure oxmysql
ensure ox_lib
# Framework
ensure es_extended
# ensure qb-core
# ensure qbx_core
# Optional: target, inventory, keys, fuel
ensure ox_target
ensure ox_inventory
ensure qs-vehiclekeys
ensure LegacyFuel
# Optional: Quasar add-ons
# ensure qs-party
# ensure qs-housing
# ensure qs-textui
ensure qs-garbagejobThe loading order matters. The framework is detected once, when the resource starts, so a framework that starts after Garbage Job is not found and the job never appears. qs-housing is the one exception: the Housing Tour is rebuilt whenever either of the two starts, so it works in any order.
The Database#
There is no SQL file you have to import. Garbage Job creates its own tables on its first start, and on every start after that checks them and adds any column an older install is missing.
Table | Holds |
|---|---|
| Each player's level and experience, plus the all-time, season and daily experience and earnings the leaderboard ranks. |
| When the daily and season boards last reset, so the same day is never paid twice. |
| Leaderboard prizes won by a player who was offline at the reset, paid the next time they load in. |
| The last daily and season winners shown on the Statistics tab. |
On ESX the same first start also registers the job: a garbage_collector row in jobs and its grade 0 (Novice) in job_grades, each only when it does not exist yet. QBCore and Qbox keep their jobs in a Lua file instead, so that step is yours — see below.
The
[sql]/qs-garbagejob.sqlfile does exactly what the first start does, and is only there if you prefer to prepare the database by hand. Every statement in it is aCREATE TABLE IF NOT EXISTSor anINSERT IGNORE, so importing it changes nothing on a server that has already started the resource. Its two job statements are for ESX only.
Registering the Job#
By default only players with the garbage_collector job can start a route. Anyone can still open the panel to read the guide and the statistics: the job is checked when a route starts, checked again for every crew member, and checked a last time when the route is paid.
Nothing to do. The first start writes the job and its grade into your database and prints Registered the ESX job "garbage_collector" in the console. Hand it out from your job center, or with your admin command:
/setjob <id> garbage_collector 0Add the job to qb-core/shared/jobs.lua and restart the server:
['garbage_collector'] = {
label = 'Garbage Collector',
defaultDuty = true,
offDutyPay = false,
grades = {
['0'] = { name = 'Novice', payment = 10 },
},
},Add the job to qbx_core/shared/jobs.lua and restart the server. Qbox numbers its grades rather than quoting them:
['garbage_collector'] = {
label = 'Garbage Collector',
defaultDuty = true,
offDutyPay = false,
grades = {
[0] = { name = 'Novice', payment = 10 },
},
},To use a job you already have — QBCore ships one called garbage, for example — list it in Config.GarbageCollectorJob. Several jobs can be allowed at once:
Config.RequireJob = true
Config.GarbageCollectorJob = {
['garbage_collector'] = true,
['garbage'] = true,
}The Loot Items#
Every bag thrown into the truck rolls Config.DropItems. The defaults hand out bread, gold and diamond, so those items have to exist in your inventory — or be swapped for items that do:
Config.DropItems = {
{ name = "bread", chance = 5, minAmount = 1, maxAmount = 3 }, -- 5% per bag, 1 to 3 units
{ name = "gold", chance = 3, minAmount = 1, maxAmount = 2 },
{ name = "diamond", chance = 1, minAmount = 1, maxAmount = 1 },
}An item your inventory has never heard of is not given, the player is told their find would not fit, and the server console names the entry that is wrong — once per restart, not once per bag:
[qs-garbagejob] Config.DropItems lists 'diamond', which is not an item in your inventory. Nothing was given.Set Config.DropItems = {} to switch loot off entirely.
Configuring the Resource#
Everything you configure is in plain, unencrypted files. config/config.lua is split into numbered sections, and almost everything you will want to change sits in sections 1, 3 and 6:
File / section | Contents |
|---|---|
1. General | Who can work, target or keypress, prompts, the interact key, invite range, player names, the foreman's card, notifications, the currency symbol, the outfit switch, the truck model and fuel. |
2. World | The blips, the NPC, the truck's parking bays and the depot where the truck is handed back. |
3. Route | Bags per container, the loot table, the cleaning minigame and its water particles. |
4. Levels | The experience curve and the crew size. |
5. Missions | The routes players pick from, and the optional Housing Tour. |
6. Leaderboard | The refresh rate and the daily and season prizes. |
7. Marker | The floating marker over the NPC. |
8. Debug, webhooks, payout | Console tracing, the Discord webhooks, and how a crew is paid ( |
| The language and every line of text, in nine languages. |
| The work outfit, one for male and one for female characters. |
The values worth reviewing first:
Config.RequireJob = true -- false: anyone can work a route
Config.Target = false -- true: use a target resource instead of keys
Config.TargetScript = "ox" -- "ox" or "qb"
Config.InteractKey = 38 -- E
Config.VehicleModel = "trash2" -- the job truck
Config.Fuel = false -- true: fill the tank on spawn
Config.Clothing = true -- put the crew in the work outfit
Config.MaxPartyMembers = 4 -- crew size, leader included
Config.MissionPayout = 'members' -- or 'split'
Config.Debug = false
-- config/translations.lua
Config.Language = "en" -- en · es · fr · de · pt · it · ru · tr · cnConfig changes apply after a restart of the resource. Restart it while nobody is out on a route: a route that is running when the resource stops is lost, and its crew is not paid for it.
Updating from an Older Version#
Stop the server, replace the qs-garbagejob folder with the new one, and copy your own values into the new config/config.lua and config/translations.lua rather than dropping the old files back in — new versions add settings and translation keys, and an old file leaves them missing.
Keep your database. On start the resource reads the columns of qs_garbagejob and adds whichever leaderboard columns a 1.x install never had, one console line per column. Levels and experience carry over untouched.
[qs-garbagejob] Added missing column qs_garbagejob.total_experience
[qs-garbagejob] Added missing column qs_garbagejob.season_experienceVerifying the Installation#
Restart your server and read the console. Garbage Job is quiet when everything is right; the lines you may see on a first start are these:
[qs-garbagejob] Registered the ESX job "garbage_collector" # ESX, first start only
[qs-garbagejob] housing route built with 10 stops. # only with qs-housing runningA red line instead — the database schema could not be verified, or the script was renamed — is covered in Common Errors. Then give yourself the job, join the server and work through the first loop:
Visit the Garbage Center
The Garbage Center blip marks the depot. The foreman stands in the yard under a floating marker: press
Ebeside him, or use your target, and the job panel opens.Start the Beginner Route
Pick Beginner Route and press Start Mission. You change into the work clothes, a truck is parked in the yard with your keys, and the first stop appears on your GPS.
Work a stop
Walk up to the container and press
Eto pull out a bag, carry it to the back of the truck and pressEto throw it in. Repeat until the counter is full, and the GPS moves on to the next stop.Hand the truck back
After the last stop the GPS points back to the depot. Press
Eat the drop-off to return the truck and be paid. Usage covers everything in between.
Nothing else needs touching in the database. Routes, pay, levels, prizes and loot all live in
config/config.lua.



