public static IEnumerable <IEncounterable> GetEncounters(PKM pkm, EvoCriteria[] chain) { if (pkm.IsEgg) { yield break; } int ctr = 0; if (pkm.FatefulEncounter) { foreach (var z in GetValidGifts(pkm, chain)) { yield return(z); ++ctr; } if (ctr != 0) { yield break; } } IEncounterable? cache = null; EncounterMatchRating rating = None; // Static Encounters can collide with wild encounters (close match); don't break if a Static Encounter is yielded. var encs = GetValidStaticEncounter(pkm, chain); foreach (var z in encs) { var match = z.GetMatchRating(pkm); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } foreach (var z in GetValidWildEncounters(pkm, chain)) { var match = z.GetMatchRating(pkm); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } if (cache != null) { yield return(cache); } }
public static IEnumerable <IEncounterable> GetEncounters(PKM pkm, EvoCriteria[] chain) { int ctr = 0; if (pkm.FatefulEncounter) { foreach (var z in GetValidGifts(pkm, chain)) { yield return(z); ++ctr; } if (ctr != 0) { yield break; } } if (Locations.IsEggLocationBred8b(pkm.Egg_Location)) { foreach (var z in GenerateEggs(pkm, 8)) { yield return(z); ++ctr; } if (ctr == 0) { yield break; } } IEncounterable? cache = null; EncounterMatchRating rating = None; // Trades if (!pkm.IsEgg && pkm.Met_Location == Locations.LinkTrade6NPC) { foreach (var z in GetValidEncounterTrades(pkm, chain)) { var match = z.GetMatchRating(pkm); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } if (cache != null) { yield return(cache); } yield break; } // Static Encounters can collide with wild encounters (close match); don't break if a Static Encounter is yielded. var encs = GetValidStaticEncounter(pkm, chain); foreach (var z in encs) { var match = z.GetMatchRating(pkm); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } foreach (var z in GetValidWildEncounters(pkm, chain)) { var match = z.GetMatchRating(pkm); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } if (cache != null) { yield return(cache); } }
public static IEnumerable <IEncounterable> GetEncountersFuzzy(PKM pk, EvoCriteria[] chain, GameVersion game) { int ctr = 0; if (pk.FatefulEncounter) { foreach (var z in GetValidGifts(pk, chain, game)) { yield return(z); ++ctr; } if (ctr != 0) { yield break; } } if (pk.Egg_Location == Locations.HOME_SWSHBDSPEgg && pk.Met_Level == 1) { foreach (var z in GenerateEggs(pk, 8)) { yield return(z); ++ctr; } if (ctr == 0) { yield break; } } IEncounterable? cache = null; EncounterMatchRating rating = None; // Trades if (!pk.IsEgg) { foreach (var z in GetValidEncounterTrades(pk, chain, game)) { var match = z.GetMatchRating(pk); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } if (cache != null) { yield return(cache); } } // Static Encounters can collide with wild encounters (close match); don't break if a Static Encounter is yielded. var encs = GetValidStaticEncounter(pk, chain, game); foreach (var z in encs) { var match = z.GetMatchRating(pk); if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } // Only yield if Safari and Marsh encounters match. bool safari = pk is PK8 { Ball : (int)Ball.Safari }; foreach (var z in GetValidWildEncounters(pk, chain, game)) { var marsh = Locations.IsSafariZoneLocation8b(z.Location); var match = z.GetMatchRating(pk); if (safari != marsh) { match = DeferredErrors; } if (match == Match) { yield return(z); } else if (match < rating) { cache = z; rating = match; } } if (cache != null) { yield return(cache); } } }