Fix zipties (#13600)
This commit is contained in:
@@ -31,16 +31,6 @@ namespace Content.Server.Cuffs.Components
|
|||||||
[Dependency] private readonly IComponentFactory _componentFactory = default!;
|
[Dependency] private readonly IComponentFactory _componentFactory = default!;
|
||||||
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
|
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// How many of this entity's hands are currently cuffed.
|
|
||||||
/// </summary>
|
|
||||||
[ViewVariables]
|
|
||||||
public int CuffedHandCount => Container.ContainedEntities.Count * 2;
|
|
||||||
|
|
||||||
public EntityUid LastAddedCuffs => Container.ContainedEntities[^1];
|
|
||||||
|
|
||||||
public IReadOnlyList<EntityUid> StoredEntities => Container.ContainedEntities;
|
|
||||||
|
|
||||||
private bool _uncuffing;
|
private bool _uncuffing;
|
||||||
|
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
@@ -102,24 +92,10 @@ namespace Content.Server.Cuffs.Components
|
|||||||
sys.TryDrop(user, handcuff);
|
sys.TryDrop(user, handcuff);
|
||||||
|
|
||||||
Container.Insert(handcuff);
|
Container.Insert(handcuff);
|
||||||
CanStillInteract = _entMan.TryGetComponent(Owner, out HandsComponent? ownerHands) && ownerHands.Hands.Count() > CuffedHandCount;
|
|
||||||
_entMan.EntitySysManager.GetEntitySystem<ActionBlockerSystem>().UpdateCanMove(Owner);
|
|
||||||
|
|
||||||
var ev = new CuffedStateChangeEvent();
|
|
||||||
_entMan.EventBus.RaiseLocalEvent(Owner, ref ev, true);
|
|
||||||
UpdateAlert();
|
|
||||||
UpdateHeldItems(handcuff);
|
UpdateHeldItems(handcuff);
|
||||||
Dirty(_entMan);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CuffedStateChanged()
|
|
||||||
{
|
|
||||||
UpdateAlert();
|
|
||||||
var ev = new CuffedStateChangeEvent();
|
|
||||||
_entMan.EventBus.RaiseLocalEvent(Owner, ref ev, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds virtual cuff items to the user's hands.
|
/// Adds virtual cuff items to the user's hands.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -269,6 +245,7 @@ namespace Content.Server.Cuffs.Components
|
|||||||
SoundSystem.Play(cuff.EndUncuffSound.GetSound(), Filter.Pvs(Owner), Owner);
|
SoundSystem.Play(cuff.EndUncuffSound.GetSound(), Filter.Pvs(Owner), Owner);
|
||||||
|
|
||||||
_entMan.EntitySysManager.GetEntitySystem<HandVirtualItemSystem>().DeleteInHandsMatching(user, cuffsToRemove);
|
_entMan.EntitySysManager.GetEntitySystem<HandVirtualItemSystem>().DeleteInHandsMatching(user, cuffsToRemove);
|
||||||
|
Container.Remove(cuffsToRemove);
|
||||||
|
|
||||||
if (cuff.BreakOnRemove)
|
if (cuff.BreakOnRemove)
|
||||||
{
|
{
|
||||||
@@ -281,14 +258,6 @@ namespace Content.Server.Cuffs.Components
|
|||||||
_entMan.EntitySysManager.GetEntitySystem<SharedHandsSystem>().PickupOrDrop(user, cuffsToRemove);
|
_entMan.EntitySysManager.GetEntitySystem<SharedHandsSystem>().PickupOrDrop(user, cuffsToRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
CanStillInteract = _entMan.TryGetComponent(Owner, out HandsComponent? handsComponent) && handsComponent.SortedHands.Count() > CuffedHandCount;
|
|
||||||
_entMan.EntitySysManager.GetEntitySystem<ActionBlockerSystem>().UpdateCanMove(Owner);
|
|
||||||
|
|
||||||
var ev = new CuffedStateChangeEvent();
|
|
||||||
_entMan.EventBus.RaiseLocalEvent(Owner, ref ev, true);
|
|
||||||
UpdateAlert();
|
|
||||||
Dirty(_entMan);
|
|
||||||
|
|
||||||
if (CuffedHandCount == 0)
|
if (CuffedHandCount == 0)
|
||||||
{
|
{
|
||||||
user.PopupMessage(Loc.GetString("cuffable-component-remove-cuffs-success-message"));
|
user.PopupMessage(Loc.GetString("cuffable-component-remove-cuffs-success-message"));
|
||||||
|
|||||||
@@ -193,10 +193,7 @@ namespace Content.Server.Cuffs
|
|||||||
|
|
||||||
if (dirty)
|
if (dirty)
|
||||||
{
|
{
|
||||||
cuffable.CanStillInteract = handCount > cuffable.CuffedHandCount;
|
UpdateCuffState(owner, cuffable);
|
||||||
_actionBlockerSystem.UpdateCanMove(cuffable.Owner);
|
|
||||||
cuffable.CuffedStateChanged();
|
|
||||||
Dirty(cuffable);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,16 @@ namespace Content.Shared.Cuffs.Components
|
|||||||
[Dependency] private readonly IEntitySystemManager _sysMan = default!;
|
[Dependency] private readonly IEntitySystemManager _sysMan = default!;
|
||||||
[Dependency] private readonly IComponentFactory _componentFactory = default!;
|
[Dependency] private readonly IComponentFactory _componentFactory = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// How many of this entity's hands are currently cuffed.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables]
|
||||||
|
public int CuffedHandCount => Container.ContainedEntities.Count * 2;
|
||||||
|
|
||||||
|
public EntityUid LastAddedCuffs => Container.ContainedEntities[^1];
|
||||||
|
|
||||||
|
public IReadOnlyList<EntityUid> StoredEntities => Container.ContainedEntities;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Container of various handcuffs currently applied to the entity.
|
/// Container of various handcuffs currently applied to the entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,24 +1,33 @@
|
|||||||
using Content.Shared.ActionBlocker;
|
using Content.Shared.ActionBlocker;
|
||||||
|
using Content.Shared.Alert;
|
||||||
using Content.Shared.Cuffs.Components;
|
using Content.Shared.Cuffs.Components;
|
||||||
using Content.Shared.DragDrop;
|
using Content.Shared.DragDrop;
|
||||||
|
using Content.Shared.Hands.Components;
|
||||||
using Content.Shared.Interaction.Events;
|
using Content.Shared.Interaction.Events;
|
||||||
using Content.Shared.Inventory.Events;
|
using Content.Shared.Inventory.Events;
|
||||||
using Content.Shared.Item;
|
using Content.Shared.Item;
|
||||||
using Content.Shared.Movement;
|
|
||||||
using Content.Shared.Movement.Events;
|
using Content.Shared.Movement.Events;
|
||||||
using Content.Shared.Physics.Pull;
|
using Content.Shared.Physics.Pull;
|
||||||
using Content.Shared.Pulling.Components;
|
using Content.Shared.Pulling.Components;
|
||||||
using Content.Shared.Pulling.Events;
|
using Content.Shared.Pulling.Events;
|
||||||
|
using Content.Shared.Rejuvenate;
|
||||||
|
using Robust.Shared.Containers;
|
||||||
|
|
||||||
namespace Content.Shared.Cuffs
|
namespace Content.Shared.Cuffs
|
||||||
{
|
{
|
||||||
public abstract class SharedCuffableSystem : EntitySystem
|
public abstract class SharedCuffableSystem : EntitySystem
|
||||||
{
|
{
|
||||||
[Dependency] private readonly ActionBlockerSystem _blocker = default!;
|
[Dependency] private readonly ActionBlockerSystem _blocker = default!;
|
||||||
|
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||||
|
[Dependency] private readonly AlertsSystem _alerts = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<SharedCuffableComponent, EntRemovedFromContainerMessage>(OnCuffCountChanged);
|
||||||
|
SubscribeLocalEvent<SharedCuffableComponent, EntInsertedIntoContainerMessage>(OnCuffCountChanged);
|
||||||
|
SubscribeLocalEvent<SharedCuffableComponent, RejuvenateEvent>(OnRejuvenate);
|
||||||
|
|
||||||
SubscribeLocalEvent<SharedCuffableComponent, StopPullingEvent>(HandleStopPull);
|
SubscribeLocalEvent<SharedCuffableComponent, StopPullingEvent>(HandleStopPull);
|
||||||
SubscribeLocalEvent<SharedCuffableComponent, UpdateCanMoveEvent>(HandleMoveAttempt);
|
SubscribeLocalEvent<SharedCuffableComponent, UpdateCanMoveEvent>(HandleMoveAttempt);
|
||||||
SubscribeLocalEvent<SharedCuffableComponent, AttackAttemptEvent>(CheckAct);
|
SubscribeLocalEvent<SharedCuffableComponent, AttackAttemptEvent>(CheckAct);
|
||||||
@@ -33,6 +42,36 @@ namespace Content.Shared.Cuffs
|
|||||||
SubscribeLocalEvent<SharedCuffableComponent, PullStoppedMessage>(OnPull);
|
SubscribeLocalEvent<SharedCuffableComponent, PullStoppedMessage>(OnPull);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnRejuvenate(EntityUid uid, SharedCuffableComponent component, RejuvenateEvent args)
|
||||||
|
{
|
||||||
|
_container.EmptyContainer(component.Container, true, attachToGridOrMap: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCuffCountChanged(EntityUid uid, SharedCuffableComponent component, ContainerModifiedMessage args)
|
||||||
|
{
|
||||||
|
if (args.Container == component.Container)
|
||||||
|
UpdateCuffState(uid, component);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateCuffState(EntityUid uid, SharedCuffableComponent component)
|
||||||
|
{
|
||||||
|
var canInteract = TryComp(uid, out SharedHandsComponent? hands) && hands.Hands.Count > component.CuffedHandCount;
|
||||||
|
|
||||||
|
if (canInteract == component.CanStillInteract)
|
||||||
|
return;
|
||||||
|
|
||||||
|
component.CanStillInteract = canInteract;
|
||||||
|
Dirty(component);
|
||||||
|
_blocker.UpdateCanMove(uid);
|
||||||
|
|
||||||
|
if (component.CanStillInteract)
|
||||||
|
_alerts.ClearAlert(uid, AlertType.Handcuffed);
|
||||||
|
else
|
||||||
|
_alerts.ShowAlert(uid, AlertType.Handcuffed);
|
||||||
|
|
||||||
|
var ev = new CuffedStateChangeEvent();
|
||||||
|
RaiseLocalEvent(uid, ref ev);
|
||||||
|
}
|
||||||
|
|
||||||
private void OnBeingPulledAttempt(EntityUid uid, SharedCuffableComponent component, BeingPulledAttemptEvent args)
|
private void OnBeingPulledAttempt(EntityUid uid, SharedCuffableComponent component, BeingPulledAttemptEvent args)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user