using System; namespace PKHeX.Core { /// <summary> /// Pokémon Link Encounter Data /// </summary> public class EncounterLink : IEncounterable, IRibbonSetEvent4, IMoveset, ILocation, IVersion { public int Species { get; set; } public int Level { get; set; } public int LevelMin => Level; public int LevelMax => Level; public int Location { get; set; } = 30011; public int Ability { get; set; } = 1; public int Ball { get; set; } = 4; // Pokéball public int[] RelearnMoves { get; set; } = new int[4]; public bool OT { get; set; } = true; // Receiver is OT? public bool EggEncounter => false; public int EggLocation { get => 0; set { } } public GameVersion Version { get; set; } = GameVersion.Gen6; public int[] Moves { get; set; } = Array.Empty<int>(); public string Name => "Pokémon Link Gift"; public bool RibbonClassic { get; set; } = true; // Unused public bool RibbonWishing { get; set; } public bool RibbonPremier { get; set; } public bool RibbonEvent { get; set; } public bool RibbonBirthday { get; set; } public bool RibbonSpecial { get; set; } public bool RibbonWorld { get; set; } public bool RibbonChampionWorld { get; set; } public bool RibbonSouvenir { get; set; } public PKM ConvertToPKM(ITrainerInfo SAV) { const int gen = 6; var version = this.GetCompatibleVersion((GameVersion)SAV.Game); int lang = (int)Legal.GetSafeLanguage(6, (LanguageID)SAV.Language); var pk = new PK6 { EncryptionConstant = Util.Rand32(), Species = Species, Language = lang, CurrentLevel = Level, Version = (int)version, PID = Util.Rand32(), Nickname = PKX.GetSpeciesNameGeneration(Species, lang, gen), Ball = Ball, Met_Level = Level, Met_Location = Location, MetDate = DateTime.Today }; SAV.ApplyToPKM(pk); pk.Version = (int)version; pk.Gender = pk.PersonalInfo.RandomGender; pk.Language = lang; pk.Moves = Moves; pk.SetMaximumPPCurrent(Moves); pk.OT_Friendship = pk.PersonalInfo.BaseFriendship; pk.SetRandomIVs(flawless: 3); pk.RefreshAbility(Ability >> 1); if (RelearnMoves != null) pk.RelearnMoves = RelearnMoves; if (RibbonClassic) pk.RibbonClassic = true; pk.SetRandomMemory6(); if (!OT) SAV.ApplyHandlingTrainerInfo(pk); return pk; } } }