diff --git a/OpenRA.Mods.RA/Missions/Allies03Script.cs b/OpenRA.Mods.RA/Missions/Allies03Script.cs index c63d75cd62..1c55b5c198 100644 --- a/OpenRA.Mods.RA/Missions/Allies03Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies03Script.cs @@ -141,12 +141,12 @@ namespace OpenRA.Mods.RA.Missions attackAtFrame += attackAtFrameIncrement; attackAtFrameIncrement = Math.Max(attackAtFrameIncrement - 5, 100); } - if (world.FrameNumber % YakSpawnTicks == 0 && SovietAircraft().Count() < MaxNumberYaks && objectives[AirbaseID].Status != ObjectiveStatus.Completed) - { - SpawnSovietAircraft(); - } if (objectives[AirbaseID].Status != ObjectiveStatus.Completed) { + if (world.FrameNumber % YakSpawnTicks == 0 && SovietAircraft().Count() < MaxNumberYaks) + { + SpawnSovietAircraft(); + } ManageSovietAircraft(); } ManageSovietUnits(); @@ -176,8 +176,7 @@ namespace OpenRA.Mods.RA.Missions var ammo = aircraft.Trait(); if ((plane.Altitude == 0 && ammo.FullAmmo()) || (plane.Altitude != 0 && ammo.HasAmmo())) { - var enemy = enemies.OrderBy(u => (aircraft.CenterLocation - u.CenterLocation).LengthSquared) - .FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterLocation, 10).All(a => !a.HasTrait())); + var enemy = enemies.OrderBy(u => (aircraft.CenterLocation - u.CenterLocation).LengthSquared).FirstUnshroudedOrDefault(world, 10); if (enemy != null) { if (!aircraft.IsIdle && aircraft.GetCurrentActivity().GetType() != typeof(FlyAttack)) @@ -254,8 +253,7 @@ namespace OpenRA.Mods.RA.Missions { var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == allies1 || u.Owner == allies2) && ((u.HasTrait() && !u.HasTrait()) || u.HasTrait())); - var enemy = enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared) - .FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterLocation, 10).All(a => !a.HasTrait())); + var enemy = enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared).FirstUnshroudedOrDefault(world, 10); if (enemy != null) { self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), 3))); diff --git a/OpenRA.Mods.RA/Missions/MissionUtils.cs b/OpenRA.Mods.RA/Missions/MissionUtils.cs index 3c0e7391cc..e4e4c5dc7e 100644 --- a/OpenRA.Mods.RA/Missions/MissionUtils.cs +++ b/OpenRA.Mods.RA/Missions/MissionUtils.cs @@ -100,6 +100,11 @@ namespace OpenRA.Mods.RA.Missions badger.QueueActivity(new RemoveSelf()); } + public static Actor FirstUnshroudedOrDefault(this IEnumerable actors, World world, int shroudRange) + { + return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterLocation, shroudRange).All(a => !a.HasTrait())); + } + public static bool AreaSecuredWithUnits(World world, Player player, PPos location, int range) { var units = world.FindAliveCombatantActorsInCircle(location, range).Where(a => a.HasTrait());