zio fork 1.8.2b-zio5: staff chat shows rank
Some checks are pending
Build and Publish / build (push) Waiting to run
Build and Publish / publish (push) Blocked by required conditions

@ in team chat and css_asay read ">[STAFF][RANK] name: message", and @ in all chat and a
player's css_say read ">[RANK] name: message", with the rank from the sender's highest #rank/...
group (O, SA, A, TA, M, TM, H). Staff in no rank group get ">[STAFF] name" and "> name". A
non-staff player's @ team chat reads ">[PLAYER] name: message". Console's messages are unchanged.
The lines are new en.json keys: sa_staffchat_template, sa_staffsay_template, their _norank
variants and sa_staffchat_template_player.
This commit is contained in:
Astra 2026-09-28 18:01:44 +01:00
parent bc6e32892d
commit 3c9f65e121
6 changed files with 69 additions and 7 deletions

View file

@ -144,6 +144,30 @@ internal static class Helper
return string.Join(" ", parts);
}
// zio: staff rank groups, highest first, and their chat abbreviations.
private static readonly (string Group, string Tag)[] StaffRanks =
[
("#rank/owner", "O"),
("#rank/senioradmin", "SA"),
("#rank/admin", "A"),
("#rank/trialadmin", "TA"),
("#rank/mod", "M"),
("#rank/trialmod", "TM"),
("#rank/helper", "H"),
];
// zio: the player's highest staff rank abbreviation, or null if they're in no rank group.
internal static string? GetStaffRankTag(CCSPlayerController player)
{
var groups = AdminManager.GetPlayerAdminData(new SteamID(player.SteamID))?.Groups;
if (groups == null) return null;
foreach (var (group, tag) in StaffRanks)
{
if (groups.Contains(group)) return tag;
}
return null;
}
public static void KickPlayer(int userId, NetworkDisconnectionReason reason = NetworkDisconnectionReason.NETWORK_DISCONNECT_KICKED, int delay = 0)
{
var player = Utilities.GetPlayerFromUserid(userId);