diff --git a/Commands/basecomms.cs b/Commands/basecomms.cs index da3673e..75a081e 100644 --- a/Commands/basecomms.cs +++ b/Commands/basecomms.cs @@ -683,78 +683,87 @@ namespace CS2_SimpleAdmin { if (caller!.CanTarget(player)) { - PlayerInfo playerInfo = new PlayerInfo + Silence(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager); + } + }); + } + + internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null) + { + callerName ??= caller == null ? "Console" : caller.PlayerName; + muteManager ??= new MuteManager(_database); + playerPenaltyManager ??= new PlayerPenaltyManager(); + + PlayerInfo playerInfo = new PlayerInfo + { + SteamId = player?.SteamID.ToString(), + Name = player?.PlayerName, + IpAddress = player?.IpAddress?.Split(":")[0] + }; + + PlayerInfo adminInfo = new PlayerInfo + { + SteamId = caller?.SteamID.ToString(), + Name = caller?.PlayerName, + IpAddress = caller?.IpAddress?.Split(":")[0] + }; + + Task.Run(async () => + { + await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 2); + }); + + if (TagsDetected) + Server.ExecuteCommand($"css_tag_mute {player!.SteamID}"); + + playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); + + if (time == 0) + { + if (!player!.IsBot && !player.IsHLTV) + { + using (new WithTemporaryCulture(player.GetLanguage())) { - SteamId = player?.SteamID.ToString(), - Name = player?.PlayerName, - IpAddress = player?.IpAddress?.Split(":")[0] - }; - - PlayerInfo adminInfo = new PlayerInfo - { - SteamId = caller?.SteamID.ToString(), - Name = caller?.PlayerName, - IpAddress = caller?.IpAddress?.Split(":")[0] - }; - - Task.Run(async () => - { - await _muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 2); - }); - - if (TagsDetected) - Server.ExecuteCommand($"css_tag_mute {player!.SteamID}"); - - playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); - - if (time == 0) - { - if (!player!.IsBot && !player.IsHLTV) - { - using (new WithTemporaryCulture(player.GetLanguage())) - { - player.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); - } - } - - if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) - { - foreach (CCSPlayerController _player in Helper.GetValidPlayers()) - { - using (new WithTemporaryCulture(_player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_silence_message_perm", callerName, player.PlayerName, reason]); - _player.PrintToChat(sb.ToString()); - } - } - } + player.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } - else - { - if (!player!.IsBot && !player.IsHLTV) - { - using (new WithTemporaryCulture(player.GetLanguage())) - { - player!.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); - } - } + } - if (caller == null || caller != null && caller != null && !silentPlayers.Contains(caller.Slot)) + if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) + { + foreach (CCSPlayerController _player in Helper.GetValidPlayers()) + { + using (new WithTemporaryCulture(_player.GetLanguage())) { - foreach (CCSPlayerController _player in Helper.GetValidPlayers()) - { - using (new WithTemporaryCulture(_player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_silence_message_time", callerName, player.PlayerName, reason, time]); - _player.PrintToChat(sb.ToString()); - } - } + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_silence_message_perm", callerName, player.PlayerName, reason]); + _player.PrintToChat(sb.ToString()); } } } - }); + } + else + { + if (!player!.IsBot && !player.IsHLTV) + { + using (new WithTemporaryCulture(player.GetLanguage())) + { + player!.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + } + } + + if (caller == null || caller != null && caller != null && !silentPlayers.Contains(caller.Slot)) + { + foreach (CCSPlayerController _player in Helper.GetValidPlayers()) + { + using (new WithTemporaryCulture(_player.GetLanguage())) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_silence_message_time", callerName, player.PlayerName, reason, time]); + _player.PrintToChat(sb.ToString()); + } + } + } + } } [ConsoleCommand("css_addsilence")] diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index 17c0e08..097fa21 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -51,6 +51,7 @@ namespace CS2_SimpleAdmin.Menus { options.Add(new ChatMenuOptionData("Gag", () => PlayersMenu.OpenMenu(admin, "Gag", (admin, player) => DurationMenu.OpenMenu(admin, "Gag", player, GagMenu)))); options.Add(new ChatMenuOptionData("Mute", () => PlayersMenu.OpenMenu(admin, "Mute", (admin, player) => DurationMenu.OpenMenu(admin, "Mute", player, MuteMenu)))); + options.Add(new ChatMenuOptionData("Silence", () => PlayersMenu.OpenMenu(admin, "Silence", (admin, player) => DurationMenu.OpenMenu(admin, "Silence", player, SilenceMenu)))); } if (hasKick) @@ -185,6 +186,35 @@ namespace CS2_SimpleAdmin.Menus { CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason); } + + private static void SilenceMenu(CCSPlayerController admin, CCSPlayerController player, int duration) + { + // TODO: Localize and make options in config? + CenterHtmlMenu menu = new CenterHtmlMenu($"Silence {player.PlayerName}"); + List options = new() + { + "Shouting", + "Playing music", + "Advertising", + "Spamming", + "Spectator camera abuse", + "Hate", + "Admin disrespect", + "Other" + }; + + foreach (string option in options) + { + menu.AddMenuOption(option, (_, _) => { Silence(admin, player, duration, option); }); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + + private static void Silence(CCSPlayerController admin, CCSPlayerController player, int duration, string reason) + { + CS2_SimpleAdmin.Instance.Silence(admin, player, duration, reason); + } private static void ForceTeamMenu(CCSPlayerController admin, CCSPlayerController player) {