*Check item existance requirements for mainhand/offhand weapon spells.
--HG-- branch : trunk
This commit is contained in:
+34
-2
@@ -3625,8 +3625,8 @@ SpellCastResult Spell::CheckCast(bool strict)
|
|||||||
return SPELL_FAILED_DONT_REPORT;
|
return SPELL_FAILED_DONT_REPORT;
|
||||||
|
|
||||||
// only check at first call, Stealth auras are already removed at second call
|
// only check at first call, Stealth auras are already removed at second call
|
||||||
// for now, ignore triggered spells
|
// for now, ignore triggered by aura spells
|
||||||
if( strict && !m_IsTriggeredSpell)
|
if( strict && !m_triggeredByAuraSpell)
|
||||||
{
|
{
|
||||||
bool checkForm = true;
|
bool checkForm = true;
|
||||||
// Ignore form req aura
|
// 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;
|
return SPELL_CAST_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2101,38 +2101,6 @@ void Spell::EffectTriggerSpell(uint32 i)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// some triggered spells require specific equipment
|
|
||||||
if(spellInfo->EquippedItemClass >=0 && m_caster->GetTypeId()==TYPEID_PLAYER)
|
|
||||||
{
|
|
||||||
// main hand weapon required
|
|
||||||
if(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;
|
|
||||||
|
|
||||||
// skip spell if weapon not fit to triggered spell
|
|
||||||
if(!item->IsFitToSpellRequirements(spellInfo))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// offhand hand weapon required
|
|
||||||
if(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;
|
|
||||||
|
|
||||||
// skip spell if weapon not fit to triggered spell
|
|
||||||
if(!item->IsFitToSpellRequirements(spellInfo))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// some triggered spells must be casted instantly (for example, if next effect case instant kill caster)
|
// some triggered spells must be casted instantly (for example, if next effect case instant kill caster)
|
||||||
bool instant = false;
|
bool instant = false;
|
||||||
for(uint32 j = i+1; j < 3; ++j)
|
for(uint32 j = i+1; j < 3; ++j)
|
||||||
|
|||||||
+2
-2
@@ -5986,7 +5986,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
|
|||||||
triggered_spell_id = 32221;
|
triggered_spell_id = 32221;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return true;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Seal of the Martyr do damage trigger
|
// Seal of the Martyr do damage trigger
|
||||||
@@ -6003,7 +6003,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
|
|||||||
triggered_spell_id = 53718;
|
triggered_spell_id = 53718;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return true;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Paladin Tier 6 Trinket (Ashtongue Talisman of Zeal)
|
// Paladin Tier 6 Trinket (Ashtongue Talisman of Zeal)
|
||||||
|
|||||||
Reference in New Issue
Block a user