ModernUO/Projects/UOContent/Commands/StaffAccess.cs
Kamron Batman b2ccc7e4f3
perf(messages): mechanical interpolation cleanups (#2436)
## Summary

Phase 3.1 of the message-interpolation optimization series. Fixes 9 of the 28 sites flagged in the Phase 2 audit (PR #2435):

| File | Fix |
|---|---|
| `Commands/StaffAccess.cs:88,99` | Drop redundant `.ToString()` on enum holes |
| `Commands/Handlers.cs:102` | `builder.ToString()` -> `builder.AsSpan()` |
| `World Saves/SaveCommands.cs:71-75` | Merge 3 concatenated `$"..."` into one literal |
| `Server/Items/Item.cs:4213` | Hoist nested ternary `$"..."` to if/else |
| `Engines/Factions/Mobiles/Guards/BaseFactionGuard.cs:140-150` | Convert switch expression to switch statement |
| `Mobiles/Monsters/LBR/Jukas/JukaLord.cs:85` | Restructure `string.Format(toSay.RandomElement(), ...)` into switch |
| `Misc/AttackMessage.cs:30-41` | Inline `AggressorFormat`/`AggressedFormat` constants |

No functional changes. Each site emits identical text; the only difference is that the message string is now built into a pooled char buffer instead of being allocated as a `string` first.
2026-05-03 18:26:49 -07:00

101 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Server.Accounting;
using Server.Mobiles;
namespace Server.Commands;
public static class StaffAccess
{
private static readonly Dictionary<string, AccessLevel> _accessLevelByString = new();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static string AccountTag(Serial serial) => $"OriginalStaffAccess:{serial}";
public static void Configure()
{
CommandSystem.Register("StaffAccess", AccessLevel.Player, StaffAccess_OnCommand);
foreach (var accessLevel in Enum.GetValues<AccessLevel>())
{
_accessLevelByString[accessLevel.ToString().ToLower()] = accessLevel;
}
_accessLevelByString["gm"] = AccessLevel.GameMaster;
_accessLevelByString["dev"] = AccessLevel.Developer;
_accessLevelByString["admin"] = AccessLevel.Administrator;
}
public static void ResetStaffAccess(this PlayerMobile m)
{
if (m.Account is not Account account)
{
return;
}
var accountTag = AccountTag(m.Serial);
var originalAccessLevelString = account.GetTag(accountTag);
if (originalAccessLevelString == null)
{
return;
}
var accessLevel = _accessLevelByString[originalAccessLevelString];
account.RemoveTag(accountTag);
m.AccessLevel = accessLevel;
}
[Usage("StaffAccess <access level>")]
[Description("Changes your access level. Only access levels at or below your current access level can be set. Use the same access level to reset.")]
public static void StaffAccess_OnCommand(CommandEventArgs e)
{
var m = e.Mobile;
if (m.Account is not Account account)
{
return;
}
var accountTag = AccountTag(m.Serial);
var originalAccessLevelString = account.GetTag(accountTag);
AccessLevel? originalAccessLevel = originalAccessLevelString != null ? _accessLevelByString[originalAccessLevelString] : null;
if (originalAccessLevel == null && m.AccessLevel == AccessLevel.Player)
{
return;
}
var accessLevelArgument = e.GetString(0)?.Trim().ToLower();
var newAccessLevel = AccessLevel.Player;
var validAccessLevel = !string.IsNullOrEmpty(accessLevelArgument) &&
_accessLevelByString.TryGetValue(accessLevelArgument, out newAccessLevel);
if (!validAccessLevel && originalAccessLevel == null)
{
m.SendMessage("Invalid access level specified.");
m.SendMessage("Usage: [staffaccess <access level>.");
return;
}
if (originalAccessLevel != null && (!validAccessLevel || newAccessLevel == originalAccessLevel))
{
account.RemoveTag(accountTag);
newAccessLevel = originalAccessLevel.Value;
m.SendMessage("Restoring original staff access...");
}
if ((originalAccessLevel ?? m.AccessLevel) < newAccessLevel)
{
m.SendMessage($"You cannot set your staff access to {newAccessLevel}.");
return;
}
if (originalAccessLevel == null)
{
// Save the original access level
account.AddTag(accountTag, m.AccessLevel.ToString().ToLower());
}
m.AccessLevel = newAccessLevel;
m.SendMessage($"Staff access set to {newAccessLevel}.");
}
}