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); }
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); }
/// <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); }