[11633] Implement function Unit::HasAffectedAura

This commit is contained in:
zergtmn 2011-06-17 22:06:12 +06:00
parent 54f623d2b8
commit 3443a97a28
5 changed files with 27 additions and 24 deletions

View file

@ -4526,19 +4526,10 @@ SpellCastResult Spell::CheckCast(bool strict)
}
// only check at first call, Stealth auras are already removed at second call
// for now, ignore triggered spells
if( strict && !m_IsTriggeredSpell)
if (strict && !m_IsTriggeredSpell)
{
bool checkForm = true;
// Ignore form req aura
Unit::AuraList const& ignore = m_caster->GetAurasByType(SPELL_AURA_MOD_IGNORE_SHAPESHIFT);
for(Unit::AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i)
{
if (!(*i)->isAffectedOnSpell(m_spellInfo))
continue;
checkForm = false;
break;
}
if (checkForm)
if (!m_caster->HasAffectedAura(SPELL_AURA_MOD_IGNORE_SHAPESHIFT, m_spellInfo))
{
// Cannot be used in this stance/form
SpellCastResult shapeError = GetErrorAtShapeshiftedCast(m_spellInfo, m_caster->GetShapeshiftForm());

View file

@ -8282,17 +8282,15 @@ void Aura::HandleAuraSafeFall( bool Apply, bool Real )
bool Aura::IsCritFromAbilityAura(Unit* caster, uint32& damage)
{
Unit::AuraList const& auras = caster->GetAurasByType(SPELL_AURA_ABILITY_PERIODIC_CRIT);
for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
{
if (!(*itr)->isAffectedOnSpell(GetSpellProto()))
continue;
if (!caster->IsSpellCrit(GetTarget(), GetSpellProto(), GetSpellSchoolMask(GetSpellProto())))
break;
if (!caster->HasAffectedAura(SPELL_AURA_ABILITY_PERIODIC_CRIT, GetSpellProto()))
return false;
if (caster->IsSpellCrit(GetTarget(), GetSpellProto(), GetSpellSchoolMask(GetSpellProto())))
{
damage = caster->SpellCriticalDamageBonus(GetSpellProto(), damage, GetTarget());
return true;
}
return false;
}

View file

@ -488,11 +488,6 @@ void Unit::RemoveSpellsCausingAura(AuraType auraType, SpellAuraHolder* except)
}
}
bool Unit::HasAuraType(AuraType auraType) const
{
return (!m_modAuras[auraType].empty());
}
/* Called by DealDamage for auras that have a chance to be dispelled on damage taken. */
void Unit::RemoveSpellbyDamageTaken(AuraType auraType, uint32 damage)
{
@ -4919,6 +4914,24 @@ void Unit::_ApplyAllAuraMods()
}
}
bool Unit::HasAuraType(AuraType auraType) const
{
return !GetAurasByType(auraType).empty();
}
bool Unit::HasAffectedAura(AuraType auraType, SpellEntry const* spellProto) const
{
Unit::AuraList const& auras = GetAurasByType(auraType);
for (Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
{
if ((*itr)->isAffectedOnSpell(spellProto))
return true;
}
return false;
}
Aura* Unit::GetAura(uint32 spellId, SpellEffectIndex effindex)
{
SpellAuraHolderBounds bounds = GetSpellAuraHolderBounds(spellId);

View file

@ -1411,6 +1411,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
}
bool HasAuraType(AuraType auraType) const;
bool HasAffectedAura(AuraType auraType, SpellEntry const* spellProto) const;
bool HasAura(uint32 spellId, SpellEffectIndex effIndex) const;
bool HasAura(uint32 spellId) const
{

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "11632"
#define REVISION_NR "11633"
#endif // __REVISION_NR_H__