Пример #1
0
        private double CalculateCpMultiplier(PokemonData poke)
        {
            PokemonSettings pokemonSettings = GetPokemonSetting(poke.PokemonId).Data;

            return((pokemonSettings.Stats.BaseAttack + poke.IndividualAttack) *
                   Math.Sqrt(pokemonSettings.Stats.BaseDefense + poke.IndividualDefense) *
                   Math.Sqrt(pokemonSettings.Stats.BaseStamina + poke.IndividualStamina));
        }
Пример #2
0
        public IEnumerable <PokemonData> GetPokemonToEvolve(Dictionary <PokemonId, EvolveFilter> filters = null)
        {
            var buddy = GetPlayerData().Result.PlayerData.BuddyPokemon?.Id;

            IEnumerable <PokemonData> myPokemons = GetPokemons().OrderByDescending(p => p.Cp);

            List <PokemonData> possibleEvolvePokemons = new List <PokemonData>();

            foreach (var pokemon in myPokemons)
            {
                if (!filters.ContainsKey(pokemon.PokemonId))
                {
                    continue;
                }
                var filter = filters[pokemon.PokemonId];

                if (CanEvolvePokemon(pokemon, filter, true).Result)
                {
                    possibleEvolvePokemons.Add(pokemon);
                }
            }

            var pokemonToEvolve = new List <PokemonData>();

            // Group pokemon by their PokemonId
            var groupedPokemons = possibleEvolvePokemons.GroupBy(p => p.PokemonId);

            foreach (var g in groupedPokemons)
            {
                PokemonId pokemonId = g.Key;

                var orderedGroup = g.OrderByDescending(p => p.Cp);

                //if (!filters.ContainsKey(pokemon.PokemonId)) continue;
                var filter = filters[pokemonId];

                int             candiesLeft = GetCandyCount(pokemonId);
                PokemonSettings settings    = GetPokemonSettings().Result.FirstOrDefault(x => x.PokemonId == pokemonId);
                int             pokemonLeft = orderedGroup.Count();

                int candyNeed = GetCandyToEvolve(settings, filter);

                if (candyNeed == -1)
                {
                    continue; // If we were unable to determine which branch to use, then skip this pokemon.
                }
                // Calculate the number of evolutions possible (taking into account +1 candy for evolve and +1 candy for transfer)
                EvolutionCalculations evolutionInfo = CalculatePokemonEvolution(pokemonLeft, candiesLeft, candyNeed, 1);

                if (evolutionInfo.Evolves > 0)
                {
                    // Add only the number of pokemon we can evolve.
                    pokemonToEvolve.AddRange(orderedGroup.Take(evolutionInfo.Evolves).ToList());
                }
            }

            return(pokemonToEvolve);
        }
Пример #3
0
        public async Task <IEnumerable <PokemonData> > GetPokemonToEvolve(Dictionary <PokemonId, EvolveFilter> filters = null)
        {
            var buddy = (await GetPlayerData().ConfigureAwait(false)).PlayerData.BuddyPokemon?.Id;

            IEnumerable <PokemonData> myPokemons = (await GetPokemons().ConfigureAwait(false)).OrderByDescending(p => p.Cp);

            List <PokemonData> possibleEvolvePokemons = new List <PokemonData>();

            foreach (var pokemon in myPokemons)
            {
                filters.TryGetValue(pokemon.PokemonId, out var filter);
                if (await CanEvolvePokemon(pokemon, filter, true).ConfigureAwait(false))
                {
                    possibleEvolvePokemons.Add(pokemon);
                }
            }

            var pokemonToEvolve = new List <PokemonData>();

            // Group pokemon by their PokemonId
            var groupedPokemons = possibleEvolvePokemons.GroupBy(p => p.PokemonId);

            foreach (var g in groupedPokemons)
            {
                PokemonId pokemonId = g.Key;
                filters.TryGetValue(pokemonId, out var filter);

                int candiesAvailable = await GetCandyCount(pokemonId).ConfigureAwait(false);

                if (filter != null && ownerSession.LogicSettings.EvolvePreserveMinCandiesFromFilter)
                {
                    // Do not use candies below filter defined MinCandiesBeforeEvolve
                    candiesAvailable -= filter.MinCandiesBeforeEvolve;
                }

                PokemonSettings settings  = (await GetPokemonSettings().ConfigureAwait(false)).FirstOrDefault(x => x.PokemonId == pokemonId);
                int             candyNeed = GetCandyToEvolve(settings, filter);
                if (candyNeed == -1)
                {
                    continue; // If we were unable to determine which branch to use, then skip this pokemon.
                }
                var orderedGroup = g.OrderByDescending(p => p.Cp);
                int pokemonLeft  = orderedGroup.Count();
                // Calculate the number of evolutions possible (taking into account +1 candy for evolve and +1 candy for transfer)
                EvolutionCalculations evolutionInfo = CalculatePokemonEvolution(pokemonLeft, candiesAvailable, candyNeed, 1);

                if (evolutionInfo.Evolves > 0)
                {
                    // Add only the number of pokemon we can evolve.
                    pokemonToEvolve.AddRange(orderedGroup.Take(evolutionInfo.Evolves).ToList());
                }
            }
            return(pokemonToEvolve);
        }
Пример #4
0
        private PokemonModel FromId(PokemonId id)
        {
            PokemonModel    temp    = new PokemonModel();
            PokemonSettings pokeman = GameClient.GetExtraDataForPokemon(id);

            temp.BuildFromSettings(pokeman);

            PokedexEntry pokedexEntry = GameClient.PokedexInventory.FirstOrDefault(x => x.PokemonId == id);

            temp.BuildFromPokedexEntry(pokedexEntry);

            return(temp);
        }
