diff --git a/PKHeX/Legality/Analysis.cs b/PKHeX/Legality/Analysis.cs index 2cf4ba21f..02293ec4e 100644 --- a/PKHeX/Legality/Analysis.cs +++ b/PKHeX/Legality/Analysis.cs @@ -75,7 +75,15 @@ public LegalityAnalysis(PKM pk) else return; } - catch { Valid = false; } + catch (Exception e) + { + Console.WriteLine(e.Message); + Valid = false; + Parsed = true; + AddLine(Severity.Invalid, V190, CheckIdentifier.Misc); + AllSuggestedMoves = AllSuggestedRelearnMoves = AllSuggestedMovesAndRelearn = new int[0]; + return; + } AllSuggestedMoves = !pkm.IsOriginValid ? new int[4] : getSuggestedMoves(true, true, true); AllSuggestedRelearnMoves = !pkm.IsOriginValid ? new int[4] : Legal.getValidRelearn(pkm, -1).ToArray(); AllSuggestedMovesAndRelearn = AllSuggestedMoves.Concat(AllSuggestedRelearnMoves).ToArray(); diff --git a/PKHeX/Legality/Checks.cs b/PKHeX/Legality/Checks.cs index 32a86c271..39d08d1b6 100644 --- a/PKHeX/Legality/Checks.cs +++ b/PKHeX/Legality/Checks.cs @@ -891,13 +891,13 @@ private void verifyRibbons() }; if (MatchedGift != null) // Wonder Card { - var mgRibbons = ReflectUtil.getPropertiesStartWithPrefix(MatchedGift.Content.GetType(), "Ribbon"); + var mgRibbons = MatchedGift.Format == 4 ? EventRib : ReflectUtil.getPropertiesStartWithPrefix(MatchedGift.Content.GetType(), "Ribbon"); var commonRibbons = mgRibbons.Intersect(RibbonData).ToArray(); foreach (string r in commonRibbons) { bool? pk = ReflectUtil.getBooleanState(pkm, r); - bool? mg = ReflectUtil.getBooleanState(MatchedGift, r); + bool? mg = ReflectUtil.getBooleanState(MatchedGift.Content, r); if (pk != mg) // Mismatch { if (pk ?? false) @@ -1798,13 +1798,12 @@ private void verifyForm() int species = pkm.Species; if (species == 201) // Unown { - if (pkm.GenNumber == 2 && pkm.AltForm < 26) // A-Z - valid = true; - else if (pkm.GenNumber >= 3 && pkm.AltForm >= 28) // A-Z?! + int maxCount = pkm.GenNumber == 2 ? 26 : 28; // A-Z : A-Z?! + if (pkm.AltForm < maxCount) valid = true; } if (species == 414 && pkm.AltForm < 3) // Wormadam base form kept - valid = true; + valid = true; if ((species == 664 || species == 665) && pkm.AltForm < 18) // Vivillon Pre-evolutions valid = true; diff --git a/PKHeX/Legality/Core.cs b/PKHeX/Legality/Core.cs index 8c6bf56a9..1dc4383ba 100644 --- a/PKHeX/Legality/Core.cs +++ b/PKHeX/Legality/Core.cs @@ -1014,7 +1014,16 @@ private static IEnumerable getMatchingPCD(PKM pkm, IEnumerable().Where(wc => vs.Any(dl => dl.Species == wc.Species))) { @@ -1029,8 +1038,16 @@ private static IEnumerable getMatchingPCD(PKM pkm, IEnumerable !getCanFormChange(pkm, dl.Species))) continue; - if (wc.Met_Location != pkm.Met_Location) continue; - if (wc.Egg_Location != pkm.Egg_Location) continue; + + if (wc.IsEgg) + { + if (wc.Egg_Location + 3000 != pkm.Egg_Location) continue; + } + else + { + if (wc.Egg_Location + 3000 != pkm.Met_Location) continue; + } + if (wc.CurrentLevel != pkm.Met_Level) continue; if (wc.Ball != pkm.Ball) continue; if (wc.OT_Gender < 3 && wc.OT_Gender != pkm.OT_Gender) continue; diff --git a/PKHeX/MysteryGifts/PGT.cs b/PKHeX/MysteryGifts/PGT.cs index 99b783d60..1c9d90d91 100644 --- a/PKHeX/MysteryGifts/PGT.cs +++ b/PKHeX/MysteryGifts/PGT.cs @@ -72,7 +72,7 @@ public override string CardTitle } } - public override int Species { get { return Gift.Species; } set { Gift.Species = value; } } + public override int Species { get { return Gift.IsManaphyEgg ? 490 : Gift.Species; } set { Gift.Species = value; } } public override int[] Moves { get { return Gift.Moves; } set { Gift.Moves = value; } } public override int HeldItem { get { return Gift.HeldItem; } set { Gift.HeldItem = value; } } public override bool IsShiny => Gift.IsShiny; @@ -192,7 +192,7 @@ private byte[] Unknown public override bool IsItem { get { return PGTGiftType == GiftType.Item; } set { if (value) PGTGiftType = GiftType.Item; } } public override bool IsPokémon { get { return PGTGiftType == GiftType.Pokémon || PGTGiftType == GiftType.PokémonEgg || PGTGiftType == GiftType.ManaphyEgg; } set { } } - public override int Species { get { return PK.Species; } set { PK.Species = value; } } + public override int Species { get { return IsManaphyEgg ? 490 : PK.Species; } set { PK.Species = value; } } public override int[] Moves { get { return PK.Moves; } set { PK.Moves = value; } } public override int HeldItem { get { return PK.HeldItem; } set { PK.HeldItem = value; } } public override bool IsShiny => PK.IsShiny; @@ -209,6 +209,7 @@ public override PKM convertToPKM(SaveFile SAV) pk4.TID = SAV.TID; pk4.SID = SAV.SID; pk4.OT_Gender = SAV.Gender; + pk4.Language = SAV.Language; } if (IsManaphyEgg) { @@ -218,6 +219,7 @@ public override PKM convertToPKM(SaveFile SAV) pk4.Move1 = 294; pk4.Move2 = 145; pk4.Move3 = 346; + pk4.Ability = pk4.PersonalInfo.Abilities[0]; pk4.FatefulEncounter = true; pk4.Ball = 4; pk4.Version = 10; // Diamond @@ -228,7 +230,7 @@ public override PKM convertToPKM(SaveFile SAV) // Generate IV uint seed = Util.rnd32(); - if (pk4.PID == 1 || IsManaphyEgg) // Create Nonshiny + if (pk4.PID == 1) // Create Nonshiny { uint pid1 = PKX.LCRNG(ref seed) >> 16; uint pid2 = PKX.LCRNG(ref seed) >> 16; @@ -255,7 +257,7 @@ public override PKM convertToPKM(SaveFile SAV) } // Generate Met Info - if (!IsEgg) + if (!IsEgg && !IsManaphyEgg) { pk4.Met_Location = pk4.Egg_Location + 3000; pk4.Egg_Location = 0; @@ -264,15 +266,25 @@ public override PKM convertToPKM(SaveFile SAV) } else { - pk4.Egg_Location = pk4.Egg_Location + 3000; - pk4.MetDate = DateTime.Now; - pk4.IsEgg = false; - // Met Location is modified when transferred to pk5; don't worry about it. + if (SAV.Generation == 4) + { + pk4.IsEgg = true; + pk4.Met_Location = pk4.Egg_Location + 3000; + pk4.Egg_Location = 0; + pk4.IsNicknamed = true; + pk4.Nickname = PKX.getSpeciesName(0, pk4.Language).ToUpper(); + pk4.MetDate = DateTime.Now; + } + else + { + pk4.IsEgg = false; + // Met Location is modified when transferred to pk5; don't worry about it. + pk4.Egg_Location = pk4.Egg_Location + 3000; + pk4.EggMetDate = DateTime.Now; + } } if (pk4.Species == 201) // Never will be true; Unown was never distributed. pk4.AltForm = PKX.getUnownForm(pk4.PID); - if (IsEgg || IsManaphyEgg) - pk4.IsEgg = true; pk4.RefreshChecksum(); return pk4; diff --git a/PKHeX/PKM/PK4.cs b/PKHeX/PKM/PK4.cs index a89bfa843..7a7be8328 100644 --- a/PKHeX/PKM/PK4.cs +++ b/PKHeX/PKM/PK4.cs @@ -311,7 +311,7 @@ public override int Met_Location else if ((value < 2000 && value > 111) || (value < 3000 && value > 2010)) { // Met location not in DP, set to Mystery Zone (0, illegal) as opposed to Faraway Place - BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x46); + BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x46); BitConverter.GetBytes((ushort)0).CopyTo(Data, 0x80); } else