diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-01-30 12:36:29 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-01-30 12:36:29 +0100 |
commit | 2cc652b305f31ebcc71680f314792d0d09c43bfe (patch) | |
tree | 3861b57a18d947cc5fff1b9d57ea02feed1a9d16 /src/server | |
parent | ea8245493292ccf6b5041a43637b717e55293a5f (diff) |
Core/Scripts: Expose IsCrit to hit hooks for spell scripts
Diffstat (limited to 'src/server')
-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; |