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>2021-05-13 00:38:09 +0200
commit1a7779a6e6464d9bc5b367e02820213edd60f704 (patch)
tree75de5e4d827fdecc77388bbcdd5ad39d68c5b0ad /src/server/game/Spells/SpellScript.cpp
parent1b39612b333f8758af8e60b77c58f876e737e5d5 (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
Diffstat (limited to 'src/server/game/Spells/SpellScript.cpp')
-rw-r--r--src/server/game/Spells/SpellScript.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp
index 12337bd0c67..294028d8882 100644
--- a/src/server/game/Spells/SpellScript.cpp
+++ b/src/server/game/Spells/SpellScript.cpp
@@ -413,6 +413,15 @@ 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
+ || m_currentScriptState == SPELL_SCRIPT_HOOK_CALC_CRIT_CHANCE;
+}
+
bool SpellScript::IsInTargetHook() const
{
switch (m_currentScriptState)
@@ -485,6 +494,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())