diff --git a/OpenRA.Mods.RA/Missions/Allies01Script.cs b/OpenRA.Mods.RA/Missions/Allies01Script.cs index 00bd27572d..8e16b7432e 100644 --- a/OpenRA.Mods.RA/Missions/Allies01Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies01Script.cs @@ -110,9 +110,8 @@ namespace OpenRA.Mods.RA.Missions if (difficulty != "Easy") { ManageSovietUnits(); - if (world.FrameNumber >= currentAttackWaveFrameNumber + 600) + if (world.FrameNumber >= currentAttackWaveFrameNumber + 400) { - Sound.Play("enmyapp1.aud"); SpawnSovietUnits(AttackWave); currentAttackWave++; currentAttackWaveFrameNumber = world.FrameNumber; @@ -190,15 +189,27 @@ namespace OpenRA.Mods.RA.Missions void ManageSovietUnits() { - foreach (var unit in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.IsIdle - && a.HasTrait() && a.HasTrait())) + foreach (var unit in world.Actors.Where(u => u.IsInWorld && u.Owner == soviets && !u.IsDead() && u.IsIdle + && u.HasTrait() && u.HasTrait())) { - Activity inner; - if (einstein != null && einstein.IsInWorld) - inner = new Attack(Target.FromActor(einstein), 3); - else - inner = new Move.Move(extractionLZ.Location, 3); - unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, inner)); + Activity innerActivity; + if (einstein != null) + { + if (einstein.IsInWorld) + innerActivity = new Move.Move(Target.FromActor(einstein), 3); + + else + { + var container = world.UnitContaining(einstein); + + if (container != null && !container.HasTrait() && container.HasTrait()) + innerActivity = new Move.Move(Target.FromActor(container), 3); + + else + innerActivity = new Move.Move(extractionLZ.Location, 3); + } + unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, innerActivity)); + } } } diff --git a/OpenRA.Mods.RA/Missions/Allies03Script.cs b/OpenRA.Mods.RA/Missions/Allies03Script.cs index ed23e76954..f412948be0 100644 --- a/OpenRA.Mods.RA/Missions/Allies03Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies03Script.cs @@ -311,7 +311,7 @@ namespace OpenRA.Mods.RA.Missions foreach (var rallyPoint in sovietRallyPoints) { var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rallyPoint), 10) - .Where(u => u.IsIdle && u.HasTrait() && u.Owner == soviets); + .Where(u => u.IsIdle && u.HasTrait() && u.HasTrait() && u.Owner == soviets); if (units.Count() >= SovietGroupSize) { foreach (var unit in units) diff --git a/OpenRA.Mods.RA/Missions/Allies04Script.cs b/OpenRA.Mods.RA/Missions/Allies04Script.cs index 3b934584de..dc2df3acb1 100644 --- a/OpenRA.Mods.RA/Missions/Allies04Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies04Script.cs @@ -148,11 +148,10 @@ namespace OpenRA.Mods.RA.Missions if (attackingTown) { - foreach (var attacker in townAttackers.Where(a => a.IsIdle && !a.IsDead() && a.IsInWorld)) + foreach (var attacker in townAttackers.Where(u => u.IsIdle && !u.IsDead() && u.IsInWorld)) { var enemies = world.Actors.Where(u => u.Owner == neutral - && ((u.HasTrait() && !u.HasTrait() && !u.HasTrait()) || u.HasTrait()) - && u.HasTrait() && u.HasTrait() && !u.Trait().IsDead && u.IsInWorld); + && ((u.HasTrait() && !u.HasTrait() && !u.HasTrait()) || u.HasTrait()) && !u.IsDead() && u.IsInWorld); var enemy = enemies.OrderBy(u => (attacker.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault(); if (enemy != null)