From 2ccfa425b2cdd386ebc795491a729d48d867c8eb Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Mon, 2 Dec 2024 21:18:16 +0200 Subject: [PATCH] Cancel movement in invalid states (cherry picked from commit d9cfb2c278aa7fd9c7928ebfc43cded5e85ed1a3) --- OpenRA.Mods.Common/Activities/MoveToDock.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/MoveToDock.cs b/OpenRA.Mods.Common/Activities/MoveToDock.cs index 4fafe57848..b34b9dd774 100644 --- a/OpenRA.Mods.Common/Activities/MoveToDock.cs +++ b/OpenRA.Mods.Common/Activities/MoveToDock.cs @@ -29,6 +29,8 @@ namespace OpenRA.Mods.Common.Activities readonly bool forceEnter; readonly bool ignoreOccupancy; + bool dockingCancelled; + public MoveToDock(Actor self, Actor dockHostActor = null, IDockHost dockHost = null, bool forceEnter = false, bool ignoreOccupancy = false, Color? dockLineColor = null) { @@ -44,17 +46,25 @@ namespace OpenRA.Mods.Common.Activities protected override void OnFirstRun(Actor self) { - if (IsCanceling || dockClient.IsTraitDisabled) + if (dockClient.IsTraitDisabled) return; // We were ordered to dock to an actor but host was unspecified. if (dockHostActor != null && dockHost == null) { + if (dockHostActor.IsDead || !dockHostActor.IsInWorld) + { + dockingCancelled = true; + return; + } + var link = dockClient.AvailableDockHosts(dockHostActor, default, forceEnter, ignoreOccupancy) .ClosestDock(self, dockClient); if (link.HasValue) dockHost = link.Value.Trait; + else + dockingCancelled = true; } } @@ -63,7 +73,7 @@ namespace OpenRA.Mods.Common.Activities if (IsCanceling) return true; - if (dockClient.IsTraitDisabled) + if (dockingCancelled || dockClient.IsTraitDisabled) { Cancel(self, true); return true;