private static void PostProcessDataFetched(IEnumerable <RarePokemonInfo> pokemons) { var rw = new Random(); var speedInMetersPerSecond = _setting.WalkingSpeedInKilometerPerHour / 3.6; int count = 0; foreach (var item in pokemons) { CalculateDistanceAndEstTime(item); //the pokemon data already in the list if (rarePokemons.Any(x => x.id == item.id || (LocationUtils.CalculateDistanceInMeters(x.latitude, x.longitude, item.latitude, item.longitude) < 10 && item.pokemonId == x.pokemonId))) { continue; } //check if pokemon in the snip list if (!pokemonToBeSnipedIds.Any(x => x == item.Id)) { continue; } count++; var snipeSetting = _setting.HumanWalkSnipeFilters.FirstOrDefault(x => x.Key == item.Id); HumanWalkSnipeFilter config = new HumanWalkSnipeFilter(_setting.HumanWalkingSnipeMaxDistance, _setting.HumanWalkingSnipeMaxEstimateTime, 3, //default priority _setting.HumanWalkingSnipeTryCatchEmAll, _setting.HumanWalkingSnipeSpinWhileWalking); if (_setting.HumanWalkSnipeFilters.Any(x => x.Key == item.Id)) { config = _setting.HumanWalkSnipeFilters.First(x => x.Key == item.Id).Value; } item.FilterSetting = config; rarePokemons.Add(item); } if (count > 0) { _session.EventDispatcher.Send(new HumanWalkSnipeEvent() { Type = HumanWalkSnipeEventTypes.PokemonScanned, RarePokemons = rarePokemons.Select(p => p.Id.ToString()).ToList() }); if (_setting.HumanWalkingSnipeDisplayList) { rarePokemons = rarePokemons.OrderBy(p => p.FilterSetting.Priority).OrderBy(p => p.distance).ToList(); var ordered = rarePokemons.Where(p => p.expired > DateTime.Now.AddSeconds(p.estimateTime)).ToList(); if (ordered.Count > 0) { Logger.Write(string.Format(" | Name | Distance | Expires | Travel times | Catchable")); foreach (var pokemon in ordered) { string name = _session.Translation.GetPokemonTranslation(pokemon.Id); name += "".PadLeft(20 - name.Length, ' '); Logger.Write(string.Format("SNIPPING | {0} | {1:0.00}m \t| {2:mm} min {2:ss} sec | {3:00} min {4:00} sec | {5}", name, pokemon.distance, pokemon.expired - DateTime.Now, pokemon.estimateTime / 60, pokemon.estimateTime % 60, pokemon.expired > DateTime.Now.AddSeconds(pokemon.estimateTime) ? "Possible" : "Missied" )); } } } } }
private static async Task PostProcessDataFetched(IEnumerable <SnipePokemonInfo> pokemons, bool displayList = true) { // Filter out pokemon with invalid locations. pokemons = pokemons.Where(p => LocationUtils.IsValidLocation(p.Latitude, p.Longitude)).ToList(); var rw = new Random(); var speedInMetersPerSecond = _setting.WalkingSpeedInKilometerPerHour / 3.6; int count = 0; await Task.Run(() => { foreach (var item in pokemons) { #region ITEM PROCESSING //the pokemon data already in the list if (rarePokemons.Any(x => x.Value.UniqueId == item.UniqueId || (LocationUtils.CalculateDistanceInMeters(x.Value.Latitude, x.Value.Longitude, item.Latitude, item.Longitude) < 10 && item.Id == x.Value.Id))) { continue; } //check if pokemon in the snip list if (!pokemonToBeCaughtLocallyIds.ContainsKey(item.PokemonId)) { continue; } count++; var snipeSetting = _setting.HumanWalkSnipeFilters.FirstOrDefault(x => x.Key == item.PokemonId); HumanWalkSnipeFilter config = new HumanWalkSnipeFilter(_setting.HumanWalkingSnipeMaxDistance, _setting.HumanWalkingSnipeMaxEstimateTime, 3, //default priority _setting.HumanWalkingSnipeTryCatchEmAll, _setting.HumanWalkingSnipeSpinWhileWalking, _setting.HumanWalkingSnipeAllowSpeedUp, _setting.HumanWalkingSnipeMaxSpeedUpSpeed, _setting.HumanWalkingSnipeDelayTimeAtDestination, _setting.HumanWalkingSnipeAllowTransferWhileWalking); if (_setting.HumanWalkSnipeFilters.Any(x => x.Key == item.PokemonId)) { config = _setting.HumanWalkSnipeFilters.First(x => x.Key == item.PokemonId).Value; } item.Setting = Clone <HumanWalkSnipeFilter>(config); CalculateDistanceAndEstTime(item); if (item.Distance < 10000 && item.Distance != 0) //only add if distance <10km { rarePokemons[item.GetHashCode()] = item; } #endregion } }); if (count > 0) { var orderedRares = rarePokemons.OrderBy(p => p.Value.Setting.Priority).ThenBy(p => p.Value.Distance); _session.EventDispatcher.Send(new HumanWalkSnipeEvent() { Type = HumanWalkSnipeEventTypes.PokemonScanned, Pokemons = ApplyFilter(orderedRares.ToList()), DisplayMessage = displayList }); if (_setting.HumanWalkingSnipeDisplayList) { var ordered = rarePokemons.OrderBy(p => p.Value.Setting.Priority).ThenBy(p => p.Value.Distance) .Where(p => p.Value.ExpiredTime > DateTime.Now.AddSeconds(p.Value.EstimatedTime) && !p.Value.IsVisited) .ToList(); if (ordered.Count > 0 && displayList) { Logger.Write( string.Format( " Source | Name | Distance | Expires | Travel times | Catchable" ) ); foreach (var pokemon in ordered) { string name = _session.Translation.GetPokemonTranslation(pokemon.Value.PokemonId); name += "".PadLeft(30 - name.Length, ' '); string source = pokemon.Value.Source; source += "".PadLeft(30 - source.Length, ' '); Logger.Write( string.Format( " {0} | {1} | {2:0.00}m \t| {3:mm} min {3:ss} sec | {4:00} min {5:00} sec | {6}", source, name, pokemon.Value.Distance, pokemon.Value.ExpiredTime - DateTime.Now, pokemon.Value.EstimatedTime / 60, pokemon.Value.EstimatedTime % 60, pokemon.Value.ExpiredTime > DateTime.Now.AddSeconds(pokemon.Value.EstimatedTime) ? "Possible" : "Missied" ) ); } } } } }
private static void PostProcessDataFetched(IEnumerable <SnipePokemonInfo> pokemons, bool displayList = true) { var rw = new Random(); var speedInMetersPerSecond = _setting.WalkingSpeedInKilometerPerHour / 3.6; int count = 0; foreach (var item in pokemons) { //the pokemon data already in the list if (rarePokemons.Any(x => x.UniqueId == item.UniqueId || (LocationUtils.CalculateDistanceInMeters(x.Latitude, x.Longitude, item.Latitude, item.Longitude) < 10 && item.Id == x.Id))) { continue; } //check if pokemon in the snip list if (!pokemonToBeSnipedIds.Any(x => x == item.PokemonId)) { continue; } count++; var snipeSetting = _setting.HumanWalkSnipeFilters.FirstOrDefault(x => x.Key == item.PokemonId); HumanWalkSnipeFilter config = new HumanWalkSnipeFilter(_setting.HumanWalkingSnipeMaxDistance, _setting.HumanWalkingSnipeMaxEstimateTime, 3, //default priority _setting.HumanWalkingSnipeTryCatchEmAll, _setting.HumanWalkingSnipeSpinWhileWalking, _setting.HumanWalkingSnipeAllowSpeedUp, _setting.HumanWalkingSnipeMaxSpeedUpSpeed, _setting.HumanWalkingSnipeDelayTimeAtDestination); if (_setting.HumanWalkSnipeFilters.Any(x => x.Key == item.PokemonId)) { config = _setting.HumanWalkSnipeFilters.First(x => x.Key == item.PokemonId).Value; } item.Setting = Clone <HumanWalkSnipeFilter>(config); CalculateDistanceAndEstTime(item); if (item.Distance < 10000) //only add if distance <10km { rarePokemons.Add(item); } } rarePokemons = rarePokemons.OrderBy(p => p.Setting.Priority).ThenBy(p => p.Distance).ToList(); //remove troll data var grouped = rarePokemons.GroupBy(p => p.PokemonId); foreach (var g in grouped) { if (g.Count() > 5) { //caculate distance to betweek pokemon } } if (count > 0) { _session.EventDispatcher.Send(new HumanWalkSnipeEvent() { Type = HumanWalkSnipeEventTypes.PokemonScanned, Pokemons = ApplyFilter(rarePokemons), }); if (_setting.HumanWalkingSnipeDisplayList) { var ordered = rarePokemons.Where(p => p.ExpiredTime > DateTime.Now.AddSeconds(p.EstimatedTime) && !p.IsVisited).ToList(); if (ordered.Count > 0 && displayList) { Logger.Write(string.Format(" Source | Name | Distance | Expires | Travel times | Catchable")); foreach (var pokemon in ordered) { string name = _session.Translation.GetPokemonTranslation(pokemon.PokemonId); name += "".PadLeft(16 - name.Length, ' '); string source = pokemon.Source; source += "".PadLeft(16 - source.Length, ' '); Logger.Write(string.Format(" {0} | {1} | {2:0.00}m \t| {3:mm} min {3:ss} sec | {4:00} min {5:00} sec | {6}", source, name, pokemon.Distance, pokemon.ExpiredTime - DateTime.Now, pokemon.EstimatedTime / 60, pokemon.EstimatedTime % 60, pokemon.ExpiredTime > DateTime.Now.AddSeconds(pokemon.EstimatedTime) ? "Possible" : "Missied" )); } } } } }