Esempio n. 1
0
        public override bool Apply()
        {
            bool result;

            foreach (FightActor current in base.GetAffectedActors())
            {
                EffectInteger effectInteger = base.GenerateEffect();
                if (effectInteger == null)
                {
                    result = false;
                    return(result);
                }
                FightActor          fightActor         = current;
                SpellReflectionBuff bestReflectionBuff = current.GetBestReflectionBuff();
                if (bestReflectionBuff != null && bestReflectionBuff.ReflectedLevel >= (int)base.Spell.CurrentLevel && base.Spell.Template.Id != 0)
                {
                    this.NotifySpellReflected(current);
                    current.RemoveAndDispellBuff(bestReflectionBuff);
                    fightActor = base.Caster;
                }
                if (this.Effect.Duration > 1)
                {
                    base.AddStatBuff(fightActor, Convert.ToInt16(-effectInteger.Value), PlayerFields.AP, true, 168);
                }
                else
                {
                    fightActor.LostAP(effectInteger.Value);
                }
            }
            result = true;
            return(result);
        }
 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);
 }
Esempio n. 3
0
        protected override bool InternalApply()
        {
            foreach (var actor in GetAffectedActors())
            {
                if (Effect.Duration == 0 || Effect.Delay != 0)
                {
                    return(false);
                }

                var buffId = actor.PopNextBuffId();
                var buff   = new SpellReflectionBuff(buffId, actor, Caster, this, Spell, Critical, FightDispellableEnum.DISPELLABLE);

                actor.AddBuff(buff);
            }

            return(true);
        }
Esempio n. 4
0
        public override bool Apply()
        {
            bool result;

            foreach (FightActor current in base.GetAffectedActors())
            {
                if (this.Effect.Duration <= 0)
                {
                    result = false;
                    return(result);
                }
                int id = current.PopNextBuffId();
                SpellReflectionBuff buff = new SpellReflectionBuff(id, current, base.Caster, base.Dice, base.Spell, base.Critical, true);
                current.AddAndApplyBuff(buff, true);
            }
            result = true;
            return(result);
        }
 public override bool Apply()
 {
     if (this.Spell.SpellType.Id == (int)SpellTypesEnum.Sadida)
     {
         var isTargetEnnemy = this.Fight.GetOneFighter(this.TargetedCell).Team != this.Caster.Team;
         if (isTargetEnnemy)
         {
             var affectedActors = this.Fight.GetAllFighters((x) => x.Team != this.Caster.Team && x.HasState(SpellStatesEnum.Infected));
             this.SetAffectedActors(affectedActors);
         }
     }
     foreach (FightActor current in base.GetAffectedActors())
     {
         if (this.Effect.Duration > 0)
         {
             base.AddTriggerBuff(current, true, this.BuffTriggerType, new TriggerBuffApplyHandler(DirectDamage.DamageBuffTrigger));
         }
         else
         {
             SpellReflectionBuff bestReflectionBuff = current.GetBestReflectionBuff();
             if (bestReflectionBuff != null && bestReflectionBuff.ReflectedLevel >= (int)base.Spell.CurrentLevel && base.Spell.Template.Id != 0)
             {
                 this.NotifySpellReflected(current);
                 base.Caster.InflictDamage(new Fights.Damage(base.Dice, DirectDamage.GetEffectSchool(base.Dice.EffectId), current, base.Spell)
                 {
                     ReflectedDamages = true,
                     MarkTrigger      = base.MarkTrigger
                 });
                 current.RemoveAndDispellBuff(bestReflectionBuff);
             }
             else
             {
                 current.InflictDamage(new Fights.Damage(base.Dice, DirectDamage.GetEffectSchool(base.Dice.EffectId), base.Caster, base.Spell)
                 {
                     MarkTrigger = base.MarkTrigger
                 });
             }
         }
     }
     return(true);
 }
 public override bool Apply()
 {
     foreach (FightActor current in base.GetAffectedActors())
     {
         Fights.Damage damage = new Fights.Damage(base.Dice);
         damage.MarkTrigger = base.MarkTrigger;
         damage.GenerateDamages();
         double num  = 0.0;
         double num2 = (double)base.Caster.LifePoints / (double)base.Caster.MaxLifePoints;
         if (num2 <= 0.5)
         {
             num = 2.0 * num2;
         }
         else
         {
             if (num2 > 0.5)
             {
                 num = 1.0 + (num2 - 0.5) * -2.0;
             }
         }
         damage.Amount = (int)((double)base.Caster.LifePoints * num * (double)damage.Amount / 100.0);
         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;
             damage.IgnoreDamageBoost = true;
             base.Caster.InflictDamage(damage);
             current.RemoveAndDispellBuff(bestReflectionBuff);
         }
         else
         {
             current.InflictDamage(damage);
         }
     }
     return(true);
 }