aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorKeader <keader.android@gmail.com>2020-06-03 22:05:08 -0300
committerShauren <shauren.trinity@gmail.com>2022-01-06 19:59:50 +0100
commit4110a06e8193329c31cb9d59d346294835fd51a5 (patch)
tree2b36682f594ced2aaa0dc32c2deadaa2b5252a3b /src/server/game/Spells/Spell.cpp
parent9286734b553aecfb9c9e794fac5faee412bda700 (diff)
Core/Misc: Fixed resistance calculate for Mutated Transformation and Twilight Bloodbolt (#24717)
Ref: 9f7b464a6aa5b64bf5ec5c0f586853fbc71029c6 - Implemented a new SpellScript hook that allow control Resistance/Absorb amount of a damage spell. (cherry picked from commit d81a9e5bc3b3e13b47332b3e7817bd0a0b228cbc)
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index af14b186ce2..4690176be01 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2609,7 +2609,7 @@ void Spell::TargetInfo::DoDamageAndTriggers(Spell* spell)
else
{
// Add bonuses and fill damageInfo struct
- caster->CalculateSpellDamageTaken(&damageInfo, spell->m_damage, spell->m_spellInfo, spell->m_attackType, IsCrit);
+ caster->CalculateSpellDamageTaken(&damageInfo, spell->m_damage, spell->m_spellInfo, spell->m_attackType, IsCrit, spell);
Unit::DealDamageMods(damageInfo.attacker, damageInfo.target, damageInfo.damage, &damageInfo.absorb);
hitMask |= createProcHitMask(&damageInfo, MissCondition);
@@ -8387,6 +8387,19 @@ std::string Spell::GetDebugInfo() const
return sstr.str();
}
+void Spell::CallScriptOnResistAbsorbCalculateHandlers(DamageInfo const& damageInfo, uint32& resistAmount, int32& absorbAmount)
+{
+ for (auto scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end(); ++scritr)
+ {
+ (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_ON_RESIST_ABSORB_CALCULATION);
+ auto hookItrEnd = (*scritr)->OnCalculateResistAbsorb.end(), hookItr = (*scritr)->OnCalculateResistAbsorb.begin();
+ for (; hookItr != hookItrEnd; ++hookItr)
+ hookItr->Call(*scritr, damageInfo, resistAmount, absorbAmount);
+
+ (*scritr)->_FinishScriptCall();
+ }
+}
+
namespace Trinity
{