protected override void SetEncounterMoves(PKM pk, GameVersion version, int level) { var moves = MoveLevelUp.GetEncounterMoves(pk, level, OriginGroup); pk.SetMoves(moves); pk.SetMaximumPPCurrent(moves); }
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 }
private static int[] GetMinLevelLearnMoveG1(int species, List <int> moves) { var result = new int[moves.Count]; for (int i = 0; i < result.Length; i++) { result[i] = MoveLevelUp.GetIsLevelUp1(species, moves[i], 100, 0, 0).Level; } return(result); }
/// <summary> /// Resets the <see cref="PKM"/>'s moves and sets the requested version. /// </summary> /// <param name="v">Reference to the object to set the <see cref="version"/></param> /// <param name="pk">Reference to the same object that gets moves reset</param> /// <param name="version">Version to apply</param> public static void AdaptToBattleVersion(this IBattleVersion v, PKM pk, GameVersion version) { var moves = MoveLevelUp.GetEncounterMoves(pk, pk.CurrentLevel, version); pk.Move1 = pk.Move2 = pk.Move3 = pk.Move4 = 0; pk.RelearnMove1 = pk.RelearnMove2 = pk.RelearnMove3 = pk.RelearnMove4 = 0; pk.SetMoves(moves); pk.FixMoves(); v.BattleVersion = (int)version; }
private static List <int>[] GetExclusiveMovesG1(int species1, int species2, IEnumerable <int> tmhm, IEnumerable <int> moves) { // Return from two species the exclusive moves that only one could learn and also the current pokemon have it in its current moveset var moves1 = MoveLevelUp.GetMovesLevelUp1(species1, 0, 1, 100); var moves2 = MoveLevelUp.GetMovesLevelUp1(species2, 0, 1, 100); // Remove common moves and remove tmhm, remove not learned moves var common = new HashSet <int>(moves1.Intersect(moves2).Concat(tmhm)); var hashMoves = new HashSet <int>(moves); moves1.RemoveAll(x => !hashMoves.Contains(x) || common.Contains(x)); moves2.RemoveAll(x => !hashMoves.Contains(x) || common.Contains(x)); return(new[] { moves1, moves2 }); }
private static int[] GetNeededMoves(PKM pk, IEnumerable <int> moves, EvoCriteria[] chain) { if (pk.Species == (int)Species.Smeargle) { return(moves.Where(z => !Legal.IsValidSketch(z, pk.Format)).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 = GenerationTraversal.GetVisitedGenerationOrder(pk, origin); var canlearn = gens.SelectMany(z => GetMovesForGeneration(pk, chain, z)); if (origin is (1 or 2)) // gb initial moves { var max = origin == 1 ? Legal.MaxSpeciesID_1 : Legal.MaxSpeciesID_2; foreach (var evo in chain) { var species = evo.Species; if (species > max) { continue; } var enc = MoveLevelUp.GetEncounterMoves(species, 0, 1, (GameVersion)ver); canlearn = canlearn.Concat(enc); } } var result = moves.Where(z => z != 0).Except(canlearn).ToArray(); if (vcBump) { pk.Version = ver; } return(result); }
private static List <int> GetRequiredMoveCountLevel(PKM pk) { int species = pk.Species; int basespecies = EvoBase.GetBaseSpecies(pk).Species; int maxlevel = 1; int minlevel = 1; if (species == (int)Species.Tangela) // Tangela moves before level 32 are different in RB vs Y { minlevel = 32; maxlevel = pk.CurrentLevel; } else if ((int)Species.NidoranF <= species && species <= (int)Species.Nidoking && pk.CurrentLevel >= 8) { maxlevel = 8; // Always learns a third move at level 8 } if (minlevel > pk.CurrentLevel) { return(new List <int>()); } return(MoveLevelUp.GetMovesLevelUp1(basespecies, 0, maxlevel, minlevel)); }