*Fix the bug that totem can only apply the first aura effect.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-05-10 01:19:39 -05:00
parent 9215f0ee11
commit aba285664f
3 changed files with 24 additions and 22 deletions
+2 -2
View File
@@ -1188,8 +1188,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
if (aura_effmask)
{
Unit * caster = m_originalCaster ? m_originalCaster : m_caster;
Aura * Aur= new Aura(m_spellInfo, aura_effmask, &m_currentBasePoints[0], unit, caster , m_CastItem, m_caster);
Unit * caster = m_originalCaster ? m_originalCaster : m_caster;
Aura * Aur = new Aura(m_spellInfo, aura_effmask, m_currentBasePoints, unit, caster, m_CastItem, m_caster);
if (!Aur->IsAreaAura())
{
+19 -19
View File
@@ -721,28 +721,28 @@ void AreaAuraEffect::Update(uint32 diff)
}
}
for(std::list<Unit *>::iterator tIter = targets.begin(); tIter != targets.end(); tIter++)
for(std::list<Unit*>::iterator tIter = targets.begin(); tIter != targets.end(); tIter++)
{
bool skip=false;
for(Unit::AuraMap::iterator iter = (*tIter)->GetAuras().begin(); iter != (*tIter)->GetAuras().end();++iter)
if(Aura *aur = (*tIter)->GetAura(GetId(), m_formalCasterGUID))
{
bool samecaster = iter->second->GetCasterGUID() == GetCasterGUID();
if (samecaster && iter->first == GetId())
{
if (AuraEffect * aurEff = iter->second->GetPartAura(m_effIndex))
{
skip=true;
}
break;
}
if (spellmgr.IsNoStackSpellDueToSpell(GetId(), iter->first,samecaster))
{
skip=true;
break;
}
if(aur->HasEffect(GetEffIndex()))
continue;
}
else
{
bool skip = false;
for(Unit::AuraMap::iterator iter = (*tIter)->GetAuras().begin(); iter != (*tIter)->GetAuras().end();++iter)
{
bool samecaster = iter->second->GetCasterGUID() == m_formalCasterGUID;
if(spellmgr.IsNoStackSpellDueToSpell(GetId(), iter->first, samecaster))
{
skip = true;
break;
}
}
if(skip)
continue;
}
if(skip)
continue;
if(SpellEntry const *actualSpellInfo = spellmgr.SelectAuraRankForPlayerLevel(GetSpellProto(), (*tIter)->getLevel()))
{
+3 -1
View File
@@ -4306,7 +4306,7 @@ bool Unit::HasAura(Aura * aur) const
bool Unit::HasAuraEffect(uint32 spellId, uint8 effIndex, uint64 caster) const
{
if (Aura * aur = GetAura(spellId, caster))
return bool(aur->HasEffect(effIndex));
return aur->HasEffect(effIndex);
return false;
}
@@ -13615,6 +13615,8 @@ Aura * Unit::AddAuraEffect(const SpellEntry * spellInfo, uint8 effIndex, Unit* c
// can't do that for passive auras - they stack from same caster so there is no way to get exact aura which should get effect
//assert (!IsPassiveSpell(spellInfo));
sLog.outDebug("AddAuraEffect: spell id: %u, effect index: %u", spellInfo->Id, (uint32)effIndex);
Aura *aur = GetAura(spellInfo->Id, caster->GetGUID());
if (aur)