[ ! ] The zip contains a DLL extension that goes into RustDedicated_Data/Managed. Some hosts do not allow uploading DLLs - check with your host before buying. [ ! ]
Case Battles is case opening for Rust. Players open cases with scrap, Economics or ServerRewards money, with case keys, or for free on a cooldown, watch the spin slide across the items and land on the drop, and everything they win goes to a personal storage where they claim it into the inventory or sell it back.
Battles put 2 to 4 players on the same list of cases, in 1v1, 2v2, 3-way or 4-way, and the highest total takes the whole pot (the lowest in crazy mode). House bots fill empty seats, private battles join by code, and anyone can watch. The upgrader trades items or currency for a better item at a chance shown on a dial before you press GO. Every roll is provably fair, and players can check any of them in the window.
Version 2.1 adds your own currency (scrap with a skin id, or any item, with its own icon), a picture for every reward and upgrader rules for each drop. Version 2.0 added levels with free level cases, Case Rain that splits a server pot among the players who join, wipe seasons that pay the top 3 of every board in cases, a guided tour, Steam avatars on every board and seat, and a whole new window.
Works on Oxide and Carbon
Needs CrashExtensions (included in the zip)
20 cases and 3 level cases ready to go
English, Spanish, Russian, Portuguese and German built in
Jump to: Features · How it plays · Screenshots · Trailer · Included cases · Commands · Permissions · Works with · Install · Configuration · Test server · FAQ · API
🌟 Features
For players
A spin for every open. Open up to 5 at once, or switch on quick open and skip straight to the drop. A demo spin shows a case for free and wins nothing.
Case battles. 1v1, 2v2, 3-way and 4-way, up to 10 cases per battle, normal (highest total wins) or crazy (lowest total wins), public or private with a code. Join, watch, fill empty seats with house bots (the creator calls them), or recreate the battle in one click.
The upgrader. Offer up to 6 items or currency, pick a target or a multiplier chip (x1.5 to x10), and see your exact chance on the dial before you spin.
A storage of your own. Every drop waits there: claim it into your inventory or sell it back for 85% of its value.
Provably fair. The hash of the server seed is shown before you roll, you can set your own client seed, and the FAIRNESS page checks any revealed roll against the drop table it was made with.
Levels. Everything you open, battle and upgrade earns XP, and the level road hands out bronze, silver and gold level cases. Levels carry over between wipes.
Case Rain. A small share of every paid open fills a pot. When it rains, players have 60 seconds to join and the pot is split between them.
Wipe seasons. Three boards close at every wipe (best drop, profit, battles) and the top 3 of each get cases.
Stats. Your own numbers, the server's, top drops and leaderboards.
A live drop feed and toasts for the big drops on the server, and HUD rows for a running Case Rain, a ready free case and its cooldown.
A guided tour the first time the window opens, replayed from the ? button.
For server owners
Your own currency. Scrap with a skin id as the currency, or any item you name, or Economics or ServerRewards. Give the currency its own icon by URL or file.
A picture for every reward. Set an Image on any drop and it shows in the case, the results, storage, upgrader, battles, live feed and stats. Until it loads, players see the item icon.
Upgrader rules. Per drop: never offered, never a target, and upgrade groups, so a pile of resources can't turn into a weapon.
Sell keys and cases. casebattles.givecase and casebattles.givekey are made for your shop, Tebex or battle pass, offline players included. The GET KEYS button links to your store.
A key dealer NPC. Place him with /cases dealer add. He sells keys in packs with bulk and VIP discounts and a daily limit (talks through NpcDialogue, included in the zip).
In-game editor. /cases edit edits every case and its drops in game, so nobody has to touch a file.
VIP hooks. Discount permissions on case prices, VIP prices at the key dealer, and per-case permissions such as the VIP case.
Limits and locks. Daily and lifetime limits per case, minimum playtime, a lock after the wipe, and blocks while wounded, swimming, in a vehicle, building blocked, or combat and raid blocked (with NoEscape: while NoEscape isn't loaded, nobody can open or join a battle).
Drops beyond items. A drop can be an item, a blueprint or a list of console commands (a rank, a kit, anything).
Discord. Big drops and Case Rain posted to your webhook, from the rarity you choose.
5 languages. English, Spanish, Russian, Portuguese and German are built in, and each player sees the language of their own game.
Wipe your way. Storage and keys survive the wipe by default, and so do levels. Each is one switch.
For developers
A hook and an API. OnCaseOpened and the API_* calls: give cases and keys, read a player's opens, keys and level, open the window on a tab or a case. See the API.
Console and RCON commands. The give commands run from the server console and RCON, which is where your shop, quests and reward plugins point.
🔁 How it plays
Pick a case. Free ones run on a cooldown, the rest cost currency or keys. Every case shows its drops and their odds.
Open. One to five at a time. The spin lands on a drop decided by your seeds before it starts.
Keep or sell. Drops go to your storage. Claim them into your inventory or sell them back.
Battle. Create or join a battle, everyone opens the same cases round by round, and the winner takes the pot.
Upgrade. Put items or currency on the dial for a shot at something better.
Progress. XP from every open, battle and upgrade raises your level, level cases wait on the level road, and the season boards pay out at the wipe.
Check. Rotate your seed to reveal the old one and verify any roll on the FAIRNESS page.
📸 Screenshots
Every screen below is Case Battles running in Rust.
The case browser
A case and its drops
Two cases landed: total, cost and profit
The battles lobby
A battle room
A battle winner
The upgrader
The storage
Fairness and the roll verifier
Stats
The level road
Season boards: the top 3 of each win cases
Case Rain on the HUD while you play
Case Rain live in the case browser
A level-up with a level case
Creating a 2v2 battle
History, every roll with its fairness check
The guided tour
🎥 Trailer
The Case Battles 2.0 trailer (click to play, 80 seconds)
🎁 Included Cases
20 cases ship ready to open, with 7 rarities from Common to Gold and three keys (green, blue and red):
Free on a cooldown - Daily Case (every 24 hours, after 30 minutes played) and Starter Case (every 4 hours, after 15 minutes played)
For currency - Medic (250), Fuel (300), Miner (350), Farmer (400), Ammo (550), Builder (600), Tech (800), Mystery (1,500), Boom (5,000), VIP (5,000, for casebattles.vip) and Jackpot (6,500, 3 a day)
For keys - Weapons (1 green), Diver (1 green), Airdrop (1 blue), Tactical (2 blue), Elite (1 red), Cobalt (2 red) and Legend (3 red, locked for the first 2 hours of a wipe)
Level cases - Bronze, Silver and Gold, claimed from the level road at levels 5 to 50
A few of the drops at the top: the AK-47 blueprint in the Weapons Case, an auto turret blueprint in the Builder Case, 10,000 scrap in the Mystery Case, and 20 timed C4 in the Legend, Jackpot and Gold Level cases.
A disabled Example Rewards case shows the other kinds of drop: blueprints, a reward paid by console command, and a VIP rank granted on the spot.
🗒️ In-Game Editor
No file editing needed. /cases edit opens every case in a list and an editor for its name, image, price or key, free cooldown, permission, daily and lifetime limits, playtime and wipe lock, rarity tier, badge and whether it is allowed in battles. Add drops from the item list or straight from your inventory (skin, name and amount kept), set their odds and values, and watch the case's expected value update as you go. Duplicate a case to start a new one. Players keep the live table until you press SAVE.
🎮 Commands
Players
/cases - open the window (the command name is set in the config)
/cases battles, /cases upgrader, /cases storage - open the window on that tab
/cases join <code> - join a private battle
/cases help - the command list in chat
/rain - join a running Case Rain (the name is set in the config, and it only exists while Case Rain is on)
Admin
/cases edit [case] - the in-game case editor, optionally straight on one case
/cases dealer add | remove | list - place a key dealer where you stand, remove one, or list them
casebattles.givecase <player> <case> [amount] - give free opens of a case, the one to point your shop, Tebex or battle pass at
casebattles.givekey <player> <key> [amount] - give case keys
casebattles.givebalance <player> <amount> - give currency
casebattles.rain [amount | add <amount> | stop | status] - start a Case Rain now (an amount tops the pot up first), add to the pot without starting one, stop a rain without paying (the pot is kept), or show the pot and the time to the next one
The give and rain commands run from the server console and RCON as well. <player> is a SteamID64, online or not, or the exact name of an online player.
🛡️ Permissions
casebattles.use - open cases, battles, the upgrader and the storage. Required, so grant it to your default group
casebattles.admin - the editor, the key dealer, and the give and rain commands. Staff only, and give it to yourself too: being a server admin is not enough
casebattles.discount1, casebattles.discount2, casebattles.discount3 - 5, 10 or 15% off case prices paid in currency. The highest one a player holds wins
casebattles.dealer.vip1, casebattles.dealer.vip2 - 5 or 10% off keys at the key dealer, added to the bulk discount
casebattles.vip - opens the VIP Case
Every case can carry its own permission, and the discounts, dealer prices and demo spin permission are all set in the config.
A typical setup opens everything to everyone and keeps the discounts and the VIP case for your VIPs:
oxide.grant group default casebattles.use
oxide.grant group vip casebattles.discount2
oxide.grant group vip casebattles.dealer.vip1
oxide.grant group vip casebattles.vip
oxide.grant user <your steamid> casebattles.admin
🤝 Works with
NpcDialogue: included free in the zip: the key dealer talks through the game's own conversation screen
Economics / ServerRewards: optional currency, scrap by default
Tebex or any shop: sell keys and cases with casebattles.givekey and casebattles.givecase from the console or RCON
BattlePass / DailySpin: give cases as rewards with a command or through the API
NoEscape: optional: block opening and claiming while combat or raid blocked
Carbon: same code path as Oxide
📦 Install
Install the extension, once per server. Stop the server, copy Oxide.Ext.CrashExtensions.dll into RustDedicated_Data/Managed (Carbon: carbon/extensions) and start it again. The console prints Loaded extension CrashExtensions with its version. An older copy of the DLL is simply overwritten: it is one shared file for all our plugins.
Install the plugin. Copy CaseBattles.cs into oxide/plugins (Carbon: carbon/plugins). It compiles on its own and creates its config, data and language files.
Grant the permissions above. Nobody opens a case until casebattles.use is granted. Then type /cases in game: the tour shows you around, and /cases edit tunes the cases.
⚙️ Configuration
Everything lives in oxide/config/CaseBattles.json, the cases included. Each player's storage, keys, level and history are in oxide/data/CaseBattles/players, and the battles, boards, seasons and the Case Rain pot in oxide/data/CaseBattles/global.json.
Config sections (click to expand)
🧪 Test server
Available on the new Meowcraft test server. Join from the F1 console and type /cases:
client.connect 91.229.114.54:28015
📚 FAQ
Q: I run Case Battles 1.x. What changes when I update?
A: Replace CaseBattles.cs. The first load upgrades the config and keeps the old file as oxide/config/CaseBattles.json.v1.bak, and your cases, storage, keys and history carry over. Levels are on and the bronze, silver and gold level cases are added. Case Rain and season rewards start off, so turn them on in the config when you want them. The art stays classic (the 1.x pictures) until you set Art pack to venux.
Q: Can the currency be a skin?
A: Yes. Set Currency > Skin id and only scrap with that skin counts as currency. Scrap has no skins in Rust, so its wallet icon always shows plain scrap. To show a skin on the icon, use an item that has skins, or set your own picture with Icon image.
Q: Do I need an economy plugin?
A: No. Cases, battles and the upgrader run on scrap by default, or on any item you name. Economics or ServerRewards take one config line. Keys are separate: you give or sell them with casebattles.givekey, the key dealer or your shop.
Q: Is it really provably fair?
A: Yes. Every roll is HMAC-SHA256 of the player's server seed, client seed and a nonce. The hash of the server seed is shown before any roll, the player can set their own client seed, and rotating the seed reveals the old one. The FAIRNESS page recomputes any past roll against the drop table it was made with, not today's config.
Q: Does it work on Carbon?
A: Yes. The extension goes into carbon/extensions and the plugin into carbon/plugins, and everything else is the same.
Q: Can I translate it?
A: It already speaks five: English, Spanish, Russian, Portuguese and German are built into the plugin, and each player sees the language their game runs in. For another language, copy oxide/lang/en/CaseBattles.json to oxide/lang/<code>/CaseBattles.json and translate it.
Q: What happens at a wipe?
A: By default storage and keys are kept, and so are levels. The season boards close, the top 3 of every board get their prize cases, and a new season starts. One switch makes storage and keys start over at the wipe, another resets levels.
Q: Do I need NpcDialogue?
A: No, but it comes free in the zip. With NpcDialogue installed the key dealer talks through the vanilla conversation screen and sells keys there. Without it, talking to him opens the case window.
Q: Can I sell cases or keys in my shop?
A: Yes. Point your shop, Tebex or battle pass at casebattles.givecase or casebattles.givekey, and set your store link for the GET KEYS button in the config.
Q: How heavy is it?
A: Built for busy servers. Every spin plays on the player's own game, so it stays smooth whatever the server's frame rate, the window only sends what changed, and player files are saved with the server's own save.
Q: Does it contact any outside service?
A: It downloads its pictures (case art, keys and icons) from cdn.crashplugins.space and rust-cui.crashplugins.space, and your server caches them. Steam avatars are drawn by each player's own game, so the server fetches nothing from Steam. The optional Discord webhook is off until you set its URL; once set, it posts big drops and Case Rain with the player's name and profile links. Nothing else about your server or your players is sent.
🔧 API / Hooks
// Hook
void OnCaseOpened(BasePlayer player, string caseId, int count)
// API: CaseBattles?.Call<T>("Method", ...)
// player: a BasePlayer, player.userID, or a SteamID64 as ulong or string
// The give calls work for offline players and return false when nothing was given
bool API_GiveCase(object player, string caseId, object amount = null, bool notify = true)
bool API_GiveKeys(object player, string keyId, object amount = null, bool notify = true)
int API_GetCaseOpens(object player, string caseId)
int API_GetKeys(object player, string keyId)
int API_GetLevel(object player)
bool API_OpenUI(BasePlayer player, string tab = null, string caseId = null) // tab: cases, battles, upgrader, storage, stats
Dictionary<string, string> API_GetCases() // case id -> display name
Dictionary<string, string> API_GetKeyTypes() // key id -> display name
Questions, ideas or bug reports? Use the Support tab of this file or join our Discord.