Click outside or press Esc to close
Overview
QuestLine is a quest system for Rust. Chains, twelve interchangeable layouts, an in-game workshop for building quests, and a hook mapper that reads other people's event plugins.
Every quest plugin can track kills and gathering. The part that decides whether one is still working in six months is how it talks to your event plugins — and every competitor hardcodes that list. When a plugin renames a hook, the quest quietly stops completing and nobody notices until a player complains.
QuestLine ships a hook mapper instead. Type a hook name, say which argument holds the player, and it becomes an objective. That works for the 34 sources it ships with, for event plugins released after this one, and for anything you write yourself. No update needed, ever.
Free, MIT, no dependencies. No web editor, no external account, nothing phoning home. Everything is built in game.
Features
- Twelve complete layouts, switchable with one click — different structure, not different colours
- Hook mapper: turn any hook from any plugin into an objective, with argument filters
- 34 event sources pre-mapped, each with a live loaded/not-loaded check
- 27 native objective types across combat, gathering, looting, crafting, raiding and time
- Quest chains — a quest can require another finished first
- Multiple steps per quest, all of which must fill
- Unlimited rewards per quest: items, commands, or currency
- Economics and ServerRewards built in, plus any custom currency plugin
- Categories with their own colours and reset cycles, plus rotation so no two players see the same list
- Daily and weekly resets on the hour and weekday you choose
- Tracker HUD with live progress bars, pinned to the corner of the screen
- 35 demo quests on first load, so it works before you touch anything
- Full in-game workshop — nothing needs a config file
- Every visible string editable in game, unlimited languages, player language switcher
- Discord webhook on completion
- Free, MIT, no dependencies
The hook mapper
This is the reason to install it over anything else, so it is worth explaining properly.
Event plugins announce things by calling a hook. Harbor Event calls OnHarborEventWinner. Convoy calls OnConvoyEventWin. Raidable Bases calls OnRaidableBaseCompleted. Every competitor hardcodes a table of those names, which means the table rots.
QuestLine lets you describe one instead:
Description Finish an Easy raidable base
Hook name OnRaidableBaseCompleted
Who gets it everyone within 60m of the event
Only when argument 2 equals 0 <- 0 is Easy, 4 is Nightmare
That is the whole configuration, done from the panel with no code. It is also how one hook becomes five separate quests — the same Raidable Bases hook gives you an Easy quest and a Nightmare quest by changing one filter.
Hooks report the player in four different ways across the plugins I surveyed — as a steam id, as a player object, at argument 1, or at argument 2. Cargo Plane Crash does not even use the On prefix. QuestLine works out which it is rather than assuming, which is exactly why a hardcoded table cannot keep up.
What ships pre-mapped
34 sources, each switched on and labelled in plain English rather than developer shorthand:
Harbor · Gas Station · Junkyard · Arctic Base · Air · Water · Ferry Terminal · Satellite Dish · Power Plant · Supermarket · Shipwreck · Airfield · Sputnik · Caravan · Convoy · Dungeon Events · Boss Monster · Cargo Plane Crash · Abandoned Bases · Triangulation · Survival Arena · GunGame · Paintball · Tugboat Pirates · Space · Flying Cargo · and Raidable Bases split into all five difficulties.
The mapper screen shows a green marker beside anything whose plugin is actually loaded, and counts how many times each hook has really fired since the server started — so you can prove a quest is wired up instead of hoping.
Objectives that need nothing installed
27 native types, grouped in the picker so you are choosing from a list rather than typing keys.
| Group | Objectives |
|---|---|
| Combat | Players, sleepers, scientists, animals, zombies, named NPCs, patrol helicopter, Bradley APC |
| Gathering | Any item by shortname, fishing, harvesting plants |
| Looting | Barrels, any crate type, a specific item, keycards, hacked crates |
| Making | Crafting, recycling, smelting, placing blocks, upgrading, deployables |
| Raiding | Doors destroyed, walls destroyed |
| Time | Minutes played, minutes survived without dying, monuments visited |
Kill objectives take extra conditions: headshots only, a minimum distance, or a specific weapon. So "three kills from over 150 metres" is a quest you can build in about twenty seconds.
Helicopter and Bradley credit by damage share, not last hit. Whoever lands the final shot on a heli is usually not who brought it down. QuestLine credits everyone who did more than a share you set, defaulting to 25%. The obvious implementation makes that objective feel broken to the person who actually did the work.
Named NPC objectives catch anything, from any spawner. Better NPC and Water Patrol expose no kill hook at all, so QuestLine matches on display name or prefab instead — kill 20 NPCs whose name contains "Heavy Scientist". That covers NpcSpawn, Bot Spawn, Zombie Horde and anything else that names its NPCs.
The twelve layouts
Pick one in SETUP > LOOK and the whole panel is rebuilt. These are separate interfaces, not palette swaps.
| Layout | What it is |
|---|---|
| The Job Board | Paper notes tacked to cork, eight per page |
| The Contract | A formal document with numbered clauses. One at a time, deliberate |
| The Rail | A carousel with the focused quest enlarged and neighbours peeking in |
| The Deck | Collectible cards with rarity frames. Claimable ones lift off the table |
| The Bounty Wall | Weathered posters, huge reward numbers, four per page |
| Dispatch | Radio traffic. Frequency rail on the left, timestamped transcript on the right |
| The Foundry | Riveted steel. Two big work orders with percentage gauges over a dense list |
| The Locker | A Rust inventory grid that sizes itself to your panel. The most quests on one screen |
| The Ledger | Bookkeeping. Ruled columns, running credit, claim buttons inline |
| The Marquee | A cinema front. One quest as the feature presentation under bulb-lit trim |
| The Compendium | An open book. Index page left, detail page right, spine between them |
| The Crate | Supply crates. Sealed, cracked open, then breached with the reward spilled out |
Every layout paginates, so a catalogue of 50 or 60 quests is fine in all of them. All twelve scale with panel width and height, which are settings.
Chains
A quest can require another finished first. That is what turns a pile of chores into progression.
The demo set includes a three-part chain — catch 20 fish, then loot four underwater crates, then recover the sunken cache — with each part locked until the one before it is done. Locked quests still appear, greyed, so players can see what they are working towards.
Rewards
Unlimited per quest, each switching between three kinds with one button.
| Kind | What it does |
|---|---|
| Item | Any shortname, amount, skin, custom name, blueprint toggle. Pick from an icon grid with search, or take the item from your hand |
| Command | Any server command with {steamid} {player} {amount} {quest}, run as the server or as the player |
| Currency | Economics coins, ServerRewards RP, or your own plugin through a name and a hook |
The editor shows a live check next to each currency confirming that plugin is loaded, so a typo is visible immediately rather than at claim time.
The workshop
/quests tune opens it. Building a quest was the part I spent the most effort on.
NEW QUEST asks for a name and then offers a starting point — KILL SOMETHING, GATHER SOMETHING, LOOT SOMETHING, CRAFT SOMETHING, BUILD SOMETHING, WIN AN EVENT, or EMPTY. Pick one and you have a working quest immediately, which you then edit.
Inside a quest:
- Category and rarity as click-through chips, never typed values
- Objective picker grouped by COMBAT / GATHER / LOOT / MAKE / RAID / TIME — every type is one click
- A searchable icon grid of every item in the game for filters and rewards, plus FROM HAND
- Steps reorderable, rewards addable and removable
- A live preview showing the exact sentence players will read
- COPY duplicates a whole quest as a starting point for the next one
Eight rooms in total: QUESTS, NEW QUEST, HOOK MAPPER, CATEGORIES, RULES, CURRENCY, LOOK and WORDS. Nothing requires a config file, a restart or a reload.
Categories and resets
Five ship — Daily, Weekly, Story, Event, Repeatable — and you can add as many as you like. Each has its own colour, its own reset cycle, and an optional rotation count.
Setting Offer to 3 on Daily means each player is dealt three random dailies from that pool, re-rolled at the reset hour. Two players will not see the same list.
Anti-abuse
- Maximum quests active at once, with extra slots for a VIP permission
- Abandon lockout so a quest cannot be dropped and retaken to dodge a timer
- Teammate kills ignored
- Damage-share crediting on heli and Bradley
- Optional time limit per quest
- A cap on how many times a quest can ever be completed
- Per-quest permission gates
Commands and permissions
| Command | What it does |
|---|---|
/quests |
Open the panel. Also /q and /quest |
/quests tune |
Open the workshop |
/quests track <id> |
Pin a quest to the tracker |
/quests abandon <id> |
Give one up |
questline.hooks |
Every mapped hook, whether its plugin is loaded, and how often it has fired |
questline.stats |
Quest counts, player counts, detection summary |
questline.give <steamid> <questid> |
Grant a quest |
questline.reset <steamid> |
Wipe a player's progress |
| Permission | Grants |
|---|---|
questline.use |
Open the panel, if you have gated it |
questline.admin |
The workshop and admin commands |
questline.vip |
Extra active quest slots |
Setup
- Drop
QuestLine.csintooxide/plugins/ - Grant yourself the workshop with
oxide.grant group admin questline.admin - Type
/queststo look,/quests tuneto build
35 quests are generated on first load covering every objective type, including a three-part chain and five event quests, so there is something to look at immediately. Quests, players and translations live in oxide/data/QuestLine/, everything else in the config file, and all of it is editable from the panel.
Run questline.hooks after installing. It lists every mapped source, which of their plugins were detected, and every plugin currently loaded on your server — so if an event plugin of yours is named differently than expected you can see the real name and correct it in one field.
Developer API
[PluginReference] private Plugin QuestLine;
QuestLine?.Call("OpenQuests", player);
QuestLine?.Call("GiveQuest", player, "q014"); // bool
QuestLine?.Call("IsQuestDone", player, "q014"); // bool
QuestLine?.Call("GetActive", player); // List<string>
QuestLine?.Call("GetFinishedCount", player); // int
QuestLine?.Call("AddProgress", player, "kill.scientist", 1);
AddProgress is the manual counterpart to the hook mapper, for a plugin author who would rather push progress than be listened to. Three hooks fire:
void OnQuestAccepted(BasePlayer player, string questId) { }
void OnQuestCompleted(BasePlayer player, string questId) { }
void OnQuestAbandoned(BasePlayer player, string questId) { }
Compatibility
Oxide and Carbon. No dependencies. Economics, ServerRewards and Notify are optional and detected automatically.
It reads other event plugins without those plugins knowing it exists, so nothing needs configuring on their side and nothing breaks if you uninstall one — the affected sources simply go quiet and say so in the mapper.
Panel size, blur, background darkness and text scale are all settings, and every layout scales with them. The symbols used in the interface are configurable characters, so if your server's font renders one as a box you can replace it with anything you like.
Requirements & compatibility
Oxide and Carbon. No dependencies. Economics, ServerRewards and Notify are optional and detected automatically. It reads other event plugins without those plugins knowing it exists, so nothing needs configuring on their side and nothing breaks if you uninstall one — the affected sources simply go quiet and say so in the mapper.
No updates yet.