예제 #1
0
        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"
                                                       ));
                        }
                    }
                }
            }
        }
예제 #2
0
        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"
                                    )
                                );
                        }
                    }
                }
            }
        }
예제 #3
0
        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"
                                                       ));
                        }
                    }
                }
            }
        }