예제 #1
0
    /// <summary>
    /// Fetches <see cref="PKM.RelearnMoves"/> based on the provided <see cref="LegalityAnalysis"/>.
    /// </summary>
    /// <param name="legal"><see cref="LegalityAnalysis"/> which contains parsed information pertaining to legality.</param>
    /// <param name="enc">Encounter the relearn moves should be suggested for. If not provided, will try to detect it via legality analysis. </param>
    /// <returns><see cref="PKM.RelearnMoves"/> best suited for the current <see cref="PKM"/> data.</returns>
    public static IReadOnlyList <int> GetSuggestedRelearnMoves(this LegalityAnalysis legal, IEncounterTemplate?enc = null)
    {
        enc ??= legal.EncounterOriginal;
        var m = legal.GetSuggestedRelearnMovesFromEncounter(enc);

        if (m.Any(z => z != 0))
        {
            return(m);
        }

        if (enc is MysteryGift or EncounterEgg)
        {
            return(m);
        }

        if (enc is EncounterSlot6AO {
            CanDexNav : true
        } dn)
        {
            var moves = legal.Info.Moves;
            for (int i = 0; i < moves.Length; i++)
            {
                if (!moves[i].ShouldBeInRelearnMoves())
                {
                    continue;
                }

                var move = legal.Entity.GetMove(i);

                if (dn.CanBeDexNavMove(move))
                {
                    return new[] { move, 0, 0, 0 }
                }
                ;
            }
        }

        if (enc is EncounterSlot8b {
            IsUnderground : true
        } ug)
        {
            var moves = legal.Info.Moves;
            for (int i = 0; i < moves.Length; i++)
            {
                if (!moves[i].ShouldBeInRelearnMoves())
                {
                    continue;
                }

                var move = legal.Entity.GetMove(i);
                if (ug.CanBeUndergroundMove(move))
                {
                    return new[] { move, 0, 0, 0 }
                }
                ;
            }

            if (ug.GetBaseEggMove(out int any))
                return new[] { any, 0, 0, 0 }
            ;
        }

        var encounter = EncounterSuggestion.GetSuggestedMetInfo(legal.Entity);

        if (encounter is IRelearn {
            Relearn : { Count : > 0 } r
        })