Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
        }