コード例 #1
0
        public static void AddSnipeItem(ISession session, MSniperInfo2 item, bool byPassValidation = false)
        {
            if (OutOffBallBlock > DateTime.Now ||
                autoSnipePokemons.Exists(x => x.EncounterId == item.EncounterId) ||
                session.Cache[item.EncounterId.ToString()] != null)
            {
                return;
            }

            if (byPassValidation)
            {
                autoSnipePokemons.Add(item);
                Logger.Write("Manual snipe item queued");
                return;
            }
            item.Iv = Math.Round(item.Iv, 2);
            SnipeFilter filter = new SnipeFilter()
            {
                SnipeIV = session.LogicSettings.MinIVForAutoSnipe
            };

            var pokemonId = (PokemonId)item.PokemonId;

            if (session.LogicSettings.PokemonSnipeFilters.ContainsKey(pokemonId))
            {
                filter = session.LogicSettings.PokemonSnipeFilters[pokemonId];
            }
            //hack, this case we can't determite move :)

            if (filter.SnipeIV < item.Iv && item.Move1 == PokemonMove.Absorb && item.Move2 == PokemonMove.Absorb)
            {
                autoSnipePokemons.Add(item);
                return;
            }
            //ugly but readable
            if ((string.IsNullOrEmpty(filter.Operator) || filter.Operator == Operator.or.ToString()) &&
                (filter.SnipeIV < item.Iv ||
                 (filter.Moves != null &&
                  filter.Moves.Count > 0 &&
                  filter.Moves.Any(x => x[0] == item.Move1 && x[1] == item.Move2))
                ))

            {
                autoSnipePokemons.Add(item);
            }

            if (filter.Operator == Operator.and.ToString() &&
                (filter.SnipeIV < item.Iv &&
                 (filter.Moves != null &&
                  filter.Moves.Count > 0 &&
                  filter.Moves.Any(x => x[0] == item.Move1 && x[1] == item.Move2))
                ))
            {
                autoSnipePokemons.Add(item);
            }
        }
コード例 #2
0
        private static Dictionary <PokemonId, SnipeFilter> SnipeFilterConvertClbDictionary(CheckedListBox input)
        {
            var x       = input.CheckedItems.Cast <PokemonId>().ToList();
            var results = new Dictionary <PokemonId, SnipeFilter>();

            foreach (var i in x)
            {
                var y = new SnipeFilter();
                results.Add(i, y);
            }
            return(results);
        }
