Fix for can't stop pulling when cuffed (#40233)

* fix

* fix

* spaces added
This commit is contained in:
InsoPL
2025-09-12 05:39:25 +02:00
committed by GitHub
parent 8cc1b29ba4
commit 49fb6fdd6c
2 changed files with 24 additions and 6 deletions

View File

@@ -477,14 +477,16 @@ namespace Content.Shared.Cuffs
if (TryComp<HandsComponent>(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;
}

View File

@@ -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<PullableComponent, StrappedEvent>(OnBuckled);
SubscribeLocalEvent<PullableComponent, BuckledEvent>(OnGotBuckled);
SubscribeLocalEvent<ActivePullerComponent, TargetHandcuffedEvent>(OnTargetHandcuffed);
CommandBinds.Builder
.Bind(ContentKeyFunctions.ReleasePulledObject, InputCmdHandler.FromDelegate(OnReleasePulledObject, handle: false))
.Register<PullingSystem>();
}
private void OnTargetHandcuffed(Entity<ActivePullerComponent> ent, ref TargetHandcuffedEvent args)
{
if (!TryComp<PullerComponent>(ent, out var comp))
return;
if (comp.Pulling == null)
return;
if (CanPull(ent, comp.Pulling.Value, comp))
return;
if (!TryComp<PullableComponent>(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);