Ejemplo n.º 1
0
        public static SkillTreeResponse Deserialize(XDocument xmldoc)
        {
            var res = new SkillTreeResponse();
            res.skillGroupsDict = new Dictionary<int, SkillGroup>();
            res.skillsDict = new Dictionary<int, Skill>();

            var api_response = xmldoc.Element("eveapi");
            var groups = api_response.Element("result").RowSet("skillGroups");
            foreach (var skillGroup in groups.Elements("row"))
            {
                var skills = skillGroup.RowSet("skills");
                foreach (var skill in skills.Elements("row"))
                {

                    int published = skill.AttributeInt("published");
                    if (published == 0)
                    {
                        continue;
                    }

                    Skill sk = new Skill
                    {
                        rank = skill.ElementInt("rank"),
                        typeName = skill.AttributeString("typeName"),
                        typeID = skill.AttributeInt("typeID"),
                        description = skill.ElementString("description"),
                        secondaryAttribute = Skill.Attribute.None,
                        primaryAttribute = Skill.Attribute.None
                    };

                    Dictionary<string, Skill.Attribute> skillAttributeMapping = new Dictionary<string, Skill.Attribute>();
                    skillAttributeMapping.Add("memory", Skill.Attribute.Memory);
                    skillAttributeMapping.Add("intelligence", Skill.Attribute.Intelligence);
                    skillAttributeMapping.Add("charisma", Skill.Attribute.Charisma);
                    skillAttributeMapping.Add("willpower", Skill.Attribute.Willpower);
                    skillAttributeMapping.Add("perception", Skill.Attribute.Perception);

                    XElement requiredAttributes = skill.Element("requiredAttributes");

                    if (requiredAttributes != null)
                    {

                        string primary = requiredAttributes.ElementString("primaryAttribute");
                        string secondary = requiredAttributes.ElementString("secondaryAttribute");

                        if (primary != null && secondary != null)
                        {
                            if (skillAttributeMapping.ContainsKey(primary))
                            {
                                sk.primaryAttribute = skillAttributeMapping[primary];
                            }
                            if (skillAttributeMapping.ContainsKey(secondary))
                            {
                                sk.secondaryAttribute = skillAttributeMapping[secondary];
                            }
                        }
                    }

                    sk.requiredSkills = new List<RequiredSkill>();

                    var required_skills = skill.RowSet("requiredSkills");
                    foreach (var required_skill in required_skills.Elements("row"))
                    {
                        RequiredSkill rs = new RequiredSkill
                        {
                            skillLevel = required_skill.AttributeInt("skillLevel"),
                            typeID = required_skill.AttributeInt("typeID")
                        };
                        sk.requiredSkills.Add(rs);
                    }

                    var skillBonusCollection = skill.RowSet("skillBonusCollection");

                    var regEx = new Regex(@"requiredSkill(\d+)");

                    foreach (var skillBonus in skillBonusCollection.Elements("row"))
                    {
                        string str = skillBonus.AttributeString("bonusType");
                        Match match = regEx.Match(str);
                        if (match.Success)
                        {
                            var matchingLevel = skillBonusCollection.Elements("row").FirstOrDefault( x=> x.AttributeString("bonusType") == (str +"Level"));

                            if (matchingLevel != null)
                            {
                                RequiredSkill rs = new RequiredSkill
                                {
                                    skillLevel = matchingLevel.AttributeInt("bonusValue"),
                                    typeID = skillBonus.AttributeInt("bonusValue")
                                };

                                sk.requiredSkills.Add(rs);
                            }
                        }
                    }

                    int groupID = skill.AttributeInt("groupID");
                    SkillGroup a;
                    if (res.skillGroupsDict.ContainsKey(groupID))
                    {
                        a = res.skillGroupsDict[groupID];
                    }
                    else
                    {
                        a = new SkillGroup
                        {
                            groupID = groupID,
                            groupName = skillGroup.AttributeString("groupName")
                        };
                        res.skillGroupsDict.Add(a.groupID, a);
                    }
                    sk.group = a;
                    if (!res.skillsDict.ContainsKey(sk.typeID))
                    {
                        res.skillsDict.Add(sk.typeID, sk);
                    }
                }
            }
            foreach (var b in res.skillsDict.SelectMany(sk => sk.Value.requiredSkills.Where(b => res.skillsDict.ContainsKey(b.typeID))))
            {
                b.skill = res.skillsDict[b.typeID];
            }

            //var titanskill = res.skillsDict.FirstOrDefault(x => x.Value.typeName == "Amarr Titan");
            //if (titanskill.Value != null)
            //{
            //    titanskill.Value.PrintRequiredSkills(0);
            //}

            return res;
        }
Ejemplo n.º 2
0
 public CharacterSheetOld(Character c, bool forcedRefresh, SkillTreeResponse skilltree)
 {
     this.character = c;
     this.forcedRefresh = forcedRefresh;
     this.skilltree = skilltree;
 }