/// <summary> /// Decodes the specified build. /// </summary> /// <param name="buildValue">The build value.</param> /// <returns> /// The xml structure. /// </returns> public Build Decode(string buildValue) { if (this._knownGems == null) { throw new InvalidOperationException("Must be initialized"); } var build = new Build(); var document = XDocument.Parse(GetXml(buildValue)); var skillsElement = document.Root.Element("Skills"); if (skillsElement != null) { foreach (var element in skillsElement.Elements()) { var skill = Skill.FromXml(element, this._knownGems); if (skill.Gems.Any()) { build.AddSkill(skill); } } } var treeElement = document.Root.Element("Tree"); if (treeElement != null) { var urlElement = treeElement.Descendants("URL").FirstOrDefault(); build.SkillTreeUrl = urlElement.Value.Trim().Replace("passive-skill-tree", "fullscreen-passive-skill-tree"); } return(build); }
/// <summary> /// Decodes the specified build. /// </summary> /// <param name="buildValue">The build value.</param> /// <returns> /// The xml structure. /// </returns> public Build Decode(string buildValue) { if (this._knownGems == null) { throw new InvalidOperationException("Must be initialized"); } var build = new Build() { Value = buildValue, }; var document = XDocument.Parse(GetXml(buildValue)); var skillsElement = document.Root.Element("Skills"); if (skillsElement != null) { foreach (var element in skillsElement.Elements()) { var skill = Skill.FromXml(element, this._knownGems); if (skill.Gems.Any()) { build.AddSkill(skill); } } } var treeElement = document.Root.Element("Tree"); if (treeElement != null) { var urlElement = treeElement.Descendants("URL").FirstOrDefault(); build.SkillTreeUrl = urlElement.Value.Trim().Replace("passive-skill-tree", "fullscreen-passive-skill-tree"); } var itemsElement = document.Root.Element("Items"); foreach (var element in itemsElement.Elements()) { var value = element.Value.GetLineAfter("Rarity: "); if (value != null) { var lines = value.Split('\n'); var rarity = lines.FirstOrDefault(); if (rarity == "UNIQUE" && lines.Length > 2) { var name = lines[1]; var uniqueItem = this._knownUniques.FirstOrDefault(u => u.Name == name); if (uniqueItem != null) { build.AddItem(uniqueItem); } } } } return(build); }
/// <summary> /// Decodes the specified build. /// </summary> /// <param name="buildValue">The build value.</param> /// <returns> /// The xml structure. /// </returns> public Build Decode(string buildValue) { if (this._knownGems == null) { throw new InvalidOperationException("Must be initialized"); } var build = new Build() { Value = buildValue, }; var xml = GetXml(buildValue); if (string.IsNullOrEmpty(xml)) { return(build); } build.Xml = xml; var document = XDocument.Parse(build.Xml); var buildElement = document.Root.Element("Build"); if (buildElement != null) { var classAttribute = buildElement.Attribute("className"); if (classAttribute != null) { build.Class = classAttribute.Value; } var ascendancyAttribute = buildElement.Attribute("ascendClassName"); if (ascendancyAttribute != null) { build.Ascendancy = ascendancyAttribute.Value; } } var notesElement = document.Root.Element("Notes"); if (notesElement != null) { build.Notes = notesElement.Value.Trim(); } var skillsElement = document.Root.Element("Skills"); if (skillsElement != null) { foreach (var element in skillsElement.Elements()) { var skill = Skill.FromXml(element, this._knownGems); if (skill.Gems.Any()) { build.AddSkill(skill); } } } var treeElement = document.Root.Element("Tree"); if (treeElement != null) { var urlElement = treeElement.Descendants("URL").OrderByDescending(d => d.Value).FirstOrDefault(); build.SkillTreeUrl = urlElement.Value.Trim().Replace("passive-skill-tree", "fullscreen-passive-skill-tree"); } var itemsElement = document.Root.Element("Items"); if (itemsElement != null) { foreach (var element in itemsElement.Elements()) { var value = element.Value.GetLineAfter("Rarity: "); if (value != null) { var lines = value.Split('\n'); var rarity = lines.FirstOrDefault(); if (rarity == "UNIQUE" && lines.Length > 2) { var name = lines[1]; var uniqueItem = this._knownUniques.FirstOrDefault(u => u.Name == name); if (uniqueItem != null) { build.AddItem(uniqueItem); } } } } } return(build); }