Пример #5
0
        public IEnumerable <PokemonData> GetPokemonToEvolve(IEnumerable <PokemonId> filter = null)
        {
            IEnumerable <PokemonData> myPokemon = GetPokemons().OrderByDescending(p => p.Cp);

            IEnumerable <PokemonId> pokemonIds = filter as PokemonId[] ?? filter.ToArray();

            if (pokemonIds.Any())
            {
                myPokemon =
                    myPokemon.Where(
                        p => (pokemonIds.Contains(p.PokemonId)) ||
                        (_logicSettings.EvolveAllPokemonAboveIv &&
                         (PokemonInfo.CalculatePokemonPerfection(p) >= _logicSettings.EvolveAboveIvValue)));
            }
            else if (_logicSettings.EvolveAllPokemonAboveIv)
            {
                myPokemon =
                    myPokemon.Where(
                        p => PokemonInfo.CalculatePokemonPerfection(p) >= _logicSettings.EvolveAboveIvValue);
            }

            // Only get evolvable pokemon (not in gym, enough candy, etc.)
            var evolvablePokemon = myPokemon.Where(p => CanEvolvePokemon(p).Result).ToList();

            var pokemonToEvolve = new List <PokemonData>();

            // Group pokemon by their PokemonId
            var groupedPokemons = evolvablePokemon.GroupBy(p => p.PokemonId);

            foreach (var group in groupedPokemons)
            {
                PokemonId       pokemonId   = group.Key;
                int             candiesLeft = GetCandyCount(pokemonId);
                PokemonSettings settings    = GetPokemonSettings().Result.FirstOrDefault(x => x.PokemonId == pokemonId);
                int             pokemonLeft = group.Count();

                // Calculate the number of evolutions possible (taking into account +1 candy for evolve and +1 candy for transfer)
                EvolutionCalculations evolutionInfo = CalculatePokemonEvolution(pokemonLeft, candiesLeft, settings.CandyToEvolve, 1);

                if (evolutionInfo.Evolves > 0)
                {
                    // Add only the number of pokemon we can evolve.
                    pokemonToEvolve.AddRange(group.Take(evolutionInfo.Evolves).ToList());
                }
            }

            return(pokemonToEvolve);
        }
Пример #6
0
        /**
         * Get the absolute maximum CP for pokemons with their PokemonId.
         *
         * @param id The {@link PokemonIdOuterClass.PokemonId} of the Pokemon to get CP for.
         * @return The absolute maximum CP
         * @throws NoSuchItemException If the PokemonId value cannot be found in the {@link PokemonMeta}.
         */
        public static int GetAbsoluteMaxCp(PokemonId id, int level = 40)
        {
            PokemonSettings settings = PokemonMeta.GetPokemonSettings(id);

            if (settings == null)
            {
                throw new Exception("Cannot find meta data for " + id);
            }
            StatsAttributes stats = settings.Stats;

            int attack  = 15 + stats.BaseAttack;
            int defense = 15 + stats.BaseDefense;
            int stamina = 15 + stats.BaseStamina;

            return(GetMaxCpForPlayer(attack, defense, stamina, level));
        }
Пример #7
0
        public IEnumerable <PokemonData> GetPokemonToEvolve(IEnumerable <PokemonId> filter = null)
        {
            //Don't evolve pokemon in gyms
            var myPokemons = Pokemon.Where(p => p.DeployedFortId == string.Empty).OrderByDescending(p => p.Cp);
            var pokemons   = filter != null?myPokemons.Where(p => filter.Contains(p.PokemonId)).ToList() : myPokemons.ToList();

            var pokemonToEvolve = new List <PokemonData>();

            foreach (var pokemon in pokemons)
            {
                var settings    = PokemonSettings.Where(t => t != null).SingleOrDefault(x => x.PokemonId == pokemon.PokemonId);
                var familyCandy = PokemonFamilies.Where(t => t != null).SingleOrDefault(x => settings?.FamilyId == x.FamilyId);

                //Don't evolve if we can't evolve it
                if (settings == null || familyCandy == null || settings.EvolutionIds.Count == 0)
                {
                    continue;
                }

                var pokemonCandyNeededAlready =
                    pokemonToEvolve.Count(
                        p => PokemonSettings.Where(t => t != null).Single(x => x.PokemonId == p.PokemonId).FamilyId == settings.FamilyId) *
                    settings.CandyToEvolve;

                if (_logicSettings.EvolveAllPokemonAboveIv)
                {
                    if (PokemonInfo.CalculatePokemonPerfection(pokemon) >= _logicSettings.EvolveAboveIvValue &&
                        familyCandy.Candy_ - pokemonCandyNeededAlready > settings.CandyToEvolve)
                    {
                        pokemonToEvolve.Add(pokemon);
                    }
                }
                else
                {
                    if (familyCandy.Candy_ - pokemonCandyNeededAlready > settings.CandyToEvolve)
                    {
                        pokemonToEvolve.Add(pokemon);
                    }
                }
            }

            return(pokemonToEvolve);
        }
Пример #8
0
 private void BuildFromSettings(PokemonSettings settings)
 {
     Id              = settings.PokemonId;
     ModelScale      = settings.ModelScale;
     Type            = settings.Type;
     Type2           = settings.Type2;
     Camera          = settings.Camera;
     CandyToEvolve   = settings.CandyToEvolve;
     HeightStdDev    = settings.HeightStdDev;
     KmBuddyDistance = settings.KmBuddyDistance;
     ParentPokemonId = settings.ParentPokemonId;
     PokedexHeightM  = settings.PokedexHeightM;
     PokedexWeightKg = settings.PokedexWeightKg;
     EvolutionIds    = settings.EvolutionIds.ToList();
     FamilyId        = settings.FamilyId;
     WeightStdDev    = settings.WeightStdDev;
     Encounter       = settings.Encounter;
     Rarity          = settings.Rarity;
 }
