diff options
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 8 |
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; |