private static void TechnologyResearch(TechNodeInfo tech) { System.StartIgnoringEvents(); var node = AssetBase.RnDTechTree.GetTreeTechs().ToList().Find(n => n.techID == tech.Id); //Unlock the technology ResearchAndDevelopment.Instance.UnlockProtoTechNode(node); //Refresh RD nodes in case we are in the RD screen if (RDController.Instance && RDController.Instance.partList) { RDController.Instance.partList.Refresh(); RDController.Instance.UpdatePanel(); } //Refresh the tech tree ResearchAndDevelopment.RefreshTechTreeUI(); //Refresh the part list in case we are in the VAB/SPH if (EditorPartList.Instance) { EditorPartList.Instance.Refresh(); } System.StopIgnoringEvents(); LunaLog.Log($"TechnologyResearch received - technology researched: {tech.Id}"); }
/// <summary> /// Patches the scenario file with reputation data /// </summary> private static string UpdateScenarioWithTechnologyData(string scenarioData, TechNodeInfo techNode) { var document = new XmlDocument(); document.LoadXml(scenarioData); var configNodeData = Encoding.UTF8.GetString(techNode.Data, 0, techNode.NumBytes); var newNodeDoc = new XmlDocument(); newNodeDoc.LoadXml(ConfigNodeXmlParser.ConvertToXml(configNodeData)); var parentNode = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}"); if (parentNode != null) { var newTechXmlNode = newNodeDoc.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='Tech']"); if (newTechXmlNode != null) { var importNode = document.ImportNode(newTechXmlNode, true); parentNode.AppendChild(importNode); } } return(document.ToIndentedString()); }
/// <summary> /// Patches the scenario file with reputation data /// </summary> private static string UpdateScenarioWithTechnologyData(string scenarioData, TechNodeInfo techNode) { var document = new XmlDocument(); document.LoadXml(scenarioData); var configNodeData = Encoding.UTF8.GetString(techNode.Data, 0, techNode.NumBytes); var newNodeDoc = new XmlDocument(); newNodeDoc.LoadXml(ConfigNodeXmlParser.ConvertToXml(configNodeData)); var parentNode = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}"); if (parentNode != null) { var newTechXmlNode = newNodeDoc.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='Tech']"); if (newTechXmlNode != null) { var existingNode = parentNode.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='Tech']" + $@"/{ConfigNodeXmlParser.ValueNode}[@name='id' and text()=""{techNode.Id}""]" + $"/parent::{ConfigNodeXmlParser.ParentNode}[@name='Tech']"); if (existingNode != null) { var parts = newTechXmlNode.SelectNodes($"{ConfigNodeXmlParser.ValueNode}[@name='part']"); if (parts != null) { foreach (var part in parts.Cast <XmlNode>()) { var existingPart = existingNode.SelectSingleNode($@"{ConfigNodeXmlParser.ValueNode}[@name='part' and text()=""{part.InnerText}""]"); if (existingPart == null) { var importNode = document.ImportNode(part, true); existingNode.AppendChild(importNode); } } } } else { var importNode = document.ImportNode(newTechXmlNode, true); parentNode.AppendChild(importNode); } } } return(document.ToIndentedString()); }
public void HandleMessage(IServerMessageBase msg) { if (!(msg.Data is ShareProgressBaseMsgData msgData)) { return; } if (msgData.ShareProgressMessageType != ShareProgressMessageType.TechnologyUpdate) { return; } if (msgData is ShareProgressTechnologyMsgData data) { var tech = new TechNodeInfo(data.TechNode); //create a copy of the tech value so it will not change in the future. LunaLog.Log($"Queue TechnologyResearch with: {tech.Id}"); System.QueueAction(() => { TechnologyResearch(tech); }); } }