Пример #9
0
        private void PopulateEvolutions()
        {
            PokemonEvolutions.Clear();
            EeveeEvolutions.Clear();
            IsEevee = false;
            PokemonId       InitPokemon = SelectedPokedexEntry.Key;
            PokemonSettings CurrPokemon = PokemonDetails;

            switch (InitPokemon)
            {
            case PokemonId.Eevee:
            case PokemonId.Jolteon:
            case PokemonId.Flareon:
            case PokemonId.Vaporeon:
                InitPokemon = PokemonId.Eevee;
                CurrPokemon = GameClient.GetExtraDataForPokemon(InitPokemon);
                foreach (var ev in CurrPokemon.EvolutionIds)
                {
                    EeveeEvolutions.Add(new KeyValuePair <PokemonId, PokedexEntry>(ev, GetPokedexEntry(ev)));
                }
                PokemonEvolutions.Add(new KeyValuePair <PokemonId, PokedexEntry>(PokemonId.Eevee, GetPokedexEntry(PokemonId.Eevee)));
                IsEevee = true;
                break;

            default:
                PokemonEvolutions.Add(new KeyValuePair <PokemonId, PokedexEntry>(InitPokemon, GetPokedexEntry(InitPokemon)));
                while (CurrPokemon.ParentPokemonId != PokemonId.Missingno)
                {
                    PokemonEvolutions.Insert(0, new KeyValuePair <PokemonId, PokedexEntry>(CurrPokemon.ParentPokemonId, GetPokedexEntry(CurrPokemon.ParentPokemonId)));
                    CurrPokemon = GameClient.GetExtraDataForPokemon(CurrPokemon.ParentPokemonId);
                }
                CurrPokemon = PokemonDetails;
                while (CurrPokemon.EvolutionIds.Count > 0)
                {
                    foreach (var ev in CurrPokemon.EvolutionIds)     //for Eevee
                    {
                        PokemonEvolutions.Add(new KeyValuePair <PokemonId, PokedexEntry>(ev, GetPokedexEntry(ev)));
                    }
                    CurrPokemon = GameClient.GetExtraDataForPokemon(CurrPokemon.EvolutionIds.ElementAt(0));
                }
                break;
            }
        }
Пример #10
0
        public EvoleBranch(PokemonData pokemon, PokemonSettings setting)
        {
            PokemonData = pokemon;
            Setting     = setting;

            EvolutionBranchs = new List <EvolutionToPokemon>();

            //TODO - implement the candy count for enable evolution
            foreach (var item in setting.EvolutionBranch)
            {
                EvolutionBranchs.Add(new EvolutionToPokemon()
                {
                    CandyNeed       = item.CandyCost,
                    ItemNeed        = item.EvolutionItemRequirement,
                    Pokemon         = item.Evolution,
                    AllowEvolve     = Allowevolve,
                    OriginPokemonId = pokemon.Id
                });
            }
        }
Пример #11
0
        public int GetCandyToEvolve(PokemonSettings settings, EvolveFilter appliedFilter = null)
        {
            EvolutionBranch branch;
            PokemonId       evolveTo = PokemonId.Missingno;

            if (appliedFilter != null && !string.IsNullOrEmpty(appliedFilter.EvolveTo) && Enum.TryParse <PokemonId>(appliedFilter.EvolveTo, true, out evolveTo))
            {
                branch = settings.EvolutionBranch.FirstOrDefault(x => x.Evolution == evolveTo);
            }
            else
            {
                branch = settings.EvolutionBranch.FirstOrDefault(x => x.EvolutionItemRequirement == ItemId.ItemUnknown);
            }

            if (branch == null)
            {
                return(-1);
            }

            return(branch.CandyCost);
        }
Пример #12
0
        public static void Update(DownloadItemTemplatesResponse templatesResponse)
        {
            RepeatedField <ItemTemplate> templates = templatesResponse.ItemTemplates;

            PokemonMeta.templates.Clear();
            PokemonMeta.templates.AddRange(templates);
            foreach (ItemTemplate template in templates)
            {
                if (template.PokemonSettings != null)
                {
                    PokemonSettings pokemonSettings = template.PokemonSettings;
                    PokemonSettings[pokemonSettings.PokemonId] = pokemonSettings;
                }
                else if (template.MoveSettings != null)
                {
                    MoveSettings moveSettings = template.MoveSettings;
                    MoveSettings[moveSettings.MovementId] = moveSettings;
                }
                else if (template.BadgeSettings != null)
                {
                    BadgeSettings badgeSettings = template.BadgeSettings;
                    BadgeSettings[badgeSettings.BadgeType] = badgeSettings;
                }
                else if (template.ItemSettings != null)
                {
                    ItemSettings itemSettings = template.ItemSettings;
                    ItemSettings[itemSettings.ItemId] = itemSettings;
                }
                else if (template.BattleSettings != null)
                {
                    BattleSettings = template.BattleSettings;
                }
                else if (template.PokemonUpgrades != null)
                {
                    UpgradeSettings = template.PokemonUpgrades;
                }
            }
            //Evolutions.initialize(templates);
            PokemonCpUtils.Initialize(templates);
        }
