Beispiel #1
0
        /// <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);
        }