AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
UnitAura Class Reference

#include "SpellAuras.h"

Inheritance diagram for UnitAura:
Aura

Public Member Functions

void _ApplyForTarget (Unit *target, Unit *caster, AuraApplication *aurApp) override
 
void _UnapplyForTarget (Unit *target, Unit *caster, AuraApplication *aurApp) override
 
void Remove (AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT) override
 
void FillTargetMap (std::map< Unit *, uint8 > &targets, Unit *caster) override
 
void SetDiminishGroup (DiminishingGroup group)
 
DiminishingGroup GetDiminishGroup () const
 
- Public Member Functions inherited from Aura
 Aura (SpellInfo const *spellproto, WorldObject *owner, Unit *caster, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID=ObjectGuid::Empty)
 
void _InitEffects (uint8 effMask, Unit *caster, int32 *baseAmount)
 
virtual ~Aura ()
 
SpellInfo const * GetSpellInfo () const
 
uint32 GetId () const
 
ObjectGuid GetCastItemGUID () const
 
uint32 GetCastItemEntry () const
 
ObjectGuid GetCasterGUID () const
 
Unit * GetCaster () const
 
WorldObject * GetOwner () const
 
Unit * GetUnitOwner () const
 
DynamicObject * GetDynobjOwner () const
 
AuraObjectType GetType () const
 
void _Remove (AuraRemoveMode removeMode)
 
void UpdateTargetMap (Unit *caster, bool apply=true)
 
void _RegisterForTargets ()
 
void ApplyForTargets ()
 
void _ApplyEffectForTargets (uint8 effIndex)
 
void UpdateOwner (uint32 diff, WorldObject *owner)
 
void Update (uint32 diff, Unit *caster)
 
time_t GetApplyTime () const
 
int32 GetMaxDuration () const
 
void SetMaxDuration (int32 duration)
 
int32 CalcMaxDuration () const
 
int32 CalcMaxDuration (Unit *caster) const
 
int32 GetDuration () const
 
void SetDuration (int32 duration, bool withMods=false)
 
void RefreshDuration (bool withMods=false)
 
void RefreshTimers (bool periodicReset=false)
 
void RefreshTimersWithMods ()
 
bool IsExpired () const
 
bool IsPermanent () const
 
uint8 GetCharges () const
 
void SetCharges (uint8 charges)
 
uint8 CalcMaxCharges (Unit *caster) const
 
uint8 CalcMaxCharges () const
 
