From daa89f52b69082244e9bb9c7ad244850efc61ef3 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Fri, 17 Aug 2012 23:13:35 +1200 Subject: [PATCH] Add lethal Soviet attacks and increase heavy tank production --- OpenRA.Mods.RA/Missions/Allies02Script.cs | 60 +++++++++++++++++----- mods/ra/maps/allies-02.oramap | Bin 11928 -> 11797 bytes 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/OpenRA.Mods.RA/Missions/Allies02Script.cs b/OpenRA.Mods.RA/Missions/Allies02Script.cs index aed681b65f..e8fc788407 100644 --- a/OpenRA.Mods.RA/Missions/Allies02Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies02Script.cs @@ -50,6 +50,7 @@ namespace OpenRA.Mods.RA.Missions Actor extractionLZ; Actor badgerEntryPoint; Actor badgerDropPoint; + Actor sovietRallyPoint; Actor einsteinChinook; @@ -66,17 +67,18 @@ namespace OpenRA.Mods.RA.Missions const string InfantryQueueName = "Infantry"; const string VehicleQueueName = "Vehicle"; - static readonly string[] SovietInfantry = { "e1", "e2", "e3", "dog" }; - static readonly string[] SovietVehicles = { "3tnk", "v2rl" }; + static readonly string[] SovietInfantry = { "e1", "e2", "e3" }; + static readonly string[] SovietVehicles = { "3tnk" }; const int StartReinforcementsTicks = 25 * 10; const int ReinforcementsTicks = 1500 * 12; - static readonly string[] Reinforcements = { "1tnk", "1tnk", "jeep", "mcv" }; + static readonly string[] Reinforcements = { "2tnk", "2tnk", "2tnk", "mcv" }; const int ReinforcementsCash = 2000; const int ParatroopersTicks = 1500 * 5; static readonly string[] Paratroopers = { "e1", "e1", "e1", "e2", "3tnk" }; const string BadgerName = "badr"; + const int SovietAttackGroupSize = 5; const string ChinookName = "tran"; const string SignalFlareName = "flare"; @@ -133,6 +135,10 @@ namespace OpenRA.Mods.RA.Missions { DisplayObjective(); } + if (world.FrameNumber == 1) + { + InitializeSovietFactories(); + } if (world.FrameNumber == StartReinforcementsTicks) { StartReinforcementsTimer(); @@ -143,7 +149,9 @@ namespace OpenRA.Mods.RA.Missions } if (world.FrameNumber % 25 == 0) { + AddSovietCashIfRequired(); BuildSovietUnits(); + ManageSovietUnits(); } if (!engineerMiss.Destroyed && engineer == null && AlliesControlMiss()) { @@ -186,7 +194,7 @@ namespace OpenRA.Mods.RA.Missions } } - void BuildSovietUnits() + void AddSovietCashIfRequired() { var powerManager = soviets.PlayerActor.Trait(); if (powerManager.ExcessPower < 0) @@ -198,20 +206,42 @@ namespace OpenRA.Mods.RA.Missions { resources.GiveCash(ReinforcementsCash); } + } + + void BuildSovietUnits() + { if (!sovietBarracks.Destroyed) { - BuildUnitIfQueueIdle(soviets, InfantryQueueName, SovietInfantry[world.SharedRandom.Next(SovietInfantry.Length)]); + BuildSovietUnit(InfantryQueueName, SovietInfantry.Random(world.SharedRandom)); } if (!sovietWarFactory.Destroyed) { - BuildUnitIfQueueIdle(soviets, VehicleQueueName, SovietVehicles[world.SharedRandom.Next(SovietVehicles.Length)]); + BuildSovietUnit(VehicleQueueName, SovietVehicles.Random(world.SharedRandom)); } } - void InitializeSoviets() + void ManageSovietUnits() { - sovietBarracks.Trait().rallyPoint = allies2BasePoint.Location; - sovietWarFactory.Trait().rallyPoint = allies2BasePoint.Location; + var idleSovietUnits = UnitsNearActor(allies2BasePoint, 20).Where(a => a.Owner == soviets && a.IsIdle); + var idleSovietUnitsAtRP = UnitsNearActor(sovietRallyPoint, 5).Where(a => a.Owner == soviets && a.IsIdle); + if (idleSovietUnitsAtRP.Count() >= SovietAttackGroupSize) + { + idleSovietUnits = idleSovietUnits.Union(idleSovietUnitsAtRP); + } + foreach (var unit in idleSovietUnits) + { + var closestAlliedBuilding = BuildingsNearActor(allies2BasePoint, 20) + .Where(a => a.Owner == allies2) + .OrderBy(a => (unit.Location - a.Location).LengthSquared) + .First(); + unit.QueueActivity(new AttackMove.AttackMoveActivity(unit, new Move.Move(closestAlliedBuilding.Location, 3))); + } + } + + void InitializeSovietFactories() + { + sovietBarracks.Trait().rallyPoint = sovietRallyPoint.Location; + sovietWarFactory.Trait().rallyPoint = sovietRallyPoint.Location; sovietBarracks.Trait().SetPrimaryProducer(sovietBarracks, true); sovietWarFactory.Trait().SetPrimaryProducer(sovietWarFactory, true); } @@ -223,9 +253,9 @@ namespace OpenRA.Mods.RA.Missions .Select(a => a.Trait); } - void BuildUnitIfQueueIdle(Player player, string category, string unit) + void BuildSovietUnit(string category, string unit) { - var queue = FindQueues(player, category).FirstOrDefault(q => q.CurrentItem() == null); + var queue = FindQueues(soviets, category).FirstOrDefault(q => q.CurrentItem() == null); if (queue == null) { return; @@ -298,6 +328,12 @@ namespace OpenRA.Mods.RA.Missions einsteinChinook.QueueActivity(new RemoveSelf()); } + IEnumerable BuildingsNearActor(Actor actor, int range) + { + return world.FindUnitsInCircle(actor.CenterLocation, Game.CellSize * range) + .Where(a => a.IsInWorld && a != world.WorldActor && !a.Destroyed && a.HasTrait() && !a.HasTrait() && !a.Owner.NonCombatant); + } + IEnumerable UnitsNearActor(Actor actor, int range) { return world.FindUnitsInCircle(actor.CenterLocation, Game.CellSize * range) @@ -339,12 +375,12 @@ namespace OpenRA.Mods.RA.Missions engineerMiss = actors["EngineerMiss"]; sovietBarracks = actors["SovietBarracks"]; sovietWarFactory = actors["SovietWarFactory"]; + sovietRallyPoint = actors["SovietRallyPoint"]; w.WorldActor.Trait().Explore(w, sam1.Location, 2); w.WorldActor.Trait().Explore(w, sam2.Location, 2); w.WorldActor.Trait().Explore(w, sam3.Location, 2); w.WorldActor.Trait().Explore(w, sam4.Location, 2); Game.MoveViewport(((w.LocalPlayer ?? allies1) == allies1 ? chinookHusk.Location : allies2BasePoint.Location).ToFloat2()); - InitializeSoviets(); } } diff --git a/mods/ra/maps/allies-02.oramap b/mods/ra/maps/allies-02.oramap index 8bf7d108c2520629140082f156d26bf16b08f041..0d1f830029810911b809412c7c2aa9250da8aaae 100644 GIT binary patch literal 11797 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 NZ~OJv$}{{k`Y*N6X666@ literal 11928 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 GdjAHv5baz5