Complete documentation of the MajestatTopCore plugin (shown in the console as Majestat) for Rust servers running Oxide (uMod) or Carbon: installation, connecting to the rustserverlist.online network, modules, chat and RCON console commands, permissions, a full reference of the MajestatTopCore.json config and the data files. The plugin gives your server PvP and PvE statistics, XP, leaderboards in game and in the browser (/top, /fame), a web panel with a live map, a vote for next wipe's map and a /help panel with your rules — all in a single .cs file.
Author: Wo0t. Current version: 4.0.3 — download · changelog · API for plugins.
One plugin, one config. The whole system is one file,
MajestatTopCore.cs, and one flat config,oxide/config/MajestatTopCore.json. Statistics (Build/Gather/Loot), the web panel, the map, the vote, the info panel and the global network are internal modules of a single class, switched on withEnable Panel,WEB - Enable Module,VOTE - Enable ModuleandINFO - Enable Module. Version-by-version changes: Changelog.Display name vs. technical name. In the console the plugin now introduces itself as
Majestat(log prefix[Majestat], "Loaded plugin Majestat v4.0.0"). The technical class name staysMajestatTopCore, so the config file is stilloxide/config/MajestatTopCore.jsonand all internal references keep working.The startup message is a single box: name + version + database mode + number of profiles, module state from the config (
INFO,WEBwith API mode and port,VOTE) and log level. After the first connection to the global network you get the lineMajestat ready [OK][MASTER]or[OK][LOCAL]— in LOCAL mode, despite a token and integration being set, the plugin adds the reason. Network messages ([Net] …,[Update] …) appear a moment later.
Architecture#
Everything runs in one class, MajestatTopCore (display name: Majestat). Inside are modules that talk to each other through direct method calls, and to other plugins through public API_* hooks (see API).
┌────────────────────────────── Majestat (MajestatTopCore.cs) ──────────────────────────────┐
Rust hooks ───► │ CORE: player profiles, XP, XP thresholds, JSON/SQLite/MySQL database, /top, pop-ups │
(kills, gather, │ ▲ │
loot, build) │ │ API_AddStat / API_RegisterTab │
│ STATS: GATHER / LOOT / BUILD tabs │
│ │
│ WEB (HttpListener :28020) ── MAP (image + positions) ── VOTE (RustMaps) ── INFO (/help) │
│ │
│ NET: connection to the rustserverlist.online global network, verification, /global │ ──► network
└───────────────────────────────────────────────────────────────────────────────────────────┘
Rules worth knowing:
- Stats vs Fame. Every player has two sets of counters:
Stats(season, cleared by a reset) andFameStats(all time). - Two XP modes — never mixed. MASTER (verified server, rates from the global network) or LOCAL (rates from the config). Details: Full configuration → "XP source".
- The local counter always runs. Every event is counted locally; in MASTER mode statistics also go to the global network. The /top table reads local data.
- Nothing is lost without a connection. When the global network is unavailable, statistics wait locally and are sent once the connection is back.
Installing on Oxide (uMod) and Carbon#
The plugin works the same way on both frameworks — only paths and the command prefix differ:
| Oxide (uMod) | Carbon | |
|---|---|---|
| Plugin file | oxide/plugins/MajestatTopCore.cs |
carbon/plugins/MajestatTopCore.cs |
| Config | oxide/config/MajestatTopCore.json |
carbon/configs/MajestatTopCore.json |
| Data | oxide/data/ |
carbon/data/ |
| Reload | oxide.reload MajestatTopCore |
c.reload MajestatTopCore |
| Permissions | oxide.grant user <steamid> <perm> |
c.grant user <steamid> <perm> |
The rest of this documentation uses Oxide paths — on Carbon replace oxide/config with carbon/configs and oxide/data with carbon/data.
- Upload
MajestatTopCore.cstooxide/plugins/(Carbon:carbon/plugins/). Do not rename the file — it must match the class name. Delete old files if they are left over from earlier versions:MajestatStats.cs,MajestatTopBuild.cs,MajestatTopGather.cs,MajestatTopLoot.cs,MajestatTopWeb.cs,MajestatTopMap.cs,MajestatTopVote.cs,MajestatTopInfo.cs,MajestatTopNet.cs— otherwise tabs and commands get duplicated. - On first start
oxide/config/MajestatTopCore.jsonis created. Fill in at least:NET - Server ID(if the server is already listed — otherwise a second entry is created),NET - Token(global network),VOTE - RustMaps API Key(map vote) and your MySQL details (ifDatabase Mode = MYSQL). Where to get the ID and token: Connecting to the Majestat network. - Reload the plugin (
oxide.reload MajestatTopCore/c.reload MajestatTopCore) or, for the config alone,mtopcore.reloadcfg.
External dependencies:
| Needed for | What |
|---|---|
| Map images in the vote (CUI) | the ImageLibrary plugin |
| Drawing maps for the vote | a RustMaps API key (VOTE - RustMaps API Key) |
| Web panel | an open TCP port WEB - HTTP Port (default 28020) |
| Verification in the network | NET - Token + NET - Master Integration = true |
| MySQL mode | a MySQL server |
| Clan / friends chat, FF | optionally the Clans and Friends plugins (detected automatically) |
Connecting to the Majestat network — server ID and token#
First check whether your server is already listed. Public Rust servers are discovered automatically (Steam master list, A2S queries), so your server most likely already has an entry on rustserverlist.online. On first start the plugin gives itself a random ID — left like that, the same server would show up twice: once as an A2S entry and once as a plugin entry. To send plugin data to the existing entry, give the plugin that entry's ID.
The server is already listed (most common)#
-
Find your server with the search on the server list and open its profile.
-
Claim it: the "Claim this server" button on the profile (code in the server name, code in the description, or an RCON login). Once claimed, the server is on your Steam account.
-
Copy the server ID: profile → Server settings → the "Server ID (NET - Server ID)" field with the Copy button. (It is also the
id=value in the profile address.) -
In
oxide/config/MajestatTopCore.json(Carbon:carbon/configs/MajestatTopCore.json) set:"NET - Master Integration": true, "NET - Server ID (empty = auto)": "<ID copied from the profile>", "NET - Admin / Owner SteamID64": "<your SteamID64>", -
Reload the plugin (
oxide.reload MajestatTopCore/c.reload MajestatTopCore). The console shows[Net] Server ID set from config: …and shortly afterHeartbeat [OK]. From now on the same entry receives plugin data — a chart sample every minute, online players, chat, joins and leaves.
Forgot the ID? Nothing breaks. If the plugin reports with a new random ID from the same IP:port as an existing entry, the network does not create a second entry — it sends a console warning instead:
[Net] DUPLICATE: a server with this IP:port already exists in the network as ID '<id>'. To merge the entries, set "NET - Server ID (empty = auto)": "<id>" in the config and reload the plugin.Put that ID in the config and reload the plugin.
The server is not listed (private / new)#
Leave NET - Server ID empty and put your SteamID64 in NET - Admin / Owner SteamID64. The plugin registers the server with its first heartbeat and assigns it to your account. You will see the assigned ID in Server settings — it is worth writing it into the config permanently (it survives deleting the data folder).
Where to get the token (NET - Token)#
The token gives verification: the green ✓ badge, MASTER mode (XP rates from the network) and player stats in the global ranking. Without a token the plugin still works and reports the server (chart, players, chat), but in LOCAL mode.
- First link the server to the right ID (steps above) — the token is bound to the entry's ID. With a different ID the network rejects it (
401 bad token). - Go to My account → next to the server click "Request verification".
- Once the admins decide, the token arrives in Messages (My account).
- Paste it into
NET - Token, make sureNET - Master Integrationistrue, and reload the plugin. Console:[Net] Verification: VERIFIEDandMode: MASTER.
Already have two entries for the same server?#
Set NET - Server ID to the ID of the entry you want to keep (usually the claimed one, with history and comments), reload the plugin, and delete the other entry: its Server settings → Danger zone → Delete server.
Plugin modules#
Modules are parts of one plugin. They have no separate files or configs.
| Module | What it does | Config switch |
|---|---|---|
| CORE | Player profiles, XP and XP thresholds, database, kill pop-ups, friendly fire, API | always on |
| PANEL | In-game leaderboard window (/top, /fame, /gather…) and XP INFO |
Enable Panel |
| STATS | The GATHER, LOOT and BUILD tabs and their counters | always on |
| WEB | Web panel: leaderboards, profiles, chat, admin console, XP INFO, Game Info, JSON export | WEB - Enable Module |
| MAP | Live map in the web panel (rendermap image, players, events, shops) |
together with WEB |
| VOTE | Vote for next wipe's map (in game and on the web) | VOTE - Enable Module |
| INFO | /help panel / rules and a periodic chat broadcast |
INFO - Enable Module |
| NET | Global network: server status, statistics for the global ranking, /global, verification |
always on (runs in LOCAL without a token) |
Leaderboard tabs (order): PvP (0) → GATHER (10) → LOOT (15) → BUILD (20) → FAME (always last).
Columns:
- PvP: XP, PvP kills, PvP deaths, PvE deaths, Heli, Bradley, Scientists, Zombies, Animals, Friendly fire, playtime (every column has a
Show … Columnswitch) - GATHER: TOTAL, WOOD, STONE, METAL, HQM, SULFUR, SCRAP, FOOD, DIESEL
- LOOT: TOTAL, ELITE, MILITARY, HELI/APC, LOCKED, AIRDROP, UNDERWATER, FOOD, VEHICLE, CRATES, BARRELS
- BUILD: TOTAL, WALLS, FOUNDATIONS, FLOORS, ROOF, DOORS, TURRETS, TRAPS, ELECTRICAL, WATER, INDUSTRIAL
Chat commands (players and admins)#
Leaderboards and statistics (Core)#
| Command | Description |
|---|---|
/top |
Opens the leaderboard panel (PvP tab) |
/gather / /topgather |
Leaderboard — GATHER tab |
/loot / /toploot |
Leaderboard — LOOT tab |
/build / /topbuild |
Leaderboard — BUILD tab |
/fame |
Fame leaderboard (all time, PvP) |
/famepvp |
Fame on the PvP tab |
/famegather |
Fame on the GATHER tab |
/fameloot |
Fame on the LOOT tab |
/famebuild |
Fame on the BUILD tab |
/stats [nick] |
XP summary in chat. No argument = your own; with a nick = requires admin |
/xpinfo |
Table of how much XP each activity gives |
/mtopreset [confirm] |
Reset of season statistics (admin). Without confirm → a warning and 15 s to confirm |
/crateinfo |
(admin) Info about the crate/barrel you are looking at (up to 10 m): prefab, path, type, height, Loot.* category. |
/topreset |
Alias of /mtopreset (compatibility with 2.9.2) |
/fame*works only whenEnable Fame Leaderboard = true.
INFO panel / server rules (Info)#
| Command | Description |
|---|---|
/help /info /rules /regulamin |
Opens the info panel (the command list is configurable — Commands field) |
/topinfo reload |
Reloads the Info configuration without reloading the plugin (admin) |
/broadcast <text> |
Manual broadcast-style announcement in chat (admin) |
Map vote (Vote)#
| Command | Description |
|---|---|
/vote /glosuj |
Opens the vote panel for the next map (commands are configurable — Chat Commands) |
/voteadmin status |
Vote state: session, time left, maps and vote counts (admin) |
/voteadmin open |
Opens a vote manually when none is running (admin) |
/voteadmin close |
Closes the vote and picks the winner (admin) |
/voteadmin restart |
Aborts the current vote (no winner) and starts over: new maps, zero votes (admin) |
/voteadmin reroll |
Draws a new set of maps in the running vote (admin) |
The same actions are available from the server console / RCON as mtopcore.vote <action> — see Console / RCON commands → Vote.
Global network (Net)#
| Command | Description |
|---|---|
/global |
Cross-server global ranking panel (only when the server is verified with a token) |
Console / RCON commands#
Core#
| Command | Description |
|---|---|
mtopcore.reloadcfg |
Reloads the Core config. Server console / RCON only (blocked for players) |
mtopcore.reset <steamid|nick> |
Resets season statistics of one player (Fame stays). Admin/console |
mtopcore.resetall |
Resets season statistics of all players, immediately, without confirmation (Fame stays) |
mtopcore.mapdiag |
Entity/map diagnostics (Bradley, Heli, CH47, Cargo, NPCs, animals) — helps with kill classification. Admin |
mtopcore.xpdiag |
Effective XP rates and their source (MASTER / LOCAL): distance, headshot, playtime, notification mode. Shows what disables distance XP. Admin |
mtopcore.hold |
Statistics waiting to be sent to the global network (e.g. new counters the network does not accept yet). Admin |
Core — internal UI commands (called by panel buttons)#
| Command | Description |
|---|---|
majestattopcore.ui <tab> <fame0/1> <fameTab> <xpinfo0/1> |
Opens the panel on a specific tab |
majestattopcore.close |
Closes the leaderboard panel |
majestattopcore.openinfo <tab> |
Opens the embedded Info panel |
majestattopcore.openvote |
Opens the vote panel |
majestattopcore.infotab <tab> |
Switches the tab in the Info panel |
majestattopcore.closeinfo |
Closes the Info panel and returns to the leaderboard |
Info#
| Command | Description |
|---|---|
majestattopinfo.open <tab> |
Opens the Info panel |
majestattopinfo.tab <tab> |
Switches the Info tab |
majestattopinfo.dismiss <tab> |
Marks the panel as "don't show on join" for the player |
majestattopinfo.undismiss <tab> |
Undoes the above |
majestattopinfo.openurl <url> |
Shows the player a link to copy in the F1 console |
majestattopinfo.close |
Closes the Info panel |
Vote#
Managing the vote from the console / RCON (the admin does not have to join the server). From a player's console (F1) — admin or majestattopcore.voteadmin only.
| Command | Description |
|---|---|
mtopcore.vote status |
Vote state: session ID, OPEN / CLOSED / ABORTED, time left, map list (size / seed / votes, winner) |
mtopcore.vote open |
Opens a vote (when none is running). It closes on the wipe schedule; if that time has already passed — in 5 minutes |
mtopcore.vote close |
Ends the vote now and announces the winner (winner file / command / convars according to the config) |
mtopcore.vote restart |
Aborts the current vote without a winner and opens a new one: new maps from RustMaps, votes cleared, same closing time |
mtopcore.vote reroll |
Draws new maps in the running vote (votes cleared) |
Example over RCON: mtopcore.vote restart. The reply goes back to the RCON console and into the server log. The automatic schedule will not reopen a vote that was closed manually for the same wipe.
Internal UI commands (called by panel buttons):
| Command | Description |
|---|---|
majestattopvote.open |
Opens the vote panel |
majestattopvote.vote <idx> |
Casts a vote for the map with index idx |
majestattopvote.close |
Closes the vote panel |
majestattopvote.backtotop |
Closes the panel and returns to the leaderboard (majestattopcore.ui pvp) |
Net#
| Command | Description |
|---|---|
mjnet.flush |
Forces an immediate sync with the global network. Admin/console |
mtglobal.close |
Closes the global panel (internal) |
The map and the web panel have no chat/console commands of their own — they work over HTTP.
Permissions (Oxide / Carbon)#
| Permission | Grants access to |
|---|---|
majestattopcore.admin |
Statistics reset (/mtopreset, mtopcore.reset*), /stats <nick>, admin in the web panel |
majestattopcore.info |
Access to the Info panel when INFO - Require permission = true |
majestattopcore.infoadmin |
/topinfo reload, /broadcast |
majestattopcore.voteadmin |
/voteadmin |
Fix in 4.0.0 RC1: the Info and Vote permissions use the
majestattopcore.prefix (previouslymajestattopinfo.use,majestattopinfo.admin,majestattopvote.admin). Oxide requires a permission to start with the plugin name, so after the merge the old names were not registered (console:Missing plugin name prefix 'majestattopcore') and did not work. Permissions granted under the old names have to be granted again under the new ones.
Granting, e.g.:
oxide.grant user <steamid> majestattopcore.admin
oxide.grant group admin majestattopcore.admin
On Carbon: c.grant user <steamid> majestattopcore.admin (Carbon also accepts the oxide.grant commands).
The server admin flag (IsAdmin) also bypasses the restrictions.
Full configuration#
Build 4.0.0 — one plugin, one config. After the full merge the whole system is one file,
MajestatTopCore.cs, and one config,oxide/config/MajestatTopCore.json. There are no separateMajestatTopWeb.json,MajestatTopVote.json,MajestatTopInfo.jsonorMajestatTopNet.jsonfiles any more — all keys live in one flat object.JSON has no sections or separators, so you can tell which module a key belongs to by the prefix in its name: no prefix = CORE,
INFO -,WEB -,VOTE -,NET -. The order of keys in the generated file is fixed: database →Language (pl/en)→ NET (the token and Master integration are at the top because they decide the XP source) → the rest of CORE → WEB → VOTE → INFO (always last, because it contains long tabs and the broadcast). The example below is generated automatically from the code, so it matches 1:1 what the plugin writes.Migrating from the old files: on the first start of 4.0.0 the plugin creates a new
MajestatTopCore.jsonwith default values. Move your settings over from the old configs (especially MySQL details,VOTE - RustMaps API Key,NET - Token, theINFO - Tabscontents). The old config files can be deleted.
MajestatTopCore.json (full, in generation order)#
The default texts in the example (vote messages, Info tabs, broadcast) are in Polish — replace them with your own; set Language (pl/en) to "en" for an English web panel and console messages.
{
"Database Mode (JSON, SQLITE, MYSQL)": "JSON",
"MySQL Host": "localhost",
"MySQL Port": 3306,
"MySQL Database Name": "rust_stats",
"MySQL User": "root",
"MySQL Password": "password",
"Language (pl/en)": "pl",
"NET - Master Integration": true,
"NET - Token": "",
"NET - Server ID (empty = auto)": "",
"NET - Admin / Owner SteamID64": "",
"NET - Verified notice (both/broadcast/banner/off)": "both",
"NET - Icon SteamID (0 = none)": 76561199874842386,
"NET - Server type": "modded",
"NET - Wipe schedule": "monthly",
"NET - Web panel port": 28020,
"NET - Web panel URL (empty = auto)": "",
"Enable Panel": true,
"Enable Fame Leaderboard (/fame)": true,
"Leaderboard Sorting Mode (XP, PVP_KILLS, PLAY_TIME)": "XP",
"Fame Leaderboard Sorting Mode (XP, PVP_KILLS, PLAY_TIME)": "XP",
"Show Total XP Column": true,
"Show PvP Kills Column": true,
"Show PvP Deaths Column": true,
"Show PvE Deaths Column": true,
"Show Heli Kills Column": true,
"Show Bradley Kills Column": true,
"Show Scientist Kills Column": true,
"Show Zombie Kills Column": true,
"Show Animal Kills Column": true,
"Show Friendly Fire Column": true,
"Show Play Time Column": true,
"Points Per PvP Kill": 5,
"Points Per Zombie Kill": 2,
"Points Per Animal Kill": 1,
"Points Per Bradley Kill": 20,
"Points Per Heli Kill": 20,
"Points Per Scientist Kill": 3,
"Points Per Headshot (extra, PvP + Scientist/Zombie)": 2,
"Play Time - Minutes per award": 30,
"Play Time - XP per award": 1.0,
"Points Per Distance Step (extra per step; 0 = off)": 1,
"Distance Step (m) for distance XP + pop-up": 100,
"Show Distance Line In Kill Pop-up": true,
"Friendly Fire - PvP XP Penalty (0 = off)": 0,
"Friendly Fire - PvE XP Penalty (0 = off)": 0,
"Friendly Fire - Friendly NPC prefabs (substring match)": [
"waterwell_shopkeeper",
"shopkeeper",
"bandit_shopkeeper",
"missionprovider"
],
"Gather.Wood": 1.0,
"Gather.Stone": 1.0,
"Gather.Metal": 1.0,
"Gather.HQM": 1.0,
"Gather.Sulfur": 1.0,
"Gather.Food": 1.0,
"Gather.Scrap": 1.0,
"Gather.Diesel": 1.0,
"Loot.EliteCrate": 1.0,
"Loot.MilitaryCrate": 1.0,
"Loot.LockedCrate": 1.0,
"Loot.HackableCrate": 1.0,
"Loot.Airdrop": 1.0,
"Loot.UnderwaterCrate": 1.0,
"Loot.FoodCrate": 1.0,
"Loot.VehicleCrate": 1.0,
"Loot.NormalCrate": 1.0,
"Loot.Barrel": 1.0,
"Loot.Total": 1.0,
"Build.Walls": 1.0,
"Build.Foundation": 1.0,
"Build.Floors": 1.0,
"Build.Roof": 1.0,
"Build.Doors": 1.0,
"Build.Turrets": 1.0,
"Build.Traps": 1.0,
"Build.Electrical": 1.0,
"Build.Water": 1.0,
"Build.Industrial": 1.0,
"Build.Total": 1.0,
"XP - Amount per award (units per XP award)": {
"Gather.Wood": 10000.0,
"Gather.Stone": 10000.0,
"Gather.Metal": 10000.0,
"Gather.HQM": 200.0,
"Gather.Sulfur": 5000.0,
"Gather.Food": 100.0,
"Gather.Scrap": 2000.0,
"Gather.Diesel": 30.0,
"Loot.EliteCrate": 50.0,
"Loot.MilitaryCrate": 50.0,
"Loot.LockedCrate": 30.0,
"Loot.HackableCrate": 30.0,
"Loot.Airdrop": 20.0,
"Loot.UnderwaterCrate": 50.0,
"Loot.FoodCrate": 100.0,
"Loot.VehicleCrate": 50.0,
"Loot.NormalCrate": 100.0,
"Loot.Barrel": 100.0,
"Loot.Total": 100.0,
"Build.Walls": 100.0,
"Build.Foundation": 100.0,
"Build.Floors": 100.0,
"Build.Roof": 100.0,
"Build.Doors": 50.0,
"Build.Turrets": 20.0,
"Build.Traps": 20.0,
"Build.Electrical": 100.0,
"Build.Water": 100.0,
"Build.Industrial": 100.0,
"Build.Total": 100.0
},
"XP - Award notice (banner/chat/off)": "banner",
"XP - Progress bar": true,
"XP - Progress bar position Y": 0.115,
"Auto-Save Interval (seconds)": 60.0,
"Unknown NPC fallback category (animal, scientist, zombie, none)": "animal",
"Log Level (all, system, alert, none)": "system",
"Leaderboard Cache TTL (seconds)": 30.0,
"Max rows per leaderboard tab": 10,
"Number Format (none, K, M, KM)": "M",
"Number Format Decimal Places": 1,
"Show pop-up kills": true,
"Type pop-up kills (pvp, pve, all)": "all",
"Kill pop-up duration (seconds)": 4.0,
"Kill pop-up fade-in animation (seconds, 0 = off)": 0.25,
"WEB - Enable Module": true,
"WEB - Mode (json, http, both)": "both",
"WEB - HTTP Port": 28020,
"WEB - API Key (empty = no auth)": "",
"WEB - JSON Export Interval (seconds)": 30,
"WEB - Leaderboard rows per tab": 10,
"WEB - Server Type (e.g. Vanilla, Modded, PvE)": "Vanilla",
"WEB - Table Number Format (none, K, M, KM)": "KM",
"WEB - Table Number Decimal Places": 1,
"WEB - Profile XP Number Format (none, K, M, KM)": "KM",
"WEB - Profile XP Decimal Places": 2,
"WEB - Chat Auth Mode (steam, played, readonly, open)": "steam",
"WEB - Chat History Lines (0=none, -1=separate tab)": 50,
"WEB - Chat cache (ram, file)": "ram",
"WEB - Chat cache file - max lines (when cache=file)": 1000,
"WEB - Chat Web prefix in game": "[WEB]",
"WEB - Chat Web prefix color (hex)": "#4a90d9",
"WEB - Chat Session timeout (minutes)": 120,
"WEB - Chat Max message length": 200,
"WEB - Chat Rate limit (messages per minute)": 10,
"WEB - Social - Facebook URL (empty = hide)": "",
"WEB - Social - Instagram URL (empty = hide)": "",
"WEB - Social - TikTok URL (empty = hide)": "https://www.tiktok.com/@koldrix.group",
"WEB - Social - Discord URL (empty = hide)": "https://discord.gg/46QPXh5yzV",
"WEB - Social - TeamSpeak3 address host:port (empty = hide)": "voip.koldrix.com:9987",
"WEB - Social - label prefix (empty = no label)": "Sociale:",
"WEB - Map update interval (seconds)": 2.0,
"WEB - Map image refresh interval (seconds, 0=never)": 0.0,
"WEB - Map file path override (leave empty for auto-detect)": "",
"WEB - Map sea margin (units added by rendermap on each side, default 500)": 500,
"VOTE - Enable Module": true,
"VOTE - RustMaps API Key": "",
"VOTE - Map Size Min": 3000,
"VOTE - Map Size Max": 3750,
"VOTE - Map Size Step": 250,
"VOTE - Map Options": 3,
"VOTE - Use Staging Maps": false,
"VOTE - Wipe Schedule": "",
"VOTE - Read Schedule From Tags": true,
"VOTE - Wipe Weekday": 4,
"VOTE - Wipe Hour": 17,
"VOTE - Days Before Wipe": {
"monthly": 7,
"biweekly": 5,
"weekly": 3
},
"VOTE - Auto Close At Wipe": true,
"VOTE - Auto Open Window": true,
"VOTE - Close Before Wipe (minutes)": 60,
"VOTE - Save Map Images To Disk": true,
"VOTE - Allow Vote Change": true,
"VOTE - Who Can Vote (all, players)": "all",
"VOTE - Show Panel On Connect": true,
"VOTE - Show On Connect Delay (sec)": 10.0,
"VOTE - Yield To Info Panel": true,
"VOTE - Announce Winner": true,
"VOTE - Write Winner File": true,
"VOTE - Winner File": "MajestatTopVote_nextmap.json",
"VOTE - Set Convars On Winner": false,
"VOTE - Winner Command": "",
"VOTE - Chat Commands": [
"vote",
"glosuj"
],
"VOTE - Icon SteamID (0 = none)": 76561199874842386,
"VOTE - Broadcast Start": true,
"VOTE - Broadcast Interval (min)": 60,
"VOTE - Broadcast Before Open": true,
"VOTE - Broadcast Before Open (days)": 2,
"VOTE - Msg Start": "<color=#4cf>[Vote]</color> Ruszyło głosowanie na mapę! Wpisz /vote. Map do wyboru: {maps}",
"VOTE - Msg Time Left": "<color=#4cf>[Vote]</color> Do końca głosowania zostało {time}. Wpisz /vote",
"VOTE - Msg Starts In": "<color=#4cf>[Vote]</color> Głosowanie na mapę rozpocznie się za {time}.",
"VOTE - Time Show Days": true,
"VOTE - Time Show Hours": true,
"VOTE - Time Show Minutes": true,
"INFO - Enable Module": true,
"INFO - Plugin title": "INFORMACJE O SERWERZE",
"INFO - Title color (RGBA 0-1)": "0.3 0.85 1 1",
"INFO - Tab bar width (fraction)": 0.21,
"INFO - Default tab id": "rules",
"INFO - Commands (chat)": [
"help",
"info",
"rules",
"regulamin"
],
"INFO - Show on first connect (auto-open)": true,
"INFO - Show on every connect (ignore dismissed flag)": false,
"INFO - Delay on connect (seconds)": 3.0,
"INFO - Require permission (majestattopcore.info)": false,
"INFO - Tabs": [
{
"id": "rules",
"label": "Regulamin",
"icon": "📋",
"color": "0.2 0.6 0.9",
"lines": [
"…"
]
}
],
"INFO - Icon SteamID (0 = none)": 76561199874842386,
"INFO - Broadcast": {
"Enabled": true,
"Interval minutes": 15.0,
"Tag (e.g. [INFO])": "[INFO]",
"Tag color (#RRGGBB)": "#2ec4f0",
"Nick (sender name)": "Serwer",
"Nick color (#RRGGBB)": "#ffffff",
"Message text color (#RRGGBB)": "#cccccc",
"Messages (cycled in order)": [
"Wpisz /help aby zobaczyć informacje o serwerze.",
"Sprawdź rankingi wpisując /top.",
"Pamiętaj o zapoznaniu się z regulaminem (/help → Regulamin).",
"Dołącz do naszego Discorda! Link znajdziesz w /help → Kontakt."
]
}
}
CORE — field reference#
Database
| Key | Type | Default | Description |
|---|---|---|---|
Database Mode (JSON, SQLITE, MYSQL) |
string | "JSON" |
Statistics storage engine: JSON (file in oxide/data), SQLITE (local database), MYSQL (remote database — requires the MySQL fields below). |
MySQL Host |
string | "localhost" |
MySQL server address (MYSQL mode only). |
MySQL Port |
int | 3306 |
MySQL port. |
MySQL Database Name |
string | "rust_stats" |
Database name. |
MySQL User |
string | "root" |
Database user. |
MySQL Password |
string | "password" |
Database password. |
Language (pl/en) |
string | "pl" |
One language for the whole plugin (since 4.0.0): web panel headers and texts, vote messages, network (NET) messages, console command replies. Replaces the former WEB - Language…, VOTE - Language and NET - Language (pl/en) — on first start the value is carried over automatically (order: WEB → NET → VOTE) and the old keys disappear. In-game CUI texts (the /top panel, pop-ups) still go through the Lang API, i.e. follow the player's client language. |
Panel and leaderboards
| Key | Type | Default | Description |
|---|---|---|---|
Enable Panel |
bool | true |
Main switch of the in-game leaderboard panel (CUI). false = /top, /fame, /topgather, /topbuild etc. do not open the window. Statistics are still counted and saved. |
Enable Fame Leaderboard (/fame) |
bool | true |
Enables the Fame (all-time) leaderboard and the /fame* commands. |
Leaderboard Sorting Mode (XP, PVP_KILLS, PLAY_TIME) |
string | "XP" |
Sorting criterion of the season leaderboard. |
Fame Leaderboard Sorting Mode (…) |
string | "XP" |
Sorting criterion of the Fame leaderboard. |
PvP tab column visibility — every Show … Column field (bool) shows/hides one column in the PvP panel (since 4.0.0 RC1 Show Play Time Column hides the playtime column on all tabs of the in-game panel): Total XP, PvP Kills, PvP Deaths, PvE Deaths, Heli Kills, Bradley Kills, Scientist Kills, Zombie Kills, Animal Kills, Friendly Fire, Play Time. All true by default. The Show Friendly Fire Column column shows the total count of friendly fire incidents (PvP + PvE) — in the in-game panel (TOP /top) and in the web leaderboard — in red.
XP points for events (compatible with 2.9.2) — how much XP a single event adds:
| Key | Default | Description |
|---|---|---|
Points Per PvP Kill |
5 |
per player kill |
Points Per Zombie Kill |
2 |
per zombie |
Points Per Animal Kill |
1 |
per animal |
Points Per Bradley Kill |
20 |
per Bradley |
Points Per Heli Kill |
20 |
per patrol helicopter |
Points Per Scientist Kill |
3 |
per scientist |
Play Time - Minutes per award |
30 |
how many minutes of playtime per XP award (1–1440) |
Play Time - XP per award |
1 |
XP for each playtime threshold; 0 = off |
Migration: the former
Points Per 30 Min Play Time(XP per 30 min) is moved toPlay Time - XP per awardon first start and the key disappears from the file. On a verified server both playtime parameters are set by the global network. After crossing the threshold the player gets a banner or a chat message (XP - Award notice).
XP for long-range kills
For the longest measured shot at a killed victim, XP is added in proportion to the distance. Applies to PvP, scientist, zombie and animal kills (Heli/Bradley and friendly fire do not give distance XP). Formula: floor(distance / step) * rate.
| Key | Type | Default | Description |
|---|---|---|---|
Points Per Distance Step (extra per step; 0 = off) |
int | 1 |
XP for every full distance step. 0 = distance XP off (the metres line in the pop-up may still show). |
Distance Step (m) for distance XP + pop-up |
int | 100 |
Step size in metres. At 100 m: 214 m → 2 steps → +2 XP; 99 m → 0 XP; 350 m → +3 XP. |
Show Distance Line In Kill Pop-up |
bool | true |
Show the "Distance N m" + XP line in the pop-up. The line appears only when the shot gives at least 1 XP for distance (≥ one step, default ≥ 100 m). Below the threshold there is no line. |
Verified server. With
NET - Master Integration = truethe global network can set its own distance XP rate and step; if it doesn't, the plugin uses the config values. The record for the longest shot goes to the global ranking (MASTER mode only). Distance XP is always awarded locally (also in LOCAL).
Friendly fire — XP penalty for killing an ally / friendly NPC
The server can punish "shooting your own". The penalty is subtracted from the XP.Total pool (season) and from Fame, never below 0. 0 XP = feature off (the kill counts normally).
| Key | Type | Default | Description |
|---|---|---|---|
Friendly Fire - PvP XP Penalty (0 = off) |
int | 0 |
XP penalty when a player kills another player from the same team (Team), clan (Clans) or a friend (Friends). 0 = off → the kill counts as normal PvP. |
Friendly Fire - PvE XP Penalty (0 = off) |
int | 0 |
XP penalty when a player kills a friendly NPC from the list below (e.g. waterwell_shopkeeper). 0 = off → the NPC is classified as before. |
Friendly Fire - Friendly NPC prefabs (substring match) |
list\<string> | see below | Fragments of prefab names treated as friendly NPCs ("contains" match). Default: waterwell_shopkeeper, shopkeeper, bandit_shopkeeper, missionprovider. |
What happens when friendly fire is detected:
- the killer loses XP (
-N) instead of gaining it — no kill reward, - the killer sees a red pop-up "FRIENDLY FIRE!" with the victim's name, the weapon and the
-N XPpenalty, - the killer gets a
PvP.FriendlyFireorPvE.FriendlyFirecounter, - in PvP friendly fire the victim still gets
PvP.Deaths(they died) and the event goes into "last death", - on a verified server the incident is also sent to the global network.
Verified server. With
NET - Master Integration = truethe friendly fire penalties can be set by the global network (including0= FF off in the network) — like all other XP rates. If the network doesn't set them, the plugin uses the config values. The effective values and their source (MASTER / LOCAL) are shown bymtopcore.xpdiagand in the plugin log.
Where friendly fire shows up
Friendly fire appears in three places, in two forms — as an incident counter (how many times) and as XP points (penalty):
- In-game TOP (CUI) and the web leaderboard — the FRIENDLY FIRE column (red) with the total PvP + PvE incident count. Switch:
Show Friendly Fire Column. In the player's web profile (the PVP / PVE card) friendly fire is split into "players" and "NPCs". - INFO /
/xpinfo(XP table, in game and on the web) — friendly fire as XP points in the form of a-N XPpenalty (in red), in the kills section.
XP source: LOCAL vs MASTER (all or nothing)
A server has one, consistent XP mode — never mixed:
- MASTER — all XP rates come from the global network. Requirements:
NET - Master Integration = true, a validNET - Tokenand a verified server. The server then counts with the network's rates and sends player statistics to the global ranking. - LOCAL — if any of the above is not met, the whole server counts with the rates from the config and does not send player statistics to the global ranking. There is no "partly network, partly config". In LOCAL the server is still visible on the rustserverlist.online list (status, players, Pulse).
When the requirements are met again, the server switches to MASTER on its own and sends the pending player statistics. The active source is shown by the LOCAL (config) / MASTER (network) marker in the in-game and web panel, in the startup line Majestat ready [OK][MASTER|LOCAL] and in the log (in LOCAL despite a token the plugin prints the reason). The /api/xpinfo endpoint returns a source field (local/master) and a friendlyFire { pvp, pve, source } object.
XP for sources — Gather.*, Loot.*, Build.* (XP per threshold)
The field value is XP for every full threshold from
XP - Amount per award. Example:Gather.Wood = 1and threshold10000→ 1 XP for every 10,000 wood (12,000 wood = 1 XP + 2,000 progress towards the next threshold). A source without a threshold (or with threshold 1) works as before: XP for every unit — that is the default for Loot and Build. You usually change only the XP; the thresholds have sensible defaults.
Field Type Default Description XP - Amount per award (units per XP award)map see the config example How many units per XP award, per source. Missing key = 1. XP - Award notice (banner/chat/off)string bannerNotification after crossing a threshold: a banner at the top of the screen (like a kill), a chat message, or nothing. offonly withNET - Master Integration = false; with integration on,off=banner. Only sources with a threshold > 1.NET - Master Integrationbool trueOn = XP and thresholds from the global network (when the server is verified). false= your own XP settings from the config.Amounts in the notification are always effective — on a verified server they show the network threshold (e.g. 500 wood), not the local one (10,000). That way the local config does not affect what the player sees and what counts in the network.
Loot and Build have default thresholds and XP
1.0(e.g. 50 Elite Crates = 1 XP). Setting an item's XP to0turns it off; a value > 0 activates its threshold.Totals:
Loot.TotalandBuild.Totalgive XP for every threshold of crates opened / items placed of any type in total (default 100 = 1 XP). They count in parallel with the detailed items — placing a wall advances both Walls and Total. To reward only the total, set the detailed items' XP to0; to reward only the items, set the total's XP to0.Missing thresholds are filled in with defaults on start (existing ones stay). Removing a key from the map no longer turns on "XP per unit" — set threshold
1for that.|
XP - Progress bar| bool |true| A small progress bar towards the next threshold at the bottom of the screen ("8,000 / 10,000" above the bar). Disappears after 5 s without progress. | |XP - Progress bar position Y| float |0.115| Bottom edge of the bar as a fraction of the screen height (above the hotbar). Increase it if it overlaps other plugins' UI. |Where progress is stored: in
oxide/data/MajestatProgress. The file is protected — editing it or moving it from another server resets progress (gives no XP). ChangingNET - Server IDalso resets progress.On a verified server the plugin takes the threshold and XP from the global network; local values are not overwritten and are used again in LOCAL mode. Threshold progress is shared (switching MASTER → LOCAL does not reset progress). A season reset clears progress.
Updating from older versions: the existing
Gather.*field changes meaning from "XP per unit" to "XP per threshold". If you hadGather.Wood = 1(1 XP for every wood), after the update it is 1 XP per 10,000 wood. The newGather.HQMandGather.Dieselfields are added with a default of1.0— if gathering should not give XP, set them to 0.
These rates used to be hidden in the XP Sources (managed automatically) dictionary. Now they are regular config fields (type double) — you edit them directly. At 0.0 an activity gives no XP (but is still counted in statistics/leaderboards). After changing a value reload the plugin for it to take effect.
Gather.Wood,Gather.Stone,Gather.Metal,Gather.HQM,Gather.Sulfur,Gather.Food,Gather.Scrap,Gather.Diesel— XP per threshold of gathered resource.Gather.Metal= Metal Ore without HQ;Gather.HQM= HQ Metal Ore — a separate resource (HQ is not counted into Metal, neither in the statistic nor in XP).Gather.Diesel— diesel barrels from the ground, crates and nodes; outsideGather.Total. Scrap and diesel from vending machines, player boxes, the TC and player corpses are not counted; scrap from a recycler is (recycler output only).Loot.EliteCrate,Loot.MilitaryCrate,Loot.LockedCrate(Heli / Bradley),Loot.HackableCrate(Locked Crate — CH47 / Oil Rig),Loot.Airdrop,Loot.UnderwaterCrate,Loot.FoodCrate(food boxes/crates),Loot.VehicleCrate(vehicle parts),Loot.NormalCrate,Loot.Barrel— XP for opening a given type of crate/barrel.Loot.Total— XP per threshold of crates/barrels opened in total (any type).Build.Walls,Build.Foundation,Build.Floors,Build.Roof,Build.Doors,Build.Turrets,Build.Traps,Build.Electrical,Build.Water,Build.Industrial— XP for placing a given base element.Build.Total— XP per threshold of elements placed in total (any type).- The former
Build.Pipes(water + industrial together) has been split intoBuild.Water(pumps, tanks, rain catchers, purifiers, sprinklers, shower, fluid switch/splitter/combiner) andBuild.Industrial(conveyors, industrial crafter, storage adaptor, industrial splitter/combiner).doorcontrollergoes to Electrical (not Doors). OldBuild.Pipesvalues stay in the data and inBuild.Total, but the column is no longer shown.
- The former
The former
XP Sources (managed automatically)key is gone from the file — you set rates only in the fields described above.
Saving / cache / number format
| Key | Type | Default | Description |
|---|---|---|---|
Auto-Save Interval (seconds) |
float | 60.0 |
How often (in seconds) "dirty" player profiles are saved (JSON mode: one write of the whole file per cycle). |
Unknown NPC fallback category (…) |
string | "animal" |
Which category unclassified NPCs go to: animal / scientist / zombie / none. Since 4.0.2 such an NPC is sent to the network with its in-game name and the network admins assign it to the right type. Animals from the new-generation AI are recognised automatically. |
Log Level (all, system, alert, none) |
string | "system" |
all = everything (kills, gather, build + system), system = starts/registrations/updates (clean logs), alert = only errors and available updates, none = silence. |
Leaderboard Cache TTL (seconds) |
float | 30.0 |
How long leaderboard results are cached. Since 4.0.0 RC1 the leaderboard (in game and on the web) refreshes at exactly this rhythm — single events no longer clear the cache. |
Max rows per leaderboard tab |
int | 10 |
How many rows one in-game leaderboard tab shows. |
Number Format (none, K, M, KM) |
string | "M" |
Number shortening: none (123456789), K (from thousands: 1.2k), M (from millions: 1.2M), KM (both). |
Number Format Decimal Places |
int | 1 |
Decimal places when shortening (0–3). |
Removed from CORE (compared to old versions):
XP Sources (managed automatically)(replaced by the explicitGather./Loot./Build.fields),Auto-reload modules on Core reload,Auto-reload delay between modules,Auto-reload module order— after the full merge there are no separate modules to reload. Since 4.0.0 RC1 also removed from the code. With a broken config, Core makes a*.broken-YYYYMMDD-HHMMSScopy and does not overwrite the file.
NET — global network (cross-server ranking)#
| Key | Type | Default | Description |
|---|---|---|---|
NET - Token |
string | "" |
Verification token: My account → "Request verification" → it arrives in Messages. Bound to NET - Server ID; without it the server is not verified (/global unavailable). |
NET - Verified notice (both/broadcast/banner/off) |
string | "both" |
How verification is announced. |
NET - Icon SteamID (0 = none) |
ulong | 76561199874842386 |
SteamID64 whose avatar is the icon of network messages. 0 = default Rust icon. The former key NET - Chat icon SteamID64 (0 = none) — the value is carried over automatically. |
NET - Admin / Owner SteamID64 |
string | "" |
SteamID of the server owner/admin. |
NET - Server ID (empty = auto) |
string | "" |
ID of the server's entry in the network. If the server is already listed — enter the ID from its profile (Server settings → "Server ID"), otherwise a second entry is created. Empty = auto (random ID, only for servers not on the list). |
NET - Server type |
string | "modded" |
Server type reported to the network. |
NET - Wipe schedule |
string | "monthly" |
Wipe schedule: monthly / biweekly / weekly. |
NET - Web panel port |
int | 28020 |
Web panel port reported to the network. |
NET - Web panel URL (empty = auto) |
string | "" |
Public web panel address — used to build the "Web panel" link and the links to player profiles. Set it when the panel is behind a reverse proxy (e.g. Nginx Proxy Manager): enter a domain such as rust.example.com or https://rust.example.com. A bare domain gets https:// (a bare IP — http://). Empty = http://<server IP>:<NET - Web panel port>/. |
Removed from NET:
Net - Game Port— the game port is always taken fromserver.port.
WEB — web panel, chat, map#
| Key | Type | Default | Description |
|---|---|---|---|
WEB - Enable Module |
bool | true |
Web module switch. false = the HTTP server, JSON export and map do not start. |
WEB - Mode (json, http, both) |
string | "both" |
json (data file export only), http (web server only), both. |
WEB - HTTP Port |
int | 28020 |
Port of the web panel HttpListener (must be open). |
WEB - API Key (empty = no auth) |
string | "" |
Key for the API endpoints (empty = no authorization). Recommended when the web panel port is reachable from the internet. |
WEB - JSON Export Interval (seconds) |
int | 30 |
How often (in seconds) to export data to a file (json/both mode). |
WEB - Leaderboard rows per tab |
int | 10 |
How many rows in the leaderboard table on the web page. |
WEB - Server Type (e.g. Vanilla, Modded, PvE) |
string | "Vanilla" |
Server type shown on the web. |
WEB - Table Number Format (none, K, M, KM) |
string | "KM" |
Number format in web tables. |
WEB - Table Number Decimal Places |
int | 1 |
Decimal places in tables. |
WEB - Profile XP Number Format (none, K, M, KM) |
string | "KM" |
XP number format in the player profile. |
WEB - Profile XP Decimal Places |
int | 2 |
Decimal places of profile XP. |
WEB - Chat Auth Mode (steam, played, readonly, open) |
string | "steam" |
steam (Steam sign-in), played (only players who played on the server), readonly (view only), open. |
WEB - Chat History Lines (0=none, -1=separate tab) |
int | 50 |
How many chat history lines; 0 = none, -1 = separate tab. |
WEB - Chat cache (ram, file) |
string | "ram" |
Where to keep the chat cache. |
WEB - Chat cache file - max lines (when cache=file) |
int | 1000 |
Line limit with the file cache. |
WEB - Chat Web prefix in game |
string | "[WEB]" |
In-game prefix for messages from the web (admin: <prefix>[ADMIN], team: [TEAM]<prefix>). Works since 4.0.0 RC1. |
WEB - Chat Web prefix color (hex) |
string | "#4a90d9" |
Colour of the WEB prefix (admin messages are always #e07840). |
WEB - Chat Session timeout (minutes) |
int | 120 |
Web session expiry. |
WEB - Chat Max message length |
int | 200 |
Maximum length of a message from the web. |
WEB - Chat Rate limit (messages per minute) |
int | 10 |
Messages per minute limit from the web. |
WEB - Social - Facebook/Instagram/TikTok/Discord URL |
string | — | Links for the social icons (empty = hide that icon). |
WEB - Social - TeamSpeak3 address host:port |
string | voip…:9987 |
TS3 address (empty = hide). |
WEB - Social - label prefix (empty = no label) |
string | "Sociale:" |
Label before the icons (empty = no label). |
WEB - Map update interval (seconds) |
float | 2.0 |
How often to refresh positions on the web map (min. 0.5 s). Works since 4.0.0 RC1 (previously fixed at 2 s). |
WEB - Map image refresh interval (seconds, 0=never) |
float | 0.0 |
Map image refresh (0 = never). |
WEB - Map file path override (…) |
string | "" |
Manual map file path (empty = auto). |
WEB - Map sea margin (…) |
int | 500 |
Sea margin added by rendermap on each side. |
Removed from WEB:
Wipe Schedule (e.g. Co tydzien w czwartek)(the schedule in the info bar comes from the server tags:weekly/biweekly/monthly/daily). Since 4.0.0 RC1 also removed:Global PVP page URL(the GLOBAL button leads to the network's global ranking page anyway),Map Show sleeping players for adminandMap Mini-chat height (px)— they never had any effect.
VOTE — next-wipe map vote#
| Key | Type | Default | Description |
|---|---|---|---|
VOTE - Enable Module |
bool | true |
Vote switch. false = the scheduler, the /vote commands and the vote panel do not start. |
VOTE - RustMaps API Key |
string | "" |
RustMaps API key (required to draw maps). |
VOTE - Map Size Min / Max / Step |
int | 3000 / 3750 / 250 |
Range and step of the drawn map size. |
VOTE - Map Options |
int | 3 |
How many maps to choose from (2–6). |
VOTE - Use Staging Maps |
bool | false |
Whether to use staging maps. |
VOTE - Wipe Schedule |
string | "" |
Manual schedule override (monthly/biweekly/weekly; empty = auto from tags). |
VOTE - Read Schedule From Tags |
bool | true |
Read the schedule from the server tags. |
VOTE - Wipe Weekday |
int | 4 |
Wipe weekday (0 = Sun … 4 = Thu). |
VOTE - Wipe Hour |
int | 17 |
Wipe hour. |
VOTE - Days Before Wipe |
object | {monthly:7, biweekly:5, weekly:3} |
How many days before the wipe to open the vote, depending on the schedule. |
VOTE - Auto Close At Wipe |
bool | true |
Close the vote automatically at wipe. |
VOTE - Auto Open Window |
bool | true |
Open the vote window automatically. |
VOTE - Allow Vote Change |
bool | true |
Whether a player may change their vote. |
VOTE - Who Can Vote (all, players) |
string | "all" |
Who can vote: all = everyone; players = only players with a record on this server. Enforced by the plugin for the panel and for the network. |
VOTE - Show Panel On Connect |
bool | true |
Show the vote panel after joining. |
VOTE - Show On Connect Delay (sec) |
float | 10.0 |
Delay before showing the panel. |
VOTE - Yield To Info Panel |
bool | true |
Give the Info panel priority on join. |
VOTE - Announce Winner |
bool | true |
Announce the winning map. |
VOTE - Write Winner File |
bool | true |
Write the winner to a file. |
VOTE - Winner File |
string | MajestatTopVote_nextmap.json |
Name of the winner file. |
VOTE - Set Convars On Winner |
bool | false |
Set convars once the winner is picked. |
VOTE - Winner Command |
string | "" |
Command run once the winner is picked. |
VOTE - Chat Commands |
list | ["vote","glosuj"] |
Commands that open the vote panel. |
VOTE - Icon SteamID (0 = none) |
ulong | 76561199874842386 |
SteamID64 whose avatar is the icon of vote messages. 0 = default Rust icon. The former key VOTE - Icon SteamID — the value is carried over automatically. |
VOTE - Broadcast Start / Interval (min) / Before Open / Before Open (days) |
— | true / 60 / true / 2 |
Vote announcements (start, every how many minutes, notice before opening and how many days ahead). |
VOTE - Msg Start / Msg Time Left / Msg Starts In |
string | (Polish) | Message texts. Variables: {maps}, {time}. |
VOTE - Time Show Days / Hours / Minutes |
bool | true |
Which units to show in the countdown. |
INFO — /help panel / rules + broadcast#
| Key | Type | Default | Description |
|---|---|---|---|
INFO - Enable Module |
bool | true |
Info module switch. false = the /help panel and the broadcast do not start (the /help, /info, /rules, /regulamin commands are not registered). |
INFO - Plugin title |
string | "INFORMACJE O SERWERZE" |
Header of the Info window (default in Polish — e.g. "SERVER INFO"). |
INFO - Title color (RGBA 0-1) |
string | "0.3 0.85 1 1" |
Title colour (RGBA 0–1, space-separated). |
INFO - Tab bar width (fraction) |
float | 0.21 |
Width of the tab bar (fraction of the window width). |
INFO - Default tab id |
string | "rules" |
Tab opened by default (must match an id in INFO - Tabs). |
INFO - Commands (chat) |
list | ["help","info","rules","regulamin"] |
Chat commands that open the panel. |
INFO - Show on first connect (auto-open) |
bool | true |
Open the panel automatically on the player's first join. |
INFO - Show on every connect (ignore dismissed flag) |
bool | false |
true = show on every join, ignoring "don't show again". |
INFO - Delay on connect (seconds) |
float | 3.0 |
Delay of the auto-open after joining. |
INFO - Require permission (majestattopcore.info) |
bool | false |
true = the panel requires the majestattopcore.info permission. |
INFO - Tabs |
list of objects | 4 tabs | Panel tabs. Each: id, label, icon, color (RGB 0–1), lines (content). lines supports Rust rich-text tags: [b], [i], [color=#hex], [size=N], [url=…], [img]url[/img]. Empty list = 4 default tabs. |
INFO - Icon SteamID (0 = none) |
ulong | 76561199874842386 |
SteamID64 whose avatar is the icon of Info messages and the chat broadcast. 0 = default Rust icon. Until 4.0.0 this was the Avatar SteamID (…) field inside INFO - Broadcast — the value is carried over automatically. |
INFO - Broadcast |
object | — | Periodic chat announcements (described below). |
INFO - Broadcast (nested object):
| Key | Default | Description |
|---|---|---|
Enabled |
true |
Enables the broadcast. |
Interval minutes |
15.0 |
How many minutes between messages. |
Tag (e.g. [INFO]) |
"[INFO]" |
Tag prefix before the text. |
Tag color (#RRGGBB) |
"#2ec4f0" |
Tag colour. |
Nick (sender name) |
"Serwer" |
Sender name. |
Nick color (#RRGGBB) |
"#ffffff" |
Sender name colour. |
Message text color (#RRGGBB) |
"#cccccc" |
Message text colour. |
Messages (cycled in order) |
list | Messages rotated in order. |
Data files#
In oxide/data/ (Carbon: carbon/data/):
| File | What it contains | Can I edit it? |
|---|---|---|
MajestatCore.json |
Player statistics in JSON mode (season + Fame). With a broken file the plugin pauses auto-save so it does not overwrite your data with nothing | carefully, with the plugin unloaded |
MajestatCore.db |
Statistics in SQLite mode | — |
MajestatTop.json |
Data from the old 2.9.2 version — migrated once (only players missing from the new data) | — |
MajestatProgress |
Progress towards XP thresholds and incomplete playtime minutes (protected file) | no — any change resets progress for everyone |
MajestatQueue |
Statistics waiting to be sent to the global network | no |
MajestatEvents |
Events (e.g. vote, chat) waiting to be sent to the global network | no |
MajestatServerId |
Permanent server identifier in the network (overridden by NET - Server ID if set) |
no |
MajestatTopWeb.json |
Leaderboard export every WEB - JSON Export Interval (json/both mode) |
output file |
MajestatTopWeb_chat |
Web chat history (only with WEB - Chat cache = file) |
yes |
MajestatTopVote_session |
Current vote session (maps, votes, winner) | not during a vote |
MajestatTopVote_nextmap.json |
Winning map of the next wipe (name from VOTE - Winner File) |
output file |
MajestatTopVoteMaps/ |
Saved map images from the vote (mtv_<size>_<seed>.png) |
old ones can be deleted |
MajestatTopInfo_dismissed |
Players who ticked "don't show on start" in the Info panel | yes |
In MySQL mode statistics live in the majestat_stats table (keys compatible with 2.9.2) and majestat_dynamic_stats (all other keys, value = season, fame_value = Fame).
A season reset (/mtopreset, mtopcore.reset*) clears the current wipe's statistics and XP threshold progress, but Fame (all time) stays.
Performance and runtime behaviour#
| What | How often | Notes |
|---|---|---|
| Profile auto-save | Auto-Save Interval (60 s) |
JSON: one file write per cycle; SQL: queries only for changed players |
| Leaderboard cache | Leaderboard Cache TTL (30 s) |
The in-game and web leaderboard may lag by at most this much |
| Playtime → XP | every 60 s | Closing online sessions of players |
| Cleanup | every 60 s | Hit counters for the pop-up (> 90 s), counted crates (> 2 h) |
| Live map | WEB - Map update interval (2 s) |
One pass over the server's entities; off when WEB is off |
| JSON export | WEB - JSON Export Interval (30 s) |
Only json/both mode |
| Sync with the global network | every 60 s (player statistics every 5 min and when a player leaves) | Without a token — server status only |
| Update check | every 6 h | Result in the web panel footer |
Frequently asked questions (FAQ)#
Does MajestatTopCore work on Carbon?#
Yes. The plugin runs on Oxide (uMod) and Carbon without any code changes. On Carbon upload the file to carbon/plugins/; the config is in carbon/configs/MajestatTopCore.json and you reload the plugin with c.reload MajestatTopCore.
Is the plugin free?#
Yes, MajestatTopCore is free. The latest version and an archive of every release are on the Download page.
How do players open the leaderboard in game?#
With /top (PvP tab). The other tabs: /gather, /loot, /build; the all-time leaderboard: /fame. /xpinfo shows the XP table. The in-game panel can be turned off with the Enable Panel switch.
How do I reset statistics after a wipe?#
In game /mtopreset confirm (admin); from the console or RCON mtopcore.resetall for all players, or mtopcore.reset <steamid|nick> for one player. A reset clears season statistics and XP threshold progress; the Fame (all-time) leaderboard stays.
Why is my server in LOCAL mode instead of MASTER?#
MASTER mode needs three things at once: NET - Master Integration = true, a valid NET - Token and a verified server. The token is bound to the entry's ID, so it must match NET - Server ID. When something is missing, the plugin prints the reason in the console next to the Majestat ready [OK][LOCAL] line, and mtopcore.xpdiag shows the effective rates.
The web panel does not open — what should I check?#
That WEB - Enable Module = true, that the WEB - HTTP Port (default 28020) is open in the firewall and at your host, and that WEB - Mode is http or both. If the panel is behind a reverse proxy, put its public address in NET - Web panel URL so the links on the server list lead to the right place.
My server shows up on the list twice. How do I fix it?#
Set NET - Server ID to the ID of the entry you want to keep (Server settings → "Server ID"), reload the plugin and delete the other entry. Details: Connecting to the Majestat network.
Are statistics lost when the global network is unavailable?#
No. Every event is counted locally, and statistics for the global network wait in MajestatQueue and are sent once the connection is back.