private static int[] GetNeededMoves(PKM pk, IEnumerable <int> moves, IReadOnlyList <EvoCriteria> chain) { if (pk.Species == (int)Species.Smeargle) { return(moves.Intersect(Legal.InvalidSketch).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 = VerifyCurrentMoves.GetGenMovesCheckOrder(pk, origin); var canlearn = gens.SelectMany(z => GetMovesForGeneration(pk, chain, z)); var result = moves.Except(canlearn).Where(z => z != 0).ToArray(); if (vcBump) { pk.Version = ver; } return(result); }
private static int[] GetNeededMoves(PKM pk, IEnumerable <int> moves, IReadOnlyList <EvoCriteria> dl) { if (pk.Species == 235) // Smeargle { return(moves.Intersect(Legal.InvalidSketch).ToArray()); // Can learn anything } var gens = VerifyCurrentMoves.GetGenMovesCheckOrder(pk); var canlearn = gens.SelectMany(z => Legal.GetValidMoves(pk, dl, z)); return(moves.Except(canlearn).ToArray()); }
/// <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="version">Specific version to iterate for.</param> /// <returns>A consumable <see cref="IEncounterable"/> list of possible encounters.</returns> public static IEnumerable <IEncounterable> GenerateVersionEncounters(PKM pk, IEnumerable <int> moves, GameVersion version) { pk.Version = (int)version; var et = EvolutionTree.GetEvolutionTree(PKX.Generation); var dl = et.GetValidPreEvolutions(pk, maxLevel: 100, skipChecks: true); var gens = VerifyCurrentMoves.GetGenMovesCheckOrder(pk); var canlearn = gens.SelectMany(z => Legal.GetValidMoves(pk, dl, z)); var needs = moves.Except(canlearn).ToArray(); foreach (var enc in GetPossible(pk, needs, version)) { yield return(enc); } }
private static int[] GetNeededMoves(PKM pk, IEnumerable <int> moves, IReadOnlyList <EvoCriteria> chain) { if (pk.Species == (int)Species.Smeargle) { return(moves.Intersect(Legal.InvalidSketch).ToArray()); // Can learn anything } // Roughly determine the generation the PKM is originating from int origin = pk.GenNumber; if (origin < 0) { origin = ((GameVersion)pk.Version).GetGeneration(); } var gens = VerifyCurrentMoves.GetGenMovesCheckOrder(pk, origin); var canlearn = gens.SelectMany(z => GetMovesForGeneration(pk, chain, z)); return(moves.Except(canlearn).Where(z => z != 0).ToArray()); }