diff --git a/OpenRA.Mods.RA/Missions/Allies01Script.cs b/OpenRA.Mods.RA/Missions/Allies01Script.cs index 65c6ea8bf0..46c574a5e6 100644 --- a/OpenRA.Mods.RA/Missions/Allies01Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies01Script.cs @@ -147,7 +147,7 @@ namespace OpenRA.Mods.RA.Missions else if (einstein != null && einstein.Destroyed) MissionFailed("Einstein was killed."); - ManageSovietOre(); + MissionUtils.CapOre(soviets); } void LabSecured() @@ -173,14 +173,6 @@ namespace OpenRA.Mods.RA.Missions } } - void ManageSovietOre() - { - var res = soviets.PlayerActor.Trait(); - - if (res.Ore > res.OreCapacity * 0.8) - res.TakeOre(res.OreCapacity / 10); - } - void SpawnSignalFlare() { world.CreateActor(SignalFlareName, new TypeDictionary { new OwnerInit(allies), new LocationInit(extractionLZ.Location) }); diff --git a/OpenRA.Mods.RA/Missions/Allies04Script.cs b/OpenRA.Mods.RA/Missions/Allies04Script.cs index 9d1ab946e3..38f81e02e4 100644 --- a/OpenRA.Mods.RA/Missions/Allies04Script.cs +++ b/OpenRA.Mods.RA/Missions/Allies04Script.cs @@ -167,7 +167,7 @@ namespace OpenRA.Mods.RA.Missions foreach (var patrol in patrols) patrol.DoPatrol(); - ManageSovietOre(); + MissionUtils.CapOre(soviets); BaseGuardTick(); @@ -218,13 +218,6 @@ namespace OpenRA.Mods.RA.Missions MissionFailed("The Soviet research laboratory was not secured in time."); } - void ManageSovietOre() - { - var res = soviets.PlayerActor.Trait(); - if (res.Ore > res.OreCapacity * 0.8) - res.TakeOre(res.OreCapacity / 10); - } - void BaseGuardTick() { if (baseGuardTicks <= 0 || baseGuard.IsDead() || !baseGuard.IsInWorld) return; diff --git a/OpenRA.Mods.RA/Missions/MissionUtils.cs b/OpenRA.Mods.RA/Missions/MissionUtils.cs index 0affece064..1e5d5ff81a 100644 --- a/OpenRA.Mods.RA/Missions/MissionUtils.cs +++ b/OpenRA.Mods.RA/Missions/MissionUtils.cs @@ -205,18 +205,26 @@ namespace OpenRA.Mods.RA.Missions Sound.Play("misnlst1.aud"); } - public static void SpawnAndMoveActors(World world, Player player, string[] actorNames, CPos entry, CPos move, int facing) + public static Actor CreateActor(this World world, bool addToWorld, string name, Player owner, CPos? location, int? facing) { - foreach (var actor in actorNames) - { - world.CreateActor(actor, new TypeDictionary - { - new LocationInit(entry), - new OwnerInit(player), - new FacingInit(facing) - }) - .QueueActivity(new Move.Move(move)); - } + var td = new TypeDictionary { new OwnerInit(owner) }; + if (location.HasValue) + td.Add(new LocationInit(location.Value)); + if (facing.HasValue) + td.Add(new FacingInit(facing.Value)); + return world.CreateActor(addToWorld, name, td); + } + + public static Actor CreateActor(this World world, string name, Player owner, CPos? location, int? facing) + { + return CreateActor(world, true, name, owner, location, facing); + } + + public static void CapOre(Player player) + { + var res = player.PlayerActor.Trait(); + if (res.Ore > res.OreCapacity * 0.8) + res.Ore = (int)(res.OreCapacity * 0.8); } }