Add initial gen3 event detection

egg events supported, only some gen3 event distros supported
will eventually flag for PIDIV type mismatching

@kamronbatman
This commit is contained in:
Kurt 2017-05-29 00:48:25 -07:00
parent 9a7dc9998c
commit 82750de1b8
11 changed files with 199 additions and 74 deletions

View file

@ -1991,9 +1991,27 @@ namespace PKHeX.Core
if (Encounter.Valid)
{
if (Type == typeof(MysteryGift))
if (EncounterMatch is MysteryGift g)
{
if (pkm.FatefulEncounter)
bool fatefulValid = false;
if (g.Format == 3)
{
// obedience flag in gen3 is the fateful flag; met location stores the fateful info until transfer
bool required = g.Species == 151 || g.Species == 386;
required |= pkm.Format != 3 && !g.IsEgg;
fatefulValid = !(required ^ pkm.FatefulEncounter);
var g3 = (WC3) g; // shiny locked gifts
if (g3.Shiny != null && g3.Shiny != pkm.IsShiny)
AddLine(Severity.Invalid, V409, CheckIdentifier.Fateful);
}
else
{
if (pkm.FatefulEncounter)
fatefulValid = true;
}
if (fatefulValid)
AddLine(Severity.Valid, V321, CheckIdentifier.Fateful);
else
AddLine(Severity.Invalid, V322, CheckIdentifier.Fateful);
@ -2003,9 +2021,7 @@ namespace PKHeX.Core
{
var fateful = s.Fateful;
var shadow = EncounterMatch is EncounterStaticShadow;
if (pkm.Gen3 && pkm.WasEgg && !pkm.IsEgg)
fateful = false; // lost after hatching
else if (shadow && !(pkm is XK3 || pkm is CK3))
if (shadow && !(pkm is XK3 || pkm is CK3))
fateful = true; // purification required for transfer
if (fateful)

View file

@ -9,7 +9,7 @@ namespace PKHeX.Core
public static partial class Legal
{
/// <summary>Event Database for a given Generation</summary>
public static MysteryGift[] MGDB_G4, MGDB_G5, MGDB_G6, MGDB_G7 = new MysteryGift[0];
public static MysteryGift[] MGDB_G3, MGDB_G4, MGDB_G5, MGDB_G6, MGDB_G7 = new MysteryGift[0];
/// <summary>Setting to specify if an analysis should permit data sourced from the physical cartridge era of GameBoy games.</summary>
public static bool AllowGBCartEra = false;
@ -168,6 +168,7 @@ namespace PKHeX.Core
}
}
MGDB_G3 = Encounter_WC3; // hardcoded
MGDB_G4 = g4.ToArray();
MGDB_G5 = g5.ToArray();
MGDB_G6 = g6.ToArray();

View file

@ -136,7 +136,7 @@ namespace PKHeX.Core
if (ctr != 0) yield break;
}
bool wasEvent = pkm.WasEvent || pkm.WasEventEgg;
bool wasEvent = pkm.WasEvent || pkm.WasEventEgg || pkm.GenNumber == 3; // egg events?
if (wasEvent)
{
foreach (var z in getValidGifts(pkm))
@ -285,23 +285,6 @@ namespace PKHeX.Core
yield return e;
}
}
private static IEnumerable<EncounterStatic> getG3SpecialEggEncounter(PKM pkm)
{
IEnumerable<DexLevel> dl = getValidPreEvolutions(pkm, MaxSpeciesID_3);
var sttctable = pkm.E ? EventEgg_G3_Common : pkm.FRLG ? EventEgg_FRLG : EventEgg_RS;
var table = sttctable.Where(e => dl.Any(d => d.Species == e.Species));
foreach (EncounterStatic e in table)
{
if (pkm.Moves.All(m => !e.Moves.Contains(m))) // No special move
continue;
if (e.Nature != Nature.Random && pkm.Nature != (int)e.Nature)
continue;
if (e.Gender != -1 && e.Gender != pkm.Gender)
continue;
yield return e;
}
}
private static IEnumerable<EncounterStatic> getStaticEncounters(PKM pkm, int lvl = -1, GameVersion gameSource = GameVersion.Any)
{
if (gameSource == GameVersion.Any)
@ -694,6 +677,8 @@ namespace PKHeX.Core
{
switch (pkm.GenNumber)
{
case 3:
return getMatchingWC3(pkm, MGDB_G3);
case 4:
return getMatchingPCD(pkm, MGDB_G4);
case 5:
@ -706,6 +691,60 @@ namespace PKHeX.Core
return new List<MysteryGift>();
}
}
private static IEnumerable<MysteryGift> getMatchingWC3(PKM pkm, IEnumerable<MysteryGift> DB)
{
if (DB == null)
yield break;
var validWC3 = new List<MysteryGift>();
var vs = getValidPreEvolutions(pkm, MaxSpeciesID_3).ToArray();
foreach (WC3 wc in DB.OfType<WC3>().Where(wc => vs.Any(dl => dl.Species == wc.Species)))
{
// Gen3 Version MUST match.
if (wc.Version != 0 && !((GameVersion)wc.Version).Contains((GameVersion)pkm.Version))
continue;
if (!wc.IsEgg)
{
if (wc.SID != -1 && wc.SID != pkm.SID) continue;
if (wc.TID != -1 && wc.TID != pkm.TID) continue;
if (wc.OT_Name != pkm.OT_Name) continue;
if (wc.OT_Gender < 3 && wc.OT_Gender != pkm.OT_Gender) continue;
if (wc.Language != 0 && wc.Language != pkm.Language) continue;
if (wc.Met_Location != pkm.Met_Location && pkm.HasOriginalMetLocation)
continue;
}
else if (wc.IsEgg)
{
if (pkm.IsNative)
{
if (wc.Level != pkm.Met_Level)
continue;
}
else
{
if (wc.Level > pkm.Met_Level)
continue;
if (pkm.IsEgg)
continue;
}
}
if (wc.Ball != pkm.Ball) continue;
// Some checks are best performed separately as they are caused by users screwing up valid data.
// if (wc.Level > pkm.CurrentLevel) continue; // Defer to level legality
// RIBBONS: Defer to ribbon legality
if (wc.Species == pkm.Species) // best match
yield return wc;
else
validWC3.Add(wc);
}
foreach (var z in validWC3)
yield return z;
}
private static IEnumerable<MysteryGift> getMatchingPCD(PKM pkm, IEnumerable<MysteryGift> DB)
{
if (DB == null)

View file

@ -259,7 +259,7 @@ namespace PKHeX.Core
private static CheckResult verifyEncounterEvent(PKM pkm, MysteryGift MatchedGift)
{
// Strict matching already performed by EncounterGenerator. May be worth moving some checks here to better flag invalid gifts.
return new CheckResult(Severity.Valid, string.Format(V21, MatchedGift.CardID.ToString("0000"), MatchedGift.CardTitle), CheckIdentifier.Encounter);
return new CheckResult(Severity.Valid, string.Format(V21, MatchedGift.getCardHeader(), ""), CheckIdentifier.Encounter);
}
}
}

