ServerPanel adds a player information menu to your server. Use it to share useful information with your players and to integrate your plugins into it.
🌟 Features
User-Friendly Interface: A GUI that is easy to navigate.
Economy Integration: Works with different economy plugins.
Dynamic Menu Categories: Group features into categories you can customize.
Extensive Configuration Options: Almost every part of the plugin can be customized, including messages, colors, sizes and fonts.
Auto-Open Menu: Opens the menu automatically when a player connects (configurable in the settings).
Block Settings: Block the menu while a player is building, raiding or in combat.
Multiple Economy Head Fields: Show several economy values, such as balance, server rewards and bank information.
Permission Management: Set permissions for different user roles to control who can use which features.
Localization Support: Translate and edit all messages for different languages.
Performance Optimized: Built to keep server lag to a minimum.
Customizable Hooks: Connect existing economy systems through configurable hooks for adding, removing and showing balances.
Editor Position Change: Admins can move the editor to the left, center or right with one click.
Command Enhancements: Commands accept multiple arguments separated by "|", so several commands can run at once.
🎮 Commands
/info: open menu
/sp.install (or) /welcome.install: open installer menu
sp.migrations: console command that updates the plugin data structure when you upgrade to a new version. It creates backups before making any changes.
sp.migrations list: shows available migrations and whether they need to run
sp.migrations run <version>: runs specific migration (e.g., "1.3.0")
sp.migrations run <version> force: forces migration even if not detected as needed
🛡️ Permissions
serverpanel.edit: allows players to edit the plugin settings and open the edit menu
serverpanelinstaller.admin: required to access the plugin installation functions
🎥 Video
🖼️ Showcase
Templates
Template V1
Template V2
Template V3
Template V5
Editor
Installer
🧪 TEST SERVER
Join our test server to try all the features yourself.
Copy the IP address below to start playing.
connect 155.103.86.38:28015
📊 Update Fields
ServerPanel supports update fields: placeholders for your templates that show live information. They update automatically and work in text components, headers and other interface elements.
Player Information
{online_players}: Number of currently online players
{sleeping_players}: Number of sleeping players
{all_players}: Total number of players (online + sleeping)
{max_players}: Maximum server capacity
{player_kills}: Player's kill count (requires KillRecords, Statistics, or UltimateLeaderboard)
{player_deaths}: Player's death count (requires KillRecords, Statistics, or UltimateLeaderboard)
{player_username}: Player's display name
{player_avatar}: Player's Steam ID for avatar display
Economy
{economy_economics}: Economics plugin balance
{economy_server_rewards}: ServerRewards points
{economy_bank_system}: BankSystem balance
Note: Economy fields can be customized in "oxide/config/ServerPanel.json" under "Economy Header Fields". You can add support for any economy plugin by configuring the appropriate hooks (Add, Balance, Remove). Custom keys can be created and used in templates just like the default ones.
Server Information
{server_name}: Server hostname
{server_description}: Server description
{server_url}: Server website URL
{server_headerimage}: Server header image URL
{server_fps}: Current server FPS
{server_entities}: Number of entities on server
{seed}: World seed
{worldsize}: World size
{ip}: Server IP address
{port}: Server port
{server_time}: Current server time (YYYY-MM-DD HH:MM:SS)
{tod_time}: Time of day (24-hour format)
{realtime}: Server uptime in seconds
{map_size}: Map size in meters
{map_url}: Custom map URL
{save_interval}: Auto-save interval
{pve}: PvE mode status (true/false)
Player Stats
{player_health}: Current health
{player_maxhealth}: Maximum health
{player_calories}: Calorie level
{player_hydration}: Hydration level
{player_radiation}: Radiation poisoning level
{player_comfort}: Comfort level
{player_bleeding}: Bleeding amount
{player_temperature}: Body temperature
{player_wetness}: Wetness level
{player_oxygen}: Oxygen level
{player_poison}: Poison level
{player_heartrate}: Heart rate
Player Position
{player_position_x}: X coordinate
{player_position_y}: Y coordinate (height)
{player_position_z}: Z coordinate
{player_rotation}: Player rotation (degrees)
Player Connection
{player_ping}: Connection time in seconds
{player_ip}: Player's IP address
{player_auth_level}: Authorization level (0=Player, 1=Moderator, 2=Admin)
{player_steam_id}: Steam ID
{player_connected_time}: Connection start time
{player_idle_time}: Idle time (HH:MM:SS)
Player States
{player_sleeping}: Is sleeping (true/false)
{player_wounded}: Is wounded (true/false)
{player_dead}: Is dead (true/false)
{player_building_blocked}: Is building blocked (true/false)
{player_safe_zone}: Is in safe zone (true/false)
{player_swimming}: Is swimming (true/false)
{player_on_ground}: Is on ground (true/false)
{player_flying}: Is flying (true/false)
{player_admin}: Is admin (true/false)
{player_developer}: Is developer (true/false)
Network & Performance
{network_in}: Network input (currently shows 0)
{network_out}: Network output (currently shows 0)
{fps}: Server FPS
{memory}: Memory allocations
{collections}: Garbage collections count
Usage Example:
Use these fields in any text component, for example: "Welcome {player_username}! Server has {online_players}/{max_players} players online."
🔧 API Documentation for Developers
ServerPanel provides an API for plugin developers to integrate their plugins into the menu system.
Required Methods
API_OpenPlugin(BasePlayer player): Main integration method that returns CuiElementContainer
OnServerPanelClosed(BasePlayer player): Called when panel closes (cleanup)
OnServerPanelCategoryPage(BasePlayer player, int category, int page): Called when category changes (cleanup)
OnReceiveCategoryInfo(int categoryID): Receives your category ID
Integration Example
[PluginReference]
private Plugin ServerPanel;
private int _serverPanelCategoryID = -1;
private void OnServerInitialized()
{
ServerPanel?.Call("API_OnServerPanelProcessCategory", Name);
}
private void OnReceiveCategoryInfo(int categoryID)
{
_serverPanelCategoryID = categoryID;
}
private void OnServerPanelCategoryPage(BasePlayer player, int category, int page)
{
// Cleanup when player switches categories
}
private CuiElementContainer API_OpenPlugin(BasePlayer player)
{
var container = new CuiElementContainer();
// Create base panels (required structure)
container.Add(new CuiPanel()
{
RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
Image = {Color = "0 0 0 0"}
}, "UI.Server.Panel.Content", "UI.Server.Panel.Content.Plugin", "UI.Server.Panel.Content.Plugin");
container.Add(new CuiPanel()
{
RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
Image = {Color = "0 0 0 0"}
}, "UI.Server.Panel.Content.Plugin", "YourPlugin.Background", "YourPlugin.Background");
// Add your plugin's UI elements here
container.Add(new CuiLabel
{
RectTransform = {AnchorMin = "0.1 0.8", AnchorMax = "0.9 0.9"},
Text = {Text = "Your Plugin Interface", FontSize = 16, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"}
}, "YourPlugin.Background", "YourPlugin.Title");
// Add buttons, panels, etc. using "YourPlugin.Background" as parent
return container;
}
private void OnServerPanelClosed(BasePlayer player)
{
// Cleanup when panel closes
}
Header Update Fields
API_OnServerPanelAddHeaderUpdateField(Plugin plugin, string updateKey, Func<BasePlayer, string> updateFunction): Registers a per-player string provider for a header placeholder. Returns true on success.
API_OnServerPanelRemoveHeaderUpdateField(Plugin plugin, string updateKey = null): Unregisters a specific updateKey for your plugin, or all keys for your plugin when updateKey is null. Returns true on success.
Usage Example
[PluginReference]
private Plugin ServerPanel;
private void OnServerInitialized()
{
// Register a dynamic header field for each player
ServerPanel?.Call("API_OnServerPanelAddHeaderUpdateField", this, "{player_kdr}", (Func<BasePlayer, string>)(player => GetKdr(player)));
}
private string GetKdr(BasePlayer player)
{
// Compute and return the value to display in the header for this player
return "1.23";
}
Using in UI: Place your key (e.g., {player_kdr}) directly in Header Field texts. Your function updates the value for each player.
📚 FAQ
Q: Why can't I open the menu?
A: Make sure that the plugin is installed and activated on your server. If the problem persists, contact the server administrator.
Q: How do I enable Expert Mode? (disables automatic template updates)
A: In the data file "Template.json", turn on the "Use an expert mod?" option:
"Use an expert mod?": true,
P.S. "Template.json" is located in the "oxide/data/ServerPanel" directory (if you use Oxide) or in the "carbon/data/ServerPanel" directory (if you use Carbon)
Q: I see black images with Rust logo or get error 429 when loading images. What should I do?
A: This happens when images fail to download from the internet. To fix it, enable Offline Image Mode, which uses local images instead:
Enable the mode in config:
Open "oxide/config/ServerPanel.json" (or "carbon/config/ServerPanel.json" for Carbon)
Set "Enable Offline Image Mode": true
Set up the images:
Create folder "TheMevent" in "oxide/data" (or "carbon/data" for Carbon)
Download PluginsStorage (click "CODE" → "Download ZIP")
Extract the ZIP and copy all contents to the "TheMevent" folder
Reload the plugin:
Type o.reload ServerPanel (Oxide) or c.reload ServerPanel (Carbon)
Note: If using a hosting service, you may need to use their file manager or FTP to upload the files.
Q: Does ServerPanel work only with Mevent's plugins?
A: Currently, ServerPanel integrates with Mevent's plugins (Shop, Kits, Daily Rewards, etc.). Other developers can use the API to add their own plugins to the menu.
Q: Why do integrated plugins (Shop, Kits) have different window sizes?
A: Different plugins may use different templates for integration. Make sure all your integrated plugins use the same template version (V1, V2, etc.) that matches your ServerPanel template. Update the template in each plugin so the sizes match.
Q: The panel displays differently for different players. How can I make it show the same on everyone's screen?
A: This happens when players have different UI scale settings. To make it look the same for everyone:
Open the "Template.json" file located in "oxide/data/ServerPanel" (or "carbon/data/ServerPanel" for Carbon)
Find the "Parent (Overlay/Hud)" setting in the "Background" section
Change the value from "Overlay" to "OverlayNonScaled"
Save the file and restart your server or reload the plugin
Q: How can I change the video displayed in the ServerPanel interface to my own custom video?
A: You can replace the default video with your own using this command:
serverpanel_broadcastvideo [your_video_url]
Replace [your_video_url] with the direct link to your video. For best compatibility, we recommend hosting your video on imgur.com.
Q: My custom images are not loading or show as blank/question marks. What image hosting should I use?
A: For custom images, we recommend using imgbb.com for image hosting. Avoid Imgur and services without direct access to the image. The most reliable option is Offline Image Mode with local images.
Q: How can I make plugin UIs open outside of the ServerPanel menu instead of inside categories?
A: You can configure buttons to execute chat commands that open plugin UIs independently. To do this:
In your button configuration, set "Chat Button": true
Set the "Commands" field to "chat.say /command" (replace "command" with the actual plugin command)
Example: To open the Cases plugin outside the menu:
"Chat Button": true
"Commands": "chat.say /cases"
The command runs as if the player typed it in chat, and the plugin's interface opens on its own, outside the ServerPanel menu.
Q: Text in V4 template is shifting or sliding out of place. How can I fix this?
A: This happens when the text width is not set correctly. The "TITLE LOCALIZATION" settings in ServerPanel control text width for categories and pages:
Open the ServerPanel editor (click the "ADMIN MODE" button to open the edit menu)
Select the category or page you want to edit (click to "EDIT CATEGORY" or "EDIT PAGE" button)
In the editor, find the "TITLE LOCALIZATION" section
For each language (en, ru, etc.), you'll see three columns:
LANGUAGE: The language code
TEXT: The localized text content
WIDTH (px): The width setting in pixels
Adjust the "WIDTH (px)" value to match your text length. Longer text requires larger width values
Save your changes and test in-game
Tip: Start with a width value around 100-150 pixels for short text, and increase it for longer titles. You can adjust this value until the text displays correctly without shifting.
$18.99
NPC traders & shops
Build a trader where you stand — the whole shop, in-game
Walk to a spot, type one command, and a named NPC vendor is standing there wearing your outfit. Everything after that — every lot, price, skin, stock counter and wipe limit — is edited by looking at him and clicking. No JSON, no reloads, no restart. Pin him to a monument and he finds the same corner on every new map.
17
Fields per lot
3
Economy plugins supported
99
Lots per single purchase
1
Required dependency — zero on Carbon
✓The whole shop is built in-game — add, reorder, copy and delete lots by clicking
✓Traders pinned to monuments — the same vendor at the same spot after every wipe
✓Stock that refills on a timer — and survives a restart at the count it was on
✓Traders that react to players — gestures and voice lines on approach, purchase and idle
✓Sell items, currency or commands — kits and ranks are just another lot
✓On the map like a vending machine — players see the vendor and what he sells
Video
See it in action
01 — The trader
A vendor that belongs to your map
Not a wooden box with a UI on it — a standing NPC with a name, an outfit and a place in the world.
Spawned where you stand, dressed like you
One command drops a trader at your feet, facing where you face, wearing a copy of your clothes and holding whatever is in your hands. Change your own outfit later and one button re-copies it onto him — another button hands the set back to you.
Pinned to a monument, not to coordinates
Spawn him inside Bandit Camp, Outpost or any monument and his position is stored relative to it. Next wipe, on a completely different map, he stands in exactly the same corner of that monument — no repositioning, no re-spawning.
Visible on the map, with his stock
Toggle the vending marker and the trader shows up on the map under his display name, with his item-for-item lots listed on the map screen — exactly like a vending machine, so players know where to go and what for.
Locked to a group, if you want
Give a trader a permission and only that group can open him — with your own refusal message instead of the default one. A VIP-only black market is one field.
Bulletproof, literally
Traders can't be shot, damaged, targeted by NPCs or destroyed, and they aren't written into the map save — so they never duplicate, never leave corpses and never end up as debris in your save file.
02 — Gestures and voice
A trader who notices you
He waves when you walk up, thanks you for a purchase and shrugs when your pockets are empty — with his own voice, if you give him one.
Greets a player who comes closer
Set a radius in meters and the trader reacts the moment somebody steps inside it — once per approach, not once per second. Walk away and come back and he greets you again.
A reaction for every moment of the trade
Walking up, opening the shop, buying a lot, coming up short on resources, closing the menu, and an idle line every N seconds while nobody is around. Each one carries a gesture, a voice line, or both.
Random variants, weighted the way you want
Every reaction holds a list of variants and one is picked by weight, so the same trader never greets two players in exactly the same way. Set a weight to zero to park a variant without deleting it.
Voice lines are your own .ogg files
Drop the files into oxide/data/NPCShop/sounds and write the file name in the config. Cut a long file where the phrase ends with a playback duration, and set the volume per trader. The speaker itself is invisible — players hear a voice coming from the vendor, not from a boombox at his feet.
Heard by everyone, or by one player only
A voice line can be global, so everybody around the trader hears it, or personal — delivered to the player who triggered it and to nobody else. Handy for greetings on a crowded Outpost.
Every gesture the game has
Wave, thumbs up, shrug, point, the dances — the npcshop.gestures console command prints the exact list your Rust build accepts, and an unknown name is reported at load instead of failing silently.
03 — Lots and pricing
Any price for anything
A lot is three item slots — what's sold, what it costs, and an optional second cost. Each slot can be a real item, a skinned item, or your server currency.
Two-item prices
Charge 500 metal and 20 scrap for one lot. Turn the second slot off with a single value when you don't need it.
Currency in either direction
Flip a slot to money and the lot is priced in ServerRewards, Economics or IQEconomic. Flip the sale slot to money instead and the trader buys from players — a scrap-to-cash buyback counter, same editor, no second plugin.
Skins, custom names, custom icons
Every slot takes a skin ID, so a skinned item is a different product with a different price. Override the display name, point the icon at any image URL, and attach a description of up to 2500 characters that players open with an info button.
Buy in bulk without spam-clicking
A per-lot multiplier from 1 to 99 with plus, minus and a typed field. It clamps itself to what the player can actually afford, what's left in stock and what their wipe limit allows, so the number on screen is always a purchase that will go through. Oversized results are split into proper stacks.
Permission discounts
Map any permission to a percentage. Discounted players see an OFF badge on the price and pay less on both price slots; stacked groups resolve to the single best discount.
Copy a lot, or a whole shop
Copy one lot or every lot at once, walk to another trader and paste. Reorder with arrows, delete with one click, and hit preview to see the shop exactly as a player will before you close it.
04 — Stock and limits
Scarcity you can schedule
An unlimited shop is a vending machine with extra steps. Two independent systems keep a trader from flooding your wipe.
Stock that ticks back up
Per lot: a maximum stock, a refill interval in seconds and how much comes back each interval. Sell out and the button turns grey with OUT OF STOCK until it recovers. Ten rockets an hour, and the first player there gets them.
Per-player wipe limits
A separate cap on how many of a lot each player may buy for the whole wipe, counted per skin. One VIP kit per person per wipe, enforced without a second plugin and reset automatically on the next map.
Counts survive a reboot
Remaining stock, refill timers and everyone's wipe counters are written on every server save and on unload. A restart doesn't hand out a fresh batch of rockets.
05 — Beyond items
Sell anything a command can do
Kits, ranks, teleports, cars, raid bases — if another plugin exposes a command, it's a lot.
Run it now, or wrap it as a gift
Put a command on a lot and choose: fire it the moment the purchase clears, or hand the player a wrapped present they can save, carry and unwrap whenever they want — the command runs on unwrap. Give it a name and an icon and it looks like a real product in their inventory. %steamid% is substituted for you.
A command on the trader himself
Fire a command every time a player opens a given trader — a greeting in chat, a quest check, a log line. Also keyed by Steam ID.
Item search that finds things
The item picker searches display names and shortnames as you type and shows icons, so filling a shop doesn't mean keeping a shortname list open on your second monitor.
Reliability
Built to be left alone
✓Oxide and Carbon — on Carbon the built-in image database is used and no extra plugin is needed at all
✓Nothing is written into the map save — traders are recreated from config on boot, so they can't duplicate or survive as junk entities
✓Clean unload — every trader is removed, open interfaces are closed for all players and stock is saved first
✓One editor at a time — while an admin has a shop open it's locked for everyone else, so two people can't overwrite each other's lots
✓A missing monument disables its trader with a console warning instead of dropping him into the ocean
✓Optional 1-second buy cooldown against double-clicks and click macros
Commands
Three admin commands, none for players
All three require the npcshop.admin permission. Players never type anything — they walk up to the trader and press use. Command names are configurable.
/settraderSpawn a trader at your position, in your clothes
/remtraderLook at a trader and delete him
/newtraderposLook at a trader to select him, walk to the new spot, then /newtraderpos update. cancel aborts, and /newtraderpos <display name> moves a trader by name from anywhere
npcshop.adminSpawn, edit, move and remove traders
npcshop.vip15% discount by default — rename it, change the number, or add as many discount tiers as you like
Hooks & API
For plugin developers
void OnNPCShopItemBuy(BasePlayer player, Item saleItem, Item priceItem, Item additionalPriceItem)
Fired after a successful item-for-item purchase, with the final amounts already multiplied and discounted. additionalPriceItem is null when the lot has no second price. Currency purchases don't raise it — track those through your economy plugin.
Questions
Before you buy
What do I need installed?On Oxide, ImageLibrary — it's free and the plugin tells you in console if it's missing. On Carbon, nothing. MonumentFinder is optional and only needed for monument-pinned traders. An economy plugin (ServerRewards, Economics or IQEconomic) is optional and only needed for money prices; the right one is detected automatically.
Do my traders survive a wipe?Yes. Traders, lots and prices live in the config, so they come back on the new map. Monument-pinned ones land in the right place automatically; free-standing ones keep their world coordinates and may need one /newtraderpos if the terrain changed. Stock counters and per-player wipe limits reset on a new map, which is the point of them.
Can players sell things to the trader?Yes, in both forms. Item-for-item barter is what a lot does by default, and setting the sale slot to money turns the lot into a buyback: the player hands over items and gets currency.
Can I sell a kit, a rank or a teleport?Anything that has a command. Either it runs immediately on purchase, or the player receives a named, custom-iconed present that runs it when unwrapped — which also makes the purchase tradeable between players.
How many traders and lots can I have?No limit on either. The shop interface scrolls, and lots are reordered with arrow buttons.
Why don't all my lots show on the map marker?The marker is a real vending-machine listing, and Rust's own format can only express one item for one item. Lots priced in currency, or with a second price item, are hidden from the marker — they work normally in the shop itself.
Can I run different shops for different groups?Yes. Each trader takes its own permission and its own refusal message, so a VIP trader can stand next to the public one and simply refuse everyone else.
Do I ever have to edit the config file?Only for server-wide settings: discount tiers, the currency icon, the buy cooldown, and a trader's access permission or greeting command. Everything about the goods themselves — lots, prices, skins, names, icons, stock, limits, descriptions — is done in-game.
$8.49
An excellent plugin for remote trading between players with extensive functionality.
The ability to log successful trades;
The ability to create new permissions;
The ability to customize permissions flexibly, including both new and existing ones;
The ability to limit slots in trade;
The ability to configure the method(Personal, CommonMinimum, CommonMaximum) for limiting the number of slots;
The ability to set a cooldown on sending trade requests;
The ability to configure the method(InitiatorOnly, TargetOnly, Both) for applying cooldown to players;
The ability to purchase a bypass for the trade request cooldown;
The ability to set a daily limit on sending trade requests;
The ability to purchase additional trade requests after reaching the daily limit;
The ability to forbid trading when wounded;
The ability to forbid trading while swimming;
The ability to forbid trading while mounted on certain seats;
The ability to forbid trading in specified monuments, by name or by monument type;
The ability to forbid trading in someone else's building privileges;
The ability to forbid trading when taking damage;
The ability to forbid trading during a combat block;
The ability to forbid trading during a raid block;
The ability to forbid certain items from being traded;
The ability to automatically generate language files for specified languages(with content filled in English);
The ability to set an effect upon receiving a trade request;
The ability to change the effect upon a successful trade completion;
The ability to display a status bar while waiting for a trade;
The ability to choose between bar types(TimeCounter and TimeProgressCounter);
The ability to specify the order of the bar;
The ability to change the height of the bar;
The ability to customize the color and transparency of the background;
The ability to set a material for the background;
The ability to switch between CuiRawImageComponent and CuiImageComponent for the image;
The ability to get images from the local folder(*SERVER*\oxide\data\AdvancedStatus\Images);
The ability to set own image and customize the color and transparency of the image;
The ability to set sprite instead of the image;
The ability to customize the color, size and font of the text.
{
"Chat command": "trade",
"List of 'accept' commands": [
"accept",
"yes"
],
"List of 'cancel' commands": [
"cancel",
"no"
],
"Is it worth enabling GameTips for messages?": true,
"Is it worth using Notify plugins for messages instead of the vanilla UI?": false,
"Specify the regular message type for notify": 0,
"Specify the warning message type for notify": 1,
"Selected economic plugin(None, Economics, ServerRewards, IQEconomic, BankSystem)": "Economics",
"Is it worth using the AdvancedStatus plugin?": true,
"Is it worth saving trade logs to a file?": true,
"List of language keys for creating language files": [
"en"
],
"Slot limit calculation mode(Personal, CommonMinimum, CommonMaximum)": "CommonMaximum",
"Trade cooldown apply mode(InitiatorOnly, TargetOnly, Both)": "InitiatorOnly",
"Is it worth checking the target's trade cooldown?": false,
"Time in seconds given to respond to a trade request": 15.0,
"Price to skip 60 seconds of the trade request cooldown": 10.0,
"The prefab name for the effect triggered when a trade request is received": "assets/bundled/prefabs/fx/invite_notice.prefab",
"The prefab name for the effect triggered when a trade is successfully completed": "assets/prefabs/building/wall.frame.shopfront/effects/metal_transaction_complete.prefab",
"List of mount names where trading is prohibited": [
"horsesaddle",
"horsesaddlerear",
"bikedriverseat",
"bikepassengerseat",
"motorbikedriverseat",
"motorbikepassengerseat",
"modularcardriverseat",
"modularcarpassengerseatleft",
"modularcarpassengerseatright",
"modularcarpassengerseatlesslegroomleft",
"modularcarpassengerseatlesslegroomright",
"modularcarpassengerseatsidewayleft",
"miniheliseat",
"minihelipassenger",
"transporthelipilot",
"transporthelicopilot",
"attackhelidriver",
"attackheligunner",
"submarinesolodriverstanding",
"submarineduodriverseat",
"submarineduopassengerseat",
"snowmobiledriverseat",
"snowmobilepassengerseat",
"snowmobilepassengerseat tomaha",
"workcartdriver",
"locomotivedriver",
"craneoperator",
"batteringramseat",
"ballistagun.entity"
],
"Status. Bar - Display time in seconds. A value of 0 keeps it visible until the cooldown ends": 15.0,
"Status. Bar - Type(TimeProgressCounter or TimeCounter)": "TimeCounter",
"Status. Bar - Height": 26,
"Status. Bar - Order": 10,
"Status. Background - Color(Hex or RGBA)": "#EFC570",
"Status. Background - Transparency": 0.7,
"Status. Background - Material(Leave empty to disable)": "",
"Status. Image - Url": "https://gitlab.com/IIIaKa/images/-/raw/main/StatusBars/Trader_Request.png",
"Status. Image - Local(Leave empty to use Image_Url)": "Trader_Request",
"Status. Image - Sprite(Leave empty to use Image_Local or Image_Url)": "",
"Status. Image - Is raw image": false,
"Status. Image - Color(Hex or RGBA)": "#EFC570",
"Status. Image - Transparency": 1.0,
"Status. Image Outline - Color(Hex or RGBA)": "0.1 0.3 0.8 0.9",
"Status. Image Outline - Transparency": 1.0,
"Status. Image Outline - Distance(Leave empty to disable). Example '0.75 0.75'": "",
"Status. Text - Size": 12,
"Status. Text - Color(Hex or RGBA)": "#FFFFFF",
"Status. Text - Transparency": 1.0,
"Status. Text - Font(https://docs.oxidemod.com/guides/developers/basic-cui/basic-cui#fonts)": "RobotoCondensed-Bold.ttf",
"Status. Text - Offset Horizontal": 0,
"Status. Text Outline - Color(Hex or RGBA)": "#000000",
"Status. Text Outline - Transparency": 1.0,
"Status. Text Outline - Distance(Leave empty to disable)": "",
"Status. SubText - Size": 12,
"Status. SubText - Color(Hex or RGBA)": "#FFFFFF",
"Status. SubText - Transparency": 1.0,
"Status. SubText - Font": "RobotoCondensed-Bold.ttf",
"Status. SubText Outline - Color(Hex or RGBA)": "0.5 0.6 0.7 0.5",
"Status. SubText Outline - Transparency": 1.0,
"Status. SubText Outline - Distance(Leave empty to disable)": "",
"Status. Progress - Background Color(Hex or RGBA)": "1 1 1 0.15",
"Status. Progress - Background Transparency": 0.15,
"Status. Progress - Reverse": true,
"Status. Progress - Color(Hex or RGBA)": "#EFC570",
"Status. Progress - Transparency": 0.7,
"Status. Progress - OffsetMin": "0 0",
"Status. Progress - OffsetMax": "0 0",
"List of trade permissions": [
{
"Permission Name": "trader.default",
"Number of available trade slots": 3,
"Cooldown time(in seconds) before next trade": 600.0,
"Daily trade request limit. A value of 0 disables the limit": 50,
"Price to purchase a trade after exceeding the daily limit. A value of 0 disables the purchase": 5.0,
"Is it worth forbidding trade if the player is in a wounded state?": true,
"Is it worth forbidding trade if the player is swimming?": true,
"Is it worth forbidding trade if the player is mounted?": true,
"Is it worth forbidding trade if the player is in someone else's building privilege area?": true,
"Is it worth forbidding trade if the player has taken damage?": true,
"Is it worth forbidding trade if the player has combat block?": true,
"Is it worth forbidding trade if the player has raid block?": true,
"List of monuments where trade is forbidden": null,
"List of monument categories where trade is forbidden": [
"RadTown",
"RadTownWater",
"RadTownSmall",
"TunnelStation",
"Custom"
],
"List of forbidden trade items": [
"rock"
]
},
{
"Permission Name": "trader.vip",
"Number of available trade slots": 6,
"Cooldown time(in seconds) before next trade": 450.0,
"Daily trade request limit. A value of 0 disables the limit": 100,
"Price to purchase a trade after exceeding the daily limit. A value of 0 disables the purchase": 2.5,
"Is it worth forbidding trade if the player is in a wounded state?": true,
"Is it worth forbidding trade if the player is swimming?": true,
"Is it worth forbidding trade if the player is mounted?": true,
"Is it worth forbidding trade if the player is in someone else's building privilege area?": true,
"Is it worth forbidding trade if the player has taken damage?": true,
"Is it worth forbidding trade if the player has combat block?": true,
"Is it worth forbidding trade if the player has raid block?": true,
"List of monuments where trade is forbidden": null,
"List of monument categories where trade is forbidden": [
"RadTown",
"RadTownWater",
"TunnelStation"
],
"List of forbidden trade items": [
"rock"
]
},
{
"Permission Name": "realpve.vip",
"Number of available trade slots": 9,
"Cooldown time(in seconds) before next trade": 300.0,
"Daily trade request limit. A value of 0 disables the limit": 0,
"Price to purchase a trade after exceeding the daily limit. A value of 0 disables the purchase": 0.0,
"Is it worth forbidding trade if the player is in a wounded state?": false,
"Is it worth forbidding trade if the player is swimming?": false,
"Is it worth forbidding trade if the player is mounted?": false,
"Is it worth forbidding trade if the player is in someone else's building privilege area?": false,
"Is it worth forbidding trade if the player has taken damage?": false,
"Is it worth forbidding trade if the player has combat block?": false,
"Is it worth forbidding trade if the player has raid block?": false,
"List of monuments where trade is forbidden": [
"oilrig_1"
],
"List of monument categories where trade is forbidden": null,
"List of forbidden trade items": [
"rock"
]
}
],
"Version": {
"Major": 0,
"Minor": 1,
"Patch": 5
}
}
EN:
{
"CmdNotAllowed": "You do not have permission to use this command!",
"CmdPlayerNotFound": "Player '{0}' not found! You must provide the player's name or ID.",
"CmdMultiplePlayers": "Multiple players found: {0}",
"CmdEconomicsNotEnough": "Not enough funds!",
"CmdMain": "Available trade commands:\n\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>bars *boolValue*(optional)</color> - Toggle status bar display\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>*nameOrId*</color> - Send a trade request to the specified player\n<color=#D1CBCB>/trade</color> <color=#83BA7C>accept/yes</color> - Accept a pending trade request\n<color=#D1CBCB>/trade</color> <color=#DE5757>cancel/no</color> - Decline a pending or active trade\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>limits</color> - View your trade limits\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>buy limits *amount*(optional)</color> - Purchase additional trade requests\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>buy cd *amount*(optional)</color> - Purchase a 60 second(* by amount) cooldown skip\n\n--------------------------------------------------",
"CmdBarsEnabled": "Status bar display enabled!",
"CmdBarsDisabled": "Status bar display disabled!",
"CmdDailyLimitExtra": "You have exceeded the daily limit({0}) for sending trade requests!\n<size=10>However, you can buy additional requests using the <color=#D1AB9A>/trade buy limits</color> command for <color=#D1CBCB>${1}</color></size>",
"CmdDailyLimit": "You have exceeded the daily limit({0}) for sending trade requests!",
"CmdCooldownSkip": "You must wait {0} seconds before sending another trade request!\n<size=10>However, you can skip the cooldown using the <color=#D1AB9A>/trade buy cd</color> command for <color=#D1CBCB>${1}</color> per 60 seconds</size>",
"CmdCooldown": "You must wait {0} seconds before sending another trade request!",
"CmdWoundBlock": "You can't trade while wounded!",
"CmdSwimming": "You can't trade while swimming!",
"CmdMountBlock": "You can't trade while mounted here!",
"CmdBuildingBlock": "You can't trade inside someone else's base!",
"CmdDamageBlock": "You can't trade while taking damage!",
"CmdCombatBlock": "You can't trade during combat block!",
"CmdRaidBlock": "You can't trade during a raid block!",
"CmdAcceptEmpty": "You have no pending trade requests!",
"CmdAcceptOngoing": "You already have an active trade with player '<color=#D1AB9A>{0}</color>'!",
"CmdDeclineEmpty": "You have no pending or active trades!",
"CmdDecline": "Trade between you and player '<color=#D1AB9A>{0}</color>' has been canceled!",
"CmdDeclineOther": "Player '<color=#D1AB9A>{0}</color>' canceled the trade with you!",
"CmdSendSelf": "You cannot send a trade request to yourself!",
"CmdSendNoRespond": "Player '<color=#D1AB9A>{0}</color>' has not responded to your trade request!",
"CmdSendAlredyHave": "You already have a pending or active trade with player '<color=#D1AB9A>{0}</color>'!\n<size=10><color=#83BA7C>/trade yes</color> - Accept the pending trade request\n<color=#DE5757>/trade no</color> - Decline the pending or active trade</size>",
"CmdSendTargetNotAllowed": "Player '<color=#D1AB9A>{0}</color>' does not have permission to use trading!",
"CmdSendTargetAlredyHave": "Player '<color=#D1AB9A>{0}</color>' already has a pending or active trade with player '<color=#D1AB9A>{1}</color>'!",
"CmdSendTargetHasCooldown": "Player '<color=#D1AB9A>{0}</color>' has an active cooldown, {1} seconds remaining!",
"CmdSendTo": "Trade request successfully sent to player '<color=#D1AB9A>{0}</color>'.",
"CmdSendFrom": "Player '<color=#D1AB9A>{0}</color>' has sent you a trade request.\n<size=10><color=#83BA7C>/trade yes</color> - Accept the pending trade request\n<color=#DE5757>/trade no</color> - Decline the pending or active trade</size>",
"CmdPurchaseNotLimited": "You haven't reached your daily limit yet!",
"CmdPurchaseHaveExtra": "You still have {0} additional trade requests! Use them before purchasing more.",
"CmdPurchaseLimitsNotAllowed": "Purchasing additional trade requests is unavailable!",
"CmdPurchasedLimits": "You have successfully purchased <color=#D1CBCB>{0}</color> trade requests!\n<size=10>Now you have <color=#D1CBCB>{1}</color> additional trade requests</size>",
"CmdPurchaseNoCooldown": "You don't have a cooldown for sending trade requests!",
"CmdPurchaseCooldownNotAllowed": "Purchasing a cooldown skip for trade requests is not available!",
"CmdPurchasedCooldown": "You have successfully purchased a cooldown skip for <color=#D1CBCB>{0} seconds</color> for trade requests!\n<size=10>Now you need to wait <color=#D1CBCB>{1} seconds</color></size>",
"CmdMyLimits": "Your trade request limits:\n\n<color=#D1CBCB>Cooldown</color> - <color=#D1AB9A>{0} sec</color>\n<color=#D1CBCB>Daily Limit</color> - <color=#D1AB9A>{1}</color>\n\n--------------------------------------------------",
"BarInitiator": "Trade to: {0}",
"BarTarget": "Trade from: {0}",
"BarCooldown": "Trade cooldown:",
"MsgStarted": "You have started a trade with player '<color=#D1AB9A>{0}</color>'!",
"MsgCompleted": "Trade with player '<color=#D1AB9A>{0}</color>' completed successfully!",
"MsgCanceled": "Player '<color=#D1AB9A>{0}</color>' canceled the trade!"
}
RU:
{
"CmdNotAllowed": "У вас недостаточно прав для использования этой команды!",
"CmdPlayerNotFound": "Игрок '{0}' не найден! Вы должны указать имя или ID игрока.",
"CmdMultiplePlayers": "Найдено несколько игроков: {0}",
"CmdEconomicsNotEnough": "Не достаточно средств!",
"CmdMain": "Доступные команды для трейда:\n\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>bars *булевоеЗначение*(опционально)</color> - Переключение отображения статус баров\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>*имяИлиАйди*</color> - Отправить запрос на трейд указанному игроку\n<color=#D1CBCB>/trade</color> <color=#83BA7C>accept/yes</color> - Принять ожидающий запрос на трейд\n<color=#D1CBCB>/trade</color> <color=#DE5757>cancel/no</color> - Отклонить ожидающий или активный трейд\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>limits</color> - Узнать свои лимиты\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>buy limits *количество*(опционально)</color> - Докупить дополнительное количество трейд запросов\n<color=#D1CBCB>/trade</color> <color=#D1AB9A>buy cd *количество*(опционально)</color> - Купить пропуск 60 секунд(* на количество) задержки перед отправкой трейд запросов\n\n--------------------------------------------------",
"CmdBarsEnabled": "Отображение статус баров включено!",
"CmdBarsDisabled": "Отображение статус баров выключено!",
"CmdDailyLimitExtra": "Вы превысили допустимую дневную норму({0}) на отправку трейд запросов!\n<size=10>Но вы можете купить дополнительные запросы с помощью команды <color=#D1AB9A>/trade buy limits</color> за <color=#D1CBCB>{1}$</color></size>",
"CmdDailyLimit": "Вы превысили допустимую дневную норму({0}) на отправку трейд запросов!",
"CmdCooldownSkip": "Перед отправкой нового запроса на трейд вам необходимо подождать {0} секунд!\n<size=10>Но вы можете купить пропуск задержки с помощью команды <color=#D1AB9A>/trade buy cd</color> за <color=#D1CBCB>{1}$</color> за каждые 60 секунд</size>",
"CmdCooldown": "Перед отправкой нового запроса на трейд вам необходимо подождать {0} секунд!",
"CmdWoundBlock": "Вам запрещено пользоваться трейдом в предсмертном состоянии!",
"CmdSwimming": "Вам запрещено пользоваться трейдом в воде!",
"CmdMountBlock": "Вам запрещено пользоваться трейдом сидя в данном месте!",
"CmdBuildingBlock": "Вам запрещено пользоваться трейдом в чужой базе!",
"CmdDamageBlock": "Вам запрещено пользоваться трейдом при получении урона!",
"CmdCombatBlock": "Вам запрещено пользоваться трейдом во время боя!",
"CmdRaidBlock": "Вам запрещено пользоваться трейдом во время рейда!",
"CmdAcceptEmpty": "У вас нет ожидающих запросов на трейд!",
"CmdAcceptOngoing": "У вас уже есть активный трейд с игроком '<color=#D1AB9A>{0}</color>'!",
"CmdDeclineEmpty": "У вас нет ожидающих или активных трейдов!",
"CmdDecline": "Трейд между вами и игроком '<color=#D1AB9A>{0}</color>' отменён!",
"CmdDeclineOther": "Игрок '<color=#D1AB9A>{0}</color>' отменил трейд с вами!",
"CmdSendSelf": "Нельзя отправить трейд запрос самому себе!",
"CmdSendNoRespond": "Игрок '<color=#D1AB9A>{0}</color>' не ответил на ваш трейд запрос!",
"CmdSendAlredyHave": "У вас уже есть ожидающий или активный трейд с игроком '<color=#D1AB9A>{0}</color>'!\n<size=10><color=#83BA7C>/trade yes</color> - Принять ожидающий запрос на трейд\n<color=#DE5757>/trade no</color> - Отклонить ожидающий или активный трейд</size>",
"CmdSendTargetNotAllowed": "У игрока '<color=#D1AB9A>{0}</color>' недостаточно прав для использования обмена!",
"CmdSendTargetAlredyHave": "У игрока '<color=#D1AB9A>{0}</color>' уже есть ожидающий или активный трейд с игроком '<color=#D1AB9A>{1}</color>'!",
"CmdSendTargetHasCooldown": "У игрока '<color=#D1AB9A>{0}</color>' имеется активный кулдаун, осталось {1} секунд!",
"CmdSendTo": "Игроку '<color=#D1AB9A>{0}</color>' был успешно отправлен запрос на трейд.",
"CmdSendFrom": "Игрок '<color=#D1AB9A>{0}</color>' отправил вам запрос на трейд.\n<size=10><color=#83BA7C>/trade yes</color> - Принять ожидающий запрос на трейд\n<color=#DE5757>/trade no</color> - Отклонить ожидающий или активный трейд</size>",
"CmdPurchaseNotLimited": "Вы ещё не исчерпали свой дневной лимит!",
"CmdPurchaseHaveExtra": "У вас ещё есть {0} дополнительных трейд запросов! Используйте их прежде, чем покупать новые.",
"CmdPurchaseLimitsNotAllowed": "Покупка дополнительных трейд запросов недоступна!",
"CmdPurchasedLimits": "Вы успешно докупили <color=#D1CBCB>{0}</color> трейд запросов!\n<size=10>Теперь у вас <color=#D1CBCB>{1}</color> дополнительных трейд запросов</size>",
"CmdPurchaseNoCooldown": "У вас нет задержки на отправку трейд запросов!",
"CmdPurchaseCooldownNotAllowed": "Покупка пропуска задержки на трейд запросы недоступна!",
"CmdPurchasedCooldown": "Вы успешно купили пропуск на <color=#D1CBCB>{0} секунд</color> задержки для трейд запросов!\n<size=10>Теперь вам нужно подождать <color=#D1CBCB>{1} секунд</color></size>",
"CmdMyLimits": "Ваши лимиты трейд запросов:\n\n<color=#D1CBCB>Время задержки</color> - <color=#D1AB9A>{0} сек</color>\n<color=#D1CBCB>Дневной лимит</color> - <color=#D1AB9A>{1}</color>\n\n--------------------------------------------------",
"BarInitiator": "Трейд с: {0}",
"BarTarget": "Трейд от: {0}",
"BarCooldown": "Задержка трейда:",
"MsgStarted": "Вы начали трейд с игроком '<color=#D1AB9A>{0}</color>'!",
"MsgCompleted": "Трейд с игроком '<color=#D1AB9A>{0}</color>' успешно завершён!",
"MsgCanceled": "Игрок '<color=#D1AB9A>{0}</color>' отменил трейд!"
}
bars *boolValue*(optional) - Toggle status bar display.
*nameOrId* - Send a trade request to the specified player.
accept/yes - Accept a pending trade request.
cancel/no - Decline a pending or active trade.
limits - View your trade limits.
buy limits *amount*(optional) - Purchase additional trade requests.
buy cd *amount*(optional) - Purchase a 60 second(* by amount) cooldown skip.
Example:
/trade bars true
/trade iiiaka
/trade yes
/trade limits
/trade buy limits 1
/trade buy limits 0.5
Create PvE dungeons which have randomly generated rooms, hallways, NPCs, bosses, animals, automatic turrets and loot with the help of in-game portals. Give your players a new reason to gear up and fight strong enemies for great rewards when they run through our procedurally generated dungeons.
Create a dungeon event, have players buy a private dungeon or generate specific difficulty levels for your dungeons. Control how challenging, available, rewarding and visually appealing your dungeons are.
Procedural layouts, 6 set difficulty levels, custom bosses, player purchased private dungeons and configurable loot!
Why Dungeon Events?
Unlike static dungeons that can be learned by players, Dungeon Events provide a brand new layout every time you enter. Through the portal you will explore a series of interconnected rooms and corridors whilst dealing with a variety of hostiles. You will aim to clear the dungeon to gain loot and completion rewards. As a server owner this provides a flexible PvE activity that can be used multiple times within a wipe.
Main Features
Procedural Dungeons & Difficulty
Randomized dungeon generation: Dynamically created room layouts and connecting corridors make each run different.
Six predefined tiers: Easy, Normal, Medium, Hard, Nightmare, and Impossible. Rename, edit, disable, or create tiers to suit your server.
Custom difficulty per tier: Configure room count and size, enemy and loot limits, purchase cost, cooldowns, lifetime, and unlock timing after a wipe.
Flexible event delivery: Enable automatic dungeon spawns, create dungeons by admin command, or trigger them from console/RCON.
NPCs, Bosses, Animals & Turrets
Custom NPCs and bosses: Configure names, health, damage multipliers, weapons, attachments, clothing, skins, and loot.
Distinct boss encounters: Give tougher tiers more or stronger bosses, including configurable damage taken from explosions.
Dungeon animals: Add enemies such as wolves, panthers, tigers, crocodiles, and other supported animal prefabs. Configure health, damage, movement speed, detection range, and spawn chances.
Auto turrets: Configure turret counts, health, and weapons for additional threats.
Per-tier enemy limits: Build different combat experiences for introductory and high-difficulty dungeons.
Loot, Rewards & Progression
Separate loot tables for every tier: Independently configure NPC loot, boss loot, and loot container contents.
Loot control: Adjust item chances, minimum/maximum quantities, skins, custom names, and the maximum number of item types.
Combat rewards: Award Economics currency or ServerRewards points for defeating dungeon NPCs/animals, destroying turrets, and destroying loot containers.
Dungeon-clear rewards: Give additional Economics currency, ServerRewards points, or SkillTree XP when a dungeon is cleared.
SkillTree team rewards: Optionally share clear XP with eligible team members, either splitting the reward or granting the full amount to each.
Private Dungeons & Player Access
In-game purchase interface: Players can browse available dungeon tiers and purchase a run using /buydungeon.
Flexible payment options: Use Economics, ServerRewards, or a configured in-game item such as scrap.
Private access: Optionally lock entry to the dungeon owner or first entrant, while allowing teammates and friends when configured.
Tier-specific permissions: Reserve higher difficulty dungeons for selected groups or permission-based progression.
Purchase controls: Configure costs, cooldowns, active dungeon limits, and whether each tier can be purchased.
Visuals, Portals & World Integration
Custom visual themes: Select building styles, door skins, container colors, lighting, loot-container skins, and dungeon time-of-day settings.
Portal access: Players travel into and out of dungeons through linked portals.
Custom portal locations: Save locations for automatic-event portals and purchased-dungeon portals, or use supported random location selection.
Portal protection bubble: Configure protection radius, building/deployment restrictions, damage rules, and vehicle protection around portal areas.
Map markers and live UI: Display active dungeon locations, remaining time, and encounter progress.
Administration, Performance & Cleanup
Spawn validation: Apply checks for terrain, nearby entities, rocks, safe zones, monuments, and supported plugin-managed areas.
Configurable dungeon placement: Adjust dungeon height and portal placement according to your server setup.
Performance controls: Configure batched construction, entity spawning, location searches, and cleanup instead of processing everything at once.
Automated lifecycle: Remove dungeons after their configured lifetime or clear conditions; control how long abandoned or unentered dungeons remain active.
Anti-abuse rules: Block selected commands, building, deployment, and entity pickup inside dungeons; configure death handling and backpack protection.
Reset behavior: Optionally reset remaining enemies when the last player leaves or dies.
Ways to Use Dungeon Events on Your Server
Recurring world PvE events: Automatically introduce dungeons for players to discover and challenge.
Private solo or group raids: Let players spend earned currency or scrap on their own dungeon runs.
Endgame progression: Offer increasingly difficult tiers with separate enemies, reward pools, and access permissions.
PvP/PvE hybrid servers: Add challenging PvE content with configurable protections around dungeon portals.
Player Commands
Command
Description
/buydungeon
Open the dungeon purchase interface.
/buydungeon <tierName>
Purchase a specific dungeon tier.
/removedungeon
Remove your own active dungeon.
Administrator Commands
Command
Description
/createdungeon <tierName>
Create a dungeon of a selected tier.
/removeinactivedungeons
Remove inactive dungeons.
/removealldungeons
Remove all active dungeons.
/forceremovealldungeons
Force cleanup of plugin-created entities.
/de.removenearest
Remove the nearest dungeon.
/de.reloadconfig
Reload plugin configuration.
/de.toggle
Toggle dungeon purchases.
/de.addautospawn
Save your current location for automatic-event portals.
/de.addbuyspawn
Save your current location for purchased-dungeon portals.
/de.removespawn <auto|buy> [radius]
Remove a nearby saved portal position.
/de.listspawns
List custom portal positions.
/dungeons
List active dungeons.
Console / RCON
buydungeon <tierName> <playerID>
spawnrandomdungeon
spawnfixeddungeon <tierName>
spawnfixeddungeon <tierName> <playerID>
de.reloadconfig
dungeons
All default chat and console command names can be changed in the configuration.
Permissions
dungeonevents.admin
dungeonevents.buy
dungeonevents.enter
Optional tier permissions: Enable Require Permission in a tier to use its dynamically generated permission, such as dungeonevents.nightmare.
Important: When dungeon owner-locking is enabled, regular players also need dungeonevents.enter to enter permitted dungeons.
Per-Tier Loot Configuration
Each tier has separate data files, letting you create completely different reward pools for different difficulty levels.
oxide/data/DungeonEvents/<TierName>/
npc_loot.json
boss_loot.json
lootbox.json
npc_loot.json — regular NPC drops.
boss_loot.json — boss drops.
lootbox.json — dungeon loot containers.
When a tier-specific file has no loot entries, the plugin uses the default loot configuration:
oxide/data/DungeonEvents/Default_Loot.json
Integrations
Economics · ServerRewards · SkillTree · Friends · Notify · NightVision · ZoneManager · Duelist · RaidableBases · AbandonedBases · RestoreUponDeath
Integrations are used for features such as payments, rewards, friend access, notifications, time-of-day handling, and spawn/territory compatibility. Configure the integrations relevant to your server.
Developer Hooks
void OnDungeonSpawn(ulong ownerID, Vector3 position, string grid, string tierName)
void OnDungeonDespawn(ulong ownerID, Vector3 position, string grid, string tierName)
void OnDungeonWin(ulong playerID, string mapName)
Note: OnDungeonWin currently passes the tier's configured Map Name as its second argument.
Available Languages
English · Portuguese (Brazil) · German · Spanish · Russian
Bring replayable, configurable PvE raids to your Rust server with Dungeon Events. Give players new layouts to explore, tougher encounters to overcome, and reasons to keep coming back for another dungeon run.
Control the power grid stages, recycler mechanics, and powerline outputs directly from your server config. The plugin lets you easily add, edit, or remove grid stages, customize how each recycler type behaves as the grid powers up, and includes a shared Virtual Fusebox so players can contribute fuses to power the grid even on maps without a Powerplant monument.
How it works
Open the config file.
Under "Powergrid Stages", you can add new stage blocks or edit existing ones.
Under "Recyclers", you can configure powergrid-based settings for each recycler type (Green, Yellow, Red).
Under "Virtual Fuse Box", you can enable/disable the virtual fuse box feature and customize its commands.
Reload the plugin for the changes to take effect.
The plugin will automatically sort your configured stages based on the required fuses and apply them directly to the server's power grid .
You can set power to whatever you want, here I set "Powerline Available Power": 500 as an example.
Recycler Powergrid Settings
Configure how each recycler type behaves based on the current powergrid stage. For each recycler type (Green, Yellow, Red), you can control:
Required Powergrid Stage To Operate - The minimum powergrid stage required for this recycler to function. Set to 0 to allow the recycler to work regardless of powergrid state.
Required Powergrid Stage For Efficiency Override - The powergrid stage at which the custom recycling efficiency kicks in. Set to 0 to disable the efficiency override.
Recycling Efficiency Override - The recycling efficiency when the efficiency stage is reached. Value from 0.0 to 1.0 where 1.0 = 100% resource return.
Required Powergrid Stage For Duration Override - The powergrid stage at which the custom recycling duration kicks in. Set to 0 to disable the duration override.
Recycling Duration Override - The recycling speed in seconds per cycle when the duration stage is reached.
Default behavior (matching vanilla Rust):
Green recyclers — Always usable. At stage 2, efficiency is overridden to 60%. At stage 4, duration is overridden to 4.5s.
Yellow recyclers — Always usable. No powergrid-based overrides.
Red recyclers — Requires powergrid stage 4 to operate. No efficiency/duration overrides.
Chat Commands
/recyclerinfo - Look at a recycler and use this command to see its type (Green/Yellow/Red), current powergrid stage, and all powergrid-related config values applied to it. Useful for verifying your configuration is working correctly. Requires permission: powergridstages.recyclerinfo
/fusebox or /fb (or your custom alias) - Opens the virtual powergrid fusebox UI. Requires permission: powergridstages.fusebox
/fusebox reset [1/2] - Admin command to instantly clear and reset the virtual fuseboxes. Requires Admin privileges.
Useful Rust ConVars & Commands (Note: These are existing Rust convars and commands, not part of this plugin)
powergrid.enabled - If disabled power grid functionality will be disabled.
powergrid.status - A console command provides information about the current state of the server's power grid, including the active progression stage, the number of inserted fuses, and the total available electrical power. (This is a good place to go to verify the plugin applied changes properly)
powergrid.simulatepowerplantfuses - Pretend there are this many additional heavy fuses currently plugged into the power plant. Can input negative numbers to negate the effect of any currently plugged in fuses.
Default Config
{
"Virtual Fuse Box": {
"Enabled": false,
"Command": "fusebox, fb"
},
"Enable Powerline Stage Mode": true,
"Powergrid Stages": [
{
"Required Fuses": 1,
"Powerline Available Power (Only used if Powerline Stage Mode is enabled)": 15
},
{
"Required Fuses": 4,
"Powerline Available Power (Only used if Powerline Stage Mode is enabled)": 18
},
{
"Required Fuses": 10,
"Powerline Available Power (Only used if Powerline Stage Mode is enabled)": 24
},
{
"Required Fuses": 18,
"Powerline Available Power (Only used if Powerline Stage Mode is enabled)": 30
}
],
"Recyclers": {
"Green Recycler": {
"Required Powergrid Stage To Operate (0 = No Powergrid Required)": 0,
"Required Powergrid Stage For Efficiency Override (0 = No Override)": 2,
"Recycling Efficiency Override (0.0 to 1.0, 1.0 = 100% Resource Return)": 0.6,
"Required Powergrid Stage For Duration Override (0 = No Override)": 4,
"Recycling Duration Override in Seconds": 4.5
},
"Yellow Recycler": {
"Required Powergrid Stage To Operate (0 = No Powergrid Required)": 0,
"Required Powergrid Stage For Efficiency Override (0 = No Override)": 0,
"Recycling Efficiency Override (0.0 to 1.0, 1.0 = 100% Resource Return)": 0.0,
"Required Powergrid Stage For Duration Override (0 = No Override)": 0,
"Recycling Duration Override in Seconds": 0.0
},
"Red Recycler": {
"Required Powergrid Stage To Operate (0 = No Powergrid Required)": 4,
"Required Powergrid Stage For Efficiency Override (0 = No Override)": 0,
"Recycling Efficiency Override (0.0 to 1.0, 1.0 = 100% Resource Return)": 0.0,
"Required Powergrid Stage For Duration Override (0 = No Override)": 0,
"Recycling Duration Override in Seconds": 0.0
}
},
"Version": {
"Major": 1,
"Minor": 1,
"Patch": 1
}
}
$25.49
Basements lets players build underground rooms beneath their bases. Place a hatch on your foundation and dig straight down into a hidden basement with walls, ceilings, and full building privileges. Great for stashing loot, setting up secret bunkers, or just adding extra space.
Readme Link - Click Here for Instruction and Documentation
👆Highly recommend reading the FAQ section!
BUILD
Build basements easily from your tool cupboard. Just place an entrance to get started.
EXPAND
Expand your basement by drilling underground. But don't forget to bring a headlamp - its dark down there!
TRAVERSE
Place multiple entryways, building out your labyrinth of tunnels beneath your base.
DECORATE
All deployables, electricity, and storage items can be placed in your basement. Take advantage of your new space!
RAID
Nothing is safe in Rust, including your basement. If all the entrances are destroyed, then the basement is too. Any loot below will float to the surface. Protect the entrance at all costs!
API METHODS (For Plugin Developers)
// Returns true if the given entityId is part of a basement.
bool IsBasementEntity(ulong entityId)
// Returns the building ids of the basements connected to a given surface building id.
uint[] GetBasementBuildingIds(uint surfaceBuildingId)
// Returns the building ids of the surface buildings connected to a given basement building id.
uint[] GetSurfaceBuildingIds(uint basementBuildingId)
Extension Plugins
These are free plugins that add additional functionality to Basements.
BasementsManager
Provides a UI for admins to view and manage the basements on the server. Useful for debugging & fixing issues. Use with the /bm command, requires the basements.admin permission to use.
BasementsManager.cs
$27.00
🗺️ Frightful BIKINI WEENY • high-performance 2K map • 11,000 prefabs
An idea entry-level map into my 2K battle map range. Bikini Weeny is a compact, high-intensity area where roadside monuments ring the road and rail loops, connecting key points of interest. Quiet shorelines and rugged mountains open up a variety of building spots, while freshwater lakes, dense forests, rich ore veins and freezing mountain paths give players plenty to explore. This is part of the same island chain as the infamous Bwana Dik map, BIKINI WEENY brings the same chaotic energy in a tighter, more aggressive package.
Bikini Weeny, where the air is clean, the people are friendly and everyone is in love.
Custom monument the 'Deep Salt Mine' is a deadly high-risk blue/red card facility buried deep in the mountains. It’s designed to frustrate, incinerate, and thoroughly ruin your players’ day. Will they make it out with the loot… or just rage-quit after losing everything? Only time (and poor decision-making) will tell.
⚠ 100% FULLY TESTED on live humans
Network of fast level roads for rapid vehicle travel.
Handy zip-tower network to glide back to your body.
4 central established safe zones near the zipline network.
Road & railways support Convoy & ArmoredTrain mods.
Numerous buildable islands — for ocean bases to bridge to.
⚠ Required dependencies: Umod/Oxide and Rustedit DLL.
Any problems? Please advise. -- Nomad
🌴LOST in RUST https://discord.gg/THf6dGN8eW
$37.00
🗺️ Fearsome BWANA DIK • high-performance 2K map • 12,000 prefabs
Handmade from scratch and built for battle, BWANA DIK seamlessly merges town and country into one deadly warfront. Continuous road and rail networks connect major monuments, while untouched beaches and rugged mountains remain wild and free. Vast rural wilderness areas hide freshwater lakes, rich ore veins, dense forests, and treacherous snowy mountain passes. This infamous island is just one of many in the local chain — more coming soon to Codefling.
Bwana's feared custom monument 'The Crocotorium' is a dangerous high-risk blue/red card facility protected by a central SAM site and home to massive hungry lizards. Deep in a mountain valley and surrounded by lethal jungle, the Crocotorium is not for the faint of heart. Will your players conquer it… or end up on the menu?
As seen on TV...
⚠ 100% FULLY TESTED on live humans
Network of straight level roads perfect for high-speed vehicle travel.
Convenient zip-tower network to quickly glide back to your body after respawns.
4 large derelict urban centers featuring raised flyovers and established safe zones.
Road & railway system fully support popular plugins like Convoy and Armoured Train.
Numerous buildable offshore islands — ideal for ocean bases to bridge across to.
⚠ Required dependencies: Umod/Oxide and Rustedit DLL.
Any problems? Please advise. -- Nomad
LOST in RUST https://discord.gg/THf6dGN8eW
"Bwana Dik. A nice place to die, but you wouldn't want to live there."
$32.99
Welcome to Wallpaper Planner Plus — a lightweight, fast, and user-friendly extension for Rust that enhances the default wallpaper tool with a powerful custom skin selector, favourites, flexible sets, permissions, advanced admin management tools, and ongoing content updates.
As part of the Plus version, I will add new custom wallpapers every month for at least one year, giving your server a growing collection of fresh designs and more variety over time.
📐 Features
🔳 Custom UI:
Access a sleek, in-game wallpaper selector while holding the wallpaper tool. The plugin automatically handles Walls, Floors, and Ceilings, making it quick and easy to find and apply the wallpaper you want.
🎨 Wallpaper Sets:
Create custom sets by combining Walls, Floors, and Ceilings into complete themes or flexible collections.
Wallpaper Planner Plus supports two types of sets:
Presets:
A Preset contains exactly 1 Wall, 1 Floor, and 1 Ceiling. Equipping the Preset assigns all three items to the wallpaper tool at once, making it ideal for complete, ready-to-use themes.
Collections:
A Collection contains an open mix of wallpaper items. You can add multiple Walls, Floors, or Ceilings, create partial sets, or use any custom combination you want. Collections are ideal for grouping related wallpapers without requiring one item from every category.
Players can browse available Presets and Collections directly from the wallpaper UI and equip them quickly while using the wallpaper tool.
⭐ Favorites System:
Mark your favorite wallpapers and quickly switch between viewing all available skins or only your favorites.
🆕 Monthly Skin Updates:
Plus includes ongoing content updates with new custom wallpapers added every month for at least one year.
These monthly additions will expand the available collection with fresh designs for Walls, Floors, and Ceilings, giving players new options to discover and use throughout the year.
New skins can be organized into Presets and Collections, assigned to permission groups, and managed through the built-in admin tools.
🔐 Advanced Permission System:
Control exactly which wallpapers players can access.
Create custom permission groups and assign specific Wall, Floor, and Ceiling skins to each permission. Players automatically see the skins they have permission to use, while restricted skins remain hidden from the UI. This allows you to create anything from supporter rewards to staff-only, event, or special-access wallpaper collections.
🛠️ Admin Editors:
Admins can manage your wallpaper library directly through the in-game UI.
Add new custom skins
Edit existing skins
Rename wallpapers
Delete wallpapers
Create and manage Presets and Collections
Create and manage permission groups
Assign specific skins to permissions
Organise Walls, Floors, and Ceilings
No need to manually edit configuration files for everyday skin, set, and permission management.
🌐 Workshop & Custom Skins:
Use your own custom Workshop skins alongside the included wallpaper collection, giving your server complete control over the wallpapers available to players.
🎨 100% Custom
The included custom wallpapers are created specifically for use with Wallpaper Planners.
The plugin can also display official Rust/DLC wallpapers that the player actually owns, automatically filtering them based on their available ownership.
📦 Built for Server Owners
Wallpaper Planner Plus gives server owners much more control over their wallpaper system while keeping the experience simple for players.
Create your own wallpaper library, organize skins into Presets and Collections, control access with permissions, and let players quickly find the wallpapers they want.
With the Plus version, your wallpaper library will continue to grow through monthly skin updates for at least one year.
🔐 Permissions
wallpaperplannerplus.use — Grants access to the Wallpaper Planner UI.
wallpaperplannerplus.outside — Allows wallpapers to be used outside a player's base.
wallpaperplannerplus.admin — Enables the advanced admin tools for managing skins, Sets, and permissions.
Custom permissions can also be created and linked to specific wallpapers Like VIP etc etc.
💬 Chat Commands
/wallpaperplanner — Opens the custom wallpaper menu while holding the wallpaper tool.
You can also configure a custom keybind to open the UI instead.
Example: Bind to H
Open the Rust console with F1 and enter:
bind H "chat.say /wallpaperplanner"
⚡ Wallpaper Planner Plus
A complete custom wallpaper management system for Rust — fast, simple for players, powerful for admins, and continuously expanding with new skins every month for at least one year.
List of input keys to use in config that rust accepts.
BACKWARD LEFT RIGHT JUMP DUCK SPRINT USE FIRE_PRIMARY FIRE_SECONDARY RELOAD FIRE_THIRD DISABLED
DISABLE Input Key:
Server owners can now disable the UI keybind system entirely.
In the config, set:
"UI input key": "DISABLED"
This prevents the menu from opening with FIRE_THIRD, allowing admins to enforce custom binds (e.g. /wallpaperplanner only).
[ ! ] 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.
What's New
Fresh uploads, new releases, and recently updated files.
-
$17.99$14.99By MrLou_
-
$10.00$8.99By Meowhuh
-
$12.99$10.39By Meowhuh
-
$1.50$1.50By Nolifefruit
-
$20.00
By Iftebinjan
-
By Laminiia
-
$29.98
By Razor
-
$7.99$4.99By illknown
-
$4.99$3.99By crash
-
$10.00$8.50By Ionut Shiro
-
$5.00$4.25By Ionut Shiro
-
$10.00$8.50By Ionut Shiro
Highest Rated
Top-rated picks trusted and loved by the community.
-
$40.00$30.00By nivex
-
$16.99
By David
-
$40.00$31.95By Mevent
-
$29.99
By imthenewguy
-
$24.99
By LosGranada
-
$24.99
By Whispers88
-
$14.99
By Sheo
-
Free
By Steenamaroo
-
$19.99$15.99By Fruster
-
$14.99
By David
-
$45.99$36.79By Monster
Great Deals
Discounted picks, limited-time deals, and sale items worth grabbing now.
-
By Shemov
-
$24.99$19.99By SlayersRust
-
$10.00$6.50By Wrecks
-
$10.99$6.99By fullwiped
-
$9.30$7.91By Shemov
-
$8.00$4.80 -
$15.00$12.00By Razor
-
$20.00$13.00By Wrecks
-
$19.99$16.99By Mercury
-
$3.00$2.55By Ionut Shiro
-
By Shemov
-
$10.00$6.00
Latest Reviews
See what customers are saying about their experience with files.
This config really packed my leaderboard with lots of nice icons and info for the other plugins I use. Also Meowhuh is very helpful and I enjoy a lot of their plugins.
This was a well put together config that took the hassle out of doing it all by myself and most of the values worked for me so I didn't have to change much of anything besides what was preference.
This is a great pack of legendary items for the item perks legendary items plugin. All really nice skins that adds a lot of variety to my server.
These are some cool picks for skins and a nice no junk loot table that drops right into a server using better loot.
This is a great pack of epic loot and item perk items for the item perks and epic loot plugins. There are so many really cool skins and also illknown was extremely helpful with getting the config all set up and running correctly on my server. He even helped me get all 3 of the associated plugins working properly together. I definitely recommend his configs.
This is a great pack of legendary items for the item perks legendary items plugin. All really unique custom skins and also illknown was extremely helpful with getting the config all set up and running correctly on my server. He even helped me get all 3 of the associated plugins working properly together.
This is such a cool plugin for your server if you want to give players something to do whether the server is empty or not. They are pretty good out of the box but it lets you configure them to be the way that you want. Walkinrey has also fixed my concerns and works with us to fix bugs and add cool features. There are times that the bots seem really impressive and lifelike and I kind of just sit their in awe and watch what they do. Just the other day I actually nearly lost a fight to one and It g
I have been really happy with the variety of bases and the loot tables in this pack. The creator SavageBuilder has also been super helpful with the best customer service, being willing to change or modify anything upon request and made sure I was satisfied with the purchase.
Have been working on moving to Vanilla+ and have been using a few of MEVENT's plugins and they are amazing. I am pretty new to the backend of plugins and Mevent and his Team have been so helpful on Discord and god knows i have been wrecking their heads with questions and have had nothing but amazing assistance. So far our server has been loving the Ultimate Leaderboard, the online config has also been a massive help. Highly recommend.
If you are looking for something different to add to your server. THIS IS IT!! I have been waiting for something this cool!!
There is no server impact. No lag or frame drops.
My players are loving this. Once they see it, they are blowing up chat about how cool this is. They love the sounds it makes.
i highly recommend this plugin. Honestly, I would recommend any plugin by Razor!
