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); } }
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); } } }
/// <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) ); }
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); } }
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); } }
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); }