aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp58
1 files changed, 21 insertions, 37 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 810fd9c8a68..b82fc082737 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -529,25 +529,7 @@ m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerO
memset(m_damageMultipliers, 0, sizeof(m_damageMultipliers));
// Get data for type of attack
- switch (m_spellInfo->DmgClass)
- {
- case SPELL_DAMAGE_CLASS_MELEE:
- if (m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND))
- m_attackType = OFF_ATTACK;
- else
- m_attackType = BASE_ATTACK;
- break;
- case SPELL_DAMAGE_CLASS_RANGED:
- m_attackType = m_spellInfo->IsRangedWeaponSpell() ? RANGED_ATTACK : BASE_ATTACK;
- break;
- default:
- // Wands
- if (m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
- m_attackType = RANGED_ATTACK;
- else
- m_attackType = BASE_ATTACK;
- break;
- }
+ m_attackType = info->GetAttackType();
m_spellSchoolMask = info->GetSchoolMask(); // Can be override for some spell (wand shoot for example)
@@ -6567,26 +6549,25 @@ SpellCastResult Spell::CheckItems(uint32* param1 /*= nullptr*/, uint32* param2 /
}
// check weapon presence in slots for main/offhand weapons
- if (!(_triggeredCastFlags & TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT) && m_spellInfo->EquippedItemClass >=0)
+ if (!(_triggeredCastFlags & TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT) && m_spellInfo->EquippedItemClass >= 0)
{
- // main hand weapon required
- if (m_spellInfo->HasAttribute(SPELL_ATTR3_MAIN_HAND))
+ SpellCastResult itemRes = [this]() -> SpellCastResult
{
- Item* item = m_caster->ToPlayer()->GetWeaponForAttack(BASE_ATTACK);
-
- // skip spell if no weapon in slot or broken
- if (!item || item->IsBroken())
- return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
-
- // skip spell if weapon not fit to triggered spell
- if (!item->IsFitToSpellRequirements(m_spellInfo))
- return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
- }
+ switch (m_attackType)
+ {
+ case BASE_ATTACK:
+ // main hand weapon required
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR3_MAIN_HAND))
+ return SPELL_CAST_OK;
+ case OFF_ATTACK:
+ // offhand hand weapon required
+ if (!m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND))
+ return SPELL_CAST_OK;
+ default:
+ return SPELL_CAST_OK;
+ }
- // offhand hand weapon required
- if (m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND))
- {
- Item* item = m_caster->ToPlayer()->GetWeaponForAttack(OFF_ATTACK);
+ Item const* item = m_caster->ToPlayer()->GetWeaponForAttack(m_attackType);
// skip spell if no weapon in slot or broken
if (!item || item->IsBroken())
@@ -6595,7 +6576,10 @@ SpellCastResult Spell::CheckItems(uint32* param1 /*= nullptr*/, uint32* param2 /
// skip spell if weapon not fit to triggered spell
if (!item->IsFitToSpellRequirements(m_spellInfo))
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
- }
+ }();
+
+ if (itemRes != SPELL_CAST_OK)
+ return itemRes;
}
return SPELL_CAST_OK;