diff --git a/Content.Client/GameObjects/Components/ActionBlocking/CuffableComponent.cs b/Content.Client/GameObjects/Components/ActionBlocking/CuffableComponent.cs index 6e2e34545a..554c4cec34 100644 --- a/Content.Client/GameObjects/Components/ActionBlocking/CuffableComponent.cs +++ b/Content.Client/GameObjects/Components/ActionBlocking/CuffableComponent.cs @@ -13,7 +13,7 @@ namespace Content.Client.GameObjects.Components.ActionBlocking public class CuffableComponent : SharedCuffableComponent { [ViewVariables] - private string _currentRSI = default!; + private string? _currentRSI; [ViewVariables] [ComponentDependency] private readonly SpriteComponent? _spriteComponent = null; @@ -36,7 +36,11 @@ namespace Content.Client.GameObjects.Components.ActionBlocking if (_currentRSI != cuffState.RSI) // we don't want to keep loading the same RSI { _currentRSI = cuffState.RSI; - _spriteComponent.LayerSetState(HumanoidVisualLayers.Handcuffs, new RSI.StateId(cuffState.IconState), new ResourcePath(cuffState.RSI)); + + if (_currentRSI != null) + { + _spriteComponent.LayerSetState(HumanoidVisualLayers.Handcuffs, new RSI.StateId(cuffState.IconState), new ResourcePath(_currentRSI)); + } } else { diff --git a/Content.Shared/GameObjects/Components/ActionBlocking/SharedCuffableComponent.cs b/Content.Shared/GameObjects/Components/ActionBlocking/SharedCuffableComponent.cs index bff22ccdf6..07ce353206 100644 --- a/Content.Shared/GameObjects/Components/ActionBlocking/SharedCuffableComponent.cs +++ b/Content.Shared/GameObjects/Components/ActionBlocking/SharedCuffableComponent.cs @@ -1,4 +1,6 @@ -using System; +#nullable enable +using System; +using Content.Shared.GameObjects.Components.Pulling; using Content.Shared.GameObjects.EntitySystems.ActionBlocker; using Robust.Shared.GameObjects; using Robust.Shared.Maths; @@ -12,8 +14,10 @@ namespace Content.Shared.GameObjects.Components.ActionBlocking public override string Name => "Cuffable"; public override uint? NetID => ContentNetIDs.CUFFED; + [ComponentDependency] private readonly SharedPullableComponent? _pullable = default!; + [ViewVariables] - public bool CanStillInteract = true; + public bool CanStillInteract { get; set; } = true; #region ActionBlockers @@ -24,6 +28,7 @@ namespace Content.Shared.GameObjects.Components.ActionBlocking bool IActionBlocker.CanAttack() => CanStillInteract; bool IActionBlocker.CanEquip() => CanStillInteract; bool IActionBlocker.CanUnequip() => CanStillInteract; + bool IActionBlocker.CanMove() => _pullable == null || !_pullable.BeingPulled || CanStillInteract; #endregion @@ -32,11 +37,11 @@ namespace Content.Shared.GameObjects.Components.ActionBlocking { public bool CanStillInteract { get; } public int NumHandsCuffed { get; } - public string RSI { get; } + public string? RSI { get; } public string IconState { get; } public Color Color { get; } - public CuffableComponentState(int numHandsCuffed, bool canStillInteract, string rsiPath, string iconState, Color color) : base(ContentNetIDs.CUFFED) + public CuffableComponentState(int numHandsCuffed, bool canStillInteract, string? rsiPath, string iconState, Color color) : base(ContentNetIDs.CUFFED) { NumHandsCuffed = numHandsCuffed; CanStillInteract = canStillInteract;