示例#1
0
        public override WeaponDamage GetDamage(bool isCritical)
        {
            WeaponDamage result = (isCritical) ? critDamage : damage;

            result.Mult(1.0f + cachedBonuses.damagePcBonus);
            result.AddToBase(cachedBonuses.damageCntBonus);
            result.ClampLess(0f);
            return(result);
        }
示例#2
0
 private WeaponDamage ApplyDamagePassiveBonus(WeaponDamage inputDamage)
 {
     if (nebulaObject.IsPlayer())
     {
         if (mPassiveBonuses != null && mPassiveBonuses.damageBonusTier > 0)
         {
             inputDamage.Mult(1.0f + mPassiveBonuses.damageBonus);
             return(inputDamage);
         }
     }
     return(inputDamage);
 }
示例#3
0
        private void StartDamageDron(DamagableObject targetObject, WeaponDamage inputDamage, byte workshop, int level, byte race)
        {
            if (nebulaObject.IsPlayer())
            {
                if (mPassiveBonuses != null && mPassiveBonuses.damageDronTier > 0)
                {
                    WeaponDamage dronDamage = new WeaponDamage();
                    dronDamage.SetFromDamage(inputDamage);
                    dronDamage.Mult(mPassiveBonuses.damageDronBonus);

                    InputDamage inpDamage = new InputDamage(nebulaObject, dronDamage);
                    targetObject.ReceiveDamage(inpDamage);

                    Hashtable dronInfo = new Hashtable {
                        { (int)SPC.Target, targetObject.nebulaObject.Id },
                        { (int)SPC.TargetType, targetObject.nebulaObject.Type },
                        { (int)SPC.Damage, dronDamage.totalDamage }
                    };
                    mMessage.SendDamageDron(dronInfo);
                }
            }
        }
示例#4
0
 public void Mult(float val)
 {
     m_Damage.Mult(val);
 }
示例#5
0
        public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info)
        {
            info = new Hashtable();
            var weapon = source.Weapon();

            var targets = GetTargets(source, source, weapon.optimalDistance);

            if (targets.Count == 0)
            {
                return(false);
            }

            ConcurrentBag <Item> filteredTargets = new ConcurrentBag <Item>();

            foreach (var pItem in targets)
            {
                filteredTargets.Add(pItem.Value);
                if (filteredTargets.Count >= 3)
                {
                    break;
                }
            }

            float dmgMult     = skill.GetFloatInput("dmg_mult");
            float dmgAreaMult = skill.GetFloatInput("dmg_area_mult");
            float radius      = skill.GetFloatInput("radius");

            float damagePerTarget = dmgMult / filteredTargets.Count;
            var   sourceMessage   = source.MmoMessage();

            var sourceCharacter = source.Character();
            var sourceRace      = source.Raceable();

            bool mastery = RollMastery(source);

            if (mastery)
            {
                damagePerTarget *= 2;
                dmgAreaMult     *= 2;
            }

            foreach (var target in filteredTargets)
            {
                WeaponHitInfo hit;
                var           shot = weapon.Fire(target, out hit, skill.data.Id, damagePerTarget);
                if (hit.normalOrMissed)
                {
                    sourceMessage.SendShot(Common.EventReceiver.OwnerAndSubscriber, shot);

                    var nearItems = GetTargets(source, target, radius);

                    WeaponDamage wd = weapon.GenerateDamage();
                    wd.Mult(dmgAreaMult);
                    InputDamage inpDamage = new InputDamage(source, wd);
                    foreach (var pNear in nearItems)
                    {
                        if (NoId(filteredTargets, pNear.Key))
                        {
                            pNear.Value.Damagable().ReceiveDamage(inpDamage);
                        }
                    }
                }
                else
                {
                    sourceMessage.SendShot(Common.EventReceiver.ItemOwner, shot);
                }
            }
            return(true);
        }