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; }
public CharacterSheetOld(Character c, bool forcedRefresh, SkillTreeResponse skilltree) { this.character = c; this.forcedRefresh = forcedRefresh; this.skilltree = skilltree; }