コード例 #1
0
        private static void RemoveBaseTypeIfNormalTypeExists(Dictionary <string, PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty> pokemon)
        {
            IEnumerable <IGrouping <int, PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty> > multiformPokemon = pokemon.Values.GroupBy(p => p.Dex).Where(g => g.Count() > 1);

            foreach (IGrouping <int, PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty> dexEntryGrouping in multiformPokemon)
            {
                PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty normalType = dexEntryGrouping.SingleOrDefault(p => p.SpeciesId.EndsWith("_normal"));

                if (normalType != null)
                {
                    var baseType = dexEntryGrouping.SingleOrDefault(p => p.SpeciesId == normalType.SpeciesId.Replace("_normal", String.Empty));

                    if (baseType != null)
                    {
                        pokemon.Remove(baseType.SpeciesId);
                    }
                }
            }
        }
コード例 #2
0
        public static async Task <IEnumerable <PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty> > AdaptPokemonAsync(dynamic gameMaster)
        {
            var regex = new Regex(@"^V\d+_POKEMON_");
            //var regex = new Regex(@"^V0006_POKEMON_CHARIZARD$");
            var templates = ((IEnumerable <dynamic>)gameMaster.itemTemplates).Select(t => t).Where(t => regex.IsMatch((string)t.templateId));

            var pokemon = new Dictionary <string, PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty>();

            foreach (dynamic template in templates)
            {
                string speciesId = GenerateSpeciesId(template);

                var pokemonProperty = new PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty
                {
                    Dex         = Convert.ToInt32(((string)template.templateId).Substring(1, 4)),
                    SpeciesName = GenerateSpeciesName(speciesId),
                    SpeciesId   = speciesId,
                    BaseStats   = new PvPokeGameMasterFileManager.GameMasterFile.PokemonProperty.BaseStatsProperty
                    {
                        Atk = template.pokemonSettings.stats.baseAttack,
                        Def = template.pokemonSettings.stats.baseDefense,
                        Hp  = template.pokemonSettings.stats.baseStamina
                    },
                    Types = new List <string>
                    {
                        FormatType((string)template.pokemonSettings.type),
                        FormatType((string)template.pokemonSettings.type2)
                    },
                    FastMoves    = template.pokemonSettings.quickMoves != null ? new List <string>(((IEnumerable <string>)template.pokemonSettings.quickMoves.ToObject <IEnumerable <string> >()).Select(GenerateMoveId).Distinct().OrderBy(m => m)) : new List <string>(),
                    ChargedMoves = template.pokemonSettings.cinematicMoves != null ? new List <string>(((IEnumerable <string>)template.pokemonSettings.cinematicMoves.ToObject <IEnumerable <string> >()).Select(GenerateMoveId).Distinct().OrderBy(m => m)) : new List <string>(),
                    LegacyMoves  = new List <string>()
                };

                pokemon[speciesId] = pokemonProperty;
            }

            RemoveSubtypePokemon(pokemon, "_shadow");
            RemoveSubtypePokemon(pokemon, "_purified");
            RemoveBaseTypeIfNormalTypeExists(pokemon);

            RenameNormalFormPokemon(pokemon);
            await AddMissingPokemonAsync(pokemon);

            var legacyMoves = await FileManager.LoadFileAsync <LegacyMoveCollection>(PokemonGoGameMasterFileManager.LegacyMovesJsonPath);

            foreach (LegacyMoveCollection.PokemonWithLegacyMoves pokemonWithLegacyMoves in legacyMoves.Pokemon)
            {
                var targetPokemon = pokemon[pokemonWithLegacyMoves.SpeciesId];

                targetPokemon.FastMoves.AddRange(pokemonWithLegacyMoves.LegacyFastMoves);
                targetPokemon.FastMoves = targetPokemon.FastMoves.OrderBy(m => m).ToList();

                targetPokemon.ChargedMoves.AddRange(pokemonWithLegacyMoves.LegacyChargeMoves);
                targetPokemon.ChargedMoves = targetPokemon.ChargedMoves.OrderBy(m => m).ToList();

                targetPokemon.LegacyMoves.AddRange(pokemonWithLegacyMoves.LegacyFastMoves.Concat(pokemonWithLegacyMoves.LegacyChargeMoves).Distinct().OrderBy(m => m));
            }

            ExpandHiddenPower(pokemon.Values);
            PruneEmptyLegacyMoves(pokemon);

            var defaultIVs = await FileManager.LoadFileAsync <DefaultIVsCollection>(PokemonGoGameMasterFileManager.DefaultIVsJsonPath);

            foreach (KeyValuePair <string, Dictionary <string, List <decimal> > > leagueSet in defaultIVs.Pokemon)
            {
                foreach (KeyValuePair <string, List <decimal> > stats in leagueSet.Value)
                {
                    pokemon[leagueSet.Key].DefaultIVs[stats.Key] = stats.Value;
                }
            }

            return(pokemon.Values.OrderBy(p => p.Dex).ThenBy(p => p.SpeciesId));
        }