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 private:
108 Aura* const m_base;
109
110 SpellInfo const* const m_spellInfo;
112
114
117 Optional<SpellEffectValue> _estimatedAmount; // for periodic damage and healing auras this will include damage done bonuses
118
119 // periodic stuff
121 int32 _period; // time between consecutive ticks
122 uint32 _ticksDone; // ticks counter
123
126
127 float GetCritChanceFor(Unit const* caster, Unit const* target) const;
128
129 public:
130 // aura effect apply/remove handlers
131 void HandleNULL(AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/) const
132 {
133 // not implemented
134 }
135 void HandleUnused(AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/) const
136 {
137 // useless
138 }
139 void HandleNoImmediateEffect(AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/) const
140 {
141 // aura type not have immediate effect at add/remove and handled by ID in other code place
142 }
143 // visibility & phases
144 void HandleModInvisibilityDetect(AuraApplication const* aurApp, uint8 mode, bool apply) const;
145 void HandleModInvisibility(AuraApplication const* aurApp, uint8 mode, bool apply) const;
146 void HandleModStealth(AuraApplication const* aurApp, uint8 mode, bool apply) const;
147 void HandleModStealthLevel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
148 void HandleModStealthDetect(AuraApplication const* aurApp, uint8 mode, bool apply) const;
149 void HandleDetectAmore(AuraApplication const* aurApp, uint8 mode, bool apply) const;
150 void HandleSpiritOfRedemption(AuraApplication const* aurApp, uint8 mode, bool apply) const;
151 void HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool apply) const;
152 void HandlePhase(AuraApplication const* aurApp, uint8 mode, bool apply) const;
153 void HandlePhaseGroup(AuraApplication const* aurApp, uint8 mode, bool apply) const;
154 void HandlePhaseAlwaysVisible(AuraApplication const* aurApp, uint8 mode, bool apply) const;
155
156 // unit model
157 void HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mode, bool apply) const;
158 void HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, bool apply) const;
159 void HandleAuraModScale(AuraApplication const* aurApp, uint8 mode, bool apply) const;
160 void HandleAuraCloneCaster(AuraApplication const* aurApp, uint8 mode, bool apply) const;
161 // fight
162 void HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, bool apply) const;
163 void HandleModUnattackable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
164 void HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode, bool apply) const;
165 void HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode, bool apply) const;
166 void HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode, bool apply) const;
167 void HandleAuraModPacifyAndSilence(AuraApplication const* aurApp, uint8 mode, bool apply) const;
168 void HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mode, bool apply) const;
169 // tracking
170 void HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 mode, bool apply) const;
171 void HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
172 void HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, bool apply) const;
173 void HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
174 // skills & talents
175 void HandleAuraModSkill(AuraApplication const* aurApp, uint8 mode, bool apply) const;
176 void HandleAuraAllowTalentSwapping(AuraApplication const* aurApp, uint8 mode, bool apply) const;
177 // movement
178 void HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
179 void HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode, bool apply) const;
180 void HandleAuraWaterWalk(AuraApplication const* aurApp, uint8 mode, bool apply) const;
181 void HandleAuraFeatherFall(AuraApplication const* aurApp, uint8 mode, bool apply) const;
182 void HandleAuraHover(AuraApplication const* aurApp, uint8 mode, bool apply) const;
183 void HandleWaterBreathing(AuraApplication const* aurApp, uint8 mode, bool apply) const;
184 void HandleModWaterBreathing(AuraApplication const* aurApp, uint8 mode, bool apply) const;
185 void HandleForceBreathBar(AuraApplication const* aurApp, uint8 mode, bool apply) const;
186 void HandleForceMoveForward(AuraApplication const* aurApp, uint8 mode, bool apply) const;
187 void HandleAuraCanTurnWhileFalling(AuraApplication const* aurApp, uint8 mode, bool apply) const;
188 void HandleModAdvFlying(AuraApplication const* aurApp, uint8 mode, bool apply) const;
189 void HandleIgnoreMovementForces(AuraApplication const* aurApp, uint8 mode, bool apply) const;
190 void HandleDisableInertia(AuraApplication const* aurApp, uint8 mode, bool apply) const;
191 void HandleSetCantSwim(AuraApplication const* aurApp, uint8 mode, bool apply) const;
192 // threat
193 void HandleModThreat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
194 void HandleAuraModTotalThreat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
195 void HandleModTaunt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
196 void HandleModDetaunt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
197 void HandleAuraModFixate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
198 // control
199 void HandleModConfuse(AuraApplication const* aurApp, uint8 mode, bool apply) const;
200 void HandleModFear(AuraApplication const* aurApp, uint8 mode, bool apply) const;
201 void HandleAuraModStun(AuraApplication const* aurApp, uint8 mode, bool apply) const;
202 void HandleAuraModRoot(AuraApplication const* aurApp, uint8 mode, bool apply) const;
203 void HandlePreventFleeing(AuraApplication const* aurApp, uint8 mode, bool apply) const;
204 void HandleAuraModRootAndDisableGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
205 void HandleAuraModStunAndDisableGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
206 void HandleAuraDisableGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
207 // charm
208 void HandleModPossess(AuraApplication const* aurApp, uint8 mode, bool apply) const;
209 void HandleModPossessPet(AuraApplication const* aurApp, uint8 mode, bool apply) const;
210 void HandleModCharm(AuraApplication const* aurApp, uint8 mode, bool apply) const;
211 void HandleCharmConvert(AuraApplication const* aurApp, uint8 mode, bool apply) const;
212 void HandleAuraControlVehicle(AuraApplication const* aurApp, uint8 mode, bool apply) const;
213 // modify speed
214 void HandleAuraModIncreaseSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
215 void HandleAuraModIncreaseMountedSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
216 void HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
217 void HandleAuraModIncreaseSwimSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
218 void HandleAuraModDecreaseSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
219 void HandleAuraModUseNormalSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
220 void HandleAuraModMinimumSpeedRate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
221 void HandleModMovementForceMagnitude(AuraApplication const* aurApp, uint8 mode, bool apply) const;
222 void HandleAuraModAdvFlyingSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
223 // immunity
224 void HandleModMechanicImmunityMask(AuraApplication const* aurApp, uint8 mode, bool apply) const;
225 void HandleModMechanicImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
226 void HandleAuraModEffectImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
227 void HandleAuraModStateImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
228 void HandleAuraModSchoolImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
229 void HandleAuraModDmgImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
230 void HandleAuraModDispelImmunity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
231 // modify stats
232 // resistance
233 void HandleAuraModResistance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
234 void HandleAuraModBaseResistancePCT(AuraApplication const* aurApp, uint8 mode, bool apply) const;
235 void HandleModResistancePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
236 void HandleModBaseResistance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
237 void HandleModTargetResistance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
238 // stat
239 void HandleAuraModStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
240 void HandleModPercentStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
241 void HandleModSpellDamagePercentFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
242 void HandleModSpellHealingPercentFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
243 void HandleModHealingDone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
244 void HandleModHealingDonePct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
245 void HandleModTotalPercentStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
246 void HandleAuraModExpertise(AuraApplication const* aurApp, uint8 mode, bool apply) const;
247 void HandleModBonusArmor(AuraApplication const* aurApp, uint8 mode, bool apply) const;
248 void HandleModBonusArmorPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
249 void HandleModArmorPctFromStat(AuraApplication const* aurApp, uint8 mode, bool apply) const;
250 void HandleModStatBonusPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
251 void HandleOverrideSpellPowerByAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
252 void HandleOverrideAttackPowerBySpellPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
253 void HandleModVersatilityByPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
254 void HandleAuraModMaxPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
255 void HandleConvertCritToParry(AuraApplication const* aurApp, uint8 mode, bool apply) const;
256 // heal and energize
257 void HandleModPowerRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const;
258 void HandleModPowerRegenPCT(AuraApplication const* aurApp, uint8 mode, bool apply) const;
259 void HandleModManaRegenPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
260 void HandleAuraModIncreaseHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const;
261 void HandleAuraModIncreaseMaxHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const;
262 void HandleAuraModIncreaseEnergy(AuraApplication const* aurApp, uint8 mode, bool apply) const;
263 void HandleAuraModIncreaseEnergyPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
264 void HandleAuraModIncreaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
265 void HandleAuraIncreaseBaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
266 void HandleAuraModIncreaseBaseManaPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
267 void HandleModManaCostPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
268 void HandleAuraModPowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const;
269 void HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const;
270 void HandleAuraModMaxPowerPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
271 void HandleTriggerSpellOnHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
272 // fight
273 void HandleAuraModParryPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
274 void HandleAuraModDodgePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
275 void HandleAuraModBlockPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
276 void HandleAuraModRegenInterrupt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
277 void HandleAuraModWeaponCritPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
278 void HandleModSpellHitChance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
279 void HandleModSpellCritChance(AuraApplication const* aurApp, uint8 mode, bool apply) const;
280 void HandleAuraModCritPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
281 // attack speed
282 void HandleModCastingSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
283 void HandleModMeleeHaste(AuraApplication const* aurApp, uint8 mode, bool apply) const;
284 void HandleModRangedHaste(AuraApplication const* aurApp, uint8 mode, bool apply) const;
285 void HandleModMeleeRangedHaste(AuraApplication const* aurApp, uint8 mode, bool apply) const;
286 void HandleModMeleeRangedCastingHaste(AuraApplication const* aurApp, uint8 mode, bool apply) const;
287 void HandleModMeleeSlowNoStack(AuraApplication const* aurApp, uint8 mode, bool apply) const;
288 void HandleModRangedSlowNoStack(AuraApplication const* aurApp, uint8 mode, bool apply) const;
289 void HandleModSpellSlowNoStack(AuraApplication const* aurApp, uint8 mode, bool apply) const;
290 void HandleModCastingSlowNoStack(AuraApplication const* aurApp, uint8 mode, bool apply) const;
291 void HandleModMeleeRangedCastingSlowNoStack(AuraApplication const* aurApp, uint8 mode, bool apply) const;
292 void HandleModMeleeHasteNoRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const;
293 void HandleModRangedHasteNoRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const;
294 void HandleModMeleeRangedHasteNoRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const;
295 void HandleModAttackSpeed(AuraApplication const* aurApp, uint8 mode, bool apply) const;
296 // combat rating
297 void HandleModRating(AuraApplication const* aurApp, uint8 mode, bool apply) const;
298 void HandleModRatingPct(AuraApplication const* aurApp, uint8 mode, bool apply) const;
299 // attack power
300 void HandleAuraModAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
301 void HandleAuraModRangedAttackPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
302 void HandleAuraModAttackPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
303 void HandleAuraModRangedAttackPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
304 // damage bonus
305 void HandleModDamageDone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
306 void HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
307 void HandleModOffhandDamagePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
308 void HandleShieldBlockValue(AuraApplication const* aurApp, uint8 mode, bool apply) const;
309 void HandleShieldBlockValuePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
310 // power cost
311 void HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, bool apply) const;
312 void HandleArenaPreparation(AuraApplication const* aurApp, uint8 mode, bool apply) const;
313 void HandleNoReagentUseAura(AuraApplication const* aurApp, uint8 mode, bool apply) const;
314 // others
315 void HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool apply) const;
316 void HandleChannelDeathItem(AuraApplication const* aurApp, uint8 mode, bool apply) const;
317 void HandleBindSight(AuraApplication const* aurApp, uint8 mode, bool apply) const;
318 void HandleForceReaction(AuraApplication const* aurApp, uint8 mode, bool apply) const;
319 void HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bool apply) const;
320 void HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode, bool apply) const;
321 void HandleLearnSpell(AuraApplication const* aurApp, uint8 mode, bool apply) const;
322 void HandleComprehendLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const;
323 void HandleModAlternativeDefaultLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const;
324 void HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, bool apply) const;
325 void HandleAuraOpenStable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
326 void HandleAuraModFakeInebriation(AuraApplication const* aurApp, uint8 mode, bool apply) const;
327 void HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 mode, bool apply) const;
328 void HandleAuraPreventRegeneratePower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
329 void HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, bool apply) const;
330 void HandleSetVignette(AuraApplication const* aurApp, uint8 mode, bool apply) const;
331 void HandlePreventResurrection(AuraApplication const* aurApp, uint8 mode, bool apply) const;
332 void HandleMastery(AuraApplication const* aurApp, uint8 mode, bool apply) const;
333 void HandleAuraForceWeather(AuraApplication const* aurApp, uint8 mode, bool apply) const;
334 void HandleEnableAltPower(AuraApplication const* aurApp, uint8 mode, bool apply) const;
335 void HandleModGravity(AuraApplication const* aurApp, uint8 mode, bool apply) const;
336 void HandleModSpellCategoryCooldown(AuraApplication const* aurApp, uint8 mode, bool apply) const;
337 void HandleModRecoveryRate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
338 void HandleModRecoveryRateBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
339 void HandleModChargeRecoveryRate(AuraApplication const* aurApp, uint8 mode, bool apply) const;
340 void HandleShowConfirmationPrompt(AuraApplication const* aurApp, uint8 mode, bool apply) const;
341 void HandleOverridePetSpecs(AuraApplication const* aurApp, uint8 mode, bool apply) const;
342 void HandleAllowUsingGameobjectsWhileMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
343 void HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool apply) const;
344 void HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mode, bool apply) const;
345 void HandleLinkedSummon(AuraApplication const* aurApp, uint8 mode, bool apply) const;
346 void HandleSetFFAPvP(AuraApplication const* aurApp, uint8 mode, bool apply) const;
347 void HandleModOverrideZonePVPType(AuraApplication const* aurApp, uint8 mode, bool apply) const;
348 void HandleBattlegroundPlayerPosition(AuraApplication const* aurApp, uint8 mode, bool apply) const;
349 void HandleTriggerSpellOnPowerAmount(AuraApplication const* aurApp, uint8 mode, bool apply) const;
350 void HandleTriggerSpellOnPowerPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const;
351 void HandleTriggerSpellOnExpire(AuraApplication const* aurApp, uint8 mode, bool apply) const;
352 void HandleStoreTeleportReturnPoint(AuraApplication const* aurApp, uint8 mode, bool apply) const;
353 void HandleMountRestrictions(AuraApplication const* aurApp, uint8 mode, bool apply) const;
354 void HandleCosmeticMounted(AuraApplication const* aurApp, uint8 mode, bool apply) const;
355 void HandleModRequiredMountCapabilityFlags(AuraApplication const* aurApp, uint8 mode, bool apply) const;
356 void HandleSuppressItemPassiveEffectBySpellLabel(AuraApplication const* aurApp, uint8 mode, bool apply) const;
357
358 // aura effect periodic tick handlers
359 void HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) const;
360 void HandlePeriodicTriggerSpellWithValueAuraTick(Unit* target, Unit* caster) const;
361 void HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const;
362 void HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) const;
363 void HandlePeriodicHealthFunnelAuraTick(Unit* target, Unit* caster) const;
364 void HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const;
365 void HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) const;
366 void HandleObsModPowerAuraTick(Unit* target, Unit* caster) const;
367 void HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) const;
368 void HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const;
369
370 float CalcPeriodicCritChance(Unit const* caster) const;
371
372 // aura effect proc handlers
373 void HandleBreakableCCAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
374 void HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
375 void HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
376 void HandleProcTriggerDamageAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
377
378 // pvp talents
379 void HandleAuraPvpTalents(AuraApplication const* auraApp, uint8 mode, bool apply) const;
380
381 void HandleAuraActAsControlZone(AuraApplication const* aurApp, uint8 mode, bool apply) const;
382};
383
384namespace Trinity
385{
386 // Binary predicate for sorting the priority of absorption aura effects
388 {
389 public:
390 bool operator()(AuraEffect const* aurEffA, AuraEffect const* aurEffB) const
391 {
392 return aurEffA->GetMiscValueB() < aurEffB->GetMiscValueB();
393 }
394 };
395}
396#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
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)
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
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:647