aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Spells/SpellEffects.cpp25
-rw-r--r--src/server/game/Spells/SpellMgr.cpp8
2 files changed, 22 insertions, 11 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 5728b0993f5..c4535f3edff 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -414,21 +414,24 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
if (unitTarget && unitTarget->IsAlive())
{
bool apply_direct_bonus = true;
- switch (m_spellInfo->SpellFamilyName)
+
+ // Meteor like spells (divided damage to targets)
+ if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_SHARE_DAMAGE))
{
- case SPELLFAMILY_GENERIC:
+ uint32 count = std::count_if(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effIndex](TargetInfo const& targetInfo)
{
- // Meteor like spells (divided damage to targets)
- if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_SHARE_DAMAGE))
- {
- uint32 count = 0;
- for (std::vector<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
- if (ihit->effectMask & (1<<effIndex))
- ++count;
+ return targetInfo.effectMask & (1 << effIndex);
+ });
- damage /= count; // divide to all targets
- }
+ // divide to all targets
+ if (count)
+ damage /= count;
+ }
+ switch (m_spellInfo->SpellFamilyName)
+ {
+ case SPELLFAMILY_GENERIC:
+ {
switch (m_spellInfo->Id) // better way to check unknown
{
// Consumption
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 40dcbd90c10..f8e2974ed2f 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -2779,6 +2779,14 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
}
// TODO: validate attributes
+ if (attributes & SPELL_ATTR0_CU_SHARE_DAMAGE)
+ {
+ if (!spellInfo->HasEffect(SPELL_EFFECT_SCHOOL_DAMAGE))
+ {
+ TC_LOG_ERROR("sql.sql", "Spell %u listed in table `spell_custom_attr` with SPELL_ATTR0_CU_SHARE_DAMAGE has no SPELL_EFFECT_SCHOOL_DAMAGE, ignored.", spellId);
+ continue;
+ }
+ }
spellInfo->AttributesCu |= attributes;
++count;