private void InitVariables() { if (mSpeedDebuffs == null) { mSpeedDebuffs = BuffUtils.GetDebuffsForParameter(BuffParameter.speed).ToList(); } }
public override bool TryCast(NebulaObject source, PlayerSkill skill, out Hashtable info) { info = new Hashtable(); if (NotEnemyCheck(source, skill, info)) { return(false); } var targ = source.Target().targetObject; var sourceCharacter = source.Character(); var sourceWeapon = source.Weapon(); var message = source.GetComponent <MmoMessageComponent>(); float dmgMult = skill.GetFloatInput("dmg_mult"); float radius = skill.GetFloatInput("radius"); bool mastery = RollMastery(source); if (mastery) { dmgMult *= 2; radius *= 2; } WeaponHitInfo hit; var shot = sourceWeapon.Fire(out hit, skill.data.Id, dmgMult); BonusType[] speedDebuffs = BuffUtils.GetDebuffsForParameter(BuffParameter.speed); if (hit.normalOrMissed) { message.SendShot(EventReceiver.OwnerAndSubscriber, shot); var items = source.mmoWorld().GetItems((item) => { var itemBonuses = item.Bonuses(); var itemCharacter = item.Character(); var itemDamagable = item.Damagable(); bool allComponentPresent = itemBonuses && itemCharacter && itemDamagable; if (allComponentPresent) { if (item.Id != targ.Id) { float distanceToTarg = targ.transform.DistanceTo(item.transform); if (distanceToTarg <= radius) { if (itemBonuses.ContainsAny(speedDebuffs)) { var relation = sourceCharacter.RelationTo(itemCharacter); if (relation == FractionRelation.Enemy || relation == FractionRelation.Neutral) { return(true); } } } } } return(false); }); foreach (var pitem in items) { WeaponHitInfo itemHit; var itemShot = sourceWeapon.Fire(pitem.Value, out itemHit, skill.data.Id, dmgMult); if (hit.normalOrMissed) { message.SendShot(EventReceiver.OwnerAndSubscriber, itemShot); } else { message.SendShot(EventReceiver.OwnerAndSubscriber, shot); } } return(true); } else { source.GetComponent <MmoMessageComponent>().SendShot(EventReceiver.OwnerAndSubscriber, shot); return(false); } }