It's no longer possible to unbuckle if you are handcuffed (#17698)

* it's now impossible to unbuckle when cuffed, cuffs must be removed first

* can't unbuckle if any hand is handcuffed

* fixed hand count check

* added popup message
This commit is contained in:
DadeKuma
2023-06-28 20:09:04 +02:00
committed by GitHub
parent 11eff743e6
commit 6d31d50b43
2 changed files with 19 additions and 0 deletions

View File

@@ -2,18 +2,25 @@ using Content.Shared.Cuffs;
using JetBrains.Annotations; using JetBrains.Annotations;
using Content.Shared.Cuffs.Components; using Content.Shared.Cuffs.Components;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Content.Shared.Buckle.Components;
using Content.Shared.Hands.Components;
using Robust.Shared.Network;
using Content.Server.Popups;
namespace Content.Server.Cuffs namespace Content.Server.Cuffs
{ {
[UsedImplicitly] [UsedImplicitly]
public sealed class CuffableSystem : SharedCuffableSystem public sealed class CuffableSystem : SharedCuffableSystem
{ {
[Dependency] private readonly INetManager _netManager = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<HandcuffComponent, ComponentGetState>(OnHandcuffGetState); SubscribeLocalEvent<HandcuffComponent, ComponentGetState>(OnHandcuffGetState);
SubscribeLocalEvent<CuffableComponent, ComponentGetState>(OnCuffableGetState); SubscribeLocalEvent<CuffableComponent, ComponentGetState>(OnCuffableGetState);
SubscribeLocalEvent<CuffableComponent, BuckleAttemptEvent>(OnBuckleAttemptEvent);
} }
private void OnHandcuffGetState(EntityUid uid, HandcuffComponent component, ref ComponentGetState args) private void OnHandcuffGetState(EntityUid uid, HandcuffComponent component, ref ComponentGetState args)
@@ -39,5 +46,16 @@ namespace Content.Server.Cuffs
// the iconstate is formatted as blah-2, blah-4, blah-6, etc. // the iconstate is formatted as blah-2, blah-4, blah-6, etc.
// the number corresponds to how many hands are cuffed. // the number corresponds to how many hands are cuffed.
} }
private void OnBuckleAttemptEvent(EntityUid uid, CuffableComponent component, ref BuckleAttemptEvent args)
{
if (TryComp<HandsComponent>(uid, out var hands) && component.CuffedHandCount == hands.Count)
{
args.Cancelled = true;
var message = Loc.GetString("handcuff-component-cuff-interrupt-buckled-message");
if (_netManager.IsServer)
_popupSystem.PopupEntity(message, uid);
}
}
} }
} }

View File

@@ -13,3 +13,4 @@ handcuff-component-cuff-self-success-message = You cuff yourself.
handcuff-component-cuff-interrupt-message = You were interrupted while cuffing {$targetName}! handcuff-component-cuff-interrupt-message = You were interrupted while cuffing {$targetName}!
handcuff-component-cuff-interrupt-other-message = You interrupt {$otherName} while they are cuffing you! handcuff-component-cuff-interrupt-other-message = You interrupt {$otherName} while they are cuffing you!
handcuff-component-cuff-interrupt-self-message = You were interrupted while cuffing yourself. handcuff-component-cuff-interrupt-self-message = You were interrupted while cuffing yourself.
handcuff-component-cuff-interrupt-buckled-message = You can't uncuff while buckled!