TrinityCore
Loading...
Searching...
No Matches
SpellAuras.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITY_SPELLAURAS_H
19#define TRINITY_SPELLAURAS_H
20
21#include "SpellAuraDefines.h"
22#include "SpellInfo.h"
23#include "UniqueTrackablePtr.h"
24
25class SpellInfo;
26struct SpellModifier;
27struct ProcTriggerSpell;
28struct SpellProcEntry;
29
30// forward decl
31class Aura;
32class AuraEffect;
33class AuraScript;
34class DamageInfo;
35class DispelInfo;
36class DynObjAura;
37class ChargeDropEvent;
38class DynamicObject;
39class ProcEventInfo;
40class Unit;
41class UnitAura;
42
43// update aura target map every 500 ms instead of every update - reduce amount of grid searcher calls
44#define UPDATE_TARGET_MAP_INTERVAL 500
45
47{
48 friend class Unit;
49
50 private:
51 Unit* const _target;
52 Aura* const _base;
53 AuraRemoveMode _removeMode; // Store info for know remove aura reason
54 uint8 _slot; // Aura slot on unit
55 uint8 _flags; // Aura info flag
56 uint8 _effectsToApply; // Used only at spell hit to determine which effect should be applied
58
59 explicit AuraApplication(Unit* target, Unit* caster, Aura* base, uint8 effMask);
60 void _Remove();
61
62 void _InitFlags(Unit* caster, uint8 effMask);
63 void _HandleEffect(uint8 effIndex, bool apply);
64
65 public:
66 Unit* GetTarget() const { return _target; }
67 Aura* GetBase() const { return _base; }
68
69 uint8 GetSlot() const { return _slot; }
70 uint8 GetFlags() const { return _flags; }
72 bool HasEffect(uint8 effect) const { ASSERT(effect < MAX_SPELL_EFFECTS); return (_flags & (1 << effect)) != 0; }
73 bool IsPositive() const { return (_flags & AFLAG_POSITIVE) != 0; }
74 bool IsSelfcast() const { return (_flags & AFLAG_CASTER) != 0; }
75
76 uint8 GetEffectsToApply() const { return _effectsToApply; }
77 void UpdateApplyEffectMask(uint8 newEffMask, bool canHandleNewEffects);
78
79 void SetRemoveMode(AuraRemoveMode mode) { _removeMode = mode; }
80 AuraRemoveMode GetRemoveMode() const { return _removeMode; }
81
82 void SetNeedClientUpdate() { _needClientUpdate = true;}
83 bool IsNeedClientUpdate() const { return _needClientUpdate;}
84 void BuildUpdatePacket(ByteBuffer& data, bool remove) const;
85 void ClientUpdate(bool remove = false);
86
87 std::string GetDebugInfo() const;
88};
89
90// Caches some information about caster (because it may no longer exist)
92{
93 float CritChance = 0.f;
94 float BonusDonePct = 0.f;
96 bool ApplyResilience = false;
97};
98
100{
101 friend class Unit;
102
103 public:
104 typedef std::unordered_map<ObjectGuid, AuraApplication*> ApplicationMap;
105
106 static uint8 BuildEffectMaskForOwner(SpellInfo const* spellProto, uint8 availableEffectMask, WorldObject* owner);
107 static Aura* TryRefreshStackOrCreate(AuraCreateInfo& createInfo, bool updateEffectMask = true);
108 static Aura* TryCreate(AuraCreateInfo& createInfo);
109 static Aura* Create(AuraCreateInfo& createInfo);
110 explicit Aura(AuraCreateInfo const& createInfo);
111 void _InitEffects(uint8 effMask, Unit* caster, int32 const* baseAmount);
112 void SaveCasterInfo(Unit* caster);
113 virtual ~Aura();
114
115 SpellInfo const* GetSpellInfo() const { return m_spellInfo; }
116 uint32 GetId() const{ return GetSpellInfo()->Id; }
117
118 ObjectGuid GetCastItemGUID() const { return m_castItemGuid; }
119 ObjectGuid GetCasterGUID() const { return m_casterGuid; }
120 Unit* GetCaster() const;
121 WorldObject* GetOwner() const { return m_owner; }
122 Unit* GetUnitOwner() const { ASSERT(GetType() == UNIT_AURA_TYPE); return m_owner->ToUnit(); }
123 DynamicObject* GetDynobjOwner() const { ASSERT(GetType() == DYNOBJ_AURA_TYPE); return m_owner->ToDynObject(); }
124
125 AuraObjectType GetType() const;
126
127 virtual void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication * auraApp);
128 virtual void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraApp);
129 void _Remove(AuraRemoveMode removeMode);
130 virtual void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) = 0;
131
132 virtual void FillTargetMap(std::unordered_map<Unit*, uint8>& targets, Unit* caster) = 0;
133 void UpdateTargetMap(Unit* caster, bool apply = true);
134
135 void _RegisterForTargets() { Unit* caster = GetCaster(); UpdateTargetMap(caster, false); }
136 void ApplyForTargets() { Unit* caster = GetCaster(); UpdateTargetMap(caster, true); }
137 void _ApplyEffectForTargets(uint8 effIndex);
138
139 void UpdateOwner(uint32 diff, WorldObject* owner);
140 void Update(uint32 diff, Unit* caster);
141
142 time_t GetApplyTime() const { return m_applyTime; }
143 int32 GetMaxDuration() const { return m_maxDuration; }
144 void SetMaxDuration(int32 duration) { m_maxDuration = duration; }
145 int32 CalcMaxDuration() const { return CalcMaxDuration(GetCaster()); }
146 int32 CalcMaxDuration(Unit* caster) const;
147 static int32 CalcMaxDuration(SpellInfo const* spellInfo, WorldObject* caster);
148 int32 GetDuration() const { return m_duration; }
149 void SetDuration(int32 duration, bool withMods = false);
150 void RefreshDuration(bool withMods = false);
151 void RefreshTimers(bool resetPeriodicTimer);
152 bool IsExpired() const { return !GetDuration() && !m_dropEvent; }
153 bool IsPermanent() const { return GetMaxDuration() == -1; }
154
155 uint8 GetCharges() const { return m_procCharges; }
156 void SetCharges(uint8 charges);
157 uint8 CalcMaxCharges(Unit* caster) const;
158 uint8 CalcMaxCharges() const { return CalcMaxCharges(GetCaster()); }
159 bool ModCharges(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
160 bool DropCharge(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) { return ModCharges(-1, removeMode); }
161 void ModChargesDelayed(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
162 void DropChargeDelayed(uint32 delay, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
163
164 uint8 GetStackAmount() const { return m_stackAmount; }
165 void SetStackAmount(uint8 num);
166 bool ModStackAmount(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT, bool resetPeriodicTimer = true);
167
168 bool CanApplyResilience() const { return _casterInfo.ApplyResilience; }
169 void SetCanApplyResilience(bool val) { _casterInfo.ApplyResilience = val; }
170 uint8 GetCasterLevel() const { return _casterInfo.Level; }
171 float GetCritChance() const { return _casterInfo.CritChance; }
172 void SetCritChance(float val) { _casterInfo.CritChance = val; }
173 float GetDonePct() const { return _casterInfo.BonusDonePct; }
174 void SetDonePct(float val) { _casterInfo.BonusDonePct = val; }
175
176 bool HasMoreThanOneEffectForType(AuraType auraType) const;
177 bool IsArea() const;
178 bool IsPassive() const;
179 bool IsDeathPersistent() const;
180
181 bool IsRemovedOnShapeLost(Unit* target) const;
182
183 bool CanBeSaved() const;
184 bool IsRemoved() const { return m_isRemoved; }
185 bool CanBeSentToClient() const;
186 // Single cast aura helpers
187 bool IsSingleTarget() const {return m_isSingleTarget; }
188 bool IsSingleTargetWith(Aura const* aura) const;
189 void SetIsSingleTarget(bool val) { m_isSingleTarget = val; }
190 void UnregisterSingleTarget();
191 int32 CalcDispelChance(Unit const* auraTarget, bool offensive) const;
192
193 void SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint8 recalculateMask, float critChance, bool applyResilience, int32* amount);
194
195 // helpers for aura effects
196 bool CanPeriodicTickCrit(Unit const* caster) const;
197 float CalcPeriodicCritChance(Unit const* caster) const;
198
199 bool HasEffect(uint8 effIndex) const { return GetEffect(effIndex) != nullptr; }
200 bool HasEffectType(AuraType type) const;
201 AuraEffect* GetEffect(uint8 effIndex) const { ASSERT (effIndex < MAX_SPELL_EFFECTS); return m_effects[effIndex]; }
202 uint8 GetEffectMask() const { uint8 effMask = 0; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (m_effects[i]) effMask |= 1<<i; return effMask; }
203 void RecalculateAmountOfEffects();
204 void HandleAllEffects(AuraApplication * aurApp, uint8 mode, bool apply);
205
206 // Helpers for targets
207 ApplicationMap const& GetApplicationMap() { return m_applications; }
208 void GetApplicationVector(std::vector<AuraApplication*>& applicationVector) const;
209 AuraApplication const* GetApplicationOfTarget(ObjectGuid guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return nullptr; }
210 AuraApplication* GetApplicationOfTarget(ObjectGuid guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return nullptr; }
211 bool IsAppliedOnTarget(ObjectGuid guid) const { return m_applications.find(guid) != m_applications.end(); }
212
213 void SetNeedClientUpdateForTargets() const;
214 void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply);
215 bool CanBeAppliedOn(Unit* target);
216 bool CheckAreaTarget(Unit* target);
217 bool CanStackWith(Aura const* existingAura) const;
218
219 bool IsProcOnCooldown(TimePoint now) const;
220 void AddProcCooldown(TimePoint cooldownEnd);
221 void ResetProcCooldown();
222 bool IsUsingCharges() const { return m_isUsingCharges; }
223 void SetUsingCharges(bool val) { m_isUsingCharges = val; }
224 void PrepareProcToTrigger(AuraApplication* aurApp, ProcEventInfo& eventInfo, TimePoint now);
225 uint8 GetProcEffectMask(AuraApplication* aurApp, ProcEventInfo& eventInfo, TimePoint now) const;
226 float CalcProcChance(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
227 void TriggerProcOnEvent(uint8 procEffectMask, AuraApplication* aurApp, ProcEventInfo& eventInfo);
228
229 // AuraScript
230 void LoadScripts();
231 bool CallScriptCheckAreaTargetHandlers(Unit* target);
232 void CallScriptDispel(DispelInfo* dispelInfo);
233 void CallScriptAfterDispel(DispelInfo* dispelInfo);
234 bool CallScriptEffectApplyHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
235 bool CallScriptEffectRemoveHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
236 void CallScriptAfterEffectApplyHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
237 void CallScriptAfterEffectRemoveHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
238 bool CallScriptEffectPeriodicHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp);
239 void CallScriptEffectUpdatePeriodicHandlers(AuraEffect* aurEff);
240 void CallScriptEffectCalcAmountHandlers(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated);
241 void CallScriptEffectCalcPeriodicHandlers(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude);
242 void CallScriptEffectCalcSpellModHandlers(AuraEffect const* aurEff, SpellModifier*& spellMod);
243 void CallScriptEffectAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount, bool& defaultPrevented);
244 void CallScriptEffectAfterAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount);
245 void CallScriptEffectManaShieldHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount, bool& defaultPrevented);
246 void CallScriptEffectAfterManaShieldHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount);
247 void CallScriptEffectSplitHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& splitAmount);
248 // Spell Proc Hooks
249 bool CallScriptCheckProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
250 bool CallScriptCheckEffectProcHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
251 bool CallScriptPrepareProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
252 bool CallScriptProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
253 void CallScriptAfterProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
254 bool CallScriptEffectProcHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
255 void CallScriptAfterEffectProcHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
256
257 UnitAura* ToUnitAura() { if (GetType() == UNIT_AURA_TYPE) return reinterpret_cast<UnitAura*>(this); else return nullptr; }
258 UnitAura const* ToUnitAura() const { if (GetType() == UNIT_AURA_TYPE) return reinterpret_cast<UnitAura const*>(this); else return nullptr; }
259
260 DynObjAura* ToDynObjAura() { if (GetType() == DYNOBJ_AURA_TYPE) return reinterpret_cast<DynObjAura*>(this); else return nullptr; }
261 DynObjAura const* ToDynObjAura() const { if (GetType() == DYNOBJ_AURA_TYPE) return reinterpret_cast<DynObjAura const*>(this); else return nullptr; }
262
263 template <class Script>
264 Script* GetScript(std::string const& scriptName) const
265 {
266 return dynamic_cast<Script*>(GetScriptByName(scriptName));
267 }
268
269 std::vector<AuraScript*> m_loadedScripts;
270
271 virtual std::string GetDebugInfo() const;
272
273 Trinity::unique_weak_ptr<Aura> GetWeakPtr() const { return m_scriptRef; }
274
275 Aura(Aura const&) = delete;
276 Aura(Aura&&) = delete;
277
278 Aura& operator=(Aura const&) = delete;
279 Aura& operator=(Aura&&) = delete;
280
281 private:
282 AuraScript* GetScriptByName(std::string const& scriptName) const;
283 void _DeleteRemovedApplications();
284
285 protected:
286 SpellInfo const* const m_spellInfo;
288 ObjectGuid const m_castItemGuid; // it is NOT safe to keep a pointer to the item because it may get deleted
289 time_t const m_applyTime;
291
292 int32 m_maxDuration; // Max aura duration
293 int32 m_duration; // Current time
294 int32 m_timeCla; // Timer for power per sec calcultion
295 int32 m_updateTargetMapInterval; // Timer for UpdateTargetMapOfEffect
296
298 uint8 m_procCharges; // Aura charges (0 for infinite)
299 uint8 m_stackAmount; // Aura stack amount
300
303
305 bool m_isSingleTarget:1; // true if it's a single target spell and registered at caster - can change at spell steal for example
307
309
311
312 private:
313 std::vector<AuraApplication*> _removedApplications;
314
315 struct NoopAuraDeleter { void operator()(Aura*) const { /*noop - not managed*/ } };
317};
318
320{
321 friend Aura* Aura::Create(AuraCreateInfo& createInfo);
322 protected:
323 explicit UnitAura(AuraCreateInfo const& createInfo);
324 public:
325 void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication* aurApp) override;
326 void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication* aurApp) override;
327
328 void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) override;
329
330 void FillTargetMap(std::unordered_map<Unit*, uint8>& targets, Unit* caster) override;
331
332 // Allow Apply Aura Handler to modify and access m_AuraDRGroup
333 void SetDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; }
334 DiminishingGroup GetDiminishGroup() const { return m_AuraDRGroup; }
335
336 void AddStaticApplication(Unit* target, uint8 effMask);
337
338 private:
340 std::unordered_map<ObjectGuid, uint8> _staticApplications; // non-area auras
341};
342
344{
345 friend Aura* Aura::Create(AuraCreateInfo& createInfo);
346 protected:
347 explicit DynObjAura(AuraCreateInfo const& createInfo);
348 public:
349 void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) override;
350
351 void FillTargetMap(std::unordered_map<Unit*, uint8>& targets, Unit* caster) override;
352};
353
355{
356 friend class Aura;
357 protected:
358 ChargeDropEvent(Aura* base, AuraRemoveMode mode) : _base(base), _mode(mode) { }
359 bool Execute(uint64 /*e_time*/, uint32 /*p_time*/) override;
360
361 private:
364};
365#endif
#define MAX_SPELL_EFFECTS
Definition DBCEnums.h:388
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint64_t uint64
Definition Define.h:132
uint32_t uint32
Definition Define.h:133
std::chrono::steady_clock::time_point TimePoint
time_point shorthand typedefs
Definition Duration.h:36
std::string GetDebugInfo()
Definition Errors.cpp:155
#define ASSERT
Definition Errors.h:68
DiminishingGroup
AuraRemoveMode
@ AURA_REMOVE_BY_DEFAULT
AuraEffectHandleModes
@ AFLAG_POSITIVE
@ AFLAG_EFF_INDEX_1
@ AFLAG_CASTER
@ AFLAG_EFF_INDEX_2
@ AFLAG_EFF_INDEX_0
AuraObjectType
@ DYNOBJ_AURA_TYPE
@ UNIT_AURA_TYPE
Unit * GetTarget() const
Definition SpellAuras.h:66
void SetRemoveMode(AuraRemoveMode mode)
Definition SpellAuras.h:79
bool IsPositive() const
Definition SpellAuras.h:73
uint8 _effectsToApply
Definition SpellAuras.h:56
bool _needClientUpdate
Definition SpellAuras.h:57
uint8 GetEffectMask() const
Definition SpellAuras.h:71
Aura *const _base
Definition SpellAuras.h:52
uint8 GetFlags() const
Definition SpellAuras.h:70
bool IsNeedClientUpdate() const
Definition SpellAuras.h:83
uint8 GetEffectsToApply() const
Definition SpellAuras.h:76
Aura * GetBase() const
Definition SpellAuras.h:67
uint8 GetSlot() const
Definition SpellAuras.h:69
void SetNeedClientUpdate()
Definition SpellAuras.h:82
bool IsSelfcast() const
Definition SpellAuras.h:74
AuraRemoveMode GetRemoveMode() const
Definition SpellAuras.h:80
bool HasEffect(uint8 effect) const
Definition SpellAuras.h:72
Unit *const _target
Definition SpellAuras.h:51
AuraRemoveMode _removeMode
Definition SpellAuras.h:53
UnitAura * ToUnitAura()
Definition SpellAuras.h:257
Aura & operator=(Aura &&)=delete
static Aura * Create(AuraCreateInfo &createInfo)
int32 GetMaxDuration() const
Definition SpellAuras.h:143
Trinity::unique_trackable_ptr< Aura > m_scriptRef
Definition SpellAuras.h:316
UnitAura const * ToUnitAura() const
Definition SpellAuras.h:258
void SetCritChance(float val)
Definition SpellAuras.h:172
ApplicationMap const & GetApplicationMap()
Definition SpellAuras.h:207
int32 m_maxDuration
Definition SpellAuras.h:292
Unit * GetUnitOwner() const
Definition SpellAuras.h:122
time_t const m_applyTime
Definition SpellAuras.h:289
AuraApplication const * GetApplicationOfTarget(ObjectGuid guid) const
Definition SpellAuras.h:209
DynamicObject * GetDynobjOwner() const
Definition SpellAuras.h:123
void SetUsingCharges(bool val)
Definition SpellAuras.h:223
void _RegisterForTargets()
Definition SpellAuras.h:135
uint8 m_stackAmount
Definition SpellAuras.h:299
ObjectGuid GetCasterGUID() const
Definition SpellAuras.h:119
bool HasEffect(uint8 effIndex) const
Definition SpellAuras.h:199
int32 m_duration
Definition SpellAuras.h:293
bool IsRemoved() const
Definition SpellAuras.h:184
std::vector< AuraApplication * > _removedApplications
Definition SpellAuras.h:313
float GetCritChance() const
Definition SpellAuras.h:171
uint8 GetCasterLevel() const
Definition SpellAuras.h:170
WorldObject * GetOwner() const
Definition SpellAuras.h:121
uint32 GetId() const
Definition SpellAuras.h:116
Aura(Aura const &)=delete
TimePoint m_procCooldown
Definition SpellAuras.h:310
void SetCanApplyResilience(bool val)
Definition SpellAuras.h:169
bool IsAppliedOnTarget(ObjectGuid guid) const
Definition SpellAuras.h:211
ApplicationMap m_applications
Definition SpellAuras.h:302
int32 GetDuration() const
Definition SpellAuras.h:148
bool IsUsingCharges() const
Definition SpellAuras.h:222
AuraEffect * GetEffect(uint8 effIndex) const
Definition SpellAuras.h:201
ObjectGuid const m_castItemGuid
Definition SpellAuras.h:288
bool CanApplyResilience() const
Definition SpellAuras.h:168
int32 m_timeCla
Definition SpellAuras.h:294
DynObjAura * ToDynObjAura()
Definition SpellAuras.h:260
std::vector< AuraScript * > m_loadedScripts
Definition SpellAuras.h:269
void ApplyForTargets()
Definition SpellAuras.h:136
int32 CalcMaxDuration() const
Definition SpellAuras.h:145
uint8 GetEffectMask() const
Definition SpellAuras.h:202
SpellInfo const *const m_spellInfo
Definition SpellAuras.h:286
float GetDonePct() const
Definition SpellAuras.h:173
uint8 GetStackAmount() const
Definition SpellAuras.h:164
Aura & operator=(Aura const &)=delete
uint8 GetCharges() const
Definition SpellAuras.h:155
Trinity::unique_weak_ptr< Aura > GetWeakPtr() const
Definition SpellAuras.h:273
WorldObject *const m_owner
Definition SpellAuras.h:290
SpellInfo const * GetSpellInfo() const
Definition SpellAuras.h:115
ObjectGuid GetCastItemGUID() const
Definition SpellAuras.h:118
CasterInfo _casterInfo
Definition SpellAuras.h:297
void SetMaxDuration(int32 duration)
Definition SpellAuras.h:144
ObjectGuid const m_casterGuid
Definition SpellAuras.h:287
AuraApplication * GetApplicationOfTarget(ObjectGuid guid)
Definition SpellAuras.h:210
void SetIsSingleTarget(bool val)
Definition SpellAuras.h:189
bool IsExpired() const
Definition SpellAuras.h:152
Aura(Aura &&)=delete
uint8 CalcMaxCharges() const
Definition SpellAuras.h:158
bool m_isUsingCharges
Definition SpellAuras.h:306
void SetDonePct(float val)
Definition SpellAuras.h:174
virtual void FillTargetMap(std::unordered_map< Unit *, uint8 > &targets, Unit *caster)=0
bool m_isRemoved
Definition SpellAuras.h:304
time_t GetApplyTime() const
Definition SpellAuras.h:142
int32 m_updateTargetMapInterval
Definition SpellAuras.h:295
DynObjAura const * ToDynObjAura() const
Definition SpellAuras.h:261
std::unordered_map< ObjectGuid, AuraApplication * > ApplicationMap
Definition SpellAuras.h:104
Script * GetScript(std::string const &scriptName) const
Definition SpellAuras.h:264
bool m_isSingleTarget
Definition SpellAuras.h:305
uint8 m_procCharges
Definition SpellAuras.h:298
bool IsPermanent() const
Definition SpellAuras.h:153
ChargeDropEvent * m_dropEvent
Definition SpellAuras.h:308
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
bool DropCharge(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition SpellAuras.h:160
bool IsSingleTarget() const
Definition SpellAuras.h:187
AuraRemoveMode _mode
Definition SpellAuras.h:363
ChargeDropEvent(Aura *base, AuraRemoveMode mode)
Definition SpellAuras.h:358
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
DiminishingGroup m_AuraDRGroup
Definition SpellAuras.h:339
void SetDiminishGroup(DiminishingGroup group)
Definition SpellAuras.h:333
DiminishingGroup GetDiminishGroup() const
Definition SpellAuras.h:334
std::unordered_map< ObjectGuid, uint8 > _staticApplications
Definition SpellAuras.h:340
Definition Unit.h:769
void operator()(Aura *) const
Definition SpellAuras.h:315
uint8 Level
Definition SpellAuras.h:95
float CritChance
Definition SpellAuras.h:93
float BonusDonePct
Definition SpellAuras.h:94
bool ApplyResilience
Definition SpellAuras.h:96