LAB/05 — INVENTORY

DecayBooster

Players quit mid-wipe and leave their bases standing. This strips cupboard authorisation from the ones who never came back, and then — only if you say so — clears out the bases nobody holds any more.
← BACK TO STORE
Price
$14.99
Version
v2.0.0
Author
S³Founding MemberTrusted Dev

Changelog

v2.0.030 Aug 2026

No notes for this release.

DecayBooster screenshot 1

The problem

Vanilla upkeep drags abandoned bases out for days. They hold ground, block building, eat entities and make your map look busier than your server actually is. The group upkeep bonus is the reason: a cupboard with eight authorised names decays slowly even when seven of those names quit a week ago.

What DecayBooster does

Removes cupboard authorisation from players who have not logged in for a while. That alone cuts the group bonus and lets vanilla decay do its job properly.

Optionally — off by default — once nobody at all is authorised on a base, it can clear the base out entirely.

Read this before you set the threshold

Rust does not persist a per-player "last connected" timestamp anywhere a plugin can read. sleepStartTime is Time.time based and resets on restart. The blueprint table's updated column only moves when blueprints change.

So the first time DecayBooster sees an authorised player it has never tracked, it starts their clock at that moment. On a fresh install nobody is deauthorised for a full threshold period.

That is deliberate. The alternative — assuming every unknown player is ancient — would strip authorisation off half your server on the first scan, and you would not get it back.

The first scan tells you what it picked up:

DecayBooster scan: 412 buildings, 380 cupboards, 1104 auth entries. 1104 newly tracked, ...

Practical consequence: install it at the start of a wipe, not the end.

Work up to base removal, don't flip it on

  1. Watch first. Leave removal off for a few days. db.status lists the bases sitting empty and how long they have been that way. If that list looks wrong, do not proceed.
  2. Preview. db.preview prints exactly which buildings would go and how big they are. It writes nothing and touches no entity.
  3. Set a grace period. Hours a base sits with nobody authorised before removal defaults to 24 — a full day of visible abandonment before anything happens.
  4. Set a floor. Smallest base worth removing defaults to 1 building block. Raise it to 10 if you only want real bases cleaned up and are happy to leave stray foundations to vanilla decay.
  5. Then enable it.

Every deauthorisation and removal is written to oxide/logs/DecayBooster/, one file per day:

[2026-08-30 06:24:39] deauth building=2 cupboard=205176 player=76561190000000001 offlineDays=8.3
[2026-08-30 06:24:39] marked-empty building=2 blocks=2
[2026-08-30 06:24:39] remove-base building=2 blocks=2 entities=3

Keep those. When somebody insists their base vanished for no reason, this is the answer.

Paced, not a frame spike

Removal is throttled. Entities killed per frame defaults to 5 and the scan yields every 10 buildings, so a large base takes a few seconds of wall time to disappear instead of freezing the server. Lower it if your server is already struggling; raise it while clearing a backlog during a restart window.

Features

  • Strips cupboard auth from players offline past a threshold you set
  • Optional base removal once nobody is authorised at all — off by default
  • Global dry-run mode, plus a db.preview that simulates the whole chain
  • Exempt permission for staff and VIP ranks
  • Optional rule: one active player on the cupboard protects the whole base
  • Optional sweep of bases that have no tool cupboard at all
  • Minimum base size floor, so stray foundations are left to vanilla
  • Tells returning players their auth was removed
  • Per-day audit log of every deauth and every removal
  • Paced entity removal with a configurable per-frame budget
  • db.selftest — eleven checks, including a signature check against the vanilla auth API
  • Hooks and API for other plugin authors
  • Oxide and Carbon
  • No dependencies

Commands

Console, or in-game with decaybooster.admin.

CommandDoes
db.previewDry-run scan. Reports everything it would do, changes nothing
db.scanRun a scan now, for real
db.statusConfig summary, tracked players, last scan result, oldest empty bases
db.forget <steamid>Reset one player's offline clock, e.g. after a support ticket
db.selftestEleven checks against the live server
DecayBooster status
  auth removed after : 7 days offline
  scan interval      : 60 minutes
  dry run            : False
  base removal       : off
  tracked players    : 0
  bases sitting empty: 0
  scan in progress   : False
  last scan          : 0 min ago

Permissions

PermissionEffect
decaybooster.exemptThis player is never deauthorised. Grant it to a group for VIPs or staff
decaybooster.adminThe db.* commands from in-game
oxide.grant group vip decaybooster.exempt
oxide.grant user 76561198000000000 decaybooster.admin

Settings

{
  "Days a player must be offline before their cupboard auth is removed": 7.0,
  "Minutes between scans": 60.0,
  "Scan once on server start as well": true,
  "Dry run - log what would happen and change nothing": false,
  "Keep everyone authorised if at least one player on the cupboard is still active": false,
  "Remove bases once no player is authorised on them (destructive, off by default)": false,
  "Hours a base sits with nobody authorised before it is removed": 24.0,
  "Also remove bases that have no tool cupboard at all": false,
  "Smallest base worth removing, in building blocks (ignores twig spam and single foundations)": 1,
  "Entities killed per frame while removing a base - lower is gentler on the server": 5,
  "Tell players when they return that their auth was removed": true,
  "Announce base removals in the server console": true,
  "Write every deauth and removal to oxide/logs/DecayBooster": true
}

The two that change what your server does are Remove bases once no player is authorised on them and Keep everyone authorised if at least one player on the cupboard is still active — the second one means an active clanmate protects the whole cupboard.

For other plugin authors

void OnDecayBoosterDeauth(BuildingPrivlidge tc, ulong userId) { }

// Return non-null to spare this base.
object OnDecayBoosterBaseRemove(BuildingManager.Building building) { return true; }

void OnDecayBoosterBaseRemoved(uint buildingId) { }
bool   exempt   = DecayBooster.Call<bool>("IsPlayerExempt", userId);
double lastSeen = DecayBooster.Call<double>("GetLastSeen", userId);   // unix seconds, 0 if untracked
DecayBooster.Call("ResetOfflineTimer", userId);

Requirements

Oxide or Carbon. No other plugin required.

Support

Every purchase comes with the private updates channel in our Discord and updates for the life of the plugin. Your licence key and download live on your purchases page the moment payment clears.