/// <summary> /// Deals with progression.xml. /// </summary> public static void GetSkills() { List <SkillData> skillList = SkillData.skillList; XmlDocument document = new XmlDocument(); document.Load(Config.GetSetting("gameRoot") + "\\Data\\Config\\progression.xml"); XmlNode progressionNode = document.DocumentElement; XmlNode playerNode = progressionNode.SelectSingleNode("player"); SkillData.maxPlayerLevel = int.Parse(playerNode.Attributes["max_level"].Value); SkillData.expToPlayerLevel = int.Parse(playerNode.Attributes["exp_to_level"].Value); XmlNode skillsNode = progressionNode.SelectSingleNode("skills"); SkillData.maxLevelDefault = int.Parse(skillsNode.Attributes["max_level"].Value); SkillData.expToLevelDefault = int.Parse(skillsNode.Attributes["exp_to_level"].Value); foreach (XmlNode skillNode in skillsNode.ChildNodes) { SkillData skillData = new SkillData(); if (skillNode.Name.Equals("player_skill")) { skillData.type = SkillType.PlayerSkill; } else if (skillNode.Name.Equals("action_skill")) { skillData.type = SkillType.ActionSkill; } else if (skillNode.Name.Equals("perk")) { skillData.type = SkillType.Perk; } else if (skillNode.Name.Equals("crafting_skill")) { skillData.type = SkillType.CraftingSkill; } else { continue; } skillData.name = skillNode.Attributes["name"].Value; XmlAttribute iconAttr = skillNode.Attributes["icon"]; if (iconAttr != null) { string iconName = "ui_game_symbol_" + iconAttr.Value; if (IconData.itemIconDictionary != null) { IconData.uiIconDictionary.TryGetValue(iconName, out skillData.iconData); } } XmlAttribute maxLevelAttr = skillNode.Attributes["max_level"]; if (maxLevelAttr != null) { skillData.maxLevel = int.Parse(maxLevelAttr.Value); } else { skillData.maxLevel = SkillData.maxLevelDefault; } XmlAttribute expToLevelAttr = skillNode.Attributes["exp_to_level"]; if (expToLevelAttr != null) { skillData.expToLevel = int.Parse(expToLevelAttr.Value); } else if (skillData.type == SkillType.Perk) { skillData.expToLevel = 0; } else { skillData.expToLevel = SkillData.expToLevelDefault; } skillData.requirements = new List <Requirement>(); skillData.recipes = new List <RecipeData>(); for (int i = 0; i < skillNode.ChildNodes.Count; i++) { if (skillNode.ChildNodes[i].Name.Equals("requirement")) { XmlNode requirementNode = skillNode.ChildNodes[i]; XmlAttribute thisPerkLevelAttr = requirementNode.Attributes["perk_level"]; XmlAttribute requiredSkillNameAttr = requirementNode.Attributes["required_skill_name"]; XmlAttribute requiredSkillLevelAttr = requirementNode.Attributes["required_skill_level"]; XmlAttribute requiredPlayerLevelAttr = requirementNode.Attributes["required_player_level"]; if (thisPerkLevelAttr == null) { thisPerkLevelAttr = requirementNode.Attributes["skill_level"]; } int perkLevel = int.Parse(thisPerkLevelAttr.Value); string requiredSkillName; int requiredSkillLevel; if (requiredSkillNameAttr != null) { requiredSkillName = requiredSkillNameAttr.Value; requiredSkillLevel = int.Parse(requiredSkillLevelAttr.Value); } else { requiredSkillName = "Player Level"; requiredSkillLevel = int.Parse(requiredPlayerLevelAttr.Value); } skillData.requirements.Add(new Requirement(perkLevel, requiredSkillName, requiredSkillLevel)); } else if (skillNode.ChildNodes[i].Name.Equals("recipe")) { XmlNode recipeNode = skillNode.ChildNodes[i]; XmlAttribute recipeNameAttr = recipeNode.Attributes["name"]; XmlAttribute recipeUnlockLevelAttr = recipeNode.Attributes["unlock_level"]; RecipeData skillsRecipe = RecipeData.GetRecipeDataByName(recipeNameAttr.Value); if (skillsRecipe == null) { skillsRecipe = new RecipeData(recipeNameAttr.Value, false); RecipeData.recipeList.Add(skillsRecipe); } if (skillsRecipe.skillUnlockConditions == null) { skillsRecipe.skillUnlockConditions = new Dictionary <SkillData, int>(); } if (!skillsRecipe.skillUnlockConditions.ContainsKey(skillData)) { skillsRecipe.skillUnlockConditions.Add(skillData, int.Parse(recipeUnlockLevelAttr.Value)); } skillData.recipes.Add(skillsRecipe); } } skillList.Add(skillData); } }