Click outside or press Esc to close
Overview
SeasonPass is a full battle pass for Rust. A free track and a premium track, tiers your players climb by playing, daily and weekly challenges, and a season that rolls over on wipe.
The hard part of a battle pass is not the panel. It is the tuning. Almost every pass ever configured is either so slow nobody finishes or so fast it is over in four days, and the owner does not find out until the season has already ended.
SeasonPass measures itself. It tells each player how long the season will actually take them at the rate they are playing, and it tells you — from your own server's data — the median tier reached, the percentage of players finishing, and whether your curve is achievable at all. That is the part no other pass ships, and it is the reason this one is worth installing over the one you are already running.
Three templates ship with it, and they are three genuinely different interfaces — different layout, different chrome, different structure — not one panel in three colours.
Free, MIT, no dependencies. Works on a bare server with nothing else installed.
Features
- Free track and premium track, unlimited rewards on every tier
- 1 to 200 tiers, added one at a time or generated with an XP curve
- Three complete templates: The Runway, The Field Manual, The Ascent
- Live completion estimate — every player sees how long the season will take them
- Catch-up XP so players who join late or fall behind can still finish
- Admin health readout built from real server data, not guesswork
- 20 XP sources, each with its own value, on/off switch and daily cap
- Daily, weekly and season-long challenges drawn from a pool you write
- Every reward switches between an item, a server command and a currency payout with one button
- Economics and ServerRewards built in for both buying premium and paying rewards out
- Or scrap, any item, or your own economy plugin through three hook names
- Items support amount, skin, custom name and blueprints
- Retroactive premium — buying at tier 40 grants the first 39 too, on by default
- Premium XP multiplier and extra daily challenges
- Anti-farm caps: per source, per hour, per day
- Rewards that do not fit go to a holding area, never destroyed
- Season rolls on wipe, with reset, keep or carry-over behaviour
- Every visible string editable in game, unlimited languages, player language switcher
- Full in-game editor. Nothing needs a config file
- Free, MIT, no dependencies
Pacing, and why it matters more than the panel
This is the section worth reading before anything else, because it is where passes fail.
A battle pass has one number that decides whether it works: how many hours it takes a normal player to finish. Set it too high and players do the maths, realise they cannot get there, and stop caring by day three. Set it too low and the whole thing is over before the wipe is.
Nearly every pass leaves you to guess that number. SeasonPass calculates it three different ways.
1. Every player sees their own estimate
The panel shows a line like “finishes in 14 days at your rate”, worked out from that player's own XP history — not an average, not a guess. It is honest, and it is the number that decides whether they keep playing.
Showing an honest estimate sounds risky. It is not. A player who can see they will finish keeps playing. A player who cannot tell either way assumes the worst and quits. The estimate is a setting if you disagree, but it defaults to on for a reason.
2. Players who fall behind earn more
Anyone more than a few tiers below the expected pace for the day earns bonus XP, scaling with how far behind they are, up to a ceiling you set. Late joiners are the single biggest source of churn on a seasonal system, and this is the fix.
| Setting | Default | What it does |
|---|---|---|
| Give players who fall behind bonus XP | On | Turns catch-up on |
| Tiers behind before catch-up starts | 3 | Grace before the bonus kicks in |
| Highest catch-up multiplier | 2.0× | The ceiling for players furthest behind |
3. You get told the truth about your own curve
Run pass.health and you get a readout built from your server, not from defaults:
SeasonPass health
season 1 - 30 tiers, 70,200 XP total
ends: 29d 23h
players this season: 42
median tier: 11
finished: 3 (7%)
loaded 240 min ago
XP sources that have fired since load: 18 of 20
If more than a handful of players are in and nobody has finished, it says so directly. Most owners have no idea their pass is untunable until the season is already over.
The same readout lists which XP sources have actually fired since the plugin loaded. If you have players gathering wood and gather.wood never appears, something is wrong and you can see it in one command instead of finding out from a complaint three weeks later.
The three templates
Pick one in the LAYOUT room and the entire pass is rebuilt. These are not colour schemes — the header, the tier rail, the reward cards, the progress display and the whole layout are different.
| Template | What it is |
|---|---|
| The Runway | Deep blue and cyan. Tiers run horizontally as a departure board, the current tier lit and centred, the track scrolling behind it. Reads like an airport display. |
| The Field Manual | Cream paper, black ink, red stamps. Tiers laid out as numbered entries in a printed military manual, claimed ones stamped through. No glow anywhere. |
| The Ascent | Near black with a single green line. Tiers stack vertically and you climb them, the completed run falling away below. The most game-like of the three. |
Every template is fully skinned — free and premium tracks, locked and claimable states, milestone tiers, challenges, the estimate line and the premium offer all have their own treatment in each one.
XP sources
Twenty sources ship enabled with sane values. Every one has its own XP amount, an on/off switch, and an optional daily cap.
| Group | Sources |
|---|---|
| Combat | Player kill, headshot bonus, scientist, animal |
| Raiding | Door destroyed, wall destroyed |
| Looting | Barrel, crate, elite crate, hackable crate |
| Gathering | Wood, stone, metal, sulfur, cloth |
| Building | Block placed, block upgraded |
| Other | Item crafted, item recycled, per minute played |
Anti-farm is on by default and you should leave it on. Without per-source daily caps and a global hourly cap, sulfur XP turns the entire pass into a quarry simulator by day two. The defaults are a 4,000 XP hourly ceiling plus individual caps on every gathering source.
Any other plugin can feed the pass with one call, so an event, an arena or a custom minigame can grant XP without SeasonPass needing to know it exists.
Challenges
Three pools, each with its own reset. Challenges are drawn at random from the pool you write, so no two players get the same list.
| Pool | Resets | Default handed out |
|---|---|---|
| Daily | At an hour you pick | 3 |
| Weekly | On a day you pick | 2 |
| Season | Never | All of them |
Each challenge has its own text, target, XP reward and difficulty. Because challenges are built on the same source list as XP, anything that can grant XP can also be a challenge — kill 20 scientists, gather 5,000 sulfur, upgrade 40 blocks to stone.
Premium accounts can be given extra daily challenges on top.
Rewards
Every reward on every tier switches between three kinds with one button.
| Kind | What it does |
|---|---|
| Item | Any shortname, any amount, with skin, custom name and a blueprint toggle. Pick from a searchable list or from the item in your hand. |
| Command | Any server command, with {steamid}, {player} and {amount} substituted. Run as the server or as the player. |
| Currency | Pays Economics coins, ServerRewards RP, or your own currency plugin. |
Currency payouts are configured separately from the premium price, so premium can cost scrap while a tier pays out coins. The editor shows a live tick next to each currency confirming that plugin is actually loaded, so a typo is visible immediately rather than at claim time.
If a reward will not fit — a full inventory, or a currency plugin that is temporarily unloaded — it goes to a holding area and the player collects it later. Nothing is ever destroyed.
Premium
Premium can be granted by permission, bought in game, or both.
- Price in scrap, any item, Economics, ServerRewards, or your own plugin
- Retroactive unlock, on by default — buying at tier 40 grants every premium reward from the first 39
- Premium XP multiplier, default 1.25×
- Extra daily challenges for premium accounts
- Premium resets each season, or carries, your choice
- Admin command to grant it to anyone
Leave retroactive unlock on. Buying premium at tier 40 and receiving nothing for the forty tiers already climbed is the single most complained-about mechanic in every battle pass ever shipped, in Rust and outside it. The setting exists because some owners want it. It defaults to on because they are wrong.
The editor
Type /pass, press EDIT, and everything is in there. Eight rooms:
| Room | What is in it |
|---|---|
| SEASON | Name, subtitle, length, wipe behaviour, end action, carry-over, end and restart buttons |
| TIERS | Add tiers, generate an XP curve, reorder, and open any tier to edit both tracks |
| XP SOURCES | All twenty, with value, switch and daily cap, plus the global caps |
| CHALLENGES | Write the pool, set targets and rewards, choose the band |
| PREMIUM | Price, currency, multiplier, extra challenges, and the currency reward plugins |
| PACING | The estimate, catch-up settings, and the health readout |
| LAYOUT | Template picker, panel size, blur, darkness, text scale, what to show |
| WORDS | Every string in the plugin, per language |
Nothing in the editor requires a config file, a server restart or a plugin reload. Changes apply on the spot.
Text and languages
Every visible string is editable in game and stored per language. Add as many languages as you like, and let players switch with a button in the header if you want them to.
Nothing is hardcoded — tier labels, button text, the estimate line, chat messages, the premium offer, all of it.
Commands and permissions
| Command | What it does |
|---|---|
/pass |
Open the pass. Also /bp and /season, and you can add your own |
/pass tune |
Open the editor |
/pass notify |
Turn the XP popups on or off, per player |
pass.give <steamid> <xp> |
Grant XP |
pass.tier <steamid> <n> |
Set a player's tier |
pass.premium <steamid> |
Toggle premium for a player |
pass.health |
The pacing and diagnostics readout |
| Permission | What it grants |
|---|---|
seasonpass.use |
Open the pass, if you have turned the gate on |
seasonpass.admin |
The editor and the admin commands |
seasonpass.premium |
Premium track, as an alternative to buying it |
Setup
- Drop
SeasonPass.csintooxide/plugins/ - Grant yourself the editor with
oxide.grant group admin seasonpass.admin - Type
/passand press EDIT
A thirty tier season is generated on first load with rewards on both tracks, so there is a working pass to look at immediately. Tiers, players and translations live in oxide/data/SeasonPass/, everything else in the config file, and all of it is editable from the panel.
The generated season is a starting point, not a recommendation. Before you open it to players, set your season length, run pass.health after a few days, and adjust. The whole point of this plugin is that you can see whether your numbers work.
Developer API
[PluginReference] private Plugin SeasonPass;
SeasonPass?.Call("OpenPass", player);
SeasonPass?.Call("ClosePass", player);
SeasonPass?.Call("GetTier", player); // int
SeasonPass?.Call("GetXp", player); // int
SeasonPass?.Call("IsPremium", player); // bool
SeasonPass?.Call("GetTierCount"); // int
SeasonPass?.Call("GetSeasonName"); // string
SeasonPass?.Call("AwardXp", player, 250, "my-event");
AwardXp is the important one. Any plugin can feed the pass with a flat XP amount and a source tag, so an event, an arena or a minigame can grant progress without SeasonPass knowing it exists. There is also SeasonPassAward, which takes a source key and a unit count and applies that source's configured value and caps.
Four hooks fire:
void OnSeasonPassTierUp(BasePlayer player, int tier) { }
void OnSeasonPassClaim(BasePlayer player, int tier, bool premium) { }
void OnSeasonPassPremium(BasePlayer player) { }
void OnSeasonPassEnd(int finished) { }
Compatibility
Oxide and Carbon. No dependencies. Economics, ServerRewards and Notify are optional and detected automatically.
The class is named SeasonPass specifically so it can sit alongside the paid BattlePass plugin without colliding, if you want to run them side by side while you switch over.
Every visual effect is a setting, so if anything renders oddly on an unusual build you can switch it off. 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. The class is named SeasonPass specifically so it can sit alongside the paid BattlePass plugin without colliding, if you want to run them side by side while you switch over. Every visual effect is a setting, so if anything renders oddly on an unusual build you can switch it off. 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.
No updates yet.