diff --git a/Content.Shared/Cuffs/SharedCuffableSystem.cs b/Content.Shared/Cuffs/SharedCuffableSystem.cs index 3b0f6c8a30..80ccc0619a 100644 --- a/Content.Shared/Cuffs/SharedCuffableSystem.cs +++ b/Content.Shared/Cuffs/SharedCuffableSystem.cs @@ -477,14 +477,16 @@ namespace Content.Shared.Cuffs if (TryComp(target, out var hands) && hands.Count <= component.CuffedHandCount) return false; - var ev = new TargetHandcuffedEvent(); - RaiseLocalEvent(target, ref ev); - // Success! _hands.TryDrop(user, handcuff); _container.Insert(handcuff, component.Container); + + var ev = new TargetHandcuffedEvent(); + RaiseLocalEvent(target, ref ev); + UpdateHeldItems(target, handcuff, component); + return true; } diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index bc169aa201..7fb9e825cd 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.ActionBlocker; using Content.Shared.Administration.Logs; using Content.Shared.Alert; using Content.Shared.Buckle.Components; +using Content.Shared.Cuffs; using Content.Shared.Cuffs.Components; using Content.Shared.Database; using Content.Shared.Hands; @@ -82,12 +83,30 @@ public sealed class PullingSystem : EntitySystem SubscribeLocalEvent(OnBuckled); SubscribeLocalEvent(OnGotBuckled); + SubscribeLocalEvent(OnTargetHandcuffed); CommandBinds.Builder .Bind(ContentKeyFunctions.ReleasePulledObject, InputCmdHandler.FromDelegate(OnReleasePulledObject, handle: false)) .Register(); } + private void OnTargetHandcuffed(Entity ent, ref TargetHandcuffedEvent args) + { + if (!TryComp(ent, out var comp)) + return; + + if (comp.Pulling == null) + return; + + if (CanPull(ent, comp.Pulling.Value, comp)) + return; + + if (!TryComp(comp.Pulling, out var pullableComp)) + return; + + TryStopPull(comp.Pulling.Value, pullableComp); + } + private void HandlePullStarted(EntityUid uid, HandsComponent component, PullStartedMessage args) { if (args.PullerUid != uid) @@ -579,9 +598,6 @@ public sealed class PullingSystem : EntitySystem if (pullerUidNull == null) return true; - if (user != null && !_blocker.CanInteract(user.Value, pullableUid)) - return false; - var msg = new AttemptStopPullingEvent(user); RaiseLocalEvent(pullableUid, msg, true);