public override bool Apply() { foreach (FightActor current in base.GetAffectedActors()) { if (this.Effect.Duration > 0) { base.AddTriggerBuff(current, true, BuffTriggerType.TURN_BEGIN, new TriggerBuffApplyHandler(DamagePercent.DamageBuffTrigger)); } else { Fights.Damage damage = new Fights.Damage(base.Dice, DamagePercent.GetEffectSchool(base.Dice.EffectId), base.Caster, base.Spell); damage.GenerateDamages(); damage.Amount = (int)((double)current.MaxLifePoints * ((double)damage.Amount / 100.0)); damage.IgnoreDamageBoost = true; damage.MarkTrigger = base.MarkTrigger; SpellReflectionBuff bestReflectionBuff = current.GetBestReflectionBuff(); if (bestReflectionBuff != null && bestReflectionBuff.ReflectedLevel >= (int)base.Spell.CurrentLevel && base.Spell.Template.Id != 0) { this.NotifySpellReflected(current); damage.Source = current; damage.ReflectedDamages = true; base.Caster.InflictDamage(damage); current.RemoveAndDispellBuff(bestReflectionBuff); } else { current.InflictDamage(damage); } } } return(true); }
private static void DamageBuffTrigger(TriggerBuff buff, BuffTriggerType trigger, object token) { EffectInteger left = buff.GenerateEffect(); if (!(left == null)) { Fights.Damage damage = new Fights.Damage(buff.Dice, DamagePercent.GetEffectSchool(buff.Dice.EffectId), buff.Caster, buff.Spell) { Buff = buff }; damage.GenerateDamages(); damage.Amount = (int)((double)buff.Target.MaxLifePoints * ((double)damage.Amount / 100.0)); damage.IgnoreDamageBoost = true; buff.Target.InflictDamage(damage); } }