/// <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; }
/// <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))); }
/// <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); } } }