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