diff options
-rw-r--r-- | src/server/game/Spells/SpellScript.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Spells/SpellScript.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 8a02fd2d974..e82d1111465 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -686,6 +686,25 @@ void SpellScript::SetHitHeal(int32 heal) m_spell->m_healing = heal; } +bool SpellScript::IsHitCrit() const +{ + if (!IsInTargetHook()) + { + TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::IsHitCrit was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId); + return false; + } + if (Unit* hitUnit = GetHitUnit()) + { + auto itr = std::find_if(m_spell->m_UniqueTargetInfo.begin(), m_spell->m_UniqueTargetInfo.end(), [hitUnit](Spell::TargetInfo const& targetInfo) + { + return targetInfo.TargetGUID == hitUnit->GetGUID(); + }); + ASSERT(itr != m_spell->m_UniqueTargetInfo.end()); + return itr->IsCrit; + } + return false; +} + Aura* SpellScript::GetHitAura(bool dynObjAura /*= false*/) const { if (!IsInTargetHook()) diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index aa206611c20..ebb5addd9c0 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -514,6 +514,8 @@ class TC_GAME_API SpellScript : public _SpellScript int32 GetHitHeal() const; void SetHitHeal(int32 heal); void PreventHitHeal() { SetHitHeal(0); } + // returns: true if spell critically hits current HitUnit + bool IsHitCrit() const; Spell* GetSpell() const { return m_spell; } // returns current spell hit target aura Aura* GetHitAura(bool dynObjAura = false) const; |