/// <summary>
        /// Gets possible encounters that allow all moves requested to be learned.
        /// </summary>
        /// <param name="pk">Rough Pokémon data which contains the requested species, gender, and form.</param>
        /// <param name="moves">Moves that the resulting <see cref="IEncounterable"/> must be able to learn.</param>
        /// <param name="versions">Any specific version(s) to iterate for. If left blank, all will be checked.</param>
        /// <returns>A consumable <see cref="IEncounterable"/> list of possible encounters.</returns>
        public static IEnumerable <IEncounterable> GenerateEncounters(PKM pk, int[] moves = null, params GameVersion[] versions)
        {
            var m    = moves ?? pk.Moves;
            var vers = versions?.Length >= 1 ? versions : GameUtil.GetVersionsWithinRange(pk, pk.Format);

            return(vers.SelectMany(ver => GenerateVersionEncounters(pk, m, ver)));
        }
        public FilteredGameDataSource(SaveFile sav, GameDataSource source, bool HaX = false)
        {
            Source  = source;
            Species = GetFilteredSpecies(sav, source, HaX).ToList();
            Moves   = GetFilteredMoves(sav, source, HaX).ToList();
            if (sav.Generation > 1)
            {
                var items = Source.GetItemDataSource(sav.Version, sav.Generation, sav.HeldItems, HaX);
                items.RemoveAll(i => i.Value > sav.MaxItemID);
                Items = items;
            }
            else
            {
                Items = Array.Empty <ComboItem>();
            }

            var gamelist = GameUtil.GetVersionsWithinRange(sav, sav.Generation).ToList();

            Games = Source.VersionDataSource.Where(g => gamelist.Contains((GameVersion)g.Value)).ToList();

            Languages = GameDataSource.LanguageDataSource(sav.Generation);
            Balls     = Source.BallDataSource.Where(b => b.Value <= sav.MaxBallID).ToList();
            Abilities = Source.AbilityDataSource.Where(a => a.Value <= sav.MaxAbilityID).ToList();

            G4GroundTiles = Source.GroundTileDataSource;
            Natures       = Source.NatureDataSource;
        }
        public FilteredGameDataSource(SaveFile sav, GameDataSource source, bool HaX = false)
        {
            Source = source;
            if (sav.Generation > 1)
            {
                var items = Source.GetItemDataSource(sav.Version, sav.Generation, sav.MaxItemID, sav.HeldItems, HaX);
                Items = items.Where(i => i.Value <= sav.MaxItemID).ToList();
            }
            else
            {
                Items = Array.Empty <ComboItem>();
            }

            var gamelist = GameUtil.GetVersionsWithinRange(sav, sav.Generation).ToList();

            Games = Source.VersionDataSource.Where(g => gamelist.Contains((GameVersion)g.Value)).ToList();

            Languages = GameDataSource.LanguageDataSource(sav.Generation);
            Balls     = Source.BallDataSource.Where(b => b.Value <= sav.MaxBallID).ToList();
            Species   = Source.SpeciesDataSource.Where(s => s.Value <= sav.MaxSpeciesID).ToList();
            Abilities = Source.AbilityDataSource.Where(a => a.Value <= sav.MaxAbilityID).ToList();

            var moves = HaX ? Source.HaXMoveDataSource : Source.LegalMoveDataSource; // Filter Z-Moves if appropriate

            Moves            = moves.Where(m => m.Value <= sav.MaxMoveID).ToList();
            G4EncounterTypes = Source.EncounterTypeDataSource;
            Natures          = Source.NatureDataSource;
        }
Exemple #4
0
        /// <summary>
        /// Gets possible encounters that allow all moves requested to be learned.
        /// </summary>
        /// <param name="pk">Rough Pokémon data which contains the requested species, gender, and form.</param>
        /// <param name="moves">Moves that the resulting <see cref="IEncounterable"/> must be able to learn.</param>
        /// <param name="versions">Any specific version(s) to iterate for. If left blank, all will be checked.</param>
        /// <returns>A consumable <see cref="IEncounterable"/> list of possible encounters.</returns>
        public static IEnumerable <IEncounterable> GenerateEncounters(PKM pk, int[]?moves = null, params GameVersion[] versions)
        {
            moves ??= pk.Moves;
            if (versions.Length > 0)
            {
                return(GenerateEncounters(pk, moves, (IReadOnlyList <GameVersion>)versions));
            }

            var vers = GameUtil.GetVersionsWithinRange(pk, pk.Format);

            return(vers.SelectMany(ver => GenerateVersionEncounters(pk, moves, ver)));
        }
Exemple #5
0
        /// <summary>
        /// Gets possible <see cref="IEncounterable"/> objects that allow all moves requested to be learned.
        /// </summary>
        /// <param name="pk">Rough Pokémon data which contains the requested species, gender, and form.</param>
        /// <param name="info">Trainer information of the receiver.</param>
        /// <param name="moves">Moves that the resulting <see cref="IEncounterable"/> must be able to learn.</param>
        /// <param name="versions">Any specific version(s) to iterate for. If left blank, all will be checked.</param>
        /// <returns>A consumable <see cref="IEncounterable"/> list of possible results.</returns>
        /// <remarks>When updating, update the sister <see cref="GeneratePKMs(PKM,ITrainerInfo,int[],GameVersion[])"/> method.</remarks>
        public static IEnumerable <IEncounterable> GenerateEncounters(PKM pk, ITrainerInfo info, int[]?moves = null, params GameVersion[] versions)
        {
            pk.TID = info.TID;
            var m    = moves ?? pk.Moves;
            var vers = versions.Length >= 1 ? versions : GameUtil.GetVersionsWithinRange(pk, pk.Format);

            foreach (var ver in vers)
            {
                var encounters = GenerateVersionEncounters(pk, m, ver);
                foreach (var enc in encounters)
                {
                    yield return(enc);
                }
            }
        }
        /// <summary>
        /// Gets possible <see cref="PKM"/> objects that allow all moves requested to be learned.
        /// </summary>
        /// <param name="pk">Rough Pokémon data which contains the requested species, gender, and form.</param>
        /// <param name="info">Trainer information of the receiver.</param>
        /// <param name="moves">Moves that the resulting <see cref="IEncounterable"/> must be able to learn.</param>
        /// <param name="versions">Any specific version(s) to iterate for. If left blank, all will be checked.</param>
        /// <returns>A consumable <see cref="PKM"/> list of possible results.</returns>
        public static IEnumerable <PKM> GeneratePKMs(PKM pk, ITrainerInfo info, int[] moves = null, params GameVersion[] versions)
        {
            pk.TID = info.TID;
            var m    = moves ?? pk.Moves;
            var vers = versions?.Length >= 1 ? versions : GameUtil.GetVersionsWithinRange(pk, pk.Format);

            foreach (var ver in vers)
            {
                var encs = GenerateVersionEncounters(pk, m, ver);
                foreach (var enc in encs)
                {
                    var result = enc.ConvertToPKM(info);
#if DEBUG
                    var la = new LegalityAnalysis(result);
                    if (!la.Valid)
                    {
                        throw new Exception();
                    }
#endif
                    yield return(result);
                }
            }
        }