diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-05-13 00:38:09 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-11-17 18:22:43 +0100 |
| commit | 4997e316d9e4bf529e131d45528fff404d99b836 (patch) | |
| tree | 633bf20758ce902a91b4000f8694e7f271c85cd6 /src/server/game/Spells/SpellScript.cpp | |
| parent | 5e691c0d5f5fdc9f45d5c06525f6c0334ff0818e (diff) | |
Core/Spells: Expose number of targets selected for each spell effect to scripts to allow implementing spells that do something depending on number of targets hit
(cherry picked from commit 1a7779a6e6464d9bc5b367e02820213edd60f704)
Diffstat (limited to 'src/server/game/Spells/SpellScript.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellScript.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 66d02bb104e..874427e77ff 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -408,6 +408,14 @@ bool SpellScript::IsInCheckCastHook() const { return m_currentScriptState == SPELL_SCRIPT_HOOK_CHECK_CAST; } + +bool SpellScript::IsAfterTargetSelectionPhase() const +{ + return IsInHitPhase() + || m_currentScriptState == SPELL_SCRIPT_HOOK_ON_CAST + || m_currentScriptState == SPELL_SCRIPT_HOOK_AFTER_CAST; +} + bool SpellScript::IsInTargetHook() const { switch (m_currentScriptState) @@ -509,6 +517,39 @@ Item* SpellScript::GetExplTargetItem() const return m_spell->m_targets.GetItemTarget(); } +int64 SpellScript::GetUnitTargetCountForEffect(SpellEffIndex effect) const +{ + if (!IsAfterTargetSelectionPhase()) + { + TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::GetUnitTargetCountForEffect was called, but function has no effect in current hook! (spell has not selected targets yet)", + m_scriptName->c_str(), m_scriptSpellId); + return 0; + } + return m_spell->GetUnitTargetCountForEffect(effect); +} + +int64 SpellScript::GetGameObjectTargetCountForEffect(SpellEffIndex effect) const +{ + if (!IsAfterTargetSelectionPhase()) + { + TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::GetGameObjectTargetCountForEffect was called, but function has no effect in current hook! (spell has not selected targets yet)", + m_scriptName->c_str(), m_scriptSpellId); + return 0; + } + return m_spell->GetGameObjectTargetCountForEffect(effect); +} + +int64 SpellScript::GetItemTargetCountForEffect(SpellEffIndex effect) const +{ + if (!IsAfterTargetSelectionPhase()) + { + TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::GetItemTargetCountForEffect was called, but function has no effect in current hook! (spell has not selected targets yet)", + m_scriptName->c_str(), m_scriptSpellId); + return 0; + } + return m_spell->GetItemTargetCountForEffect(effect); +} + Unit* SpellScript::GetHitUnit() const { if (!IsInTargetHook()) |
