diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20231010/AbstractDocking.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20231010/AbstractDocking.cs index daec80b914..4b809d581b 100644 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20231010/AbstractDocking.cs +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20231010/AbstractDocking.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules harvesters[actorNode.Key] = harvesterNode.ChildrenMatching("DeliveryBuildings", includeRemovals: false) .FirstOrDefault()?.NodeValue>() ?? []; - if (actorNode.ChildrenMatching("Refinery", includeRemovals: false).Any()) + if (actorNode.HasChild("Refinery")) refineries.Add(actorNode.Key.ToLowerInvariant()); } diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20231010/ReplaceCloakPalette.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20231010/ReplaceCloakPalette.cs index 900ace0580..3f54e14f18 100644 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20231010/ReplaceCloakPalette.cs +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20231010/ReplaceCloakPalette.cs @@ -27,7 +27,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules { foreach (var actor in resolvedActors) foreach (var cloak in actor.ChildrenMatching("Cloak")) - if (cloak.LastChildMatching("Palette", false) == null) + if (cloak.HasChild("Palette")) actorsWithDefault.Add((actor.Key, cloak.Key)); yield break; diff --git a/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs b/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs index bee70b777b..5c6c654b4b 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdateUtils.cs @@ -471,6 +471,13 @@ namespace OpenRA.Mods.Common.UpdateRules return node.Value.Nodes.Where(n => n.KeyMatches(match, ignoreSuffix, includeRemovals)); } + /// Returns true if node exists and is not being removed. + public static bool HasChild( + this MiniYamlNodeBuilder node, string match, bool ignoreSuffix = true) + { + return ChildrenMatching(node, match, ignoreSuffix).LastOrDefault()?.IsRemoval() == false; + } + /// Returns children whose keys contain 'match' (optionally in the suffix). public static IEnumerable ChildrenContaining( this MiniYamlNodeBuilder node, string match, bool ignoreSuffix = true, bool includeRemovals = true)