private async Task ExecuteCatchAllNearbyPokemons() { var mapObjects = await _client.GetMapObjects(); var pokemons = mapObjects.MapCells.SelectMany(i => i.CatchablePokemons).OrderBy(i => LocationUtils.CalculateDistanceInMeters(new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude))); if (pokemons != null && pokemons.Any()) { Logger.Normal(ConsoleColor.Green, $"Found {pokemons.Count()} catchable Pokemon"); } foreach (var pokemon in pokemons) { var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude); await Task.Delay(distance > 100? 5000 : 500); var encounter = await _client.EncounterPokemon(pokemon.EncounterId, pokemon.SpawnpointId); if (encounter.Status == EncounterResponse.Types.Status.EncounterSuccess) { await CatchEncounter(encounter, pokemon); } else { Logger.Normal($"Encounter problem: {encounter?.Status}"); } } await RandomHelper.RandomDelay(500, 1000); }
private async Task CatchEncounter(EncounterResponse encounter, MapPokemon pokemon) { CatchPokemonResponse caughtPokemonResponse; do { var probability = encounter?.CaptureProbability?.CaptureProbability_?.FirstOrDefault(); if ((probability.HasValue && probability.Value < 0.35 && encounter.WildPokemon?.PokemonData?.Cp > 400) || CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData) >= _clientSettings.KeepMinIVPercentage) { //Throw berry is we can await UseBerry(pokemon.EncounterId, pokemon.SpawnpointId); } var pokeball = await GetBestBall(encounter?.WildPokemon); var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude); caughtPokemonResponse = await _client.CatchPokemon(pokemon.EncounterId, pokemon.SpawnpointId, pokemon.Latitude, pokemon.Longitude, pokeball); Logger.Write( caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess ? $"{pokemon.PokemonId} ({encounter?.WildPokemon?.PokemonData?.Cp} CP) ({Math.Round(CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData)).ToString("0.00")}% perfection) | Chance: {encounter?.CaptureProbability.CaptureProbability_.First()} | {Math.Round(distance)}m distance | with {pokeball} " : $"{pokemon.PokemonId} ({encounter?.WildPokemon?.PokemonData?.Cp} CP) Chance: {Math.Round(Convert.ToDouble(encounter?.CaptureProbability?.CaptureProbability_.First()))} | {Math.Round(distance)}m distance {caughtPokemonResponse.Status} | with {pokeball}", LogLevel.Caught); await DisplayPlayerLevelInTitle(true); await Task.Delay(2000); } while (caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchMissed || caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchEscape); }
private async Task CatchEncounter(EncounterResponse encounter, MapPokemon pokemon) { CatchPokemonResponse caughtPokemonResponse; do { var bestBerry = await GetBestBerry(encounter?.WildPokemon); var inventoryBerries = await _inventory.GetItems(); var berries = inventoryBerries.Where(p => (ItemId)p.Item_ == bestBerry).FirstOrDefault();; var probability = encounter?.CaptureProbability?.CaptureProbability_?.FirstOrDefault(); if (bestBerry != AllEnum.ItemId.ItemUnknown && probability.HasValue && probability.Value < 0.35) { var useRaspberry = await _client.UseCaptureItem(pokemon.EncounterId, bestBerry, pokemon.SpawnpointId); Logger.Normal($"(BERRY) {bestBerry} used, remaining: {berries.Count}"); await RandomHelper.RandomDelay(500, 1000); } var bestPokeball = await GetBestBall(encounter?.WildPokemon); if (bestPokeball == MiscEnums.Item.ITEM_UNKNOWN) { Logger.Normal($"(POKEBATTLE) You don't own any Pokeballs :( - We missed a {pokemon.PokemonId} with CP {encounter?.WildPokemon?.PokemonData?.Cp}"); return; } var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude); caughtPokemonResponse = await _client.CatchPokemon(pokemon.EncounterId, pokemon.SpawnpointId, pokemon.Latitude, pokemon.Longitude, bestPokeball); if (caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess) { foreach (int xp in caughtPokemonResponse.Scores.Xp) { _stats.addExperience(xp); } _stats.increasePokemons(); var profile = await _client.GetProfile(); _stats.getStardust(profile.Profile.Currency.ToArray()[1].Amount); } _stats.updateConsoleTitle(_inventory); Logger.Normal(ConsoleColor.Yellow, caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess ? $"(POKEBATTLE) We caught a {pokemon.PokemonId} with CP {encounter?.WildPokemon?.PokemonData?.Cp} ({CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData).ToString("0.00")}% perfect) and CaptureProbability: {encounter?.CaptureProbability.CaptureProbability_.First()}, used {bestPokeball} and received XP {caughtPokemonResponse.Scores.Xp.Sum()}" : $"(POKEBATTLE) {pokemon.PokemonId} with CP {encounter?.WildPokemon?.PokemonData?.Cp} CaptureProbability: {encounter?.CaptureProbability.CaptureProbability_.First()} {caughtPokemonResponse.Status} while using a {bestPokeball}.." ); await RandomHelper.RandomDelay(1750, 2250); }while (caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchMissed || caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchEscape); }
private async Task ExecuteFarmingPokestopsAndPokemons() { var mapObjects = await _client.GetMapObjects(); var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts) .Where( i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()) .OrderBy( i => LocationUtils.CalculateDistanceInMeters( new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude))); foreach (var pokeStop in pokeStops) { var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude); var update = await _navigation.HumanLikeWalking(new Navigation.Location(pokeStop.Latitude, pokeStop.Longitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); var fortInfo = await _client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); var fortSearch = await _client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); Logger.Write($"{fortInfo.Name} in ({Math.Round(distance)}m)", LogLevel.Info, ConsoleColor.DarkRed); if (fortSearch.ExperienceAwarded > 0) { Logger.Write( $"XP: {fortSearch.ExperienceAwarded}, Gems: {fortSearch.GemsAwarded}, Eggs: {fortSearch.PokemonDataEgg} Items: {StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded)}", LogLevel.Pokestop); await DisplayPlayerLevelInTitle(true); } await Task.Delay(1000); await RecycleItems(); await ExecuteCatchAllNearbyPokemons(); if (_clientSettings.TransferDuplicatePokemon) { await TransferDuplicatePokemon(); } } }
private async Task ExecuteFarmingPokestopsAndPokemons() { var mapObjects = await _client.GetMapObjects(); var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()).OrderBy(i => LocationUtils.CalculateDistanceInMeters(new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude))); Logger.Normal(ConsoleColor.Green, $"Found {pokeStops.Count()} pokestops"); foreach (var pokeStop in pokeStops) { await ExecuteCatchAllNearbyPokemons(); if (_clientSettings.EvolveAllPokemonWithEnoughCandy) { await EvolveAllPokemonWithEnoughCandy(_clientSettings.PokemonsToEvolve); } if (_clientSettings.TransferDuplicatePokemon) { await TransferDuplicatePokemon(); } var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude); var update = await _navigation.HumanLikeWalking(new Navigation.Location(pokeStop.Latitude, pokeStop.Longitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); var fortInfo = await _client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); var fortSearch = await _client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); _stats.addExperience(fortSearch.ExperienceAwarded); _stats.updateConsoleTitle(_inventory); Logger.Normal(ConsoleColor.Cyan, $"(POKESTOP) Name: {fortInfo.Name} in {Math.Round(distance)}m distance"); if (fortSearch.ExperienceAwarded > 0) { Logger.Normal(ConsoleColor.Cyan, $"(POKESTOP) XP: {fortSearch.ExperienceAwarded}, Gems: { fortSearch.GemsAwarded}, Eggs: {fortSearch.PokemonDataEgg} Items: {StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded)}"); } await RandomHelper.RandomDelay(500, 1000); await RecycleItems(); } }
private async Task ExecuteCatchAllNearbyPokemons() { var mapObjects = await _client.GetMapObjects(); var pokemons = mapObjects.MapCells.SelectMany(i => i.CatchablePokemons) .OrderBy( i => LocationUtils.CalculateDistanceInMeters( new Navigation.Location(_client.CurrentLat, _client.CurrentLng), new Navigation.Location(i.Latitude, i.Longitude))); foreach (var pokemon in pokemons) { if (_clientSettings.UsePokemonToNotCatchFilter && pokemon.PokemonId.Equals( _clientSettings.PokemonsNotToCatch.FirstOrDefault(i => i == pokemon.PokemonId))) { Logger.Write("Skipped " + pokemon.PokemonId); continue; } var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude); await Task.Delay(distance > 100? 15000 : 500); var encounter = await _client.EncounterPokemon(pokemon.EncounterId, pokemon.SpawnpointId); if (encounter.Status == EncounterResponse.Types.Status.EncounterSuccess) { await CatchEncounter(encounter, pokemon); } else { Logger.Write($"Encounter problem: {encounter.Status}"); } } await Task.Delay(_clientSettings.DelayBetweenMove); }
private void Espiral(Client client, FortData[] pokeStops, int MaxWalkingRadiusInMeters) { CatchingLogic.Execute(); Logger.ColoredConsoleWrite(ConsoleColor.Blue, "Starting Archimedean spiral"); var i2 = 0; var salir = true; var cantidadvar = 0.0001; double recorrido = MaxWalkingRadiusInMeters; pokeStops = pokeStops.Where(i => LocationUtils.CalculateDistanceInMeters(objClient.CurrentLatitude, objClient.CurrentLongitude, i.Latitude, i.Longitude) <= BotSettings.MaxWalkingRadiusInMeters).ToArray(); var centerx = objClient.CurrentLatitude; var centery = objClient.CurrentLongitude; if (recorrido <= 100) { cantidadvar = 0.00008; } if (recorrido > 100 && recorrido <= 500) { cantidadvar = 0.00009; } if (recorrido > 500 && recorrido <= 1000) { cantidadvar = 0.0001; } if (recorrido > 1000) { cantidadvar = 0.0002; } while (salir) { if (BotSettings.RelocateDefaultLocation) { break; } var angle = 0.3 * i2; var xx = centerx + cantidadvar * angle * Math.Cos(angle); var yy = centery + cantidadvar * angle * Math.Sin(angle); var distancia = Navigation.DistanceBetween2Coordinates(centerx, centery, xx, yy); if (distancia > recorrido) { salir = false; Logger.ColoredConsoleWrite(ConsoleColor.Green, "Returning to the starting point..."); navigation.HumanLikeWalking(new GeoCoordinate(BotSettings.DefaultLatitude, BotSettings.DefaultLongitude), BotSettings.WalkingSpeedInKilometerPerHour, CatchingLogic.Execute); break; } if (i2 % 10 == 0) { Logger.ColoredConsoleWrite(ConsoleColor.Blue, "Distance from starting point: " + distancia + " metros..."); } navigation.HumanLikeWalking( new GeoCoordinate(xx, yy), BotSettings.WalkingSpeedInKilometerPerHour, CatchingLogic.Execute); Logger.ColoredConsoleWrite(ConsoleColor.Blue, "Looking PokeStops who are less than 30 meters..."); FncPokeStop(client, pokeStops, true); i2++; } }