コード例 #3
0
        //private static void Msocket_MessageReceived(object sender, MessageReceivedEventArgs e)
        //{
        //    try
        //    {
        //        SocketCmd cmd = e.GetSocketCmd();
        //        switch (cmd)
        //        {
        //            case SocketCmd.IpLimit:
        //                Logger.Write("(IpLimit) " + e.GetSocketData().First(), LogLevel.Service, ConsoleColor.Red);
        //                break;
        //            case SocketCmd.ServerLimit:
        //                Logger.Write("(ServerLimit) " + e.GetSocketData().First(), LogLevel.Service, ConsoleColor.Red);
        //                break;
        //            case SocketCmd.Identity://first request
        //                UserUniequeId = e.GetSocketData().First();
        //                SendToMSniperServer(UserUniequeId);//confirm
        //                Logger.Write($"(Identity) [ {UserUniequeId} ] connection establisted", LogLevel.Service);
        //                break;

        //            case SocketCmd.PokemonCount://server asks what is in your hand (every 3 minutes)
        //                RefreshLocationQueue();
        //                var x = LocationQueue.GroupBy(p => p.PokemonName)
        //                    .Select(s => new PokemonCount { PokemonId = s.First().GetPokemonName(), Count = s.Count() })
        //                    .ToList();
        //                SendToMSniperServer(JsonConvert.SerializeObject(x));
        //                break;

        //            case SocketCmd.SendPokemon://sending encounters
        //                RefreshLocationQueue();
        //                LocationQueue = LocationQueue.OrderByDescending(p => p.Iv).ToList();
        //                int rq = 1;
        //                if (LocationQueue.Count < int.Parse(e.GetSocketData().First()))
        //                {
        //                    rq = LocationQueue.Count;
        //                }
        //                else
        //                {
        //                    rq = int.Parse(e.GetSocketData().First());
        //                }
        //                var selected = LocationQueue.GetRange(0, rq);
        //                SendToMSniperServer(JsonConvert.SerializeObject(selected));
        //                AddToVisited(selected.Select(p => p.GetEncounterId()).ToList());
        //                LocationQueue.RemoveRange(0, rq);
        //                break;

        //            case SocketCmd.SendOneSpecies://server needs one type pokemon
        //                RefreshLocationQueue();
        //                PokemonId speciesId = (PokemonId)Enum.Parse(typeof(PokemonId), e.GetSocketData().First());
        //                int requestCount = int.Parse(e.GetSocketData()[1]);
        //                var onespecies = LocationQueue.Where(p => p.GetPokemonName() == speciesId).ToList();
        //                onespecies = onespecies.OrderByDescending(p => p.Iv).ToList();
        //                if (onespecies.Count > 0)
        //                {
        //                    List<EncounterInfo> oneType;
        //                    if (onespecies.Count > requestCount)
        //                    {
        //                        oneType = LocationQueue.GetRange(0, requestCount);
        //                        AddToVisited(oneType.Select(p => p.GetEncounterId()).ToList());
        //                        LocationQueue.RemoveRange(0, requestCount);
        //                    }
        //                    else
        //                    {
        //                        oneType = LocationQueue.GetRange(0, LocationQueue.Count);
        //                        LocationQueue.Clear();
        //                    }
        //                    SendToMSniperServer(JsonConvert.SerializeObject(oneType));
        //                }
        //                break;

        //            case SocketCmd.Brodcaster://receiving encounter information from server

        //                //// disabled fornow
        //                //var xcoming = JsonConvert.DeserializeObject<List<EncounterInfo>>(e.GetSocketData().First());
        //                //xcoming = FindNew(xcoming);
        //                //ReceivedPokemons.AddRange(xcoming);
        //                //
        //                //RefreshReceivedPokemons();
        //                //TimeSpan ts = DateTime.Now - lastNotify;
        //                //if (ts.TotalMinutes >= 5)
        //                //{
        //                //    Logger.Write($"total active spawns:[ {ReceivedPokemons.Count} ]", LogLevel.Service);
        //                //    lastNotify = DateTime.Now;
        //                //}
        //                break;
        //            case SocketCmd.None:
        //                Logger.Write("UNKNOWN ERROR", LogLevel.Service, ConsoleColor.Red);
        //                //throw Exception
        //                break;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        socket.Close();
        //        Logger.Write(ex.Message, LogLevel.Service, ConsoleColor.Red);
        //        //throw ex;
        //    }
        //}
        //private static void RefreshReceivedPokemons()
        //{
        //    var pkmns = ReceivedPokemons
        //        .Where(p => TimeStampToDateTime(p.Expiration) > DateTime.Now)
        //        .ToList();
        //    ReceivedPokemons.Clear();
        //    ReceivedPokemons.AddRange(pkmns);
        //}
        //private static void SendToMSniperServer(string message)
        //{
        //    try
        //    {
        //        socket.Send($"{message}");
        //    }
        //    catch (Exception ex)
        //    {
        //        socket.Close();
        //        Logger.Write(ex.Message, LogLevel.Service, ConsoleColor.Red);
        //        //throw ex;
        //    }
        //}
        #endregion
        public static void AddSnipeItem(ISession session, MSniperInfo2 item)
        {
            if (OutOffBallBlock > DateTime.Now)
            {
                return;
            }

            SnipeFilter filter = new SnipeFilter()
            {
                SnipeIV = session.LogicSettings.MinIVForAutoSnipe
            };

            var pokemonId = (PokemonId)item.PokemonId;

            if (session.LogicSettings.PokemonSnipeFilters.ContainsKey(pokemonId))
            {
                filter = session.LogicSettings.PokemonSnipeFilters[pokemonId];
            }
            //hack, this case we can't determite move :)

            if (filter.SnipeIV < item.Iv && item.Move1 == PokemonMove.Absorb && item.Move2 == PokemonMove.Absorb)
            {
                autoSnipePokemons.Add(item);
                return;
            }
            //ugly but readable
            if ((string.IsNullOrEmpty(filter.Operator) || filter.Operator == Operator.or.ToString()) &&
                (filter.SnipeIV < item.Iv ||
                 (filter.Moves != null &&
                  filter.Moves.Count > 0 &&
                  filter.Moves.Any(x => x[0] == item.Move1 && x[1] == item.Move2))
                ))

            {
                autoSnipePokemons.Add(item);
            }

            if (filter.Operator == Operator.and.ToString() &&
                (filter.SnipeIV < item.Iv &&
                 (filter.Moves != null &&
                  filter.Moves.Count > 0 &&
                  filter.Moves.Any(x => x[0] == item.Move1 && x[1] == item.Move2))
                ))
            {
                autoSnipePokemons.Add(item);
            }
        }
