diff --git a/Content.Server/Chat/ChatManager.cs b/Content.Server/Chat/ChatManager.cs index cc67d3a26c..baee36294d 100644 --- a/Content.Server/Chat/ChatManager.cs +++ b/Content.Server/Chat/ChatManager.cs @@ -1,4 +1,6 @@ using System.Linq; +using Content.Server.GameObjects; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Shared.Chat; @@ -47,6 +49,11 @@ namespace Content.Server.Chat public void EntitySay(IEntity source, string message) { + if (!ActionBlockerSystem.CanSpeak(source)) + { + return; + } + var pos = source.Transform.GridPosition; var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient); diff --git a/Content.Server/GameObjects/Components/Mobs/DamageStates.cs b/Content.Server/GameObjects/Components/Mobs/DamageStates.cs index 287a6b6aa2..fcf6ee175a 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageStates.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageStates.cs @@ -51,6 +51,11 @@ namespace Content.Server.GameObjects { return true; } + + bool IActionBlocker.CanSpeak() + { + return true; + } } /// @@ -87,6 +92,11 @@ namespace Content.Server.GameObjects { return false; } + + bool IActionBlocker.CanSpeak() + { + return false; + } } /// @@ -133,5 +143,10 @@ namespace Content.Server.GameObjects { return false; } + + bool IActionBlocker.CanSpeak() + { + return false; + } } } diff --git a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs index 25743e137f..33cb0b6627 100644 --- a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs @@ -82,6 +82,11 @@ namespace Content.Server.GameObjects return CurrentDamageState.CanThrow(); } + bool IActionBlocker.CanSpeak() + { + return CurrentDamageState.CanSpeak(); + } + List IOnDamageBehavior.GetAllDamageThresholds() { var thresholdlist = DamageTemplate.DamageThresholds; diff --git a/Content.Server/GameObjects/EntitySystems/ActionBlockerSystem.cs b/Content.Server/GameObjects/EntitySystems/ActionBlockerSystem.cs index 0833c702c5..d0737b4976 100644 --- a/Content.Server/GameObjects/EntitySystems/ActionBlockerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ActionBlockerSystem.cs @@ -12,6 +12,8 @@ namespace Content.Server.GameObjects.EntitySystems bool CanUse(); bool CanThrow(); + + bool CanSpeak(); } public class ActionBlockerSystem : EntitySystem @@ -55,5 +57,15 @@ namespace Content.Server.GameObjects.EntitySystems } return canthrow; } + + public static bool CanSpeak(IEntity entity) + { + bool canspeak = true; + foreach (var actionblockercomponents in entity.GetAllComponents()) + { + canspeak &= actionblockercomponents.CanSpeak(); + } + return canspeak; + } } }