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); }
79 void HandleEffect(
Unit* target,
uint8 mode,
bool apply,
AuraEffect const* triggeredBy =
nullptr);
80 void ApplySpellMod(
Unit* target,
bool apply,
AuraEffect const* triggeredBy =
nullptr);
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;
170 void HandleAuraModPacifyAndSilence(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
179 void HandleAuraAllowTalentSwapping(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
188 void HandleAuraCanTurnWhileFalling(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
202 void HandleAuraModRootAndDisableGravity(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
203 void HandleAuraModStunAndDisableGravity(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
212 void HandleAuraModIncreaseMountedSpeed(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
213 void HandleAuraModIncreaseFlightSpeed(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
214 void HandleAuraModIncreaseSwimSpeed(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
217 void HandleAuraModMinimumSpeedRate(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
218 void HandleModMovementForceMagnitude(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
220 void HandleModMechanicImmunityMask(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
230 void HandleAuraModBaseResistancePCT(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
237 void HandleModSpellDamagePercentFromStat(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
238 void HandleModSpellHealingPercentFromStat(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
247 void HandleOverrideSpellPowerByAttackPower(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
248 void HandleOverrideAttackPowerBySpellPower(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
256 void HandleAuraModIncreaseMaxHealth(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
258 void HandleAuraModIncreaseEnergyPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
259 void HandleAuraModIncreaseHealthPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
260 void HandleAuraIncreaseBaseHealthPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
261 void HandleAuraModIncreaseBaseManaPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
264 void HandleAuraModOverridePowerDisplay(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
266 void HandleTriggerSpellOnHealthPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
272 void HandleAuraModWeaponCritPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
288 void HandleAuraModRangedAttackPower(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
289 void HandleAuraModAttackPowerPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
290 void HandleAuraModRangedAttackPowerPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
294 void HandleModOffhandDamagePercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
296 void HandleShieldBlockValuePercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
310 void HandleModAlternativeDefaultLanguage(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
320 void HandleModSpellCategoryCooldown(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
323 void HandleAllowUsingGameobjectsWhileMounted(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
329 void HandleBattlegroundPlayerPosition(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
330 void HandleTriggerSpellOnPowerAmount(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
331 void HandleTriggerSpellOnPowerPercent(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
333 void HandleStoreTeleportReturnPoint(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
336 void HandleModRequiredMountCapabilityFlags(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
337 void HandleSuppressItemPassiveEffectBySpellLabel(
AuraApplication const* aurApp,
uint8 mode,
bool apply)
const;
341 void HandlePeriodicTriggerSpellAuraTick(
Unit* target,
Unit* caster)
const;
342 void HandlePeriodicTriggerSpellWithValueAuraTick(
Unit* target,
Unit* caster)
const;
343 void HandlePeriodicDamageAurasTick(
Unit* target,
Unit* caster)
const;
344 void HandlePeriodicHealthLeechAuraTick(
Unit* target,
Unit* caster)
const;
345 void HandlePeriodicHealthFunnelAuraTick(
Unit* target,
Unit* caster)
const;
346 void HandlePeriodicHealAurasTick(
Unit* target,
Unit* caster)
const;
347 void HandlePeriodicManaLeechAuraTick(
Unit* target,
Unit* caster)
const;
348 void HandleObsModPowerAuraTick(
Unit* target,
Unit* caster)
const;
349 void HandlePeriodicEnergizeAuraTick(
Unit* target,
Unit* caster)
const;
350 void HandlePeriodicPowerBurnAuraTick(
Unit* target,
Unit* caster)
const;
352 bool CanPeriodicTickCrit()
const;
353 float CalcPeriodicCritChance(
Unit const* caster)
const;
378 if (spellProtoA->
Id == 28527)
380 if (spellProtoB->
Id == 28527)
390 if (spellProtoA->
Id == 7812)
392 if (spellProtoB->
Id == 7812)
396 if (spellProtoA->
Id == 86949)
398 if (spellProtoB->
Id == 86949)
402 if (spellProtoA->
Id == 20711)
404 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