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); }
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); } }
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); }
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); } } }
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); }
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); } }
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; }
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"); }
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); } }
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); }
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"); }
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); } } } }
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); } }
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); } } }
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); } } } }
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); }
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); }
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(); }
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); } }
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(); }
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(); }
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) //}); }
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); }
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); }
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); } } }
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); }
//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); } }
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); }
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 }); }
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); }