public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; var EncounterMatch = data.EncounterMatch; var evs = pkm.EVs; int sum = pkm.EVTotal; if (sum > 0 && pkm.IsEgg) { data.AddLine(GetInvalid(V22)); } if (pkm.Format >= 3 && sum > 510) { data.AddLine(GetInvalid(V25)); } if (pkm.Format >= 6 && evs.Any(ev => ev > 252)) { data.AddLine(GetInvalid(V26)); } if (pkm.Format == 4 && pkm.Gen4 && EncounterMatch.LevelMin == 100) { // Cannot EV train at level 100 -- Certain events are distributed at level 100. if (evs.Any(ev => ev > 100)) // EVs can only be increased by vitamins to a max of 100. { data.AddLine(GetInvalid(V367)); } } else if (pkm.Format < 5) { // In Generations I and II, when a Pokémon is taken out of the Day Care, its experience will lower to the minimum value for its current level. if (pkm.Format < 3) // can abuse daycare for EV training without EXP gain { return; } const int maxEV = 100; // Vitamin Max if (PKX.GetEXP(EncounterMatch.LevelMin, pkm.Species) == pkm.EXP && evs.Any(ev => ev > maxEV)) { data.AddLine(GetInvalid(string.Format(V418, maxEV))); } } // Only one of the following can be true: 0, 508, and x%6!=0 if (sum == 0 && !EncounterMatch.IsWithinRange(pkm)) { data.AddLine(Get(V23, Severity.Fishy)); } else if (sum == 508) { data.AddLine(Get(V24, Severity.Fishy)); } else if (evs[0] != 0 && evs.All(ev => evs[0] == ev)) { data.AddLine(Get(V27, Severity.Fishy)); } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; var EncounterMatch = data.EncounterMatch; if (EncounterMatch is MysteryGift gift) { if (gift.Level != pkm.Met_Level && pkm.HasOriginalMetLocation) { switch (gift) { case WC3 wc3 when wc3.Met_Level == pkm.Met_Level || wc3.IsEgg: break; case WC7 wc7 when wc7.MetLevel == pkm.Met_Level: break; default: data.AddLine(GetInvalid(V83)); return; } } if (gift.Level > pkm.CurrentLevel) { data.AddLine(GetInvalid(V84)); return; } } if (pkm.IsEgg) { int elvl = Legal.GetEggHatchLevel(pkm); if (elvl != pkm.CurrentLevel) { data.AddLine(GetInvalid(string.Format(V52, elvl))); } return; } int lvl = pkm.CurrentLevel; if (lvl < pkm.Met_Level) { data.AddLine(GetInvalid(V85)); } else if (!EncounterMatch.IsWithinRange(pkm) && lvl != 100 && pkm.EXP == PKX.GetEXP(lvl, pkm.Species)) { data.AddLine(Get(V87, Severity.Fishy)); } else { data.AddLine(GetValid(V88)); } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; var EncounterMatch = data.EncounterOriginal; if (EncounterMatch is MysteryGift gift) { if (gift.Level != pkm.Met_Level && pkm.HasOriginalMetLocation) { switch (gift) { case WC3 wc3 when wc3.Met_Level == pkm.Met_Level || wc3.IsEgg: break; case WC7 wc7 when wc7.MetLevel == pkm.Met_Level: break; default: data.AddLine(GetInvalid(LLevelMetGift)); return; } } if (gift.Level > pkm.CurrentLevel) { data.AddLine(GetInvalid(LLevelMetGiftFail)); return; } } if (pkm.IsEgg) { int elvl = Legal.GetEggHatchLevel(pkm); if (elvl != pkm.CurrentLevel) { data.AddLine(GetInvalid(string.Format(LEggFMetLevel_0, elvl))); return; } var reqEXP = EncounterMatch is EncounterStatic s && s.Version == GameVersion.C ? 125 // Gen2 Dizzy Punch gifts always have 125 EXP, even if it's more than the Lv5 exp required. : PKX.GetEXP(elvl, pkm.Species); if (reqEXP != pkm.EXP) { data.AddLine(GetInvalid(LEggEXP)); } return; } int lvl = pkm.CurrentLevel; if (lvl < pkm.Met_Level) { data.AddLine(GetInvalid(LLevelMetBelow)); } else if (!EncounterMatch.IsWithinRange(pkm) && lvl != 100 && pkm.EXP == PKX.GetEXP(lvl, pkm.Species)) { data.AddLine(Get(LLevelEXPThreshold, Severity.Fishy)); } else { data.AddLine(GetValid(LLevelMetSane)); } }