aboutsummaryrefslogtreecommitdiff
path: root/src/game/Unit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r--src/game/Unit.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index a7fdab050e0..86638f14341 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -4428,7 +4428,7 @@ AuraEffect* Unit::GetAura(AuraType type, uint32 family, uint32 familyFlag1, uint
return NULL;
}
-uint32 Unit::GetDiseasesByCaster(uint64 casterGUID) const
+uint32 Unit::GetDiseasesByCaster(uint64 casterGUID, bool remove)
{
static const AuraType diseaseAuraTypes[] =
{
@@ -4440,13 +4440,22 @@ uint32 Unit::GetDiseasesByCaster(uint64 casterGUID) const
uint32 diseases=0;
for(AuraType const* itr = &diseaseAuraTypes[0]; itr && itr[0] != SPELL_AURA_NONE; ++itr)
{
- Unit::AuraEffectList const& auras = GetAurasByType(*itr);
- for(AuraEffectList::const_iterator i = auras.begin();i != auras.end(); ++i)
+ for(AuraEffectList::iterator i = m_modAuras[*itr].begin();i != m_modAuras[*itr].end(); )
{
// Get auras with disease dispel type by caster
if ((*i)->GetSpellProto()->Dispel == DISPEL_DISEASE
&& (*i)->GetCasterGUID()==casterGUID)
+ {
++diseases;
+
+ if (remove)
+ {
+ RemoveAura((*i)->GetId(), (*i)->GetCasterGUID());
+ i = m_modAuras[*itr].begin();
+ continue;
+ }
+ }
+ ++i;
}
}
return diseases;