コード例 #4
0
        public static bool AddSnipeItem(ISession session, MSniperInfo2 item, bool byPassValidation = false)
        {
            if (isBlocking)
            {
                return(false);
            }
            //this pokemon has been recorded as expires
            if (item.EncounterId > 0 && expiredCache.Get(item.EncounterId.ToString()) != null)
            {
                return(false);
            }

            //fake & annoy data
            if (Math.Abs(item.Latitude) > 90 || Math.Abs(item.Longitude) > 180 || item.Iv > 100)
            {
                return(false);
            }

            lock (locker)
            {
                Func <MSniperInfo2, bool> checkExisting = (MSniperInfo2 x) =>
                {
                    return((x.EncounterId > 0 && x.EncounterId == item.EncounterId) ||
                           (x.EncounterId == 0 && Math.Round(x.Latitude, 6) == Math.Round(item.Latitude, 6) &&
                            Math.Round(x.Longitude, 6) == Math.Round(item.Longitude, 6) &&
                            x.PokemonId == item.PokemonId));
                };

                //remove existing item that
                autoSnipePokemons.RemoveAll(x => checkExisting(x));
                pokedexSnipePokemons.RemoveAll(x => checkExisting(x));
                manualSnipePokemons.RemoveAll(x => checkExisting(x));
            }

            if (!byPassValidation &&
                session.LogicSettings.AutoSnipeMaxDistance > 0 &&
                LocationUtils.CalculateDistanceInMeters(session.Settings.DefaultLatitude, session.Settings.DefaultLongitude, item.Latitude, item.Longitude) > session.LogicSettings.AutoSnipeMaxDistance * 1000)
            {
                return(false);
            }

            lock (locker)
            {
                item.AddedTime = DateTime.Now;
                //just keep pokemon in last 2 min
                autoSnipePokemons.RemoveAll(x => x.AddedTime.AddSeconds(SNIPE_SAFE_TIME) < DateTime.Now);
                pokedexSnipePokemons.RemoveAll(x => x.AddedTime.AddMinutes(SNIPE_SAFE_TIME) < DateTime.Now);
            }
            if (OutOffBallBlock > DateTime.Now ||
                autoSnipePokemons.Exists(x => x.EncounterId == item.EncounterId && item.EncounterId > 0) ||
                (item.EncounterId > 0 && session.Cache[item.EncounterId.ToString()] != null) ||
                (session.LogicSettings.SnipeIgnoreUnknownIv && item.Iv == 0 && !byPassValidation))
            {
                return(false);
            }

            item.Iv = Math.Round(item.Iv, 2);
            if (session.LogicSettings.SnipePokemonNotInPokedex)
            {
                //sometime the API return pokedex not correct, we need cahe this list, need lean everyetime peopellogi
                var pokedex = session.Inventory.GetPokeDexItems().Select(x => x.InventoryItemData?.PokedexEntry?.PokemonId).Where(x => x != null).ToList();
                var update  = pokedex.Where(x => !pokedexList.Contains(x.Value)).ToList();

                pokedexList.AddRange(update.Select(x => x.Value));

                //Logger.Debug($"Pokedex Entry : {pokedexList.Count()}");

                if (pokedexList.Count > 0 &&
                    !pokedexList.Exists(x => x == (PokemonId)item.PokemonId) &&
                    !pokedexSnipePokemons.Exists(p => p.PokemonId == item.PokemonId) &&
                    (!session.LogicSettings.AutosnipeVerifiedOnly ||
                     (session.LogicSettings.AutosnipeVerifiedOnly && item.IsVerified())))
                {
                    session.EventDispatcher.Send(new WarnEvent()
                    {
                        Message = session.Translation.GetTranslation(TranslationString.SnipePokemonNotInPokedex,
                                                                     session.Translation.GetPokemonTranslation((PokemonId)item.PokemonId))
                    });
                    item.Priority = 0;
                    pokedexSnipePokemons.Add(item); //Add as hight priority snipe entry
                    return(true);
                }
            }
            var         pokemonId = (PokemonId)item.PokemonId;
            SnipeFilter filter    = session.LogicSettings.PokemonSnipeFilters.GetFilter <SnipeFilter>(pokemonId);

            lock (locker)
            {
                if (byPassValidation)
                {
                    item.Priority = -1;
                    manualSnipePokemons.Add(item);

                    Logger.Write($"(MANUAL SNIPER) Pokemon added |  {(PokemonId)item.PokemonId} [{item.Latitude},{item.Longitude}] IV {item.Iv}%");
                    return(true);
                }

                item.Priority = filter.Priority;

                if (filter.VerifiedOnly && item.EncounterId == 0)
                {
                    return(false);
                }

                //check candy
                int candy = session.Inventory.GetCandyCount(pokemonId);
                if (candy < filter.AutoSnipeCandy)
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }

                if (filter.IsMatch(item.Iv, item.Move1, item.Move2, item.Level, item.EncounterId > 0))
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }
            }
            return(false);
        }
