diff --git a/Content.Shared/Cuffs/Components/HandcuffComponent.cs b/Content.Shared/Cuffs/Components/HandcuffComponent.cs
index 30577da064..289f587239 100644
--- a/Content.Shared/Cuffs/Components/HandcuffComponent.cs
+++ b/Content.Shared/Cuffs/Components/HandcuffComponent.cs
@@ -105,3 +105,9 @@ public record struct UncuffAttemptEvent(EntityUid User, EntityUid Target)
public readonly EntityUid Target = Target;
public bool Cancelled = false;
}
+
+///
+/// Event raised on an entity being uncuffed to determine any modifiers to the amount of time it takes to uncuff them.
+///
+[ByRefEvent]
+public record struct ModifyUncuffDurationEvent(EntityUid User, EntityUid Target, float Duration);
diff --git a/Content.Shared/Cuffs/SharedCuffableSystem.cs b/Content.Shared/Cuffs/SharedCuffableSystem.cs
index 1ced3c8d6c..0e506f938e 100644
--- a/Content.Shared/Cuffs/SharedCuffableSystem.cs
+++ b/Content.Shared/Cuffs/SharedCuffableSystem.cs
@@ -561,7 +561,10 @@ namespace Content.Shared.Cuffs
return;
}
- var uncuffTime = isOwner ? cuff.BreakoutTime : cuff.UncuffTime;
+
+ var ev = new ModifyUncuffDurationEvent(user, target, isOwner ? cuff.BreakoutTime : cuff.UncuffTime);
+ RaiseLocalEvent(user, ref ev);
+ var uncuffTime = ev.Duration;
if (isOwner)
{
diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs
index 225810daed..161868370e 100644
--- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs
+++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs
@@ -3,6 +3,7 @@ using Content.Shared.ActionBlocker;
using Content.Shared.Administration.Logs;
using Content.Shared.Alert;
using Content.Shared.Buckle.Components;
+using Content.Shared.Cuffs.Components;
using Content.Shared.Database;
using Content.Shared.Hands;
using Content.Shared.Hands.EntitySystems;
@@ -12,6 +13,7 @@ using Content.Shared.Movement.Events;
using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Movement.Pulling.Events;
using Content.Shared.Movement.Systems;
+using Content.Shared.Popups;
using Content.Shared.Pulling.Events;
using Content.Shared.Standing;
using Content.Shared.Throwing;
@@ -43,6 +45,7 @@ public sealed class PullingSystem : EntitySystem
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
+ [Dependency] private readonly SharedPopupSystem _popup = default!;
public override void Initialize()
{
@@ -56,6 +59,7 @@ public sealed class PullingSystem : EntitySystem
SubscribeLocalEvent(OnJointRemoved);
SubscribeLocalEvent>(AddPullVerbs);
SubscribeLocalEvent(OnPullableContainerInsert);
+ SubscribeLocalEvent(OnModifyUncuffDuration);
SubscribeLocalEvent(OnPullerContainerInsert);
SubscribeLocalEvent(OnPullerUnpaused);
@@ -94,6 +98,18 @@ public sealed class PullingSystem : EntitySystem
TryStopPull(ent.Owner, ent.Comp);
}
+ private void OnModifyUncuffDuration(Entity ent, ref ModifyUncuffDurationEvent args)
+ {
+ if (!ent.Comp.BeingPulled)
+ return;
+
+ // We don't care if the person is being uncuffed by someone else
+ if (args.User != args.Target)
+ return;
+
+ args.Duration *= 2;
+ }
+
public override void Shutdown()
{
base.Shutdown();
diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml
index f703886127..a502c71404 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml
@@ -27,7 +27,7 @@
guides:
- Security
- type: UseDelay
- delay: 30
+ delay: 3
- type: entity
name: makeshift handcuffs