示例#1
0
        public static List <Skill> GetSkillList(Character c, FilterOptions filter, string strName = "")
        {
            //TODO less retarded way please
            List <Skill> b = new List <Skill>();
            // Load the Skills information.
            XmlDocument objXmlDocument = XmlManager.Load("skills.xml");

            // Populate the Skills list.
            XmlNodeList objXmlSkillList = objXmlDocument.SelectNodes("/chummer/skills/skill[not(exotic) and (" + c.Options.BookXPath() + ")" + SkillFilter(filter, strName) + "]");

            // First pass, build up a list of all of the Skills so we can sort them in alphabetical order for the current language.
            Dictionary <string, Skill> dicSkills     = new Dictionary <string, Skill>(objXmlSkillList.Count);
            List <ListItem>            lstSkillOrder = new List <ListItem>();

            foreach (XmlNode objXmlSkill in objXmlSkillList)
            {
                ListItem objSkillItem = new ListItem();
                objSkillItem.Value = objXmlSkill["name"]?.InnerText;
                objSkillItem.Name  = objXmlSkill["translate"]?.InnerText ?? objSkillItem.Value;
                lstSkillOrder.Add(objSkillItem);
                //TODO: read from backup
                Skill objSkill = Skill.FromData(objXmlSkill, c);
                dicSkills.Add(objSkillItem.Value, objSkill);
            }
            SortListItem objSort = new SortListItem();

            lstSkillOrder.Sort(objSort.Compare);

            // Second pass, retrieve the Skills in the order they're presented in the list.
            foreach (ListItem objItem in lstSkillOrder)
            {
                b.Add(dicSkills[objItem.Value]);
            }
            return(b);
        }
示例#2
0
        private static IEnumerable <Skill> GetSkillList(Character c, FilterOptions filter)
        {
            //TODO less retarded way please
            List <Skill> b = new List <Skill>();
            // Load the Skills information.
            XmlDocument objXmlDocument = XmlManager.Instance.Load("skills.xml");

            // Populate the Skills list.
            XmlNodeList objXmlSkillList = objXmlDocument.SelectNodes("/chummer/skills/skill[not(exotic) and (" + c.Options.BookXPath() + ")" + SkillFilter(filter) + "]");

            // First pass, build up a list of all of the Skills so we can sort them in alphabetical order for the current language.
            List <ListItem> lstSkillOrder = new List <ListItem>();

            foreach (XmlNode objXmlSkill in objXmlSkillList)
            {
                ListItem objSkill = new ListItem();
                objSkill.Value = objXmlSkill["name"].InnerText;
                if (objXmlSkill["translate"] != null)
                {
                    objSkill.Name = objXmlSkill["translate"].InnerText;
                }
                else
                {
                    objSkill.Name = objXmlSkill["name"].InnerText;
                }
                lstSkillOrder.Add(objSkill);
            }
            SortListItem objSort = new SortListItem();

            lstSkillOrder.Sort(objSort.Compare);

            // Second pass, retrieve the Skills in the order they're presented in the list.
            foreach (ListItem objItem in lstSkillOrder)
            {
                XmlNode objXmlSkill = objXmlDocument.SelectSingleNode("/chummer/skills/skill[name = \"" + objItem.Value + "\"]");

                //TODO: read from backup
                Skill objSkill = Skill.FromData(objXmlSkill, c);
                b.Add(objSkill);
            }


            return(b);
        }
示例#3
0
        /// <summary>
        /// Loads skill saved in legacy format
        /// </summary>
        /// <param name="character"></param>
        /// <param name="n"></param>
        /// <returns></returns>
        public static Skill LegacyLoad(Character character, XmlNode n)
        {
            Guid  suid;
            Skill skill;

            n.TryGetField("id", Guid.TryParse, out suid, Guid.NewGuid());

            int baseRating  = int.Parse(n["base"].InnerText);
            int fullRating  = int.Parse(n["rating"].InnerText);
            int karmaRating = fullRating - baseRating;              //Not reading karma directly as career only increases rating

            if (n.TryCheckValue("knowledge", "True"))
            {
                Skills.KnowledgeSkill kno = new KnowledgeSkill(character);
                kno.WriteableName = n["name"].InnerText;
                kno.Base          = baseRating;
                kno.Karma         = karmaRating;

                kno.Type = n["skillcategory"].InnerText;

                skill = kno;
            }
            else
            {
                XmlNode data =
                    XmlManager.Instance.Load("skills.xml").SelectSingleNode($"/chummer/skills/skill[id = '{suid}']");

                //Some stuff apparently have a guid of 0000-000... (only exotic?)
                if (data == null)
                {
                    data = XmlManager.Instance.Load("skills.xml")
                           .SelectSingleNode($"/chummer/skills/skill[name = '{n["name"].InnerText}']");
                }


                skill        = Skill.FromData(data, character);
                skill._base  = baseRating;
                skill._karma = karmaRating;

                ExoticSkill exoticSkill = skill as ExoticSkill;
                if (exoticSkill != null)
                {
                    string name = n.SelectSingleNode("skillspecializations/skillspecialization/name")?.InnerText ?? "";
                    //don't need to do more load then.

                    exoticSkill.Specific = name;
                    return(skill);
                }

                skill._buyWithKarma = n.TryCheckValue("buywithkarma", "True");
            }

            var v = from XmlNode node
                    in n.SelectNodes("skillspecializations/skillspecialization")
                    select SkillSpecialization.Load(node);

            var q = v.ToList();

            if (q.Count != 0)
            {
                skill.Specializations.AddRange(q);
            }

            return(skill);
        }