//this task is duplicated, may need remove to clean up.
        public static async Task Execute(ISession session, ulong pokemonId)
        {
            using (var blocker = new BlockableScope(session, BotActions.Upgrade))
            {
                if (!await blocker.WaitToRun().ConfigureAwait(false))
                {
                    return;
                }

                var all = await session.Inventory.GetPokemons().ConfigureAwait(false);

                var pokemons = all.OrderByDescending(x => x.Cp).ThenBy(n => n.StaminaMax);
                var pokemon  = pokemons.FirstOrDefault(p => p.Id == pokemonId);

                if (pokemon == null)
                {
                    return;
                }

                var upgradeResult = await session.Inventory.UpgradePokemon(pokemon.Id).ConfigureAwait(false);

                if (upgradeResult.Result.ToString().ToLower().Contains("success"))
                {
                    var stardust      = -PokemonCpUtils.GetStardustCostsForPowerup(pokemon.CpMultiplier); //+ pokemon.AdditionalCpMultiplier);
                    var totalStarDust = session.Inventory.UpdateStarDust(stardust);

                    Logger.Write($"LevelUpSpecificPokemonTasks: SD: {stardust} | CP: {-PokemonCpUtils.GetStardustCostsForPowerup(pokemon.CpMultiplier + pokemon.AdditionalCpMultiplier)}", LogLevel.Info);
                    Logger.Write($"LevelUpSpecificPokemonTasks: {session.Translation.GetPokemonTranslation(upgradeResult.UpgradedPokemon.PokemonId)} | CP: {upgradeResult.UpgradedPokemon.Cp}", LogLevel.Info);

                    session.EventDispatcher.Send(new PokemonLevelUpEvent
                    {
                        Id       = upgradeResult.UpgradedPokemon.PokemonId,
                        Cp       = upgradeResult.UpgradedPokemon.Cp,
                        UniqueId = pokemon.Id,
                        PSD      = stardust,
                        PCandies = await PokemonInfo.GetCandy(session, pokemon).ConfigureAwait(false),
                        Lvl      = upgradeResult.UpgradedPokemon.Level(),
                    });
                }
                await DelayingUtils.DelayAsync(session.LogicSettings.DelayBetweenPlayerActions, 0, session.CancellationTokenSource.Token).ConfigureAwait(false);
            }
        }