Пример #13
0
        public PokemonDataViewModel(PokemonData pokemon, PokemonSettings setting, Candy candy)
        {
            this.PowerupText  = "Upgrade";
            this.AllowPowerup = true;

            this.PokemonData = pokemon;
            this.Id          = pokemon.Id;
            this.PokemonName = pokemon.PokemonId;
            this.HP          = pokemon.Stamina;
            this.MaxHP       = pokemon.StaminaMax;
            this.IV          = PokemonInfo.CalculatePokemonPerfection(pokemon);
            this.CP          = PokemonInfo.CalculateCp(pokemon);
            this.Level       = (int)PokemonInfo.GetLevel(pokemon);
            this.Favorited   = pokemon.Favorite > 0;
            this.IsSelected  = false;
            this.Move1       = pokemon.Move1.ToString().Replace("Fast", "");
            this.Move2       = pokemon.Move2.ToString();

            this.PokemonSettings = setting;
            this.AllowEvolve     = candy.Candy_ >= setting.CandyToEvolve && setting.EvolutionIds.Count > 0;
            this.Candy           = candy.Candy_;
        }
Пример #14
0
        private static string GetPokemonName(PokemonDataWrapper pokemon)
        {
            string PokemonName = String.Empty;

            try
            {
                PokemonName = Resources.Pokemon.GetString(pokemon.PokemonId.ToString());
            }
            catch { }

            if (PokemonName == String.Empty)
            {
                try
                {
                    PokemonSettings currentPokemon = GameClient.PokemonSettings.Where(x => x.PokemonId == pokemon.PokemonId).FirstOrDefault();
                    PokemonName = currentPokemon.PokemonId.ToString();
                }
                catch { }
            }

            return(PokemonName);
        }
Пример #15
0
        private List <PokemonData> GetPokemonByPossibleEvolve(IGrouping <PokemonId, PokemonData> pokemon, int limit)
        {
            PokemonSettings setting = null;

            if (!PokeSettings.TryGetValue(pokemon.Key, out setting))
            {
                LogCaller(new LoggerEventArgs(String.Format("Failed to find settings for pokemon {0}", pokemon.Key), LoggerTypes.Info));

                return(new List <PokemonData>());
            }

            int pokemonCandy = 0;

            if (PokemonCandy.Any(x => x.FamilyId == setting.FamilyId))
            {
                pokemonCandy = PokemonCandy.Where(x => x.FamilyId == setting.FamilyId).FirstOrDefault().Candy_;
                //int pokemonCandy = PokemonCandy.SingleOrDefault(x => x.FamilyId == setting.FamilyId).Candy_;
            }

            int candyToEvolve = setting.EvolutionBranch.Select(x => x.CandyCost).FirstOrDefault();
            int totalPokemon  = pokemon.Count();

            if (candyToEvolve == 0)
            {
                //Not thinks good
                return(pokemon.OrderByDescending(x => x.Cp).ToList());
                //return new List<PokemonData>();
            }

            int maxPokemon = pokemonCandy / candyToEvolve;

            if (maxPokemon > limit)
            {
                maxPokemon = limit;
            }

            return(pokemon.OrderByDescending(x => x.Cp).Skip(maxPokemon).ToList());
        }
Пример #16
0
        public PokemonEvoleTo(ISession session, PokemonData pokemon)
        {
            Session     = session;
            PokemonData = pokemon;
            var pkmSettings = session.Inventory.GetPokemonSettings().Result;

            setting = pkmSettings.FirstOrDefault(x => x.PokemonId == pokemon.PokemonId);

            EvolutionBranchs = new List <EvolutionToPokemon>();

            //TODO - implement the candy count for enable evolution
            foreach (var item in setting.EvolutionBranch)
            {
                EvolutionBranchs.Add(new EvolutionToPokemon()
                {
                    CandyNeed       = item.CandyCost,
                    ItemNeed        = item.EvolutionItemRequirement,
                    Pokemon         = item.Evolution,
                    AllowEvolve     = session.Inventory.CanEvolvePokemon(pokemon).Result,
                    OriginPokemonId = pokemon.Id
                });
            }
        }
Пример #17
0
        public PokemonModel(PokemonId id)
        {
            PokemonSettings pokeman = GameClient.GetExtraDataForPokemon(id);

            BuildFromSettings(pokeman);

            PokedexEntry pokedexEntry = GameClient.PokedexInventory.FirstOrDefault(x => x.PokemonId == id);

            BuildFromPokedexEntry(pokedexEntry);

            PokemonModel pokemonModel = new PokemonModel(pokeman, pokedexEntry);

            var CurrPokemon = pokemonModel;

            Evolutions.Add(pokemonModel);
            while (CurrPokemon.ParentPokemonId != PokemonId.Missingno)
            {
                var insertme = FromId(CurrPokemon.ParentPokemonId);
                Evolutions.Insert(0, insertme);
                CurrPokemon = FromId(CurrPokemon.ParentPokemonId);
            }
            CurrPokemon = pokemonModel;
            while (CurrPokemon.EvolutionIds.Count > 0)
            {
                foreach (PokemonId ev in CurrPokemon.EvolutionIds)
                {
                    var addme = FromId(ev);
                    Evolutions.Add(addme);
                }
                CurrPokemon = new PokemonModel(CurrPokemon.EvolutionIds.ElementAt(0));
            }

            if (TimesCaptured == 0 && Id == PokemonId.Poliwag)
            {
                Debug.WriteLine(Name);
            }
        }
