private static bool GetIsMatchWC7(PKM pkm, WC7 wc, IEnumerable <DexLevel> vs) { if (pkm.Egg_Location == 0) // Not Egg { if (wc.OTGender != 3) { if (wc.SID != pkm.SID) { return(false); } if (wc.TID != pkm.TID) { return(false); } if (wc.OTGender != pkm.OT_Gender) { return(false); } } if (!string.IsNullOrEmpty(wc.OT_Name) && wc.OT_Name != pkm.OT_Name) { return(false); } if (wc.OriginGame != 0 && wc.OriginGame != pkm.Version) { return(false); } if (wc.EncryptionConstant != 0 && wc.EncryptionConstant != pkm.EncryptionConstant) { return(false); } if (wc.Language != 0 && wc.Language != pkm.Language) { return(false); } } if (wc.Form != pkm.AltForm && vs.All(dl => !IsFormChangeable(pkm, dl.Species))) { if (wc.Species == 744 && wc.Form == 1 && pkm.Species == 745 && pkm.AltForm == 2) { // Rockruff gift edge case; has altform 1 then evolves to altform 2 } else { return(false); } } if (wc.IsEgg) { if (wc.EggLocation != pkm.Egg_Location) // traded { if (pkm.Egg_Location != 30002) { return(false); } } else if (wc.PIDType == 0 && pkm.IsShiny) { return(false); // can't be traded away for unshiny } if (pkm.IsEgg && !pkm.IsNative) { return(false); } } else { if (!wc.PIDType.IsValid(pkm)) { return(false); } if (wc.EggLocation != pkm.Egg_Location) { return(false); } if (wc.MetLocation != pkm.Met_Location) { return(false); } } if (wc.MetLevel != pkm.Met_Level) { return(false); } if (wc.Ball != pkm.Ball) { return(false); } if (wc.OTGender < 3 && wc.OTGender != pkm.OT_Gender) { return(false); } if (wc.Nature != 0xFF && wc.Nature != pkm.Nature) { return(false); } if (wc.Gender != 3 && wc.Gender != pkm.Gender) { return(false); } if (pkm.IsContestBelow(wc)) { return(false); } switch (wc.CardID) { case 1624: // Rockruff if (pkm.Species == 745 && pkm.AltForm != 2) { return(false); } if (pkm.Version == (int)GameVersion.US) { return(wc.Move3 == 424); // Fire Fang } if (pkm.Version == (int)GameVersion.UM) { return(wc.Move3 == 422); // Thunder Fang } return(false); case 2046: // Ash Greninja return(pkm.SM); // not USUM } return(true); }
private static bool GetIsMatchWC6(PKM pkm, WC6 wc, IEnumerable <DexLevel> vs) { if (pkm.Egg_Location == 0) // Not Egg { if (wc.CardID != pkm.SID) { return(false); } if (wc.TID != pkm.TID) { return(false); } if (wc.OT_Name != pkm.OT_Name) { return(false); } if (wc.OTGender != pkm.OT_Gender) { return(false); } if (wc.PIDType == Shiny.FixedValue && pkm.PID != wc.PID) { return(false); } if (!wc.PIDType.IsValid(pkm)) { return(false); } if (wc.OriginGame != 0 && wc.OriginGame != pkm.Version) { return(false); } if (wc.EncryptionConstant != 0 && wc.EncryptionConstant != pkm.EncryptionConstant) { return(false); } if (wc.Language != 0 && wc.Language != pkm.Language) { return(false); } } if (wc.Form != pkm.AltForm && vs.All(dl => !IsFormChangeable(pkm, dl.Species))) { return(false); } if (wc.IsEgg) { if (wc.EggLocation != pkm.Egg_Location) // traded { if (pkm.Egg_Location != 30002) { return(false); } } else if (wc.PIDType == 0 && pkm.IsShiny) { return(false); // can't be traded away for unshiny } if (pkm.IsEgg && !pkm.IsNative) { return(false); } } else { if (wc.EggLocation != pkm.Egg_Location) { return(false); } if (wc.MetLocation != pkm.Met_Location) { return(false); } } if (wc.Level != pkm.Met_Level) { return(false); } if (wc.Ball != pkm.Ball) { return(false); } if (wc.OTGender < 3 && wc.OTGender != pkm.OT_Gender) { return(false); } if (wc.Nature != 0xFF && wc.Nature != pkm.Nature) { return(false); } if (wc.Gender != 3 && wc.Gender != pkm.Gender) { return(false); } if (pkm.IsContestBelow(wc)) { return(false); } return(true); }
private static bool GetIsMatchStatic(PKM pkm, EncounterStatic e, int lvl) { if (e.Nature != Nature.Random && pkm.Nature != (int)e.Nature) { return(false); } if (pkm.WasEgg != e.EggEncounter && pkm.Egg_Location == 0 && pkm.Format > 3 && pkm.GenNumber > 3 && !pkm.IsEgg) { return(false); } if (e is EncounterStaticPID p && p.PID != pkm.PID) { return(false); } if (pkm.Gen3 && e.EggLocation != 0) // Gen3 Egg { if (pkm.Format == 3 && pkm.IsEgg && e.EggLocation != pkm.Met_Location) { return(false); } } else if (pkm.VC || pkm.GenNumber <= 2 && e.EggLocation != 0) // Gen2 Egg { if (pkm.Format <= 2) { if (pkm.IsEgg) { if (pkm.Met_Location != 0 && pkm.Met_Level != 0) { return(false); } } else { switch (pkm.Met_Level) { case 0 when pkm.Met_Location != 0: return(false); case 1 when pkm.Met_Location == 0: return(false); default: if (pkm.Met_Location == 0 && pkm.Met_Level != 0) { return(false); } break; } } if (pkm.Met_Level == 1) { lvl = 5; // met @ 1, hatch @ 5. } } } else if (e.EggLocation != pkm.Egg_Location) { if (pkm.IsEgg) // unhatched { if (e.EggLocation != pkm.Met_Location) { return(false); } if (pkm.Egg_Location != 0) { return(false); } } else if (pkm.Gen4) { if (pkm.Egg_Location != 2002) // Link Trade { // check Pt/HGSS data if (pkm.Format <= 4) { return(false); // must match } if (e.EggLocation >= 3000 || e.EggLocation <= 2010) // non-Pt/HGSS egg gift { return(false); } // transferring 4->5 clears pt/hgss location value and keeps Faraway Place if (pkm.Egg_Location != 3002) // Faraway Place { return(false); } } } else { if (pkm.Egg_Location != 30002) // Link Trade { return(false); } } } else if (e.EggLocation != 0 && pkm.Gen4) { // Check the inverse scenario for 4->5 eggs if (e.EggLocation < 3000 && e.EggLocation > 2010) // Pt/HGSS egg gift { if (pkm.Format > 4) { return(false); // locations match when it shouldn't } } } if (pkm.HasOriginalMetLocation) { if (!e.EggEncounter && e.Location != 0 && e.Location != pkm.Met_Location) { return(false); } if (e.Level != lvl) { if (!(pkm.Format == 3 && e.EggEncounter && lvl == 0)) { return(false); } } } else if (e.Level > lvl) { return(false); } if (e.Gender != -1 && e.Gender != pkm.Gender) { return(false); } if (e.Form != pkm.AltForm && !e.SkipFormCheck && !IsFormChangeable(pkm, e.Species)) { return(false); } if (e.EggLocation == 60002 && e.Relearn[0] == 0 && pkm.RelearnMoves.Any(z => z != 0)) // gen7 eevee edge case { return(false); } if (e.IVs != null && (e.Generation > 2 || pkm.Format <= 2)) // 1,2->7 regenerates IVs, only check if original IVs still exist { for (int i = 0; i < 6; i++) { if (e.IVs[i] != -1 && e.IVs[i] != pkm.IVs[i]) { return(false); } } } if (pkm.IsContestBelow(e)) { return(false); } // Defer to EC/PID check // if (e.Shiny != null && e.Shiny != pkm.IsShiny) // continue; // Defer ball check to later // if (e.Gift && pkm.Ball != 4) // PokéBall // continue; if (pkm is PK1 pk1 && pk1.Gen1_NotTradeback && !IsValidCatchRatePK1(e, pk1)) { return(false); } if (!AllowGBCartEra && GameVersion.GBCartEraOnly.Contains(e.Version)) { return(false); } return(true); }
private static bool GetIsMatchPCD(PKM pkm, PKM wc, IEnumerable <DexLevel> vs) { if (!wc.IsEgg) { if (wc.TID != pkm.TID) { return(false); } if (wc.SID != pkm.SID) { return(false); } if (wc.OT_Name != pkm.OT_Name) { return(false); } if (wc.OT_Gender != pkm.OT_Gender) { return(false); } if (wc.Language != 0 && wc.Language != pkm.Language) { return(false); } if (pkm.Format != 4) // transferred { // met location: deferred to general transfer check if (wc.CurrentLevel > pkm.Met_Level) { return(false); } } else { if (wc.Egg_Location + 3000 != pkm.Met_Location) { return(false); } if (wc.CurrentLevel != pkm.Met_Level) { return(false); } } } else // Egg { if (wc.Egg_Location + 3000 != pkm.Egg_Location && pkm.Egg_Location != 2002) // traded { return(false); } if (wc.CurrentLevel != pkm.Met_Level) { return(false); } if (pkm.IsEgg && !pkm.IsNative) { return(false); } } if (wc.AltForm != pkm.AltForm && vs.All(dl => !IsFormChangeable(pkm, dl.Species))) { return(false); } if (wc.Ball != pkm.Ball) { return(false); } if (wc.OT_Gender < 3 && wc.OT_Gender != pkm.OT_Gender) { return(false); } if (wc.PID == 1 && pkm.IsShiny) { return(false); } if (wc.Gender != 3 && wc.Gender != pkm.Gender) { return(false); } if (pkm.IsContestBelow(wc)) { return(false); } return(true); }
private static bool IsEncounterTradeValid(PKM pkm, EncounterTrade z, int lvl) { if (z.IVs != null) { for (int i = 0; i < 6; i++) { if (z.IVs[i] != -1 && z.IVs[i] != pkm.IVs[i]) { return(false); } } } if (z is EncounterTradePID p) { if (p.PID != pkm.EncryptionConstant) { return(false); } if (z.Nature != Nature.Random && (int)z.Nature != pkm.Nature) // gen5 BW only { return(false); } } else { if (!z.Shiny.IsValid(pkm)) { return(false); } if (z.Nature != Nature.Random && (int)z.Nature != pkm.Nature) { return(false); } if (z.Gender != -1 && z.Gender != pkm.Gender) { return(false); } } if (z.TID != pkm.TID) { return(false); } if (z.SID != pkm.SID) { return(false); } if (pkm.HasOriginalMetLocation) { var loc = z.Location > 0 ? z.Location : EncounterTrade.DefaultMetLocation[z.Generation - 1]; if (loc != pkm.Met_Location) { return(false); } if (pkm.Format < 5) { if (z.Level > lvl) { return(false); } } else if (z.Level != lvl) { return(false); } } else if (z.Level > lvl) { return(false); } if (z.CurrentLevel != -1 && z.CurrentLevel > pkm.CurrentLevel) { return(false); } if (z.Form != pkm.AltForm && !IsFormChangeable(pkm, pkm.Species)) { return(false); } if (z.OTGender != -1 && z.OTGender != pkm.OT_Gender) { return(false); } if (z.EggLocation != pkm.Egg_Location) { return(false); } // if (z.Ability == 4 ^ pkm.AbilityNumber == 4) // defer to Ability // countinue; if (pkm.IsContestBelow(z)) { return(false); } return(true); }