View file

@ -401,7 +401,8 @@ namespace PKHeX.Core
public static string V405 {get; set;} = "Outsider {0} should have evolved into {1}.";
public static string V406 {get; set;} = "Non Japanese Shadow E-reader Pokémon. Unreleased encounter.";
public static string V407 {get; set;} = "OT from Colosseum/XD cannot be female.";
public static string V408 {get; set;} = "OT from Generation 1 cannot be female.";
public static string V408 {get; set;} = "Female OT from Generation 1/2 is invalid.";
public static string V409 {get; set;} = "Mystery Gift shiny mismatch.";
#endregion
}

View file

@ -238,62 +238,79 @@ namespace PKHeX.Core
46, 47, 48, 49,
};
internal static readonly EncounterStatic[] EventEgg_FRLG_Exclusive =
internal static readonly MysteryGift[] Encounter_Event3 =
{
new WC3 { Species = 385, Level = 05, TID = 40122, OT_Gender = 3, OT_Name = "CHANNEL", CardTitle = "Channel Jirachi", Method = PIDType.Channel, Version = (int)GameVersion.RS },
new WC3 { Species = 251, Level = 10, TID = 31121, OT_Gender = 1, OT_Name = "アゲト", CardTitle = "Agate Celebi", Method = PIDType.CXD, Shiny = false, Language = 1 },
new WC3 { Species = 025, Level = 10, TID = 31121, OT_Gender = 0, OT_Name = "コロシアム", CardTitle = "Colosseum Pikachu", Method = PIDType.CXD, Shiny = false, Language = 1 },
new WC3 { Species = 385, Level = 05, TID = 20043, OT_Gender = 0, OT_Name = "WISHMKR", CardTitle = "Wishmaker Jirachi", Method = PIDType.BACD_R, Language = 2 },
new WC3 { Species = 251, Level = 10, TID = 31121, OT_Gender = 1, OT_Name = "AGATE", CardTitle = "Agate Celebi", Method = PIDType.CXD, Shiny = false, Language = 2, NotDistributed = true },
new WC3 { Species = 025, Level = 10, TID = 31121, OT_Gender = 0, OT_Name = "COLOS", CardTitle = "Colosseum Pikachu", Method = PIDType.CXD, Shiny = false, Language = 2, NotDistributed = true },
new WC3 { Species = 250, Level = 70, TID = 10048, OT_Gender = 0, OT_Name = "バトルやま", CardTitle = "Mt. Battle Ho-oh", Method = PIDType.CXD, Shiny = false, Language = 1 }, // JPN
new WC3 { Species = 250, Level = 70, TID = 10048, OT_Gender = 0, OT_Name = "MATTLE", CardTitle = "Mt. Battle Ho-oh", Method = PIDType.CXD, Shiny = false, Language = 2 }, // ENG
new WC3 { Species = 250, Level = 70, TID = 10048, OT_Gender = 0, OT_Name = "MT BATA", CardTitle = "Mt. Battle Ho-oh", Method = PIDType.CXD, Shiny = false, Language = 3 }, // FRE
new WC3 { Species = 250, Level = 70, TID = 10048, OT_Gender = 0, OT_Name = "DUELLBE", CardTitle = "Mt. Battle Ho-oh", Method = PIDType.CXD, Shiny = false, Language = 4 }, // GER
new WC3 { Species = 250, Level = 70, TID = 10048, OT_Gender = 0, OT_Name = "MONTE L", CardTitle = "Mt. Battle Ho-oh", Method = PIDType.CXD, Shiny = false, Language = 5 }, // ITA
new WC3 { Species = 250, Level = 70, TID = 10048, OT_Gender = 0, OT_Name = "ERNESTO", CardTitle = "Mt. Battle Ho-oh", Method = PIDType.CXD, Shiny = false, Language = 7 }, // SPA
};
internal static readonly MysteryGift[] Encounter_Event3_FRLG =
{
// Egg Pokémon Present Eggs
new EncounterStatic { Species = 043, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{073} }, // Oddish with Leech Seed
new EncounterStatic { Species = 052, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{080} }, // Meowth with Petal Dance
new EncounterStatic { Species = 060, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{186} }, // Poliwag with Sweet Kiss
new EncounterStatic { Species = 069, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{298} }, // Bellsprout with Teeter Dance
new WC3 { Species = 043, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{073} }, // Oddish with Leech Seed
new WC3 { Species = 052, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{080} }, // Meowth with Petal Dance
new WC3 { Species = 060, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{186} }, // Poliwag with Sweet Kiss
new WC3 { Species = 069, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{298} }, // Bellsprout with Teeter Dance
// Wish Egg
new EncounterStatic { Species = 083, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{273, 281} }, // Farfetch'd with Wish & Yawn
new EncounterStatic { Species = 096, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{273, 187} }, // Drowzee with Wish & Belly Drum
new EncounterStatic { Species = 102, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{273, 230} }, // Exeggcute with Wish & Sweet Scent
new EncounterStatic { Species = 108, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{273, 215} }, // Lickitung with Wish & Heal Bell
new EncounterStatic { Species = 113, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{273, 230} }, // Chansey with Wish & Sweet Scent
new EncounterStatic { Species = 115, Level = 05, EggLocation = 255, Version = GameVersion.FRLG, Moves = new[]{273, 281} }, // Kangaskhan with Wish & Yawn
new WC3 { Species = 083, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{273, 281} }, // Farfetch'd with Wish & Yawn
new WC3 { Species = 096, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{273, 187} }, // Drowzee with Wish & Belly Drum
new WC3 { Species = 102, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{273, 230} }, // Exeggcute with Wish & Sweet Scent
new WC3 { Species = 108, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{273, 215} }, // Lickitung with Wish & Heal Bell
new WC3 { Species = 113, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{273, 230} }, // Chansey with Wish & Sweet Scent
new WC3 { Species = 115, IsEgg = true, Level = 05, Version = (int)GameVersion.FRLG, Moves = new[]{273, 281} }, // Kangaskhan with Wish & Yawn
};
internal static readonly EncounterStatic[] EventEgg_RS_Exclusive =
internal static readonly MysteryGift[] Encounter_Event3_RS =
{
// Pokémon Center 5th Anniversary Eggs
new EncounterStatic { Species = 172, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{298} }, // Pichu with Teeter Dance
new EncounterStatic { Species = 172, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{273} }, // Pichu with Wish
new EncounterStatic { Species = 280, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{204} }, // Ralts with Charm
new EncounterStatic { Species = 280, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{273} }, // Ralts with Wish
new EncounterStatic { Species = 359, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{180} }, // Absol with Spite
new EncounterStatic { Species = 359, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{273} }, // Absol with Wish
new EncounterStatic { Species = 371, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{334} }, // Bagon with Iron Defense
new EncounterStatic { Species = 371, Level = 05, EggLocation = 255, Version = GameVersion.RS, Moves = new[]{273} }, // Bagon with Wish
new WC3 { Species = 172, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{298} }, // Pichu with Teeter Dance
new WC3 { Species = 172, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{273} }, // Pichu with Wish
new WC3 { Species = 280, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{204} }, // Ralts with Charm
new WC3 { Species = 280, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{273} }, // Ralts with Wish
new WC3 { Species = 359, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{180} }, // Absol with Spite
new WC3 { Species = 359, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{273} }, // Absol with Wish
new WC3 { Species = 371, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{334} }, // Bagon with Iron Defense
new WC3 { Species = 371, IsEgg = true, Level = 05, Version = (int)GameVersion.RS, Moves = new[]{273} }, // Bagon with Wish
};
internal static readonly EncounterStatic[] EventEgg_G3_Common =
internal static readonly MysteryGift[] Encounter_Event3_Common =
{
// Pokémon Box
new EncounterStatic { Species = 333, Level = 05, EggLocation = 255, Version = GameVersion.RSBOX, Moves = new[]{206} }, // Swablu Egg with False Swipe
new EncounterStatic { Species = 263, Level = 05, EggLocation = 255, Version = GameVersion.RSBOX, Moves = new[]{245} }, // Zigzagoon Egg with Extreme Speed
new EncounterStatic { Species = 300, Level = 05, EggLocation = 255, Version = GameVersion.RSBOX, Moves = new[]{6} }, // Skitty Egg with Pay Day
new EncounterStatic { Species = 172, Level = 05, EggLocation = 255, Version = GameVersion.RSBOX, Moves = new[]{57} }, // Pichu Egg with Surf
new WC3 { Species = 333, IsEgg = true, Level = 05, /*Version = (int)GameVersion.RSBOX,*/ Moves = new[]{206} }, // Swablu Egg with False Swipe
new WC3 { Species = 263, IsEgg = true, Level = 05, /*Version = (int)GameVersion.RSBOX,*/ Moves = new[]{245} }, // Zigzagoon Egg with Extreme Speed
new WC3 { Species = 300, IsEgg = true, Level = 05, /*Version = (int)GameVersion.RSBOX,*/ Moves = new[]{006} }, // Skitty Egg with Pay Day
new WC3 { Species = 172, IsEgg = true, Level = 05, /*Version = (int)GameVersion.RSBOX,*/ Moves = new[]{057} }, // Pichu Egg with Surf
// PokePark Eggs
new EncounterStatic { Species = 054, Level = 05, EggLocation = 255, Moves = new[]{300} }, // Psyduck with Mud Sport
new EncounterStatic { Species = 172, Level = 05, EggLocation = 255, Moves = new[]{266} }, // Pichu with Follow me
new EncounterStatic { Species = 174, Level = 05, EggLocation = 255, Moves = new[]{321} }, // Igglybuff with Tickle
new EncounterStatic { Species = 222, Level = 05, EggLocation = 255, Moves = new[]{300} }, // Corsola with Mud Sport
new EncounterStatic { Species = 276, Level = 05, EggLocation = 255, Moves = new[]{294} }, // Taillow with Feather Dance
new EncounterStatic { Species = 283, Level = 05, EggLocation = 255, Moves = new[]{300} }, // Surskit with Mud Sport
new EncounterStatic { Species = 293, Level = 05, EggLocation = 255, Moves = new[]{298} }, // Whismur with Teeter Dance
new EncounterStatic { Species = 300, Level = 05, EggLocation = 255, Moves = new[]{205} }, // Skitty with Rollout
new EncounterStatic { Species = 311, Level = 05, EggLocation = 255, Moves = new[]{346} }, // Plusle with Water Sport
new EncounterStatic { Species = 312, Level = 05, EggLocation = 255, Moves = new[]{300} }, // Minun with Mud Sport
new EncounterStatic { Species = 325, Level = 05, EggLocation = 255, Moves = new[]{253} }, // Spoink with Uproar
new EncounterStatic { Species = 327, Level = 05, EggLocation = 255, Moves = new[]{047} }, // Spinda with Sing
new EncounterStatic { Species = 331, Level = 05, EggLocation = 255, Moves = new[]{227} }, // Cacnea with Encore
new EncounterStatic { Species = 341, Level = 05, EggLocation = 255, Moves = new[]{346} }, // Corphish with Water Sport
new EncounterStatic { Species = 360, Level = 05, EggLocation = 255, Moves = new[]{321} }, // Wynaut with Tickle
new WC3 { Species = 054, IsEgg = true, Level = 05, Moves = new[]{300} }, // Psyduck with Mud Sport
new WC3 { Species = 172, IsEgg = true, Level = 05, Moves = new[]{266} }, // Pichu with Follow me
new WC3 { Species = 174, IsEgg = true, Level = 05, Moves = new[]{321} }, // Igglybuff with Tickle
new WC3 { Species = 222, IsEgg = true, Level = 05, Moves = new[]{300} }, // Corsola with Mud Sport
new WC3 { Species = 276, IsEgg = true, Level = 05, Moves = new[]{294} }, // Taillow with Feather Dance
new WC3 { Species = 283, IsEgg = true, Level = 05, Moves = new[]{300} }, // Surskit with Mud Sport
new WC3 { Species = 293, IsEgg = true, Level = 05, Moves = new[]{298} }, // Whismur with Teeter Dance
new WC3 { Species = 300, IsEgg = true, Level = 05, Moves = new[]{205} }, // Skitty with Rollout
new WC3 { Species = 311, IsEgg = true, Level = 05, Moves = new[]{346} }, // Plusle with Water Sport
new WC3 { Species = 312, IsEgg = true, Level = 05, Moves = new[]{300} }, // Minun with Mud Sport
new WC3 { Species = 325, IsEgg = true, Level = 05, Moves = new[]{253} }, // Spoink with Uproar
new WC3 { Species = 327, IsEgg = true, Level = 05, Moves = new[]{047} }, // Spinda with Sing
new WC3 { Species = 331, IsEgg = true, Level = 05, Moves = new[]{227} }, // Cacnea with Encore
new WC3 { Species = 341, IsEgg = true, Level = 05, Moves = new[]{346} }, // Corphish with Water Sport
new WC3 { Species = 360, IsEgg = true, Level = 05, Moves = new[]{321} }, // Wynaut with Tickle
};
internal static readonly EncounterStatic[] EventEgg_FRLG = EventEgg_FRLG_Exclusive.Concat(EventEgg_G3_Common).ToArray();
internal static readonly EncounterStatic[] EventEgg_RS = EventEgg_RS_Exclusive.Concat(EventEgg_G3_Common).ToArray();
internal static readonly MysteryGift[] Encounter_WC3 = Encounter_Event3.Concat(Encounter_Event3_RS).Concat(Encounter_Event3_FRLG.Concat(Encounter_Event3_Common)).ToArray();
internal static readonly EncounterStatic[] Encounter_RSE_Roam =
{
@ -407,8 +424,8 @@ namespace PKHeX.Core
new EncounterStatic { Species = 386, Level = 30, Location = 187, Version = GameVersion.LG, Form = 2, Fateful = true }, // Deoxys @ Birth Island
};
internal static readonly EncounterStatic[] Encounter_RSE = Encounter_RSE_Roam.SelectMany(e => e.Clone(Roaming_MetLocation_RSE)).Concat(Encounter_RSE_Regular).Concat(EventEgg_RS).ToArray();
internal static readonly EncounterStatic[] Encounter_FRLG = Encounter_FRLG_Roam.SelectMany(e => e.Clone(Roaming_MetLocation_FRLG)).Concat(Encounter_FRLG_Stationary).Concat(EventEgg_FRLG).ToArray();
internal static readonly EncounterStatic[] Encounter_RSE = Encounter_RSE_Roam.SelectMany(e => e.Clone(Roaming_MetLocation_RSE)).Concat(Encounter_RSE_Regular).ToArray();
internal static readonly EncounterStatic[] Encounter_FRLG = Encounter_FRLG_Roam.SelectMany(e => e.Clone(Roaming_MetLocation_FRLG)).Concat(Encounter_FRLG_Stationary).ToArray();
private static readonly int[] TradeContest_Cool = {30, 05, 05, 05, 05, 10};
private static readonly int[] TradeContest_Beauty = {05, 30, 05, 05, 05, 10};