bool ModCharges (int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
bool DropCharge (AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
 
uint8 GetStackAmount () const
 
void SetStackAmount (uint8 num)
 
bool ModStackAmount (int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool periodicReset=false)
 
void RefreshSpellMods ()
 
uint8 GetCasterLevel () const
 
bool HasMoreThanOneEffectForType (AuraType auraType) const
 
bool IsArea () const
 
bool IsPassive () const
 
bool IsDeathPersistent () const
 
bool IsRemovedOnShapeLost (Unit *target) const
 
bool CanBeSaved () const
 
bool IsRemoved () const
 
bool CanBeSentToClient () const
 
bool IsSingleTarget () const
 
bool IsSingleTargetWith (Aura const *aura) const
 
void SetIsSingleTarget (bool val)
 
void UnregisterSingleTarget ()
 
int32 CalcDispelChance (Unit *auraTarget, bool offensive) const
 
void SetLoadedState (int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint8 recalculateMask, int32 *amount)
 
bool HasEffect (uint8 effIndex) const
 
bool HasEffectType (AuraType type) const
 
AuraEffect * GetEffect (uint8 effIndex) const
 
uint8 GetEffectMask () const
 
void RecalculateAmountOfEffects ()
 
void HandleAllEffects (AuraApplication *aurApp, uint8 mode, bool apply)
 
ApplicationMap const & GetApplicationMap ()
 
void GetApplicationList (std::list< AuraApplication * > &applicationList) const
 
AuraApplication const * GetApplicationOfTarget (ObjectGuid guid) const
 
AuraApplication * GetApplicationOfTarget (ObjectGuid guid)
 
bool IsAppliedOnTarget (ObjectGuid guid) const
 
void SetNeedClientUpdateForTargets () const
 
void HandleAuraSpecificMods (AuraApplication const *aurApp, Unit *caster, bool apply, bool onReapply)
 
bool CanBeAppliedOn (Unit *target)
 
bool CheckAreaTarget (Unit *target)
 
bool CanStackWith (Aura const *existingAura) const
 
bool IsAuraStronger (Aura const *newAura) const
 
bool IsProcOnCooldown (TimePoint now) const
 
void AddProcCooldown (TimePoint cooldownEnd)
 
void AddProcCooldown (SpellProcEntry const *procEntry, TimePoint now)
 
void ResetProcCooldown ()
 
bool IsUsingCharges () const
 
void SetUsingCharges (bool val)
 
void PrepareProcToTrigger (AuraApplication *aurApp, ProcEventInfo &eventInfo, TimePoint now)
 
uint8 GetProcEffectMask (AuraApplication *aurApp, ProcEventInfo &eventInfo, TimePoint now) const
 
float CalcProcChance (SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
 
void TriggerProcOnEvent (uint8 procEffectMask, AuraApplication *aurApp, ProcEventInfo &eventInfo)
 
void ConsumeProcCharges (SpellProcEntry const *procEntry)
 
void LoadScripts ()
 
bool CallScriptCheckAreaTargetHandlers (Unit *target)
 
void CallScriptDispel (DispelInfo *dispelInfo)
 
void CallScriptAfterDispel (DispelInfo *dispelInfo)
 
bool CallScriptEffectApplyHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
 
bool CallScriptEffectRemoveHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
 
void CallScriptAfterEffectApplyHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
 
void CallScriptAfterEffectRemoveHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
 
bool CallScriptEffectPeriodicHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp)
 
void CallScriptEffectUpdatePeriodicHandlers (AuraEffect *aurEff)
 
void CallScriptEffectCalcAmountHandlers (AuraEffect const *aurEff, int32 &amount, bool &canBeRecalculated)
 
void CallScriptEffectCalcPeriodicHandlers (AuraEffect const *aurEff, bool &isPeriodic, int32 &amplitude)
 
void CallScriptEffectCalcSpellModHandlers (AuraEffect const *aurEff, SpellModifier *&spellMod)
 
void CallScriptEffectAbsorbHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
 
void CallScriptEffectAfterAbsorbHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
 
void CallScriptEffectManaShieldHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
 
void CallScriptEffectAfterManaShieldHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
 
void CallScriptEffectSplitHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &splitAmount)
 
bool CallScriptCheckProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
bool CallScriptCheckEffectProcHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
bool CallScriptAfterCheckProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo, bool isTriggeredAtSpellProcEvent)
 
bool CallScriptPrepareProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
bool CallScriptProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
void CallScriptAfterProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
bool CallScriptEffectProcHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
void CallScriptAfterEffectProcHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
 
AuraScript * GetScriptByName (std::string const &scriptName) const
 
template<class Script >
Script * GetScript (std::string const &scriptName) const
 
virtual std::string GetDebugInfo () const
 
void SetTriggeredByAuraSpellInfo (SpellInfo const *triggeredByAuraSpellInfo)
 
SpellInfo const * GetTriggeredByAuraSpellInfo () const
 

Protected Member Functions

 UnitAura (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID=ObjectGuid::Empty)
 

Private Attributes

DiminishingGroup m_AuraDRGroup: 8
 

Friends

Aura * Aura::Create (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID)
 

Additional Inherited Members

- Public Types inherited from Aura
typedef std::map< ObjectGuid, AuraApplication * > ApplicationMap
 
- Static Public Member Functions inherited from Aura
static uint8 BuildEffectMaskForOwner (SpellInfo const *spellProto, uint8 avalibleEffectMask, WorldObject *owner)
 
static Aura * TryRefreshStackOrCreate (SpellInfo const *spellproto, uint8 tryEffMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, bool *refresh=nullptr, bool periodicReset=false)
 
static Aura * TryCreate (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemGUID=ObjectGuid::Empty)
 
static Aura * Create (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID=ObjectGuid::Empty)
 
- Public Attributes inherited from Aura
std::list< AuraScript * > m_loadedScripts
 
- Protected Attributes inherited from Aura
SpellInfo const *const m_spellInfo
 
ObjectGuid const m_casterGuid
 
ObjectGuid const m_castItemGuid
 
uint32 const m_castItemEntry
 
time_t const m_applyTime
 
WorldObject *const m_owner
 
int32 m_maxDuration
 
int32 m_duration
 
int32 m_timeCla
 
int32 m_updateTargetMapInterval
 
uint8 const m_casterLevel
 
uint8 m_procCharges
 
