diff --git a/jRandomSkills - SRC Files/src/command/Command.cs b/jRandomSkills - SRC Files/src/command/Command.cs index c4f9bcf..53307a1 100644 --- a/jRandomSkills - SRC Files/src/command/Command.cs +++ b/jRandomSkills - SRC Files/src/command/Command.cs @@ -116,14 +116,14 @@ namespace src.command if (command.ArgCount < 2) { - Reply("Usage: css_setoverride "); + Reply("Usage: css_setoverride "); return; } - // zio: same targets as css_setskill. Several targets are all set to one state: - // on if any of them is off, otherwise off. - var targets = GetSetSkillTargets(player, command.GetArg(1), _ => true); - if (targets.Count == 0) + var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => p != null && p.IsValid + && (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase) + || p.PlayerName.Equals(command.GetArg(1), StringComparison.OrdinalIgnoreCase))); + if (targetPlayer == null) { Reply(player == null ? Localization.GetTranslationWithoutIlliterate("player_not_found_setskill") @@ -131,12 +131,8 @@ namespace src.command return; } - bool enabled = targets.Any(p => !CooldownOverride.IsSet(p)); - foreach (var targetPlayer in targets) - CooldownOverride.Set(targetPlayer, enabled); - - string who = targets.Count == 1 ? targets[0].PlayerName : $"{targets.Count} players"; - Reply($"Cooldown override {(enabled ? $"{ChatColors.Lime}ON" : $"{ChatColors.LightRed}OFF")}{ChatColors.Default} for {ChatColors.LightRed}\u202A{who}\u202C"); + bool enabled = CooldownOverride.Toggle(targetPlayer); + Reply($"Cooldown override {(enabled ? $"{ChatColors.Lime}ON" : $"{ChatColors.LightRed}OFF")}{ChatColors.Default} for {ChatColors.LightRed}\u202A{targetPlayer.PlayerName}\u202C"); } private static void Command_SetSkill(CCSPlayerController? player, CommandInfo command) @@ -228,15 +224,6 @@ namespace src.command Reply("error_setskill"); } - // zio: one player for commands that take a single target (css_setstaticskill, css_next): the - // css_setskill rules, so part of a name works, but only when it picks out one player. - private static CCSPlayerController? GetSinglePlayerTarget(CCSPlayerController? caller, string arg) - { - if (string.IsNullOrEmpty(arg)) return null; - var targets = GetSetSkillTargets(caller, arg, _ => true); - return targets.Count == 1 ? targets[0] : null; - } - // zio: css_setskill targets. An exact name or SteamID64 as before, CSS's own selectors // (@me, @all, @ct, @t, @alive, #userid, ...), or @random/@randomct/@randomt: one random // alive player, drawn only from players the skill's team restriction allows. @@ -583,7 +570,9 @@ namespace src.command { Debug.WriteToDebug($"Player {player?.PlayerName} used the css_setstaticskill {command.ArgString} command."); if (!string.IsNullOrEmpty(config.NormalCommands.SetStaticSkillCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.SetStaticSkillCommand.Permissions)) return; - var targetPlayer = GetSinglePlayerTarget(player, command.GetArg(1)); + var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => p != null && p.IsValid + && (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase) + || p.PlayerName.Equals(command.GetArg(1), StringComparison.OrdinalIgnoreCase))); if (command.ArgCount < 2) { @@ -730,8 +719,10 @@ namespace src.command if (!string.IsNullOrEmpty(playerString)) { - targetPlayer = GetSinglePlayerTarget(player, playerString); - + targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => p != null && p.IsValid + && (p.SteamID.ToString().Equals(playerString, StringComparison.CurrentCultureIgnoreCase) + || p.PlayerName.Equals(playerString, StringComparison.OrdinalIgnoreCase))); + if (targetPlayer == null) { if (player == null) diff --git a/jRandomSkills - SRC Files/src/jRandomSkills.cs b/jRandomSkills - SRC Files/src/jRandomSkills.cs index 0053b3e..d627d27 100644 --- a/jRandomSkills - SRC Files/src/jRandomSkills.cs +++ b/jRandomSkills - SRC Files/src/jRandomSkills.cs @@ -44,7 +44,7 @@ namespace src public override string ModuleName => "[CS2] [ jRandomSkills ]"; public override string ModuleAuthor => "D3X (Original), Juzlus (Modifier), ByDexterTR (Contributor)"; public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus."; - public override string ModuleVersion => "1.2.4.b3-panorama5"; + public override string ModuleVersion => "1.2.4.b3-panorama3"; public override void Load(bool hotReload) { diff --git a/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs b/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs index d47654e..0a8992e 100644 --- a/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs +++ b/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs @@ -15,16 +15,14 @@ namespace src.utils private static readonly HashSet _players = []; private static readonly ConcurrentDictionary _stateFields = new(); - // Sets the override for one player. - public static void Set(CCSPlayerController player, bool enabled) + // Toggles the override and returns the new state. + public static bool Toggle(CCSPlayerController player) { - if (enabled) _players.Add(Key(player)); - else _players.Remove(Key(player)); + if (_players.Remove(Key(player))) return false; + _players.Add(Key(player)); + return true; } - // The player's own setting, without following a bot takeover like Has does. - public static bool IsSet(CCSPlayerController player) => _players.Contains(Key(player)); - // A bot a human has taken over counts as that human, since skills run on the bot's controller. public static bool Has(CCSPlayerController? player) { diff --git a/release.sh b/release.sh index 9b76855..c02fb80 100755 --- a/release.sh +++ b/release.sh @@ -29,13 +29,8 @@ set -euo pipefail FORGEJO_URL="https://git.zio.sh" OWNER="cs2" REPO="jRandomSkills" -# Needs write:repository. Only uploading needs it; downloading from the public repo doesn't. From the -# environment, or else from .forgejo-token in the cs2/ folder above every plugin (outside their -# repos, mode 600). Don't commit a real token. -TOKEN_FILE="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/../../.forgejo-token" -if [[ -z "${FORGEJO_TOKEN:-}" && -r "$TOKEN_FILE" ]]; then - FORGEJO_TOKEN="$(tr -d '[:space:]' < "$TOKEN_FILE")" -fi +# Placeholder - replace, or set FORGEJO_TOKEN in the environment instead. Needs write:repository. +# Only uploading needs it; downloading from the public repo doesn't. Don't commit a real token. FORGEJO_TOKEN="${FORGEJO_TOKEN:-CHANGE_ME_FORGEJO_TOKEN}" # CS2 client used to compile the Panorama layouts, and the Workshop Tools addon compiled into. @@ -65,7 +60,7 @@ if [[ -z "$TAG" ]]; then exit 1 fi if [[ "$FORGEJO_TOKEN" == "CHANGE_ME_FORGEJO_TOKEN" ]]; then - echo "Set FORGEJO_TOKEN (export it, or put it in $TOKEN_FILE) first." >&2 + echo "Set FORGEJO_TOKEN (edit release.sh or export it) first." >&2 exit 1 fi