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.
This commit is contained in:
@@ -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<PullableComponent>(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);
|
||||
|
||||
Reference in New Issue
Block a user