public override IEnumerable <EncounterSlot> GetMatchingSlots(PKM pkm, IReadOnlyList <EvoCriteria> chain) { var sf = chain.FirstOrDefault(z => z.Species == Species && z.Form == Form); if (sf == null) { yield break; } var stamp = EncounterSlotGO.GetTimeStamp(pkm.Met_Year + 2000, pkm.Met_Month, pkm.Met_Day); var met = Math.Max(sf.MinLevel, pkm.Met_Level); foreach (var s in Slots) { var slot = (EncounterSlot7GO)s; if (!slot.IsLevelWithinRange(met)) { continue; } //if (!slot.IsBallValid(ball)) -- can have any of the in-game balls due to re-capture // continue; if (!slot.Shiny.IsValid(pkm)) { continue; } if (!slot.IsWithinStartEnd(stamp)) { continue; } yield return(slot); } }
public override IEnumerable <EncounterSlot> GetMatchingSlots(PKM pkm, IReadOnlyList <EvoCriteria> chain) { if (pkm.TSV == 0) // HOME doesn't assign TSV=0 to accounts. { yield break; } var sf = chain.FirstOrDefault(z => z.Species == Species && (z.Form == Form || AltFormInfo.IsFormChangeable(Species, Form, z.Form, pkm.Format))); if (sf == null) { yield break; } var ball = (Ball)pkm.Ball; var stamp = EncounterSlotGO.GetTimeStamp(pkm.Met_Year + 2000, pkm.Met_Month, pkm.Met_Day); var met = Math.Max(sf.MinLevel, pkm.Met_Level); foreach (var s in Slots) { var slot = (EncounterSlot8GO)s; if (!slot.IsLevelWithinRange(met)) { continue; } if (!slot.IsBallValid(ball)) { continue; } if (!slot.Shiny.IsValid(pkm)) { continue; } if (!slot.IsWithinStartEnd(stamp)) { continue; } if (IsDeferredSlot(slot, pkm)) { continue; } yield return(slot); } }