Sign in with SteamReset your stats, add servers to favorites, follow the Pulse of servers and players, rate and comment, post and pin updates, edit your own servers and much more…
Sign in
Rust pluginOxideCarbonFree

MajestatTopCore Documentation

Install on Oxide or Carbon, connect to the network, chat and RCON commands, permissions, the full MajestatTopCore.json reference and FAQ.

Contents
  1. Architecture
  2. Installing on Oxide (uMod) and Carbon
  3. Connecting to the Majestat network — server ID and token
  4. The server is already listed (most common)
  5. The server is not listed (private / new)
  6. Where to get the token (NET - Token)
  7. Already have two entries for the same server?
  8. Plugin modules
  9. Chat commands (players and admins)
  10. Leaderboards and statistics (Core)
  11. INFO panel / server rules (Info)
  12. Map vote (Vote)
  13. Global network (Net)
  14. Console / RCON commands
  15. Core
  16. Core — internal UI commands (called by panel buttons)
  17. Info
  18. Vote
  19. Net
  20. Permissions (Oxide / Carbon)
  21. Full configuration
  22. MajestatTopCore.json (full, in generation order)
  23. CORE — field reference
  24. NET — global network (cross-server ranking)
  25. WEB — web panel, chat, map
  26. VOTE — next-wipe map vote
  27. INFO — /help panel / rules + broadcast
  28. Data files
  29. Performance and runtime behaviour
  30. Frequently asked questions (FAQ)
  31. Does MajestatTopCore work on Carbon?
  32. Is the plugin free?
  33. How do players open the leaderboard in game?
  34. How do I reset statistics after a wipe?
  35. Why is my server in LOCAL mode instead of MASTER?
  36. The web panel does not open — what should I check?
  37. My server shows up on the list twice. How do I fix it?
  38. Are statistics lost when the global network is unavailable?

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 with Enable Panel, WEB - Enable Module, VOTE - Enable Module and INFO - 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 stays MajestatTopCore, so the config file is still oxide/config/MajestatTopCore.json and 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, WEB with API mode and port, VOTE) and log level. After the first connection to the global network you get the line Majestat 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) and FameStats (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.

  1. Upload MajestatTopCore.cs to oxide/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.
  2. On first start oxide/config/MajestatTopCore.json is 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 (if Database Mode = MYSQL). Where to get the ID and token: Connecting to the Majestat network.
  3. 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)#

  1. Find your server with the search on the server list and open its profile.

  2. 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.

  3. 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.)

  4. 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>",
  5. Reload the plugin (oxide.reload MajestatTopCore / c.reload MajestatTopCore). The console shows [Net] Server ID set from config: … and shortly after Heartbeat [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.

  1. 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).
  2. Go to My account → next to the server click "Request verification".
  3. Once the admins decide, the token arrives in Messages (My account).
  4. Paste it into NET - Token, make sure NET - Master Integration is true, and reload the plugin. Console: [Net] Verification: VERIFIED and Mode: 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 … Column switch)
  • 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 when Enable 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 (previously majestattopinfo.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 separate MajestatTopWeb.json, MajestatTopVote.json, MajestatTopInfo.json or MajestatTopNet.json files 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.json with default values. Move your settings over from the old configs (especially MySQL details, VOTE - RustMaps API Key, NET - Token, the INFO - Tabs contents). 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 to Play Time - XP per award on 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 = true the 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 XP penalty,
  • the killer gets a PvP.FriendlyFire or PvE.FriendlyFire counter,
  • 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 = true the friendly fire penalties can be set by the global network (including 0 = 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 by mtopcore.xpdiag and 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 XP penalty (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 valid NET - Token and 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 = 1 and threshold 10000 → 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 banner Notification after crossing a threshold: a banner at the top of the screen (like a kill), a chat message, or nothing. off only with NET - Master Integration = false; with integration on, off = banner. Only sources with a threshold > 1.
NET - Master Integration bool true On = 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 to 0 turns it off; a value > 0 activates its threshold.

Totals: Loot.Total and Build.Total give 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 to 0; to reward only the items, set the total's XP to 0.

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 1 for 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). Changing NET - Server ID also 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 had Gather.Wood = 1 (1 XP for every wood), after the update it is 1 XP per 10,000 wood. The new Gather.HQM and Gather.Diesel fields are added with a default of 1.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; outside Gather.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 into Build.Water (pumps, tanks, rain catchers, purifiers, sprinklers, shower, fluid switch/splitter/combiner) and Build.Industrial (conveyors, industrial crafter, storage adaptor, industrial splitter/combiner). doorcontroller goes to Electrical (not Doors). Old Build.Pipes values stay in the data and in Build.Total, but the column is no longer shown.

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 explicit Gather./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-HHMMSS copy 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 from server.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 admin and Map 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.

Content last updated: