コード例 #1
0
ファイル: CheckTosState.cs プロジェクト: niwa010222/emsin
        public async Task <bool> CatchFirstPokemon(ISession session, CancellationToken cancellationToken)
        {
            var firstPokeList = new List <PokemonId>
            {
                PokemonId.Bulbasaur,
                PokemonId.Charmander,
                PokemonId.Squirtle
            };
            string pokemonString = GlobalSettings.PromptForString(session.Translation,
                                                                  session.Translation.GetTranslation(TranslationString.FirstStartSetupAutoCompleteTutStarterPrompt),
                                                                  new string[] { "Bulbasaur", "Charmander", "Squirtle" }, "You didn't enter a valid pokemon.", false);
            var firstpokenum = 0;

            switch (pokemonString)
            {
            case "Bulbasaur":
            case "bulbasaur":
                firstpokenum = 0;
                break;

            case "Charmander":
            case "charmander":
                firstpokenum = 1;
                break;

            case "Squirtle":
            case "squirtle":
                firstpokenum = 2;
                break;

            default:
                // We should never get here.
                firstpokenum = 0;
                break;
            }

            var firstPoke = firstPokeList[firstpokenum];

            var res = await session.Client.Encounter.EncounterTutorialComplete(firstPoke);

            await DelayingUtils.DelayAsync(7000, 2000, cancellationToken);

            if (res.Result != EncounterTutorialCompleteResponse.Types.Result.Success)
            {
                return(false);
            }
            session.EventDispatcher.Send(new NoticeEvent()
            {
                Message = $"Caught Tutorial pokemon! it's {firstPoke}!"
            });
            return(true);
        }
コード例 #2
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var duplicatePokemons =
                await
                session.Inventory.GetDuplicatePokemonToTransfer(session.LogicSettings.KeepPokemonsThatCanEvolve,
                                                                session.LogicSettings.PrioritizeIvOverCp,
                                                                session.LogicSettings.PokemonsNotToTransfer);

            var pokemonSettings = await session.Inventory.GetPokemonSettings();

            var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

            foreach (var duplicatePokemon in duplicatePokemons)
            {
                cancellationToken.ThrowIfCancellationRequested();

                if (duplicatePokemon.Cp >=
                    session.Inventory.GetPokemonTransferFilter(duplicatePokemon.PokemonId).KeepMinCp ||
                    PokemonInfo.CalculatePokemonPerfection(duplicatePokemon) >
                    session.Inventory.GetPokemonTransferFilter(duplicatePokemon.PokemonId).KeepMinIvPercentage)
                {
                    continue;
                }

                await session.Client.Inventory.TransferPokemon(duplicatePokemon.Id);

                await session.Inventory.DeletePokemonFromInvById(duplicatePokemon.Id);

                var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp
                    ? await session.Inventory.GetHighestPokemonOfTypeByIv(duplicatePokemon)
                    : await session.Inventory.GetHighestPokemonOfTypeByCp(duplicatePokemon)) ?? duplicatePokemon;

                var setting = pokemonSettings.Single(q => q.PokemonId == duplicatePokemon.PokemonId);
                var family  = pokemonFamilies.First(q => q.FamilyId == setting.FamilyId);

                family.Candy_++;

                session.EventDispatcher.Send(new TransferPokemonEvent
                {
                    Id             = duplicatePokemon.PokemonId,
                    Perfection     = PokemonInfo.CalculatePokemonPerfection(duplicatePokemon),
                    Cp             = duplicatePokemon.Cp,
                    BestCp         = bestPokemonOfType.Cp,
                    BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType),
                    FamilyCandies  = family.Candy_
                });

                DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
            }
        }
コード例 #3
0
ファイル: StateMachine.cs プロジェクト: jabr212/Catchem-PoGo
        public async Task Start(IState initialState, Session session,
                                CancellationToken cancellationToken = default(CancellationToken))
        {
            var state = initialState;

            do
            {
                try
                {
                    state = await state.Execute(session, cancellationToken);
                }
                catch (InvalidResponseException ex)
                {
                    session.EventDispatcher.Send(new ErrorEvent
                    {
                        Message = session.Translation.GetTranslation(TranslationString.NianticServerUnstable)
                    });
                    if (session.Profile != null && session.Profile.Banned)
                    {
                        session.EventDispatcher.Send(new ErrorEvent
                        {
                            Message = session.Translation.GetTranslation(TranslationString.NianticPlayerBanned)
                        });
                    }
                    else if (session.Profile != null && session.Profile.Warn)
                    {
                        session.EventDispatcher.Send(new ErrorEvent
                        {
                            Message = session.Translation.GetTranslation(TranslationString.NianticPlayerWarn)
                        });
                    }
                    Logger.Write("[NIANTIC] " + ex.Message, LogLevel.Error);
                    state = _initialState;
                    await DelayingUtils.Delay(15000, 10000);
                }
                catch (OperationCanceledException)
                {
                    session.EventDispatcher.Send(new WarnEvent {
                        Message = session.Translation.GetTranslation(TranslationString.OperationCanceled)
                    });
                    break;
                }
                catch (Exception ex)
                {
                    session.EventDispatcher.Send(new ErrorEvent {
                        Message = ex.ToString()
                    });
                    state = _initialState;
                    await DelayingUtils.Delay(15000, 10000);
                }
            } while (state != null);
        }
コード例 #4
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            //await session.Inventory.RefreshCachedInventory();

            var pokemons = await session.Inventory.GetPokemons();

            foreach (var pokemon in pokemons)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var perfection  = Math.Round(PokemonInfo.CalculatePokemonPerfection(pokemon));
                var pokemonName = session.Translation.GetPokemonTranslation(pokemon.PokemonId);
                // iv number + templating part + pokemonName <= 12
                var nameLength = 12 -
                                 (perfection.ToString(CultureInfo.InvariantCulture).Length +
                                  session.LogicSettings.RenameTemplate.Length - 6);
                if (pokemonName.Length > nameLength)
                {
                    pokemonName = pokemonName.Substring(0, nameLength);
                }
                var newNickname = string.Format(session.LogicSettings.RenameTemplate, pokemonName, perfection);
                var oldNickname = pokemon.Nickname.Length != 0 ? pokemon.Nickname : pokemon.PokemonId.ToString();

                // If "RenameOnlyAboveIv" = true only rename pokemon with IV over "KeepMinIvPercentage"
                // Favorites will be skipped
                if ((!session.LogicSettings.RenameOnlyAboveIv || perfection >= session.LogicSettings.KeepMinIvPercentage) &&
                    newNickname != oldNickname && pokemon.Favorite == 0)
                {
                    var result = await session.Client.Inventory.NicknamePokemon(pokemon.Id, newNickname);

                    if (result.Result == POGOProtos.Networking.Responses.NicknamePokemonResponse.Types.Result.Success)
                    {
                        pokemon.Nickname = newNickname;
                        await session.Inventory.DeletePokemonFromInvById(pokemon.Id);

                        await session.Inventory.AddPokemonToCache(pokemon);

                        session.EventDispatcher.Send(new NoticeEvent
                        {
                            Message =
                                session.Translation.GetTranslation(TranslationString.PokemonRename, session.Translation.GetPokemonTranslation(pokemon.PokemonId),
                                                                   pokemon.Id, oldNickname, newNickname)
                        });
                    }
                    //Delay only if the pokemon was really renamed!
                    DelayingUtils.Delay(session.LogicSettings.RenamePokemonActionDelay, 500);
                }
            }
        }
コード例 #5
0
        public static async Task Execute(ISession session, ulong pokemonId)
        {
            var all = await session.Inventory.GetPokemons();

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

            if (pokemon == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(pokemon.DeployedFortId))
            {
                session.EventDispatcher.Send(new WarnEvent()
                {
                    Message = $"Pokemon {(string.IsNullOrEmpty(pokemon.Nickname) ? pokemon.PokemonId.ToString() : pokemon.Nickname)} is signed to defend a GYM!"
                });
                return;
            }

            var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id);

            session.EventDispatcher.Send(new PokemonEvolveEvent
            {
                Uid    = pokemon.Id,
                Id     = pokemon.PokemonId,
                Exp    = evolveResponse.ExperienceAwarded,
                Result = evolveResponse.Result
            });

            if (evolveResponse.EvolvedPokemonData != null)
            {
                var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

                var pokemonSettings = (await session.Inventory.GetPokemonSettings()).ToList();
                var setting         = pokemonSettings.Single(q => q.PokemonId == evolveResponse.EvolvedPokemonData.PokemonId);
                var family          = pokemonFamilies.First(q => q.FamilyId == setting.FamilyId);
                session.EventDispatcher.Send(new PokemonEvolveDoneEvent
                {
                    Uid        = evolveResponse.EvolvedPokemonData.Id,
                    Id         = evolveResponse.EvolvedPokemonData.PokemonId,
                    Cp         = evolveResponse.EvolvedPokemonData.Cp,
                    Perfection = evolveResponse.EvolvedPokemonData.CalculatePokemonPerfection(),
                    Family     = family.FamilyId,
                    Candy      = family.Candy_
                });
            }
            await DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 2000);
        }
コード例 #6
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            await session.Inventory.RefreshCachedInventory();

            var duplicatePokemons =
                await
                session.Inventory.GetDuplicatePokemonToTransfer(
                    session.LogicSettings.PokemonsNotToTransfer,
                    session.LogicSettings.PokemonsToEvolve,
                    session.LogicSettings.KeepPokemonsThatCanEvolve,
                    session.LogicSettings.PrioritizeIvOverCp);

            var orderedPokemon = duplicatePokemons.OrderBy(poke => poke.Cp);

            var pokemonSettings = await session.Inventory.GetPokemonSettings();

            var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

            foreach (var duplicatePokemon in orderedPokemon)
            {
                cancellationToken.ThrowIfCancellationRequested();

                await session.Client.Inventory.TransferPokemon(duplicatePokemon.Id);

                await session.Inventory.DeletePokemonFromInvById(duplicatePokemon.Id);

                var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp
                    ? await session.Inventory.GetHighestPokemonOfTypeByIv(duplicatePokemon)
                    : await session.Inventory.GetHighestPokemonOfTypeByCp(duplicatePokemon)) ?? duplicatePokemon;

                var setting = pokemonSettings.SingleOrDefault(q => q.PokemonId == duplicatePokemon.PokemonId);
                var family  = pokemonFamilies.FirstOrDefault(q => q.FamilyId == setting.FamilyId);

                family.Candy_++;

                session.EventDispatcher.Send(new TransferPokemonEvent
                {
                    Id             = duplicatePokemon.PokemonId,
                    Perfection     = PokemonInfo.CalculatePokemonPerfection(duplicatePokemon),
                    Cp             = duplicatePokemon.Cp,
                    BestCp         = bestPokemonOfType.Cp,
                    BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType),
                    FamilyCandies  = family.Candy_
                });

                DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
            }
        }
コード例 #7
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (!await CheckBotStateTask.Execute(session, cancellationToken))
            {
                return;
            }
            var prevState = session.State;

            session.State = BotState.Renaming;

            var pokemons = await session.Inventory.GetPokemons();

            foreach (var pokemon in pokemons)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var perfection  = Math.Round(pokemon.CalculatePokemonPerfection());
                var pokemonName = session.Translation.GetPokemonName(pokemon.PokemonId);
                // iv number + templating part + pokemonName <= 12
                var nameLength = 12 -
                                 (perfection.ToString(CultureInfo.InvariantCulture).Length +
                                  session.LogicSettings.RenameTemplate.Length - 6);
                if (pokemonName.Length > nameLength)
                {
                    pokemonName = pokemonName.Substring(0, nameLength);
                }
                var newNickname = string.Format(session.LogicSettings.RenameTemplate, pokemonName, perfection);
                var oldNickname = pokemon.Nickname.Length != 0 ? pokemon.Nickname : session.Translation.GetPokemonName(pokemon.PokemonId);

                // If "RenameOnlyAboveIv" = true only rename pokemon with IV over "KeepMinIvPercentage"
                // Favorites will be skipped
                if ((!session.LogicSettings.RenameOnlyAboveIv || perfection >= session.LogicSettings.KeepMinIvPercentage) &&
                    newNickname != oldNickname && pokemon.Favorite == 0)
                {
                    await session.Client.Inventory.NicknamePokemon(pokemon.Id, newNickname);

                    await DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 2000);

                    session.EventDispatcher.Send(new NoticeEvent
                    {
                        Message =
                            session.Translation.GetTranslation(TranslationString.PokemonRename, session.Translation.GetPokemonName(pokemon.PokemonId),
                                                               pokemon.Id, oldNickname, newNickname)
                    });
                }
            }
            session.State = prevState;
        }
コード例 #8
0
        private async void evolveMultiple(ulong[] ids)
        {
            foreach (ulong id in ids)
            {
                EvolvePokemonResponse eps = await this._session.Client.Inventory.EvolvePokemon(id);

                Logger.Write($"Evolve result: {eps.EvolvedPokemonData.PokemonId} CP: {eps.EvolvedPokemonData.Cp} XP: {eps.ExperienceAwarded.ToString()} id: {id.ToString()}", LogLevel.Evolve);
                Logger.Write($"Evolve result: {eps.EvolvedPokemonData.PokemonId} CP: {eps.EvolvedPokemonData.Cp} XP: {eps.ExperienceAwarded.ToString()} id: {id.ToString()}");
                DelayingUtils.Delay(this._session.LogicSettings.DelayBetweenPlayerActions, 0);
            }
            await this.getPokemons();

            Logger.Write($"Evolving of {ids.Length} pokemons completed");
        }
コード例 #9
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken, ulong pokemonId)
        {
            using (var blocker = new BlockableScope(session, Model.BotActions.Transfer))
            {
                if (!await blocker.WaitToRun())
                {
                    return;
                }

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

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

                if (pokemon == null)
                {
                    return;
                }

                var pokemonSettings = await session.Inventory.GetPokemonSettings();

                var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

                await session.Client.Inventory.TransferPokemon(pokemonId);

                await session.Inventory.DeletePokemonFromInvById(pokemonId);

                var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp
                    ? await session.Inventory.GetHighestPokemonOfTypeByIv(pokemon)
                    : await session.Inventory.GetHighestPokemonOfTypeByCp(pokemon)) ?? pokemon;

                var setting = pokemonSettings.Single(q => q.PokemonId == pokemon.PokemonId);
                var family  = pokemonFamilies.First(q => q.FamilyId == setting.FamilyId);

                family.Candy_++;

                // Broadcast event as everyone would benefit
                session.EventDispatcher.Send(new Logic.Event.TransferPokemonEvent
                {
                    Id             = pokemon.PokemonId,
                    Perfection     = Logic.PoGoUtils.PokemonInfo.CalculatePokemonPerfection(pokemon),
                    Cp             = pokemon.Cp,
                    BestCp         = bestPokemonOfType.Cp,
                    BestPerfection = Logic.PoGoUtils.PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType),
                    FamilyCandies  = family.Candy_
                });

                await DelayingUtils.DelayAsync(session.LogicSettings.TransferActionDelay, 0, cancellationToken);
            }
        }
コード例 #10
0
        public async Task <bool> CatchFirstPokemon(ISession session)
        {
            var firstPokeList = new List <PokemonId>
            {
                PokemonId.Bulbasaur,
                PokemonId.Charmander,
                PokemonId.Squirtle
            };
            var firstpokenum = 0;

            switch (session.LogicSettings.DesiredStarter)
            {
            case "Bulbasaur":
                firstpokenum = 0;
                break;

            case "Charmander":
                firstpokenum = 1;
                break;

            case "Squirtle":
                firstpokenum = 2;
                break;

            default:
                session.EventDispatcher.Send(new NoticeEvent()
                {
                    Message = "You didn't set a valid starter, setting to default: Bulbasaur"
                });
                //I know it is useless, but I prefer keep it
                firstpokenum = 0;
                break;
            }

            var firstPoke = firstPokeList[firstpokenum];

            var res = await session.Client.Encounter.EncounterTutorialComplete(firstPoke);

            await DelayingUtils.DelayAsync(7000, 2000);

            if (res.Result != EncounterTutorialCompleteResponse.Types.Result.Success)
            {
                return(false);
            }
            session.EventDispatcher.Send(new NoticeEvent()
            {
                Message = $"Caught Tutorial pokemon! it's {firstPoke}!"
            });
            return(true);
        }
コード例 #11
0
        private async void transferMultiple(ulong[] ids)
        {
            foreach (ulong id in ids)
            {
                ReleasePokemonResponse rps = await this._session.Client.Inventory.TransferPokemon(id);

                Logger.Write($"Transfer result: {rps.Result} - Candies retrieved: {rps.CandyAwarded.ToString()} id: {id.ToString()}", LogLevel.Transfer);
                Logger.Write($"Transfer result: {rps.Result} - Candies retrieved: {rps.CandyAwarded.ToString()} id: {id.ToString()}");
                DelayingUtils.Delay(this._session.LogicSettings.DelayBetweenPlayerActions, 0);
            }
            await this.getPokemons();

            Logger.Write($"Transfer of {ids.Length} pokemons completed");
        }