Exemple #2
0
        public static async Task <bool> UpgradeSinglePokemon(ISession session, PokemonData pokemon)
        {
            if (!(await session.Inventory.CanUpgradePokemon(pokemon).ConfigureAwait(false)))
            {
                return(false);
            }

            var upgradeResult = await session.Inventory.UpgradePokemon(pokemon.Id).ConfigureAwait(false);

            if (upgradeResult.Result == UpgradePokemonResponse.Types.Result.Success && upgradeResult.UpgradedPokemon != null)
            {
                var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp
                                        ? await session.Inventory.GetHighestPokemonOfTypeByIv(upgradeResult
                                                                                              .UpgradedPokemon).ConfigureAwait(false)
                                        : await session.Inventory.GetHighestPokemonOfTypeByCp(upgradeResult
                                                                                              .UpgradedPokemon).ConfigureAwait(false)) ?? upgradeResult.UpgradedPokemon;

                var stardust      = -PokemonCpUtils.GetStardustCostsForPowerup(upgradeResult.UpgradedPokemon.CpMultiplier); //+ upgradeResult.UpgradedPokemon.AdditionalCpMultiplier);
                var totalStarDust = session.Inventory.UpdateStarDust(stardust);

                Logger.Write($"UpgradeSinglePokemonTasks: SD: {stardust} | CP: {-PokemonCpUtils.GetStardustCostsForPowerup(pokemon.CpMultiplier + pokemon.AdditionalCpMultiplier)}", LogLevel.Info);
                Logger.Write($"UpgradeSinglePokemonTasks: {session.Translation.GetPokemonTranslation(upgradeResult.UpgradedPokemon.PokemonId)} | CP: {upgradeResult.UpgradedPokemon.Cp}", LogLevel.Info);

                session.EventDispatcher.Send(new UpgradePokemonEvent()
                {
                    Candy          = await session.Inventory.GetCandyCount(pokemon.PokemonId).ConfigureAwait(false),
                    Pokemon        = upgradeResult.UpgradedPokemon,
                    PokemonId      = upgradeResult.UpgradedPokemon.PokemonId,
                    Cp             = upgradeResult.UpgradedPokemon.Cp,
                    Id             = upgradeResult.UpgradedPokemon.Id,
                    BestCp         = bestPokemonOfType.Cp,
                    BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType),
                    Perfection     = PokemonInfo.CalculatePokemonPerfection(upgradeResult.UpgradedPokemon),
                    USD            = stardust,
                    Lvl            = upgradeResult.UpgradedPokemon.Level(),
                });

                return(true);
            }
            return(false);
        }
        public static async Task <bool> UpgradeSinglePokemon(ISession session, PokemonData pokemon)
        {
            if (!(await session.Inventory.CanUpgradePokemon(pokemon).ConfigureAwait(false)))
            {
                return(false);
            }

            var upgradeResult = await session.Inventory.UpgradePokemon(pokemon.Id).ConfigureAwait(false);

            if (upgradeResult.Result == UpgradePokemonResponse.Types.Result.Success && upgradeResult.UpgradedPokemon != null)
            {
                var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp
                                        ? await session.Inventory.GetHighestPokemonOfTypeByIv(upgradeResult
                                                                                              .UpgradedPokemon).ConfigureAwait(false)
                                        : await session.Inventory.GetHighestPokemonOfTypeByCp(upgradeResult
                                                                                              .UpgradedPokemon).ConfigureAwait(false)) ?? upgradeResult.UpgradedPokemon;

                //stardust from what I've gathered is supposed to be - not + for AdditionalCpMultiplier
                var stardust      = -PokemonCpUtils.GetStardustCostsForPowerup(upgradeResult.UpgradedPokemon.CpMultiplier);
                var stardust2     = -PokemonCpUtils.GetStardustCostsForPowerup(upgradeResult.UpgradedPokemon.CpMultiplier - upgradeResult.UpgradedPokemon.AdditionalCpMultiplier);
                var totalStarDust = session.Inventory.UpdateStarDust(stardust);
                Logging.Logger.Write($"SD1: {stardust,5:0} | SD2: {stardust2,5:0} | TotalSD: {totalStarDust,5:0}", Logging.LogLevel.Error);

                session.EventDispatcher.Send(new UpgradePokemonEvent()
                {
                    Candy          = await session.Inventory.GetCandyCount(pokemon.PokemonId).ConfigureAwait(false),
                    Pokemon        = upgradeResult.UpgradedPokemon,
                    PokemonId      = upgradeResult.UpgradedPokemon.PokemonId,
                    Cp             = upgradeResult.UpgradedPokemon.Cp,
                    Id             = upgradeResult.UpgradedPokemon.Id,
                    BestCp         = bestPokemonOfType.Cp,
                    BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType),
                    Perfection     = PokemonInfo.CalculatePokemonPerfection(upgradeResult.UpgradedPokemon),
                    USD            = stardust,
                    Lvl            = upgradeResult.UpgradedPokemon.Level(),
                });
                return(true);
            }
            return(false);
        }
Exemple #4
0
        public bool CanUpgradePokemon(PokemonData pokemon)
        {
            // Can't upgrade pokemon in gyms.
            if (!string.IsNullOrEmpty(pokemon.DeployedFortId))
            {
                return(false);
            }

            var playerLevel  = GetPlayerStats().FirstOrDefault().Level;
            var pokemonLevel = PokemonInfo.GetLevel(pokemon);

            // Can't evolve unless pokemon level is lower than trainer.
            if (pokemonLevel >= playerLevel + 2)
            {
                return(false);
            }

            int familyCandy = GetCandyCount(pokemon.PokemonId);

            // Can't evolve if not enough candy.
            int pokemonCandyNeededAlready = PokemonCpUtils.GetCandyCostsForPowerup(pokemon.CpMultiplier + pokemon.AdditionalCpMultiplier);

            if (familyCandy < pokemonCandyNeededAlready)
            {
                return(false);
            }

            // Can't evolve if not enough stardust.
            var stardustToUpgrade = PokemonCpUtils.GetStardustCostsForPowerup(pokemon.CpMultiplier + pokemon.AdditionalCpMultiplier);

            if (GetStarDust() < stardustToUpgrade)
            {
                return(false);
            }

            return(true);
        }
Exemple #5
0
 public static double GetLevel(PokemonData poke)
 {
     return(PokemonCpUtils.GetLevel(poke));
 }
Exemple #6
0
 public static int CalculateMaxCp(PokemonId pokemonId, int level = 40)
 {
     return(PokemonCpUtils.GetAbsoluteMaxCp(pokemonId, level));
 }
Exemple #7
0
 public static int CalculateCp(PokemonData poke)
 {
     return(PokemonCpUtils.GetCp(poke));
 }