aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellScript.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-05-13 00:38:09 +0200
committerShauren <shauren.trinity@gmail.com>2025-11-17 18:22:43 +0100
commit4997e316d9e4bf529e131d45528fff404d99b836 (patch)
tree633bf20758ce902a91b4000f8694e7f271c85cd6 /src/server/game/Spells/SpellScript.cpp
parent5e691c0d5f5fdc9f45d5c06525f6c0334ff0818e (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.cpp41
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())