make pulled uncuffing slower & reduce uncuff spam cooldown (#29008)

* prevent people being pulled from uncuffing themselves

* block -> modify duration
This commit is contained in:
Nemanja
2024-06-15 00:01:22 -04:00
committed by GitHub
parent d6b8b34f25
commit d907e4ef57
4 changed files with 27 additions and 2 deletions

View File

@@ -105,3 +105,9 @@ public record struct UncuffAttemptEvent(EntityUid User, EntityUid Target)
public readonly EntityUid Target = Target;
public bool Cancelled = false;
}
/// <summary>
/// Event raised on an entity being uncuffed to determine any modifiers to the amount of time it takes to uncuff them.
/// </summary>
[ByRefEvent]
public record struct ModifyUncuffDurationEvent(EntityUid User, EntityUid Target, float Duration);

View File

@@ -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)
{

View File

@@ -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<PullableComponent, JointRemovedEvent>(OnJointRemoved);
SubscribeLocalEvent<PullableComponent, GetVerbsEvent<Verb>>(AddPullVerbs);
SubscribeLocalEvent<PullableComponent, EntGotInsertedIntoContainerMessage>(OnPullableContainerInsert);
SubscribeLocalEvent<PullableComponent, ModifyUncuffDurationEvent>(OnModifyUncuffDuration);
SubscribeLocalEvent<PullerComponent, EntGotInsertedIntoContainerMessage>(OnPullerContainerInsert);
SubscribeLocalEvent<PullerComponent, EntityUnpausedEvent>(OnPullerUnpaused);
@@ -94,6 +98,18 @@ public sealed class PullingSystem : EntitySystem
TryStopPull(ent.Owner, ent.Comp);
}
private void OnModifyUncuffDuration(Entity<PullableComponent> 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();

View File

@@ -27,7 +27,7 @@
guides:
- Security
- type: UseDelay
delay: 30
delay: 3
- type: entity
name: makeshift handcuffs