The Job Panel#
Everything starts at the foreman — Sal Moretti by default — standing in the Garbage Center yard under a floating marker. Press E beside him, or select him with your target, and the camera cuts to him while the panel opens on the right half of the screen. He gestures as if mid-sentence, and your own character is hidden from the shot while you talk.
Part | What it is for |
|---|---|
Foreman's card | His name and greeting, from |
Missions | Every route with its picture, the level it needs, the recommended crew, the pay, the experience and the number of stops. |
Garbage Group | Your crew: a portrait of each member, a field to invite a player by server ID, and a remove button for the leader. |
Level | Your level, your experience towards the next one, and the level bonus. |
Statistics | The all-time, season and daily leaderboards, the prizes, the last winners and the time left before each reset. |
Guide | A step-by-step walkthrough of the job for new collectors, with tips. |
Footer | Start Mission — or, while a route is running, Abandon mission with a confirmation. |
Anyone may open the panel to read the guide and the statistics; the job is checked when a route is started. The panel also opens in full during a route, so a crew can check the rankings without giving anything up.
The guide is written entirely in
config/translations.lua:GUIDE_INTRO,GUIDE_STEP_1toGUIDE_STEP_6andGUIDE_TIP_1toGUIDE_TIP_4. Reword them for your server, or delete a key to drop that line.
What a Fresh Server Opens With#
Seven routes ship in Config.Tasks, all leaving from the Garbage Center, plus an eighth built from your properties when qs-housing is running:
Route | Level | Stops | Pay | Experience |
|---|---|---|---|---|
Beginner Route | 1 | 20 | $400 | 300 |
Neighborhood Pickup | 2 | 9 | $600 | 500 |
Urban Collection | 3 | 9 | $600 | 500 |
Citywide Cleanup | 4 | 10 | $800 | 700 |
Industrial Route | 5 | 11 | $1,000 | 800 |
Advanced Cleanup | 6 | 12 | $1,200 | 1,100 |
Metropolitan Circuit | 6 | 13 | $1,350 | 1,200 |
Housing Tour | 1 | 10, at random | $750 | 600 |
Most routes ship with extra stops commented out in the config — uncomment them to make a route longer. Pay and experience are per collector with the default payout mode; see How a crew is paid below.
Working a Route#
Start the mission
Pick a route and press Start Mission. The server checks the job and the level of every crew member, and that nobody is already on a route. Then a truck is parked in the first free bay of the yard, its keys are handed over, the crew changes into the work outfit and the route tracker opens.
Drive to the stop
The current stop is a blip with a GPS route. The tracker counts the stops done out of the route's total.
Pull the bags out
Each container holds a random number of bags — 1 to 3 by default, set by
Config.GarbageBagsRequired. PressEat the container to pull one out; the prompt shows how many you have taken and how many there are.Throw them into the truck
Carry the bag to the back of the truck and press
E. Every bag thrown in is one loot roll. When the container's last bag is in, the stop is done and the GPS moves on — unless the container was left filthy and needs cleaning first.Hand the truck back
After the last stop the GPS points back to the depot,
Config.DeliverTruckCoords. PressEthere: the truck is taken back, the outfit comes off and the route is paid.
Key | Does |
|---|---|
| Talk to the foreman, pull a bag, throw it into the truck, start cleaning a container, hand the truck back. Change it with |
| Wipe the rag in the cleaning minigame. |
| Give up the cleaning minigame. The container stays dirty. |
With Config.Target = true the same actions become target options — on the foreman, on the container, on the truck and on a dirty container — instead of keypresses. The depot hand-in always stays a keypress.
The reward is paid with the truck, not stop by stop. Abandoning from the panel, losing the job mid-route or disconnecting ends the route with nothing paid, and the truck is removed. A route pays only when the server has seen every one of its stops done and the truck back at the depot.
The Cleaning Minigame#
After a container is emptied there is a Config.CleanDumpsterChance percent chance — 20 by default — that it was left filthy. The route waits for it: walk back to the container and press E, and the camera closes in while the character sprays it down. Hold left click and wipe the rag over the bin until enough of the grime is gone. Caked-on patches are darker and need several passes.
Config.CleanDumpsterChance = 20 -- % chance a container needs cleaning
Config.CleanDumpster = {
duration = 45000, -- time limit in ms; running out means a retry
threshold = 0.90, -- share of the grime that must come off (0-1)
patches = 5, -- caked-on patches that need several passes
bonusExperience = 15, -- XP for a cleaned container, 0 disables it
}Running out of time, or pressing ESC, leaves the container dirty and the route where it was — come back and clean it again. A cleaned container pays its bonus once, to the collector who cleaned it. Set Config.CleanDumpsterChance = 0 to switch the minigame off.
Config.Particles controls the bursts of water that puff off the container while it is scrubbed — the effect, how many, how often, their size and where they land. They are cosmetic only: Enabled = false removes them and changes nothing else.
Loot#
Every bag thrown into the truck is one roll of Config.DropItems. Each entry is rolled on its own, so one lucky bag can turn up more than one item.
Field | Meaning |
|---|---|
| The item, exactly as your inventory names it. |
| Percent chance per bag, from 0 to 100. |
| How many are given when it comes up, picked at random in that range. |
The roll is made on the server — the player's client only reports that a bag was thrown — and it only counts from the stop being worked, a few seconds apart, and never more times than the route has bags. A player with a full inventory is told they found something they had no room for, and the item is lost.
Crews#
A route can be worked alone or by a crew of up to four, leader included. Config.MaxPartyMembers sets the number of slots the panel draws: lower it for smaller crews — four is the most the server accepts.
Step | How it works |
|---|---|
Inviting | In the Garbage Group card, type the other player's server ID and press Invite. They must be within |
Leading | The player who invites is the leader. Only the leader starts a route — for the whole crew — and only the leader hands the truck back. Every member must hold the job and the route's level. |
Working | The whole crew rides in the leader's truck and gets the route, the tracker and the outfit. Each member works every stop for themselves: their own bags, their own progress and their own pay. |
Handing in | When the leader returns the truck, the route ends for everyone at once and each member who finished all of their stops is paid, wherever they are standing. |
Removing | The leader can remove a member from the panel, and that member's route ends. If the leader abandons, the route ends for the whole crew. Closing the panel before a route starts releases a crew the leader assembled. |
How a crew is paid#
Config.MissionPayout | What each member receives |
|---|---|
| The route's full money and experience, each. A crew of four on a $1,000 route costs the server $4,000. |
| The money and the experience divided between the members still in the crew when the route is paid. Shares round down and never fall below 1. |
What a route asks of each collector does not change with the size of the crew, so 'members' is the generous setting. It is the default so that updating does not move an existing server's economy.
With qs-party running, a crew can also come from your party system — see Integrations.
Levels and Experience#
Experience comes from finishing routes and from cleaning containers. The amount needed for each level grows by GrowthFactor every level, so levelling never caps:
Config.LevelExperience = {
BaseExperience = 1000, -- experience to clear level 1
GrowthFactor = 1.1, -- each level needs 10% more than the last
TipPerLevel = 0.01, -- level bonus shown on the panel (1% per level)
}
-- experience to clear level N = BaseExperience * GrowthFactor ^ (N - 1)Level | Experience to clear it | Total experience to reach it |
|---|---|---|
1 | 1,000 | 0 |
2 | 1,100 | 1,000 |
3 | 1,210 | 2,100 |
4 | 1,331 | 3,310 |
5 | 1,464 | 4,641 |
6 | 1,610 | 6,105 |
Every route has a levelRequired. The panel shows it on the card, and the server checks every crew member against it when the route starts. A level-up is announced the moment it happens, and the panel's experience bar follows it live.
The Leaderboard#
The Statistics button opens three rankings, each ordered by experience with the earnings beside it, a search box, and your own row highlighted:
Tab | Ranks by | Resets and pays |
|---|---|---|
All-Time Garbage | Lifetime experience | Never |
Top Garbage Season | Experience this month | 00:00 server time on the 1st of each month |
Top Garbage Daily | Experience today | 00:00 server time, every day |
At each reset the top three are paid in cash from Config.LeaderBoardRewards and shown as the last winners, with a countdown to the next reset. A winner who is offline is paid the moment they next load in, and a reset the server slept through is caught up on its next start.
Config.EnableLeaderboard = true -- false hides the Statistics button
Config.UpdateLeaderboard = 10 -- minutes between refreshes of the rankings (1-59)
Config.LeaderBoardRewards = {
Daily = { [1] = 500, [2] = 350, [3] = 200 },
Season = { [1] = 5000, [2] = 3500, [3] = 2000 },
}Only players with experience in that period appear in a tab, under their character's name. The rankings refresh on a timer, so a route just finished can take up to Config.UpdateLeaderboard minutes to show.
The Housing Tour#
With qs-housing running, an extra route appears in the panel: the Housing Tour, whose stops are picked at random from the properties qs-housing knows about. It is built when either resource starts, and the same tour stands for everybody until the next restart.
Config.HousingTask = {
enabled = true, -- needs qs-housing running
taskOrder = 8, -- unique, higher than every route in Config.Tasks
name = "Housing Tour",
img = "garbage_2.png",
description = "Collect garbage from residential housing areas across the city.",
recommendedPlayers = { 1, 4 },
levelRequired = 1,
experience = 600,
money = 750,
spotsCount = 10, -- how many random properties to visit
}Set enabled = false to keep it out of the panel even with qs-housing installed.
Adding and Editing Routes#
Every route is one entry in Config.Tasks. Copy an existing one, give it a new taskOrder and list its stops:
{
taskOrder = 9, -- unique, never reused
name = "Vinewood Hills Run",
img = "garbage_3.png",
description = "Winding roads and wealthy bins.",
recommendedPlayers = { 2, 4 },
levelRequired = 7,
experience = 1400,
money = 1600,
route = {
[1] = vector3(-1027.25, 359.83, 71.36),
[2] = vector3(-1092.04, 437.55, 75.23),
[3] = vector3(-1222.67, 456.12, 91.74),
},
},Field | What it is |
|---|---|
| The route's id. The server looks the reward up by it when the truck comes back, so it must be unique — never give two routes the same one. |
| What the mission card says. |
| The card's picture: |
| The crew size shown on the card, |
| The level every crew member needs. |
| The reward per collector, or the pot that is split with |
| The stops, served one at a time in the order listed. Each is a |
The Truck, the Depot and the Outfit#
The truck#
Config.VehicleModel — trash2, the Trashmaster — is parked at the first bay in Config.VehicleSpawnCoords with no vehicle within four and a half metres of it. When every bay is taken the start is refused with Parking lot is full, so add bays on a busy server. Config.SpawnInsideVehicle = true seats the leader straight at the wheel, and Config.Fuel fills the tank. The truck belongs to the route: it is removed when the route is handed in or abandoned.
The depot and the map#
Setting | What it places |
|---|---|
| The foreman: position and heading as a |
| The truck's parking bays, as many as you like. |
| Where the truck is handed back. The prompt shows within five metres of it. |
| The Garbage Center blip: text, sprite, size and colour. |
| The blip on the current stop. |
| The marker floating over the foreman: shape, colour, size, height, how far away it shows, and a gentle bob. |
The work outfit#
Starting a route dresses the crew in the work outfit; finishing or abandoning it puts their own clothes back. The outfit is set at the top of client/clothing.lua, one for male and one for female characters, with the usual clothing component numbers:
local playerClothing = {
male = {
["arms"] = 63,
["tshirt_1"] = 59, ["tshirt_2"] = 0,
["torso_1"] = 56, ["torso_2"] = 0,
["pants_1"] = 36, ["pants_2"] = 0,
["shoes_1"] = 25, ["shoes_2"] = 0,
["helmet_1"] = 58, ["helmet_2"] = 1,
},
female = { ... },
}Config.Clothing = false skips the clothes only; going on and off duty works the same.
Prompts, Names and Money#
Setting | What it changes |
|---|---|
|
|
| The name shown for crew members: |
|
|
| The script's own notifications, or yours — see Integrations. |
How Routes Are Kept Honest#
Everything that pays is decided on the server, from its own records — a modified client can neither change what the job pays nor claim a route it did not work:
Check | What it prevents |
|---|---|
Stops are counted on the server one at a time, in order, and only from near that stop. | Claiming a route without driving it. |
The truck has to be back at the depot when the route is paid. | Cashing a route in from anywhere on the map. |
The reward is read from the server's copy of the route it assigned. | A client naming its own pay or experience. |
The job is checked again when the route is paid. | Taking a route, switching jobs and being paid for both. |
Loot is rolled on the server, from the stop being worked, with a cooldown and a cap per route. | Farming items. |
The cleaning bonus is paid once per stop, at that stop. | Farming experience — and with it the leaderboard prizes. |
Only the crew leader starts or ends a route, and invitations are rate-limited per sender and per invited player. | Pulling strangers into a route, or flooding somebody's screen with invitations. |
It is also why a route that was not really finished pays nothing: when that happens, Common Errors explains which check it failed.



