TrinityCore
Loading...
Searching...
No Matches
SpellAuraEffects.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_SPELLAURAEFFECTS_H
19#define TRINITY_SPELLAURAEFFECTS_H
20
21#include "SpellAuras.h"
22
23class AuraEffect;
24class Unit;
25class WorldObject;
26
27typedef void(AuraEffect::*pAuraEffectHandler)(AuraApplication const* aurApp, uint8 mode, bool apply) const;
28
30{
31 friend void Aura::_InitEffects(uint32 effMask, Unit* caster, SpellEffectValue const* baseAmount);
32 friend Aura::~Aura();
33 friend class Unit;
34
35 private:
37 explicit AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, SpellEffectValue const* baseAmount, Unit* caster);
38
39 public:
40 Unit* GetCaster() const { return GetBase()->GetCaster(); }
41 ObjectGuid GetCasterGUID() const { return GetBase()->GetCasterGUID(); }
42 Aura* GetBase() const { return m_base; }
43
44 template <typename Container>
45 void GetTargetList(Container& targetContainer) const;
46
47 template <typename Container>
48 void GetApplicationList(Container& applicationContainer) const;
49
50 SpellInfo const* GetSpellInfo() const { return m_spellInfo; }
51 uint32 GetId() const { return m_spellInfo->Id; }
52 SpellEffIndex GetEffIndex() const { return m_effectInfo.EffectIndex; }
53 SpellEffectValue GetBaseAmount() const { return m_baseAmount; }
54 int32 GetPeriod() const { return _period; }
55
56 int32 GetMiscValueB() const { return GetSpellEffectInfo().MiscValueB; }
57 int32 GetMiscValue() const { return GetSpellEffectInfo().MiscValue; }
58 AuraType GetAuraType() const { return GetSpellEffectInfo().ApplyAuraName; }
59 int32 GetAmountAsInt() const { return static_cast<int32>(_amount); }
60 SpellEffectValue GetAmount() const { return _amount; }
61 void SetAmount(SpellEffectValue amount) { _amount = amount; m_canBeRecalculated = false; }
62
63 Optional<SpellEffectValue> GetEstimatedAmount() const { return _estimatedAmount; }
64
65 int32 GetPeriodicTimer() const { return _periodicTimer; }
66 void SetPeriodicTimer(int32 periodicTimer) { _periodicTimer = periodicTimer; }
67
68 SpellEffectValue CalculateAmount(Unit* caster);
69 static Optional<SpellEffectValue> CalculateEstimatedAmount(Unit const* caster, Unit* target, SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, SpellEffectValue amount, uint8 stack, AuraEffect const* aurEff);
70 Optional<SpellEffectValue> CalculateEstimatedAmount(Unit const* caster, SpellEffectValue amount) const;
71 static SpellEffectValue CalculateEstimatedfTotalPeriodicAmount(Unit const* caster, Unit* target, SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, SpellEffectValue amount, uint8 stack);
72 void CalculatePeriodic(Unit* caster, bool resetPeriodicTimer = true, bool load = false);
73 void CalculateSpellMod();
74 void ChangeAmount(SpellEffectValue newAmount, bool mark = true, bool onStackOrReapply = false, AuraEffect const* triggeredBy = nullptr);
75 void RecalculateAmount(AuraEffect const* triggeredBy = nullptr) { if (!CanBeRecalculated()) return; ChangeAmount(CalculateAmount(GetCaster()), false, false, triggeredBy); }
76 void RecalculateAmount(Unit* caster, AuraEffect const* triggeredBy = nullptr) { if (!CanBeRecalculated()) return; ChangeAmount(CalculateAmount(caster), false, false, triggeredBy); }
77 bool CanBeRecalculated() const { return m_canBeRecalculated; }
78 void SetCanBeRecalculated(bool val) { m_canBeRecalculated = val; }
79 void HandleEffect(AuraApplication * aurApp, uint8 mode, bool apply, AuraEffect const* triggeredBy = nullptr);
80 void HandleEffect(Unit* target, uint8 mode, bool apply, AuraEffect const* triggeredBy = nullptr);
81 void ApplySpellMod(Unit* target, bool apply, AuraEffect const* triggeredBy = nullptr);
82
83 void Update(uint32 diff, Unit* caster);
84
85 uint32 GetTickNumber() const { return _ticksDone; }
86 uint32 GetRemainingTicks() const { return GetTotalTicks() - _ticksDone; }
87 uint32 GetTotalTicks() const;
88 void ResetPeriodic(bool resetPeriodicTimer = false);
89 void ResetTicks() { _ticksDone = 0; }
90
91 bool IsPeriodic() const { return m_isPeriodic; }
92 void SetPeriodic(bool isPeriodic) { m_isPeriodic = isPeriodic; }
93 bool IsAffectingSpell(SpellInfo const* spell) const;
94 bool HasSpellClassMask() const { return !!GetSpellEffectInfo().SpellClassMask; }
95
96 void SendTickImmune(Unit* target, Unit* caster) const;
97 void PeriodicTick(AuraApplication* aurApp, Unit* caster) const;
98
99 bool CheckEffectProc(AuraApplication* aurApp, ProcEventInfo& eventInfo) const;
100 void HandleProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
101
102 // add/remove SPELL_AURA_MOD_SHAPESHIFT (36) linked auras
103 void HandleShapeshiftBoosts(Unit* target, bool apply) const;
104
105 SpellEffectInfo const& GetSpellEffectInfo() const { return m_effectInfo; }
106
107 bool IsEffect() const { return m_effectInfo.Effect != 0; }
108 bool IsEffect(SpellEffectName effectName) const { return m_effectInfo.Effect == effectName; }
109 bool IsAreaAuraEffect() const;
110
111 private:
112 Aura* const m_base;
113
114 SpellInfo const* const m_spellInfo;
116
118
121 Optional<SpellEffectValue> _estimatedAmount; // for periodic damage and healing auras this will include damage done bonuses
122
123 // periodic stuff
125 int32 _period; // time between consecutive ticks
126 uint32 _ticksDone; // ticks counter
127
130
131 float GetCritChanceFor(Unit const* caster, Unit const* target) const;
132
133 public:
134 // aura effect apply/remove handlers
135 void HandleNULL(AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/) const
136 {
137 // not implemented
138 }
139 void HandleUnused(AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/) const
140 {
141 // useless
142 }
143 void HandleNoImmediateEffect(AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/) const
144 {
145 // aura type not have immediate effect at add/remove and handled by ID in other code place
146 }
147 // visibility & phases
148 void HandleModInvisibilityDetect(AuraApplication const* aurApp, uint8 mode, bool apply) const;
149 void HandleModInvisibility(AuraApplication const* aurApp, uint8 mode, bool apply) const;
150 void HandleModStealth(AuraApplication const* aurApp, uint8 mode, bool apply) const;
151 void HandleModStealthLevel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
152 void HandleModStealthDetect(AuraApplication const* aurApp, uint8 mode, bool apply) const;
153 void HandleDetectAmore(AuraApplication const* aurApp, uint8 mode, bool apply) const;
154 void HandleSpiritOfRedemption(AuraApplication const* aurApp, uint8 mode, bool apply) const;
155 void HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool apply) const;
156 void HandlePhase(AuraApplication const* aurApp, uint8 mode, bool apply) const;
157 void HandlePhaseGroup(AuraApplication const* aurApp, uint8 mode, bool apply) const;
158 void HandlePhaseAlwaysVisible(AuraApplication const* aurApp, uint8 mode, bool apply) const;
159
160 // unit model
161 void HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mode, bool apply) const;
162 void HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, bool apply) const;
163 void HandleAuraModScale(AuraApplication const* aurApp, uint8 mode, bool apply) const;
164 void HandleAuraCloneCaster(AuraApplication const* aurApp, uint8 mode, bool apply) const;
165 // fight
166 void HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, bool apply) const;
167 void HandleModUnattackable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
168 void HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode, bool apply) const;
169 void HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode, bool apply) const;
170 void HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode, bool apply) const;
171 void HandleAuraModPacifyAndSilence(AuraApplication const* aurApp, uint8 mode, bool apply) const;
172 void HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mode, bool apply) const;
173 // tracking
174 void HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 mode, bool apply) const;
175 void HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
176 void HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, bool apply) const;
177 void HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
178 // skills & talents
179 void HandleAuraModSkill(AuraApplication const* aurApp, uint8 mode, bool apply) const;
180 void HandleAuraAllowTalentSwapping(AuraApplication const* aurApp, uint8 mode, bool apply) const;
181 // movement
182 void HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
183 void HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode, bool apply) const;
184 void HandleAuraWaterWalk(AuraApplication const* aurApp, uint8 mode, bool apply) const;
185 void HandleAuraFeatherFall(AuraApplication const* aurApp, uint8 mode, bool apply) const;
186 void HandleAuraHover(AuraApplication const* aurApp, uint8 mode, bool apply) const;
187 void HandleWaterBreathing(AuraApplication const* aurApp, uint8 mode, bool apply) const;
188 void HandleForceMoveForward(AuraApplication const* aurApp, uint8 mode, bool apply) const;
189 void HandleAuraCanTurnWhileFalling(AuraApplication const* aurApp, uint8 mode, bool apply) const;
190 void HandleModAdvFlying(AuraApplication const* aurApp, uint8 mode, bool apply) const;
191 void HandleIgnoreMovementForces(AuraApplication const* aurApp, uint8 mode, bool apply) const;
192 void HandleDisableInertia(AuraApplication const* aurApp, uint8 mode, bool apply) const;
193 void HandleSetCantSwim(AuraApplication const* aurApp, uint8 mode, bool apply) const;
194 // threat
195 void HandleModThreat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
196 void HandleAuraModTotalThreat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
197 void HandleModTaunt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
198 void HandleModDetaunt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
199 void HandleAuraModFixate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
200 // control
201 void HandleModConfuse(AuraApplication const* aurApp, uint8 mode, bool apply) const;
202 void HandleModFear(AuraApplication const* aurApp, uint8 mode, bool apply) const;
203 void HandleAuraModStun(AuraApplication const* aurApp, uint8 mode, bool apply) const;
204 void HandleAuraModRoot(AuraApplication const* aurApp, uint8 mode, bool apply) const;
205 void HandlePreventFleeing(AuraApplication const* aurApp, uint8 mode, bool apply) const;
206 void HandleAuraModRootAndDisableGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
207 void HandleAuraModStunAndDisableGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
208 void HandleAuraDisableGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
209 // charm
210 void HandleModPossess(AuraApplication const* aurApp, uint8 mode, bool apply) const;
211 void HandleModPossessPet(AuraApplication const* aurApp, uint8 mode, bool apply) const;
212 void HandleModCharm(AuraApplication const* aurApp, uint8 mode, bool apply) const;
213 void HandleCharmConvert(AuraApplication const* aurApp, uint8 mode, bool apply) const;
214 void HandleAuraControlVehicle(AuraApplication const* aurApp, uint8 mode, bool apply) const;
215 // modify speed
216 void HandleAuraModIncreaseSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
217 void HandleAuraModIncreaseMountedSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
218 void HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
219 void HandleAuraModIncreaseSwimSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
220 void HandleAuraModDecreaseSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
221 void HandleAuraModUseNormalSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
222 void HandleAuraModMinimumSpeedRate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
223 void HandleModMovementForceMagnitude(AuraApplication const* aurApp, uint8 mode, bool apply) const;
224 void HandleAuraModAdvFlyingSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
225 // immunity
226 void HandleModMechanicImmunityMask(AuraApplication const* aurApp, uint8 mode, bool apply) const;
227 void HandleModMechanicImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
228 void HandleAuraModEffectImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
229 void HandleAuraModStateImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
230 void HandleAuraModSchoolImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
231 void HandleAuraModDmgImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
232 void HandleAuraModDispelImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
233 // modify stats
234 // resistance
235 void HandleAuraModResistance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
236 void HandleAuraModBaseResistancePCT(AuraApplication const* aurApp, uint8 mode, bool apply) const;
237 void HandleModResistancePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
238 void HandleModBaseResistance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
239 void HandleModTargetResistance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
240 // stat
241 void HandleAuraModStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
242 void HandleModPercentStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
243 void HandleModSpellDamagePercentFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
244 void HandleModSpellHealingPercentFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
245 void HandleModHealingDone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
246 void HandleModHealingDonePct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
247 void HandleModTotalPercentStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
248 void HandleAuraModExpertise(AuraApplication const* aurApp, uint8 mode, bool apply) const;
249 void HandleModBonusArmor(AuraApplication const* aurApp, uint8 mode, bool apply) const;
250 void HandleModBonusArmorPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
251 void HandleModArmorPctFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
252 void HandleModStatBonusPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
253 void HandleOverrideSpellPowerByAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
254 void HandleOverrideAttackPowerBySpellPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
255 void HandleModVersatilityByPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
256 void HandleAuraModMaxPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
257 void HandleConvertCritToParry(AuraApplication const* aurApp, uint8 mode, bool apply) const;
258 // heal and energize
259 void HandleModPowerRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const;
260 void HandleModPowerRegenPCT(AuraApplication const* aurApp, uint8 mode, bool apply) const;
261 void HandleModManaRegenPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
262 void HandleAuraModIncreaseHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const;
263 void HandleAuraModIncreaseMaxHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const;
264 void HandleAuraModIncreaseEnergy(AuraApplication const* aurApp, uint8 mode, bool apply) const;
265 void HandleAuraModIncreaseEnergyPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
266 void HandleAuraModIncreaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
267 void HandleAuraIncreaseBaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
268 void HandleAuraModIncreaseBaseManaPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
269 void HandleModManaCostPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
270 void HandleAuraModPowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const;
271 void HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const;
272 void HandleAuraModMaxPowerPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
273 void HandleTriggerSpellOnHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
274 // fight
275 void HandleAuraModParryPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
276 void HandleAuraModDodgePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
277 void HandleAuraModBlockPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
278 void HandleAuraModRegenInterrupt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
279 void HandleAuraModWeaponCritPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
280 void HandleModSpellHitChance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
281 void HandleModSpellCritChance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
282 void HandleAuraModCritPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
283 // attack speed
284 void HandleModCastingSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
285 void HandleModMeleeRangedSpeedPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
286 void HandleModCombatSpeedPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
287 void HandleModAttackSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
288 void HandleModMeleeSpeedPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
289 void HandleAuraModRangedHaste(AuraApplication const* aurApp, uint8 mode, bool apply) const;
290 // combat rating
291 void HandleModRating(AuraApplication const* aurApp, uint8 mode, bool apply) const;
292 void HandleModRatingPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
293 // attack power
294 void HandleAuraModAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
295 void HandleAuraModRangedAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
296 void HandleAuraModAttackPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
297 void HandleAuraModRangedAttackPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
298 // damage bonus
299 void HandleModDamageDone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
300 void HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
301 void HandleModOffhandDamagePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
302 void HandleShieldBlockValue(AuraApplication const* aurApp, uint8 mode, bool apply) const;
303 void HandleShieldBlockValuePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
304 // power cost
305 void HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, bool apply) const;
306 void HandleArenaPreparation(AuraApplication const* aurApp, uint8 mode, bool apply) const;
307 void HandleNoReagentUseAura(AuraApplication const* aurApp, uint8 mode, bool apply) const;
308 // others
309 void HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool apply) const;
310 void HandleChannelDeathItem(AuraApplication const* aurApp, uint8 mode, bool apply) const;
311 void HandleBindSight(AuraApplication const* aurApp, uint8 mode, bool apply) const;
312 void HandleForceReaction(AuraApplication const* aurApp, uint8 mode, bool apply) const;
313 void HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bool apply) const;
314 void HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode, bool apply) const;
315 void HandleLearnSpell(AuraApplication const* aurApp, uint8 mode, bool apply) const;
316 void HandleComprehendLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const;
317 void HandleModAlternativeDefaultLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const;
318 void HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, bool apply) const;
319 void HandleAuraOpenStable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
320 void HandleAuraModFakeInebriation(AuraApplication const* aurApp, uint8 mode, bool apply) const;
321 void HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 mode, bool apply) const;
322 void HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, bool apply) const;
323 void HandleSetVignette(AuraApplication const* aurApp, uint8 mode, bool apply) const;
324 void HandlePreventResurrection(AuraApplication const* aurApp, uint8 mode, bool apply) const;
325 void HandleMastery(AuraApplication const* aurApp, uint8 mode, bool apply) const;
326 void HandleAuraForceWeather(AuraApplication const* aurApp, uint8 mode, bool apply) const;
327 void HandleEnableAltPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
328 void HandleModSpellCategoryCooldown(AuraApplication const* aurApp, uint8 mode, bool apply) const;
329 void HandleModRecoveryRate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
330 void HandleModRecoveryRateBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
331 void HandleModChargeRecoveryRate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
332 void HandleShowConfirmationPrompt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
333 void HandleOverridePetSpecs(AuraApplication const* aurApp, uint8 mode, bool apply) const;
334 void HandleAllowUsingGameobjectsWhileMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
335 void HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool apply) const;
336 void HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mode, bool apply) const;
337 void HandleLinkedSummon(AuraApplication const* aurApp, uint8 mode, bool apply) const;
338 void HandleSetFFAPvP(AuraApplication const* aurApp, uint8 mode, bool apply) const;
339 void HandleModOverrideZonePVPType(AuraApplication const* aurApp, uint8 mode, bool apply) const;
340 void HandleBattlegroundPlayerPosition(AuraApplication const* aurApp, uint8 mode, bool apply) const;
341 void HandleTriggerSpellOnPowerAmount(AuraApplication const* aurApp, uint8 mode, bool apply) const;
342 void HandleTriggerSpellOnPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
343 void HandleTriggerSpellOnExpire(AuraApplication const* aurApp, uint8 mode, bool apply) const;
344 void HandleStoreTeleportReturnPoint(AuraApplication const* aurApp, uint8 mode, bool apply) const;
345 void HandleMountRestrictions(AuraApplication const* aurApp, uint8 mode, bool apply) const;
346 void HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
347 void HandleModRequiredMountCapabilityFlags(AuraApplication const* aurApp, uint8 mode, bool apply) const;
348 void HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
349 void HandleForceBreathBar(AuraApplication const* aurApp, uint8 mode, bool apply) const;
350
351 // aura effect periodic tick handlers
352 void HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) const;
353 void HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* caster) const;
354 void HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const;
355 void HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) const;
356 void HandlePeriodicHealthFunnelAuraTick(Unit* target, Unit* caster) const;
357 void HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const;
358 void HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) const;
359 void HandleObsModPowerAuraTick(Unit* target, Unit* caster) const;
360 void HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) const;
361 void HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const;
362
363 float CalcPeriodicCritChance(Unit const* caster) const;
364
365 // aura effect proc handlers
366 void HandleBreakableCCAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
367 void HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
368 void HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
369 void HandleProcTriggerDamageAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
370
371 // pvp talents
372 void HandleAuraPvpTalents(AuraApplication const* auraApp, uint8 mode, bool apply) const;
373
374 void HandleAuraActAsControlZone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
375};
376
377namespace Trinity
378{
379 // Binary predicate for sorting the priority of absorption aura effects
381 {
382 public:
383 bool operator()(AuraEffect const* aurEffA, AuraEffect const* aurEffB) const
384 {
385 return aurEffA->GetMiscValueB() < aurEffB->GetMiscValueB();
386 }
387 };
388}
389#endif
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
SpellEffIndex
SpellEffectName
static void HandleAuraDisableGravity(Unit *target, bool apply)
void(AuraEffect::* pAuraEffectHandler)(AuraApplication const *aurApp, uint8 mode, bool apply) const
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
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 SetAmount(SpellEffectValue amount)
void HandleUnused(AuraApplication const *, uint8, bool) const
int32 GetAmountAsInt() const
SpellEffectValue GetBaseAmount() const
void HandleNoImmediateEffect(AuraApplication const *, uint8, bool) const
uint32 GetRemainingTicks() const
uint32 GetId() const
int32 GetPeriodicTimer() const
int32 GetPeriod() const
Optional< SpellEffectValue > GetEstimatedAmount() const
bool IsPeriodic() const
SpellEffectValue _amount
Optional< SpellEffectValue > _estimatedAmount
int32 GetMiscValueB() const
void SetPeriodic(bool isPeriodic)
bool IsEffect(SpellEffectName effectName) const
Unit * GetCaster() const
int32 GetMiscValue() const
SpellEffectInfo const & m_effectInfo
SpellEffectValue const m_baseAmount
Aura * GetBase() const
void SetPeriodicTimer(int32 periodicTimer)
bool HasSpellClassMask() const
SpellInfo const *const m_spellInfo
SpellEffectValue GetAmount() const
void RecalculateAmount(AuraEffect const *triggeredBy=nullptr)
ObjectGuid GetCasterGUID() const
bool IsEffect() const
void SetCanBeRecalculated(bool val)
Aura *const m_base
void _InitEffects(uint32 effMask, Unit *caster, SpellEffectValue const *baseAmount)
virtual ~Aura()
bool operator()(AuraEffect const *aurEffA, AuraEffect const *aurEffB) const
Definition Unit.h:635