Check report MiX Server Pack v0.9.50
What an automated read of this exact file found. It is a list of facts about the code, not a safety verdict. Read it, then read the config, then test on a throwaway server.
Compile check
Compiled on the live game box against Rust build 25670169 (game files dated 2026-10-02, Carbon files dated 2026-10-01), 2026-10-02 (6 days ago). "Without shims" means the plugin does not lean on Carbon's compatibility layer for APIs the game has removed, which is the version most likely to keep working after the next Rust update and to run on Oxide.
MixCore.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnLootEntity | 3617 | nothing heavy found |
OnPlayerDeath | 3623 | nothing heavy found |
OnEntityDeath | 5254 | nothing heavy found |
OnDispenserGather | 5294 | nothing heavy found |
MixGovern.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnPlayerDeath | 794 | nothing heavy found |
OnPlayerInput | 841 | nothing heavy found |
OnRunPlayerMetabolism | 1129 | nothing heavy found |
OnEntityTakeDamage | 1510 | nothing heavy found |
Walks every entity on the server: 1 place.
MixCommerce.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
MixWorld.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityKill | 178 | nothing heavy found |
OnLootEntity | 579 | nothing heavy found |
OnPlayerDeath | 915 | nothing heavy found |
Walks every entity on the server: 1 place.
MixWorldTune.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntitySpawned | 488 | nothing heavy found |
OnDispenserGather | 544 | nothing heavy found |
OnDispenserBonus | 552 | nothing heavy found |
OnCollectiblePickup | 560 | nothing heavy found |
OnEntityKill | 587 | nothing heavy found |
OnEntityKill | 588 | nothing heavy found |
Walks every entity on the server: 2 places.
MixHud.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntitySpawned | 377 | nothing heavy found |
OnEntitySpawned | 378 | nothing heavy found |
OnEntitySpawned | 379 | nothing heavy found |
OnEntitySpawned | 380 | nothing heavy found |
OnEntitySpawned | 381 | nothing heavy found |
OnEntityKill | 382 | nothing heavy found |
OnEntityKill | 383 | nothing heavy found |
OnEntityKill | 384 | nothing heavy found |
OnEntityKill | 385 | nothing heavy found |
OnEntityKill | 386 | nothing heavy found |
Walks every entity on the server: 2 places.
MixUiFix.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnPlayerSleepEnded | 128 | nothing heavy found |
OnLootEntity | 134 | nothing heavy found |
MixImages.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
MixPackAssetsShim.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
MixModsConnectUI.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnPlayerDeath | 656 | nothing heavy found |
OnPlayerSleepEnded | 664 | nothing heavy found |
TimeOfDay.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
SimpleFurnaces.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityKill | 64 | nothing heavy found |
CanMoveItem | 72 | nothing heavy found |
MixAdminMove.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnPlayerInput | 288 | nothing heavy found |
MixCarbonLeakGuard.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
Walks every entity on the server: 1 place.
MixShopfront.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityTakeDamage | 837 | nothing heavy found |
Walks every entity on the server: 1 place.
MixBounty.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnPlayerDeath | 553 | nothing heavy found |
MixVote.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
MixMyMini.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityKill | 118 | nothing heavy found |
MixAutoDoor.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityKill | 142 | nothing heavy found |
MixAsk.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
MixEvents.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityTakeDamage | 595 | nothing heavy found |
OnEntityDeath | 914 | nothing heavy found |
OnLootEntity | 936 | nothing heavy found |
Walks every entity on the server: 1 place.
MixNotices.cs
- With Carbon's shims: compiles
- Without shims: compiles
No hot-path hooks registered.
MixSettlers.cs
- With Carbon's shims: compiles
- Without shims: compiles
Hot-path hooks (these run very often; what each one does inside):
| Hook | Line | Does |
|---|---|---|
OnEntityDeath | 332 | nothing heavy found |
OnEntityKill | 343 | nothing heavy found |
Repeating timers under one second: 0.25 s.
SHA-256 of this file
a4792b836166ecd3675b0dd2175498ac0bb6fdc66df12dba7ec0f1d6089f17c9
Hooks it registers 42
Findings 144
Network 12
| Level | What | Where | Line |
|---|---|---|---|
| note | Oxide/Carbon web request | plugins/MixCore.cs:5229 | webrequest.Enqueue(url, payload, (code, response) => |
| look | outbound network use | plugins/MixImages.cs:192 | using var www = UnityWebRequest.Get(url); |
| look | outbound network use | plugins/MixImages.cs:198 | if (www.result != UnityWebRequest.Result.Success) |
| note | URL in source | plugins/MixModsConnectUI.cs:23 | private const string CdnBase = "https://mixapps.store"; |
| note | URL in source | plugins/MixVote.cs:29 | public string ApiUrl = "https://rust-servers.net/api/"; |
| note | Oxide/Carbon web request | plugins/MixVote.cs:218 | webrequest.Enqueue(url, null, (code, body) => |
| note | Oxide/Carbon web request | plugins/MixVote.cs:246 | webrequest.Enqueue(url, null, (code, body) => |
| note | URL in source | plugins/MixAsk.cs:30 | public string ApiUrl = "https://mixapps.store/api/mixask/ask.php"; |
| note | URL in source | plugins/MixAsk.cs:64 | if (string.IsNullOrWhiteSpace(_config.ApiUrl)) _config.ApiUrl = "https://mixapps.store/api/mixask/ask.php"; |
| note | Oxide/Carbon web request | plugins/MixAsk.cs:170 | webrequest.Enqueue(_config.ApiUrl, body, (code, response) => OnAskReply(userId, question, code, response), |
| note | URL in source | plugins/MixEvents.cs:49 | public string ApiUrl = "https://mixapps.store/api/mixevents/ingest.php"; |
| note | Oxide/Carbon web request | plugins/MixEvents.cs:1257 | webrequest.Enqueue(_config.ApiUrl, body, (code, response) => |
Files and server config 6
| Level | What | Where | Line |
|---|---|---|---|
| note | file system write or delete | plugins/MixCore.cs:765 | Directory.CreateDirectory(dir); |
| note | file system write or delete | plugins/MixCore.cs:767 | File.Copy(live, dest, true); |
| note | file system write or delete | plugins/MixGovern.cs:1713 | Directory.CreateDirectory(dir); |
| note | file system write or delete | plugins/MixGovern.cs:1715 | File.Copy(live, dest, true); |
| note | file system write or delete | plugins/MixCommerce.cs:1626 | Directory.CreateDirectory(dir); |
| note | file system write or delete | plugins/MixCommerce.cs:1628 | File.Copy(live, dest, true); |
Steam IDs and admin 89
| Level | What | Where | Line |
|---|---|---|---|
| note | changes or checks admin status | plugins/MixCore.cs:112 | if (!IsAdmin(player)) { player.ChatMessage("<color=#f87171>MixCore</color>: mixcore.sfxtest is staff only"); return; } |
| note | changes or checks admin status | plugins/MixCore.cs:742 | if (arg.Connection != null && !IsAdmin(arg.Player())) { arg.ReplyWith("MixCore: mixcore.resetconfig is staff only"); return; } |
| note | changes or checks admin status | plugins/MixCore.cs:779 | if (arg.Connection != null && !IsAdmin(arg.Player())) { arg.ReplyWith("MixCore: mixpack.reload is staff only"); return; } |
| note | changes or checks admin status | plugins/MixCore.cs:900 | if (IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:1292 | if (!IsAdmin(requestingAdmin)) |
| note | changes or checks admin status | plugins/MixCore.cs:1312 | player.SetPlayerFlag(BasePlayer.PlayerFlags.IsAdmin, true); |
| note | changes or checks admin status | plugins/MixCore.cs:1313 | player.net.connection.authLevel = 2; |
| note | changes or checks admin status | plugins/MixCore.cs:2386 | if (pluginName == "MixCommerce" && IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:3149 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:3151 | var auth = player.net?.connection?.authLevel ?? 0; |
| note | changes or checks admin status | plugins/MixCore.cs:3171 | if (!IsAdmin(player)) { player.ChatMessage("<color=#f87171>MixPack</color>: debug is staff only"); return; } |
| note | changes or checks admin status | plugins/MixCore.cs:3192 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:3193 | player.ChatMessage($"<color=#4ade80>UI debug</color>: admin={admin} · mixpack.admin={permission.UserHasPermission(player.UserIDString, PermAdmin)} · IsAdmin={pl |
| note | changes or checks admin status | plugins/MixCore.cs:3206 | if (!IsAdmin(player)) { player.ChatMessage("<color=#f87171>MixPack</color>: debug is staff only"); return; } |
| note | changes or checks admin status | plugins/MixCore.cs:3213 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:3214 | player.ChatMessage($"<color=#4ade80>UI debug</color>: {(IsUiDebug(player.userID) ? "ON" : "OFF")} · staff={admin} · perm={permission.UserHasPermission(player.Us |
| note | changes or checks admin status | plugins/MixCore.cs:3497 | if (player == null || !IsAdmin(player)) return; |
| note | changes or checks admin status | plugins/MixCore.cs:3638 | "tune" => IsAdmin(player) ? "tune.main" : null, |
| note | changes or checks admin status | plugins/MixCore.cs:3644 | "world" => IsAdmin(player) ? "world.admin" : "world.guide", |
| note | changes or checks admin status | plugins/MixCore.cs:3645 | "arena" => IsAdmin(player) ? "arena.admin" : "arena.events", |
| note | changes or checks admin status | plugins/MixCore.cs:3661 | else if (!IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:3671 | else if (!IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:3679 | if (mod is "govern" or "tune" && !IsAdmin(player) && !(mod == "govern" && GovernStaff(player))) |
| note | changes or checks admin status | plugins/MixCore.cs:3734 | public bool API_IsPackStaff(BasePlayer player) => IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:3828 | if (!playerPack && !IsAdmin(player) && !(packKey == "govern" && GovernStaff(player))) |
| note | changes or checks admin status | plugins/MixCore.cs:3840 | "world" => IsAdmin(player) ? "world.admin" : "world.guide", |
| note | changes or checks admin status | plugins/MixCore.cs:3851 | private bool IsAdmin(BasePlayer player) => |
| note | changes or checks admin status | plugins/MixCore.cs:3854 | || (!_noclipElevated.Contains(player.userID) && (player.IsAdmin || (player.net?.connection?.authLevel ?? 0) >= 2)) |
| note | changes or checks admin status | plugins/MixCore.cs:3859 | if (IsAdmin(player)) return true; |
| note | changes or checks admin status | plugins/MixCore.cs:3889 | IsAdmin(player) || plugins.Find("MixGovern")?.Call("API_IsStaff", player) is true; |
| note | changes or checks admin status | plugins/MixCore.cs:3987 | player != null && (IsAdmin(player) || permission.UserHasPermission(player.UserIDString, PermUse)); |
| note | changes or checks admin status | plugins/MixCore.cs:4002 | ("tune", "Tune", IsPluginLoaded("MixWorldTune") && IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:4017 | if (_config.ModManager.Enabled && IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:4094 | if (!IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixCore.cs:4144 | .Where(t => t.IsEnabled(player) && (!t.AdminOnly || IsAdmin(player))) |
| note | changes or checks admin status | plugins/MixCore.cs:4187 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:4265 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:4428 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixCore.cs:4701 | var admin = IsAdmin(player); |
| note | changes or checks admin status | plugins/MixGovern.cs:50 | private readonly Dictionary<ulong, (bool hadAdmin, uint authLevel)> _noclipRestore = new(); |
| note | changes or checks admin status | plugins/MixGovern.cs:1149 | return player.IsAdmin || (player.net?.connection?.authLevel ?? 0) >= 2; |
| note | changes or checks admin status | plugins/MixGovern.cs:1157 | _noclipRestore[player.userID] = (player.IsAdmin, conn.authLevel); |
| note | changes or checks admin status | plugins/MixGovern.cs:1160 | player.SetPlayerFlag(BasePlayer.PlayerFlags.IsAdmin, true); |
| note | changes or checks admin status | plugins/MixGovern.cs:1161 | conn.authLevel = 2; |
| note | changes or checks admin status | plugins/MixGovern.cs:1173 | conn.authLevel = restore.authLevel; |
| note | changes or checks admin status | plugins/MixGovern.cs:1174 | player.SetPlayerFlag(BasePlayer.PlayerFlags.IsAdmin, restore.hadAdmin); |
| note | changes or checks admin status | plugins/MixGovern.cs:1313 | var auth = _noclipRestore.TryGetValue(userId, out var before) ? before.authLevel : target.net.connection.authLevel; |
| note | changes or checks admin status | plugins/MixGovern.cs:1316 | if (target.IsDeveloper) |
| note | changes or checks admin status | plugins/MixGovern.cs:3105 | if (_noclipRestore.TryGetValue(player.userID, out var before)) return before.hadAdmin || before.authLevel >= 2; |
| note | changes or checks admin status | plugins/MixGovern.cs:3106 | return player.IsAdmin || (player.net?.connection?.authLevel ?? 0) >= 2; |
| note | changes or checks admin status | plugins/MixCommerce.cs:2708 | player != null && (player.IsAdmin |
| note | changes or checks admin status | plugins/MixCommerce.cs:2709 | || (player.net?.connection?.authLevel ?? 0) >= 2 |
| note | changes or checks admin status | plugins/MixWorld.cs:266 | if (!IsAdmin(player)) { DenyAdmin(player); return; } |
| note | changes or checks admin status | plugins/MixWorld.cs:302 | if (!IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixWorld.cs:338 | if (!IsAdmin(player)) { DenyAdmin(player); return; } |
| note | changes or checks admin status | plugins/MixWorld.cs:346 | private bool MayQuicksort(BasePlayer player) => player != null && (permission.UserHasPermission(player.UserIDString, PermUse) || IsAdmin(player)); |
| note | changes or checks admin status | plugins/MixWorld.cs:349 | player != null && (permission.UserHasPermission(player.UserIDString, PermUse) || IsAdmin(player)); |
| note | changes or checks admin status | plugins/MixWorld.cs:353 | private bool IsAdmin(BasePlayer player) |
| note | changes or checks admin status | plugins/MixWorld.cs:356 | if (player.IsAdmin || (player.net?.connection?.authLevel ?? 0) >= 2) return true; |
| note | changes or checks admin status | plugins/MixWorld.cs:383 | if (IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixWorld.cs:471 | if (IsAdmin(player)) |
| note | changes or checks admin status | plugins/MixWorld.cs:479 | if (!IsAdmin(player)) { DenyAdmin(player); return; } |
| note | changes or checks admin status | plugins/MixWorld.cs:513 | if (!IsAdmin(player)) { DenyAdmin(player); return; } |
| note | changes or checks admin status | plugins/MixWorldTune.cs:982 | if (player.IsAdmin || (player.net?.connection?.authLevel ?? 0) >= 2) return true; |
| note | changes or checks admin status | plugins/MixHud.cs:459 | p != null && (p.IsAdmin || (p.net?.connection?.authLevel ?? 0) >= 2 || permission.UserHasPermission(p.UserIDString, PermAdmin)); |
| note | changes or checks admin status | plugins/MixUiFix.cs:164 | var notes = RestoreControls(player, blind: player.IsAdmin); |
| note | changes or checks admin status | plugins/MixUiFix.cs:179 | var notes = RestoreControls(player, blind: player.IsAdmin); |
| note | changes or checks admin status | plugins/MixUiFix.cs:190 | if (arg.Player() != null && !arg.Player().IsAdmin) { arg.ReplyWith("MixUiFix: mixui.fixall is admin only"); return; } |
| note | changes or checks admin status | plugins/MixUiFix.cs:275 | if (!quiet && player.IsAdmin) ReleaseGovernState(player, notes); |
| note | changes or checks admin status | plugins/MixModsConnectUI.cs:635 | if (player.IsAdmin && !string.IsNullOrWhiteSpace(_config.AdminConnectHint)) |
| note | changes or checks admin status | plugins/TimeOfDay.cs:171 | (player.net?.connection?.authLevel ?? 0) >= authLevelThreshold); |
| note | changes or checks admin status | plugins/TimeOfDay.cs:177 | return player != null ? IsStaff(player, authLevelThreshold) : arg.Connection.authLevel >= authLevelThreshold; |
| note | changes or checks admin status | plugins/MixAdminMove.cs:151 | if (player.IsAdmin || (player.net?.connection?.authLevel ?? 0) >= 1) return true; |
| note | changes or checks admin status | plugins/MixCarbonLeakGuard.cs:217 | if (arg.Connection?.player is not BasePlayer caller || caller.IsAdmin) return true; |
| note | changes or checks admin status | plugins/MixShopfront.cs:935 | private bool IsAdmin(BasePlayer player) => |
| note | changes or checks admin status | plugins/MixShopfront.cs:936 | player != null && (player.IsAdmin || permission.UserHasPermission(player.UserIDString, PermAdmin)); |
| note | changes or checks admin status | plugins/MixShopfront.cs:941 | if (!IsAdmin(player)) { player.ChatMessage("Shopfront: admin only."); return; } |
| note | changes or checks admin status | plugins/MixShopfront.cs:1024 | if (arg.Player() != null && !IsAdmin(arg.Player())) { arg.ReplyWith("Shopfront: admin only"); return; } |
| note | changes or checks admin status | plugins/MixShopfront.cs:1030 | if (arg.Player() != null && !IsAdmin(arg.Player())) { arg.ReplyWith("Shopfront: admin only"); return; } |
| note | changes or checks admin status | plugins/MixShopfront.cs:1077 | if (arg.Player() != null && !IsAdmin(arg.Player())) { arg.ReplyWith("Shopfront: admin only"); return; } |
| note | changes or checks admin status | plugins/MixBounty.cs:913 | case "clear" when !IsAdmin(player): |
| note | changes or checks admin status | plugins/MixBounty.cs:914 | case "expire" when !IsAdmin(player): |
| note | changes or checks admin status | plugins/MixBounty.cs:956 | private bool IsAdmin(BasePlayer player) => |
| note | changes or checks admin status | plugins/MixBounty.cs:957 | player != null && (player.IsAdmin || permission.UserHasPermission(player.UserIDString, PermAdmin)); |
| note | changes or checks admin status | plugins/MixEvents.cs:973 | return permission.UserHasPermission(id, PermAdmin) || permission.UserHasPermission(id, "mixpack.admin") || (BasePlayer.FindByID(userId)?.IsAdmin ?? false); |
| note | changes or checks admin status | plugins/MixEvents.cs:1272 | private bool IsAdmin(BasePlayer player) => |
| note | changes or checks admin status | plugins/MixEvents.cs:1273 | player != null && (player.IsAdmin || permission.UserHasPermission(player.UserIDString, PermAdmin)); |
| note | changes or checks admin status | plugins/MixEvents.cs:1292 | if (!IsAdmin(player)) { OpenBoard(player, "main"); return; } |
| note | changes or checks admin status | plugins/MixNotices.cs:90 | if (arg.Connection?.player is BasePlayer caller && !caller.IsAdmin) { arg.ReplyWith("mixnotices.now: admin only"); return; } |
Game control 21
| Level | What | Where | Line |
|---|---|---|---|
| note | runs console commands or stops the server | plugins/MixCore.cs:1308 | ConsoleSystem.Run(ConsoleSystem.Option.Server.Quiet(), $"ownerid {userId} \"{name}\" \"Owner\""); |
| note | repeating timer | plugins/MixCore.cs:808 | timer.Every(60f, AccruePlaytimePoints); |
| note | repeating timer | plugins/MixCore.cs:2989 | _statusHudTimer = timer.Every(interval, RefreshStatusHudForAll); |
| note | repeating timer | plugins/MixGovern.cs:678 | timer.Every(60f, OnScheduleTick); |
| note | repeating timer | plugins/MixGovern.cs:679 | timer.Every(120f, PurgeExpiredModeration); |
| note | Harmony patch | plugins/MixWorldTune.cs:31 | private Harmony _harmony; |
| note | Harmony patch | plugins/MixWorldTune.cs:97 | _harmony = new Harmony(HarmonyId); |
| note | Harmony patch | plugins/MixWorldTune.cs:103 | PrintWarning($"MixWorldTune: Harmony patching failed, recycler and craft speed settings are inactive: {ex.Message}"); |
| note | runs console commands or stops the server | plugins/MixHud.cs:611 | _queued = ServerMgr.Instance?.connectionQueue?.Queued ?? 0; |
| note | repeating timer | plugins/MixHud.cs:341 | _drawTimer = timer.Every(_refresh, () => Redraw(false)); |
| note | repeating timer | plugins/MixHud.cs:633 | _tipTimer = _cfg.ShowTips && _cfg.Tips.Count > 1 ? timer.Every(_tipInterval, NextTip) : null; |
| note | runs console commands or stops the server | plugins/MixImages.cs:181 | ServerMgr.Instance.StartCoroutine(DownloadAndStore(url, key, skinId, slot)); |
| note | repeating timer | plugins/MixCarbonLeakGuard.cs:69 | _sweepTimer = timer.Every(_config.IntervalSeconds, RunSweeps); |
| note | repeating timer | plugins/MixBounty.cs:251 | timer.Every(300f, ExpireSweep); |
| note | repeating timer | plugins/MixVote.cs:100 | timer.Every(_config.ReminderIntervalMinutes * 60f, () => { foreach (var p in players.Connected) CheckAll(p, false, remind: true); }); |
| note | repeating timer | plugins/MixEvents.cs:318 | timer.Every(1f, Tick); |
| note | repeating timer | plugins/MixEvents.cs:319 | if (_config.AutoStartMinutes > 0) timer.Every(60f, AutoStart); |
| note | repeating timer | plugins/MixEvents.cs:320 | timer.Every(Mathf.Max(60f, _config.SyncMinutes * 60f), () => Sync("timer")); |
| note | repeating timer | plugins/MixNotices.cs:66 | _ticker = timer.Every(_config.IntervalMinutes * 60f, Tick); |
| note | repeating timer | plugins/MixSettlers.cs:141 | timer.Repeat(0.25f, queue.Count, () => RespawnNext(queue)); |
| note | repeating timer | plugins/MixSettlers.cs:143 | timer.Every(GrowSeconds, Grow); |
Config writes 15
| Level | What | Where | Line |
|---|---|---|---|
| note | writes the config file | plugins/MixCore.cs:749 | SaveConfig(); |
| note | writes the config file | plugins/MixCore.cs:1245 | SaveConfig(); |
| note | writes the config file | plugins/MixGovern.cs:1699 | SaveConfig(); |
| note | writes the config file | plugins/MixGovern.cs:3708 | if (apply && changed > 0) SaveConfig(); |
| note | writes the config file | plugins/MixCommerce.cs:1612 | SaveConfig(); |
| note | writes the config file | plugins/MixWorld.cs:520 | SaveConfig(); |
| note | writes the config file | plugins/MixHud.cs:1427 | else if (changed) SaveConfig(); |
| note | writes the config file | plugins/TimeOfDay.cs:503 | SaveConfig(); |
| note | writes the config file | plugins/TimeOfDay.cs:524 | SaveConfig(); |
| note | writes the config file | plugins/MixVote.cs:51 | protected override void LoadDefaultConfig() { _config = new VoteConfig(); SaveConfig(); } |
| note | writes the config file | plugins/MixEvents.cs:537 | if (changed && !_configBroken) { SaveConfig(); Puts("host spots converted to monument-relative and written to MixEvents.json"); } |
| note | writes the config file | plugins/MixEvents.cs:1313 | SaveConfig(); |
| note | writes the config file | plugins/MixEvents.cs:1323 | SaveConfig(); |
| note | writes the config file | plugins/MixEvents.cs:1391 | SaveConfig(); |
| note | writes the config file | plugins/MixEvents.cs:1413 | SaveConfig(); |
Processes and native code 1
| Level | What | Where | Line |
|---|---|---|---|
| note | reads process information | plugins/MixCarbonLeakGuard.cs:126 | using var proc = System.Diagnostics.Process.GetCurrentProcess(); |
"blocks": the file is not served until a person looks. "look": worth reading the line. "note": common in honest plugins (a URL, a config write); listed so you know it is there.
What was checked
Outbound network use and URLs, Discord webhooks, process and shell use, native imports, dynamic assembly loading and code generation, unsafe blocks, Base64 decoding and long encoded literals, file writes and deletes, server config and RCON references, hardcoded Steam IDs, admin flag changes, Harmony patches, console commands and server stops, repeating timers, config writes, and the hook names registered. The compile check above builds the file on the live game box against the current Rust and Carbon files, publicized the way Carbon does at boot, with Carbon's compat shims and without them. Not checked: whether the logic is correct or kind, or whether the config it ships with points anywhere.
Versions
| Version | Kind | Size | Findings | Status | Uploaded |
|---|---|---|---|---|---|
| 0.9.59 current | upload | 47.9 MB | 478 | checked | 2026-10-02 (6 days ago) |
| 0.9.56 | upload | 33.2 MB | 462 | checked | 2026-09-28 (10 days ago) |
| 0.9.54.1 | upload | 29.2 MB | 453 | checked | 2026-09-26 (12 days ago) |
| 0.9.54 | upload | 29.2 MB | 453 | checked | 2026-09-25 (13 days ago) |
| 0.9.53.3 | upload | 6.0 MB | 148 | checked | 2026-09-25 (13 days ago) |
| 0.9.53.2 | upload | 6.0 MB | 147 | checked | 2026-09-25 (13 days ago) |
| 0.9.53 | upload | 6.0 MB | 146 | checked | 2026-09-24 (14 days ago) |
| 0.9.50 | upload | 6.0 MB | 144 | checked | 2026-09-23 (15 days ago) |
| 0.9.50 | upload | 6.0 MB | 143 | checked | 2026-09-23 (15 days ago) |