コード例 #5
0
        public static async Task <bool> AddSnipeItem(ISession session, MSniperInfo2 item, bool byPassValidation = false)
        {
            if (isBlocking)
            {
                return(false);
            }
            if (Math.Abs(item.Latitude) > 90 || Math.Abs(item.Longitude) > 180)
            {
                return(false);
            }

            if (!byPassValidation &&
                session.LogicSettings.AutoSnipeMaxDistance > 0 &&
                LocationUtils.CalculateDistanceInMeters(session.Settings.DefaultLatitude, session.Settings.DefaultLongitude, item.Latitude, item.Longitude) > session.LogicSettings.AutoSnipeMaxDistance * 1000)
            {
                return(false);
            }

            lock (locker)
            {
                item.AddedTime = DateTime.Now;
                //just keep pokemon in last 2 min
                autoSnipePokemons.RemoveAll(x => x.AddedTime.AddSeconds(SNIPE_SAFE_TIME) <
                                            DateTime
                                            .Now);          // || (x.ExpiredTime > 0 && x.ExpiredTime < DateTime.Now.ToUnixTime()));
                pokedexSnipePokemons.RemoveAll(x => x.AddedTime.AddMinutes(2) < DateTime.Now);
            }
            if (OutOffBallBlock > DateTime.Now ||
                autoSnipePokemons.Exists(x => x.EncounterId == item.EncounterId && item.EncounterId > 0) ||
                (item.EncounterId > 0 && session.Cache[item.EncounterId.ToString()] != null) ||
                (session.LogicSettings.SnipeIgnoreUnknownIv && item.Iv == 0 && !byPassValidation))
            {
                return(false);
            }

            item.Iv = Math.Round(item.Iv, 2);
            if (session.LogicSettings.SnipePokemonNotInPokedex)
            {
                var pokedex = await session.Inventory.GetPokeDexItems();

                if (!pokedex.Exists(x => x.InventoryItemData?.PokedexEntry?.PokemonId == (PokemonId)item.PokemonId) &&
                    !pokedexSnipePokemons.Exists(p => p.PokemonId == item.PokemonId) &&
                    (!session.LogicSettings.AutosnipeVerifiedOnly ||
                     (session.LogicSettings.AutosnipeVerifiedOnly &&
                      (item.EncounterId > 0 || (item.Move1 != PokemonMove.MoveUnset &&
                                                item.Move2 != PokemonMove.MoveUnset)))))
                {
                    session.EventDispatcher.Send(new WarnEvent()
                    {
                        Message = session.Translation.GetTranslation(TranslationString.SnipePokemonNotInPokedex,
                                                                     session.Translation.GetPokemonTranslation((PokemonId)item.PokemonId))
                    });
                    item.Priority = 0;
                    pokedexSnipePokemons.Add(item); //Add as hight priority snipe entry
                    return(true);
                }
            }
            SnipeFilter filter = new SnipeFilter()
            {
                SnipeIV         = session.LogicSettings.MinIVForAutoSnipe,
                VerifiedOnly    = session.LogicSettings.AutosnipeVerifiedOnly,
                AustoSnipeCandy = session.LogicSettings.DefaultAutoSnipeCandy
            };

            var pokemonId = (PokemonId)item.PokemonId;

            if (session.LogicSettings.PokemonSnipeFilters.ContainsKey(pokemonId))
            {
                filter = session.LogicSettings.PokemonSnipeFilters[pokemonId];
            }

            var candy = session.Inventory.GetCandy(pokemonId);

            lock (locker)
            {
                if (byPassValidation)
                {
                    item.Priority = -1;
                    manualSnipePokemons.Add(item);

                    Logger.Write($"(MANUAL SNIPER) Pokemon added |  {(PokemonId)item.PokemonId} [{item.Latitude},{item.Longitude}] IV {item.Iv}%");
                    return(true);
                }

                item.Priority = filter.Priority;

                if (filter.VerifiedOnly && item.EncounterId == 0)
                {
                    return(false);
                }
                //check candy

                if (candy < filter.AustoSnipeCandy)
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }

                //if not verified and undetermine move.
                if (filter.SnipeIV <= item.Iv &&
                    item.Move1 == PokemonMove.MoveUnset && item.Move2 == PokemonMove.MoveUnset &&
                    (filter.Moves == null || filter.Moves.Count == 0))
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }
                //ugly but readable
                if ((string.IsNullOrEmpty(filter.Operator) || filter.Operator == Operator.or.ToString()) &&
                    (filter.SnipeIV <= item.Iv ||
                     (filter.Moves != null &&
                      filter.Moves.Count > 0 &&
                      filter.Moves.Any(x => x[0] == item.Move1 && x[1] == item.Move2))
                    ))

                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }

                if (filter.Operator == Operator.and.ToString() &&
                    (filter.SnipeIV <= item.Iv &&
                     (filter.Moves != null &&
                      filter.Moves.Count > 0 &&
                      filter.Moves.Any(x => x[0] == item.Move1 && x[1] == item.Move2))
                    ))
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }
            }
            return(false);
        }
