TrinityCore
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#include <typeinfo>
25
26class SpellInfo;
27struct SpellModifier;
28struct ProcTriggerSpell;
29struct SpellProcEntry;
30
31namespace WorldPackets
32{
33 namespace Spells
34 {
35 struct AuraInfo;
36 }
37}
38
39// forward decl
40class Aura;
41class AuraEffect;
42class AuraScript;
43class DamageInfo;
44class DispelInfo;
45class DynObjAura;
46class ChargeDropEvent;
47class DynamicObject;
48class HealInfo;
49class ProcEventInfo;
50class Unit;
51class UnitAura;
52
53// update aura target map every 500 ms instead of every update - reduce amount of grid searcher calls
54#define UPDATE_TARGET_MAP_INTERVAL 500
55
57{
58 friend class Unit;
59
60 private:
61 Unit* const _target;
62 Aura* const _base;
63 AuraRemoveMode _removeMode:8; // Store info for know remove aura reason
64 uint8 _slot; // Aura slot on unit
65 uint16 _flags; // Aura info flag
66 uint32 _effectsToApply; // Used only at spell hit to determine which effect should be applied
69
70 explicit AuraApplication(Unit* target, Unit* caster, Aura* base, uint32 effMask);
71 void _Remove();
72
73 void _InitFlags(Unit* caster, uint32 effMask);
74 void _HandleEffect(uint8 effIndex, bool apply);
75
76 public:
77 Unit* GetTarget() const { return _target; }
78 Aura* GetBase() const { return _base; }
79
80 uint8 GetSlot() const { return _slot; }
81 uint16 GetFlags() const { return _flags; }
82 uint32 GetEffectMask() const { return _effectMask; }
83 bool HasEffect(uint8 effect) const { ASSERT(effect < MAX_SPELL_EFFECTS); return (_effectMask & (1 << effect)) != 0; }
84 bool IsPositive() const { return (_flags & AFLAG_POSITIVE) != 0; }
85 bool IsSelfcast() const { return (_flags & AFLAG_NOCASTER) != 0; }
86
87 uint32 GetEffectsToApply() const { return _effectsToApply; }
88 void UpdateApplyEffectMask(uint32 newEffMask, bool canHandleNewEffects);
89
90 void SetRemoveMode(AuraRemoveMode mode) { _removeMode = mode; }
91 AuraRemoveMode GetRemoveMode() const { return _removeMode; }
92
93 void SetNeedClientUpdate();
94 bool IsNeedClientUpdate() const { return _needClientUpdate; }
95 void BuildUpdatePacket(WorldPackets::Spells::AuraInfo& auraInfo, bool remove);
96 void ClientUpdate(bool remove = false);
97
98 std::string GetDebugInfo() const;
99};
100
101// Structure representing database aura primary key fields
103{
108
109 friend std::strong_ordering operator<=>(AuraKey const& left, AuraKey const& right) = default;
110};
111
113{
114 std::array<int32, MAX_SPELL_EFFECTS> Amounts;
115 std::array<int32, MAX_SPELL_EFFECTS> BaseAmounts;
116};
117
119{
120 friend class Unit;
121
122 public:
123 typedef std::unordered_map<ObjectGuid, AuraApplication*> ApplicationMap;
124
125 static uint32 BuildEffectMaskForOwner(SpellInfo const* spellProto, uint32 availableEffectMask, WorldObject* owner);
126 static Aura* TryRefreshStackOrCreate(AuraCreateInfo& createInfo, bool updateEffectMask = true);
127 static Aura* TryCreate(AuraCreateInfo& createInfo);
128 static Aura* Create(AuraCreateInfo& createInfo);
129 explicit Aura(AuraCreateInfo const& createInfo);
130 void _InitEffects(uint32 effMask, Unit* caster, int32 const* baseAmount);
131 void SaveCasterInfo(Unit* caster);
132 virtual ~Aura();
133
134 SpellInfo const* GetSpellInfo() const { return m_spellInfo; }
135 uint32 GetId() const{ return GetSpellInfo()->Id; }
136 Difficulty GetCastDifficulty() const { return m_castDifficulty; }
137
138 ObjectGuid GetCastId() const { return m_castId; }
139 ObjectGuid GetCasterGUID() const { return m_casterGuid; }
140 ObjectGuid GetCastItemGUID() const { return m_castItemGuid; }
141 uint32 GetCastItemId() const { return m_castItemId; }
142 int32 GetCastItemLevel() const { return m_castItemLevel; }
143 SpellCastVisual GetSpellVisual() const { return m_spellVisual; }
144 Unit* GetCaster() const;
145 WorldObject* GetWorldObjectCaster() const;
146 WorldObject* GetOwner() const { return m_owner; }
147 Unit* GetUnitOwner() const { ASSERT(GetType() == UNIT_AURA_TYPE); return m_owner->ToUnit(); }
148 DynamicObject* GetDynobjOwner() const { ASSERT(GetType() == DYNOBJ_AURA_TYPE); return m_owner->ToDynObject(); }
149
150 AuraObjectType GetType() const;
151
152 virtual void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication * auraApp);
153 virtual void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraApp);
154 void _Remove(AuraRemoveMode removeMode);
155 virtual void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) = 0;
156
157 virtual void FillTargetMap(std::unordered_map<Unit*, uint32>& targets, Unit* caster) = 0;
158 void UpdateTargetMap(Unit* caster, bool apply = true);
159
160 void _RegisterForTargets() { Unit* caster = GetCaster(); UpdateTargetMap(caster, false); }
161 void ApplyForTargets() { Unit* caster = GetCaster(); UpdateTargetMap(caster, true); }
162 void _ApplyEffectForTargets(uint8 effIndex);
163
164 void UpdateOwner(uint32 diff, WorldObject* owner);
165 void Update(uint32 diff, Unit* caster);
166
167 time_t GetApplyTime() const { return m_applyTime; }
168 int32 GetMaxDuration() const { return m_maxDuration; }
169 void SetMaxDuration(int32 duration) { m_maxDuration = duration; }
170 int32 CalcMaxDuration() const { return CalcMaxDuration(GetCaster()); }
171 int32 CalcMaxDuration(Unit* caster) const;
172 static int32 CalcMaxDuration(SpellInfo const* spellInfo, WorldObject const* caster, std::vector<SpellPowerCost> const* powerCosts);
173 int32 GetDuration() const { return m_duration; }
174 void SetDuration(int32 duration, bool withMods = false);
175 void RefreshDuration(bool withMods = false);
176 void RefreshTimers(bool resetPeriodicTimer);
177 bool IsExpired() const { return !GetDuration() && !m_dropEvent; }
178 bool IsPermanent() const { return GetMaxDuration() == -1; }
179
180 uint8 GetCharges() const { return m_procCharges; }
181 void SetCharges(uint8 charges);
182 uint8 CalcMaxCharges(Unit* caster) const;
183 uint8 CalcMaxCharges() const { return CalcMaxCharges(GetCaster()); }
184 bool ModCharges(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
185 bool DropCharge(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) { return ModCharges(-1, removeMode); }
186 void ModChargesDelayed(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
187 void DropChargeDelayed(uint32 delay, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT);
188
189 uint8 GetStackAmount() const { return m_stackAmount; }
190 void SetStackAmount(uint8 num);
191 bool ModStackAmount(int32 num, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT, bool resetPeriodicTimer = true);
192 uint32 CalcMaxStackAmount() const;
193 bool IsUsingStacks() const;
194
195 uint8 GetCasterLevel() const { return m_casterLevel; }
196
197 bool HasMoreThanOneEffectForType(AuraType auraType) const;
198 bool IsArea() const;
199 bool IsPassive() const;
200 bool IsDeathPersistent() const;
201
202 bool IsRemovedOnShapeLost(Unit* target) const;
203
204 bool CanBeSaved() const;
205 bool IsRemoved() const { return m_isRemoved; }
206 // Single cast aura helpers
207 bool IsSingleTarget() const {return m_isSingleTarget; }
208 bool IsSingleTargetWith(Aura const* aura) const;
209 void SetIsSingleTarget(bool val) { m_isSingleTarget = val; }
210 void UnregisterSingleTarget();
211 int32 CalcDispelChance(Unit const* auraTarget, bool offensive) const;
212
222 AuraKey GenerateKey(uint32& recalculateMask) const;
223 void SetLoadedState(int32 maxDuration, int32 duration, int32 charges, uint8 stackAmount, uint32 recalculateMask, int32* amount);
224
225 bool HasEffect(uint8 effIndex) const { return GetEffect(effIndex) != nullptr; }
226 bool HasEffectType(AuraType type) const;
227 static bool EffectTypeNeedsSendingAmount(AuraType type);
228 AuraEffect* GetEffect(uint32 index) const;
229 uint32 GetEffectMask() const;
230 void RecalculateAmountOfEffects();
231 void HandleAllEffects(AuraApplication * aurApp, uint8 mode, bool apply);
232
233 // Helpers for targets
234 ApplicationMap const& GetApplicationMap() { return m_applications; }
235 void GetApplicationVector(std::vector<AuraApplication*>& applications) const;
236 AuraApplication const* GetApplicationOfTarget(ObjectGuid guid) const;
237 AuraApplication* GetApplicationOfTarget(ObjectGuid guid);
238 bool IsAppliedOnTarget(ObjectGuid guid) const;
239
240 void SetNeedClientUpdateForTargets() const;
241 void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply);
242 bool CanBeAppliedOn(Unit* target);
243 bool CheckAreaTarget(Unit* target);
244 bool CanStackWith(Aura const* existingAura) const;
245
246 bool IsProcOnCooldown(TimePoint now) const;
247 void AddProcCooldown(SpellProcEntry const* procEntry, TimePoint now);
248 void ResetProcCooldown();
249 bool IsUsingCharges() const { return m_isUsingCharges; }
250 void SetUsingCharges(bool val) { m_isUsingCharges = val; }
251 void PrepareProcToTrigger(AuraApplication* aurApp, ProcEventInfo& eventInfo, TimePoint now);
252 void PrepareProcChargeDrop(SpellProcEntry const* procEntry, ProcEventInfo const& eventInfo);
253 void ConsumeProcCharges(SpellProcEntry const* procEntry);
254 uint32 GetProcEffectMask(AuraApplication* aurApp, ProcEventInfo& eventInfo, TimePoint now) const;
255 float CalcProcChance(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
256 void TriggerProcOnEvent(uint32 procEffectMask, AuraApplication* aurApp, ProcEventInfo& eventInfo);
257 float CalcPPMProcChance(Unit* actor) const;
258 void SetLastProcAttemptTime(TimePoint lastProcAttemptTime) { m_lastProcAttemptTime = lastProcAttemptTime; }
259 void SetLastProcSuccessTime(TimePoint lastProcSuccessTime) { m_lastProcSuccessTime = lastProcSuccessTime; }
260
261 // AuraScript
262 void LoadScripts();
263 bool CallScriptCheckAreaTargetHandlers(Unit* target);
264 void CallScriptDispel(DispelInfo* dispelInfo);
265 void CallScriptAfterDispel(DispelInfo* dispelInfo);
266 bool CallScriptEffectApplyHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
267 bool CallScriptEffectRemoveHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
268 void CallScriptAfterEffectApplyHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
269 void CallScriptAfterEffectRemoveHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, AuraEffectHandleModes mode);
270 bool CallScriptEffectPeriodicHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp);
271 void CallScriptEffectUpdatePeriodicHandlers(AuraEffect* aurEff);
272 void CallScriptEffectCalcAmountHandlers(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated);
273 void CallScriptEffectCalcPeriodicHandlers(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude);
274 void CallScriptEffectCalcSpellModHandlers(AuraEffect const* aurEff, SpellModifier*& spellMod);
275 void CallScriptEffectCalcCritChanceHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, Unit const* victim, float& critChance);
276 void CallScriptCalcDamageAndHealingHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, Unit* victim, int32& damageOrHealing, int32& flatMod, float& pctMod);
277 void CallScriptEffectAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount, bool & defaultPrevented);
278 void CallScriptEffectAfterAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount);
279 void CallScriptEffectAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, HealInfo& healInfo, uint32& absorbAmount, bool& defaultPrevented);
280 void CallScriptEffectAfterAbsorbHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, HealInfo& healInfo, uint32& absorbAmount);
281 void CallScriptEffectManaShieldHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount, bool & defaultPrevented);
282 void CallScriptEffectAfterManaShieldHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& absorbAmount);
283 void CallScriptEffectSplitHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, DamageInfo& dmgInfo, uint32& splitAmount);
284 void CallScriptEnterLeaveCombatHandlers(AuraApplication const* aurApp, bool isNowInCombat);
285 // Spell Proc Hooks
286 bool CallScriptCheckProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
287 bool CallScriptCheckEffectProcHandlers(AuraEffect const* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
288 bool CallScriptPrepareProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
289 bool CallScriptProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
290 void CallScriptAfterProcHandlers(AuraApplication const* aurApp, ProcEventInfo& eventInfo);
291 bool CallScriptEffectProcHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
292 void CallScriptAfterEffectProcHandlers(AuraEffect* aurEff, AuraApplication const* aurApp, ProcEventInfo& eventInfo);
293
294 UnitAura* ToUnitAura() { if (GetType() == UNIT_AURA_TYPE) return reinterpret_cast<UnitAura*>(this); else return nullptr; }
295 UnitAura const* ToUnitAura() const { if (GetType() == UNIT_AURA_TYPE) return reinterpret_cast<UnitAura const*>(this); else return nullptr; }
296
297 DynObjAura* ToDynObjAura() { if (GetType() == DYNOBJ_AURA_TYPE) return reinterpret_cast<DynObjAura*>(this); else return nullptr; }
298 DynObjAura const* ToDynObjAura() const { if (GetType() == DYNOBJ_AURA_TYPE) return reinterpret_cast<DynObjAura const*>(this); else return nullptr; }
299
300 template <class Script>
302 {
303 return static_cast<Script*>(GetScriptByType(typeid(Script)));
304 }
305
306 std::vector<AuraScript*> m_loadedScripts;
307
308 AuraEffectVector const& GetAuraEffects() const { return _effects; }
309
310 virtual std::string GetDebugInfo() const;
311
313
314 Aura(Aura const&) = delete;
315 Aura(Aura&&) = delete;
316
317 Aura& operator=(Aura const&) = delete;
318 Aura& operator=(Aura&&) = delete;
319
320 private:
321 AuraScript* GetScriptByType(std::type_info const& type) const;
322 void _DeleteRemovedApplications();
323
324 protected:
325 SpellInfo const* const m_spellInfo;
329 ObjectGuid const m_castItemGuid; // it is NOT safe to keep a pointer to the item because it may get deleted
333 time_t const m_applyTime;
335
336 int32 m_maxDuration; // Max aura duration
337 int32 m_duration; // Current time
338 int32 m_timeCla; // Timer for power per sec calcultion
339 std::vector<SpellPowerEntry const*> m_periodicCosts;// Periodic costs
340 int32 m_updateTargetMapInterval; // Timer for UpdateTargetMapOfEffect
341
342 uint8 const m_casterLevel; // Aura level (store caster level for correct show level dep amount)
343 uint8 m_procCharges; // Aura charges (0 for infinite)
344 uint8 m_stackAmount; // Aura stack amount
345
347
349 bool m_isSingleTarget; // true if it's a single target spell and registered at caster - can change at spell steal for example
351
353
357
358 private:
359 std::vector<AuraApplication*> _removedApplications;
360
362
363 struct NoopAuraDeleter { void operator()(Aura*) const { /*noop - not managed*/ } };
365};
366
368{
369 friend Aura* Aura::Create(AuraCreateInfo& createInfo);
370 protected:
371 explicit UnitAura(AuraCreateInfo const& createInfo);
372 public:
373 void _ApplyForTarget(Unit* target, Unit* caster, AuraApplication* aurApp) override;
374 void _UnapplyForTarget(Unit* target, Unit* caster, AuraApplication* aurApp) override;
375
376 void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) override;
377
378 void FillTargetMap(std::unordered_map<Unit*, uint32>& targets, Unit* caster) override;
379
380 // Allow Apply Aura Handler to modify and access m_AuraDRGroup
381 void SetDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; }
382 DiminishingGroup GetDiminishGroup() const { return m_AuraDRGroup; }
383
384 void AddStaticApplication(Unit* target, uint32 effMask);
385
386 private:
388 std::unordered_map<ObjectGuid, uint32> _staticApplications; // non-area auras
389};
390
392{
393 friend Aura* Aura::Create(AuraCreateInfo& createInfo);
394 protected:
395 explicit DynObjAura(AuraCreateInfo const& createInfo);
396 public:
397 DynObjAura(SpellInfo const* spellproto, ObjectGuid castId, uint32 effMask, WorldObject* owner, Unit* caster, Difficulty castDifficulty, int32 *baseAmount, Item* castItem, ObjectGuid casterGUID, ObjectGuid castItemGuid, uint32 castItemId, int32 castItemLevel);
398
399 void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT) override;
400
401 void FillTargetMap(std::unordered_map<Unit*, uint32>& targets, Unit* caster) override;
402};
403
404#endif
Difficulty
Definition: DBCEnums.h:873
#define MAX_SPELL_EFFECTS
Definition: DBCEnums.h:1953
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
std::chrono::steady_clock::time_point TimePoint
time_point shorthand typedefs
Definition: Duration.h:41
std::string GetDebugInfo()
Definition: Errors.cpp:157
#define ASSERT
Definition: Errors.h:68
Spells
Definition: PlayerAI.cpp:32
DiminishingGroup
AuraEffectHandleModes
AuraRemoveMode
@ AURA_REMOVE_BY_DEFAULT
AuraType
@ AFLAG_POSITIVE
@ AFLAG_NOCASTER
AuraObjectType
@ DYNOBJ_AURA_TYPE
@ UNIT_AURA_TYPE
std::vector< AuraEffect * > AuraEffectVector
Definition: SpellInfo.h:302
Unit * GetTarget() const
Definition: SpellAuras.h:77
void SetRemoveMode(AuraRemoveMode mode)
Definition: SpellAuras.h:90
bool IsPositive() const
Definition: SpellAuras.h:84
uint32 _effectsToApply
Definition: SpellAuras.h:66
bool _needClientUpdate
Definition: SpellAuras.h:67
uint32 _effectMask
Definition: SpellAuras.h:68
Aura *const _base
Definition: SpellAuras.h:62
bool IsNeedClientUpdate() const
Definition: SpellAuras.h:94
uint16 GetFlags() const
Definition: SpellAuras.h:81
Aura * GetBase() const
Definition: SpellAuras.h:78
uint32 GetEffectsToApply() const
Definition: SpellAuras.h:87
uint8 GetSlot() const
Definition: SpellAuras.h:80
uint32 GetEffectMask() const
Definition: SpellAuras.h:82
bool IsSelfcast() const
Definition: SpellAuras.h:85
AuraRemoveMode GetRemoveMode() const
Definition: SpellAuras.h:91
bool HasEffect(uint8 effect) const
Definition: SpellAuras.h:83
Unit *const _target
Definition: SpellAuras.h:61
AuraRemoveMode _removeMode
Definition: SpellAuras.h:63
UnitAura * ToUnitAura()
Definition: SpellAuras.h:294
Aura & operator=(Aura &&)=delete
ObjectGuid GetCastId() const
Definition: SpellAuras.h:138
static Aura * Create(AuraCreateInfo &createInfo)
Definition: SpellAuras.cpp:390
int32 GetMaxDuration() const
Definition: SpellAuras.h:168
Trinity::unique_trackable_ptr< Aura > m_scriptRef
Definition: SpellAuras.h:364
UnitAura const * ToUnitAura() const
Definition: SpellAuras.h:295
ApplicationMap const & GetApplicationMap()
Definition: SpellAuras.h:234
int32 GetCastItemLevel() const
Definition: SpellAuras.h:142
AuraEffectVector _effects
Definition: SpellAuras.h:361
int32 m_maxDuration
Definition: SpellAuras.h:336
Unit * GetUnitOwner() const
Definition: SpellAuras.h:147
void SetLastProcAttemptTime(TimePoint lastProcAttemptTime)
Definition: SpellAuras.h:258
time_t const m_applyTime
Definition: SpellAuras.h:333
DynamicObject * GetDynobjOwner() const
Definition: SpellAuras.h:148
void SetUsingCharges(bool val)
Definition: SpellAuras.h:250
void _RegisterForTargets()
Definition: SpellAuras.h:160
uint8 m_stackAmount
Definition: SpellAuras.h:344
ObjectGuid GetCasterGUID() const
Definition: SpellAuras.h:139
bool HasEffect(uint8 effIndex) const
Definition: SpellAuras.h:225
AuraEffectVector const & GetAuraEffects() const
Definition: SpellAuras.h:308
int32 m_duration
Definition: SpellAuras.h:337
bool IsRemoved() const
Definition: SpellAuras.h:205
std::vector< AuraApplication * > _removedApplications
Definition: SpellAuras.h:359
uint8 GetCasterLevel() const
Definition: SpellAuras.h:195
WorldObject * GetOwner() const
Definition: SpellAuras.h:146
uint32 GetId() const
Definition: SpellAuras.h:135
Aura(Aura const &)=delete
void SaveCasterInfo(Unit *caster)
TimePoint m_procCooldown
Definition: SpellAuras.h:354
ApplicationMap m_applications
Definition: SpellAuras.h:346
int32 GetDuration() const
Definition: SpellAuras.h:173
bool IsUsingCharges() const
Definition: SpellAuras.h:249
int32 m_castItemLevel
Definition: SpellAuras.h:331
uint32 GetCastItemId() const
Definition: SpellAuras.h:141
TimePoint m_lastProcSuccessTime
Definition: SpellAuras.h:356
ObjectGuid const m_castItemGuid
Definition: SpellAuras.h:329
int32 m_timeCla
Definition: SpellAuras.h:338
uint32 m_castItemId
Definition: SpellAuras.h:330
virtual void FillTargetMap(std::unordered_map< Unit *, uint32 > &targets, Unit *caster)=0
DynObjAura * ToDynObjAura()
Definition: SpellAuras.h:297
std::vector< AuraScript * > m_loadedScripts
Definition: SpellAuras.h:306
void ApplyForTargets()
Definition: SpellAuras.h:161
int32 CalcMaxDuration() const
Definition: SpellAuras.h:170
SpellInfo const *const m_spellInfo
Definition: SpellAuras.h:325
TimePoint m_lastProcAttemptTime
Definition: SpellAuras.h:355
ObjectGuid const m_castId
Definition: SpellAuras.h:327
uint8 GetStackAmount() const
Definition: SpellAuras.h:189
Aura & operator=(Aura const &)=delete
uint8 GetCharges() const
Definition: SpellAuras.h:180
Trinity::unique_weak_ptr< Aura > GetWeakPtr() const
Definition: SpellAuras.h:312
WorldObject *const m_owner
Definition: SpellAuras.h:334
SpellInfo const * GetSpellInfo() const
Definition: SpellAuras.h:134
ObjectGuid GetCastItemGUID() const
Definition: SpellAuras.h:140
void SetMaxDuration(int32 duration)
Definition: SpellAuras.h:169
ObjectGuid const m_casterGuid
Definition: SpellAuras.h:328
uint8 const m_casterLevel
Definition: SpellAuras.h:342
Script * GetScript() const
Definition: SpellAuras.h:301
void SetLastProcSuccessTime(TimePoint lastProcSuccessTime)
Definition: SpellAuras.h:259
Difficulty GetCastDifficulty() const
Definition: SpellAuras.h:136
void SetIsSingleTarget(bool val)
Definition: SpellAuras.h:209
bool IsExpired() const
Definition: SpellAuras.h:177
Aura(Aura &&)=delete
uint8 CalcMaxCharges() const
Definition: SpellAuras.h:183
bool m_isUsingCharges
Definition: SpellAuras.h:350
bool m_isRemoved
Definition: SpellAuras.h:348
time_t GetApplyTime() const
Definition: SpellAuras.h:167
std::vector< SpellPowerEntry const * > m_periodicCosts
Definition: SpellAuras.h:339
int32 m_updateTargetMapInterval
Definition: SpellAuras.h:340
Difficulty const m_castDifficulty
Definition: SpellAuras.h:326
DynObjAura const * ToDynObjAura() const
Definition: SpellAuras.h:298
std::unordered_map< ObjectGuid, AuraApplication * > ApplicationMap
Definition: SpellAuras.h:123
bool m_isSingleTarget
Definition: SpellAuras.h:349
uint8 m_procCharges
Definition: SpellAuras.h:343
SpellCastVisual const m_spellVisual
Definition: SpellAuras.h:332
bool IsPermanent() const
Definition: SpellAuras.h:178
ChargeDropEvent * m_dropEvent
Definition: SpellAuras.h:352
SpellCastVisual GetSpellVisual() const
Definition: SpellAuras.h:143
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
bool DropCharge(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: SpellAuras.h:185
bool IsSingleTarget() const
Definition: SpellAuras.h:207
DynObjAura(SpellInfo const *spellproto, ObjectGuid castId, uint32 effMask, WorldObject *owner, Unit *caster, Difficulty castDifficulty, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid castItemGuid, uint32 castItemId, int32 castItemLevel)
Definition: Unit.h:456
Definition: Item.h:170
Trinity::unique_trackable_ptr< Object > m_scriptRef
Definition: Object.h:419
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
DiminishingGroup m_AuraDRGroup
Definition: SpellAuras.h:387
void SetDiminishGroup(DiminishingGroup group)
Definition: SpellAuras.h:381
DiminishingGroup GetDiminishGroup() const
Definition: SpellAuras.h:382
std::unordered_map< ObjectGuid, uint32 > _staticApplications
Definition: SpellAuras.h:388
Definition: Unit.h:627
void apply(T *val)
Definition: ByteConverter.h:41
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition: Vignette.cpp:72
void Update(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:90
void Remove(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:100
uint32 SpellId
Definition: SpellAuras.h:106
ObjectGuid Caster
Definition: SpellAuras.h:104
friend std::strong_ordering operator<=>(AuraKey const &left, AuraKey const &right)=default
ObjectGuid Item
Definition: SpellAuras.h:105
uint32 EffectMask
Definition: SpellAuras.h:107
std::array< int32, MAX_SPELL_EFFECTS > BaseAmounts
Definition: SpellAuras.h:115
std::array< int32, MAX_SPELL_EFFECTS > Amounts
Definition: SpellAuras.h:114
void operator()(Aura *) const
Definition: SpellAuras.h:363