Пример #1
0
 /// <summary>Transforms into <paramref name="target"/> and sets <see cref="PBEStatus2.Transformed"/>.</summary>
 /// <param name="target">The Pokémon to transform into.</param>
 /// <remarks>Frees the Pokémon of its <see cref="ChoiceLockedMove"/>.</remarks>
 public void Transform(PBEPokemon target)
 {
     if (target == null)
     {
         throw new ArgumentNullException(nameof(target));
     }
     if (Team != target.Team)
     {
         KnownAbility = target.KnownAbility = Ability = target.Ability;
         KnownType1   = target.KnownType1 = Type1 = target.Type1;
         KnownType2   = target.KnownType2 = Type2 = target.Type2;
         KnownWeight  = target.KnownWeight = Weight = target.Weight;
     }
     else
     {
         Ability      = target.Ability;
         KnownAbility = target.KnownAbility;
         Type1        = target.Type1;
         KnownType1   = target.KnownType1;
         Type2        = target.Type2;
         KnownType2   = target.KnownType2;
         Weight       = target.Weight;
         KnownWeight  = target.KnownWeight;
     }
     KnownGender     = target.KnownGender = target.Gender;
     KnownShiny      = target.KnownShiny = target.Shiny;
     KnownSpecies    = target.KnownSpecies = Species = target.Species;
     Attack          = target.Attack;
     Defense         = target.Defense;
     SpAttack        = target.SpAttack;
     SpDefense       = target.SpDefense;
     Speed           = target.Speed;
     AttackChange    = target.AttackChange;
     DefenseChange   = target.DefenseChange;
     SpAttackChange  = target.SpAttackChange;
     SpDefenseChange = target.SpDefenseChange;
     SpeedChange     = target.SpeedChange;
     AccuracyChange  = target.AccuracyChange;
     EvasionChange   = target.EvasionChange;
     TransformBackupMoves.Reset(Moves);
     PBEBattleMoveset.DoTransform(this, target);
     if (!Moves.Contains(ChoiceLockedMove))
     {
         ChoiceLockedMove = PBEMove.None;
     }
     Status2 |= PBEStatus2.Transformed;
 }
Пример #2
0
        /// <summary>Sets and clears all information required for switching out.</summary>
        public void ClearForSwitch()
        {
            FieldPosition = PBEFieldPosition.None;
            switch (Ability)
            {
            case PBEAbility.NaturalCure:
            {
                Status1        = PBEStatus1.None;
                Status1Counter = SleepTurns = 0;
                break;
            }

            case PBEAbility.Regenerator:
            {
                HP           = PBEUtils.Clamp((ushort)(HP + (MaxHP / 3)), ushort.MinValue, MaxHP);
                HPPercentage = (double)HP / MaxHP;
                break;
            }
            }
            PBEPokemonData pData;

            if (Shaymin_CannotChangeBackToSkyForm)
            {
                pData   = PBEPokemonData.GetData(Species = KnownSpecies = PBESpecies.Shaymin);
                Ability = pData.Abilities[0];
            }
            else
            {
                pData   = PBEPokemonData.GetData(Species = KnownSpecies = OriginalSpecies);
                Ability = OriginalAbility;
            }
            KnownAbility = PBEAbility.MAX;
            KnownGender  = Gender;
            KnownItem    = (PBEItem)ushort.MaxValue;
            KnownMoves.SetUnknown();
            KnownNickname = Nickname;
            KnownShiny    = Shiny;
            KnownType1    = Type1 = pData.Type1;
            KnownType2    = Type2 = pData.Type2;

            AttackChange = DefenseChange = SpAttackChange = SpDefenseChange = SpeedChange = AccuracyChange = EvasionChange = 0;

            if (Status1 == PBEStatus1.Asleep)
            {
                Status1Counter = 0;
            }
            else if (Status1 == PBEStatus1.BadlyPoisoned)
            {
                Status1Counter = 1;
            }

            ConfusionCounter   = ConfusionTurns = 0;
            DisguisedAsPokemon = null;
            SeededPosition     = PBEFieldPosition.None;
            SeededTeam         = null;
            SubstituteHP       = 0;
            if (Id != byte.MaxValue && Status2.HasFlag(PBEStatus2.Transformed))
            {
                Moves.Reset(TransformBackupMoves);
                TransformBackupMoves.SetUnknown();
            }
            Status2 = PBEStatus2.None;

            TempLockedMove    = ChoiceLockedMove = PBEMove.None;
            TempLockedTargets = PBETurnTarget.None;

            ExecutedMoves.Clear();

            SpeedBoost_AbleToSpeedBoostThisTurn = false;

            if (Id != byte.MaxValue)
            {
                SetStats();
            }
        }