zio fork 1.8.2b-zio5: staff chat shows rank
@ 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:
parent
bc6e32892d
commit
732d3882d6
6 changed files with 69 additions and 7 deletions
|
|
@ -22,7 +22,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
||||||
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
|
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
|
||||||
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
||||||
public override string ModuleAuthor => "daffyy";
|
public override string ModuleAuthor => "daffyy";
|
||||||
public override string ModuleVersion => "1.8.2b-zio4";
|
public override string ModuleVersion => "1.8.2b-zio5";
|
||||||
|
|
||||||
public override void Load(bool hotReload)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -29,13 +29,23 @@ public partial class CS2_SimpleAdmin
|
||||||
foreach (var player in Helper.GetValidPlayers()
|
foreach (var player in Helper.GetValidPlayers()
|
||||||
.Where(p => AdminManager.PlayerHasPermissions(new SteamID(p.SteamID), "@css/chat")))
|
.Where(p => AdminManager.PlayerHasPermissions(new SteamID(p.SteamID), "@css/chat")))
|
||||||
{
|
{
|
||||||
if (_localizer != null)
|
if (_localizer == null) continue;
|
||||||
player.PrintToChat(_localizer["sa_adminchat_template_admin",
|
// zio: players get ">[STAFF][RANK] name: message", like @ in team chat.
|
||||||
caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName,
|
player.PrintToChat(caller == null
|
||||||
utf8String]);
|
? _localizer["sa_adminchat_template_admin", _localizer["sa_console"], utf8String]
|
||||||
|
: StaffChatMessage(caller, utf8String.Trim()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// zio: staff chat line, ">[STAFF][RANK] name: message" ("[RANK]" left out without a rank group).
|
||||||
|
private static string StaffChatMessage(CCSPlayerController sender, string message)
|
||||||
|
{
|
||||||
|
var rank = Helper.GetStaffRankTag(sender);
|
||||||
|
return rank == null
|
||||||
|
? _localizer!["sa_staffchat_template_norank", sender.PlayerName, message]
|
||||||
|
: _localizer!["sa_staffchat_template", rank, sender.PlayerName, message];
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a custom chat message to all players with color tags processed.
|
/// Sends a custom chat message to all players with color tags processed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -73,6 +83,20 @@ public partial class CS2_SimpleAdmin
|
||||||
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
|
|
||||||
|
// zio: from a player (including @ in all chat), ">[RANK] name: message" with no [SA] prefix.
|
||||||
|
// Console (and the web panel over RCON) keeps the plain "ADMIN:" message.
|
||||||
|
if (caller != null && _localizer != null)
|
||||||
|
{
|
||||||
|
var rank = Helper.GetStaffRankTag(caller);
|
||||||
|
var line = rank == null
|
||||||
|
? _localizer["sa_staffsay_template_norank", caller.PlayerName, utf8String.Trim()]
|
||||||
|
: _localizer["sa_staffsay_template", rank, caller.PlayerName, utf8String.Trim()];
|
||||||
|
foreach (var player in Helper.GetValidPlayers())
|
||||||
|
player.PrintToChat(line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var player in Helper.GetValidPlayers())
|
foreach (var player in Helper.GetValidPlayers())
|
||||||
{
|
{
|
||||||
player.SendLocalizedMessage(_localizer,
|
player.SendLocalizedMessage(_localizer,
|
||||||
|
|
|
||||||
|
|
@ -376,7 +376,8 @@ public partial class CS2_SimpleAdmin
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
if (AdminManager.PlayerHasPermissions(new SteamID(player.SteamID), "@css/chat"))
|
if (AdminManager.PlayerHasPermissions(new SteamID(player.SteamID), "@css/chat"))
|
||||||
{
|
{
|
||||||
sb.Append(_localizer!["sa_adminchat_template_admin", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
// zio: ">[STAFF][RANK] name: message".
|
||||||
|
sb.Append(StaffChatMessage(player, info.GetArg(1).Remove(0, 1)));
|
||||||
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && p is { IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(new SteamID(p.SteamID), "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && p is { IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(new SteamID(p.SteamID), "@css/chat")))
|
||||||
{
|
{
|
||||||
p.PrintToChat(sb.ToString());
|
p.PrintToChat(sb.ToString());
|
||||||
|
|
@ -384,7 +385,8 @@ public partial class CS2_SimpleAdmin
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sb.Append(_localizer!["sa_adminchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
// zio: ">[PLAYER] name: message".
|
||||||
|
sb.Append(_localizer!["sa_staffchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
||||||
player.PrintToChat(sb.ToString());
|
player.PrintToChat(sb.ToString());
|
||||||
foreach (var p in Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(new SteamID(p.SteamID), "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(new SteamID(p.SteamID), "@css/chat")))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,30 @@ internal static class Helper
|
||||||
return string.Join(" ", parts);
|
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)
|
public static void KickPlayer(int userId, NetworkDisconnectionReason reason = NetworkDisconnectionReason.NETWORK_DISCONNECT_KICKED, int delay = 0)
|
||||||
{
|
{
|
||||||
var player = Utilities.GetPlayerFromUserid(userId);
|
var player = Utilities.GetPlayerFromUserid(userId);
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,11 @@
|
||||||
"sa_admin_voice_unlisten_all": "{Default}You no longer hear {lime}all {default}players",
|
"sa_admin_voice_unlisten_all": "{Default}You no longer hear {lime}all {default}players",
|
||||||
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{default}",
|
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{default}",
|
||||||
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
|
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
|
||||||
|
"sa_staffchat_template": "{default}>[{yellow}STAFF{default}][{lime}{0}{default}] {yellow}{1}{default}: {grey}{2}{default}",
|
||||||
|
"sa_staffchat_template_norank": "{default}>[{yellow}STAFF{default}] {yellow}{0}{default}: {grey}{1}{default}",
|
||||||
|
"sa_staffchat_template_player": "{default}>[{lightblue}PLAYER{default}] {lightblue}{0}{default}: {grey}{1}{default}",
|
||||||
|
"sa_staffsay_template": "{default}>[{lime}{0}{default}] {yellow}{1}{default}: {grey}{2}{default}",
|
||||||
|
"sa_staffsay_template_norank": "{default}> {yellow}{0}{default}: {grey}{1}{default}",
|
||||||
"sa_adminchat_template_player": "{SILVER}(PLAYER) {lightred}{0}{default}: {lightred}{1}{default}",
|
"sa_adminchat_template_player": "{SILVER}(PLAYER) {lightred}{0}{default}: {lightred}{1}{default}",
|
||||||
"sa_discord_log_command": "**{0}** issued command `{1}` on server `HOSTNAME`",
|
"sa_discord_log_command": "**{0}** issued command `{1}` on server `HOSTNAME`",
|
||||||
"sa_menu_pluginsmanager_loaded": "{lime}Enabled {default}plugin {lime}{0}",
|
"sa_menu_pluginsmanager_loaded": "{lime}Enabled {default}plugin {lime}{0}",
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,13 @@ from the `build-1.8.2b` tag). Changes, all marked `zio:` in the code:
|
||||||
- New permission `@css/bypassipban`, for players or groups: IP bans, and bans on other accounts
|
- New permission `@css/bypassipban`, for players or groups: IP bans, and bans on other accounts
|
||||||
that share their IP, don't apply to them; a ban on their own SteamID still does. `@css/root`
|
that share their IP, don't apply to them; a ban on their own SteamID still does. `@css/root`
|
||||||
has it, as it has every `@css` flag.
|
has it, as it has every `@css` flag.
|
||||||
|
- Staff chat shows the sender's rank, from their highest `#rank/...` group (O, SA, A, TA, M, TM,
|
||||||
|
H for helper): `@message` in team chat and `css_asay` read `>[STAFF][RANK] name: message`, and
|
||||||
|
`@message` in all chat and `css_say` from a player read `>[RANK] name: message` (`> name: message`
|
||||||
|
if they have no rank group). A non-staff player's `@message` in team chat reads
|
||||||
|
`>[PLAYER] name: message`. Console's `css_say`/`css_asay` are unchanged. New lang keys
|
||||||
|
`sa_staffchat_template`, `sa_staffsay_template`, their `_norank` variants and
|
||||||
|
`sa_staffchat_template_player`, in `lang/en.json` only.
|
||||||
|
|
||||||
Publish with `FORGEJO_TOKEN=... ./release.sh v<ModuleVersion>` (ModuleVersion is `1.8.2b-zioN`).
|
Publish with `FORGEJO_TOKEN=... ./release.sh v<ModuleVersion>` (ModuleVersion is `1.8.2b-zioN`).
|
||||||
It rebuilds from the committed source and uploads `SimpleAdmin-<tag>.tar.gz` to git.zio.sh
|
It rebuilds from the committed source and uploads `SimpleAdmin-<tag>.tar.gz` to git.zio.sh
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue