using System.Collections.Generic; namespace PKHeX.Core { public sealed class EncounterTrade4PID : EncounterTrade, IContestStats { public override int Generation => 4; /// /// Fixed value the encounter must have. /// public readonly uint PID; public EncounterTrade4PID(uint pid) => PID = pid; internal IReadOnlyList Contest { set => this.SetContestStats(value); } public int CNT_Cool { get; set; } public int CNT_Beauty { get; set; } public int CNT_Cute { get; set; } public int CNT_Smart { get; set; } public int CNT_Tough { get; set; } public int CNT_Sheen { get; set; } public override Shiny Shiny { get; set; } = Shiny.FixedValue; public override bool IsMatch(PKM pkm, DexLevel evo) { if (!base.IsMatch(pkm, evo)) return false; if (pkm is IContestStats s && s.IsContestBelow(this)) return false; return true; } protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk) { base.ApplyDetails(sav, criteria, pk); this.CopyContestStatsTo((PK4)pk); } protected override void SetPINGA(PKM pk, EncounterCriteria criteria) { var pi = pk.PersonalInfo; int gender = criteria.GetGender(PKX.GetGenderFromPID(Species, PID), pi); int nature = (int)criteria.GetNature(Nature); int ability = criteria.GetAbilityFromNumber(Ability, pi); pk.PID = PID; pk.Nature = nature; pk.Gender = gender; pk.RefreshAbility(ability); SetIVs(pk); } protected override bool IsMatchNatureGenderShiny(PKM pkm) { return PID == pkm.EncryptionConstant; } } public sealed class EncounterTrade4Ranch : EncounterTrade { public override int Generation => 4; public EncounterTrade4Ranch(int species, int level) { Species = species; Level = level; Ball = 0x10; } protected override void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk) { base.ApplyDetails(sav, criteria, pk); pk.FatefulEncounter = true; } } }