Пример #18
0
        private bool IsEvolveBySpecificFilter(PokemonData pokemon, PokemonSettings settings, int familyCandy, EvolveFilter appliedFilter)
        {
            if (appliedFilter == null || !ownerSession.LogicSettings.EvolvePokemonsThatMatchFilter)
            {
                return(false);
            }

            if (!appliedFilter.Operator.BoolFunc(
                    appliedFilter.MinIV <= pokemon.Perfection(),
                    appliedFilter.MinLV <= pokemon.Level(),
                    appliedFilter.MinCP <= pokemon.CP(),
                    (appliedFilter.Moves == null ||
                     appliedFilter.Moves.Count == 0 ||
                     appliedFilter.Moves.Any(x => x[0] == pokemon.Move1 && x[1] == pokemon.Move2)
                    )
                    ))
            {
                return(false);
            }

            int minCandiesBeforeEvolve = appliedFilter.MinCandiesBeforeEvolve;

            if (minCandiesBeforeEvolve > 0)
            {
                if (ownerSession.LogicSettings.EvolvePreserveMinCandiesFromFilter)
                {
                    minCandiesBeforeEvolve += GetCandyToEvolve(settings, appliedFilter);
                }
                if (familyCandy < minCandiesBeforeEvolve)
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #19
0
        public MethodResult <PokemonSettings> GetPokemonSetting(PokemonId pokemon)
        {
            if (PokeSettings == null)
            {
                return(new MethodResult <PokemonSettings>
                {
                    Message = "Settings haven't been grabbed yet"
                });
            }

            if (pokemon == PokemonId.Missingno)
            {
                return(new MethodResult <PokemonSettings>
                {
                    Message = "No settings on Missingno"
                });
            }

            PokemonSettings pokemonSettings = null;

            //Shouldn't happen
            if (!PokeSettings.TryGetValue(pokemon, out pokemonSettings))
            {
                return(new MethodResult <PokemonSettings>()
                {
                    Message = "Pokemon Id does not exist"
                });
            }

            return(new MethodResult <PokemonSettings>()
            {
                Data = pokemonSettings,
                Message = "Success",
                Success = true
            });
        }
        private static int GetCandyMinToKeep(IEnumerable <PokemonSettings> pokemonSettings, PokemonSettings currentPokemonSettings)
        {
            // total up required candy for evolution, for yourself and your ancestors to allow for others to be evolved before upgrading
            // always keeps a minimum amount in reserve, should never have 0 except for cases where a pokemon is in both first and final form (ie onix)
            var ancestor  = pokemonSettings.FirstOrDefault(q => q.PokemonId == currentPokemonSettings.ParentPokemonId);
            var ancestor2 = pokemonSettings.FirstOrDefault(q => q.PokemonId == ancestor?.ParentPokemonId);

            int candyToEvolveTotal = currentPokemonSettings.CandyToEvolve;

            if (ancestor != null)
            {
                candyToEvolveTotal += ancestor.CandyToEvolve;
            }

            if (ancestor2 != null)
            {
                candyToEvolveTotal += ancestor2.CandyToEvolve;
            }

            return(candyToEvolveTotal);
        }
Пример #21
0
 public PokemonModel(PokemonSettings settings, PokedexEntry pokedexEntry)
 {
     BuildFromSettings(settings);
     BuildFromPokedexEntry(pokedexEntry);
 }
Пример #22
0
 private int GetFactorAgainst(PokemonSettings pokemon)
 {
     int factor = GetFactorAgainst(pokemon.Type);
     factor += GetFactorAgainst(pokemon.Type2);
     return factor;
 }
Пример #23
0
 /// <summary>
 ///     Gets extra data for the current pokemon
 /// </summary>
 /// <param name="pokemonId"></param>
 /// <returns></returns>
 public static PokemonSettings GetExtraDataForPokemon(PokemonId pokemonId)
 {
     return(PokemonSettings.First(pokemon => pokemon.PokemonId == pokemonId));
 }
Пример #24
0
        private double CalculateMinCpMultiplier(PokemonData poke)
        {
            PokemonSettings pokemonSettings = GetPokemonSetting(poke.PokemonId).Data;

            return(pokemonSettings.Stats.BaseAttack * Math.Sqrt(pokemonSettings.Stats.BaseDefense) * Math.Sqrt(pokemonSettings.Stats.BaseStamina));
        }
Пример #25
0
        public DetailsForm(Manager manager)
        {
            InitializeComponent();

            _manager = manager;

            fastObjectListViewLogs.PrimarySortColumn = olvColumnDate;
            fastObjectListViewLogs.PrimarySortOrder  = SortOrder.Descending;
            fastObjectListViewLogs.ListFilter        = new TailFilter(500);

            fastObjectListViewPokedex.PrimarySortColumn = olvColumnPokedexFriendlyName;
            fastObjectListViewPokedex.PrimarySortOrder  = SortOrder.Ascending;

            fastObjectListViewLogs.BackColor = Color.FromArgb(43, 43, 43);

            fastObjectListViewPokedex.BackColor = Color.FromArgb(43, 43, 43);
            fastObjectListViewPokedex.ForeColor = Color.LightGray;

            fastObjectListViewPokemon.BackColor = Color.FromArgb(43, 43, 43);
            fastObjectListViewPokemon.ForeColor = Color.LightGray;

            fastObjectListViewInventory.BackColor = Color.FromArgb(43, 43, 43);
            fastObjectListViewInventory.ForeColor = Color.LightGray;

            fastObjectListViewEggs.BackColor = Color.FromArgb(43, 43, 43);
            fastObjectListViewEggs.ForeColor = Color.LightGray;

            fastObjectListViewCandy.BackColor = Color.FromArgb(43, 43, 43);
            fastObjectListViewCandy.ForeColor = Color.LightGray;

            #region Pokedex

            //ToString for sorting purposes
            olvColumnPokedexFriendlyName.AspectGetter = (entry) => (int)(entry as PokedexEntry).PokemonId;

            olvColumnPokedexId.AspectGetter = (entry) => (entry as PokedexEntry).PokemonId.ToString();

            olvColumnPokedexFriendlyName.AspectGetter = (entry) => (int)(entry as PokedexEntry).PokemonId;

            #endregion

            #region Pokemon


            olvColumnPokemonId.AspectGetter = (pokemon) => (int)(pokemon as PokemonData).PokemonId;

            olvColumnPokemonFavorite.AspectGetter = (pokemon) => (pokemon as PokemonData).Favorite == 1;

            olvColumnPokemonShiny.AspectGetter = (pokemon) => (pokemon as PokemonData).PokemonDisplay.Shiny;

            olvColumnPokemonGender.AspectGetter = (pokemon) => (pokemon as PokemonData).PokemonDisplay.Gender;

            olvColumnPokemonRarity.AspectGetter = delegate(object pokemon)
            {
                PokemonSettings pokemonSettings = _manager.GetPokemonSetting((pokemon as PokemonData).PokemonId).Data;
                return(pokemonSettings == null ? PokemonRarity.Normal : pokemonSettings.Rarity);
            };

            olvColumnCandyToEvolve.AspectGetter = delegate(object pokemon)
            {
                PokemonSettings pokemonSettings = _manager.GetPokemonSetting((pokemon as PokemonData).PokemonId).Data;
                return(pokemonSettings == null ? 0 : pokemonSettings.EvolutionBranch.Select(x => x.CandyCost).FirstOrDefault());
            };

            olvColumnPokemonCandy.AspectGetter = delegate(object pokemon)
            {
                if (!_manager.PokemonCandy.Any())
                {
                    return(0);
                }

                PokemonSettings settings = _manager.GetPokemonSetting((pokemon as PokemonData).PokemonId).Data;

                if (settings == null)
                {
                    return(0);
                }

                Candy family = _manager.PokemonCandy.FirstOrDefault(y => y.FamilyId == settings.FamilyId);

                return(family == null ? 0 : family.Candy_);
            };

            olvColumnPokemonName.AspectGetter = delegate(object pokemon)
            {
                return(String.IsNullOrEmpty((pokemon as PokemonData).Nickname) ? (pokemon as PokemonData).PokemonId.ToString() : (pokemon as PokemonData).Nickname);
            };

            olvColumnPrimaryMove.AspectGetter = (pokemon) => ((PokemonMove)(pokemon as PokemonData).Move1).ToString().Replace("Fast", "");

            olvColumnSecondaryMove.AspectGetter = (pokemon) => ((PokemonMove)(pokemon as PokemonData).Move2).ToString();

            olvColumnAttack.AspectGetter  = (pokemon) => (pokemon as PokemonData).IndividualAttack;
            olvColumnDefense.AspectGetter = (pokemon) => (pokemon as PokemonData).IndividualDefense;
            olvColumnStamina.AspectGetter = (pokemon) => (pokemon as PokemonData).IndividualStamina;


            olvColumnPerfectPercent.AspectGetter = delegate(object pokemon)
            {
                double settings = Manager.CalculateIVPerfection(pokemon as PokemonData);
                string sDouble  = String.Format("{0:0.00}", settings);
                return(double.Parse(sDouble));
            };

            olvColumnPokemonHeight.AspectGetter = delegate(object pokemon)
            {
                return(String.Format("{0:0.00}m", (pokemon as PokemonData).HeightM));
            };

            olvColumnPokemonWeight.AspectGetter = delegate(object pokemon)
            {
                return(String.Format("{0:0.00}Kg", (pokemon as PokemonData).WeightKg));
            };

            #endregion

            #region Candy

            olvColumnCandyFamily.AspectGetter = delegate(object x)
            {
                var family = (Candy)x;

                return(family.FamilyId.ToString().Replace("Family", ""));
            };

            #endregion

            #region Inventory

            olvColumnInventoryItem.AspectGetter = delegate(object x)
            {
                var item = (ItemData)x;

                return(item.ItemId.ToString().Replace("Item", ""));
            };

            #endregion
        }
Пример #26
0
        private async Task <MethodResult <List <PokemonData> > > GetPokemonToEvolve()
        {
            if (!UserSettings.EvolvePokemon)
            {
                LogCaller(new LoggerEventArgs("Evolving disabled", LoggerTypes.Info));

                return(new MethodResult <List <PokemonData> >
                {
                    Data = new List <PokemonData>(),
                    Message = "Evolving disabled",
                    Success = true
                });
            }

            await UpdatePokemon(false);
            await UpdatePokemonCandy(false);

            MethodResult result = await GetItemTemplates();

            if (!result.Success)
            {
                LogCaller(new LoggerEventArgs("Failed to grab pokemon settings. Skipping evolution", LoggerTypes.Warning));

                return(new MethodResult <List <PokemonData> >
                {
                    Data = new List <PokemonData>(),
                    Success = true
                });
            }

            List <PokemonData> pokemonToEvolve = new List <PokemonData>();

            IEnumerable <IGrouping <PokemonId, PokemonData> > groupedPokemon = Pokemon.OrderByDescending(x => x.PokemonId).GroupBy(x => x.PokemonId);

            foreach (IGrouping <PokemonId, PokemonData> group in groupedPokemon)
            {
                EvolveSetting evolveSetting = UserSettings.EvolveSettings.FirstOrDefault(x => x.Id == group.Key);

                if (evolveSetting == null)
                {
                    LogCaller(new LoggerEventArgs(String.Format("Failed to find evolve settings for pokemon {0}", group.Key), LoggerTypes.Info));

                    continue;
                }

                if (!evolveSetting.Evolve)
                {
                    //Don't evolve
                    continue;
                }

                PokemonSettings setting = null;

                if (!PokeSettings.TryGetValue(group.Key, out setting))
                {
                    LogCaller(new LoggerEventArgs(String.Format("Failed to find settings for pokemon {0}", group.Key), LoggerTypes.Info));

                    continue;
                }

                if (setting.EvolutionIds.Count == 0)
                {
                    //Pokemon can't evolve
                    continue;
                }

                Candy pokemonCandy = PokemonCandy.FirstOrDefault(x => x.FamilyId == setting.FamilyId);
                List <PokemonData> pokemonGroupToEvolve = group.Where(x => x.Cp >= evolveSetting.MinCP).OrderByDescending(x => CalculateIVPerfection(x).Data).ToList();

                if (pokemonCandy == null)
                {
                    LogCaller(new LoggerEventArgs(String.Format("No candy found for pokemon {0}", group.Key), LoggerTypes.Info));

                    continue;
                }

                int candyToEvolve = setting.CandyToEvolve;
                int totalPokemon  = pokemonGroupToEvolve.Count;
                int totalCandy    = pokemonCandy.Candy_;

                int maxPokemon = totalCandy / candyToEvolve;

                foreach (PokemonData pData in pokemonGroupToEvolve.Take(maxPokemon))
                {
                    pokemonToEvolve.Add(pData);
                }
            }

            return(new MethodResult <List <PokemonData> >
            {
                Data = pokemonToEvolve,
                Message = "Success",
                Success = true
            });
        }
Пример #27
0
        public IEnumerable <PokemonData> GetPokemonToEvolve(Dictionary <PokemonId, EvolveFilter> filters = null)
        {
            var buddy = GetPlayerData().Result.PlayerData.BuddyPokemon?.Id;

            IEnumerable <PokemonData> myPokemons = GetPokemons().OrderByDescending(p => p.Cp);

            myPokemons = myPokemons.Where(p => string.IsNullOrEmpty(p.DeployedFortId) && (!buddy.HasValue || buddy.Value != p.Id));

            List <PokemonData> possibleEvolvePokemons = new List <PokemonData>();

            foreach (var pokemon in myPokemons)
            {
                if (!filters.ContainsKey(pokemon.PokemonId))
                {
                    continue;
                }
                var filter = filters[pokemon.PokemonId];

                if (filter.Operator.BoolFunc(
                        filter.MinIV <= pokemon.Perfection(),
                        filter.MinLV <= pokemon.Level(),
                        filter.MinCP <= pokemon.CP(),
                        (filter.Moves == null ||
                         filter.Moves.Count == 0 ||
                         filter.Moves.Any(x => x[0] == pokemon.Move1 && x[1] == pokemon.Move2)
                        )
                        ) &&
                    CanEvolvePokemon(pokemon, filter).Result
                    )
                {
                    possibleEvolvePokemons.Add(pokemon);
                }
            }

            var pokemonToEvolve = new List <PokemonData>();

            // Group pokemon by their PokemonId
            var groupedPokemons = possibleEvolvePokemons.GroupBy(p => p.PokemonId);

            foreach (var group in groupedPokemons)
            {
                PokemonId pokemonId = group.Key;
                //if (!filters.ContainsKey(pokemon.PokemonId)) continue;
                var filter = filters[pokemonId];

                int             candiesLeft = GetCandyCount(pokemonId);
                PokemonSettings settings    = GetPokemonSettings().Result.FirstOrDefault(x => x.PokemonId == pokemonId);
                int             pokemonLeft = group.Count();

                int candyNeed = settings.CandyToEvolve;

                if (filter.EvolveToPokemonId != PokemonId.Missingno)
                {
                    var branch = settings.EvolutionBranch.FirstOrDefault(x => x.Evolution == filter.EvolveToPokemonId);

                    if (branch != null)
                    {
                        candyNeed = branch.CandyCost;
                    }
                }

                // Calculate the number of evolutions possible (taking into account +1 candy for evolve and +1 candy for transfer)
                EvolutionCalculations evolutionInfo = CalculatePokemonEvolution(pokemonLeft, candiesLeft, candyNeed, 1);

                if (evolutionInfo.Evolves > 0)
                {
                    // Add only the number of pokemon we can evolve.
                    pokemonToEvolve.AddRange(group.Take(evolutionInfo.Evolves).ToList());
                }
            }

            return(pokemonToEvolve);
        }
Пример #28
0
        public IEnumerable <PokemonData> GetDuplicatePokemonForTransfer(bool keepPokemonsThatCanEvolve = false,
                                                                        bool prioritizeIvoverCp        = false, IEnumerable <PokemonId> filter = null)
        {
            // TODO:: Gut this horrible code and replace it with something that is readable
            var pokemonList =
                Pokemon.Where(
                    p => p.DeployedFortId == string.Empty && p.Favorite == 0 && p.Cp < _logicSettings.KeepMinCp)
                .ToList();

            if (filter != null)
            {
                pokemonList = pokemonList.Where(p => !filter.Contains(p.PokemonId)).ToList();
            }
            if (keepPokemonsThatCanEvolve)
            {
                var results = new List <PokemonData>();
                var pokemonsThatCanBeTransfered = pokemonList.GroupBy(p => p.PokemonId)
                                                  .Where(x => x.Count() > _logicSettings.KeepMinDuplicatePokemon).ToList();

                foreach (var pokemon in pokemonsThatCanBeTransfered)
                {
                    var settings       = PokemonSettings.Single(x => x.PokemonId == pokemon.Key);
                    var familyCandy    = PokemonFamilies.Single(x => settings.FamilyId == x.FamilyId);
                    var amountToSkip   = _logicSettings.KeepMinDuplicatePokemon;
                    var amountPossible = familyCandy.Candy_ / settings.CandyToEvolve;

                    if (settings.CandyToEvolve > 0 && amountPossible > amountToSkip)
                    {
                        amountToSkip = amountPossible;
                    }

                    if (prioritizeIvoverCp)
                    {
                        results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key)
                                         .OrderByDescending(PokemonInfo.CalculatePokemonPerfection)
                                         .ThenBy(n => n.StaminaMax)
                                         .Skip(amountToSkip)
                                         .ToList());
                    }
                    else
                    {
                        results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key)
                                         .OrderByDescending(x => x.Cp)
                                         .ThenBy(n => n.StaminaMax)
                                         .Skip(amountToSkip)
                                         .ToList());
                    }
                }

                return(results);
            }
            if (prioritizeIvoverCp)
            {
                return(pokemonList
                       .GroupBy(p => p.PokemonId)
                       .Where(x => x.Any())
                       .SelectMany(
                           p =>
                           p.OrderByDescending(PokemonInfo.CalculatePokemonPerfection)
                           .ThenBy(n => n.StaminaMax)
                           .Skip(_logicSettings.KeepMinDuplicatePokemon)
                           .ToList()));
            }
            return(pokemonList
                   .GroupBy(p => p.PokemonId)
                   .Where(x => x.Any())
                   .SelectMany(
                       p =>
                       p.OrderByDescending(x => x.Cp)
                       .ThenBy(n => n.StaminaMax)
                       .Skip(_logicSettings.KeepMinDuplicatePokemon)
                       .ToList()));
        }
