public void Parse(ICLIFlags toolFlags) { var info = new DynamicChoicesContainer(); ProcessHeroNames(info); ProcessMapNames(info); OutputJSON(info, (ListFlags)toolFlags); }
private static void ProcessMapNames(DynamicChoicesContainer container) { var mapContainer = container.GetType(VALID_MAP_NAMES); foreach (ulong key in Program.TrackedFiles[0x9F]) { MapHeader map = ListMaps.GetMap(key); if (map == null) { continue; } var name = map.VariantName ?? map.Name ?? $"Title Screen ({teResourceGUID.Index(key):X})"; mapContainer.Choices.Add(new DynamicChoice { DisplayName = name, QueryName = teResourceGUID.Index(map.MapGUID).ToString("X") }); } }
private static void ProcessHeroNames(DynamicChoicesContainer container) { var heroContainer = container.GetType(VALID_HERO_NAMES); var npcContainer = container.GetType(VALID_NPC_NAMES); var owlTeams = container.GetType(VALID_OWL_TEAMS); HashSet <string> handledTeams = new HashSet <string>(); Dictionary <ulong, STUHero> heroes = new Dictionary <ulong, STUHero>(); Dictionary <string, int> nameOccurrances = new Dictionary <string, int>(); foreach (ulong heroGUID in Program.TrackedFiles[0x75]) { var hero = STUHelper.GetInstance <STUHero>(heroGUID); if (hero == null) { continue; } string heroNameActual = Hero.GetCleanName(hero); if (heroNameActual == null) { continue; } heroes[heroGUID] = hero; if (nameOccurrances.TryGetValue(heroNameActual, out _)) { nameOccurrances[heroNameActual]++; } else { nameOccurrances[heroNameActual] = 0; } } foreach (ulong heroGUID in Program.TrackedFiles[0x75]) { if (!heroes.TryGetValue(heroGUID, out var hero)) { continue; } string heroNameActual = Hero.GetCleanName(hero); var doGuidName = nameOccurrances[heroNameActual] > 1; if (doGuidName) { heroNameActual += $" ({teResourceGUID.Index(heroGUID):X})"; } ProgressionUnlocks progressionUnlocks = new ProgressionUnlocks(hero); var choice = new DynamicChoice { DisplayName = heroNameActual, QueryName = $"{teResourceGUID.Index(heroGUID):X}" }; if (progressionUnlocks.LevelUnlocks == null) { npcContainer.Choices.Add(choice); } else { heroContainer.Choices.Add(choice); } foreach (var unlock in progressionUnlocks.IterateUnlocks()) { if (string.IsNullOrWhiteSpace(unlock.Name)) { continue; } if (unlock.STU.m_0B1BA7C1 != null) { TeamDefinition teamDef = new TeamDefinition(unlock.STU.m_0B1BA7C1); if (!(teamDef.Division == Enum_5A789F71.None && teamDef.Location == null)) { if (handledTeams.Add(teamDef.FullName)) { owlTeams.Choices.Add(new DynamicChoice { DisplayName = teamDef.FullName, QueryName = teamDef.FullName }); } continue; } } var key = "datatool.ux.valid_" + Unlock.GetTypeName(unlock.STU.GetType()).ToLowerInvariant() + "_names"; if (choice.Children == null) { choice.Children = new DynamicChoicesContainer(); } var test = choice.Children.GetType(key); test.Choices.Add(new DynamicChoice { QueryName = unlock.Name, DisplayName = unlock.Name }); } } }