From: ShadowCommander Date: Sat, 13 Apr 2024 15:36:05 +0000 (-0700) Subject: Fix pulling a new entity when already pulling an entity (#26499) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=037a7d7d3d53a623f70a07908299e8fc4df1b4a5;p=space-station-14.git Fix pulling a new entity when already pulling an entity (#26499) Fix pulling when already pulling The TryStopPull were failing due to wrong arguments provided. Replacing the virtual item in hand with a different pull was failing due to the hand not being cleared. Fix stop pulling checks that had the wrong variables provided. VirtualItems are already queue deleted at the end of HandleEntityRemoved. --- 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 (oldPullable != null) - { - // Well couldn't stop the old one. - if (!TryStopPull(oldPullable.Value, pullableComp, user)) - return false; - } + if (TryComp(pullerComp.Pulling, out var oldPullable) + && !TryStopPull(pullerComp.Pulling.Value, oldPullable, pullerUid)) + 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);