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); }
private WeaponDamage ApplyDamagePassiveBonus(WeaponDamage inputDamage) { if (nebulaObject.IsPlayer()) { if (mPassiveBonuses != null && mPassiveBonuses.damageBonusTier > 0) { inputDamage.Mult(1.0f + mPassiveBonuses.damageBonus); return(inputDamage); } } return(inputDamage); }
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); } } }
public void Mult(float val) { m_Damage.Mult(val); }
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); }