namespace PKHeX.Core;
///
/// Generation 9 Trade Encounter
///
///
public sealed record EncounterTrade9 : EncounterTrade, IGemType
{
public override int Generation => 9;
public override EntityContext Context => EntityContext.Gen9;
public override int Location => Locations.LinkTrade6NPC;
public override Shiny Shiny { get; }
public GemType TeraType => GemType.Default;
public EncounterTrade9(GameVersion game, ushort species, byte level, Shiny shiny = Shiny.Never) : base(game)
{
Species = species;
Level = level;
Shiny = shiny;
}
protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
{
base.ApplyDetails(sav, criteria, pk);
var pk9 = (PK9)pk;
pk9.HT_Language = (byte)pk.Language;
pk9.Obedience_Level = Level;
pk9.SetRandomEC();
if (TeraType is GemType.Default)
pk9.TeraTypeOriginal = (MoveType)PersonalTable.SV.GetFormEntry(Species, Form).Type1;
else if (TeraType.IsSpecified(out var type))
pk9.TeraTypeOriginal = (MoveType)type;
else
pk9.TeraTypeOriginal = (MoveType)Util.Rand.Next(0, 18);
pk9.Scale = PokeSizeUtil.GetRandomScalar();
}
public override bool IsMatchExact(PKM pk, EvoCriteria evo)
{
if (TeraType != GemType.Random && pk is ITeraType t && !Tera9RNG.IsMatchTeraType(TeraType, Species, Form, (byte)t.TeraTypeOriginal))
return false;
return base.IsMatchExact(pk, evo);
}
}