Example #1
0
    private static int[] GetSuggestedMoves(PKM pk, EvolutionHistory evoChains, MoveSourceType types, IEncounterTemplate enc)
    {
        if (pk.IsEgg && pk.Format <= 5) // pre relearn
        {
            return(MoveList.GetBaseEggMoves(pk, pk.Species, 0, (GameVersion)pk.Version, pk.CurrentLevel));
        }

        if (types != MoveSourceType.None)
        {
            return(GetValidMoves(pk, evoChains, types).Skip(1).ToArray()); // skip move 0
        }
        // try to give current moves
        if (enc.Generation <= 2)
        {
            var lvl = pk.Format >= 7 ? pk.Met_Level : pk.CurrentLevel;
            var ver = enc.Version;
            return(MoveLevelUp.GetEncounterMoves(enc.Species, 0, lvl, ver));
        }

        if (pk.Species == enc.Species)
        {
            return(MoveLevelUp.GetEncounterMoves(pk.Species, pk.Form, pk.CurrentLevel, (GameVersion)pk.Version));
        }

        return(GetValidMoves(pk, evoChains, types).Skip(1).ToArray()); // skip move 0
    }
Example #2
0
        /// <summary>
        /// Gets four moves which can be learned depending on the input arguments.
        /// </summary>
        /// <param name="analysis">Parse information to generate a moveset for.</param>
        /// <param name="types">Allowed move sources for populating the result array</param>
        public static int[] GetSuggestedCurrentMoves(this LegalityAnalysis analysis, MoveSourceType types = MoveSourceType.All)
        {
            if (!analysis.Parsed)
            {
                return(new int[4]);
            }
            var pkm = analysis.pkm;

            if (pkm.IsEgg && pkm.Format >= 6)
            {
                return(pkm.RelearnMoves);
            }

            if (pkm.IsEgg)
            {
                types = types.ClearNonEggSources();
            }

            var info = analysis.Info;

            return(GetSuggestedMoves(pkm, info.EvoChainsAllGens, types, info.EncounterOriginal));
        }
Example #3
0
        private static IEnumerable <int> GetValidMoves(PKM pkm, GameVersion version, IReadOnlyList <IReadOnlyList <EvoCriteria> > evoChains, int minLvLG1 = 1, int minLvLG2 = 1, MoveSourceType types = MoveSourceType.Reminder, bool RemoveTransferHM = true)
        {
            var r = new List <int> {
                0
            };

            if (types.HasFlagFast(MoveSourceType.RelearnMoves) && pkm.Format >= 6)
            {
                r.AddRange(pkm.RelearnMoves);
            }

            int start = pkm.Generation;

            if (start < 0)
            {
                start = pkm.Format; // be generous instead of returning nothing
            }
            if (pkm is IBattleVersion b)
            {
                start = Math.Max(0, b.GetMinGeneration());
            }

            for (int generation = start; generation <= pkm.Format; generation++)
            {
                var chain = evoChains[generation];
                if (chain.Count == 0)
                {
                    continue;
                }
                r.AddRange(MoveList.GetValidMoves(pkm, version, chain, generation, minLvLG1: minLvLG1, minLvLG2: minLvLG2, types: types, RemoveTransferHM: RemoveTransferHM));
            }

            return(r.Distinct());
        }
Example #4
0
        private static IEnumerable <int> GetValidMoves(PKM pkm, IReadOnlyList <IReadOnlyList <EvoCriteria> > evoChains, MoveSourceType types = MoveSourceType.ExternalSources, bool RemoveTransferHM = true)
        {
            GameVersion version = (GameVersion)pkm.Version;

            if (!pkm.IsUntraded)
            {
                version = GameVersion.Any;
            }
            return(GetValidMoves(pkm, version, evoChains, minLvLG1: 1, minLvLG2: 1, types: types, RemoveTransferHM: RemoveTransferHM));
        }
Example #5
0
 public static MoveSourceType ClearNonEggSources(this MoveSourceType value) => value & MoveSourceType.Encounter;
Example #6
0
 public static bool HasFlagFast(this MoveSourceType value, MoveSourceType flag) => (value & flag) != 0;
Example #7
0
    private static IEnumerable <int> GetValidMoves(PKM pk, GameVersion version, EvolutionHistory evoChains, MoveSourceType types = MoveSourceType.Reminder, bool RemoveTransferHM = true)
    {
        var r = new List <int> {
            0
        };

        if (types.HasFlagFast(MoveSourceType.RelearnMoves) && pk.Format >= 6)
        {
            r.AddRange(pk.RelearnMoves);
        }

        int start = pk.Generation;

        if (start < 0)
        {
            start = pk.Format; // be generous instead of returning nothing
        }
        if (pk is IBattleVersion b)
        {
            start = Math.Max(0, b.GetMinGeneration());
        }

        for (int generation = start; generation <= pk.Format; generation++)
        {
            var chain = evoChains[generation];
            if (chain.Length == 0)
            {
                continue;
            }
            r.AddRange(MoveList.GetValidMoves(pk, version, chain, generation, types: types, RemoveTransferHM: RemoveTransferHM));
        }

        return(r.Distinct());
    }
Example #8
0
 private static IEnumerable <int> GetValidMoves(PKM pk, EvolutionHistory evoChains, MoveSourceType types = MoveSourceType.ExternalSources, bool RemoveTransferHM = true)
 {
     var(_, version) = pk.IsMovesetRestricted();
     return(GetValidMoves(pk, version, evoChains, types: types, RemoveTransferHM: RemoveTransferHM));
 }
Example #9
0
        private static IEnumerable <int> GetValidMoves(PKM pkm, EvoCriteria[][] evoChains, MoveSourceType types = MoveSourceType.ExternalSources, bool RemoveTransferHM = true)
        {
            GameVersion version = (GameVersion)pkm.Version;

            if (!pkm.IsMovesetRestricted())
            {
                version = GameVersion.Any;
            }
            return(GetValidMoves(pkm, version, evoChains, types: types, RemoveTransferHM: RemoveTransferHM));
        }