static void FixPowersXmlUndefinedTechPrereqs(IO.XmlElementStream s, XML.BListXmlParams op, Engine.PhxEngineBuild build) { string xpath_target = string.Format( "/{0}/{1}/Attributes/TechPrereq", op.RootName, op.ElementName); XmlNodeList elements; if (build == Engine.PhxEngineBuild.Release) { elements = s.Document.SelectNodes(xpath_target); foreach (XmlElement e in elements) { if ( // UnscOdstDrop e.InnerText != "unsc_odst_upgrade1" && // CpgnOdstDrop e.InnerText != "cpgn_odst_upgrade" && // UnscCpgn13OrbitalBombard e.InnerText != "unsc_age4") { continue; } FixXmlTraceFixEvent(s, e, "Removing undefined TechPrereq from Power '{0}'", e.InnerText); var p = e.ParentNode; p.RemoveChild(e); } } }
// Remove non-existent ProtoTechs that are referenced by effects static void FixTechsXmlEffectsInvalid(IO.XmlElementStream s, XML.BListXmlParams op, Engine.PhxEngineBuild build) { string xpath_target = string.Format( "/{0}/{1}/Effects/Effect/Target", op.RootName, op.ElementName); XmlNodeList elements; if (build == Engine.PhxEngineBuild.Release) { elements = s.Document.SelectNodes(xpath_target); foreach (XmlElement e in elements) { if (e.InnerText != "unsc_turret_upgrade3") { continue; } FixXmlTraceFixEvent(s, e, "Removing undefined Target from Tech Effect", e.InnerText); var p = e.ParentNode; p.ParentNode.RemoveChild(p); } } }
protected static XmlNode XPathSelectNodeByName(KSoft.IO.XmlElementStream s, XML.BListXmlParams op, string dataName, string attributeName = Phx.DatabaseNamedObject.kXmlAttrName) { string xpath = string.Format( "/{0}/{1}[@{2}='{3}']", op.RootName, op.ElementName, attributeName, dataName); return(s.Document.SelectSingleNode(xpath)); }
static void FixTechsXmlBadNames(KSoft.IO.XmlElementStream s, XML.BListXmlParams op, PhxEngineBuild build) { const string k_attr_command_data = "CommandData"; const string k_element_target = "Target"; string invalid_command_data_format = string.Format( "/{0}/{1}/Effects/Effect[@{2}='", op.RootName, op.ElementName, k_attr_command_data) + "{0}']"; string invalid_target_format = string.Format( "/{0}/{1}/Effects/Effect[Target='", op.RootName, op.ElementName) + "{0}']"; string xpath; XmlNodeList elements; if (!ToLowerName(PhxLib.Engine.DatabaseObjectKind.Unit)) { #region Alpha only if (build == PhxEngineBuild.Alpha) { xpath = string.Format(invalid_target_format, "cov_inf_eliteleader_01"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "cov_inf_eliteLeader_01"; } } } #endregion } #region Alpha only if (build == PhxEngineBuild.Alpha) { xpath = string.Format(invalid_target_format, "cov_inf_elite_leader01"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "cov_inf_eliteLeader_01"; } } } #endregion if (!ToLowerName(PhxLib.Engine.DatabaseObjectKind.Tech)) { #region unsc_MAC_upgrade xpath = string.Format(invalid_command_data_format, "unsc_mac_upgrade1"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { e.Attributes[k_attr_command_data].Value = "unsc_MAC_upgrade1"; } } xpath = string.Format(invalid_command_data_format, "unsc_mac_upgrade2"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { e.Attributes[k_attr_command_data].Value = "unsc_MAC_upgrade2"; } } xpath = string.Format(invalid_command_data_format, "unsc_mac_upgrade3"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { e.Attributes[k_attr_command_data].Value = "unsc_MAC_upgrade3"; } } #endregion #region unsc_flameMarine_upgrade xpath = string.Format(invalid_target_format, "unsc_flamemarine_upgrade1"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "unsc_flameMarine_upgrade1"; } } xpath = string.Format(invalid_target_format, "unsc_flamemarine_upgrade2"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "unsc_flameMarine_upgrade2"; } } xpath = string.Format(invalid_target_format, "unsc_flamemarine_upgrade3"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "unsc_flameMarine_upgrade3"; } } #endregion } if (!ToLowerName(PhxLib.Engine.DatabaseObjectKind.Squad)) { xpath = string.Format(invalid_target_format, "unsc_inf_flamemarine_01"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "unsc_inf_flameMarine_01"; } } xpath = string.Format(invalid_target_format, "unsc_inf_Marine_01"); elements = s.Cursor.SelectNodes(xpath); if (elements.Count > 0) { foreach (XmlElement e in elements) { var fc = e[k_element_target].FirstChild; fc.Value = "unsc_inf_marine_01"; } } } }