From b4d5f46ea47e10e22dff08259a1510383f1685ca Mon Sep 17 00:00:00 2001 From: Treeston Date: Fri, 4 May 2018 13:46:21 +0200 Subject: [PATCH] 1b7ec4b follow-up --- src/server/game/Combat/ThreatManager.cpp | 13 +-- src/server/game/Entities/Unit/Unit.cpp | 103 +++++++++++------------ src/server/game/Entities/Unit/Unit.h | 48 +++++------ 3 files changed, 78 insertions(+), 86 deletions(-) diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 514e9c25b5c..8d9005134f2 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -110,16 +110,9 @@ ThreatReference::OnlineState ThreatReference::SelectOnlineState() void ThreatReference::UpdateTauntState(TauntState state) { - if (state < TAUNT_STATE_TAUNT) // not taunting - { - // Check for SPELL_AURA_MOD_DETAUNT (applied from owner to victim) - for (AuraEffect const* eff : _victim->GetAuraEffectsByType(SPELL_AURA_MOD_DETAUNT)) - if (eff->GetCasterGUID() == _owner->GetGUID()) - { - state = TAUNT_STATE_DETAUNT; - break; - } - } + // Check for SPELL_AURA_MOD_DETAUNT (applied from owner to victim) + if (state < TAUNT_STATE_TAUNT && _victim->HasAuraTypeWithCaster(SPELL_AURA_MOD_DETAUNT, _owner->GetGUID())) + state = TAUNT_STATE_DETAUNT; if (state == _taunted) return; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index abb51acf166..72cdc2b575b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -4616,36 +4616,35 @@ bool Unit::HasAuraType(AuraType auraType) const return (!m_modAuras[auraType].empty()); } -bool Unit::HasAuraTypeWithCaster(AuraType auratype, ObjectGuid caster) const +bool Unit::HasAuraTypeWithCaster(AuraType auraType, ObjectGuid caster) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); - for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i) - if (caster == (*i)->GetCasterGUID()) + for (AuraEffect const* eff : GetAuraEffectsByType(auraType)) + if (caster == eff->GetCasterGUID()) return true; return false; } -bool Unit::HasAuraTypeWithMiscvalue(AuraType auratype, int32 miscvalue) const +bool Unit::HasAuraTypeWithMiscvalue(AuraType auraType, int32 miscvalue) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i) if (miscvalue == (*i)->GetMiscValue()) return true; return false; } -bool Unit::HasAuraTypeWithAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const +bool Unit::HasAuraTypeWithAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i) if ((*i)->IsAffectingSpell(affectedSpell)) return true; return false; } -bool Unit::HasAuraTypeWithValue(AuraType auratype, int32 value) const +bool Unit::HasAuraTypeWithValue(AuraType auraType, int32 value) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i) if (value == (*i)->GetAmount()) return true; @@ -4769,9 +4768,9 @@ uint32 Unit::GetDoTsByCaster(ObjectGuid casterGUID) const return dots; } -int32 Unit::GetTotalAuraModifier(AuraType auratype, std::function const& predicate) const +int32 Unit::GetTotalAuraModifier(AuraType auraType, std::function const& predicate) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); if (mTotalAuraList.empty()) return 0; @@ -4784,7 +4783,7 @@ int32 Unit::GetTotalAuraModifier(AuraType auratype, std::functionAddSameEffectStackRuleSpellGroups(aurEff->GetSpellInfo(), static_cast(auratype), aurEff->GetAmount(), sameEffectSpellGroup)) + if (!sSpellMgr->AddSameEffectStackRuleSpellGroups(aurEff->GetSpellInfo(), static_cast(auraType), aurEff->GetAmount(), sameEffectSpellGroup)) modifier += aurEff->GetAmount(); } } @@ -4796,9 +4795,9 @@ int32 Unit::GetTotalAuraModifier(AuraType auratype, std::function const& predicate) const +float Unit::GetTotalAuraMultiplier(AuraType auraType, std::function const& predicate) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); if (mTotalAuraList.empty()) return 1.0f; @@ -4811,7 +4810,7 @@ float Unit::GetTotalAuraMultiplier(AuraType auratype, std::functionAddSameEffectStackRuleSpellGroups(aurEff->GetSpellInfo(), static_cast(auratype), aurEff->GetAmount(), sameEffectSpellGroup)) + if (!sSpellMgr->AddSameEffectStackRuleSpellGroups(aurEff->GetSpellInfo(), static_cast(auraType), aurEff->GetAmount(), sameEffectSpellGroup)) AddPct(multiplier, aurEff->GetAmount()); } } @@ -4823,9 +4822,9 @@ float Unit::GetTotalAuraMultiplier(AuraType auratype, std::function const& predicate) const +int32 Unit::GetMaxPositiveAuraModifier(AuraType auraType, std::function const& predicate) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); if (mTotalAuraList.empty()) return 0; @@ -4839,9 +4838,9 @@ int32 Unit::GetMaxPositiveAuraModifier(AuraType auratype, std::function const& predicate) const +int32 Unit::GetMaxNegativeAuraModifier(AuraType auraType, std::function const& predicate) const { - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auraType); if (mTotalAuraList.empty()) return 0; @@ -4855,29 +4854,29 @@ int32 Unit::GetMaxNegativeAuraModifier(AuraType auratype, std::function bool + return GetTotalAuraModifier(auraType, [miscMask](AuraEffect const* aurEff) -> bool { if ((aurEff->GetMiscValue() & miscMask) != 0) return true; @@ -4885,9 +4884,9 @@ int32 Unit::GetTotalAuraModifierByMiscMask(AuraType auratype, uint32 miscMask) c }); } -float Unit::GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 miscMask) const +float Unit::GetTotalAuraMultiplierByMiscMask(AuraType auraType, uint32 miscMask) const { - return GetTotalAuraMultiplier(auratype, [miscMask](AuraEffect const* aurEff) -> bool + return GetTotalAuraMultiplier(auraType, [miscMask](AuraEffect const* aurEff) -> bool { if ((aurEff->GetMiscValue() & miscMask) != 0) return true; @@ -4895,9 +4894,9 @@ float Unit::GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 miscMask) }); } -int32 Unit::GetMaxPositiveAuraModifierByMiscMask(AuraType auratype, uint32 miscMask, AuraEffect const* except /*= nullptr*/) const +int32 Unit::GetMaxPositiveAuraModifierByMiscMask(AuraType auraType, uint32 miscMask, AuraEffect const* except /*= nullptr*/) const { - return GetMaxPositiveAuraModifier(auratype, [miscMask, except](AuraEffect const* aurEff) -> bool + return GetMaxPositiveAuraModifier(auraType, [miscMask, except](AuraEffect const* aurEff) -> bool { if (except != aurEff && (aurEff->GetMiscValue() & miscMask) != 0) return true; @@ -4905,9 +4904,9 @@ int32 Unit::GetMaxPositiveAuraModifierByMiscMask(AuraType auratype, uint32 miscM }); } -int32 Unit::GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 miscMask) const +int32 Unit::GetMaxNegativeAuraModifierByMiscMask(AuraType auraType, uint32 miscMask) const { - return GetMaxNegativeAuraModifier(auratype, [miscMask](AuraEffect const* aurEff) -> bool + return GetMaxNegativeAuraModifier(auraType, [miscMask](AuraEffect const* aurEff) -> bool { if ((aurEff->GetMiscValue() & miscMask) != 0) return true; @@ -4915,9 +4914,9 @@ int32 Unit::GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 miscM }); } -int32 Unit::GetTotalAuraModifierByMiscValue(AuraType auratype, int32 miscValue) const +int32 Unit::GetTotalAuraModifierByMiscValue(AuraType auraType, int32 miscValue) const { - return GetTotalAuraModifier(auratype, [miscValue](AuraEffect const* aurEff) -> bool + return GetTotalAuraModifier(auraType, [miscValue](AuraEffect const* aurEff) -> bool { if (aurEff->GetMiscValue() == miscValue) return true; @@ -4925,9 +4924,9 @@ int32 Unit::GetTotalAuraModifierByMiscValue(AuraType auratype, int32 miscValue) }); } -float Unit::GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 miscValue) const +float Unit::GetTotalAuraMultiplierByMiscValue(AuraType auraType, int32 miscValue) const { - return GetTotalAuraMultiplier(auratype, [miscValue](AuraEffect const* aurEff) -> bool + return GetTotalAuraMultiplier(auraType, [miscValue](AuraEffect const* aurEff) -> bool { if (aurEff->GetMiscValue() == miscValue) return true; @@ -4935,9 +4934,9 @@ float Unit::GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 miscValue }); } -int32 Unit::GetMaxPositiveAuraModifierByMiscValue(AuraType auratype, int32 miscValue) const +int32 Unit::GetMaxPositiveAuraModifierByMiscValue(AuraType auraType, int32 miscValue) const { - return GetMaxPositiveAuraModifier(auratype, [miscValue](AuraEffect const* aurEff) -> bool + return GetMaxPositiveAuraModifier(auraType, [miscValue](AuraEffect const* aurEff) -> bool { if (aurEff->GetMiscValue() == miscValue) return true; @@ -4945,9 +4944,9 @@ int32 Unit::GetMaxPositiveAuraModifierByMiscValue(AuraType auratype, int32 miscV }); } -int32 Unit::GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 miscValue) const +int32 Unit::GetMaxNegativeAuraModifierByMiscValue(AuraType auraType, int32 miscValue) const { - return GetMaxNegativeAuraModifier(auratype, [miscValue](AuraEffect const* aurEff) -> bool + return GetMaxNegativeAuraModifier(auraType, [miscValue](AuraEffect const* aurEff) -> bool { if (aurEff->GetMiscValue() == miscValue) return true; @@ -4955,9 +4954,9 @@ int32 Unit::GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 miscV }); } -int32 Unit::GetTotalAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const +int32 Unit::GetTotalAuraModifierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const { - return GetTotalAuraModifier(auratype, [affectedSpell](AuraEffect const* aurEff) -> bool + return GetTotalAuraModifier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool { if (aurEff->IsAffectingSpell(affectedSpell)) return true; @@ -4965,9 +4964,9 @@ int32 Unit::GetTotalAuraModifierByAffectMask(AuraType auratype, SpellInfo const* }); } -float Unit::GetTotalAuraMultiplierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const +float Unit::GetTotalAuraMultiplierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const { - return GetTotalAuraMultiplier(auratype, [affectedSpell](AuraEffect const* aurEff) -> bool + return GetTotalAuraMultiplier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool { if (aurEff->IsAffectingSpell(affectedSpell)) return true; @@ -4975,9 +4974,9 @@ float Unit::GetTotalAuraMultiplierByAffectMask(AuraType auratype, SpellInfo cons }); } -int32 Unit::GetMaxPositiveAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const +int32 Unit::GetMaxPositiveAuraModifierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const { - return GetMaxPositiveAuraModifier(auratype, [affectedSpell](AuraEffect const* aurEff) -> bool + return GetMaxPositiveAuraModifier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool { if (aurEff->IsAffectingSpell(affectedSpell)) return true; @@ -4985,9 +4984,9 @@ int32 Unit::GetMaxPositiveAuraModifierByAffectMask(AuraType auratype, SpellInfo }); } -int32 Unit::GetMaxNegativeAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const +int32 Unit::GetMaxNegativeAuraModifierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const { - return GetMaxNegativeAuraModifier(auratype, [affectedSpell](AuraEffect const* aurEff) -> bool + return GetMaxNegativeAuraModifier(auraType, [affectedSpell](AuraEffect const* aurEff) -> bool { if (aurEff->IsAffectingSpell(affectedSpell)) return true; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index e7d53185305..74ebb89c6fc 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1537,10 +1537,10 @@ class TC_GAME_API Unit : public WorldObject uint32 GetAuraCount(uint32 spellId) const; bool HasAura(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint8 reqEffMask = 0) const; bool HasAuraType(AuraType auraType) const; - bool HasAuraTypeWithCaster(AuraType auratype, ObjectGuid caster) const; - bool HasAuraTypeWithMiscvalue(AuraType auratype, int32 miscvalue) const; - bool HasAuraTypeWithAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; - bool HasAuraTypeWithValue(AuraType auratype, int32 value) const; + bool HasAuraTypeWithCaster(AuraType auraType, ObjectGuid caster) const; + bool HasAuraTypeWithMiscvalue(AuraType auraType, int32 miscValue) const; + bool HasAuraTypeWithAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const; + bool HasAuraTypeWithValue(AuraType auraType, int32 value) const; bool HasNegativeAuraWithInterruptFlag(uint32 flag, ObjectGuid guid = ObjectGuid::Empty) const; bool HasAuraWithMechanic(uint32 mechanicMask) const; bool HasStrongerAuraWithDR(SpellInfo const* auraSpellInfo, Unit* caster, bool triggered) const; @@ -1549,30 +1549,30 @@ class TC_GAME_API Unit : public WorldObject uint32 GetDiseasesByCaster(ObjectGuid casterGUID, bool remove = false); uint32 GetDoTsByCaster(ObjectGuid casterGUID) const; - int32 GetTotalAuraModifier(AuraType auratype) const; - float GetTotalAuraMultiplier(AuraType auratype) const; - int32 GetMaxPositiveAuraModifier(AuraType auratype) const; - int32 GetMaxNegativeAuraModifier(AuraType auratype) const; + int32 GetTotalAuraModifier(AuraType auraType) const; + float GetTotalAuraMultiplier(AuraType auraType) const; + int32 GetMaxPositiveAuraModifier(AuraType auraType) const; + int32 GetMaxNegativeAuraModifier(AuraType auraType) const; - int32 GetTotalAuraModifier(AuraType auratype, std::function const& predicate) const; - float GetTotalAuraMultiplier(AuraType auratype, std::function const& predicate) const; - int32 GetMaxPositiveAuraModifier(AuraType auratype, std::function const& predicate) const; - int32 GetMaxNegativeAuraModifier(AuraType auratype, std::function const& predicate) const; + int32 GetTotalAuraModifier(AuraType auraType, std::function const& predicate) const; + float GetTotalAuraMultiplier(AuraType auraType, std::function const& predicate) const; + int32 GetMaxPositiveAuraModifier(AuraType auraType, std::function const& predicate) const; + int32 GetMaxNegativeAuraModifier(AuraType auraType, std::function const& predicate) const; - int32 GetTotalAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask) const; - float GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 misc_mask) const; - int32 GetMaxPositiveAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask, AuraEffect const* except = nullptr) const; - int32 GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask) const; + int32 GetTotalAuraModifierByMiscMask(AuraType auraType, uint32 misc_mask) const; + float GetTotalAuraMultiplierByMiscMask(AuraType auraType, uint32 misc_mask) const; + int32 GetMaxPositiveAuraModifierByMiscMask(AuraType auraType, uint32 misc_mask, AuraEffect const* except = nullptr) const; + int32 GetMaxNegativeAuraModifierByMiscMask(AuraType auraType, uint32 misc_mask) const; - int32 GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const; - float GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 misc_value) const; - int32 GetMaxPositiveAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const; - int32 GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const; + int32 GetTotalAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const; + float GetTotalAuraMultiplierByMiscValue(AuraType auraType, int32 misc_value) const; + int32 GetMaxPositiveAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const; + int32 GetMaxNegativeAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const; - int32 GetTotalAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; - float GetTotalAuraMultiplierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; - int32 GetMaxPositiveAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; - int32 GetMaxNegativeAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; + int32 GetTotalAuraModifierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const; + float GetTotalAuraMultiplierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const; + int32 GetMaxPositiveAuraModifierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const; + int32 GetMaxNegativeAuraModifierByAffectMask(AuraType auraType, SpellInfo const* affectedSpell) const; float GetResistanceBuffMods(SpellSchools school, bool positive) const; void SetResistanceBuffMods(SpellSchools school, bool positive, float val);