예제 #1
0
        public void Perform()
        {
            if (!_v.IsCasterNotTarget() || !_v.Target.CanBeAttacked() || _v.Target.TryKillFrozen())
            {
                return;
            }

            _v.PhysicalAccuracy();
            if (!_v.Caster.HasSupportAbility(SupportAbility1.Accuracy) && !_v.TryPhysicalHit())
            {
                return;
            }

            _v.WeaponPhisicalParams(CalcAttackBonus.Simple);
            _v.BonusSupportAbilitiesAttack();
            _v.Caster.PhysicalPenaltyAndBonusAttack();
            _v.Target.GambleDefence();
            _v.Target.PhysicalPenaltyAndBonusAttack();
            _v.BonusBackstabAndPenaltyLongDistance();
            _v.TryCriticalHit();
            _v.PenaltyReverseAttack();
            _v.PrepareHpDraining();

            Int16 damage = (Int16)Math.Min(9999, _v.Context.EnsurePowerDifference * _v.Context.EnsureAttack);

            _v.Target.HpDamage = damage;
            _v.Caster.HpDamage = damage;

            _v.ConsumeMpAttack();
        }
예제 #2
0
        public virtual void Perform()
        {
            if (_v.Target.TryKillFrozen())
            {
                return;
            }

            _v.PhysicalAccuracy();
            if (!_v.Caster.HasSupportAbility(SupportAbility1.Accuracy) && !_v.TryPhysicalHit())
            {
                return;
            }

            _v.WeaponPhisicalParams(_bonus);
            _v.BonusSupportAbilitiesAttack();
            _v.Caster.PhysicalPenaltyAndBonusAttack();
            _v.Target.GambleDefence();
            _v.Target.PhysicalPenaltyAndBonusAttack();
            if (_v.Caster.IsUnderStatus(BattleStatus.Trans) && _v.Caster.PresetId == CharacterPresetId.Steiner)
            {
                _v.Context.Attack *= 2;
            }

            _v.BonusBackstabAndPenaltyLongDistance();
            _v.Caster.BonusWeaponElement();
            if (_v.CanAttackWeaponElementalCommand())
            {
                _v.TryCriticalHit();
                _v.PenaltyReverseAttack();
                _v.CalcPhysicalHpDamage();
                _v.Target.RaiseTrouble();
                _v.ConsumeMpAttack();

                TryAddWeaponStatus();
            }
        }