diff --git a/OpenRA.Mods.RA/Missions/Allies04Script.cs b/OpenRA.Mods.RA/Missions/Allies04Script.cs index ae3e4fb78a..9b644f13b2 100644 --- a/OpenRA.Mods.RA/Missions/Allies04Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies04Script.cs @@ -46,13 +46,57 @@ namespace OpenRA.Mods.RA.Missions Player soviets; World world; + static readonly string[] DogPatrol = { "e1", "dog.patrol", "dog.patrol" }; + static readonly string[] InfantryPatrol = { "e1", "e1", "e1", "e1", "e1" }; + + Actor[] patrol1; + CPos[] patrolPoints1; + int currentPatrolPoint1; + Actor[] patrol2; + CPos[] patrolPoints2; + int currentPatrolPoint2 = 3; + Actor[] patrol3; + CPos[] patrolPoints3; + int currentPatrolPoint3; + Actor[] patrol4; + CPos[] patrolPoints4; + int currentPatrolPoint4; + Actor[] patrol5; + CPos[] patrolPoints5; + int currentPatrolPoint5; + public void Tick(Actor self) { if (world.FrameNumber == 1) { InsertSpies(); } - PatrolTick(); + PatrolTick(ref patrol1, ref currentPatrolPoint1, soviets, DogPatrol, patrolPoints1); + PatrolTick(ref patrol2, ref currentPatrolPoint2, soviets, InfantryPatrol, patrolPoints2); + PatrolTick(ref patrol3, ref currentPatrolPoint3, soviets, DogPatrol, patrolPoints3); + PatrolTick(ref patrol4, ref currentPatrolPoint4, soviets, DogPatrol, patrolPoints4); + PatrolTick(ref patrol5, ref currentPatrolPoint5, soviets, DogPatrol, patrolPoints5); + } + + void PatrolTick(ref Actor[] patrolActors, ref int currentPoint, Player owner, string[] actorNames, CPos[] points) + { + if (patrolActors == null) + { + var td = new TypeDictionary { new OwnerInit(owner), new LocationInit(points[currentPoint]) }; + patrolActors = actorNames.Select(f => world.CreateActor(f, td)).ToArray(); + } + var leader = patrolActors[0]; + if (!leader.IsDead() && leader.IsIdle && leader.IsInWorld) + { + currentPoint = (currentPoint + 1) % points.Length; + leader.QueueActivity(new AttackMove.AttackMoveActivity(leader, new Move.Move(points[currentPoint], 0))); + leader.QueueActivity(new Wait(50)); + foreach (var follower in patrolActors.Skip(1)) + { + follower.QueueActivity(new Wait(world.SharedRandom.Next(0, 25))); + follower.QueueActivity(new AttackMove.AttackMoveActivity(follower, new Move.Move(points[currentPoint], 0))); + } + } } void InsertSpies() @@ -77,44 +121,18 @@ namespace OpenRA.Mods.RA.Missions lst.QueueActivity(new RemoveSelf()); } - static readonly string[] DogPatrol = { "e1", "dog.patrol", "dog.patrol" }; - - IEnumerable patrol1; - CPos[] patrolPoints1; - int currentPatrolPoint1; - - void PatrolTick() - { - if (patrol1 == null) - { - var td = new TypeDictionary { new OwnerInit(soviets), new LocationInit(patrolPoints1.First()) }; - patrol1 = DogPatrol.Select(f => world.CreateActor(f, td)).ToArray(); - } - var leader = patrol1.First(); - if (!leader.IsDead() && leader.IsIdle && leader.IsInWorld) - { - currentPatrolPoint1 = (currentPatrolPoint1 + 1) % patrolPoints1.Count(); - leader.QueueActivity(new AttackMove.AttackMoveActivity(leader, new Move.Move(patrolPoints1[currentPatrolPoint1]))); - leader.QueueActivity(new Wait(50)); - foreach (var follower in patrol1.Skip(1)) - { - follower.QueueActivity(new Wait(world.SharedRandom.Next(0, 25))); - follower.QueueActivity(new AttackMove.AttackMoveActivity(follower, new Move.Move(patrolPoints1[currentPatrolPoint1]))); - } - } - } - void SetupSubStances() { - if (Game.IsHost) + if (!Game.IsHost) { - foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.HasTrait())) + return; + } + foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.HasTrait())) + { + world.IssueOrder(new Order("SetUnitStance", actor, false) { - world.IssueOrder(new Order("SetUnitStance", actor, false) - { - TargetLocation = new CPos((int)UnitStance.Defend, 0) - }); - } + TargetLocation = new CPos((int)UnitStance.Defend, 0) + }); } } @@ -139,7 +157,31 @@ namespace OpenRA.Mods.RA.Missions actors["PatrolPoint12"].Location, actors["PatrolPoint13"].Location, actors["PatrolPoint14"].Location, - actors["PatrolPoint15"].Location + actors["PatrolPoint15"].Location + }; + patrolPoints2 = patrolPoints1; + patrolPoints3 = new[] + { + actors["PatrolPoint21"].Location, + actors["PatrolPoint22"].Location, + actors["PatrolPoint23"].Location, + actors["PatrolPoint24"].Location, + actors["PatrolPoint25"].Location + }; + patrolPoints4 = new[] + { + actors["PatrolPoint31"].Location, + actors["PatrolPoint32"].Location, + actors["PatrolPoint33"].Location, + actors["PatrolPoint34"].Location + }; + patrolPoints5 = new[] + { + actors["PatrolPoint41"].Location, + actors["PatrolPoint42"].Location, + actors["PatrolPoint43"].Location, + actors["PatrolPoint44"].Location, + actors["PatrolPoint45"].Location }; SetupSubStances(); Game.MoveViewport(lstEntryPoint.Location.ToFloat2()); diff --git a/mods/ra/maps/allies-04/map.yaml b/mods/ra/maps/allies-04/map.yaml index 5b50364eb2..8a69fe11d9 100644 --- a/mods/ra/maps/allies-04/map.yaml +++ b/mods/ra/maps/allies-04/map.yaml @@ -504,18 +504,18 @@ Actors: Actor118: ftur Location: 98,40 Owner: Soviets - Actor149: silo - Location: 95,27 + Actor149: fact + Location: 95,25 Owner: Soviets + Actor151: v01 + Location: 89,50 + Owner: Neutral Actor150: silo - Location: 96,28 - Owner: Soviets - Actor151: silo - Location: 97,27 - Owner: Soviets - Actor152: silo - Location: 96,26 + Location: 110,28 Owner: Soviets + Actor152: v07 + Location: 79,45 + Owner: Neutral Actor153: apwr Location: 97,16 Owner: Soviets @@ -741,7 +741,7 @@ Actors: Actor225: fenc Location: 95,36 Owner: Soviets - Actor224: 4tnk.husk + Actor224: 4tnk Location: 103,30 Owner: Soviets Actor223: 4tnk @@ -945,8 +945,8 @@ Actors: Actor295: t07 Location: 84,40 Owner: Neutral - Actor296: t06 - Location: 91,49 + PatrolPoint22: waypoint + Location: 92,49 Owner: Neutral Actor297: v08 Location: 72,78 @@ -1302,6 +1302,117 @@ Actors: PatrolPoint14: waypoint Location: 91,83 Owner: Neutral + PatrolPoint21: waypoint + Location: 105,45 + Owner: Neutral + PatrolPoint23: waypoint + Location: 78,53 + Owner: Neutral + PatrolPoint24: waypoint + Location: 92,56 + Owner: Neutral + PatrolPoint25: waypoint + Location: 106,53 + Owner: Neutral + Actor409: e1 + Location: 76,59 + Owner: Soviets + Actor410: e1 + Location: 78,59 + Owner: Soviets + Actor411: dog + Location: 75,58 + Owner: Soviets + Actor412: sbag + Location: 76,60 + Owner: Soviets + Actor413: sbag + Location: 75,60 + Owner: Soviets + Actor414: sbag + Location: 74,60 + Owner: Soviets + Actor415: sbag + Location: 78,60 + Owner: Soviets + Actor416: sbag + Location: 79,60 + Owner: Soviets + Actor417: sbag + Location: 73,60 + Owner: Soviets + PatrolPoint31: waypoint + Location: 83,101 + Owner: Neutral + PatrolPoint32: waypoint + Location: 71,96 + Owner: Neutral + PatrolPoint33: waypoint + Location: 71,87 + Owner: Neutral + PatrolPoint34: waypoint + Location: 92,85 + Owner: Neutral + Actor296: kenn + Location: 90,68 + Owner: Soviets + Actor303: v10 + Location: 97,47 + Owner: Neutral + Actor304: v08 + Location: 78,45 + Owner: Neutral + Actor306: v04 + Location: 87,50 + Owner: Neutral + Actor408: dog + Location: 108,42 + Owner: Soviets + Actor418: dog + Location: 109,74 + Owner: Soviets + Actor419: e1 + Location: 108,75 + Owner: Soviets + Actor420: e1 + Location: 110,75 + Owner: Soviets + Actor421: sbag + Location: 108,73 + Owner: Soviets + Actor422: sbag + Location: 109,73 + Owner: Soviets + Actor423: sbag + Location: 110,73 + Owner: Soviets + Actor424: sbag + Location: 111,73 + Owner: Soviets + PatrolPoint43: waypoint + Location: 109,51 + Owner: Neutral + PatrolPoint42: waypoint + Location: 109,44 + Owner: Neutral + PatrolPoint41: waypoint + Location: 102,41 + Owner: Neutral + PatrolPoint45: waypoint + Location: 93,42 + Owner: Neutral + PatrolPoint44: waypoint + Location: 96,53 + Owner: Neutral + Actor425: dog + Location: 79,22 + Owner: Soviets + Actor426: dog + Location: 93,19 + Owner: Soviets + Actor427: dog + Location: 104,24 + Owner: Soviets Smudges: