aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.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/Spell.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/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 97cd6f64d20..f4e058fad08 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2276,6 +2276,30 @@ void Spell::AddDestTarget(SpellDestination const& dest, uint32 effIndex)
m_destTargets[effIndex] = dest;
}
+int64 Spell::GetUnitTargetCountForEffect(SpellEffIndex effect) const
+{
+ return std::count_if(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effect](TargetInfo const& targetInfo)
+ {
+ return targetInfo.effectMask & (1 << effect);
+ });
+}
+
+int64 Spell::GetGameObjectTargetCountForEffect(SpellEffIndex effect) const
+{
+ return std::count_if(m_UniqueGOTargetInfo.begin(), m_UniqueGOTargetInfo.end(), [effect](GOTargetInfo const& targetInfo)
+ {
+ return targetInfo.effectMask & (1 << effect);
+ });
+}
+
+int64 Spell::GetItemTargetCountForEffect(SpellEffIndex effect) const
+{
+ return std::count_if(m_UniqueItemInfo.begin(), m_UniqueItemInfo.end(), [effect](ItemTargetInfo const& targetInfo)
+ {
+ return targetInfo.effectMask & (1 << effect);
+ });
+}
+
void Spell::DoAllEffectOnTarget(TargetInfo* target)
{
if (!target || target->processed)
@@ -7454,9 +7478,9 @@ void Spell::DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier)
if (m_caster->GetTypeId() == TYPEID_PLAYER)
{
- uint32 targetAmount = m_UniqueTargetInfo.size();
+ int64 targetAmount = GetUnitTargetCountForEffect(SpellEffIndex(effect->EffectIndex));
if (targetAmount > 20)
- m_damage = m_damage * 20/targetAmount;
+ m_damage = m_damage * 20 / targetAmount;
}
}
}