private static void ParseShedinjaEvolveMoves(PKM pkm, IList <CheckMoveResult> res, int[] moves) { var ShedinjaEvoMovesLearned = new List <int>(); for (int gen = Math.Min(pkm.Format, 4); gen >= 3; gen--) { var ninjaskMoves = Legal.GetShedinjaEvolveMoves(pkm, generation: gen); bool native = gen == pkm.Format; for (int m = 0; m < 4; m++) { if (IsCheckValid(res[m])) // already validated { continue; } if (!ninjaskMoves.Contains(moves[m])) { continue; } res[m] = new CheckMoveResult(MoveSource.ShedinjaEvo, gen, Severity.Valid, native ? V355 : string.Format(V356, gen), CheckIdentifier.Move); ShedinjaEvoMovesLearned.Add(m); } } if (ShedinjaEvoMovesLearned.Count == 0) { return; } if (ShedinjaEvoMovesLearned.Count > 1) { // Can't have more than one Ninjask exclusive move on Shedinja foreach (int m in ShedinjaEvoMovesLearned) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, V357, CheckIdentifier.Move); } return; } // Double check that the Ninjask move level isn't less than any Nincada move level int move = ShedinjaEvoMovesLearned[0]; int g = res[move].Generation; int levelJ = Legal.GetShedinjaMoveLevel(291, moves[move], g); for (int m = 0; m < 4; m++) { if (m != move) { continue; } if (res[m].Source != MoveSource.LevelUp) { continue; } int levelS = Legal.GetShedinjaMoveLevel(292, moves[m], res[m].Generation); if (levelS > 0) { continue; } int levelN = Legal.GetShedinjaMoveLevel(290, moves[m], res[m].Generation); if (levelN > levelJ) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, string.Format(V366, SpeciesStrings[290], SpeciesStrings[291]), CheckIdentifier.Move); } } }
private static void ParseShedinjaEvolveMoves(PKM pkm, IList <CheckMoveResult> res, int[] moves, IReadOnlyList <IReadOnlyList <EvoCriteria> > evos) { var ShedinjaEvoMovesLearned = new List <int>(); var format = pkm.Format; for (int gen = Math.Min(format, 4); gen >= 3; gen--) { if (evos[gen].Count != 2) { continue; // Was not evolved in this generation } if (gen == 4 && pkm.Ball != 4) { continue; // Was definitively evolved in Gen3 } var maxLevel = pkm.CurrentLevel; var ninjaskMoves = Legal.GetShedinjaEvolveMoves(pkm, gen, maxLevel); bool native = gen == format; for (int m = 0; m < 4; m++) { if (IsCheckValid(res[m])) // already validated { continue; } if (!ninjaskMoves.Contains(moves[m])) { continue; } var msg = native ? LMoveNincadaEvo : string.Format(LMoveNincadaEvoF_0, gen); res[m] = new CheckMoveResult(ShedinjaEvo, gen, Valid, msg, Move); ShedinjaEvoMovesLearned.Add(m); } } if (ShedinjaEvoMovesLearned.Count == 0) { return; } if (ShedinjaEvoMovesLearned.Count > 1) { // Can't have more than one Ninjask exclusive move on Shedinja foreach (int m in ShedinjaEvoMovesLearned) { res[m] = new CheckMoveResult(res[m], Invalid, LMoveNincada, Move); } return; } // Double check that the Ninjask move level isn't less than any Nincada move level int move = ShedinjaEvoMovesLearned[0]; int g = res[move].Generation; int levelJ = Legal.GetShedinjaMoveLevel((int)Species.Ninjask, moves[move], g); for (int m = 0; m < 4; m++) { if (m != move) { continue; } if (res[m].Source != LevelUp) { continue; } int levelS = Legal.GetShedinjaMoveLevel((int)Species.Shedinja, moves[m], res[m].Generation); if (levelS > 0) { continue; } int levelN = Legal.GetShedinjaMoveLevel((int)Species.Nincada, moves[m], res[m].Generation); if (levelN > levelJ) { res[m] = new CheckMoveResult(res[m], Invalid, string.Format(LMoveEvoFHigher, SpeciesStrings[(int)Species.Nincada], SpeciesStrings[(int)Species.Ninjask]), Move); } } }