diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs index f0dfc965d..a2981e182 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs @@ -14,6 +14,32 @@ public static class EncounterMovesetGenerator /// private static readonly GameVersion[] Versions = ((GameVersion[]) Enum.GetValues(typeof(GameVersion))).Where(z => z < GameVersion.RB && z > 0).Reverse().ToArray(); + /// + /// Gets possible objects that allow all moves requested to be learned. + /// + /// Rough Pokémon data which contains the requested species, gender, and form. + /// Trainer information of the receiver. + /// Moves that the resulting must be able to learn. + /// Any specific version(s) to iterate for. If left blank, all will be checked. + /// A consumable list of possible results. + public static IEnumerable GeneratePKMs(PKM pk, ITrainerInfo info, int[] moves = null, params GameVersion[] versions) + { + var m = moves ?? pk.Moves; + var vers = versions?.Length >= 1 ? versions : Versions.Where(z => z <= (GameVersion) pk.MaxGameID); + foreach (var ver in vers) + { + var encs = GenerateVersionEncounters(pk, m, ver); + foreach (var enc in encs) + { + var result = enc.ConvertToPKM(info); + result.Version = (int)ver; // some encounters don't have explicit versions defined, provide one + if (result.GenNumber <= 2) + result.SID = 0; + yield return result; + } + } + } + /// /// Gets possible encounters that allow all moves requested to be learned. /// @@ -23,7 +49,9 @@ public static class EncounterMovesetGenerator /// A consumable list of possible encounters. public static IEnumerable GenerateEncounters(PKM pk, int[] moves = null, params GameVersion[] versions) { - return (versions ?? Versions).SelectMany(ver => GenerateVersionEncounters(pk, moves ?? pk.Moves, ver)); + var m = moves ?? pk.Moves; + var vers = versions?.Length >= 1 ? versions : Versions.Where(z => z <= (GameVersion)pk.MaxGameID); + return vers.SelectMany(ver => GenerateVersionEncounters(pk, m, ver)); } /// diff --git a/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs b/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs index a92fd84d3..5242f65d4 100644 --- a/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs +++ b/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs @@ -37,6 +37,10 @@ public void SimulatorGetEncounters() var la = new LegalityAnalysis(pk); Assert.IsTrue(la.Valid); + + var test = EncounterMovesetGenerator.GeneratePKMs(pk7, info); + var la2 = new LegalityAnalysis(test.First()); + Assert.IsTrue(la2.Valid); } private const string SetGlaceonUSUMTutor =