diff --git a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs index 39b6984..2c85a41 100644 --- a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs @@ -22,7 +22,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.8.2b-zio8"; + public override string ModuleVersion => "1.8.2b-zio9"; public override void Load(bool hotReload) { diff --git a/CS2-SimpleAdmin/Commands/basecommands.cs b/CS2-SimpleAdmin/Commands/basecommands.cs index 9513cbc..122ca85 100644 --- a/CS2-SimpleAdmin/Commands/basecommands.cs +++ b/CS2-SimpleAdmin/Commands/basecommands.cs @@ -39,7 +39,9 @@ public partial class CS2_SimpleAdmin var userId = caller.UserId.Value; var steamId = caller.SteamID; - if (!string.IsNullOrEmpty(command.GetArg(1)) && AdminManager.PlayerHasPermissions(new SteamID(caller.SteamID), "@css/kick")) + // zio: other players' penalties need @zio/penalties (or root), not @css/kick. + if (!string.IsNullOrEmpty(command.GetArg(1)) && (AdminManager.PlayerHasPermissions(new SteamID(caller.SteamID), "@zio/penalties") + || AdminManager.PlayerHasPermissions(new SteamID(caller.SteamID), "@css/root"))) { var targets = GetTarget(command); diff --git a/CS2-SimpleAdmin/Helper.cs b/CS2-SimpleAdmin/Helper.cs index 8227425..5851218 100644 --- a/CS2-SimpleAdmin/Helper.cs +++ b/CS2-SimpleAdmin/Helper.cs @@ -144,6 +144,20 @@ internal static class Helper return string.Join(" ", parts); } + // zio: whether an admin_overrides.json override lets the player run the command, checked the way + // CSS checks a typed command: "all" needs every flag, anything else ("any") needs one of them. + internal static bool CanRunOverriddenCommand(CCSPlayerController player, string commandName) + { + var data = AdminManager.GetCommandOverrideData(commandName); + if (data == null) return false; + var flags = data.Flags.ToArray(); + BaseRequiresPermissions check = data.CheckType == "all" + ? new RequiresPermissions(flags) + : new RequiresPermissionsOr(flags); + check.Command = commandName; + return check.CanExecuteCommand(player); + } + // zio: rank groups, highest first, and their chat abbreviations. Guardian (VIP) is last, so a // staff rank wins. private static readonly (string Group, string Tag)[] StaffRanks = diff --git a/CS2-SimpleAdmin/Menus/BasicMenu.cs b/CS2-SimpleAdmin/Menus/BasicMenu.cs index 1234079..ae9ef3f 100644 --- a/CS2-SimpleAdmin/Menus/BasicMenu.cs +++ b/CS2-SimpleAdmin/Menus/BasicMenu.cs @@ -20,20 +20,21 @@ public abstract class BasicMenu var manager = MenuManager.Instance; // Players category menus - using translation keys - manager.RegisterMenu("players", "slap", "sa_slap", CreateSlapMenu, "@css/slay"); - manager.RegisterMenu("players", "slay", "sa_slay", CreateSlayMenu, "@css/slay"); - manager.RegisterMenu("players", "kick", "sa_kick", CreateKickMenu, "@css/kick"); - manager.RegisterMenu("players", "warn", "sa_warn", CreateWarnMenu, "@css/kick"); - manager.RegisterMenu("players", "ban", "sa_ban", CreateBanMenu, "@css/ban"); - manager.RegisterMenu("players", "gag", "sa_gag", CreateGagMenu, "@css/chat"); - manager.RegisterMenu("players", "mute", "sa_mute", CreateMuteMenu, "@css/chat"); - manager.RegisterMenu("players", "silence", "sa_silence", CreateSilenceMenu, "@css/chat"); - manager.RegisterMenu("players", "team", "sa_team_force", CreateForceTeamMenu, "@css/kick"); + // zio: each entry names its command, so admin_overrides.json applies to the menu too. + manager.RegisterMenu("players", "slap", "sa_slap", CreateSlapMenu, "@css/slay", "css_slap"); + manager.RegisterMenu("players", "slay", "sa_slay", CreateSlayMenu, "@css/slay", "css_slay"); + manager.RegisterMenu("players", "kick", "sa_kick", CreateKickMenu, "@css/kick", "css_kick"); + manager.RegisterMenu("players", "warn", "sa_warn", CreateWarnMenu, "@css/kick", "css_warn"); + manager.RegisterMenu("players", "ban", "sa_ban", CreateBanMenu, "@css/ban", "css_ban"); + manager.RegisterMenu("players", "gag", "sa_gag", CreateGagMenu, "@css/chat", "css_gag"); + manager.RegisterMenu("players", "mute", "sa_mute", CreateMuteMenu, "@css/chat", "css_mute"); + manager.RegisterMenu("players", "silence", "sa_silence", CreateSilenceMenu, "@css/chat", "css_silence"); + manager.RegisterMenu("players", "team", "sa_team_force", CreateForceTeamMenu, "@css/kick", "css_team"); // Server category menus - using translation keys manager.RegisterMenu("server", "plugins", "sa_menu_pluginsmanager_title", CreatePluginsMenu, "@css/root"); - manager.RegisterMenu("server", "changemap", "sa_changemap", CreateChangeMapMenu, "@css/changemap"); - manager.RegisterMenu("server", "restart", "sa_restart_game", CreateRestartGameMenu, "@css/generic"); + manager.RegisterMenu("server", "changemap", "sa_changemap", CreateChangeMapMenu, "@css/changemap", "css_map"); + manager.RegisterMenu("server", "restart", "sa_restart_game", CreateRestartGameMenu, "@css/generic", "css_rr"); manager.RegisterMenu("server", "custom", "sa_menu_custom_commands", CreateCustomCommandsMenu, "@css/generic"); // Admin category menus - using translation keys diff --git a/CS2-SimpleAdmin/Menus/MenuManager.cs b/CS2-SimpleAdmin/Menus/MenuManager.cs index 6abf3ea..f850a33 100644 --- a/CS2-SimpleAdmin/Menus/MenuManager.cs +++ b/CS2-SimpleAdmin/Menus/MenuManager.cs @@ -219,8 +219,9 @@ public class MenuManager // Check if command has overridden permissions if (AdminManager.CommandIsOverriden(commandName)) { - var overriddenPermission = AdminManager.GetPermissionOverrides(commandName); - hasPermission = AdminManager.PlayerHasPermissions(steamId, overriddenPermission); + // zio: honour the override's check_type ("any" passes with one flag), as CSS does + // for the typed command, instead of requiring every flag. + hasPermission = Helper.CanRunOverriddenCommand(player, commandName); } else if (!string.IsNullOrEmpty(permission)) { diff --git a/README.md b/README.md index 5425f65..a1bd016 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,11 @@ from the `build-1.8.2b` tag). Changes, all marked `zio:` in the code: `sa_staffchat_template_player`, in `lang/en.json` only. - `css_psay` from a player reads `(PM) [RANK] name: message` (`(PM) name: message` without a rank group); console's is unchanged. Lang keys `sa_psay_template` and `sa_psay_template_norank`. +- `admin_overrides.json` reaches the admin menu too: every player and server entry names its command, + and an overridden entry is checked with the override's `check_type` (`any` passes with one flag), + as CSS checks the typed command. Upstream required every flag in the override. +- `css_penalties ` (someone else's penalties) needs `@zio/penalties` or `@css/root` + instead of `@css/kick`. Publish with `FORGEJO_TOKEN=... ./release.sh v` (ModuleVersion is `1.8.2b-zioN`). It rebuilds from the committed source and uploads `SimpleAdmin-.tar.gz` to git.zio.sh