public void HandleEvent(PokemonCaptureEvent evt, Context ctx) { Func<ItemId, string> returnRealBallName = a => { switch (a) { case ItemId.ItemPokeBall: return "Poke"; case ItemId.ItemGreatBall: return "Great"; case ItemId.ItemUltraBall: return "Ultra"; case ItemId.ItemMasterBall: return "Master"; default: return "Unknown"; } }; var catchStatus = evt.Attempt > 1 ? $"{evt.Status} Attempt #{evt.Attempt}" : $"{evt.Status}"; var familyCandies = evt.FamilyCandies > 0 ? $"Candies: {evt.FamilyCandies}" : ""; Logger.Write( $"({catchStatus}) {evt.Id} Lvl: {evt.Level} CP: ({evt.Cp}/{evt.MaxCp}) IV: {evt.Perfection.ToString("0.00")}% | Chance: {evt.Probability}% | {Math.Round(evt.Distance)}m dist | with a {returnRealBallName(evt.Pokeball)}Ball. | {familyCandies}", LogLevel.Caught); }
public void HandleEvent(PokemonCaptureEvent evt, Context ctx) { if (evt.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess) { _stats.TotalExperience += evt.Exp; _stats.TotalPokemons++; _stats.TotalStardust = evt.Stardust; _stats.Dirty(ctx.Inventory); } }
public static void Execute(Context ctx, StateMachine machine, EncounterResponse encounter, MapPokemon pokemon) { CatchPokemonResponse caughtPokemonResponse; var attemptCounter = 1; do { var probability = encounter?.CaptureProbability?.CaptureProbability_?.FirstOrDefault(); var pokeball = GetBestBall(ctx, encounter); if (pokeball == ItemId.ItemUnknown) { machine.Fire(new NoPokeballEvent { Id = pokemon.PokemonId, Cp = encounter?.WildPokemon?.PokemonData?.Cp ?? 0 }); return; } var isLowProbability = probability.HasValue && probability.Value < 0.35; var isHighCp = encounter != null && encounter.WildPokemon?.PokemonData?.Cp > 400; var isHighPerfection = PokemonInfo.CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData) >= ctx.LogicSettings.KeepMinIvPercentage; if ((isLowProbability && isHighCp) || isHighPerfection) { UseBerry(ctx, machine, pokemon.EncounterId, pokemon.SpawnPointId); } var distance = LocationUtils.CalculateDistanceInMeters(ctx.Client.CurrentLatitude, ctx.Client.CurrentLongitude, pokemon.Latitude, pokemon.Longitude); caughtPokemonResponse = ctx.Client.Encounter.CatchPokemon(pokemon.EncounterId, pokemon.SpawnPointId, pokeball).Result; var evt = new PokemonCaptureEvent {Status = caughtPokemonResponse.Status}; if (caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess) { var totalExp = 0; foreach (var xp in caughtPokemonResponse.CaptureAward.Xp) { totalExp += xp; } var profile = ctx.Client.Player.GetPlayer().Result; evt.Exp = totalExp; evt.Stardust = profile.PlayerData.Currencies.ToArray()[1].Amount; var pokemonSettings = ctx.Inventory.GetPokemonSettings().Result; var pokemonFamilies = ctx.Inventory.GetPokemonFamilies().Result; var setting = pokemonSettings.FirstOrDefault(q => q.PokemonId == pokemon.PokemonId); var family = pokemonFamilies.FirstOrDefault(q => q.FamilyId == setting.FamilyId); if (family != null) { family.Candy += caughtPokemonResponse.CaptureAward.Candy.Sum(); evt.FamilyCandies = family.Candy; } else { evt.FamilyCandies = caughtPokemonResponse.CaptureAward.Candy.Sum(); } } if (encounter?.CaptureProbability?.CaptureProbability_ != null) { evt.Id = pokemon.PokemonId; evt.Level = PokemonInfo.GetLevel(encounter.WildPokemon?.PokemonData); evt.Cp = encounter.WildPokemon?.PokemonData?.Cp ?? 0; evt.MaxCp = PokemonInfo.CalculateMaxCp(encounter.WildPokemon?.PokemonData); evt.Perfection = Math.Round(PokemonInfo.CalculatePokemonPerfection(encounter.WildPokemon?.PokemonData)); evt.Probability = Math.Round(Convert.ToDouble(encounter.CaptureProbability?.CaptureProbability_.First())*100, 2); evt.Distance = distance; evt.Pokeball = pokeball; evt.Attempt = attemptCounter; machine.Fire(evt); } attemptCounter++; Thread.Sleep(2000); } while (caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchMissed || caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchEscape); }