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)); }
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); }
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); }
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); }
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); }
/** * 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)); }
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); }
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; }
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; } }
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 }); } }
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); }
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); }
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_; }
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); }
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()); }
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 }); } }
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); } }
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); }
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); }
public PokemonModel(PokemonSettings settings, PokedexEntry pokedexEntry) { BuildFromSettings(settings); BuildFromPokedexEntry(pokedexEntry); }
private int GetFactorAgainst(PokemonSettings pokemon) { int factor = GetFactorAgainst(pokemon.Type); factor += GetFactorAgainst(pokemon.Type2); return factor; }
/// <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)); }
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)); }
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 }
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 }); }
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); }
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())); }
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 }); }
public PokemonModel(PokemonSettings settings) { BuildFromSettings(settings); }