public async Task Run(string[] args) { string solutionPath = Common.FindSolutionPath(); if (solutionPath == null) { throw new InvalidOperationException($"Could not find solution path for '{Common.SolutionFilename}'"); } string outputPath = Path.Combine(solutionPath, "MHArmory", "data"); if (Directory.Exists(outputPath) == false) { Directory.CreateDirectory(outputPath); } string targetFilename = Path.Combine(outputPath, "skills.json"); string defaultContent = File.ReadAllText(targetFilename); SkillPrimitive[] defaultSkillPrimitives = JsonConvert.DeserializeObject <SkillPrimitive[]>(defaultContent); var httpClient = new HttpClient(); string mhwdbContent = await httpClient.GetStringAsync("http://mhw-db.com/skills"); MhwdbSkillPrimitive[] mhwdbSkillPrimitives = JsonConvert.DeserializeObject <MhwdbSkillPrimitive[]>(mhwdbContent); foreach (MhwdbSkillPrimitive x in mhwdbSkillPrimitives) { SkillPrimitive defaultSkillPrimitive = defaultSkillPrimitives.FirstOrDefault(y => Localization.GetDefault(y.Name) == x.Name); if (defaultSkillPrimitive == null) { Console.WriteLine($"Skill '{x.Name}' found in mhw-db.com is missing from Armory data source."); continue; } defaultSkillPrimitive.Description[Localization.DefaultLanguage] = x.Description; } foreach (SkillPrimitive x in defaultSkillPrimitives) { MhwdbSkillPrimitive mhwdbSkillPrimitive = mhwdbSkillPrimitives.FirstOrDefault(y => y.Name == Localization.GetDefault(x.Name)); if (mhwdbSkillPrimitive == null) { Console.WriteLine($"Skill '{x.Name}' found in Armory data source is missing from mhw-db.com."); } } Common.SerializeJson(targetFilename, defaultSkillPrimitives); }
public core.Skill[] Build() { var result = new List <core.Skill>(); foreach (KeyValuePair <ushort, Dictionary <byte, SkillAbilityPrimitive> > skillGroup in skillAbilities.Table) { if (skillGroup.Key == 0) { continue; } SkillPrimitive skill = skills.List[skillGroup.Key]; uint skillNameIndex = (uint)(skillGroup.Key * 3); uint skillReadingIndex = skillNameIndex + 1; uint skillDescriptionIndex = skillNameIndex + 2; if (LanguageUtils.IsValidText(skillsLanguages.Table, skillNameIndex) == false) { continue; } bool isSetBonus = skill.IsSetBonus != 0; Dictionary <string, string> skillName = LanguageUtils.CreateLocalizations(skillsLanguages.Table, skillNameIndex); Dictionary <string, string> skillReading = LanguageUtils.CreateLocalizations(skillsLanguages.Table, skillReadingIndex); Dictionary <string, string> skillDescription = LanguageUtils.CreateLocalizations(skillsLanguages.Table, skillDescriptionIndex, languageValueProcessors); var abilities = new List <core.Ability>(); foreach (SkillAbilityPrimitive skillAbility in skillGroup.Value.Values) { if (skillAbility.SkillId == 0) { continue; } uint skillAbilityNameIndex = skillAbility.Index * 2; uint skillAbilityDescriptionIndex = skillAbilityNameIndex + 1; Dictionary <string, string> skillAbilityName = LanguageUtils.CreateLocalizations(skillAttributesLanguages.Table, skillAbilityNameIndex); Dictionary <string, string> skillAbilityDescription = LanguageUtils.CreateLocalizations(skillAttributesLanguages.Table, skillAbilityDescriptionIndex, languageValueProcessors); if (isSetBonus) { abilities.Add(core.Ability.CreateSetSkill( skillAbility.Index, skillAbility.Level, skillAbilityName, skillAbilityDescription, skillAbility.Params )); } else { abilities.Add(core.Ability.CreateRegularSkill( skillAbility.Index, skillAbility.Level, skillAbilityDescription, skillAbility.Params )); } } result.Add(new core.Skill { Id = skillGroup.Key, Category = skill.Unknown, IsSetBonus = isSetBonus, Name = skillName, Reading = LanguageUtils.IsValidText(skillReading) ? skillReading : null, Description = isSetBonus ? null : skillDescription, Abilities = abilities.ToArray() }); } foreach (core.Skill skill in result) { if (skill.IsSetBonus) { foreach (core.Ability ability in skill.Abilities) { ability.SkillId = FindSkillIdByName(ability.Name, result); } } } return(result.OrderBy(x => x.Id).ToArray()); }