diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index bfd6393790..e7527e2c76 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Damage.Systems; using Content.Shared.Explosion; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; -using Content.Shared.IdentityManagement; using Content.Shared.Input; using Content.Shared.Inventory.VirtualItem; using Content.Shared.Movement.Pulling.Components; @@ -17,8 +16,6 @@ using Content.Shared.Movement.Pulling.Events; using Content.Shared.Movement.Pulling.Systems; using Content.Shared.Stacks; using Content.Shared.Throwing; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; using Robust.Shared.GameStates; using Robust.Shared.Input.Binding; using Robust.Shared.Map; @@ -160,7 +157,7 @@ namespace Content.Server.Hands.Systems continue; } - QueueDel(hand.HeldEntity.Value); + TryDrop(args.PullerUid, hand, handsComp: component); break; } } diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index acca7aafd0..3c265d5a02 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -301,7 +301,9 @@ public sealed class PullingSystem : EntitySystem return false; } - if (pullerComp.NeedsHands && !_handsSystem.TryGetEmptyHand(puller, out _)) + if (pullerComp.NeedsHands + && !_handsSystem.TryGetEmptyHand(puller, out _) + && pullerComp.Pulling == null) { return false; } @@ -365,7 +367,7 @@ public sealed class PullingSystem : EntitySystem return TogglePull(puller.Pulling.Value, pullerUid, pullable); } - public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, EntityUid? user = null, + public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, PullerComponent? pullerComp = null, PullableComponent? pullableComp = null) { if (!Resolve(pullerUid, ref pullerComp, false) || @@ -387,23 +389,18 @@ public sealed class PullingSystem : EntitySystem } // Ensure that the puller is not currently pulling anything. - var oldPullable = pullerComp.Pulling; + if (TryComp(pullerComp.Pulling, out var oldPullable) + && !TryStopPull(pullerComp.Pulling.Value, oldPullable, pullerUid)) + return false; - if (oldPullable != null) - { - // Well couldn't stop the old one. - if (!TryStopPull(oldPullable.Value, pullableComp, user)) - return false; - } - - // Is the pullable currently being pulled by something else? + // Stop anyone else pulling the entity we want to pull if (pullableComp.Puller != null) { - // Uhhh + // We're already pulling this item if (pullableComp.Puller == pullerUid) return false; - if (!TryStopPull(pullableUid, pullableComp, pullerUid)) + if (!TryStopPull(pullableUid, pullableComp, pullableComp.Puller)) return false; } @@ -469,7 +466,7 @@ public sealed class PullingSystem : EntitySystem var pullerUidNull = pullable.Puller; if (pullerUidNull == null) - return false; + return true; var msg = new AttemptStopPullingEvent(user); RaiseLocalEvent(pullableUid, msg, true);