TrinityCore
Loading...
Searching...
No Matches
SpellDefines.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_SPELLDEFINES_H
19#define TRINITY_SPELLDEFINES_H
20
21#include "Define.h"
22#include "FlagsArray.h"
23#include "EnumFlag.h"
24#include "ObjectGuid.h"
25#include "Optional.h"
26#include "Position.h"
27#include "ScriptActionResult.h"
28#include <any>
29#include <vector>
30
31class AuraEffect;
32class Corpse;
33class GameObject;
34class Item;
35class Player;
36class Spell;
37class Unit;
38class WorldObject;
39enum Difficulty : int16;
40enum ProcFlags : uint32;
41enum ProcFlags2 : int32;
43
44namespace UF
45{
46 struct SpellCastVisual;
47}
48
49namespace WorldPackets
50{
51 namespace Spells
52 {
53 struct SpellCastRequest;
54 struct SpellCastVisual;
55 struct SpellTargetData;
56 }
57}
58
60{
61 None = 0,
62 Movement = 0x00000001,
63 DamagePushbackPlayerOnly = 0x00000002,
64 Stun = 0x00000004, // useless, even spells without it get interrupted
65 Combat = 0x00000008, // used for both interrupting spell when entering combat and to reset auto attack timer
66 DamageCancelsPlayerOnly = 0x00000010,
67 MeleeCombat = 0x00000020, // NYI
68 Immunity = 0x00000040, // NYI
69 DamageAbsorb = 0x00000080,
70 ZeroDamageCancels = 0x00000100,
71 DamagePushback = 0x00000200,
72 DamageCancels = 0x00000400
73};
74
76
78{
79 None = 0,
80 HostileActionReceived = 0x00000001,
81 Damage = 0x00000002,
82 Action = 0x00000004,
83 Moving = 0x00000008,
84 Turning = 0x00000010,
85 Anim = 0x00000020,
86 Dismount = 0x00000040,
87 UnderWater = 0x00000080, // TODO: disallow casting when swimming (SPELL_FAILED_ONLY_ABOVEWATER)
88 AboveWater = 0x00000100, // TODO: disallow casting when not swimming (SPELL_FAILED_ONLY_UNDERWATER)
89 Sheathing = 0x00000200,
90 Interacting = 0x00000400, // TODO: more than gossip, replace all the feign death removals by aura type
91 Looting = 0x00000800,
92 Attacking = 0x00001000,
93 ItemUse = 0x00002000,
94 DamageChannelDuration = 0x00004000,
95 Shapeshifting = 0x00008000,
96 ActionDelayed = 0x00010000,
97 Mount = 0x00020000,
98 Standing = 0x00040000,
99 LeaveWorld = 0x00080000,
100 StealthOrInvis = 0x00100000,
101 InvulnerabilityBuff = 0x00200000,
102 EnterWorld = 0x00400000,
103 PvPActive = 0x00800000,
104 NonPeriodicDamage = 0x01000000,
105 LandingOrFlight = 0x02000000,
106 Release = 0x04000000,
107 DamageCancelsScript = 0x08000000, // NYI dedicated aura script hook
108 EnteringCombat = 0x10000000,
109 Login = 0x20000000,
110 Summon = 0x40000000,
111 LeavingCombat = 0x80000000,
112
115};
116
118
120{
121 None = 0,
122 Falling = 0x00000001, // Implemented in Unit::UpdatePosition
123 Swimming = 0x00000002,
124 NotMoving = 0x00000004, // NYI
125 Ground = 0x00000008,
126 Transform = 0x00000010,
127 Jump = 0x00000020,
128 ChangeSpec = 0x00000040,
129 AbandonVehicle = 0x00000080, // Implemented in Unit::_ExitVehicle
130 StartOfRaidEncounterAndStartOfMythicPlus = 0x00000100, // Implemented in Unit::AtStartOfEncounter
131 EndOfRaidEncounterAndStartOfMythicPlus = 0x00000200, // Implemented in Unit::AtEndOfEncounter
132 Disconnect = 0x00000400, // NYI
133 EnteringInstance = 0x00000800, // Implemented in Map::AddPlayerToMap
134 DuelEnd = 0x00001000, // Implemented in Player::DuelComplete
135 LeaveArenaOrBattleground = 0x00002000, // Implemented in Battleground::RemovePlayerAtLeave
136 ChangeTalent = 0x00004000,
137 ChangeGlyph = 0x00008000,
138 SeamlessTransfer = 0x00010000, // NYI
139 WarModeLeave = 0x00020000, // Implemented in Player::UpdateWarModeAuras
140 TouchingGround = 0x00040000, // NYI
141 ChromieTime = 0x00080000, // NYI
142 SplineFlightOrFreeFlight = 0x00100000, // NYI
143 ProcOrPeriodicAttacking = 0x00200000, // NYI
144 ChallengeModeStart = 0x00400000, // Implemented in Unit::AtStartOfEncounter
145 StartOfEncounter = 0x00800000, // Implemented in Unit::AtStartOfEncounter
146 EndOfEncounter = 0x01000000, // Implemented in Unit::AtEndOfEncounter
147 ReleaseEmpower = 0x02000000, // Implemented in Spell::update
148};
149
151
152enum class SpellModOp : uint8
153{
155 Duration = 1,
156 Hate = 2,
157 PointsIndex0 = 3,
158 ProcCharges = 4,
159 Range = 5,
160 Radius = 6,
161 CritChance = 7,
162 Points = 8,
163 ResistPushback = 9,
164 ChangeCastTime = 10,
165 Cooldown = 11,
166 PointsIndex1 = 12,
167 TargetResistance = 13,
168 PowerCost0 = 14, // Used when SpellPowerEntry::PowerIndex == 0
170 HitChance = 16,
171 ChainTargets = 17,
172 ProcChance = 18,
173 Period = 19,
174 ChainAmplitude = 20,
175 StartCooldown = 21,
177 PointsIndex2 = 23,
178 BonusCoefficient = 24,
179 TriggerDamage = 25, // NYI
180 ProcFrequency = 26,
181 Amplitude = 27,
182 DispelResistance = 28,
183 CrowdDamage = 29, // NYI
184 PowerCostOnMiss = 30,
185 Doses = 31,
186 PointsIndex3 = 32,
187 PointsIndex4 = 33,
188 PowerCost1 = 34, // Used when SpellPowerEntry::PowerIndex == 1
190 AreaTriggerMaxSummons = 36, // NYI
191 MaxAuraStacks = 37,
192 ProcCooldown = 38,
193 PowerCost2 = 39, // Used when SpellPowerEntry::PowerIndex == 2
194 MaxTargets = 40
195};
196
197#define MAX_SPELLMOD 41
198
200{
204
205 Points = 4,
206 PointsIndex0 = 5,
207 PointsIndex1 = 6,
208 PointsIndex2 = 7,
209 PointsIndex3 = 8,
210 PointsIndex4 = 9,
211};
212
223
265
270
272{
273 TRIGGERED_NONE = 0x00000000,
274 TRIGGERED_IGNORE_GCD = 0x00000001,
285 // reuse = 0x00000800,
288 // reuse = 0x00004000,
289 // reuse = 0x00008000,
293 TRIGGERED_FULL_MASK = 0x0007FFFF,
298
299 // debug flags (used with .cast triggered commands)
304 TRIGGERED_FULL_DEBUG_MASK = 0xFFFFFFFF
306
308
310{
311 TARGET_FLAG_NONE = 0x00000000,
312 TARGET_FLAG_UNUSED_1 = 0x00000001, // not used
313 TARGET_FLAG_UNIT = 0x00000002, // pguid
314 TARGET_FLAG_UNIT_RAID = 0x00000004, // not sent, used to validate target (if raid member)
315 TARGET_FLAG_UNIT_PARTY = 0x00000008, // not sent, used to validate target (if party member)
316 TARGET_FLAG_ITEM = 0x00000010, // pguid
317 TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // pguid, 3 float
318 TARGET_FLAG_DEST_LOCATION = 0x00000040, // pguid, 3 float
319 TARGET_FLAG_UNIT_ENEMY = 0x00000080, // not sent, used to validate target (if enemy)
320 TARGET_FLAG_UNIT_ALLY = 0x00000100, // not sent, used to validate target (if ally)
321 TARGET_FLAG_CORPSE_ENEMY = 0x00000200, // pguid
322 TARGET_FLAG_UNIT_DEAD = 0x00000400, // not sent, used to validate target (if dead creature)
323 TARGET_FLAG_GAMEOBJECT = 0x00000800, // pguid, used with TARGET_GAMEOBJECT_TARGET
324 TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid
325 TARGET_FLAG_STRING = 0x00002000, // string
326 TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM_TARGET
327 TARGET_FLAG_CORPSE_ALLY = 0x00008000, // pguid
328 TARGET_FLAG_UNIT_MINIPET = 0x00010000, // pguid, used to validate target (if non combat pet)
329 TARGET_FLAG_GLYPH_SLOT = 0x00020000, // used in glyph spells
330 TARGET_FLAG_DEST_TARGET = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell)
331 TARGET_FLAG_EXTRA_TARGETS = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far
332 TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger)
338
345
347{
348 float Min = 0.0f;
349 float Max = 0.0f;
350
351 constexpr SpellRange operator*(float mul) const { return { Min * mul, Max * mul }; }
352 bool operator==(SpellRange const&) const = default;
353};
354
356{
358 SpellDestination(float x, float y, float z, float orientation = 0.0f, uint32 mapId = MAPID_INVALID) : _position(mapId, x, y, z, orientation) { }
359 SpellDestination(Position const& pos) : _position(MAPID_INVALID, pos) { }
360 SpellDestination(WorldLocation const& loc) : _position(loc) { }
361 SpellDestination(WorldObject const& wObj);
362
363 void Relocate(Position const& pos);
364 void RelocateOffset(Position const& offset);
365
369};
370
372{
373public:
375 SpellCastTargets(Unit* caster, WorldPackets::Spells::SpellCastRequest const& spellCastRequest);
377
379
380 uint32 GetTargetMask() const { return m_targetMask; }
381 void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
382
383 void SetTargetFlag(SpellCastTargetFlags flag) { m_targetMask |= flag; }
384
385 ObjectGuid GetUnitTargetGUID() const;
386 Unit* GetUnitTarget() const;
387 void SetUnitTarget(Unit* target);
388
389 ObjectGuid GetGOTargetGUID() const;
390 GameObject* GetGOTarget() const;
391 void SetGOTarget(GameObject* target);
392
393 ObjectGuid GetCorpseTargetGUID() const;
394 Corpse* GetCorpseTarget() const;
395
396 WorldObject* GetObjectTarget() const;
397 ObjectGuid GetObjectTargetGUID() const;
398 void RemoveObjectTarget();
399
400 ObjectGuid GetItemTargetGUID() const { return m_itemTargetGUID; }
401 Item* GetItemTarget() const { return m_itemTarget; }
402 uint32 GetItemTargetEntry() const { return m_itemTargetEntry; }
403 void SetItemTarget(Item* item);
404 void SetTradeItemTarget(Player* caster);
405 void UpdateTradeSlotItem();
406
407 SpellDestination const* GetSrc() const;
408 Position const* GetSrcPos() const;
409 void SetSrc(float x, float y, float z);
410 void SetSrc(Position const& pos);
411 void SetSrc(WorldObject const& wObj);
412 void ModSrc(Position const& pos);
413 void RemoveSrc();
414
415 SpellDestination const* GetDst() const;
416 WorldLocation const* GetDstPos() const;
417 void SetDst(float x, float y, float z, float orientation, uint32 mapId = MAPID_INVALID);
418 void SetDst(Position const& pos);
419 void SetDst(WorldObject const& wObj);
420 void SetDst(SpellDestination const& spellDest);
421 void SetDst(SpellCastTargets const& spellTargets);
422 void ModDst(Position const& pos);
423 void ModDst(SpellDestination const& spellDest);
424 void RemoveDst();
425
426 bool HasSrc() const;
427 bool HasDst() const;
428 bool HasTraj() const { return m_speed != 0; }
429
430 float GetPitch() const { return m_pitch; }
431 void SetPitch(float pitch) { m_pitch = pitch; }
432 float GetSpeed() const { return m_speed; }
433 void SetSpeed(float speed) { m_speed = speed; }
434
435 float GetDist2d() const { return m_src._position.GetExactDist2d(&m_dst._position); }
436 float GetSpeedXY() const { return m_speed * std::cos(m_pitch); }
437 float GetSpeedZ() const { return m_speed * std::sin(m_pitch); }
438
439 void Update(WorldObject* caster);
440 std::string GetTargetString() const { return m_strTarget; }
441
442private:
444
445 // objects (can be used at spell creating and after Update at casting)
448
449 // object GUID/etc, can be used always
453
456
457 float m_pitch, m_speed;
458 std::string m_strTarget;
459};
460
462{
464 CastSpellTargetArg(std::nullptr_t) { Targets.emplace(); }
467 {
468 Targets.emplace();
469 Targets->SetItemTarget(itemTarget);
470 }
472 {
473 Targets.emplace();
474 Targets->SetDst(dest);
475 }
477 {
478 Targets.emplace();
479 Targets->SetDst(dest);
480 }
482 {
483 Targets.emplace(std::move(targets));
484 }
485
486 Optional<SpellCastTargets> Targets; // empty optional used to signal error state
487};
488
490using SpellEffectValue = double;
491
519
521{
523 CastSpellExtraArgs(bool triggered) { TriggerFlags = triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE; }
524 CastSpellExtraArgs(TriggerCastFlags trigger) { TriggerFlags = trigger; }
525 CastSpellExtraArgs(Item* item) { TriggerFlags = TRIGGERED_FULL_MASK; CastItem = item; }
526 CastSpellExtraArgs(Spell const* triggeringSpell) { TriggerFlags = TRIGGERED_FULL_MASK; SetTriggeringSpell(triggeringSpell); }
527 CastSpellExtraArgs(AuraEffect const* eff) { TriggerFlags = TRIGGERED_FULL_MASK; SetTriggeringAura(eff); }
528 CastSpellExtraArgs(Difficulty castDifficulty) { CastDifficulty = castDifficulty; }
529 CastSpellExtraArgs(SpellValueMod mod, int32 val) { SpellValueOverrides.emplace_back(mod, val); }
530 CastSpellExtraArgs(SpellValueModFloat mod, SpellEffectValue val) { SpellValueOverrides.emplace_back(mod, val); }
531 CastSpellExtraArgs(CastSpellExtraArgsInit&& init) : CastSpellExtraArgsInit(std::move(init)) { SetTriggeringSpell(TriggeringSpell); }
532
535
538
540
541 CastSpellExtraArgs& SetTriggerFlags(TriggerCastFlags flag) { TriggerFlags = flag; return *this; }
542 CastSpellExtraArgs& SetCastItem(Item* item) { CastItem = item; return *this; }
543 CastSpellExtraArgs& SetTriggeringSpell(Spell const* triggeringSpell);
544 CastSpellExtraArgs& SetTriggeringAura(AuraEffect const* triggeringAura) { TriggeringAura = triggeringAura; return *this; }
545 CastSpellExtraArgs& SetOriginalCaster(ObjectGuid const& guid) { OriginalCaster = guid; return *this; }
546 CastSpellExtraArgs& SetCastDifficulty(Difficulty castDifficulty) { CastDifficulty = castDifficulty; return *this; }
547 CastSpellExtraArgs& SetOriginalCastId(ObjectGuid const& castId) { OriginalCastId = castId; return *this; }
548 CastSpellExtraArgs& AddSpellMod(SpellValueMod mod, int32 val) { SpellValueOverrides.emplace_back(mod, val); return *this; }
549 CastSpellExtraArgs& AddSpellMod(SpellValueModFloat mod, SpellEffectValue val) { SpellValueOverrides.emplace_back(mod, val); return *this; }
550 CastSpellExtraArgs& AddSpellBP0(SpellEffectValue val) { return AddSpellMod(SPELLVALUE_BASE_POINT0, val); } // because i don't want to type SPELLVALUE_BASE_POINT0 300 times
551 CastSpellExtraArgs& SetCustomArg(std::any customArg) { CustomArg = std::move(customArg); return *this; }
552 CastSpellExtraArgs& SetScriptResult(Scripting::v2::ActionResultSetter<SpellCastResult>&& scriptResult) { ScriptResult = std::move(scriptResult); return *this; }
553 CastSpellExtraArgs& SetScriptWaitsForSpellHit(bool scriptWaitsForSpellHit) { ScriptWaitsForSpellHit = scriptWaitsForSpellHit; return *this; }
554};
555
564
565class ProcFlagsInit : public FlagsArray<int32, 2>
566{
568
569public:
570 constexpr ProcFlagsInit(ProcFlags procFlags = {}, ProcFlags2 procFlags2 = {})
571 {
572 _storage[0] = int32(procFlags);
573 _storage[1] = int32(procFlags2);
574 }
575
576 constexpr ProcFlagsInit& operator|=(ProcFlags procFlags)
577 {
578 _storage[0] |= int32(procFlags);
579 return *this;
580 }
581
582 constexpr ProcFlagsInit& operator|=(ProcFlags2 procFlags2)
583 {
584 _storage[1] |= int32(procFlags2);
585 return *this;
586 }
587
588 using Base::operator&;
589
590 constexpr ProcFlags operator&(ProcFlags procFlags) const
591 {
592 return static_cast<ProcFlags>(_storage[0] & procFlags);
593 }
594
595 constexpr ProcFlags2 operator&(ProcFlags2 procFlags2) const
596 {
597 return static_cast<ProcFlags2>(_storage[1] & procFlags2);
598 }
599
600 using Base::operator=;
601
602 constexpr ProcFlagsInit& operator=(Base const& right)
603 {
604 _storage[0] = right[0];
605 _storage[1] = right[1];
606 return *this;
607 }
608};
609
610#endif
Difficulty
Definition DBCEnums.h:932
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int16_t int16
Definition Define.h:151
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
Spells
Definition PlayerAI.cpp:32
#define MAPID_INVALID
Definition Position.h:189
Targets
SpellCastResult
SpellValueMod
@ SPELLVALUE_AURA_STACK
@ SPELLVALUE_INT_END
@ SPELLVALUE_PARENT_SPELL_TARGET_COUNT
@ SPELLVALUE_PARENT_SPELL_TARGET_INDEX
@ SPELLVALUE_MAX_TARGETS
@ SPELLVALUE_DURATION
SpellInterruptFlags
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
SpellAuraInterruptFlags2
SpellModOp
@ PeriodicHealingAndDamage
@ AreaTriggerMaxSummons
@ CritDamageAndHealing
SpellPvpModifier
SpellCastTargetFlags
@ TARGET_FLAG_TRADE_ITEM
@ TARGET_FLAG_GAMEOBJECT
@ TARGET_FLAG_STRING
@ TARGET_FLAG_NONE
@ TARGET_FLAG_UNIT_RAID
@ TARGET_FLAG_UNIT_ENEMY
@ TARGET_FLAG_GLYPH_SLOT
@ TARGET_FLAG_CORPSE_ALLY
@ TARGET_FLAG_ITEM
@ TARGET_FLAG_UNIT_MINIPET
@ TARGET_FLAG_UNIT_PASSENGER
@ TARGET_FLAG_GAMEOBJECT_ITEM
@ TARGET_FLAG_DEST_LOCATION
@ TARGET_FLAG_UNK4000000
@ TARGET_FLAG_UNIT_ALLY
@ TARGET_FLAG_SOURCE_LOCATION
@ TARGET_FLAG_ITEM_MASK
@ TARGET_FLAG_UNK1000000
@ TARGET_FLAG_UNUSED_1
@ TARGET_FLAG_UNK40000000
@ TARGET_FLAG_UNIT
@ TARGET_FLAG_DEST_TARGET
@ TARGET_FLAG_UNK10000000
@ TARGET_FLAG_UNK400000
@ TARGET_FLAG_UNIT_MASK
@ TARGET_FLAG_UNIT_DEAD
@ TARGET_FLAG_CORPSE_ENEMY
@ TARGET_FLAG_CORPSE_MASK
@ TARGET_FLAG_EXTRA_TARGETS
@ TARGET_FLAG_GAMEOBJECT_MASK
@ TARGET_FLAG_UNIT_PARTY
TriggerCastFlags
@ TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT
Will ignore equipped item requirements.
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_DONT_RESET_PERIODIC_TIMER
Will allow periodic aura timers to keep ticking (instead of resetting)
@ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
Will ignore Spell and Category cooldowns.
@ TRIGGERED_CAST_DIRECTLY
In Spell::prepare, will be cast directly without setting containers for executed spell.
@ TRIGGERED_IGNORE_TARGET_CHECK
Will ignore most target checks (mostly DBC target checks)
@ TRIGGERED_IGNORE_CASTER_AURASTATE
Will ignore caster aura states including combat requirements and death state.
@ TRIGGERED_IGNORE_AURA_SCALING
Will ignore aura scaling.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE
Will ignore mounted/on vehicle restrictions.
@ TRIGGERED_IGNORE_SHAPESHIFT
Will ignore shapeshift checks.
@ TRIGGERED_IGNORE_POWER_COST
Will ignore power and reagent cost.
@ TRIGGERED_IGNORE_CAST_ITEM
Will not take away cast item or update related achievement criteria.
@ TRIGGERED_IGNORE_REAGENT_COST
Will ignore reagent cost.
@ TRIGGERED_IGNORE_GCD
Will ignore GCD.
@ TRIGGERED_DISALLOW_PROC_EVENTS
Disallows proc events from triggered spell (default)
@ TRIGGERED_IGNORE_CASTER_AURAS
Will ignore caster aura restrictions or requirements.
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ TRIGGERED_SUPPRESS_CASTER_ANIM
Will not play cast animations on caster.
@ TRIGGERED_NONE
Not triggered.
@ TRIGGERED_IGNORE_CAST_TIME
Will always be instantly cast.
@ TRIGGERED_FULL_DEBUG_MASK
@ TRIGGERED_IS_TRIGGERED_MASK
Will be recognized by Spell::IsTriggered as triggered.
@ TRIGGERED_IGNORE_SET_FACING
Will not adjust facing to target (if any)
SpellValueModFloat
@ SPELLVALUE_BASE_POINT24
@ SPELLVALUE_BASE_POINT5
@ SPELLVALUE_BASE_POINT18
@ SPELLVALUE_BASE_POINT6
@ SPELLVALUE_BASE_POINT31
@ SPELLVALUE_BASE_POINT8
@ SPELLVALUE_BASE_POINT26
@ SPELLVALUE_DURATION_PCT
@ SPELLVALUE_BASE_POINT7
@ SPELLVALUE_BASE_POINT3
@ SPELLVALUE_BASE_POINT30
@ SPELLVALUE_BASE_POINT_END
@ SPELLVALUE_BASE_POINT29
@ SPELLVALUE_BASE_POINT1
@ SPELLVALUE_BASE_POINT19
@ SPELLVALUE_BASE_POINT28
@ SPELLVALUE_BASE_POINT14
@ SPELLVALUE_BASE_POINT21
@ SPELLVALUE_BASE_POINT16
@ SPELLVALUE_BASE_POINT27
@ SPELLVALUE_RADIUS_MOD
@ SPELLVALUE_BASE_POINT20
@ SPELLVALUE_BASE_POINT17
@ SPELLVALUE_BASE_POINT22
@ SPELLVALUE_BASE_POINT11
@ SPELLVALUE_BASE_POINT15
@ SPELLVALUE_BASE_POINT25
@ SPELLVALUE_BASE_POINT4
@ SPELLVALUE_BASE_POINT2
@ SPELLVALUE_BASE_POINT23
@ SPELLVALUE_BASE_POINT13
@ SPELLVALUE_BASE_POINT0
@ SPELLVALUE_BASE_POINT10
@ SPELLVALUE_BASE_POINT9
@ SPELLVALUE_CRIT_CHANCE
@ SPELLVALUE_BASE_POINT12
SpellFacingFlags
@ SPELL_FACING_FLAG_INFRONT
SpellAuraInterruptFlags
ProcFlags
Definition SpellMgr.h:91
ProcFlags2
Definition SpellMgr.h:188
Action
std::array< int32, N > _storage
Definition FlagsArray.h:113
Definition Item.h:179
static ObjectGuid const Empty
Definition ObjectGuid.h:314
constexpr ProcFlags operator&(ProcFlags procFlags) const
constexpr ProcFlagsInit & operator|=(ProcFlags2 procFlags2)
constexpr ProcFlagsInit(ProcFlags procFlags={}, ProcFlags2 procFlags2={})
constexpr ProcFlagsInit & operator|=(ProcFlags procFlags)
constexpr ProcFlagsInit & operator=(Base const &right)
constexpr ProcFlags2 operator&(ProcFlags2 procFlags2) const
void SetPitch(float pitch)
ObjectGuid m_objectTargetGUID
SpellDestination m_dst
bool HasTraj() const
void SetSpeed(float speed)
void SetTargetFlag(SpellCastTargetFlags flag)
void SetTargetMask(uint32 newMask)
std::string m_strTarget
std::string GetTargetString() const
SpellDestination m_src
float GetSpeedZ() const
float GetSpeed() const
ObjectGuid GetItemTargetGUID() const
WorldObject * m_objectTarget
Item * GetItemTarget() const
uint32 GetTargetMask() const
uint32 GetItemTargetEntry() const
ObjectGuid m_itemTargetGUID
float GetSpeedXY() const
float GetDist2d() const
float GetPitch() const
Definition Spell.h:277
Definition Unit.h:635
STL namespace.
union CastSpellExtraArgsInit::SpellValueOverride::@325 Value
SpellValueOverride(SpellValueModFloat mod, SpellEffectValue val)
SpellValueOverride(SpellValueMod mod, int32 val)
std::vector< SpellValueOverride > SpellValueOverrides
TriggerCastFlags TriggerFlags
Scripting::v2::ActionResultSetter< SpellCastResult > ScriptResult
Spell const * TriggeringSpell
Optional< int32 > OriginalCastItemLevel
AuraEffect const * TriggeringAura
CastSpellExtraArgs(CastSpellExtraArgsInit &&init)
CastSpellExtraArgs(Spell const *triggeringSpell)
CastSpellExtraArgs(CastSpellExtraArgs const &other)
CastSpellExtraArgs(AuraEffect const *eff)
CastSpellExtraArgs & SetCastDifficulty(Difficulty castDifficulty)
CastSpellExtraArgs & SetScriptWaitsForSpellHit(bool scriptWaitsForSpellHit)
CastSpellExtraArgs & SetOriginalCastId(ObjectGuid const &castId)
CastSpellExtraArgs(TriggerCastFlags trigger)
CastSpellExtraArgs(Item *item)
CastSpellExtraArgs(CastSpellExtraArgs &&other) noexcept
CastSpellExtraArgs & SetOriginalCaster(ObjectGuid const &guid)
CastSpellExtraArgs & SetTriggerFlags(TriggerCastFlags flag)
CastSpellExtraArgs & SetScriptResult(Scripting::v2::ActionResultSetter< SpellCastResult > &&scriptResult)
CastSpellExtraArgs & AddSpellBP0(SpellEffectValue val)
CastSpellExtraArgs & SetCustomArg(std::any customArg)
CastSpellExtraArgs & AddSpellMod(SpellValueMod mod, int32 val)
CastSpellExtraArgs(SpellValueModFloat mod, SpellEffectValue val)
CastSpellExtraArgs(Difficulty castDifficulty)
CastSpellExtraArgs(bool triggered)
CastSpellExtraArgs & operator=(CastSpellExtraArgs &&other) noexcept
CastSpellExtraArgs & AddSpellMod(SpellValueModFloat mod, SpellEffectValue val)
CastSpellExtraArgs & SetCastItem(Item *item)
CastSpellExtraArgs & operator=(CastSpellExtraArgs const &other)
CastSpellExtraArgs(SpellValueMod mod, int32 val)
CastSpellExtraArgs & SetTriggeringAura(AuraEffect const *triggeringAura)
CastSpellTargetArg(Item *itemTarget)
CastSpellTargetArg(std::nullptr_t)
Optional< SpellCastTargets > Targets
CastSpellTargetArg(Position const &dest)
CastSpellTargetArg(SpellDestination const &dest)
CastSpellTargetArg(SpellCastTargets &&targets)
uint32 SpellXSpellVisualID
SpellDestination(Position const &pos)
SpellDestination(WorldLocation const &loc)
Position _transportOffset
WorldLocation _position
SpellDestination(float x, float y, float z, float orientation=0.0f, uint32 mapId=MAPID_INVALID)
ObjectGuid _transportGUID
constexpr SpellRange operator*(float mul) const
bool operator==(SpellRange const &) const =default