diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterTrade4RanchGift.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterTrade4RanchGift.cs index 69ad3eba7..d057bf17c 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterTrade4RanchGift.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterTrade4RanchGift.cs @@ -80,6 +80,7 @@ public PK4 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) var pk = new PK4 { Species = Species, + Form = Form, CurrentLevel = actualLevel, Met_Location = Location, Met_Level = Level, @@ -126,11 +127,13 @@ private void SetPINGA(PK4 pk, EncounterCriteria criteria) public bool IsMatchExact(PKM pk, EvoCriteria evo) { - if (pk.Met_Level != Level) + if (!IsMatchLevel(pk, evo)) + return false; + if (pk.ID32 != ID32) return false; if (!IsMatchNatureGenderShiny(pk)) return false; - if (pk.ID32 != ID32) + if (!IsMatchLocation(pk)) return false; if (evo.Form != Form && !FormInfo.IsFormChangeable(Species, Form, pk.Form, Context, pk.Context)) return false; @@ -143,6 +146,26 @@ public bool IsMatchExact(PKM pk, EvoCriteria evo) return true; } + private bool IsMatchLocation(PKM pk) + { + // Met location is lost on transfer + if (pk is not G4PKM pk4) + return true; + + var met = pk4.Met_Location; + return met == Location; + } + + private bool IsMatchLevel(PKM pk, EvoCriteria evo) + { + if (pk.Format != 4) // Met Level lost on PK4=>PK5 + return evo.LevelMax >= Level; + + if (MetLocation != default) + return pk.Met_Level == Level; + return pk.Met_Level >= LevelMin; + } + private bool IsMatchNatureGenderShiny(PKM pk) { if (pk.Gender != Gender)