void StealHp(FightActor target) { var damage = new Fights.Damage(Dice, GetEffectSchool(Effect.EffectId), Caster, Spell, TargetedCell, EffectZone) { IsCritical = Critical }; // spell reflected var buff = target.GetBestReflectionBuff(); if (buff != null && buff.ReflectedLevel >= Spell.CurrentLevel && Spell.Template.Id != 0) { NotifySpellReflected(target); damage.Source = Caster; damage.ReflectedDamages = true; Caster.InflictDamage(damage); if (buff.Duration <= 0) { target.RemoveBuff(buff); } } else { target.InflictDamage(damage); var amount = (short)Math.Floor(damage.Amount / 2.0); if (amount > 0) { Caster.Heal(amount, target, true); } } }
public int DispatchDamages(Damage damage) { FightActor[] array = ( from x in base.GetCells() select base.Fight.GetFirstFighter <FightActor>(x) into x where x != null && !(x is SummonedFighter) && x.IsFriendlyWith(base.Caster) select x).ToArray <FightActor>(); damage.GenerateDamages(); int averagePercentResistance = this.GetAveragePercentResistance(array, damage.School, damage.PvP); int averageFixResistance = this.GetAverageFixResistance(array, damage.School, damage.PvP); damage.Amount = (int)((1.0 - (double)averagePercentResistance / 100.0) * (double)(damage.Amount - averageFixResistance)); damage.Amount /= array.Length; damage.IgnoreDamageReduction = true; FightActor[] array2 = array; for (int i = 0; i < array2.Length; i++) { FightActor fightActor = array2[i]; Damage damage2 = new Damage(damage.Amount) { Source = damage.Source, School = damage.School, Buff = damage.Buff, MarkTrigger = this, IgnoreDamageReduction = true, EffectGenerationType = damage.EffectGenerationType }; fightActor.InflictDamage(damage2); } return(damage.Amount); }