uint8 m_stackAmount
 
AuraEffect * m_effects [3]
 
ApplicationMap m_applications
 
bool m_isRemoved: 1
 
bool m_isSingleTarget: 1
 
bool m_isUsingCharges: 1
 
TimePoint m_procCooldown
 

Detailed Description

Constructor & Destructor Documentation

◆ UnitAura()

UnitAura::UnitAura ( SpellInfo const *  spellproto,
uint8  effMask,
WorldObject *  owner,
Unit *  caster,
int32 *  baseAmount,
Item *  castItem,
ObjectGuid  casterGUID,
ObjectGuid  itemGUID = ObjectGuid::Empty 
)
explicitprotected
2876 : Aura(spellproto, owner, caster, castItem, casterGUID, itemGUID)
2877{
2879 LoadScripts();
2880 _InitEffects(effMask, caster, baseAmount);
2881 GetUnitOwner()->_AddAura(this, caster);
2882}
@ DIMINISHING_NONE
Definition SharedDefines.h:3491
Definition SpellAuras.h:88
Unit * GetUnitOwner() const
Definition SpellAuras.h:109
void LoadScripts()
Definition SpellAuras.cpp:2448
void _InitEffects(uint8 effMask, Unit *caster, int32 *baseAmount)
Definition SpellAuras.cpp:379
DiminishingGroup m_AuraDRGroup
Definition SpellAuras.h:309
void _AddAura(UnitAura *aura, Unit *caster)
Definition Unit.cpp:4445

References Unit::_AddAura(), Aura::_InitEffects(), DIMINISHING_NONE, Aura::GetUnitOwner(), Aura::LoadScripts(), and m_AuraDRGroup.

Member Function Documentation

◆ _ApplyForTarget()

void UnitAura::_ApplyForTarget ( Unit *  target,
Unit *  caster,
AuraApplication *  aurApp 
)
overridevirtual

Reimplemented from Aura.

2885{
2886 Aura::_ApplyForTarget(target, caster, aurApp);
2887
2888 // register aura diminishing on apply
2889 if (DiminishingGroup group = GetDiminishGroup())
2890 target->ApplyDiminishingAura(group, true);
2891}
DiminishingGroup
Definition SharedDefines.h:3490
virtual void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
Definition SpellAuras.cpp:436
DiminishingGroup GetDiminishGroup() const
Definition SpellAuras.h:306
void ApplyDiminishingAura(DiminishingGroup group, bool apply)
Definition Unit.cpp:11468

References Aura::_ApplyForTarget(), Unit::ApplyDiminishingAura(), and GetDiminishGroup().

◆ _UnapplyForTarget()

void UnitAura::_UnapplyForTarget ( Unit *  target,
Unit *  caster,
AuraApplication *  aurApp 
)
overridevirtual

Reimplemented from Aura.

2894{
2895 Aura::_UnapplyForTarget(target, caster, aurApp);
2896
2897 // unregister aura diminishing (and store last time)
2898 if (DiminishingGroup group = GetDiminishGroup())
2899 target->ApplyDiminishingAura(group, false);
2900}
virtual void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
Definition SpellAuras.cpp:459

References Aura::_UnapplyForTarget(), Unit::ApplyDiminishingAura(), and GetDiminishGroup().

◆ FillTargetMap()

void UnitAura::FillTargetMap ( std::map< Unit *, uint8 > &  targets,
Unit *  caster 
)
overridevirtual
Todo:
: Not sure whether the fallthrough was a mistake (forgetting a break) or intended. This should be double-checked.

Implements Aura.

