Esempio n. 1
0
        protected override void SetEncounterMoves(PKM pk, GameVersion version, int level)
        {
            var moves = MoveLevelUp.GetEncounterMoves(pk, level, OriginGroup);

            pk.SetMoves(moves);
            pk.SetMaximumPPCurrent(moves);
        }
Esempio n. 2
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
    }
Esempio n. 3
0
        private static int[] GetMinLevelLearnMoveG1(int species, List <int> moves)
        {
            var result = new int[moves.Count];

            for (int i = 0; i < result.Length; i++)
            {
                result[i] = MoveLevelUp.GetIsLevelUp1(species, moves[i], 100, 0, 0).Level;
            }
            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// Resets the <see cref="PKM"/>'s moves and sets the requested version.
        /// </summary>
        /// <param name="v">Reference to the object to set the <see cref="version"/></param>
        /// <param name="pk">Reference to the same object that gets moves reset</param>
        /// <param name="version">Version to apply</param>
        public static void AdaptToBattleVersion(this IBattleVersion v, PKM pk, GameVersion version)
        {
            var moves = MoveLevelUp.GetEncounterMoves(pk, pk.CurrentLevel, version);

            pk.Move1        = pk.Move2 = pk.Move3 = pk.Move4 = 0;
            pk.RelearnMove1 = pk.RelearnMove2 = pk.RelearnMove3 = pk.RelearnMove4 = 0;
            pk.SetMoves(moves);
            pk.FixMoves();
            v.BattleVersion = (int)version;
        }
Esempio n. 5
0
        private static List <int>[] GetExclusiveMovesG1(int species1, int species2, IEnumerable <int> tmhm, IEnumerable <int> moves)
        {
            // Return from two species the exclusive moves that only one could learn and also the current pokemon have it in its current moveset
            var moves1 = MoveLevelUp.GetMovesLevelUp1(species1, 0, 1, 100);
            var moves2 = MoveLevelUp.GetMovesLevelUp1(species2, 0, 1, 100);

            // Remove common moves and remove tmhm, remove not learned moves
            var common    = new HashSet <int>(moves1.Intersect(moves2).Concat(tmhm));
            var hashMoves = new HashSet <int>(moves);

            moves1.RemoveAll(x => !hashMoves.Contains(x) || common.Contains(x));
            moves2.RemoveAll(x => !hashMoves.Contains(x) || common.Contains(x));
            return(new[] { moves1, moves2 });
        }
    private static int[] GetNeededMoves(PKM pk, IEnumerable <int> moves, EvoCriteria[] chain)
    {
        if (pk.Species == (int)Species.Smeargle)
        {
            return(moves.Where(z => !Legal.IsValidSketch(z, pk.Format)).ToArray()); // Can learn anything
        }
        // Roughly determine the generation the PKM is originating from
        var ver    = pk.Version;
        int origin = pk.Generation;

        if (origin < 0)
        {
            origin = ((GameVersion)ver).GetGeneration();
        }

        // Temporarily replace the Version for VC1 transfers, so that they can have VC2 moves if needed.
        bool vcBump = origin == 1 && pk.Format >= 7;

        if (vcBump)
        {
            pk.Version = (int)GameVersion.C;
        }

        var gens     = GenerationTraversal.GetVisitedGenerationOrder(pk, origin);
        var canlearn = gens.SelectMany(z => GetMovesForGeneration(pk, chain, z));

        if (origin is (1 or 2)) // gb initial moves
        {
            var max = origin == 1 ? Legal.MaxSpeciesID_1 : Legal.MaxSpeciesID_2;
            foreach (var evo in chain)
            {
                var species = evo.Species;
                if (species > max)
                {
                    continue;
                }
                var enc = MoveLevelUp.GetEncounterMoves(species, 0, 1, (GameVersion)ver);
                canlearn = canlearn.Concat(enc);
            }
        }
        var result = moves.Where(z => z != 0).Except(canlearn).ToArray();

        if (vcBump)
        {
            pk.Version = ver;
        }

        return(result);
    }
Esempio n. 7
0
        private static List <int> GetRequiredMoveCountLevel(PKM pk)
        {
            int species     = pk.Species;
            int basespecies = EvoBase.GetBaseSpecies(pk).Species;
            int maxlevel    = 1;
            int minlevel    = 1;

            if (species == (int)Species.Tangela) // Tangela moves before level 32 are different in RB vs Y
            {
                minlevel = 32;
                maxlevel = pk.CurrentLevel;
            }
            else if ((int)Species.NidoranF <= species && species <= (int)Species.Nidoking && pk.CurrentLevel >= 8)
            {
                maxlevel = 8; // Always learns a third move at level 8
            }

            if (minlevel > pk.CurrentLevel)
            {
                return(new List <int>());
            }

            return(MoveLevelUp.GetMovesLevelUp1(basespecies, 0, maxlevel, minlevel));
        }