From c066df243f8b801980d7d481dc744ea9986bf0ce Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 26 Jan 2018 09:19:20 -0800 Subject: [PATCH] Misc fixes/updates Fix crystal lacking met level<->current level checks Fix met location loading for gen2 saves (gen7 sav loaded gen1/2 pkm -> load gen2 sav) refactor some logic with pattern matching/consistent method names --- PKHeX.Core/Legality/Analysis.cs | 3 ++- PKHeX.Core/Legality/Checks.cs | 20 ++++++++++++-- .../Legality/Encounters/EncounterFinder.cs | 2 +- .../Legality/Encounters/EncounterGenerator.cs | 4 +-- .../Legality/Encounters/PeekEnumerator.cs | 1 + .../Legality/Encounters/VerifyRelearnMoves.cs | 26 +++++++++---------- .../Controls/PKM Editor/PKMEditor.cs | 5 ++-- 7 files changed, 40 insertions(+), 21 deletions(-) diff --git a/PKHeX.Core/Legality/Analysis.cs b/PKHeX.Core/Legality/Analysis.cs index 2680965a6..a1b985c12 100644 --- a/PKHeX.Core/Legality/Analysis.cs +++ b/PKHeX.Core/Legality/Analysis.cs @@ -139,7 +139,8 @@ private void ParsePK1(PKM pk) VerifyNickname(); VerifyDVs(); VerifyEVs(); - VerifyG1OT(); + VerifyLevelG1(); + VerifyOTG1(); VerifyMiscG1(); } private void ParsePK3(PKM pk) diff --git a/PKHeX.Core/Legality/Checks.cs b/PKHeX.Core/Legality/Checks.cs index 365d46173..152ab18bc 100644 --- a/PKHeX.Core/Legality/Checks.cs +++ b/PKHeX.Core/Legality/Checks.cs @@ -628,7 +628,7 @@ private void VerifyOT() AddLine(Severity.Fishy, V417, CheckIdentifier.Trainer); if (pkm.VC) - VerifyG1OT(); + VerifyOTG1(); if (Legal.CheckWordFilter) { @@ -638,7 +638,7 @@ private void VerifyOT() AddLine(Severity.Invalid, $"Wordfilter: {bad}", CheckIdentifier.Trainer); } } - private void VerifyG1OT() + private void VerifyOTG1() { string tr = pkm.OT_Name; @@ -907,6 +907,22 @@ private void VerifyLevel() AddLine(Severity.Fishy, V87, CheckIdentifier.Level); else AddLine(Severity.Valid, V88, CheckIdentifier.Level); + } + private void VerifyLevelG1() + { + if (pkm.IsEgg) + { + int elvl = Legal.GetEggHatchLevel(pkm); + if (elvl != pkm.CurrentLevel) + AddLine(Severity.Invalid, string.Format(V52, elvl), CheckIdentifier.Level); + return; + } + if (pkm.Met_Location != 0) // crystal + { + int lvl = pkm.CurrentLevel; + if (lvl < pkm.Met_Level) + AddLine(Severity.Invalid, V85, CheckIdentifier.Level); + } // There is no way to prevent a gen1 trade evolution as held items (everstone) did not exist. // Machoke, Graveler, Haunter and Kadabra captured in the second phase evolution, excluding in-game trades, are already checked diff --git a/PKHeX.Core/Legality/Encounters/EncounterFinder.cs b/PKHeX.Core/Legality/Encounters/EncounterFinder.cs index 544de7775..92949b748 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterFinder.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterFinder.cs @@ -25,7 +25,7 @@ public static LegalInfo FindVerifiedEncounter(PKM pkm) LegalInfo info = new LegalInfo(pkm); var encounters = EncounterGenerator.GetEncounters(pkm, info); - using (var encounter = new PeekEnumerator(encounters.GetEnumerator())) + using (var encounter = new PeekEnumerator(encounters)) { if (!encounter.PeekIsNext()) return VerifyWithoutEncounter(pkm, info); diff --git a/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs b/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs index 591cac188..63be5e2e6 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs @@ -182,8 +182,8 @@ private static IEnumerable GenerateRawEncounters12(PKM pkm, Gam private static IEnumerable GenerateFilteredEncounters(PKM pkm) { bool crystal = pkm.Format == 2 && pkm.Met_Location != 0 || pkm.Format >= 7 && pkm.OT_Gender == 1; - var g1i = new PeekEnumerator(get1().GetEnumerator()); - var g2i = new PeekEnumerator(get2().GetEnumerator()); + var g1i = new PeekEnumerator(get1()); + var g2i = new PeekEnumerator(get2()); var deferred = new List(); while (g2i.PeekIsNext() || g1i.PeekIsNext()) { diff --git a/PKHeX.Core/Legality/Encounters/PeekEnumerator.cs b/PKHeX.Core/Legality/Encounters/PeekEnumerator.cs index da06736bc..70291d10f 100644 --- a/PKHeX.Core/Legality/Encounters/PeekEnumerator.cs +++ b/PKHeX.Core/Legality/Encounters/PeekEnumerator.cs @@ -43,6 +43,7 @@ public void Reset() #endregion public PeekEnumerator(IEnumerator enumerator) => Enumerator = enumerator ?? throw new ArgumentNullException(nameof(enumerator)); + public PeekEnumerator(IEnumerable enumerable) => Enumerator = enumerable.GetEnumerator(); /// /// Fetch the next element, if not already performed. diff --git a/PKHeX.Core/Legality/Encounters/VerifyRelearnMoves.cs b/PKHeX.Core/Legality/Encounters/VerifyRelearnMoves.cs index af5a2be6d..53d43ba6b 100644 --- a/PKHeX.Core/Legality/Encounters/VerifyRelearnMoves.cs +++ b/PKHeX.Core/Legality/Encounters/VerifyRelearnMoves.cs @@ -16,19 +16,19 @@ public static CheckResult[] VerifyRelearn(PKM pkm, LegalInfo info) if (info.Generation < 6 || pkm.VC1) return VerifyRelearnNone(pkm, info); - if (info.EncounterMatch is EncounterLink l) - return VerifyRelearnSpecifiedMoveset(pkm, info, l.RelearnMoves); - if (info.EncounterMatch is MysteryGift g) - return VerifyRelearnSpecifiedMoveset(pkm, info, g.RelearnMoves); - if (info.EncounterMatch is EncounterStatic s) - return VerifyRelearnSpecifiedMoveset(pkm, info, s.Relearn); - - if (info.EncounterMatch is EncounterEgg e) - return VerifyRelearnEggBase(pkm, info, e); - - if (pkm.RelearnMove1 != 0 && info.EncounterMatch is EncounterSlot z && z.Permissions.DexNav && EncounterGenerator.IsDexNavValid(pkm)) - return VerifyRelearnDexNav(pkm, info); - + switch (info.EncounterMatch) + { + case EncounterLink l: + return VerifyRelearnSpecifiedMoveset(pkm, info, l.RelearnMoves); + case MysteryGift g: + return VerifyRelearnSpecifiedMoveset(pkm, info, g.RelearnMoves); + case EncounterStatic s: + return VerifyRelearnSpecifiedMoveset(pkm, info, s.Relearn); + case EncounterEgg e: + return VerifyRelearnEggBase(pkm, info, e); + case EncounterSlot z when pkm.RelearnMove1 != 0 && z.Permissions.DexNav && EncounterGenerator.IsDexNavValid(pkm): + return VerifyRelearnDexNav(pkm, info); + } return VerifyRelearnNone(pkm, info); } diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index 300cd09d3..e650ab0e8 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -1261,10 +1261,11 @@ private void UpdateSpecies(object sender, EventArgs e) private void UpdateOriginGame(object sender, EventArgs e) { GameVersion Version = (GameVersion)WinFormsUtil.GetIndex(CB_GameOrigin); - // check if differs GameVersion newTrack = GameUtil.GetMetLocationVersionGroup(Version); - if (pkm.Format < 3) + if (newTrack == GameVersion.GSC && pkm.Format >= 7) + newTrack = GameVersion.USUM; + else if (pkm.Format < 3) newTrack = GameVersion.GSC; if (newTrack != origintrack) {