/// <summary> /// Load a skill from a xml node from a saved .chum5 file /// </summary> /// <param name="n">The XML node describing the skill</param> /// <param name="character">The character this skill belongs to</param> /// <returns></returns> public static Skill Load(Character character, XmlNode n) { if (n["suid"] == null) { return(null); } Guid suid; if (!Guid.TryParse(n["suid"].InnerText, out suid)) { return(null); } Skill skill; if (suid != Guid.Empty) { XmlDocument skills = XmlManager.Instance.Load("skills.xml"); XmlNode node = skills.SelectSingleNode($"/chummer/skills/skill[id = '{n["suid"].InnerText}']"); if (node == null) { return(null); } if (node["exotic"]?.InnerText == "Yes") { ExoticSkill exotic = new ExoticSkill(character, node); exotic.Load(n); skill = exotic; } else { skill = new Skill(character, node); } } else //This is ugly but i'm not sure how to make it pretty { if (n["forced"] != null) { skill = new KnowledgeSkill(character, n["name"].InnerText); } else { KnowledgeSkill knoSkill = new KnowledgeSkill(character); knoSkill.Load(n); skill = knoSkill; } } XmlElement element = n["guid"]; if (element != null) { skill.Id = Guid.Parse(element.InnerText); } n.TryGetField("karma", out skill._karma); n.TryGetField("base", out skill._base); n.TryGetField("buywithkarma", out skill._buyWithKarma); n.TryGetField("notes", out skill._strNotes); foreach (XmlNode spec in n.SelectNodes("specs/spec")) { skill.Specializations.Add(SkillSpecialization.Load(spec)); } return(skill); }
/// <summary> /// Load a skill from a xml node from a saved .chum5 file /// </summary> /// <param name="n">The XML node describing the skill</param> /// <param name="character">The character this skill belongs to</param> /// <returns></returns> public static Skill Load(Character character, XmlNode n) { if (n?["suid"] == null) { return(null); } Guid suid; if (!Guid.TryParse(n["suid"].InnerText, out suid)) { return(null); } XmlDocument skills = XmlManager.Instance.Load("skills.xml"); Skill skill = null; bool blnIsKnowledgeSkill = false; if (n.TryGetBoolFieldQuickly("isknowledge", ref blnIsKnowledgeSkill) && blnIsKnowledgeSkill) { KnowledgeSkill knoSkill = new KnowledgeSkill(character); knoSkill.Load(n); skill = knoSkill; } else if (suid != Guid.Empty) { XmlNode node = skills.SelectSingleNode($"/chummer/skills/skill[id = '{n["suid"].InnerText}']"); if (node == null) { return(null); } if (node["exotic"]?.InnerText == "Yes") { ExoticSkill exotic = new ExoticSkill(character, node); exotic.Load(n); skill = exotic; } else { skill = new Skill(character, node); } } /* * else //This is ugly but i'm not sure how to make it pretty * { * if (n["forced"] != null && n["name"] != null) * { * skill = new KnowledgeSkill(character, n["name"].InnerText); * } * else * { * KnowledgeSkill knoSkill = new KnowledgeSkill(character); * knoSkill.Load(n); * skill = knoSkill; * } * } */ if (skill == null) { skill = new KnowledgeSkill(character, n["name"]?.InnerText ?? string.Empty); } XmlElement element = n["guid"]; if (element != null) { skill.Id = Guid.Parse(element.InnerText); } n.TryGetInt32FieldQuickly("karma", ref skill._karma); n.TryGetInt32FieldQuickly("base", ref skill._base); n.TryGetBoolFieldQuickly("buywithkarma", ref skill._buyWithKarma); n.TryGetStringFieldQuickly("notes", ref skill._strNotes); foreach (XmlNode spec in n.SelectNodes("specs/spec")) { skill.Specializations.Add(SkillSpecialization.Load(spec)); } XmlNode objCategoryNode = skills.SelectSingleNode($"/chummer/categories/category[. = '{skill.SkillCategory}']"); skill.DisplayCategory = objCategoryNode?.Attributes?["translate"]?.InnerText ?? skill.SkillCategory; return(skill); }