2910{
2911 for (uint8 effIndex = 0; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
2912 {
2913 if (!HasEffect(effIndex))
2914 continue;
2915 UnitList targetList;
2916 // non-area aura
2917 if (GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_APPLY_AURA)
2918 {
2919 targetList.push_back(GetUnitOwner());
2920 }
2921 else
2922 {
2923 float radius = GetSpellInfo()->Effects[effIndex].CalcRadius(caster);
2924
2925 if (!GetUnitOwner()->HasAuraState(AURA_STATE_BANISHED, GetSpellInfo(), caster))
2926 {
2927 switch (GetSpellInfo()->Effects[effIndex].Effect)
2928 {
2931 {
2932 targetList.push_back(GetUnitOwner());
2935 Cell::VisitObjects(GetUnitOwner(), searcher, radius);
2936 break;
2937 }
2939 {
2940 targetList.push_back(GetUnitOwner());
2943 Cell::VisitObjects(GetUnitOwner(), searcher, radius);
2944 break;
2945 }
2947 {
2948 Acore::AnyAoETargetUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius); // No GetCharmer in searcher
2950 Cell::VisitObjects(GetUnitOwner(), searcher, radius);
2951 break;
2952 }
2954 targetList.push_back(GetUnitOwner());
2955 [[fallthrough]];
2957 {
2958 if (Unit* owner = GetUnitOwner()->GetCharmerOrOwner())
2959 if (GetUnitOwner()->IsWithinDistInMap(owner, radius))
2960 targetList.push_back(owner);
2961 break;
2962 }
2963 }
2964 }
2965 }
2966
2967 for (UnitList::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
2968 {
2969 std::map<Unit*, uint8>::iterator existing = targets.find(*itr);
2970 if (existing != targets.end())
2971 existing->second |= 1 << effIndex;
2972 else
2973 targets[*itr] = 1 << effIndex;
2974 }
2975 }
2976}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1673
std::uint8_t uint8
Definition Define.h:109
@ SPELL_EFFECT_APPLY_AREA_AURA_PARTY
Definition SharedDefines.h:801
@ SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
Definition SharedDefines.h:894
@ SPELL_EFFECT_APPLY_AREA_AURA_PET
Definition SharedDefines.h:885
@ SPELL_EFFECT_APPLY_AREA_AURA_RAID
Definition SharedDefines.h:831
@ SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
Definition SharedDefines.h:895
@ SPELL_EFFECT_APPLY_AURA
Definition SharedDefines.h:772
@ SPELL_EFFECT_APPLY_AREA_AURA_OWNER
Definition SharedDefines.h:909
@ AURA_STATE_BANISHED
Definition SharedDefines.h:1288
std::list< Unit * > UnitList
Definition Unit.h:78
Definition GridNotifiers.h:1103
Definition GridNotifiers.h:999
Definition GridNotifiers.h:1035
bool HasEffect(uint8 effIndex) const
Definition SpellAuras.h:175
SpellInfo const * GetSpellInfo() const
Definition SpellAuras.h:101
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:417
Definition Unit.h:665
Definition GridNotifiers.h:446
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

References AURA_STATE_BANISHED, SpellInfo::Effects, Aura::GetSpellInfo(), Aura::GetUnitOwner(), Aura::HasEffect(), MAX_SPELL_EFFECTS, SPELL_EFFECT_APPLY_AREA_AURA_ENEMY, SPELL_EFFECT_APPLY_AREA_AURA_FRIEND, SPELL_EFFECT_APPLY_AREA_AURA_OWNER, SPELL_EFFECT_APPLY_AREA_AURA_PARTY, SPELL_EFFECT_APPLY_AREA_AURA_PET, SPELL_EFFECT_APPLY_AREA_AURA_RAID, SPELL_EFFECT_APPLY_AURA, and Cell::VisitObjects().

◆ GetDiminishGroup()

DiminishingGroup UnitAura::GetDiminishGroup ( ) const
inline
306{ return m_AuraDRGroup; }

References m_AuraDRGroup.

Referenced by _ApplyForTarget(), and _UnapplyForTarget().

◆ Remove()

void UnitAura::Remove ( AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT)
overridevirtual

Implements Aura.

2903{
2904 if (IsRemoved())
2905 return;
2906 GetUnitOwner()->RemoveOwnedAura(this, removeMode);
2907}
bool IsRemoved() const
Definition SpellAuras.h:163
void RemoveOwnedAura(AuraMap::iterator &i, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4730

References Aura::GetUnitOwner(), Aura::IsRemoved(), and Unit::RemoveOwnedAura().

◆ SetDiminishGroup()

void UnitAura::SetDiminishGroup ( DiminishingGroup  group)
inline
305{ m_AuraDRGroup = group; }

References m_AuraDRGroup.

Friends And Related Symbol Documentation

◆ Aura::Create

Aura * Aura::Create ( SpellInfo const *  spellproto,
uint8  effMask,
WorldObject *  owner,
Unit *  caster,
int32 *  baseAmount,
Item *  castItem,
ObjectGuid  casterGUID,
ObjectGuid  itemGUID 
)
friend

Member Data Documentation

◆ m_AuraDRGroup

DiminishingGroup UnitAura::m_AuraDRGroup
private

The documentation for this class was generated from the following files: