Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
SpellAuras.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRE_SPELLAURAS_H
7#define SKYFIRE_SPELLAURAS_H
8
9#include "SpellAuraDefines.h"
10#include "SpellInfo.h"
11#include "Unit.h"
12
13class SpellInfo;
14struct SpellModifier;
15struct ProcTriggerSpell;
16struct SpellProcEntry;
17
18// forward decl
19class AuraEffect;
20class Aura;
21class DynamicObject;
22class AuraScript;
23class ProcInfo;
24
25// update aura target map every 500 ms instead of every update - reduce amount of grid searcher calls
26#define UPDATE_TARGET_MAP_INTERVAL 500
27
29{
30 friend void Unit::_ApplyAura(AuraApplication* aurApp, uint32 effMask);
31 friend void Unit::_UnapplyAura(AuraApplicationMap::iterator& i, AuraRemoveMode removeMode);
32 friend void Unit::_ApplyAuraEffect(Aura* aura, uint8 effIndex);
35private:
36 Unit* const _target;
37 Aura* const _base;
38 AuraRemoveMode _removeMode : 8; // Store info for know remove aura reason
39 uint8 _slot; // Aura slot on unit
40 uint32 _flags; // Aura info flag
41 uint32 _effectsToApply; // Used only at spell hit to determine which effect should be applied
43
45
46 explicit AuraApplication(Unit* target, Unit* caster, Aura* base, uint32 effMask);
47 void _Remove();
48
49private:
50 void _InitFlags(Unit* caster, uint32 effMask);
51 void _HandleEffect(uint8 effIndex, bool apply);
52
53public:
54 Unit* GetTarget() const { return _target; }
55 Aura* GetBase() const { return _base; }
56
57 uint8 GetSlot() const { return _slot; }
58 uint32 GetFlags() const { return _flags; }
59 uint32 GetEffectMask() const { return _effMask; }
60 bool HasEffect(uint32 effect) const { ASSERT(effect < MAX_SPELL_EFFECTS); return _effMask & (1 << effect); }
61 bool IsPositive() const { return _flags & AFLAG_POSITIVE; }
62 bool IsSelfcasted() const { return _flags & AFLAG_CASTER; }
64
67
69 bool IsNeedClientUpdate() const { return _needClientUpdate; }
70 void ClientUpdate(bool remove = false);
71};
72
73class Aura
74{
75 friend Aura* Unit::_TryStackingOrRefreshingExistingAura(SpellInfo const* newAura, uint32 effMask, Unit* caster, int32* baseAmount, Item* castItem, uint64 casterGUID);
76public:
77 typedef std::map<uint64, AuraApplication*> ApplicationMap;
78
79 static uint32 BuildEffectMaskForOwner(SpellInfo const* spellProto, uint32 avalibleEffectMask, WorldObject* owner);
80 static Aura* TryRefreshStackOrCreate(SpellInfo const* spellproto, uint32 tryEffMask, WorldObject* owner, Unit* caster, int32* baseAmount = NULL, Item* castItem = NULL, uint64 casterGUID = 0, bool* refresh = NULL);
81 static Aura* TryCreate(SpellInfo const* spellproto, uint32 effMask, WorldObject* owner, Unit* caster, int32* baseAmount = NULL, Item* castItem = NULL, uint64 casterGUID = 0);
82 static Aura* Create(SpellInfo const* spellproto, uint32 effMask, WorldObject* owner, Unit* caster, int32* baseAmount, Item* castItem, uint64 casterGUID);
83 explicit Aura(SpellInfo const* spellproto, WorldObject* owner, Unit* caster, Item* castItem, uint64 casterGUID);
84 void _InitEffects(uint32 effMask, Unit* caster, int32* baseAmount);
85 virtual ~Aura();
86
87 SpellInfo const* GetSpellInfo() const { return m_spellInfo; }
88 uint32 GetId() const { return GetSpellInfo()->Id; }
89
91 uint64 GetCasterGUID() const { return m_casterGuid; }
92 Unit* GetCaster() const;
93 WorldObject* GetOwner() const { return m_owner; }
96
97 AuraObjectType GetType() const;
98
99 virtual void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication* auraApp);
100 virtual void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication* auraApp);
101 void _Remove(AuraRemoveMode removeMode);
102 virtual void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) = 0;
103
104 virtual void FillTargetMap(std::map<Unit*, uint32>& targets, Unit* caster) = 0;
105 void UpdateTargetMap(Unit* caster, bool apply = true);
106
107 void _RegisterForTargets() { Unit* caster = GetCaster(); UpdateTargetMap(caster, false); }
108 void ApplyForTargets() { Unit* caster = GetCaster(); UpdateTargetMap(caster, true); }
109 void _ApplyEffectForTargets(uint8 effIndex);
110
111 void UpdateOwner(uint32 diff, WorldObject* owner);
112 void Update(uint32 diff, Unit* caster);
113
114 time_t GetApplyTime() const { return m_applyTime; }
116 void SetMaxDuration(int32 duration) { m_maxDuration = duration; }
118 int32 CalcMaxDuration(Unit* caster) const;
119 int32 GetDuration() const { return m_duration; }
120 void SetDuration(int32 duration, bool withMods = false);
121 void RefreshDuration();
122 void RefreshTimers();
123 bool IsExpired() const { return !GetDuration(); }
124 bool IsPermanent() const { return GetMaxDuration() == -1; }
125
126 uint8 GetCharges() const { return m_procCharges; }
127 void SetCharges(uint8 charges);
128 uint8 CalcMaxCharges(Unit* caster) const;
131 bool DropCharge(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) { return ModCharges(-1, removeMode); }
132
134 void SetStackAmount(uint8 num);
136
137 void RefreshSpellMods();
138
140
141 bool IsArea() const;
142 bool IsPassive() const;
143 bool IsDeathPersistent() const;
144
145 bool IsRemovedOnShapeLost(Unit* target) const
146 {
147 return GetCasterGUID() == target->GetGUID()
148 && m_spellInfo->Stances
149 && !(m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT)
150 && !(m_spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT);
151 }
152
153 bool CanBeSaved() const;
154 bool IsRemoved() const { return m_isRemoved; }
155 bool CanBeSentToClient() const;
156 // Single cast aura helpers
157 bool IsSingleTarget() const { return m_isSingleTarget; }
158 bool IsSingleTargetWith(Aura const* aura) const;
159 void SetIsSingleTarget(bool val) { m_isSingleTarget = val; }
161 int32 CalcDispelChance(Unit* auraTarget, bool offensive) const;
162
163 void SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint32 recalculateMask, int32* amount);
164
165 // helpers for aura effects
166 bool HasEffect(uint8 effIndex) const { return GetEffect(effIndex) != NULL; }
167 bool HasEffectType(AuraType type) const;
168 AuraEffect* GetEffect(uint8 effIndex) const { ASSERT(effIndex < MAX_SPELL_EFFECTS); return m_effects[effIndex]; }
169 uint32 GetEffectMask() const { uint32 effMask = 0; for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (m_effects[i]) effMask |= 1 << i; return effMask; }
171 void HandleAllEffects(AuraApplication* aurApp, uint8 mode, bool apply);
172
173 // Helpers for targets
175 void GetApplicationList(Unit::AuraApplicationList& applicationList) const;
176 const AuraApplication* GetApplicationOfTarget(uint64 guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; }
177 AuraApplication* GetApplicationOfTarget(uint64 guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; }
178 bool IsAppliedOnTarget(uint64 guid) const { return m_applications.find(guid) != m_applications.end(); }
179
181 void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply);
182 bool CanBeAppliedOn(Unit* target);
183 bool CheckAreaTarget(Unit* target);
184 bool CanStackWith(Aura const* existingAura) const;
185
186 // Proc system
187 // this subsystem is not yet in use - the core of it is functional, but still some research has to be done
188 // and some dependant problems fixed before it can replace old proc system (for example cooldown handling)
189 // currently proc system functionality is implemented in Unit::ProcDamageAndSpell
190 bool IsProcOnCooldown() const;
191 void AddProcCooldown(uint32 msec);
192 bool IsUsingCharges() const { return m_isUsingCharges; }
193 void SetUsingCharges(bool val) { m_isUsingCharges = val; }
194 void PrepareProcToTrigger(AuraApplication* aurApp, ProcEventInfo& eventInfo);
195 bool IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventInfo) const;
196 float CalcProcChance(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
197 void TriggerProcOnEvent(AuraApplication* aurApp, ProcEventInfo& eventInfo);
198
199 // AuraScript
200 void LoadScripts();
202 void CallScriptDispel(DispelInfo* dispelInfo);
203 void CallScriptAfterDispel(DispelInfo* dispelInfo);
204 bool CallScriptEffectApplyHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
208 bool CallScriptEffectPeriodicHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp);
210 void CallScriptEffectCalcAmountHandlers(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated);
211 void CallScriptEffectCalcPeriodicHandlers(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude);
212 void CallScriptEffectCalcSpellModHandlers(AuraEffect const* aurEff, SpellModifier*& spellMod);
213 void CallScriptEffectAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount, bool& defaultPrevented);
214 void CallScriptEffectAfterAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount);
215 void CallScriptEffectManaShieldHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount, bool& defaultPrevented);
216 void CallScriptEffectAfterManaShieldHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount);
217 void CallScriptEffectSplitHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& splitAmount);
218 // Spell Proc Hooks
219 bool CallScriptCheckProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
220 bool CallScriptPrepareProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
221 bool CallScriptProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
222 void CallScriptAfterProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
223 bool CallScriptEffectProcHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
224 void CallScriptAfterEffectProcHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
225
226 AuraScript* GetScriptByName(std::string const& scriptName) const;
227
228 std::list<AuraScript*> m_loadedScripts;
229private:
231protected:
232 SpellInfo const* const m_spellInfo;
234 uint64 const m_castItemGuid; // it is NOT safe to keep a pointer to the item because it may get deleted
235 time_t const m_applyTime;
237
238 int32 m_maxDuration; // Max aura duration
239 int32 m_duration; // Current time
240 int32 m_updateTargetMapInterval; // Timer for UpdateTargetMapOfEffect
241
242 uint8 const m_casterLevel; // Aura level (store caster level for correct show level dep amount)
243 uint8 m_procCharges; // Aura charges (0 for infinite)
244 uint8 m_stackAmount; // Aura stack amount
245
248
249 bool m_isRemoved : 1;
250 bool m_isSingleTarget : 1; // true if it's a single target spell and registered at caster - can change at spell steal for example
252
253private:
255};
256
257class UnitAura : public Aura
258{
259 friend Aura* Aura::Create(SpellInfo const* spellproto, uint32 effMask, WorldObject* owner, Unit* caster, int32* baseAmount, Item* castItem, uint64 casterGUID);
260protected:
261 explicit UnitAura(SpellInfo const* spellproto, uint32 effMask, WorldObject* owner, Unit* caster, int32* baseAmount, Item* castItem, uint64 casterGUID);
262public:
263 void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication* aurApp);
264 void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication* aurApp);
265
267
268 void FillTargetMap(std::map<Unit*, uint32>& targets, Unit* caster);
269
270 // Allow Apply Aura Handler to modify and access m_AuraDRGroup
273
274private:
275 DiminishingGroup m_AuraDRGroup : 8; // Diminishing
276};
277
278class DynObjAura : public Aura
279{
280 friend Aura* Aura::Create(SpellInfo const* spellproto, uint32 effMask, WorldObject* owner, Unit* caster, int32* baseAmount, Item* castItem, uint64 casterGUID);
281protected:
282 explicit DynObjAura(SpellInfo const* spellproto, uint32 effMask, WorldObject* owner, Unit* caster, int32* baseAmount, Item* castItem, uint64 casterGUID);
283public:
285
286 void FillTargetMap(std::map<Unit*, uint32>& targets, Unit* caster);
287};
288#endif
#define MAX_SPELL_EFFECTS
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
#define ASSERT
Definition Errors.h:29
@ SPELL_ATTR0_NOT_SHAPESHIFT
DiminishingGroup
@ SPELL_ATTR2_NOT_NEED_SHAPESHIFT
AuraEffectHandleModes
@ AFLAG_POSITIVE
@ AFLAG_CASTER
AuraObjectType
@ DYNOBJ_AURA_TYPE
@ UNIT_AURA_TYPE
AuraRemoveMode
Definition Unit.h:405
@ AURA_REMOVE_BY_DEFAULT
Definition Unit.h:407
Unit * GetTarget() const
Definition SpellAuras.h:54
void SetRemoveMode(AuraRemoveMode mode)
Definition SpellAuras.h:65
bool IsPositive() const
Definition SpellAuras.h:61
uint32 _effectsToApply
Definition SpellAuras.h:41
void ClientUpdate(bool remove=false)
bool _needClientUpdate
Definition SpellAuras.h:44
void _HandleEffect(uint8 effIndex, bool apply)
Aura *const _base
Definition SpellAuras.h:37
bool IsNeedClientUpdate() const
Definition SpellAuras.h:69
void _InitFlags(Unit *caster, uint32 effMask)
AuraApplication(Unit *target, Unit *caster, Aura *base, uint32 effMask)
Aura * GetBase() const
Definition SpellAuras.h:55
uint32 GetEffectsToApply() const
Definition SpellAuras.h:63
bool IsSelfcasted() const
Definition SpellAuras.h:62
bool HasEffect(uint32 effect) const
Definition SpellAuras.h:60
uint8 GetSlot() const
Definition SpellAuras.h:57
void SetNeedClientUpdate()
Definition SpellAuras.h:68
uint32 GetFlags() const
Definition SpellAuras.h:58
uint32 GetEffectMask() const
Definition SpellAuras.h:59
AuraRemoveMode GetRemoveMode() const
Definition SpellAuras.h:66
Unit *const _target
Definition SpellAuras.h:36
AuraRemoveMode _removeMode
Definition SpellAuras.h:38
void HandleAllEffects(AuraApplication *aurApp, uint8 mode, bool apply)
Unit::AuraApplicationList m_removedApplications
Definition SpellAuras.h:254
void SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint32 recalculateMask, int32 *amount)
virtual void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
void RefreshTimers()
uint64 GetCasterGUID() const
Definition SpellAuras.h:91
bool CanBeSaved() const
virtual void FillTargetMap(std::map< Unit *, uint32 > &targets, Unit *caster)=0
void AddProcCooldown(uint32 msec)
const AuraApplication * GetApplicationOfTarget(uint64 guid) const
Definition SpellAuras.h:176
bool CheckAreaTarget(Unit *target)
bool IsArea() const
int32 GetMaxDuration() const
Definition SpellAuras.h:115
uint64 GetCastItemGUID() const
Definition SpellAuras.h:90
void CallScriptEffectAbsorbHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
AuraEffect * m_effects[MAX_SPELL_EFFECTS]
Definition SpellAuras.h:246
void CallScriptDispel(DispelInfo *dispelInfo)
ApplicationMap const & GetApplicationMap()
Definition SpellAuras.h:174
void SetStackAmount(uint8 num)
void CallScriptEffectCalcSpellModHandlers(AuraEffect const *aurEff, SpellModifier *&spellMod)
int32 m_maxDuration
Definition SpellAuras.h:238
Unit * GetUnitOwner() const
Definition SpellAuras.h:94
time_t const m_applyTime
Definition SpellAuras.h:235
AuraApplication * GetApplicationOfTarget(uint64 guid)
Definition SpellAuras.h:177
std::list< AuraScript * > m_loadedScripts
Definition SpellAuras.h:228
bool CanBeSentToClient() const
DynamicObject * GetDynobjOwner() const
Definition SpellAuras.h:95
void SetUsingCharges(bool val)
Definition SpellAuras.h:193
bool CallScriptCheckAreaTargetHandlers(Unit *target)
bool CallScriptEffectRemoveHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void CallScriptEffectCalcAmountHandlers(AuraEffect const *aurEff, int32 &amount, bool &canBeRecalculated)
void _RegisterForTargets()
Definition SpellAuras.h:107
bool CallScriptEffectPeriodicHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp)
void CallScriptAfterProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
uint8 m_stackAmount
Definition SpellAuras.h:244
bool HasEffect(uint8 effIndex) const
Definition SpellAuras.h:166
int32 m_duration
Definition SpellAuras.h:239
bool IsRemoved() const
Definition SpellAuras.h:154
void GetApplicationList(Unit::AuraApplicationList &applicationList) const
void Update(uint32 diff, Unit *caster)
uint8 GetCasterLevel() const
Definition SpellAuras.h:139
WorldObject * GetOwner() const
Definition SpellAuras.h:93
static Aura * TryCreate(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0)
bool IsSingleTargetWith(Aura const *aura) const
bool ModCharges(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool CanStackWith(Aura const *existingAura) const
uint32 GetId() const
Definition SpellAuras.h:88
std::map< uint64, AuraApplication * > ApplicationMap
Definition SpellAuras.h:77
ApplicationMap m_applications
Definition SpellAuras.h:247
int32 GetDuration() const
Definition SpellAuras.h:119
bool IsUsingCharges() const
Definition SpellAuras.h:192
void UpdateOwner(uint32 diff, WorldObject *owner)
void UnregisterSingleTarget()
bool IsDeathPersistent() const
bool CallScriptPrepareProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool HasEffectType(AuraType type) const
AuraEffect * GetEffect(uint8 effIndex) const
Definition SpellAuras.h:168
Unit * GetCaster() const
uint64 const m_casterGuid
Definition SpellAuras.h:233
static Aura * TryRefreshStackOrCreate(SpellInfo const *spellproto, uint32 tryEffMask, WorldObject *owner, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0, bool *refresh=NULL)
void CallScriptAfterEffectApplyHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
int32 CalcDispelChance(Unit *auraTarget, bool offensive) const
void SetCharges(uint8 charges)
bool CallScriptCheckProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool CallScriptEffectApplyHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void CallScriptAfterEffectRemoveHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void UpdateTargetMap(Unit *caster, bool apply=true)
static Aura * Create(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, uint64 casterGUID)
void ApplyForTargets()
Definition SpellAuras.h:108
void _InitEffects(uint32 effMask, Unit *caster, int32 *baseAmount)
void SetNeedClientUpdateForTargets() const
bool CallScriptEffectProcHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
void CallScriptAfterEffectProcHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
int32 CalcMaxDuration() const
Definition SpellAuras.h:117
void SetDuration(int32 duration, bool withMods=false)
bool CallScriptProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool IsProcOnCooldown() const
float CalcProcChance(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
void RefreshDuration()
void CallScriptEffectAfterAbsorbHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
void CallScriptEffectManaShieldHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
SpellInfo const *const m_spellInfo
Definition SpellAuras.h:232
void CallScriptEffectSplitHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &splitAmount)
AuraObjectType GetType() const
uint8 GetStackAmount() const
Definition SpellAuras.h:133
void _ApplyEffectForTargets(uint8 effIndex)
AuraScript * GetScriptByName(std::string const &scriptName) const
uint8 GetCharges() const
Definition SpellAuras.h:126
void TriggerProcOnEvent(AuraApplication *aurApp, ProcEventInfo &eventInfo)
WorldObject *const m_owner
Definition SpellAuras.h:236
SpellInfo const * GetSpellInfo() const
Definition SpellAuras.h:87
uint32 GetEffectMask() const
Definition SpellAuras.h:169
uint64 const m_castItemGuid
Definition SpellAuras.h:234
bool IsRemovedOnShapeLost(Unit *target) const
Definition SpellAuras.h:145
void CallScriptEffectCalcPeriodicHandlers(AuraEffect const *aurEff, bool &isPeriodic, int32 &amplitude)
void SetMaxDuration(int32 duration)
Definition SpellAuras.h:116
bool CanBeAppliedOn(Unit *target)
bool IsProcTriggeredOnEvent(AuraApplication *aurApp, ProcEventInfo &eventInfo) const
uint8 const m_casterLevel
Definition SpellAuras.h:242
void HandleAuraSpecificMods(AuraApplication const *aurApp, Unit *caster, bool apply, bool onReapply)
virtual ~Aura()
void SetIsSingleTarget(bool val)
Definition SpellAuras.h:159
void _DeleteRemovedApplications()
void PrepareProcToTrigger(AuraApplication *aurApp, ProcEventInfo &eventInfo)
Aura(SpellInfo const *spellproto, WorldObject *owner, Unit *caster, Item *castItem, uint64 casterGUID)
bool IsExpired() const
Definition SpellAuras.h:123
virtual void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
uint8 CalcMaxCharges() const
Definition SpellAuras.h:129
bool m_isUsingCharges
Definition SpellAuras.h:251
void CallScriptEffectUpdatePeriodicHandlers(AuraEffect *aurEff)
bool IsAppliedOnTarget(uint64 guid) const
Definition SpellAuras.h:178
void RecalculateAmountOfEffects()
static uint32 BuildEffectMaskForOwner(SpellInfo const *spellProto, uint32 avalibleEffectMask, WorldObject *owner)
bool IsPassive() const
void RefreshSpellMods()
bool m_isRemoved
Definition SpellAuras.h:249
time_t GetApplyTime() const
Definition SpellAuras.h:114
int32 m_updateTargetMapInterval
Definition SpellAuras.h:240
void CallScriptEffectAfterManaShieldHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
bool m_isSingleTarget
Definition SpellAuras.h:250
uint8 m_procCharges
Definition SpellAuras.h:243
bool IsPermanent() const
Definition SpellAuras.h:124
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
bool DropCharge(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition SpellAuras.h:131
void CallScriptAfterDispel(DispelInfo *dispelInfo)
void _Remove(AuraRemoveMode removeMode)
bool IsSingleTarget() const
Definition SpellAuras.h:157
DynObjAura(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, uint64 casterGUID)
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void FillTargetMap(std::map< Unit *, uint32 > &targets, Unit *caster)
Definition Item.h:202
uint64 GetGUID() const
Definition Object.h:119
uint32 Id
Definition SpellInfo.h:160
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
DiminishingGroup m_AuraDRGroup
Definition SpellAuras.h:275
void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *aurApp)
void SetDiminishGroup(DiminishingGroup group)
Definition SpellAuras.h:271
DiminishingGroup GetDiminishGroup() const
Definition SpellAuras.h:272
void FillTargetMap(std::map< Unit *, uint32 > &targets, Unit *caster)
void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *aurApp)
UnitAura(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, uint64 casterGUID)
Definition Unit.h:1367
Aura * _TryStackingOrRefreshingExistingAura(SpellInfo const *newAura, uint32 effMask, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void _UnapplyAura(AuraApplicationMap::iterator &i, AuraRemoveMode removeMode)
std::list< AuraApplication * > AuraApplicationList
Definition Unit.h:1385
void _ApplyAura(AuraApplication *aurApp, uint32 effMask)
AuraApplication * _CreateAuraApplication(Aura *aura, uint32 effMask)
void _ApplyAuraEffect(Aura *aura, uint8 effIndex)
Definition SpellMgr.h:277