From bdc142ae51afa72ac1d8bfd4fe926f93194c75bc Mon Sep 17 00:00:00 2001 From: tjk-ws <67940579+tjk-ws@users.noreply.github.com> Date: Sat, 6 Jul 2024 14:11:40 -0500 Subject: [PATCH] Fix a crash caused by invalid target in FlyAttack --- OpenRA.Mods.Common/Activities/Air/FlyAttack.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs index 8ca8951581..02ed77caea 100644 --- a/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs +++ b/OpenRA.Mods.Common/Activities/Air/FlyAttack.cs @@ -141,9 +141,6 @@ namespace OpenRA.Mods.Common.Activities var minimumRange = attackAircraft.Info.AttackType == AirAttackType.Strafe ? WDist.Zero : attackAircraft.GetMinimumRangeVersusTarget(target); - if (checkTarget.IsInRange(pos, lastVisibleMaximumRange) && !checkTarget.IsInRange(pos, minimumRange) && useLastVisibleTarget) - return true; - if (lastVisibleMaximumRange == WDist.Zero || lastVisibleMaximumRange < minimumRange) return true; @@ -153,8 +150,12 @@ namespace OpenRA.Mods.Common.Activities QueueChild(new TakeOff(self)); // Move into range of the target. - if (!target.IsInRange(pos, lastVisibleMaximumRange) || target.IsInRange(pos, minimumRange)) - QueueChild(aircraft.MoveWithinRange(target, minimumRange, lastVisibleMaximumRange, target.CenterPosition, Color.Red)); + if (!checkTarget.IsInRange(pos, lastVisibleMaximumRange) || checkTarget.IsInRange(pos, minimumRange)) + QueueChild(aircraft.MoveWithinRange(target, minimumRange, lastVisibleMaximumRange, checkTarget.CenterPosition, Color.Red)); + + // We've reached the assumed position but it is not there - give up + else if (useLastVisibleTarget) + return true; // The aircraft must keep moving forward even if it is already in an ideal position. else if (attackAircraft.Info.AttackType == AirAttackType.Strafe)