From be4670250d769829e6210df540bbe79f2ead258a Mon Sep 17 00:00:00 2001 From: ariel- Date: Fri, 30 Dec 2016 23:50:28 -0300 Subject: Core/Spell: added some helpers to SpellInfo to reduce code duplication (cherry picked from commit 14c2b2d6cd2303609f1a1859e727ace7b8ea649c) --- src/server/game/Spells/Spell.cpp | 58 +++++++++++++++------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 104d1901a7f..56c81a0bd4c 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -541,25 +541,7 @@ m_spellValue(new SpellValue(caster->GetMap()->GetDifficultyID(), m_spellInfo)) 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) @@ -6709,26 +6691,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()) @@ -6737,7 +6718,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; -- cgit v1.2.3