diff --git a/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs b/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs index 85efbc6be..0b5ea661d 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterGenerator.cs @@ -332,6 +332,8 @@ private static IEnumerable GetMatchingStaticEncounters(PKM pkm, { if (e.Nature != Nature.Random && pkm.Nature != (int)e.Nature) continue; + if (pkm.WasEgg ^ e.EggEncounter) + continue; if (pkm.Gen3 && e.EggLocation != 0) // Gen3 Egg { if (pkm.Format == 3 && pkm.IsEgg && e.EggLocation != pkm.Met_Location) diff --git a/PKHeX.Core/Legality/Encounters/EncounterVerifier.cs b/PKHeX.Core/Legality/Encounters/EncounterVerifier.cs index 438c4abdb..af0490c14 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterVerifier.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterVerifier.cs @@ -149,6 +149,9 @@ private static CheckResult VerifyEncounterEggLevelLoc(PKM pkm, int eggLevel, int } private static CheckResult VerifyUnhatchedEgg(PKM pkm, int tradeLoc) { + var eggLevel = pkm.Format < 5 ? 0 : 1; + if (pkm.Met_Level != eggLevel) + return new CheckResult(Severity.Invalid, string.Format(V52, eggLevel), CheckIdentifier.Encounter); if (pkm.Egg_Location == tradeLoc) return new CheckResult(Severity.Invalid, V62, CheckIdentifier.Encounter); diff --git a/PKHeX.Core/Legality/Structures/IEncounterable.cs b/PKHeX.Core/Legality/Structures/IEncounterable.cs index e4eeca08d..23d6c2ddc 100644 --- a/PKHeX.Core/Legality/Structures/IEncounterable.cs +++ b/PKHeX.Core/Legality/Structures/IEncounterable.cs @@ -18,7 +18,11 @@ private static bool IsWithinRange(this IEncounterable encounter, int lvl) public static bool IsWithinRange(this IEncounterable encounter, PKM pkm) { if (pkm.HasOriginalMetLocation) + { + if (encounter.EggEncounter) + return pkm.CurrentLevel == Legal.GetEggHatchLevel(pkm); return pkm.CurrentLevel == pkm.Met_Level; + } return encounter.IsWithinRange(pkm.CurrentLevel); } }