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 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++; } }
private async Task ExecuteFarmingPokestopsAndPokemons(Client client) { var distanceFromStart = LocationUtils.CalculateDistanceInMeters(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, _client.CurrentLat, _client.CurrentLng); if (_clientSettings.MaxWalkingRadiusInMeters != 0 && distanceFromStart > _clientSettings.MaxWalkingRadiusInMeters) { Logger.ColoredConsoleWrite(ConsoleColor.Green, "Youre outside of the defined Max Walking Radius. Walking back!"); var update = await _navigation.HumanLikeWalking(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); var start = await _navigation.HumanLikeWalking(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } Resources.OutPutWalking = true; var mapObjects = await _client.GetMapObjects(); //var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()); var pokeStops = _navigation.pathByNearestNeighbour( mapObjects.MapCells.SelectMany(i => i.Forts) .Where( i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()) .OrderBy( i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, i.Latitude, i.Longitude)).ToArray(), _clientSettings.WalkingSpeedInKilometerPerHour); if (_clientSettings.MaxWalkingRadiusInMeters != 0) { pokeStops = pokeStops.Where(i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, i.Latitude, i.Longitude) <= _clientSettings.MaxWalkingRadiusInMeters).ToArray(); if (pokeStops.Count() == 0) { Logger.ColoredConsoleWrite(ConsoleColor.Red, "We cant find any PokeStops in a range of " + _clientSettings.MaxWalkingRadiusInMeters + "m!"); await ExecuteCatchAllNearbyPokemons(); } } if (pokeStops.Count() == 0) { Logger.ColoredConsoleWrite(ConsoleColor.Red, "We cant find any PokeStops, which are unused! Probably Server unstable, or you visted them all. Retrying.."); await ExecuteCatchAllNearbyPokemons(); } else { Logger.ColoredConsoleWrite(ConsoleColor.Yellow, "We found " + pokeStops.Count() + " PokeStops near."); } foreach (var pokeStop in pokeStops) { await UseIncense(); await ExecuteCatchAllNearbyPokemons(); if (count >= 3) { count = 0; await StatsLog(client); if (_clientSettings.EvolvePokemonsIfEnoughCandy) { await EvolveAllPokemonWithEnoughCandy(); } if (_clientSettings.AutoIncubate) { await StartIncubation(); } await TransferDuplicatePokemon(_clientSettings.keepPokemonsThatCanEvolve); await RecycleItems(); //// if (_clientSettings.UseLuckyEggIfNotRunning) { await _inventory.UseLuckyEgg(_client); } } //if (_clientSettings.pokevision) //{ // foreach (spottedPoke p in await _pokevision.GetNearPokemons(_client.CurrentLat, _client.CurrentLng)) // { // var dist = LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, p._lat, p._lng); // Logger.ColoredConsoleWrite(ConsoleColor.Magenta, $"PokeVision: A {StringUtils.getPokemonNameByLanguage(_clientSettings, p._pokeId)} in {dist:0.##}m distance. Trying to catch."); // var upd = await _navigation.HumanLikeWalking(new GeoCoordinate(p._lat, p._lng), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); // } //} _infoObservable.PushNewGeoLocations(new GeoCoordinate(_client.CurrentLat, _client.CurrentLng)); var distance = LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude); var fortInfo = await _client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); if (fortInfo == null) { continue; } Logger.ColoredConsoleWrite(ConsoleColor.Green, $"Next Pokestop: {fortInfo.Name} in {distance:0.##}m distance."); var update = await _navigation.HumanLikeWalking(new GeoCoordinate(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); count++; if (fortSearch.ExperienceAwarded > 0) { failed_softban = 0; _botStats.AddExperience(fortSearch.ExperienceAwarded); var egg = ""; if (fortSearch.PokemonDataEgg != null) { egg = ", Egg " + fortSearch.PokemonDataEgg.EggKmWalkedTarget; } else { egg = ""; } var gems = ""; if (fortSearch.GemsAwarded > 0) { gems = ", Gems:" + fortSearch.GemsAwarded; } else { gems = ""; } var items = ""; if (StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded) != "") { items = StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded); } else { items = "Nothing (Inventory Full?)"; } Logger.ColoredConsoleWrite(ConsoleColor.Green, $"Farmed XP: {fortSearch.ExperienceAwarded}{gems}{egg}, Items: {items}", LogLevel.Info); int eggs = 0; if (fortSearch.PokemonDataEgg != null) { eggs = fortSearch.PokemonDataEgg.EggKmWalkedTarget; } try { TelegramUtil.getInstance().sendInformationText(TelegramUtil.TelegramUtilInformationTopics.Pokestop, fortInfo.Name, fortSearch.ExperienceAwarded, eggs, fortSearch.GemsAwarded, items); } catch (Exception) { } } else { failed_softban++; if (failed_softban >= 6) { Logger.Error("Detected Softban. Trying to use our Special 1337 Unban Methode."); for (int i = 0; i < 60; i++) { var unban = await client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); if (unban.ExperienceAwarded > 0) { break; } } failed_softban = 0; Logger.ColoredConsoleWrite(ConsoleColor.Green, "Probably unbanned you."); } } await RandomHelper.RandomDelay(50, 200); } if (_clientSettings.WalkBackToDefaultLocation) { Logger.ColoredConsoleWrite(ConsoleColor.Green, "Walking back to Default Location."); await _navigation.HumanLikeWalking(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } }
private async Task ExecuteFarmingPokestopsAndPokemons() { var distanceFromStart = LocationUtils.CalculateDistanceInMeters( _clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, _client.CurrentLat, _client.CurrentLng); // Edge case for when the client somehow ends up outside the defined radius if (_clientSettings.MaxTravelDistanceInMeters != 0 && distanceFromStart > _clientSettings.MaxTravelDistanceInMeters) { Logger.Write( $"You're outside of your defined radius! Walking to start ({distanceFromStart}m away) in 5 seconds. Is your Coords.ini file correct?", LogLevel.Warning); await Task.Delay(5000); Logger.Write("Moving to start location now."); var ToStart = await _navigation.HumanLikeWalking( new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } var mapObjects = await _client.GetMapObjects(); var pokeStops = Navigation.pathByNearestNeighbour( mapObjects.MapCells.SelectMany(i => i.Forts) .Where( i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime() && (_clientSettings.MaxTravelDistanceInMeters == 0 || LocationUtils.CalculateDistanceInMeters( _clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, i.Latitude, i.Longitude) < _clientSettings.MaxTravelDistanceInMeters)) .OrderBy( i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, i.Latitude, i.Longitude)).ToArray()); var pokestopList = pokeStops.ToList(); if (pokestopList.Count <= 0) { Logger.Write("No usable PokeStops found in your area. Is your maximum distance too small?", LogLevel.Warning); } else { Logger.Write($"Found {pokeStops.Count()} {(pokeStops.Count() == 1 ? "Pokestop" : "Pokestops")}", LogLevel.Info); } while (pokestopList.Any()) { await ExecuteCatchAllNearbyPokemons(); var pokeStop = pokestopList[0]; pokestopList.RemoveAt(0); var distance = LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude); var fortInfo = await _client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); Logger.Write($"Name: {fortInfo.Name} in {distance:0.##} m distance", LogLevel.Pokestop); var update = await _navigation.HumanLikeWalking(new GeoCoordinate(pokeStop.Latitude, pokeStop.Longitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); var fortSearch = await _client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); if (fortSearch.ExperienceAwarded > 0) { _stats.AddExperience(fortSearch.ExperienceAwarded); _stats.UpdateConsoleTitle(_client, _inventory); string EggReward = fortSearch.PokemonDataEgg != null ? "1" : "0"; Logger.Write($"XP: {fortSearch.ExperienceAwarded}, Gems: {fortSearch.GemsAwarded}, Eggs: {EggReward}, Items: {StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded)}", LogLevel.Pokestop); recycleCounter++; } await RandomHelper.RandomDelay(50, 200); if (recycleCounter >= 5) { await RecycleItems(); } } }
private async Task ExecuteFarmingPokestopsAndPokemons() { var distanceFromStart = LocationUtils.CalculateDistanceInMeters( _clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, _client.CurrentLatitude, _client.CurrentLongitude); // Edge case for when the client somehow ends up outside the defined radius if (_clientSettings.MaxTravelDistanceInMeters != 0 && distanceFromStart > _clientSettings.MaxTravelDistanceInMeters) { Logger.Write( $"You're outside of your defined radius! Walking to start ({distanceFromStart}m away) in 5 seconds. Is your Coords.ini file correct?", LogLevel.Warning); await Task.Delay(5000); Logger.Write("Moving to start location now."); await _navigation.HumanLikeWalking( new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, null); } var mapObjects = await _client.Map.GetMapObjects(); // Wasn't sure how to make this pretty. Edit as needed. var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts) .Where( i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime() && ( // Make sure PokeStop is within max travel distance, unless it's set to 0. LocationUtils.CalculateDistanceInMeters( _clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, i.Latitude, i.Longitude) < _clientSettings.MaxTravelDistanceInMeters) || _clientSettings.MaxTravelDistanceInMeters == 0 ); var pokestopList = pokeStops.ToList(); var stopsHit = 0; if (pokestopList.Count <= 0) { Logger.Write("No usable PokeStops found in your area. Is your maximum distance too small?", LogLevel.Warning); await ExecuteCatchAllNearbyPokemons(); var bearing = _client.CurrentLatitude > _clientSettings.DefaultLatitude ? 180 : 0; var direction = bearing == 180 ? "south" : "north"; Logger.Write($"Heading {direction} to look for pokemon", LogLevel.Warning); await _navigation.HumanLikeWalking( LocationUtils.CreateWaypoint(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.MaxTravelDistanceInMeters, bearing), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } while (pokestopList.Any()) { //resort try { pokestopList = pokestopList.OrderBy( i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLatitude, _client.CurrentLongitude, i.Latitude, i.Longitude)).ToList(); var pokeStop = pokestopList[0]; pokestopList.RemoveAt(0); var distance = LocationUtils.CalculateDistanceInMeters(_client.CurrentLatitude, _client.CurrentLongitude, pokeStop.Latitude, pokeStop.Longitude); var fortInfo = await _client.Fort.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); Logger.Write($"{fortInfo.Name} in ({Math.Round(distance)}m)", LogLevel.Info, ConsoleColor.DarkCyan); await _navigation.HumanLikeWalking(new GeoCoordinate(pokeStop.Latitude, pokeStop.Longitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); var fortSearch = await _client.Fort.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); if (fortSearch.ExperienceAwarded > 0) { _stats.AddExperience(fortSearch.ExperienceAwarded); _stats.UpdateConsoleTitle(_inventory); //todo: fix egg crash _narrator.Speak($"Arrived at {fortInfo.Name}"); Logger.Write( $"{fortInfo.Name} || XP: {fortSearch.ExperienceAwarded}, Eggs: {fortSearch.PokemonDataEgg}, Items: {StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch)}", LogLevel.Pokestop); } await Task.Delay(1000); if (++stopsHit % 5 == 0) //TODO: OR item/pokemon bag is full { stopsHit = 0; await RecycleItems(); if (_clientSettings.EvolveAllPokemonWithEnoughCandy || _clientSettings.EvolveAllPokemonAboveIV) { await EvolveAllPokemonWithEnoughCandy(_clientSettings.PokemonsToEvolve); } if (_clientSettings.TransferDuplicatePokemon) { await TransferDuplicatePokemon(); } } } catch (Exception ex) { } } }
private async Task ExecuteFarmingPokestopsAndPokemons() { var distanceFromStart = LocationUtils.CalculateDistanceInMeters( _clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, _client.CurrentLat, _client.CurrentLng); // Edge case for when the client somehow ends up outside the defined radius if (_clientSettings.MaxTravelDistanceInMeters != 0 && distanceFromStart > _clientSettings.MaxTravelDistanceInMeters) { Logger.Write( $"You're outside of your defined radius! Walking to start ({distanceFromStart:0.##}m away) in 5 seconds. Is your LastCoords.ini file correct?", LogLevel.Warning); await Task.Delay(5000); Logger.Write("Moving to start location now."); await _navigation.HumanLikeWalking( new GeoUtils(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } var pokeStops = await _inventory.GetPokestops(); var pokestopList = pokeStops.ToList(); if (pokestopList.Count <= 0) { Logger.Write("No usable PokeStops found in your area. Is your maximum distance too small?", LogLevel.Warning); } else { Logger.Write($"Found {pokeStops.Count()} {(pokeStops.Count() == 1 ? "Pokestop" : "Pokestops")}", LogLevel.Info); } while (pokestopList.Any()) { if (_clientSettings.UseLuckyEggs) { await UseLuckyEgg(); } if (_clientSettings.UseIncense) { await UseIncense(); } await ExecuteCatchAllNearbyPokemons(); pokestopList = pokestopList.OrderBy( i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, i.Latitude, i.Longitude)).ToList(); var pokeStop = pokestopList.First(); pokestopList.Remove(pokeStop); var distance = LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude); var fortInfo = await _client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); var latlngDebug = string.Empty; if (_clientSettings.DebugMode) { latlngDebug = $"| Latitude: {pokeStop.Latitude} - Longitude: {pokeStop.Longitude}"; } Logger.Write($"Name: {fortInfo.Name} in {distance:0.##} m distance {latlngDebug}", LogLevel.Pokestop); if (_clientSettings.UseTeleportInsteadOfWalking) { await _client.UpdatePlayerLocation(pokeStop.Latitude, pokeStop.Longitude, _clientSettings.DefaultAltitude); Logger.Write($"Using Teleport instead of Walking!", LogLevel.Debug); } else { await _navigation.HumanLikeWalking(new GeoUtils(pokeStop.Latitude, pokeStop.Longitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } var timesZeroXPawarded = 0; var fortTry = 0; //Current check const int retryNumber = 45; //How many times it needs to check to clear softban const int zeroCheck = 5; //How many times it checks fort before it thinks it's softban do { var fortSearch = await _client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); if (fortSearch.ExperienceAwarded > 0 && timesZeroXPawarded > 0) { timesZeroXPawarded = 0; } if (fortSearch.ExperienceAwarded == 0) { timesZeroXPawarded++; if (timesZeroXPawarded <= zeroCheck) { continue; } if ((int)fortSearch.CooldownCompleteTimestampMs != 0) { break; // Check if successfully looted, if so program can continue as this was "false alarm". } fortTry += 1; if (_client.Settings.DebugMode) { Logger.Write($"Seems your Soft-Banned. Trying to Unban via Pokestop Spins. Retry {fortTry} of {retryNumber-zeroCheck}", LogLevel.Warning); } await RandomHelper.RandomDelay(75, 100); } else { _stats.AddExperience(fortSearch.ExperienceAwarded); _stats.UpdateConsoleTitle(_client, _inventory); var eggReward = fortSearch.PokemonDataEgg != null ? "1" : "0"; Logger.Write($"XP: {fortSearch.ExperienceAwarded}, Gems: {fortSearch.GemsAwarded}, Eggs: {eggReward}, Items: {StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded)}", LogLevel.Pokestop); _recycleCounter++; break; //Continue with program as loot was succesfull. } } while (fortTry < retryNumber - zeroCheck); //Stop trying if softban is cleaned earlier or if 40 times fort looting failed. if (_recycleCounter >= 5) { await RecycleItems(); } } }
private async Task ExecuteFarmingPokestopsAndPokemons(Client client) { var distanceFromStart = LocationUtils.CalculateDistanceInMeters(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude, _client.CurrentLat, _client.CurrentLng); if (_clientSettings.MaxWalkingRadiusInMeters != 0 && distanceFromStart > _clientSettings.MaxWalkingRadiusInMeters) { Logger.ColoredConsoleWrite(ConsoleColor.Green, "Youre outside of the defined Max Walking Radius. Walking back!"); var update = await _navigation.HumanLikeWalking(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); var start = await _navigation.HumanLikeWalking(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } Resources.OutPutWalking = true; var mapObjects = await client.GetMapObjects(); //var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()); var pokeStops = _navigation.pathByNearestNeighbour( mapObjects.MapCells.SelectMany(i => i.Forts) .Where( i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime()) .OrderBy( i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, i.Latitude, i.Longitude)).ToArray(), _clientSettings.WalkingSpeedInKilometerPerHour); if (_clientSettings.MaxWalkingRadiusInMeters != 0) { pokeStops = pokeStops.Where(i => LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, i.Latitude, i.Longitude) <= _clientSettings.MaxWalkingRadiusInMeters).ToArray(); if (pokeStops.Count() == 0) { Logger.ColoredConsoleWrite(ConsoleColor.Red, "We cant find any PokeStops in a range of " + _clientSettings.MaxWalkingRadiusInMeters + "m!"); } } if (pokeStops.Count() == 0) { Logger.ColoredConsoleWrite(ConsoleColor.Red, "We cant find any PokeStops, which are unused! Probably Server unstable, or you visted them all. Retrying.."); await ExecuteCatchAllNearbyPokemons(); } else { Logger.ColoredConsoleWrite(ConsoleColor.Yellow, "We found " + pokeStops.Count() + " PokeStops near."); } foreach (var pokeStop in pokeStops) { // replace this true with settings variable!! if (true) { await UseIncense(); } await ExecuteCatchAllNearbyPokemons(); count++; if (count >= 3) { count = 0; await StatsLog(client); if (_clientSettings.EvolvePokemonsIfEnoughCandy) { await EvolveAllPokemonWithEnoughCandy(); } await TransferDuplicatePokemon(false); await RecycleItems(); } var distance = LocationUtils.CalculateDistanceInMeters(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude); var fortInfo = await client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); Logger.ColoredConsoleWrite(ConsoleColor.Green, $"Next Pokestop: {fortInfo.Name} in {distance:0.##}m distance."); var update = await _navigation.HumanLikeWalking(new GeoCoordinate(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); if (fortSearch.ExperienceAwarded > 0) { failed_softban = 0; _botStats.addExperience(fortSearch.ExperienceAwarded); var egg = ""; if (fortSearch.PokemonDataEgg != null) { egg = "Egg " + fortSearch.PokemonDataEgg.EggKmWalkedTarget; } else { egg = "/"; } var i = ""; if (StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded) != null) { i = StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded); } else { i = "/"; } Logger.ColoredConsoleWrite(ConsoleColor.Green, $"Farmed XP: {fortSearch.ExperienceAwarded}, Gems: { fortSearch.GemsAwarded}, Eggs: {egg} Items: {i}", LogLevel.Info); } else { failed_softban++; if (failed_softban => 6) { Logger.Error("Detected a Softban. Trying to use our Special 1337 Unban Methode."); for (int i = 0; i < 60; i++) { var unban = await client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); if (unban.ExperienceAwarded > 0) { break; } } failed_softban = 0; Logger.ColoredConsoleWrite(ConsoleColor.Green, "Probably unbanned you."); } } await RandomHelper.RandomDelay(50, 200); } if (_clientSettings.WalkBackToDefaultLocation) { Logger.ColoredConsoleWrite(ConsoleColor.Green, "Walking back to Default Location."); await _navigation.HumanLikeWalking(new GeoCoordinate(_clientSettings.DefaultLatitude, _clientSettings.DefaultLongitude), _clientSettings.WalkingSpeedInKilometerPerHour, ExecuteCatchAllNearbyPokemons); } }