Beispiel #1
0
        public IEnumerable <PokemonData> GetPokemonToEvolve(IEnumerable <PokemonId> filter = null)
        {
            //Don't evolve pokemon in gyms
            var myPokemons = Pokemon.Where(p => p.DeployedFortId == string.Empty).OrderByDescending(p => p.Cp);
            var pokemons   = filter != null?myPokemons.Where(p => filter.Contains(p.PokemonId)).ToList() : myPokemons.ToList();

            var pokemonToEvolve = new List <PokemonData>();

            foreach (var pokemon in pokemons)
            {
                var settings    = PokemonSettings.Where(t => t != null).SingleOrDefault(x => x.PokemonId == pokemon.PokemonId);
                var familyCandy = PokemonFamilies.Where(t => t != null).SingleOrDefault(x => settings?.FamilyId == x.FamilyId);

                //Don't evolve if we can't evolve it
                if (settings == null || familyCandy == null || settings.EvolutionIds.Count == 0)
                {
                    continue;
                }

                var pokemonCandyNeededAlready =
                    pokemonToEvolve.Count(
                        p => PokemonSettings.Where(t => t != null).Single(x => x.PokemonId == p.PokemonId).FamilyId == settings.FamilyId) *
                    settings.CandyToEvolve;

                if (_logicSettings.EvolveAllPokemonAboveIv)
                {
                    if (PokemonInfo.CalculatePokemonPerfection(pokemon) >= _logicSettings.EvolveAboveIvValue &&
                        familyCandy.Candy_ - pokemonCandyNeededAlready > settings.CandyToEvolve)
                    {
                        pokemonToEvolve.Add(pokemon);
                    }
                }
                else
                {
                    if (familyCandy.Candy_ - pokemonCandyNeededAlready > settings.CandyToEvolve)
                    {
                        pokemonToEvolve.Add(pokemon);
                    }
                }
            }

            return(pokemonToEvolve);
        }
Beispiel #2
0
        public IEnumerable <PokemonData> GetDuplicatePokemonForTransfer(bool keepPokemonsThatCanEvolve = false,
                                                                        bool prioritizeIvoverCp        = false, IEnumerable <PokemonId> filter = null)
        {
            // TODO:: Gut this horrible code and replace it with something that is readable
            var pokemonList =
                Pokemon.Where(
                    p => p.DeployedFortId == string.Empty && p.Favorite == 0 && p.Cp < _logicSettings.KeepMinCp)
                .ToList();

            if (filter != null)
            {
                pokemonList = pokemonList.Where(p => !filter.Contains(p.PokemonId)).ToList();
            }
            if (keepPokemonsThatCanEvolve)
            {
                var results = new List <PokemonData>();
                var pokemonsThatCanBeTransfered = pokemonList.GroupBy(p => p.PokemonId)
                                                  .Where(x => x.Count() > _logicSettings.KeepMinDuplicatePokemon).ToList();

                foreach (var pokemon in pokemonsThatCanBeTransfered)
                {
                    var settings       = PokemonSettings.Single(x => x.PokemonId == pokemon.Key);
                    var familyCandy    = PokemonFamilies.Single(x => settings.FamilyId == x.FamilyId);
                    var amountToSkip   = _logicSettings.KeepMinDuplicatePokemon;
                    var amountPossible = familyCandy.Candy_ / settings.CandyToEvolve;

                    if (settings.CandyToEvolve > 0 && amountPossible > amountToSkip)
                    {
                        amountToSkip = amountPossible;
                    }

                    if (prioritizeIvoverCp)
                    {
                        results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key)
                                         .OrderByDescending(PokemonInfo.CalculatePokemonPerfection)
                                         .ThenBy(n => n.StaminaMax)
                                         .Skip(amountToSkip)
                                         .ToList());
                    }
                    else
                    {
                        results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key)
                                         .OrderByDescending(x => x.Cp)
                                         .ThenBy(n => n.StaminaMax)
                                         .Skip(amountToSkip)
                                         .ToList());
                    }
                }

                return(results);
            }
            if (prioritizeIvoverCp)
            {
                return(pokemonList
                       .GroupBy(p => p.PokemonId)
                       .Where(x => x.Any())
                       .SelectMany(
                           p =>
                           p.OrderByDescending(PokemonInfo.CalculatePokemonPerfection)
                           .ThenBy(n => n.StaminaMax)
                           .Skip(_logicSettings.KeepMinDuplicatePokemon)
                           .ToList()));
            }
            return(pokemonList
                   .GroupBy(p => p.PokemonId)
                   .Where(x => x.Any())
                   .SelectMany(
                       p =>
                       p.OrderByDescending(x => x.Cp)
                       .ThenBy(n => n.StaminaMax)
                       .Skip(_logicSettings.KeepMinDuplicatePokemon)
                       .ToList()));
        }