コード例 #12
0
ファイル: EvolvePokemonTask.cs プロジェクト: zsg0601/NecroBot
        private static async Task Evolve(ISession session, CancellationToken cancellationToken, List <PokemonData> pokemonToEvolve)
        {
            int sequence = 1;

            foreach (var pokemon in pokemonToEvolve)
            {
                var filter = session.LogicSettings.PokemonEvolveFilters.GetFilter <EvolveFilter>(pokemon.PokemonId);
                if (await session.Inventory.CanEvolvePokemon(pokemon, filter).ConfigureAwait(false))
                {
                    try
                    {
                        TimeSpan luckyEggRemainingTime = await session.Inventory.GetLuckyEggRemainingTime().ConfigureAwait(false);

                        if (luckyEggRemainingTime.TotalSeconds <= 0)
                        {
                            // do not waste lucky egg
                            cancellationToken.ThrowIfCancellationRequested();
                        }

                        var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id, filter == null?ItemId.ItemUnknown : await GetRequireEvolveItem(session, pokemon.PokemonId, filter.EvolveToPokemonId)).ConfigureAwait(false);

                        var CandyUsed = session.Inventory.GetCandyCount(pokemon.PokemonId);

                        if (evolveResponse.Result == EvolvePokemonResponse.Types.Result.Success)
                        {
                            session.EventDispatcher.Send(new PokemonEvolveEvent
                            {
                                Id             = pokemon.PokemonId,
                                Exp            = evolveResponse.ExperienceAwarded,
                                UniqueId       = pokemon.Id,
                                Result         = evolveResponse.Result,
                                Sequence       = pokemonToEvolve.Count() == 1 ? 0 : sequence++,
                                EvolvedPokemon = evolveResponse.EvolvedPokemonData,
                                Candy          = await CandyUsed
                            });
                        }

                        if (!pokemonToEvolve.Last().Equals(pokemon))
                        {
                            await DelayingUtils.DelayAsync(session.LogicSettings.EvolveActionDelay, 0, session.CancellationTokenSource.Token).ConfigureAwait(false);
                        }
                    }
                    catch
                    {
                        Logger.Write("ERROR - Evolve failed", color: ConsoleColor.Red);
                    }
                }
            }
        }
コード例 #13
0
        public static async Task Execute(ISession session, ulong pokemonId)
        {
            using (var blocker = new BlockableScope(session, BotActions.Envolve))
            {
                if (!await blocker.WaitToRun())
                {
                    return;
                }


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

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

                if (pokemon == null)
                {
                    return;
                }

                var pokemonSettings = await session.Inventory.GetPokemonSettings();

                var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

                var setting = pokemonSettings.FirstOrDefault(q => pokemon != null && q.PokemonId == pokemon.PokemonId);
                var family  = pokemonFamilies.FirstOrDefault(q => setting != null && q.FamilyId == setting.FamilyId);

                if (setting.CandyToEvolve > family.Candy_)
                {
                    return;
                }
                family.Candy_ -= setting.CandyToEvolve;

                var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id);

                session.EventDispatcher.Send(new PokemonEvolveEvent
                {
                    OriginalId     = pokemonId,
                    Id             = pokemon.PokemonId,
                    Exp            = evolveResponse.ExperienceAwarded,
                    UniqueId       = pokemon.Id,
                    Result         = evolveResponse.Result,
                    EvolvedPokemon = evolveResponse.EvolvedPokemonData,
                    PokemonSetting = setting,
                    Family         = family
                });
                DelayingUtils.Delay(session.LogicSettings.EvolveActionDelay, 0);
            }
        }
