Disable speaking while unconscious/dead (#362)
* Disable speaking while unconscious/dead Fixes #359 * Add CanSpeak ActionBlocker Matches the existing technique for other actions like CanUse() and CanThrow().
This commit is contained in:
committed by
Pieter-Jan Briers
parent
3e972b501a
commit
31487c1cf1
@@ -1,4 +1,6 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Content.Server.GameObjects;
|
||||||
|
using Content.Server.GameObjects.EntitySystems;
|
||||||
using Content.Server.Interfaces;
|
using Content.Server.Interfaces;
|
||||||
using Content.Server.Interfaces.Chat;
|
using Content.Server.Interfaces.Chat;
|
||||||
using Content.Shared.Chat;
|
using Content.Shared.Chat;
|
||||||
@@ -47,6 +49,11 @@ namespace Content.Server.Chat
|
|||||||
|
|
||||||
public void EntitySay(IEntity source, string message)
|
public void EntitySay(IEntity source, string message)
|
||||||
{
|
{
|
||||||
|
if (!ActionBlockerSystem.CanSpeak(source))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var pos = source.Transform.GridPosition;
|
var pos = source.Transform.GridPosition;
|
||||||
var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient);
|
var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient);
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,11 @@ namespace Content.Server.GameObjects
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IActionBlocker.CanSpeak()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -87,6 +92,11 @@ namespace Content.Server.GameObjects
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IActionBlocker.CanSpeak()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -133,5 +143,10 @@ namespace Content.Server.GameObjects
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IActionBlocker.CanSpeak()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,11 @@ namespace Content.Server.GameObjects
|
|||||||
return CurrentDamageState.CanThrow();
|
return CurrentDamageState.CanThrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IActionBlocker.CanSpeak()
|
||||||
|
{
|
||||||
|
return CurrentDamageState.CanSpeak();
|
||||||
|
}
|
||||||
|
|
||||||
List<DamageThreshold> IOnDamageBehavior.GetAllDamageThresholds()
|
List<DamageThreshold> IOnDamageBehavior.GetAllDamageThresholds()
|
||||||
{
|
{
|
||||||
var thresholdlist = DamageTemplate.DamageThresholds;
|
var thresholdlist = DamageTemplate.DamageThresholds;
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ namespace Content.Server.GameObjects.EntitySystems
|
|||||||
bool CanUse();
|
bool CanUse();
|
||||||
|
|
||||||
bool CanThrow();
|
bool CanThrow();
|
||||||
|
|
||||||
|
bool CanSpeak();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ActionBlockerSystem : EntitySystem
|
public class ActionBlockerSystem : EntitySystem
|
||||||
@@ -55,5 +57,15 @@ namespace Content.Server.GameObjects.EntitySystems
|
|||||||
}
|
}
|
||||||
return canthrow;
|
return canthrow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool CanSpeak(IEntity entity)
|
||||||
|
{
|
||||||
|
bool canspeak = true;
|
||||||
|
foreach (var actionblockercomponents in entity.GetAllComponents<IActionBlocker>())
|
||||||
|
{
|
||||||
|
canspeak &= actionblockercomponents.CanSpeak();
|
||||||
|
}
|
||||||
|
return canspeak;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user