From e52ae0672102d9b035b8e4124cdf9ea212243acf Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 5 Jun 2018 22:20:30 -0700 Subject: [PATCH] Add version check 16 bits for version flags, should be more than enough. should probably rework it from a packed ushort to a class... --- .../Verifiers/MysteryGiftRestriction.cs | 2 +- .../Verifiers/MysteryGiftVerifier.cs | 38 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftRestriction.cs b/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftRestriction.cs index f27d1ccdc..10b8cafe4 100644 --- a/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftRestriction.cs +++ b/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftRestriction.cs @@ -3,7 +3,7 @@ namespace PKHeX.Core { [Flags] - public enum MysteryGiftRestriction : ushort + public enum MysteryGiftRestriction { None = 0, LangJapanese = 1 << LanguageID.Japanese, diff --git a/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftVerifier.cs b/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftVerifier.cs index c5303bce9..c5807985d 100644 --- a/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftVerifier.cs +++ b/PKHeX.Core/Legality/Encounters/Verifiers/MysteryGiftVerifier.cs @@ -21,10 +21,10 @@ public static class MysteryGiftVerifier var resource = RestrictionSetName(generation); var data = Util.GetBinaryResource(resource); var dict = new Dictionary(); - for (int i = 0; i < data.Length; i += 4 + 2) + for (int i = 0; i < data.Length; i += 8) { int hash = BitConverter.ToInt32(data, i + 0); - var restrict = BitConverter.ToUInt16(data, i + 4); + var restrict = BitConverter.ToInt32(data, i + 4); dict.Add(hash, (MysteryGiftRestriction)restrict); } return dict; @@ -36,23 +36,17 @@ public static CheckResult VerifyGift(PKM pk, MysteryGift g) if (!restricted) return new CheckResult(CheckIdentifier.GameOrigin); + var ver = (int)val >> 16; + if (ver != 0 && !CanVersionRecieveGift(g.Format, ver, pk.Version)) + return new CheckResult(Severity.Invalid, V416, CheckIdentifier.GameOrigin); + var lang = val & MysteryGiftRestriction.LangRestrict; - if (lang != 0) - { - var current = 1 << pk.Language; - if (!lang.HasFlagFast((MysteryGiftRestriction) current)) - { - int suggest = lang.GetSuggestedLanguage(); - return new CheckResult(Severity.Invalid, string.Format(V5, suggest, pk.Language), CheckIdentifier.GameOrigin); - } - } + if (lang != 0 && !lang.HasFlagFast((MysteryGiftRestriction) (1 << pk.Language))) + return new CheckResult(Severity.Invalid, string.Format(V5, lang.GetSuggestedLanguage(), pk.Language), CheckIdentifier.GameOrigin); + var region = val & MysteryGiftRestriction.RegionRestrict; - if (region != 0) - { - var current = (int)MysteryGiftRestriction.RegionBase << pk.ConsoleRegion; - if (!region.HasFlagFast((MysteryGiftRestriction)current)) - return new CheckResult(Severity.Invalid, V301, CheckIdentifier.GameOrigin); - } + if (region != 0 && !region.HasFlagFast((MysteryGiftRestriction)((int)MysteryGiftRestriction.RegionBase << pk.ConsoleRegion))) + return new CheckResult(Severity.Invalid, V301, CheckIdentifier.GameOrigin); return new CheckResult(CheckIdentifier.GameOrigin); } @@ -76,6 +70,16 @@ public static bool IsValidChangedOTName(PKM pk, MysteryGift g) return CurrentOTMatchesReplaced(g.Format, pk.OT_Name); } + private static bool CanVersionRecieveGift(int format, int version4bit, int version) + { + switch (format) + { + // todo + default: + return false; + } + } + private static bool CurrentOTMatchesReplaced(int format, string pkOtName) { if (format <= 4 && IsMatchName(pkOtName, 4))