Ejemplo n.º 1
0
    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);
        }
    }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
    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);
        }
    }
}