aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-05-19 17:46:36 +0200
committerShauren <shauren.trinity@gmail.com>2011-05-19 17:46:36 +0200
commit69376d0e1ce027f3abaf8e1c8757d786789b379e (patch)
tree8a1dffde843bd0532d836363b0e96d18e828bd6b /src
parenta8c784b50cc4de2adc7411e1467879e500d6f78b (diff)
Core/Units: Removed calculating complete mechanic mask when checking if unit has aura with such mechanic, instead return result immediately (immunities don't need to be checked, unit won't have such aura if immune)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp23
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h2
2 files changed, 10 insertions, 15 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 508246439f7..7e1b2df4937 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -4320,25 +4320,20 @@ bool Unit::HasNegativeAuraWithAttribute(uint32 flag, uint64 guid)
return false;
}
-bool Unit::HasAurasWithMechanic(uint32 mechanic_mask)
+bool Unit::HasAuraWithMechanic(uint32 mechanicMask)
{
for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end(); ++iter)
{
SpellEntry const* spellInfo = iter->second->GetBase()->GetSpellProto();
-
- if (IsImmunedToSpell(spellInfo))
- continue;
-
- uint32 mask = 0;
- if (spellInfo->Mechanic)
- mask |= 1<<spellInfo->Mechanic;
- for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
- if (spellInfo->Effect[i] && spellInfo->EffectMechanic[i] && !IsImmunedToSpellEffect(spellInfo, i))
- mask |= 1<<spellInfo->EffectMechanic[i];
-
- if (mask & mechanic_mask)
+ if (spellInfo->Mechanic && (mechanicMask & (1 << spellInfo->Mechanic)))
return true;
+
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if (iter->second->HasEffect(i) && spellInfo->Effect[i] && spellInfo->EffectMechanic[i])
+ if (mechanicMask & (1 << spellInfo->EffectMechanic[i]))
+ return true;
}
+
return false;
}
@@ -10444,7 +10439,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
// Torment the weak
if (spellProto->SpellFamilyFlags[0] & 0x20600021 || spellProto->SpellFamilyFlags[1] & 0x9000)
- if (pVictim->HasAurasWithMechanic((1<<MECHANIC_SNARE)|(1<<MECHANIC_SLOW_ATTACK)))
+ if (pVictim->HasAuraWithMechanic((1<<MECHANIC_SNARE)|(1<<MECHANIC_SLOW_ATTACK)))
{
AuraEffectList const& mDumyAuras = GetAuraEffectsByType(SPELL_AURA_DUMMY);
for (AuraEffectList::const_iterator i = mDumyAuras.begin(); i != mDumyAuras.end(); ++i)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index d077666ed2e..20a5120f24b 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1697,7 +1697,7 @@ class Unit : public WorldObject
bool HasAuraTypeWithValue(AuraType auratype, int32 value) const;
bool HasNegativeAuraWithInterruptFlag(uint32 flag, uint64 guid = 0);
bool HasNegativeAuraWithAttribute(uint32 flag, uint64 guid = 0);
- bool HasAurasWithMechanic(uint32 mechanic_mask);
+ bool HasAuraWithMechanic(uint32 mechanicMask);
AuraEffect * IsScriptOverriden(SpellEntry const * spell, int32 script) const;
uint32 GetDiseasesByCaster(uint64 casterGUID, bool remove = false);