From ded92f394c0db0e1100570dffab4b5ba61a3eeb7 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Fri, 23 Jun 2017 19:18:17 +0200 Subject: [PATCH] Upgrade rule for AmmoPool.SelfReloads removal --- .../UtilityCommands/UpgradeRules.cs | 60 +++++++++++++++++++ mods/cnc/rules/aircraft.yaml | 12 ++-- mods/cnc/rules/vehicles.yaml | 6 +- 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 02d87f948a..badcdfa005 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -1053,6 +1053,66 @@ namespace OpenRA.Mods.Common.UtilityCommands } } + // Self-reload properties were decoupled from AmmoPool to ReloadAmmoPool. + if (engineVersion < 20171104) + { + var poolNumber = 0; + var ammoPools = node.Value.Nodes.Where(n => n.Key.StartsWith("AmmoPool", StringComparison.Ordinal)); + foreach (var pool in ammoPools.ToList()) + { + var selfReloads = pool.Value.Nodes.FirstOrDefault(n => n.Key == "SelfReloads"); + if (selfReloads != null && FieldLoader.GetValue("SelfReloads", selfReloads.Value.Value)) + { + poolNumber++; + var name = pool.Value.Nodes.FirstOrDefault(n => n.Key == "Name"); + var selfReloadDelay = pool.Value.Nodes.FirstOrDefault(n => n.Key == "SelfReloadDelay"); + var reloadCount = pool.Value.Nodes.FirstOrDefault(n => n.Key == "ReloadCount"); + var reset = pool.Value.Nodes.FirstOrDefault(n => n.Key == "ResetOnFire"); + var rearmSound = pool.Value.Nodes.FirstOrDefault(n => n.Key == "RearmSound"); + var reloadOnCond = new MiniYamlNode("ReloadAmmoPool@" + poolNumber.ToString(), ""); + + if (name != null) + { + var rap = new MiniYamlNode("ReloadAmmoPool", name.Value.Value); + reloadOnCond.Value.Nodes.Add(rap); + } + + if (selfReloadDelay != null) + { + var rd = selfReloadDelay; + RenameNodeKey(rd, "Delay"); + reloadOnCond.Value.Nodes.Add(rd); + pool.Value.Nodes.Remove(selfReloads); + pool.Value.Nodes.Remove(selfReloadDelay); + } + + if (reloadCount != null) + { + var rc = reloadCount; + RenameNodeKey(rc, "Count"); + reloadOnCond.Value.Nodes.Add(rc); + pool.Value.Nodes.Remove(reloadCount); + } + + if (reset != null) + { + reloadOnCond.Value.Nodes.Add(reset); + pool.Value.Nodes.Remove(reset); + } + + if (rearmSound != null) + { + var rs = rearmSound; + RenameNodeKey(rs, "Sound"); + reloadOnCond.Value.Nodes.Add(rs); + pool.Value.Nodes.Remove(rearmSound); + } + + node.Value.Nodes.Add(reloadOnCond); + } + } + } + UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1); } diff --git a/mods/cnc/rules/aircraft.yaml b/mods/cnc/rules/aircraft.yaml index a7e53a31be..721fda3617 100644 --- a/mods/cnc/rules/aircraft.yaml +++ b/mods/cnc/rules/aircraft.yaml @@ -89,9 +89,6 @@ HELI: AmmoPool: Ammo: 10 PipCount: 5 - SelfReloads: true - ReloadCount: 1 - SelfReloadDelay: 40 WithIdleOverlay@ROTORAIR: Offset: 0,0,85 Sequence: rotor @@ -108,6 +105,9 @@ HELI: EmptyWeapon: HeliExplode SelectionDecorations: VisualBounds: 30,24 + ReloadAmmoPool: + Delay: 40 + Count: 1 ORCA: Inherits: ^Helicopter @@ -144,9 +144,6 @@ ORCA: AmmoPool: Ammo: 6 PipCount: 6 - SelfReloads: true - ReloadCount: 2 - SelfReloadDelay: 100 SpawnActorOnDeath: Actor: ORCA.Husk Explodes: @@ -156,6 +153,9 @@ ORCA: MoveSequence: move SelectionDecorations: VisualBounds: 30,24 + ReloadAmmoPool: + Delay: 100 + Count: 2 C17: Inherits: ^Plane diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index 899c6a3ca9..2613b4886c 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -510,9 +510,6 @@ MLRS: AmmoPool: Ammo: 2 PipCount: 0 - SelfReloads: true - ReloadCount: 1 - SelfReloadDelay: 45 AttackTurreted: WithReloadingSpriteTurret: AmmoPoolName: primary @@ -521,6 +518,9 @@ MLRS: RenderRangeCircle: SpawnActorOnDeath: Actor: MLRS.Husk + ReloadAmmoPool: + Delay: 45 + Count: 1 STNK: Inherits: ^Vehicle