From d57baebef9cb9c98a527b59c2fac72976c95ee62 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 22 Jan 2009 00:50:45 +0300 Subject: [PATCH] Implemement 255 SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT aura Signed-off-by: DiSlord --- src/game/SpellAuraDefines.h | 4 ++-- src/game/SpellAuras.cpp | 2 +- src/game/Unit.cpp | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index cb4f4b858..633a0505b 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -309,10 +309,10 @@ enum AuraType SPELL_AURA_264 = 264, SPELL_AURA_265 = 265, SPELL_AURA_266 = 266, - SPELL_AURA_267 = 267, + SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL = 267, SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT = 268, SPELL_AURA_269 = 269, - SPELL_AURA_270 = 270, + SPELL_AURA_MOD_IGNORE_TARGET_RESIST = 270, // Possibly need swap vs 195 aura used only in 1 spell Chaos Bolt Passive SPELL_AURA_MOD_DAMAGE_FROM_CASTER = 271, SPELL_AURA_272 = 272, SPELL_AURA_273 = 273, diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 42b008a63..86b4e8438 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -305,7 +305,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= &Aura::HandleNULL, //252 haste all? &Aura::HandleNULL, //253 SPELL_AURA_MOD_BLOCK_CRIT_CHANCE &Aura::HandleNULL, //254 SPELL_AURA_MOD_DISARM_SHIELD disarm Shield - &Aura::HandleNULL, //255 SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT + &Aura::HandleNoImmediateEffect, //255 SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT implemented in Unit::SpellDamageBonus &Aura::HandleNoReagentUseAura, //256 SPELL_AURA_NO_REAGENT_USE Use SpellClassMask for spell select &Aura::HandleNULL, //257 SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS Use SpellClassMask for spell select &Aura::HandleNULL, //258 SPELL_AURA_MOD_SPELL_VISUAL diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 370cc1c93..9784e3e5f 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -7487,6 +7487,16 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 if( (*i)->GetCasterGUID() == GetGUID() && (*i)->isAffectedOnSpell(spellProto)) TakenTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f; + // Mod damage from spell mechanic + uint32 mechanicMask = GetAllSpellMechanicMask(spellProto); + if (mechanicMask) + { + AuraList const& mDamageDoneMechanic = pVictim->GetAurasByType(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT); + for(AuraList::const_iterator i = mDamageDoneMechanic.begin();i != mDamageDoneMechanic.end(); ++i) + if(mechanicMask & uint32(1<<((*i)->GetModifier()->m_miscvalue))) + TakenTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f; + } + // Distribute Damage over multiple effects, reduce by AoE CastingTime = GetCastingTimeForBonus( spellProto, damagetype, CastingTime );