18#ifndef TRINITY_SPELLAURAEFFECTS_H
19#define TRINITY_SPELLAURAEFFECTS_H
44 template <
typename Container>
45 void GetTargetList(Container& targetContainer)
const;
47 template <
typename Container>
48 void GetApplicationList(Container& applicationContainer)
const;
60 void SetAmount(
int32 amount) { _amount = amount; m_canBeRecalculated =
false; }
71 void CalculatePeriodic(
Unit* caster,
bool resetPeriodicTimer =
true,
bool load =
false);
72 void CalculateSpellMod();
73 void ChangeAmount(
int32 newAmount,
bool mark =
true,
bool onStackOrReapply =
false,
AuraEffect const* triggeredBy =
nullptr);
74 void RecalculateAmount(
AuraEffect const* triggeredBy =
nullptr) {
if (!CanBeRecalculated())
return; ChangeAmount(CalculateAmount(GetCaster()),
false,
false, triggeredBy); }
75 void RecalculateAmount(
Unit* caster,
AuraEffect const* triggeredBy =
nullptr) {
if (!CanBeRecalculated())
return; ChangeAmount(CalculateAmount(caster),
false,
false, triggeredBy); }
86 uint32 GetTotalTicks()
const;
87 void ResetPeriodic(
bool resetPeriodicTimer =
false);
91 void SetPeriodic(
bool isPeriodic) { m_isPeriodic = isPeriodic; }
92 bool IsAffectingSpell(
SpellInfo const* spell)
const;
95 void SendTickImmune(
Unit* target,
Unit* caster)
const;
102 void HandleShapeshiftBoosts(
Unit* target,
bool apply)
const;
106 bool IsEffect()
const {
return m_effectInfo.Effect != 0; }
108 bool IsAreaAuraEffect()
const;
130 float GetCritChanceFor(
Unit const* caster,
Unit const* target)
const;
343 void HandlePeriodicTriggerSpellAuraTick(
Unit* target,
Unit* caster)
const;
344 void HandlePeriodicTriggerSpellWithValueAuraTick(
Unit* target,
Unit* caster)
const;
345 void HandlePeriodicDamageAurasTick(
Unit* target,
Unit* caster)
const;
346 void HandlePeriodicHealthLeechAuraTick(
Unit* target,
Unit* caster)
const;
347 void HandlePeriodicHealthFunnelAuraTick(
Unit* target,
Unit* caster)
const;
348 void HandlePeriodicHealAurasTick(
Unit* target,
Unit* caster)
const;
349 void HandlePeriodicManaLeechAuraTick(
Unit* target,
Unit* caster)
const;
350 void HandleObsModPowerAuraTick(
Unit* target,
Unit* caster)
const;
351 void HandlePeriodicEnergizeAuraTick(
Unit* target,
Unit* caster)
const;
352 void HandlePeriodicPowerBurnAuraTick(
Unit* target,
Unit* caster)
const;
354 bool CanPeriodicTickCrit()
const;
355 float CalcPeriodicCritChance(
Unit const* caster)
const;
380 if (spellProtoA->
Id == 28527)
382 if (spellProtoB->
Id == 28527)
392 if (spellProtoA->
Id == 7812)
394 if (spellProtoB->
Id == 7812)
398 if (spellProtoA->
Id == 86949)
400 if (spellProtoB->
Id == 86949)
404 if (spellProtoA->
Id == 20711)
406 if (spellProtoB->
Id == 20711)
std::optional< T > Optional
Optional helper class to wrap optional values within.
void(AuraEffect::* pAuraEffectHandler)(AuraApplication const *aurApp, uint8 mode, bool apply) const
uint32 GetTickNumber() const
SpellInfo const * GetSpellInfo() const
AuraType GetAuraType() const
SpellEffIndex GetEffIndex() const
void HandleNULL(AuraApplication const *, uint8, bool) const
bool CanBeRecalculated() const
SpellModifier * m_spellmod
SpellEffectInfo const & GetSpellEffectInfo() const
void RecalculateAmount(Unit *caster, AuraEffect const *triggeredBy=nullptr)
void HandleUnused(AuraApplication const *, uint8, bool) const
void HandleNoImmediateEffect(AuraApplication const *, uint8, bool) const
Optional< float > _estimatedAmount
uint32 GetRemainingTicks() const
int32 GetPeriodicTimer() const
int32 GetMiscValueB() const
void SetPeriodic(bool isPeriodic)
bool IsEffect(SpellEffectName effectName) const
void SetAmount(int32 amount)
int32 GetMiscValue() const
SpellEffectInfo const & m_effectInfo
void SetPeriodicTimer(int32 periodicTimer)
bool HasSpellClassMask() const
SpellInfo const *const m_spellInfo
int32 GetBaseAmount() const
void RecalculateAmount(AuraEffect const *triggeredBy=nullptr)
ObjectGuid GetCasterGUID() const
Optional< float > GetEstimatedAmount() const
void SetCanBeRecalculated(bool val)
void _InitEffects(uint32 effMask, Unit *caster, int32 const *baseAmount)
uint32 GetCategory() const
bool operator()(AuraEffect *aurEffA, AuraEffect *aurEffB) const
void Update(VignetteData &vignette, WorldObject const *owner)