Core/Units: Add std::function overloads to GetAura/GetAuraApplication
This commit is contained in:
@@ -4413,26 +4413,73 @@ AuraEffect* Unit::GetAuraEffect(AuraType type, SpellFamilyNames family, flag128
|
||||
|
||||
AuraApplication * Unit::GetAuraApplication(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint32 reqEffMask, AuraApplication * except) const
|
||||
{
|
||||
AuraApplicationMapBounds range = m_appliedAuras.equal_range(spellId);
|
||||
for (; range.first != range.second; ++range.first)
|
||||
return GetAuraApplication(spellId, [&](AuraApplication const* app)
|
||||
{
|
||||
AuraApplication* app = range.first->second;
|
||||
Aura const* aura = app->GetBase();
|
||||
|
||||
if (((aura->GetEffectMask() & reqEffMask) == reqEffMask)
|
||||
&& (!casterGUID || aura->GetCasterGUID() == casterGUID)
|
||||
&& (!itemCasterGUID || aura->GetCastItemGUID() == itemCasterGUID)
|
||||
&& (!except || except != app))
|
||||
&& (!casterGUID || aura->GetCasterGUID() == casterGUID)
|
||||
&& (!itemCasterGUID || aura->GetCastItemGUID() == itemCasterGUID)
|
||||
&& (!except || except != app))
|
||||
{
|
||||
return app;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
AuraApplication* Unit::GetAuraApplication(uint32 spellId, std::function<bool(AuraApplication const*)> const& predicate) const
|
||||
{
|
||||
for (AuraApplicationMap::value_type const& pair : Trinity::Containers::MapEqualRange(m_appliedAuras, spellId))
|
||||
if (predicate(pair.second))
|
||||
return pair.second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AuraApplication* Unit::GetAuraApplication(uint32 spellId, std::function<bool(Aura const*)> const& predicate) const
|
||||
{
|
||||
for (AuraApplicationMap::value_type const& pair : Trinity::Containers::MapEqualRange(m_appliedAuras, spellId))
|
||||
if (predicate(pair.second->GetBase()))
|
||||
return pair.second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AuraApplication* Unit::GetAuraApplication(std::function<bool(AuraApplication const*)> const& predicate) const
|
||||
{
|
||||
for (AuraApplicationMap::value_type const& pair : m_appliedAuras)
|
||||
if (predicate(pair.second))
|
||||
return pair.second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AuraApplication* Unit::GetAuraApplication(std::function<bool(Aura const*)> const& predicate) const
|
||||
{
|
||||
for (AuraApplicationMap::value_type const& pair : m_appliedAuras)
|
||||
if (predicate(pair.second->GetBase()))
|
||||
return pair.second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Aura* Unit::GetAura(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint32 reqEffMask) const
|
||||
{
|
||||
AuraApplication * aurApp = GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask);
|
||||
AuraApplication* aurApp = GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask);
|
||||
return aurApp ? aurApp->GetBase() : nullptr;
|
||||
}
|
||||
|
||||
Aura* Unit::GetAura(uint32 spellId, std::function<bool(Aura const*)> const& predicate) const
|
||||
{
|
||||
AuraApplication* aurApp = GetAuraApplication(spellId, predicate);
|
||||
return aurApp ? aurApp->GetBase() : nullptr;
|
||||
}
|
||||
|
||||
Aura* Unit::GetAura(std::function<bool(Aura const*)> const& predicate) const
|
||||
{
|
||||
AuraApplication* aurApp = GetAuraApplication(predicate);
|
||||
return aurApp ? aurApp->GetBase() : nullptr;
|
||||
}
|
||||
|
||||
@@ -4524,9 +4571,12 @@ uint32 Unit::GetAuraCount(uint32 spellId) const
|
||||
|
||||
bool Unit::HasAura(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint32 reqEffMask) const
|
||||
{
|
||||
if (GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask))
|
||||
return true;
|
||||
return false;
|
||||
return GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask) != nullptr;
|
||||
}
|
||||
|
||||
bool Unit::HasAura(std::function<bool(Aura const*)> const& predicate) const
|
||||
{
|
||||
return GetAuraApplication(predicate) != nullptr;
|
||||
}
|
||||
|
||||
bool Unit::HasAuraType(AuraType auraType) const
|
||||
|
||||
@@ -1408,10 +1408,17 @@ class TC_GAME_API Unit : public WorldObject
|
||||
AuraEffect* GetAuraEffectOfRankedSpell(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID = ObjectGuid::Empty) const;
|
||||
AuraEffect* GetAuraEffect(AuraType type, SpellFamilyNames family, flag128 const& familyFlag, ObjectGuid casterGUID = ObjectGuid::Empty) const;
|
||||
|
||||
AuraApplication * GetAuraApplication(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0, AuraApplication * except = nullptr) const;
|
||||
Aura* GetAura(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0) const;
|
||||
AuraApplication* GetAuraApplication(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0, AuraApplication* except = nullptr) const;
|
||||
AuraApplication* GetAuraApplication(uint32 spellId, std::function<bool(AuraApplication const*)> const& predicate) const;
|
||||
AuraApplication* GetAuraApplication(uint32 spellId, std::function<bool(Aura const*)> const& predicate) const;
|
||||
AuraApplication* GetAuraApplication(std::function<bool(AuraApplication const*)> const& predicate) const;
|
||||
AuraApplication* GetAuraApplication(std::function<bool(Aura const*)> const& predicate) const;
|
||||
|
||||
AuraApplication * GetAuraApplicationOfRankedSpell(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0, AuraApplication * except = nullptr) const;
|
||||
Aura* GetAura(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0) const;
|
||||
Aura* GetAura(uint32 spellId, std::function<bool(Aura const*)> const& predicate) const;
|
||||
Aura* GetAura(std::function<bool(Aura const*)> const& predicate) const;
|
||||
|
||||
AuraApplication* GetAuraApplicationOfRankedSpell(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0, AuraApplication* except = nullptr) const;
|
||||
Aura* GetAuraOfRankedSpell(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0) const;
|
||||
|
||||
void GetDispellableAuraList(Unit* caster, uint32 dispelMask, DispelChargesList& dispelList, bool isReflect = false) const;
|
||||
@@ -1419,6 +1426,7 @@ class TC_GAME_API Unit : public WorldObject
|
||||
bool HasAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid caster = ObjectGuid::Empty) const;
|
||||
uint32 GetAuraCount(uint32 spellId) const;
|
||||
bool HasAura(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint32 reqEffMask = 0) const;
|
||||
bool HasAura(std::function<bool(Aura const*)> const& predicate) const;
|
||||
bool HasAuraType(AuraType auraType) const;
|
||||
bool HasAuraTypeWithCaster(AuraType auratype, ObjectGuid caster) const;
|
||||
bool HasAuraTypeWithMiscvalue(AuraType auratype, int32 miscvalue) const;
|
||||
|
||||
Reference in New Issue
Block a user