diff --git a/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs b/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs index df94bc94ee..f4b3a985bf 100644 --- a/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs +++ b/Content.Server/Mech/Equipment/Components/MechGrabberComponent.cs @@ -1,5 +1,6 @@ using System.Numerics; using System.Threading; +using Content.Shared.DoAfter; using Robust.Shared.Audio; using Robust.Shared.Containers; @@ -47,4 +48,7 @@ public sealed partial class MechGrabberComponent : Component [ViewVariables(VVAccess.ReadWrite)] public Container ItemContainer = default!; + + [DataField, ViewVariables(VVAccess.ReadOnly)] + public DoAfterId? DoAfter; } diff --git a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs index 9f5d564d5a..fa46792d2a 100644 --- a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs +++ b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs @@ -128,6 +128,9 @@ public sealed class MechGrabberSystem : EntitySystem if (args.Handled || args.Target is not {} target) return; + if (args.Target == args.User || component.DoAfter != null) + return; + if (TryComp(target, out var physics) && physics.BodyType == BodyType.Static || HasComp(target) || HasComp(target)) @@ -152,15 +155,19 @@ public sealed class MechGrabberSystem : EntitySystem args.Handled = true; component.AudioStream = _audio.PlayPvs(component.GrabSound, uid).Value.Entity; - _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.GrabDelay, new GrabberDoAfterEvent(), uid, target: target, used: uid) + var doAfterArgs = new DoAfterArgs(EntityManager, args.User, component.GrabDelay, new GrabberDoAfterEvent(), uid, target: target, used: uid) { BreakOnTargetMove = true, BreakOnUserMove = true - }); + }; + + _doAfter.TryStartDoAfter(doAfterArgs, out component.DoAfter); } private void OnMechGrab(EntityUid uid, MechGrabberComponent component, DoAfterEvent args) { + component.DoAfter = null; + if (args.Cancelled) { component.AudioStream = _audio.Stop(component.AudioStream);