Пример #1
0
        protected override void ReactHelper(SingleSpell spellToReactTo, Stats owner)
        {
            float localDmgMult = 0;

            // is a fish
            if (spellToReactTo.Target.Look.Breed == Characters.Breed.FISH)
            {
                localDmgMult = FISHY_TARGET_MULTIPLIER;
            }
            else     // not a fish
            {
                localDmgMult = OTHER_TARGET_MULTIPLIER;
            }

            SpellEffect healthDamage = null;

            for (int i = 0; (i < spellToReactTo.Result.Effects.Count) && (healthDamage == null); i++)
            {
                SpellEffect  se           = spellToReactTo.Result.Effects[i];
                AddToModStat addToModStat = se as AddToModStat;
                if (addToModStat != null && addToModStat.AffectedStat == StatType.HEALTH && addToModStat.Value < 0)
                {
                    healthDamage = addToModStat;
                }
            }
            if (healthDamage != null)
            {
                healthDamage.Value = (int)Math.Floor(healthDamage.Value * localDmgMult);
            }
        }
Пример #2
0
 protected override void ReactHelper(SingleSpell spellToReactTo, Stats owner)
 {
     foreach (SpellEffect se in spellToReactTo.Result.Effects)
     {
         AddToModStat addToModStat = se as AddToModStat;
         if (addToModStat != null && addToModStat.AffectedStat == StatType.HEALTH && addToModStat.Value < 0)
         {
             addToModStat.Value = (int)(addToModStat.Value * DAMAGE_REDUCTION);
         }
     }
 }
Пример #3
0
        /// <summary>
        ///  Add a self damage effect, reflecting the same amount as the attack.
        /// </summary>
        protected override void ReactHelper(SingleSpell spellToReactTo, Stats owner)
        {
            int damageToReflect = 0;

            foreach (SpellEffect se in spellToReactTo.Result.Effects)
            {
                AddToModStat damageHealth = se as AddToModStat;
                if (damageHealth != null && damageHealth.AffectedStat == StatType.HEALTH)
                {
                    damageToReflect = damageHealth.Value * REFLECT_DAMAGE_RATIO;
                }
            }
            spellToReactTo.Result.AddEffect(
                new AddToModStat(
                    spellToReactTo.Caster.Stats, StatType.HEALTH, damageToReflect)
                );
        }
Пример #4
0
        protected override void ReactHelper(SingleSpell spellToReactTo, Stats buffHolder)
        {
            SpellEffect healthDamage = null;

            for (int i = 0; (i < spellToReactTo.Result.Effects.Count) && (healthDamage == null); i++)
            {
                SpellEffect  se           = spellToReactTo.Result.Effects[i];
                AddToModStat addToModStat = se as AddToModStat;
                if (addToModStat != null && addToModStat.AffectedStat == StatType.HEALTH && addToModStat.Value < 0)
                {
                    healthDamage = addToModStat;
                }
            }
            if (healthDamage != null)
            {
                buffHolder.AddToStat(StatType.HEALTH, Stats.Set.MOD, healthDamage.Value);
            }
        }
Пример #5
0
        protected override void ReactHelper(SingleSpell spellToReactTo, Stats owner)
        {
            SpellEffect healthDamage = null;

            for (int i = 0; (i < spellToReactTo.Result.Effects.Count) && (healthDamage == null); i++)
            {
                SpellEffect  se           = spellToReactTo.Result.Effects[i];
                AddToModStat addToModStat = se as AddToModStat;
                if (addToModStat != null && addToModStat.AffectedStat == StatType.HEALTH && addToModStat.Value < 0)
                {
                    healthDamage = addToModStat;
                }
            }
            if (healthDamage != null)
            {
                int tempValue = healthDamage.Value;
                healthDamage.Value = (int)Math.Floor(healthDamage.Value * DAMAGE_MULTIPLIER);
            }
        }
Пример #6
0
        public override bool IsReact(SingleSpell incomingSpell, Stats statsOfTheCharacterTheBuffIsOn)
        {
            bool isDealDamageToBuffCaster = false;

            // Intercepting adds an add to mod stat, so the spell technically does damage even after we wipe it
            // isDealDamage returns true regardless of whether the caster or target is taking damage
            // But we want to stop adding damage after the first tentacle intercepts the attack
            // which wipes the spell's effects and replaces it with a single addToModStat health damage
            foreach (SpellEffect se in incomingSpell.Result.Effects)
            {
                AddToModStat addToModStat = se as AddToModStat;
                if (addToModStat != null &&
                    addToModStat.AffectedStat == StatType.HEALTH &&
                    addToModStat.Value < 0 &&
                    addToModStat.Target == BuffCaster)
                {
                    isDealDamageToBuffCaster = true;
                }
            }

            return(incomingSpell.Target.Stats == BuffCaster && isDealDamageToBuffCaster);
        }