aboutsummaryrefslogtreecommitdiff
path: root/src/game/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r--src/game/Spell.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index d774b62af5f..5990c70a2e9 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -3625,8 +3625,8 @@ SpellCastResult Spell::CheckCast(bool strict)
return SPELL_FAILED_DONT_REPORT;
// only check at first call, Stealth auras are already removed at second call
- // for now, ignore triggered spells
- if( strict && !m_IsTriggeredSpell)
+ // for now, ignore triggered by aura spells
+ if( strict && !m_triggeredByAuraSpell)
{
bool checkForm = true;
// Ignore form req aura
@@ -5182,6 +5182,38 @@ SpellCastResult Spell::CheckItems()
}
}
+ // check weapon presence in slots for main/offhand weapons
+ if(m_spellInfo->EquippedItemClass >=0)
+ {
+ // main hand weapon required
+ if(m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_MAIN_HAND)
+ {
+ Item* item = ((Player*)m_caster)->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;
+ }
+
+ // offhand hand weapon required
+ if(m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_REQ_OFFHAND)
+ {
+ Item* item = ((Player*)m_caster)->GetWeaponForAttack(OFF_ATTACK);
+
+ // skip spell if no weapon in slot or broken
+ if(!item || item->IsBroken() )
+ return m_IsTriggeredSpell ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
+
+ // skip spell if weapon not fit to triggered spell
+ if(!item->IsFitToSpellRequirements(m_spellInfo))
+ return m_IsTriggeredSpell ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
+ }
+ }
+
return SPELL_CAST_OK;
}