From 8b0d6a4d45434aca34662ffffb210dc0e5415c4e Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Wed, 26 Jul 2023 02:02:48 -0400 Subject: [PATCH] Prevent using LOOC in crit (#18297) * Prevent crit players from using LOOC * fix comment --- Content.Server/Chat/Systems/ChatSystem.cs | 28 +++++++++++++++---- Content.Shared/CCVar/CCVars.cs | 6 ++++ .../en-US/chat/managers/chat-manager.ftl | 2 ++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index e780a5858f..1f4bfe2715 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -6,7 +6,6 @@ using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Ghost.Components; using Content.Server.Players; -using Content.Server.Popups; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Shared.ActionBlocker; @@ -14,7 +13,6 @@ using Content.Shared.CCVar; using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.IdentityManagement; -using Content.Shared.Inventory; using Content.Shared.Mobs.Systems; using Content.Shared.Radio; using Robust.Server.GameObjects; @@ -48,8 +46,6 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly StationSystem _stationSystem = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -59,7 +55,8 @@ public sealed partial class ChatSystem : SharedChatSystem public const string DefaultAnnouncementSound = "/Audio/Announcements/announce.ogg"; private bool _loocEnabled = true; - private bool _deadLoocEnabled = false; + private bool _deadLoocEnabled; + private bool _critLoocEnabled; private readonly bool _adminLoocEnabled = true; public override void Initialize() @@ -68,6 +65,7 @@ public sealed partial class ChatSystem : SharedChatSystem InitializeEmotes(); _configurationManager.OnValueChanged(CCVars.LoocEnabled, OnLoocEnabledChanged, true); _configurationManager.OnValueChanged(CCVars.DeadLoocEnabled, OnDeadLoocEnabledChanged, true); + _configurationManager.OnValueChanged(CCVars.CritLoocEnabled, OnCritLoocEnabledChanged, true); SubscribeLocalEvent(OnGameChange); } @@ -78,6 +76,7 @@ public sealed partial class ChatSystem : SharedChatSystem ShutdownEmotes(); _configurationManager.UnsubValueChanged(CCVars.LoocEnabled, OnLoocEnabledChanged); _configurationManager.UnsubValueChanged(CCVars.DeadLoocEnabled, OnDeadLoocEnabledChanged); + _configurationManager.UnsubValueChanged(CCVars.CritLoocEnabled, OnCritLoocEnabledChanged); } private void OnLoocEnabledChanged(bool val) @@ -98,6 +97,16 @@ public sealed partial class ChatSystem : SharedChatSystem Loc.GetString(val ? "chat-manager-dead-looc-chat-enabled-message" : "chat-manager-dead-looc-chat-disabled-message")); } + private void OnCritLoocEnabledChanged(bool val) + { + if (_critLoocEnabled == val) + return; + + _critLoocEnabled = val; + _chatManager.DispatchServerAnnouncement( + Loc.GetString(val ? "chat-manager-crit-looc-chat-enabled-message" : "chat-manager-crit-looc-chat-disabled-message")); + } + private void OnGameChange(GameRunLevelChangedEvent ev) { switch (ev.New) @@ -225,6 +234,10 @@ public sealed partial class ChatSystem : SharedChatSystem (HasComp(source) || _mobStateSystem.IsDead(source))) sendType = InGameOOCChatType.Dead; + // If crit player LOOC is disabled, don't send the message at all. + if (!_critLoocEnabled && _mobStateSystem.IsCritical(source)) + return; + switch (sendType) { case InGameOOCChatType.Dead: @@ -452,6 +465,11 @@ public sealed partial class ChatSystem : SharedChatSystem if (!_adminLoocEnabled) return; } else if (!_loocEnabled) return; + + // If crit player LOOC is disabled, don't send the message at all. + if (!_critLoocEnabled && _mobStateSystem.IsCritical(source)) + return; + var wrappedMessage = Loc.GetString("chat-manager-entity-looc-wrap-message", ("entityName", name), ("message", FormattedMessage.EscapeText(message))); diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 76b9d0ea31..db41d69668 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1014,6 +1014,12 @@ namespace Content.Shared.CCVar /// public static readonly CVarDef DeadLoocEnabled = CVarDef.Create("looc.enabled_dead", false, CVar.NOTIFY | CVar.REPLICATED); + /// + /// True: Crit players can use LOOC + /// False: Crit player LOOC gets redirected to dead chat + /// + public static readonly CVarDef CritLoocEnabled = CVarDef.Create("looc.enabled_crit", false, CVar.NOTIFY | CVar.REPLICATED); + /* * Entity Menu Grouping Types */ diff --git a/Resources/Locale/en-US/chat/managers/chat-manager.ftl b/Resources/Locale/en-US/chat/managers/chat-manager.ftl index c189cea10f..29efc61ebb 100644 --- a/Resources/Locale/en-US/chat/managers/chat-manager.ftl +++ b/Resources/Locale/en-US/chat/managers/chat-manager.ftl @@ -7,6 +7,8 @@ chat-manager-looc-chat-enabled-message = LOOC chat has been enabled. chat-manager-looc-chat-disabled-message = LOOC chat has been disabled. chat-manager-dead-looc-chat-enabled-message = Dead players can now use LOOC. chat-manager-dead-looc-chat-disabled-message = Dead players can no longer use LOOC. +chat-manager-crit-looc-chat-enabled-message = Crit players can now use LOOC. +chat-manager-crit-looc-chat-disabled-message = Crit players can no longer use LOOC. chat-manager-admin-ooc-chat-enabled-message = Admin OOC chat has been enabled. chat-manager-admin-ooc-chat-disabled-message = Admin OOC chat has been disabled. chat-manager-max-message-length-exceeded-message = Your message exceeded {$limit} character limit