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 null
parent 181e256670
commit 0a06bbea46
No known key found for this signature in database
GPG Key ID: 212F05528FD678BE
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