コード例 #14
0
ファイル: EvolvePokemonTask.cs プロジェクト: niwa010222/emsin
        private static async Task Evolve(ISession session, List <PokemonData> pokemonToEvolve)
        {
            var pokemonSettings = await session.Inventory.GetPokemonSettings();

            var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

            int sequence = 1;

            foreach (var pokemon in pokemonToEvolve)
            {
                var setting =
                    pokemonSettings.FirstOrDefault(q => pokemon != null && q.PokemonId == pokemon.PokemonId);
                var family = pokemonFamilies.FirstOrDefault(q => setting != null && q.FamilyId == setting.FamilyId);

                if (family.Candy_ < setting.CandyToEvolve)
                {
                    continue;
                }
                // no cancellationToken.ThrowIfCancellationRequested here, otherwise the lucky egg would be wasted.
                var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id);

                if (evolveResponse.Result == EvolvePokemonResponse.Types.Result.Success)
                {
                    family.Candy_ -= setting.CandyToEvolve;
                    await session.Inventory.UpdateCandy(family, -setting.CandyToEvolve);

                    await session.Inventory.DeletePokemonFromInvById(pokemon.Id);

                    await session.Inventory.AddPokemonToCache(evolveResponse.EvolvedPokemonData);
                }


                session.EventDispatcher.Send(new PokemonEvolveEvent
                {
                    Id             = pokemon.PokemonId,
                    Exp            = evolveResponse.ExperienceAwarded,
                    UniqueId       = pokemon.Id,
                    Result         = evolveResponse.Result,
                    Sequence       = pokemonToEvolve.Count() == 1 ? 0 : sequence++,
                    Family         = family,
                    PokemonSetting = setting
                });

                if (!pokemonToEvolve.Last().Equals(pokemon))
                {
                    DelayingUtils.Delay(session.LogicSettings.EvolveActionDelay, 0);
                }
            }
        }
コード例 #15
0
        public static async Task Execute(ISession session, IEnumerable <PokemonData> pokemonsToTransfer, CancellationToken cancellationToken)
        {
            if (pokemonsToTransfer.Count() > 0)
            {
                if (session.LogicSettings.UseBulkTransferPokemon)
                {
                    int page = pokemonsToTransfer.Count() / session.LogicSettings.BulkTransferSize + 1;
                    for (int i = 0; i < page; i++)
                    {
                        TinyIoC.TinyIoCContainer.Current.Resolve <MultiAccountManager>().ThrowIfSwitchAccountRequested();
                        var batchTransfer = pokemonsToTransfer.Skip(i * session.LogicSettings.BulkTransferSize).Take(session.LogicSettings.BulkTransferSize);
                        var t             = await session.Client.Inventory.TransferPokemons(batchTransfer.Select(x => x.Id).ToList());

                        if (t.Result == ReleasePokemonResponse.Types.Result.Success)
                        {
                            foreach (var duplicatePokemon in batchTransfer)
                            {
                                PrintPokemonInfo(session, duplicatePokemon);
                            }
                        }
                        else
                        {
                            session.EventDispatcher.Send(new WarnEvent()
                            {
                                Message = session.Translation.GetTranslation(TranslationString.BulkTransferFailed, pokemonsToTransfer.Count())
                            });
                        }
                    }
                }
                else
                {
                    foreach (var pokemon in pokemonsToTransfer)
                    {
                        TinyIoC.TinyIoCContainer.Current.Resolve <MultiAccountManager>().ThrowIfSwitchAccountRequested();
                        cancellationToken.ThrowIfCancellationRequested();

                        await session.Client.Inventory.TransferPokemon(pokemon.Id);

                        PrintPokemonInfo(session, pokemon);

                        // Padding the TransferEvent with player-choosen delay before instead of after.
                        // This is to remedy too quick transfers, often happening within a second of the
                        // previous action otherwise

                        await DelayingUtils.DelayAsync(session.LogicSettings.TransferActionDelay, 0, cancellationToken);
                    }
                }
            }
        }
コード例 #16
0
        public static async Task Execute(ISession session)
        {
            // Refresh inventory so that the player stats are fresh
            //await session.Inventory.RefreshCachedInventory();

            var inventory = await session.Inventory.GetItems();

            session.EventDispatcher.Send(
                new InventoryListEvent
            {
                Items = inventory.ToList()
            });

            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
        }
コード例 #17
0
ファイル: InventoryListTask.cs プロジェクト: zsg0601/NecroBot
        public static async Task Execute(ISession session)
        {
            // Refresh inventory so that the player stats are fresh
            //await session.Inventory.RefreshCachedInventory().ConfigureAwait(false);

            var inventory = await session.Inventory.GetItems().ConfigureAwait(false);

            session.EventDispatcher.Send(
                new InventoryListEvent
            {
                Items = inventory.ToList()
            });

            await DelayingUtils.DelayAsync(session.LogicSettings.DelayBetweenPlayerActions, 0, session.CancellationTokenSource.Token).ConfigureAwait(false);
        }
