zio fork 1.8.2b-zio9: admin menu honours command overrides, @zio/penalties
Every player and server entry in the admin menu names its command, and an overridden entry is
checked with the override's check_type ("any" passes with one flag), the way CSS checks the typed
command; upstream required every flag. css_penalties for someone else needs @zio/penalties or
@css/root instead of @css/kick.
This commit is contained in:
parent
65a413fa52
commit
6b188267c6
6 changed files with 38 additions and 15 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 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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 <player>` (someone else's penalties) needs `@zio/penalties` or `@css/root`
|
||||
instead of `@css/kick`.
|
||||
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue