Retractable items get removed by handcuffs (#38441)
* init * oops * happens * review * fix
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Cuffs;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Interaction.Components;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Containers;
|
||||
@@ -26,6 +30,7 @@ public sealed class RetractableItemActionSystem : EntitySystem
|
||||
SubscribeLocalEvent<RetractableItemActionComponent, OnRetractableItemActionEvent>(OnRetractableItemAction);
|
||||
|
||||
SubscribeLocalEvent<ActionRetractableItemComponent, ComponentShutdown>(OnActionSummonedShutdown);
|
||||
Subs.SubscribeWithRelay<ActionRetractableItemComponent, HeldRelayedEvent<TargetHandcuffedEvent>>(OnItemHandcuffed, inventory: false);
|
||||
}
|
||||
|
||||
private void OnActionInit(Entity<RetractableItemActionComponent> ent, ref MapInitEvent args)
|
||||
@@ -58,16 +63,11 @@ public sealed class RetractableItemActionSystem : EntitySystem
|
||||
|
||||
if (_hands.IsHolding(args.Performer, ent.Comp.ActionItemUid))
|
||||
{
|
||||
RemComp<UnremoveableComponent>(ent.Comp.ActionItemUid.Value);
|
||||
var container = _containers.GetContainer(ent, RetractableItemActionComponent.ContainerId);
|
||||
_containers.Insert(ent.Comp.ActionItemUid.Value, container);
|
||||
_audio.PlayPredicted(ent.Comp.RetractSounds, action.Comp.AttachedEntity.Value, action.Comp.AttachedEntity.Value);
|
||||
RetractRetractableItem(args.Performer, ent.Comp.ActionItemUid.Value, ent.Owner);
|
||||
}
|
||||
else
|
||||
{
|
||||
_hands.TryForcePickup(args.Performer, ent.Comp.ActionItemUid.Value, userHand, checkActionBlocker: false);
|
||||
_audio.PlayPredicted(ent.Comp.SummonSounds, action.Comp.AttachedEntity.Value, action.Comp.AttachedEntity.Value);
|
||||
EnsureComp<UnremoveableComponent>(ent.Comp.ActionItemUid.Value);
|
||||
SummonRetractableItem(args.Performer, ent.Comp.ActionItemUid.Value, userHand, ent.Owner);
|
||||
}
|
||||
|
||||
args.Handled = true;
|
||||
@@ -85,6 +85,20 @@ public sealed class RetractableItemActionSystem : EntitySystem
|
||||
PopulateActionItem(action.Owner);
|
||||
}
|
||||
|
||||
private void OnItemHandcuffed(Entity<ActionRetractableItemComponent> ent, ref HeldRelayedEvent<TargetHandcuffedEvent> args)
|
||||
{
|
||||
if (_actions.GetAction(ent.Comp.SummoningAction) is not { } action)
|
||||
return;
|
||||
|
||||
if (action.Comp.AttachedEntity == null)
|
||||
return;
|
||||
|
||||
if (_hands.GetActiveHand(action.Comp.AttachedEntity.Value) is not { } userHand)
|
||||
return;
|
||||
|
||||
RetractRetractableItem(action.Comp.AttachedEntity.Value, ent, action.Owner);
|
||||
}
|
||||
|
||||
private void PopulateActionItem(Entity<RetractableItemActionComponent?> ent)
|
||||
{
|
||||
if (!Resolve(ent.Owner, ref ent.Comp, false) || TerminatingOrDeleted(ent))
|
||||
@@ -102,4 +116,25 @@ public sealed class RetractableItemActionSystem : EntitySystem
|
||||
|
||||
Dirty(ent);
|
||||
}
|
||||
|
||||
private void RetractRetractableItem(EntityUid holder, EntityUid item, Entity<RetractableItemActionComponent?> action)
|
||||
{
|
||||
if (!Resolve(action, ref action.Comp, false))
|
||||
return;
|
||||
|
||||
RemComp<UnremoveableComponent>(item);
|
||||
var container = _containers.GetContainer(action, RetractableItemActionComponent.ContainerId);
|
||||
_containers.Insert(item, container);
|
||||
_audio.PlayPredicted(action.Comp.RetractSounds, holder, holder);
|
||||
}
|
||||
|
||||
private void SummonRetractableItem(EntityUid holder, EntityUid item, Hand hand, Entity<RetractableItemActionComponent?> action)
|
||||
{
|
||||
if (!Resolve(action, ref action.Comp, false))
|
||||
return;
|
||||
|
||||
_hands.TryForcePickup(holder, item, hand, checkActionBlocker: false);
|
||||
_audio.PlayPredicted(action.Comp.SummonSounds, holder, holder);
|
||||
EnsureComp<UnremoveableComponent>(item);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user