/// <summary> /// Patches the scenario file with strategy data /// </summary> private static string UpdateScenarioWithStrategyData(string scenarioData, StrategyInfo strategy) { var document = new XmlDocument(); document.LoadXml(scenarioData); var strategiesList = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='STRATEGIES']"); if (strategiesList != null) { var receivedStrategy = DeserializeAndImportNode(strategy.Data, strategy.NumBytes, document); if (receivedStrategy != null) { var existingStrategy = strategiesList.SelectSingleNode($"{ConfigNodeXmlParser.ParentNode}[@name='STRATEGY']/" + $@"{ConfigNodeXmlParser.ValueNode}[@name='name' and text()=""{strategy.Name}""]/" + $"parent::{ConfigNodeXmlParser.ParentNode}[@name='STRATEGY']"); if (existingStrategy != null) { //Replace the existing stragegy value with the received one existingStrategy.InnerXml = receivedStrategy.InnerXml; } else { var newStrategyNode = ConfigNodeXmlParser.CreateXmlNode("STRATEGY", document); newStrategyNode.InnerXml = receivedStrategy.InnerXml; strategiesList.AppendChild(newStrategyNode); } } } return(document.ToIndentedString()); }
/// <summary> /// Patches the scenario file with reputation data /// </summary> private static string UpdateScenarioWithContractData(string scenarioData, ContractInfo[] contracts) { var document = new XmlDocument(); document.LoadXml(scenarioData); var contractsList = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='CONTRACTS']"); if (contractsList != null) { foreach (var contract in contracts) { var receivedContract = DeserializeAndImportNode(contract.Data, contract.NumBytes, document); if (receivedContract == null) { continue; } var existingContract = contractsList.SelectSingleNode($"{ConfigNodeXmlParser.ParentNode}[@name='CONTRACT']/" + $@"{ConfigNodeXmlParser.ValueNode}[@name='guid' and text()=""{contract.ContractGuid}""]/" + $"parent::{ConfigNodeXmlParser.ParentNode}[@name='CONTRACT']"); if (existingContract != null) { //Replace the existing contract values with the received one existingContract.InnerXml = receivedContract.InnerXml; } else { var newContractNode = ConfigNodeXmlParser.CreateXmlNode("CONTRACT", document); newContractNode.InnerXml = receivedContract.InnerXml; contractsList.AppendChild(newContractNode); } } } return(document.ToIndentedString()); }
/// <summary> /// Patches the scenario file with achievement data /// </summary> private static string UpdateScenarioWithAchievementData(string scenarioData, AchievementInfo[] achievements) { var document = new XmlDocument(); document.LoadXml(scenarioData); var progressList = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='Progress']"); if (progressList != null) { foreach (var achievement in achievements) { var receivedAchievementXmlNode = DeserializeAndImportNode(achievement.Data, achievement.NumBytes, document); if (receivedAchievementXmlNode == null) { continue; } var existingAchievement = progressList.SelectSingleNode($"{ConfigNodeXmlParser.ParentNode}[@name='{achievement.Id}']"); if (existingAchievement != null) { //Replace the existing contract values with the received one existingAchievement.InnerXml = receivedAchievementXmlNode.InnerXml; } else { var newAchievement = ConfigNodeXmlParser.CreateXmlNode(achievement.Id, document); newAchievement.InnerXml = receivedAchievementXmlNode.InnerXml; progressList.AppendChild(newAchievement); } } } return(document.ToIndentedString()); }