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 }
/// <summary> /// Gets four moves which can be learned depending on the input arguments. /// </summary> /// <param name="analysis">Parse information to generate a moveset for.</param> /// <param name="types">Allowed move sources for populating the result array</param> public static int[] GetSuggestedCurrentMoves(this LegalityAnalysis analysis, MoveSourceType types = MoveSourceType.All) { if (!analysis.Parsed) { return(new int[4]); } var pkm = analysis.pkm; if (pkm.IsEgg && pkm.Format >= 6) { return(pkm.RelearnMoves); } if (pkm.IsEgg) { types = types.ClearNonEggSources(); } var info = analysis.Info; return(GetSuggestedMoves(pkm, info.EvoChainsAllGens, types, info.EncounterOriginal)); }
private static IEnumerable <int> GetValidMoves(PKM pkm, GameVersion version, IReadOnlyList <IReadOnlyList <EvoCriteria> > evoChains, int minLvLG1 = 1, int minLvLG2 = 1, MoveSourceType types = MoveSourceType.Reminder, bool RemoveTransferHM = true) { var r = new List <int> { 0 }; if (types.HasFlagFast(MoveSourceType.RelearnMoves) && pkm.Format >= 6) { r.AddRange(pkm.RelearnMoves); } int start = pkm.Generation; if (start < 0) { start = pkm.Format; // be generous instead of returning nothing } if (pkm is IBattleVersion b) { start = Math.Max(0, b.GetMinGeneration()); } for (int generation = start; generation <= pkm.Format; generation++) { var chain = evoChains[generation]; if (chain.Count == 0) { continue; } r.AddRange(MoveList.GetValidMoves(pkm, version, chain, generation, minLvLG1: minLvLG1, minLvLG2: minLvLG2, types: types, RemoveTransferHM: RemoveTransferHM)); } return(r.Distinct()); }
private static IEnumerable <int> GetValidMoves(PKM pkm, IReadOnlyList <IReadOnlyList <EvoCriteria> > evoChains, MoveSourceType types = MoveSourceType.ExternalSources, bool RemoveTransferHM = true) { GameVersion version = (GameVersion)pkm.Version; if (!pkm.IsUntraded) { version = GameVersion.Any; } return(GetValidMoves(pkm, version, evoChains, minLvLG1: 1, minLvLG2: 1, types: types, RemoveTransferHM: RemoveTransferHM)); }
public static MoveSourceType ClearNonEggSources(this MoveSourceType value) => value & MoveSourceType.Encounter;
public static bool HasFlagFast(this MoveSourceType value, MoveSourceType flag) => (value & flag) != 0;
private static IEnumerable <int> GetValidMoves(PKM pk, GameVersion version, EvolutionHistory evoChains, MoveSourceType types = MoveSourceType.Reminder, bool RemoveTransferHM = true) { var r = new List <int> { 0 }; if (types.HasFlagFast(MoveSourceType.RelearnMoves) && pk.Format >= 6) { r.AddRange(pk.RelearnMoves); } int start = pk.Generation; if (start < 0) { start = pk.Format; // be generous instead of returning nothing } if (pk is IBattleVersion b) { start = Math.Max(0, b.GetMinGeneration()); } for (int generation = start; generation <= pk.Format; generation++) { var chain = evoChains[generation]; if (chain.Length == 0) { continue; } r.AddRange(MoveList.GetValidMoves(pk, version, chain, generation, types: types, RemoveTransferHM: RemoveTransferHM)); } return(r.Distinct()); }
private static IEnumerable <int> GetValidMoves(PKM pk, EvolutionHistory evoChains, MoveSourceType types = MoveSourceType.ExternalSources, bool RemoveTransferHM = true) { var(_, version) = pk.IsMovesetRestricted(); return(GetValidMoves(pk, version, evoChains, types: types, RemoveTransferHM: RemoveTransferHM)); }
private static IEnumerable <int> GetValidMoves(PKM pkm, EvoCriteria[][] evoChains, MoveSourceType types = MoveSourceType.ExternalSources, bool RemoveTransferHM = true) { GameVersion version = (GameVersion)pkm.Version; if (!pkm.IsMovesetRestricted()) { version = GameVersion.Any; } return(GetValidMoves(pkm, version, evoChains, types: types, RemoveTransferHM: RemoveTransferHM)); }