View file

@ -113,7 +113,7 @@ namespace PKHeX.Core
public virtual int Bean { get => 0; set { } }
public virtual int BeanCount { get => 0; set { } }
public string getCardHeader() => (CardID > 0 ? $"Card #: {CardID:0000}" : "N/A") + $" - {CardTitle.Replace('\u3000',' ').Trim()}";
public virtual string getCardHeader() => (CardID > 0 ? $"Card #: {CardID:0000}" : "N/A") + $" - {CardTitle.Replace('\u3000',' ').Trim()}";
public override int GetHashCode()
{

View file

@ -0,0 +1,48 @@
using System;
namespace PKHeX.Core
{
public class WC3 : MysteryGift
{
// Template Properties
/// <summary>
/// Matched <see cref="PIDIV"/> Type
/// </summary>
public PIDType Method;
public string OT_Name;
public int OT_Gender = 3;
public int TID = -1;
public int SID = -1;
public int Met_Location = 255;
public int Version;
public int Language;
public override int Species { get; set; }
public override bool IsEgg { get; set; }
public override int[] Moves { get; set; }
public bool NotDistributed = false;
public bool? Shiny = null; // null = allow, false = never, true = always
// Mystery Gift Properties
public override int Format => 3;
public override int Level { get; set; }
public override int Ball { get; set; } = 4;
// Description
public override string CardTitle { get; set; } = "Generation 3 Event";
public override string getCardHeader() => CardTitle;
// Unused
public override bool GiftUsed { get; set; }
public override int CardID { get; set; }
public override bool IsItem { get; set; }
public override int Item { get; set; }
public override bool IsPokémon { get; set; }
public override PKM convertToPKM(SaveFile SAV)
{
throw new NotImplementedException();
}
}
}

View file

@ -338,4 +338,5 @@ V402 = Incorrect Stadium OT.
V405 = Outsider {0} should have evolved into {1}.
V406 = Non Japanese Shadow E-reader Pokémon. Unreleased encounter.
V407 = OT from Colosseum/XD cannot be female.
V408 = Female OT from Generation 1/2 is invalid.
V408 = Female OT from Generation 1/2 is invalid.
V409 = Mystery Gift shiny mismatch.

View file

@ -339,4 +339,5 @@ V402 = Incorrect Stadium OT.
V405 = Outsider {0} should have evolved into {1}.
V406 = Non Japanese Shadow E-reader Pokémon. Unreleased encounter.
V407 = OT from Colosseum/XD cannot be female.
V408 = Female OT from Generation 1/2 is invalid.
V408 = Female OT from Generation 1/2 is invalid.
V409 = Mystery Gift shiny mismatch.

View file

@ -338,4 +338,5 @@ V402 = 不正确竞技场初训家。
V405 = 外来的{0}应当进化为{1}.
V406 = 非日版黑暗E-reader宝可梦。未解禁遇见方式。
V407 = OT from Colosseum/XD cannot be female.
V408 = Female OT from Generation 1/2 is invalid.
V408 = Female OT from Generation 1/2 is invalid.
V409 = Mystery Gift shiny mismatch.