コード例 #6
0
        public static bool AddSnipeItem(ISession session, MSniperInfo2 item, bool byPassValidation = false)
        {
            if (isBlocking)
            {
                return(false);
            }
            //this pokemon has been recorded as expires
            if (item.EncounterId > 0 && expiredCache.Get(item.EncounterId.ToString()) != null)
            {
                return(false);
            }

            //fake & annoy data
            if (Math.Abs(item.Latitude) > 90 || Math.Abs(item.Longitude) > 180)
            {
                return(false);
            }

            lock (locker)
            {
                Func <MSniperInfo2, bool> checkExisting = (MSniperInfo2 x) => {
                    return((x.EncounterId > 0 && x.EncounterId == item.EncounterId) ||
                           (x.EncounterId == 0 && Math.Round(x.Latitude, 6) == Math.Round(item.Latitude, 6) &&
                            Math.Round(x.Longitude, 6) == Math.Round(item.Longitude, 6) &&
                            x.PokemonId == item.PokemonId));
                };

                //remove existing item that
                autoSnipePokemons.RemoveAll(x => checkExisting(x));
                pokedexSnipePokemons.RemoveAll(x => checkExisting(x));
                manualSnipePokemons.RemoveAll(x => checkExisting(x));
            }

            if (!byPassValidation &&
                session.LogicSettings.AutoSnipeMaxDistance > 0 &&
                LocationUtils.CalculateDistanceInMeters(session.Settings.DefaultLatitude, session.Settings.DefaultLongitude, item.Latitude, item.Longitude) > session.LogicSettings.AutoSnipeMaxDistance * 1000)
            {
                return(false);
            }

            lock (locker)
            {
                item.AddedTime = DateTime.Now;
                //just keep pokemon in last 2 min
                autoSnipePokemons.RemoveAll(x => x.AddedTime.AddSeconds(SNIPE_SAFE_TIME) < DateTime.Now);
                pokedexSnipePokemons.RemoveAll(x => x.AddedTime.AddMinutes(SNIPE_SAFE_TIME) < DateTime.Now);
            }
            if (OutOffBallBlock > DateTime.Now ||
                autoSnipePokemons.Exists(x => x.EncounterId == item.EncounterId && item.EncounterId > 0) ||
                (item.EncounterId > 0 && session.Cache[item.EncounterId.ToString()] != null) ||
                (session.LogicSettings.SnipeIgnoreUnknownIv && item.Iv == 0 && !byPassValidation))
            {
                return(false);
            }

            item.Iv = Math.Round(item.Iv, 2);
            if (session.LogicSettings.SnipePokemonNotInPokedex)
            {
                var pokedex = session.Inventory.GetPokeDexItems();

                if (!pokedex.Exists(x => x.InventoryItemData?.PokedexEntry?.PokemonId == (PokemonId)item.PokemonId) &&
                    !pokedexSnipePokemons.Exists(p => p.PokemonId == item.PokemonId) &&
                    (!session.LogicSettings.AutosnipeVerifiedOnly ||
                     (session.LogicSettings.AutosnipeVerifiedOnly &&
                      (item.EncounterId > 0 || (item.Move1 != PokemonMove.MoveUnset &&
                                                item.Move2 != PokemonMove.MoveUnset)))))
                {
                    session.EventDispatcher.Send(new WarnEvent()
                    {
                        Message = session.Translation.GetTranslation(TranslationString.SnipePokemonNotInPokedex,
                                                                     session.Translation.GetPokemonTranslation((PokemonId)item.PokemonId))
                    });
                    item.Priority = 0;
                    pokedexSnipePokemons.Add(item); //Add as hight priority snipe entry
                    return(true);
                }
            }
            SnipeFilter filter = new SnipeFilter()
            {
                SnipeIV        = session.LogicSettings.MinIVForAutoSnipe,
                VerifiedOnly   = session.LogicSettings.AutosnipeVerifiedOnly,
                AutoSnipeCandy = session.LogicSettings.DefaultAutoSnipeCandy,
                Level          = 0
            };

            var pokemonId = (PokemonId)item.PokemonId;

            if (session.LogicSettings.PokemonSnipeFilters.ContainsKey(pokemonId))
            {
                filter = session.LogicSettings.PokemonSnipeFilters[pokemonId];
            }

            lock (locker)
            {
                if (byPassValidation)
                {
                    item.Priority = -1;
                    manualSnipePokemons.Add(item);

                    Logger.Write($"(MANUAL SNIPER) Pokemon added |  {(PokemonId)item.PokemonId} [{item.Latitude},{item.Longitude}] IV {item.Iv}%");
                    return(true);
                }

                item.Priority = filter.Priority;

                if (filter.VerifiedOnly && item.EncounterId == 0)
                {
                    return(false);
                }

                //check candy
                int candy = session.Inventory.GetCandyCount(pokemonId);
                if (candy < filter.AutoSnipeCandy)
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }

                if (filter.IsMatch(item.Iv, item.Move1, item.Move2, item.Level, item.EncounterId > 0))
                {
                    autoSnipePokemons.Add(item);
                    return(true);
                }
            }
            return(false);
        }