diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index 7a0b2a18cf..a62bfe5767 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -16,11 +16,11 @@ using OpenRA.FileFormats; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Air; using OpenRA.Mods.RA.Buildings; +using OpenRA.Mods.RA.Effects; +using OpenRA.Mods.RA.Move; using OpenRA.Network; using OpenRA.Traits; using OpenRA.Widgets; -using Gfx = OpenRA.Graphics; -using OpenRA.Mods.RA.Effects; namespace OpenRA.Mods.RA.Missions { @@ -237,17 +237,18 @@ namespace OpenRA.Mods.RA.Missions void ManageSovietUnits() { - var idleSovietUnitsAtRP = ForcesNearLocation(sovietRallyPoint.CenterLocation, 3).Where(a => a.Owner == soviets && a.IsIdle); + var idleSovietUnitsAtRP = ForcesNearLocation(sovietRallyPoint.CenterLocation, 3).Where(a => a.Owner == soviets && a.IsIdle && a.HasTrait()); if (idleSovietUnitsAtRP.Count() >= SovietGroupSize) { - var firstIdleUnit = idleSovietUnitsAtRP.FirstOrDefault(); - if (firstIdleUnit != null) + var firstUnit = idleSovietUnitsAtRP.FirstOrDefault(); + if (firstUnit != null) { - var closestAlliedBuilding = ClosestAlliedBuilding(firstIdleUnit, 20); + var closestAlliedBuilding = ClosestAlliedBuilding(firstUnit, 40); if (closestAlliedBuilding != null) { foreach (var unit in idleSovietUnitsAtRP) { + unit.Trait().Nudge(unit, unit, true); unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(closestAlliedBuilding.Location, 3))); } } @@ -267,15 +268,17 @@ namespace OpenRA.Mods.RA.Missions Actor ClosestAlliedBuilding(Actor actor, int range) { return BuildingsNearLocation(actor.CenterLocation, range) - .Where(a => a.Owner == allies2) - .OrderBy(a => (actor.Location - a.Location).LengthSquared) - .FirstOrDefault(); + .Where(a => a.Owner == allies2) + .OrderBy(a => (actor.Location - a.Location).LengthSquared) + .FirstOrDefault(); } void InitializeSovietFactories() { - sovietBarracks.Trait().rallyPoint = sovietRallyPoint.Location; - sovietWarFactory.Trait().rallyPoint = sovietRallyPoint.Location; + var sbrp = sovietBarracks.Trait(); + var swrp = sovietWarFactory.Trait(); + sbrp.rallyPoint = swrp.rallyPoint = sovietRallyPoint.Location; + sbrp.nearEnough = swrp.nearEnough = 3; sovietBarracks.Trait().SetPrimaryProducer(sovietBarracks, true); sovietWarFactory.Trait().SetPrimaryProducer(sovietWarFactory, true); } diff --git a/OpenRA.Mods.RA/Production.cs b/OpenRA.Mods.RA/Production.cs index 07ba7015a9..16325451a0 100755 --- a/OpenRA.Mods.RA/Production.cs +++ b/OpenRA.Mods.RA/Production.cs @@ -91,7 +91,7 @@ namespace OpenRA.Mods.RA if (mobile != null) { newUnit.QueueActivity(new AttackMove.AttackMoveActivity( - newUnit, mobile.MoveTo(rp.rallyPoint, 1))); + newUnit, mobile.MoveTo(rp.rallyPoint, rp.nearEnough))); return rp.rallyPoint; } diff --git a/OpenRA.Mods.RA/RallyPoint.cs b/OpenRA.Mods.RA/RallyPoint.cs index 961646e572..ba1c410200 100755 --- a/OpenRA.Mods.RA/RallyPoint.cs +++ b/OpenRA.Mods.RA/RallyPoint.cs @@ -1,4 +1,4 @@ -#region Copyright & License Information +#region Copyright & License Information /* * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made @@ -24,6 +24,7 @@ namespace OpenRA.Mods.RA public class RallyPoint : IIssueOrder, IResolveOrder, ISync { [Sync] public CPos rallyPoint; + public int nearEnough = 1; public RallyPoint(Actor self) {