Пример #29
0
        public async Task <MethodResult> EvolvePokemon(IEnumerable <PokemonData> pokemonToEvolve)
        {
            //Shouldn't happen
            if (pokemonToEvolve.Count() < 1)
            {
                LogCaller(new LoggerEventArgs("Null value sent to evolve pokemon", LoggerTypes.Debug));

                return(new MethodResult());
            }

            foreach (PokemonData pokemon in pokemonToEvolve)
            {
                if (pokemon == null)
                {
                    LogCaller(new LoggerEventArgs("Null pokemon data in IEnumerable", LoggerTypes.Debug));

                    continue;
                }

                if (pokemon.IsBad)
                {
                    LogCaller(new LoggerEventArgs(String.Format("Pokemon {0} is slashed.", pokemon.PokemonId), LoggerTypes.Warning));
                    //await TransferPokemon(new List<PokemonData> { pokemon });
                    continue;
                }

                if (!CanEvolvePokemon(pokemon))
                {
                    LogCaller(new LoggerEventArgs(String.Format("Skipped {0}, this pokemon cant not be upgrated maybe is deployed pokemon or you not have needed resources.", pokemon.PokemonId), LoggerTypes.Info));
                    continue;
                }

                PokemonSettings pokemonSettings = GetPokemonSetting((pokemon).PokemonId).Data;
                ItemId          itemNeeded      = pokemonSettings.EvolutionBranch.Select(x => x.EvolutionItemRequirement).FirstOrDefault();

                if (!_client.LoggedIn)
                {
                    MethodResult result = await AcLogin();

                    if (!result.Success)
                    {
                        return(result);
                    }
                }

                var response = await _client.ClientSession.RpcClient.SendRemoteProcedureCallAsync(new Request
                {
                    RequestType    = RequestType.EvolvePokemon,
                    RequestMessage = new EvolvePokemonMessage
                    {
                        PokemonId = pokemon.Id,
                        EvolutionItemRequirement = itemNeeded
                    }.ToByteString()
                });

                if (response == null)
                {
                    return(new MethodResult());
                }

                EvolvePokemonResponse evolvePokemonResponse = EvolvePokemonResponse.Parser.ParseFrom(response);
                switch (evolvePokemonResponse.Result)
                {
                case EvolvePokemonResponse.Types.Result.Success:
                    ExpIncrease(evolvePokemonResponse.ExperienceAwarded);
                    //_expGained += evolvePokemonResponse.ExperienceAwarded;

                    LogCaller(new LoggerEventArgs(
                                  String.Format("Successully evolved {0} to {1}. Experience: {2}. Cp: {3} -> {4}. IV: {5:0.00}%",
                                                pokemon.PokemonId,
                                                pokemonSettings.EvolutionBranch.Select(x => x.Evolution).FirstOrDefault(),
                                                evolvePokemonResponse.ExperienceAwarded,
                                                pokemon.Cp,
                                                evolvePokemonResponse.EvolvedPokemonData.Cp,
                                                CalculateIVPerfection(evolvePokemonResponse.EvolvedPokemonData)),
                                  LoggerTypes.Evolve));

                    UpdateInventory(InventoryRefresh.Pokemon);
                    UpdateInventory(InventoryRefresh.PokemonCandy);

                    await Task.Delay(CalculateDelay(UserSettings.DelayBetweenPlayerActions, UserSettings.PlayerActionDelayRandom));

                    continue;

                case EvolvePokemonResponse.Types.Result.FailedInsufficientResources:
                    LogCaller(new LoggerEventArgs("Evolve request failed: Failed Insufficient Resources", LoggerTypes.Debug));
                    continue;

                case EvolvePokemonResponse.Types.Result.FailedInvalidItemRequirement:
                    LogCaller(new LoggerEventArgs("Evolve request failed: Failed Invalid Item Requirement", LoggerTypes.Debug));
                    continue;

                case EvolvePokemonResponse.Types.Result.FailedPokemonCannotEvolve:
                    LogCaller(new LoggerEventArgs("Evolve request failed: Failed Pokemon Cannot Evolve", LoggerTypes.Debug));
                    continue;

                case EvolvePokemonResponse.Types.Result.FailedPokemonIsDeployed:
                    LogCaller(new LoggerEventArgs("Evolve request failed: Failed Pokemon IsDeployed", LoggerTypes.Debug));
                    continue;

                case EvolvePokemonResponse.Types.Result.FailedPokemonMissing:
                    LogCaller(new LoggerEventArgs("Evolve request failed: Failed Pokemon Missing", LoggerTypes.Debug));
                    continue;

                case EvolvePokemonResponse.Types.Result.Unset:
                    LogCaller(new LoggerEventArgs("Evolve request failed", LoggerTypes.Debug));
                    continue;
                }
            }

            return(new MethodResult
            {
                Success = true
            });
        }
Пример #30
0
 public PokemonModel(PokemonSettings settings)
 {
     BuildFromSettings(settings);
 }