diff options
| author | Shauren <shauren.trinity@gmail.com> | 2011-05-19 17:46:36 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2011-05-19 17:46:36 +0200 |
| commit | 69376d0e1ce027f3abaf8e1c8757d786789b379e (patch) | |
| tree | 8a1dffde843bd0532d836363b0e96d18e828bd6b /src | |
| parent | a8c784b50cc4de2adc7411e1467879e500d6f78b (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-x | src/server/game/Entities/Unit/Unit.cpp | 23 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 2 |
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); |
