From cd29b5f8f098bbfae08aaafcbb77c5a464d382e9 Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 10 Nov 2016 19:29:00 -0800 Subject: [PATCH] Add encountertrades --- PKHeX/Legality/Checks.cs | 13 ++++++++++++- PKHeX/Legality/Core.cs | 15 +++++++++++---- PKHeX/Legality/Structures/EncounterTrade.cs | 1 + PKHeX/Legality/Tables7.cs | 10 ++++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/PKHeX/Legality/Checks.cs b/PKHeX/Legality/Checks.cs index 951ebc491..c475f63d9 100644 --- a/PKHeX/Legality/Checks.cs +++ b/PKHeX/Legality/Checks.cs @@ -179,6 +179,12 @@ private void verifyNickname() validOT = Legal.TradeAO[pkm.Language]; index = Array.IndexOf(Legal.TradeGift_AO, EncounterMatch); } + else if (pkm.SM) + { + // TODO + AddLine(Severity.Valid, "Ingame Trade for Sun/Moon un-implemented.", CheckIdentifier.EVs); + return; + } if (validOT.Length == 0) { @@ -206,7 +212,7 @@ private void verifyNickname() if (pkm.IsEgg) { - if (!pkm.IsNicknamed) + if (!pkm.IsNicknamed && (pkm.Format != 7)) AddLine(Severity.Invalid, "Eggs must be nicknamed.", CheckIdentifier.EVs); else if (PKX.SpeciesLang[pkm.Language][0] != pkm.Nickname) AddLine(Severity.Invalid, "Egg name does not match language Egg name.", CheckIdentifier.EVs); @@ -868,6 +874,11 @@ private CheckResult verifyHistory() if (pkm.CurrentHandler != 1) return new CheckResult(Severity.Invalid, "Current handler should not be Event OT.", CheckIdentifier.History); } + if (EncounterType == typeof (EncounterTrade) && pkm.Format == 7) + { + // TODO + return new CheckResult(Severity.Valid, "S/M History Block check skipped.", CheckIdentifier.History); + } if (!pkm.WasEvent && !(pkm.WasLink && (EncounterMatch as EncounterLink)?.OT == false) && (pkm.HT_Name.Length == 0 || pkm.Geo1_Country == 0)) // Is not Traded { if (pkm.HT_Name.Length != 0) diff --git a/PKHeX/Legality/Core.cs b/PKHeX/Legality/Core.cs index 8c39357b3..6f76deb42 100644 --- a/PKHeX/Legality/Core.cs +++ b/PKHeX/Legality/Core.cs @@ -252,16 +252,21 @@ internal static EncounterTrade getValidIngameTrade(PKM pkm) if (!pkm.WasIngameTrade) return null; int lang = pkm.Language; - if (lang == 0) + if (lang == 0 || lang == 6) return null; // Get valid pre-evolutions IEnumerable p = getValidPreEvolutions(pkm); - EncounterTrade z = null; + + EncounterTrade[] table = null; if (pkm.XY) - z = lang == 6 ? null : TradeGift_XY.FirstOrDefault(f => p.Any(r => r.Species == f.Species)); + table = TradeGift_XY; if (pkm.AO) - z = lang == 6 ? null : TradeGift_AO.FirstOrDefault(f => p.Any(r => r.Species == f.Species)); + table = TradeGift_AO; + if (pkm.SM) + table = TradeGift_SM; + + EncounterTrade z = table?.FirstOrDefault(f => p.Any(r => r.Species == f.Species)); if (z == null) return null; @@ -284,6 +289,8 @@ internal static EncounterTrade getValidIngameTrade(PKM pkm) return null; if (z.Gender != pkm.Gender) return null; + if (z.OTGender != -1 && z.OTGender != pkm.OT_Gender) + return null; // if (z.Ability == 4 ^ pkm.AbilityNumber == 4) // defer to Ability // return null; diff --git a/PKHeX/Legality/Structures/EncounterTrade.cs b/PKHeX/Legality/Structures/EncounterTrade.cs index a2a1013ae..80452855a 100644 --- a/PKHeX/Legality/Structures/EncounterTrade.cs +++ b/PKHeX/Legality/Structures/EncounterTrade.cs @@ -15,5 +15,6 @@ public class EncounterTrade public int Form = 0; public bool Shiny = false; public int Gender = -1; + public int OTGender = -1; } } diff --git a/PKHeX/Legality/Tables7.cs b/PKHeX/Legality/Tables7.cs index 115a2b4c5..1e110d4b2 100644 --- a/PKHeX/Legality/Tables7.cs +++ b/PKHeX/Legality/Tables7.cs @@ -249,6 +249,16 @@ public static partial class Legal // Trades - 4.bin }; + internal static EncounterTrade[] TradeGift_SM = + { + new EncounterTrade { Species = 066, Form = 0, Level = 09, Ability = 2, TID = 00410, SID = 00000, OTGender = 1, Gender = 0, Nature = Nature.Brave, }, // Machop + new EncounterTrade { Species = 761, Form = 0, Level = 16, Ability = 1, TID = 20683, SID = 00009, OTGender = 0, Gender = 1, Nature = Nature.Adamant, }, // Bounsweet + new EncounterTrade { Species = 061, Form = 0, Level = 22, Ability = 2, TID = 01092, SID = 00009, OTGender = 1, Gender = 1, Nature = Nature.Naughty, }, // Poliwhirl + new EncounterTrade { Species = 440, Form = 0, Level = 27, Ability = 2, TID = 10913, SID = 00000, OTGender = 1, Gender = 1, Nature = Nature.Calm, }, // Happiny + new EncounterTrade { Species = 075, Form = 1, Level = 32, Ability = 1, TID = 20778, SID = 00009, OTGender = 0, Gender = 0, Nature = Nature.Impish, }, // Graveler-1 + new EncounterTrade { Species = 762, Form = 0, Level = 43, Ability = 1, TID = 20679, SID = 00009, OTGender = 1, Gender = 1, Nature = Nature.Careful, }, // Steenee + new EncounterTrade { Species = 663, Form = 0, Level = 59, Ability = 4, TID = 56734, SID = 00008, OTGender = 0, Gender = 0, Nature = Nature.Jolly, }, // Talonflame + }; #endregion private static readonly int[] WildPokeballs7 = {