diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 782bee908a..636f2c55ba 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -435,6 +435,48 @@ namespace OpenRA.Mods.Common.UtilityCommands } } + // Rename Replaced upgrade consumers with conditions + if (engineVersion < 20161117) + { + var upgradeTypesNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "UpgradeTypes"); + if (upgradeTypesNode != null) + { + var upgradeMinEnabledLevel = 0; + var upgradeMaxEnabledLevel = int.MaxValue; + var upgradeMaxAcceptedLevel = 1; + var upgradeTypes = FieldLoader.GetValue("", upgradeTypesNode.Value.Value); + var minEnabledNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "UpgradeMinEnabledLevel"); + if (minEnabledNode != null) + upgradeMinEnabledLevel = FieldLoader.GetValue("", minEnabledNode.Value.Value); + + var maxEnabledNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "UpgradeMaxEnabledLevel"); + if (maxEnabledNode != null) + upgradeMaxEnabledLevel = FieldLoader.GetValue("", maxEnabledNode.Value.Value); + + var maxAcceptedNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "UpgradeMaxAcceptedLevel"); + if (maxAcceptedNode != null) + upgradeMaxAcceptedLevel = FieldLoader.GetValue("", maxAcceptedNode.Value.Value); + + var processed = false; + if (upgradeTypes.Length == 1 && upgradeMinEnabledLevel == 0 && upgradeMaxEnabledLevel == 0 && upgradeMaxAcceptedLevel == 1) + { + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", "!" + upgradeTypes.First())); + processed = true; + } + else if (upgradeTypes.Length == 1 && upgradeMinEnabledLevel == 1 && upgradeMaxEnabledLevel == int.MaxValue && upgradeMaxAcceptedLevel == 1) + { + node.Value.Nodes.Add(new MiniYamlNode("RequiresCondition", upgradeTypes.First())); + processed = true; + } + + if (processed) + node.Value.Nodes.RemoveAll(n => n.Key == "UpgradeTypes" || n.Key == "UpgradeMinEnabledLevel" || + n.Key == "UpgradeMaxEnabledLevel" || n.Key == "UpgradeMaxAcceptedLevel"); + else + Console.WriteLine("Unable to automatically migrate {0}:{1} UpgradeTypes to RequiresCondition. This must be corrected manually", parent.Key, node.Key); + } + } + UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1); }