コード例 #18
0
        private async void maxPowerUp(ulong id, string name)
        {
            int i = 0;
            UpgradePokemonResponse ups = await this._session.Client.Inventory.UpgradePokemon(id);

            while (ups.Result == UpgradePokemonResponse.Types.Result.Success)
            {
                Logger.Write($"POWERUP-MAX {name} run #{i}. Result: {ups.Result}");
                i++;
                DelayingUtils.Delay(this._session.LogicSettings.DelayBetweenPlayerActions, 0);
                ups = await this._session.Client.Inventory.UpgradePokemon(id);
            }
            Logger.Write($"POWERUP-MAX {name} run #{i}. Result: {ups.Result}. Stopping.");
            await this.getPokemons();
        }
コード例 #19
0
        public static async Task DropItem(ISession session, ItemId item, int count)
        {
            if (count > 0)
            {
                await session.Client.Inventory.RecycleItem(item, count);

                if (session.LogicSettings.VerboseRecycling)
                {
                    session.EventDispatcher.Send(new ItemRecycledEvent {
                        Id = item, Count = count
                    });
                }

                DelayingUtils.Delay(session.LogicSettings.RecycleActionDelay, 500);
            }
        }
コード例 #20
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            await session.Inventory.RefreshCachedInventory();

            var currentTotalItems = await session.Inventory.GetTotalItemCount();

            if (session.Profile.PlayerData.MaxItemStorage * session.LogicSettings.RecycleInventoryAtUsagePercentage > currentTotalItems)
            {
                return;
            }
            var items = await session.Inventory.GetItemsToRecycle(session);

            foreach (var item in items)
            {
                cancellationToken.ThrowIfCancellationRequested();
                await session.Client.Inventory.RecycleItem(item.ItemId, item.Count);

                session.EventDispatcher.Send(new ItemRecycledEvent {
                    Id = item.ItemId, Count = item.Count
                });
                if (session.LogicSettings.Teleport)
                {
                    await Task.Delay(session.LogicSettings.DelayRecyleItem);
                }
                else
                {
                    await DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 500);
                }
            }
            if (session.LogicSettings.TotalAmountOfPokeballsToKeep != 0)
            {
                await OptimizedRecycleBalls(session, cancellationToken);
            }

            if (session.LogicSettings.TotalAmountOfPotionsToKeep != 0)
            {
                await OptimizedRecyclePotions(session, cancellationToken);
            }

            if (session.LogicSettings.TotalAmountOfRevivesToKeep != 0)
            {
                await OptimizedRecycleRevives(session, cancellationToken);
            }
            await session.Inventory.RefreshCachedInventory();
        }
コード例 #21
0
        public static async Task Execute(ISession session)
        {
            var items = await session.Inventory.GetItemsToRecycle(session.Settings);

            foreach (var item in items)
            {
                await session.Client.Inventory.RecycleItem(item.ItemId, item.Count);

                session.EventDispatcher.Send(new ItemRecycledEvent {
                    Id = item.ItemId, Count = item.Count
                });

                DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 500);
            }

            await session.Inventory.RefreshCachedInventory();
        }
コード例 #22
0
        public static async Task Execute(Session session, PokemonData pokemon, string newNickname)
        {
            //var pkm = pokemon;
            var response = await session.Client.Inventory.NicknamePokemon(pokemon.Id, newNickname);

            Logger.Write(response.Result == NicknamePokemonResponse.Types.Result.Success
                ? $"Successfully renamed {pokemon.PokemonId} to \"{newNickname}\""
                : $"Failed renaming {pokemon.PokemonId} to \"{newNickname}\"");
            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
            //session.EventDispatcher.Send(new NoticeEvent
            //{
            //    Message =
            //        session.Translation.GetTranslation(TranslationString.PokemonRename,
            //            session.Translation.GetPokemonTranslation(pokemon.PokemonId),
            //            pokemon.PokemonId, pkm.Nickname, newNickname)
            //});
        }
コード例 #23
0
        public static async Task Execute(ISession session, ulong pokemonId)
        {
            var upgradeResult = await session.Inventory.UpgradePokemon(pokemonId);

            if (upgradeResult.Result == UpgradePokemonResponse.Types.Result.Success)
            {
                Logger.Write("Pokemon Upgraded: " +
                             session.Translation.GetPokemonTranslation(
                                 upgradeResult.UpgradedPokemon.PokemonId) + ": " +
                             upgradeResult.UpgradedPokemon.Cp, LogLevel.LevelUp);
            }
            else
            {
                Logger.Write("Pokemon Upgrade Failed.", LogLevel.Warning);
            }

            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
        }
