示例#1
0
        public static void AttackPostEffect(AtkContext atk)
        {
            var aer = atk.Attacker;
            var c   = aer.Controller;

            if (!atk.IgnoreSwitchItem)
            {
                bool e = true, r = aer.Hp != 0 && aer.Controller.CanWithdraw(aer);
                foreach (var d in atk.Targets)
                {
                    if (!d.HitSubstitute && d.Defender.Tile != null)
                    {
                        var der = d.Defender;
                        var i   = der.Item;
                        if (e && i == Is.EJECT_BUTTON)
                        {
                            atk.SetCondition(Cs.EjectButton, der.Tile);
                            der.ConsumeItem();
                            c.Withdraw(der, "EjectButton", 0, true);
                            if (r == false)
                            {
                                break;
                            }
                            e = false;
                        }
                        else if (r && i == Is.RED_CARD)
                        {
                            der.ConsumeItem();
                            der.ShowLogPm("RedCard", aer.Id);
                            r = !MoveE.ForceSwitchImplement(aer, true);
                            if (e == false)
                            {
                                return;
                            }
                        }
                    }
                }
            }
            if (aer.ItemE(Is.SHELL_BELL))
            {
                if (atk.TotalDamage != 0)
                {
                    aer.HpRecoverByOneNth(atk.TotalDamage >> 3, false, Ls.ItemHpRecover, Is.SHELL_BELL);
                }
            }
            else if (aer.ItemE(Is.LIFE_ORB) && aer.EffectHurtByOneNth(10, Ls.LifeOrb))
            {
                aer.CheckFaint();
            }
        }
        public static void MagicCoat(AtkContext atk)
        {
            var list = atk.GetCondition <List <PokemonProxy> >(Cs.MagicCoat);

            if (list != null)
            {
                atk.RemoveCondition(Cs.MagicCoat);
                foreach (var d in list)
                {
                    var a = new AtkContext(d);
                    a.SetCondition(Cs.IgnoreMagicCoat);
                    a.StartExecute(atk.Move, atk.Attacker.Tile, d.RaiseAbility(As.MAGIC_BOUNCE) ? "MagicBounce" : "MagicCoat");
                    if (atk.Target == null)
                    {
                        break;
                    }
                }
            }
        }
示例#3
0
文件: ITs.cs 项目: gyyfifafans/PBO
        public static void AttackPostEffect(AtkContext atk)
        {
            var  aer = atk.Attacker;
            var  c   = aer.Controller;
            bool e   = true;

            if (!atk.IgnoreSwitchItem)
            {
                bool r = aer.Hp != 0 && aer.Controller.CanWithdraw(aer);
                foreach (var d in atk.Targets)
                {
                    if (!d.HitSubstitute && d.Defender.Tile != null)
                    {
                        var der = d.Defender;
                        var i   = der.Item;
                        if (e && i == Is.EJECT_BUTTON)
                        {
                            atk.SetCondition(Cs.EjectButton, der.Tile);
                            der.ConsumeItem();
                            c.Withdraw(der, "EjectButton", 0, true);
                            if (r == false)
                            {
                                break;
                            }
                            e = false;
                        }
                        else if (r && i == Is.RED_CARD)
                        {
                            der.ConsumeItem();
                            der.ShowLogPm("RedCard", aer.Id);
                            r = !MoveE.ForceSwitchImplement(aer, true);
                            if (e == false)
                            {
                                return;
                            }
                        }
                        else if (e && (der.Ability == As.Emergency_Exit || der.Ability == As.Wimp_Out) && der.Hp <= der.Pokemon.MaxHp / 2 && atk.TotalDamage + der.Hp > der.Pokemon.MaxHp / 2)
                        {
                            atk.SetCondition(Cs.EjectButton, der.Tile);
                            if (der.Ability == As.Emergency_Exit)
                            {
                                c.Withdraw(der, "EmergencyExit", 0, true);
                            }
                            else if (der.Ability == As.Wimp_Out)
                            {
                                c.Withdraw(der, "WimpOut", 0, true);
                            }
                            if (r == false)
                            {
                                break;
                            }
                            e = false;
                        }
                    }
                }
            }
            bool moreThanHalf = aer.Hp > aer.Pokemon.MaxHp / 2;

            if (aer.ItemE(Is.SHELL_BELL))
            {
                if (atk.TotalDamage != 0)
                {
                    aer.HpRecoverByOneNth(atk.TotalDamage, false, Ls.ItemHpRecover, Is.SHELL_BELL, false, true);
                }
            }
            else if (aer.ItemE(Is.LIFE_ORB) && aer.EffectHurtByOneNth(10, Ls.LifeOrb))
            {
                aer.CheckFaint();
            }
        }