Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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());
        }