コード例 #24
0
        public static async Task Execute(Session session, ItemId itemId, int count)
        {
            var response = await session.Client.Inventory.RecycleItem(itemId, count);

            if (response.Result == RecycleInventoryItemResponse.Types.Result.Success)
            {
                Logger.Write(
                    $"Recycled {count}x {itemId.ToString().Substring(4)}",
                    LogLevel.Recycling);
            }
            else
            {
                Logger.Write(
                    $"Unable to recycle {count}x {itemId.ToString().Substring(4)}",
                    LogLevel.Error);
            }
            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 500);
        }
コード例 #25
0
        private static async Task evolve(ISession session, List <PokemonData> pokemonToEvolve)
        {
            foreach (var pokemon in pokemonToEvolve)
            {
                // no cancellationToken.ThrowIfCancellationRequested here, otherwise the lucky egg would be wasted.
                var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id);

                session.EventDispatcher.Send(new PokemonEvolveEvent
                {
                    Id     = pokemon.PokemonId,
                    Exp    = evolveResponse.ExperienceAwarded,
                    Result = evolveResponse.Result
                });
                if (!pokemonToEvolve.Last().Equals(pokemon))
                {
                    DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
                }
            }
        }
コード例 #26
0
ファイル: UseItemTask.cs プロジェクト: jabr212/Catchem-PoGo
        public static async Task Execute(ISession session, ItemId itemId, CancellationToken token)
        {
            var resp = await session.Inventory.UseItem(itemId, token);

            if (resp.Item1)
            {
                session.EventDispatcher.Send(new ItemLostEvent
                {
                    Id    = itemId,
                    Count = 1
                });
                session.EventDispatcher.Send(new ItemUsedEvent
                {
                    Id       = itemId,
                    ExpireMs = resp.Item2
                });
            }
            await DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 10000);
        }
コード例 #27
0
        //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);
            }
        }
コード例 #28
0
        public static async Task Execute(ISession session, ulong pokemonId)
        {
            var all = await session.Inventory.GetPokemons();

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

            if (pokemon == null)
            {
                return;
            }

            var pokemonSettings = await session.Inventory.GetPokemonSettings();

            var pokemonFamilies = await session.Inventory.GetPokemonFamilies();

            await session.Client.Inventory.TransferPokemon(pokemonId);

            await session.Inventory.DeletePokemonFromInvById(pokemonId);

            var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp
                ? await session.Inventory.GetHighestPokemonOfTypeByIv(pokemon)
                : await session.Inventory.GetHighestPokemonOfTypeByCp(pokemon)) ?? pokemon;

            var setting = pokemonSettings.Single(q => q.PokemonId == pokemon.PokemonId);
            var family  = pokemonFamilies.First(q => q.FamilyId == setting.FamilyId);

            family.Candy_++;

            // Broadcast event as everyone would benefit
            session.EventDispatcher.Send(new TransferPokemonEvent
            {
                Id             = pokemon.PokemonId,
                Perfection     = PokemonInfo.CalculatePokemonPerfection(pokemon),
                Cp             = pokemon.Cp,
                BestCp         = bestPokemonOfType.Cp,
                BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType),
                FamilyCandies  = family.Candy_
            });

            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
        }
コード例 #29
0
        private static async Task UseBerry(ISession session, ulong encounterId, string spawnPointId)
        {
            var inventoryBalls = await session.Inventory.GetItems();

            var berries = inventoryBalls.Where(p => p.ItemId == ItemId.ItemRazzBerry);
            var berry   = berries.FirstOrDefault();

            if (berry == null || berry.Count <= 0)
            {
                return;
            }

            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 500);

            var useCaptureItem = await session.Client.Encounter.UseCaptureItem(encounterId, ItemId.ItemRazzBerry, spawnPointId);

            berry.Count -= 1;
            session.EventDispatcher.Send(new UseBerryEvent {
                BerryType = ItemId.ItemRazzBerry, Count = berry.Count
            });
        }
コード例 #30
0
        public static async Task Execute(ISession session, ulong pokemonId)
        {
            var all = await session.Inventory.GetPokemons();

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

            if (pokemon == null)
            {
                return;
            }

            var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id);

            session.EventDispatcher.Send(new PokemonEvolveEvent
            {
                Id     = pokemon.PokemonId,
                Exp    = evolveResponse.ExperienceAwarded,
                Result = evolveResponse.Result
            });
            DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0);
        }