TrinityCore
Loading...
Searching...
No Matches
SpellMgr.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 _SPELLMGR_H
19#define _SPELLMGR_H
20
21// For static or at-server-startup loaded spell data
22
23#include "Define.h"
24#include "Duration.h"
25#include "IteratorPair.h"
26#include "SharedDefines.h"
27#include "Util.h"
28
29#include <map>
30#include <set>
31#include <vector>
32#include <unordered_map>
33#include <unordered_set>
34
35class SpellInfo;
36class Player;
37class ProcEventInfo;
38class WorldObject;
40
41// only used in code
50
51//SpellFamilyFlags
53{
54 // SPELLFAMILYFLAG = SpellFamilyFlags[0]
55 // SPELLFAMILYFLAG1 = SpellFamilyFlags[1]
56 // SPELLFAMILYFLAG2 = SpellFamilyFlags[2]
57
58 // Rogue
60 SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT = 0x00000860, // Vanish, Evasion, Sprint
61 SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP = 0x00000240, // Cold Blood, Shadowstep
62 SPELLFAMILYFLAG_ROGUE_KICK = 0x00000010, // Kick
63 SPELLFAMILYFLAG1_ROGUE_DISMANTLE = 0x00100000, // Dismantle
64 SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY = 0x40000000, // Blade Flurry
65 SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY = 0x00000800, // Blade Flurry
66
67 // Warrior
72
73 // Warlock
75
76 // Hunter
78
79 // Druid
81
82 // Paladin
84
85 // Shaman
91
92 // Deathknight
95
97 SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS = 0x04000000 // Seems to be linked to most totems and some totem effects
98};
99
100#define SPELL_LINKED_MAX_SPELLS 200000
101
103{
104 SPELL_LINK_CAST = 0, // +: cast; -: remove
105 SPELL_LINK_HIT = 1 * 200000,
106 SPELL_LINK_AURA = 2 * 200000, // +: aura; -: immune
109
110// Spell proc event related declarations (accessed using SpellMgr functions)
112{
113 PROC_FLAG_NONE = 0x00000000,
114
115 PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - not sure about this flag
116 PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward)
117
118 PROC_FLAG_DONE_MELEE_AUTO_ATTACK = 0x00000004, // 02 Done melee auto attack
119 PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK = 0x00000008, // 03 Taken melee auto attack
120
121 PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS = 0x00000010, // 04 Done attack by Spell that has dmg class melee
122 PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS = 0x00000020, // 05 Taken attack by Spell that has dmg class melee
123
124 PROC_FLAG_DONE_RANGED_AUTO_ATTACK = 0x00000040, // 06 Done ranged auto attack
125 PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK = 0x00000080, // 07 Taken ranged auto attack
126
127 PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS = 0x00000100, // 08 Done attack by Spell that has dmg class ranged
128 PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS = 0x00000200, // 09 Taken attack by Spell that has dmg class ranged
129
130 PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS = 0x00000400, // 10 Done positive spell that has dmg class none
131 PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS = 0x00000800, // 11 Taken positive spell that has dmg class none
132
133 PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG = 0x00001000, // 12 Done negative spell that has dmg class none
134 PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG = 0x00002000, // 13 Taken negative spell that has dmg class none
135
136 PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS = 0x00004000, // 14 Done positive spell that has dmg class magic
137 PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS = 0x00008000, // 15 Taken positive spell that has dmg class magic
138
139 PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG = 0x00010000, // 16 Done negative spell that has dmg class magic
140 PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG = 0x00020000, // 17 Taken negative spell that has dmg class magic
141
142 PROC_FLAG_DONE_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing)
143 PROC_FLAG_TAKEN_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing)
144
145 PROC_FLAG_TAKEN_DAMAGE = 0x00100000, // 20 Taken any damage
146 PROC_FLAG_DONE_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation (possibly needs name change to ON_GAMEOBJECT_CAST or USE)
147
148 PROC_FLAG_DONE_MAINHAND_ATTACK = 0x00400000, // 22 Done main-hand melee attacks (spell and autoattack)
149 PROC_FLAG_DONE_OFFHAND_ATTACK = 0x00800000, // 23 Done off-hand melee attacks (spell and autoattack)
150
151 PROC_FLAG_DEATH = 0x01000000, // 24 Died in any way
152
153 // flag masks
156
160
163
173
180
186
189
190#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_DONE_MELEE_AUTO_ATTACK | \
191 PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK | \
192 PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | \
193 PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS | \
194 PROC_FLAG_DONE_RANGED_AUTO_ATTACK | \
195 PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK | \
196 PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS | \
197 PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS)
198
207
216
218{
219 PROC_HIT_NONE = 0x0000000, // no value - PROC_HIT_NORMAL | PROC_HIT_CRITICAL for TAKEN proc type, PROC_HIT_NORMAL | PROC_HIT_CRITICAL | PROC_HIT_ABSORB for DONE
220 PROC_HIT_NORMAL = 0x0000001, // non-critical hits
221 PROC_HIT_CRITICAL = 0x0000002,
222 PROC_HIT_MISS = 0x0000004,
224 PROC_HIT_DODGE = 0x0000010,
225 PROC_HIT_PARRY = 0x0000020,
226 PROC_HIT_BLOCK = 0x0000040, // partial or full block
227 PROC_HIT_EVADE = 0x0000080,
228 PROC_HIT_IMMUNE = 0x0000100,
229 PROC_HIT_DEFLECT = 0x0000200,
230 PROC_HIT_ABSORB = 0x0000400, // partial or full absorb
231 PROC_HIT_REFLECT = 0x0000800,
234 PROC_HIT_MASK_ALL = 0x0002FFF
236
238{
239 PROC_ATTR_REQ_EXP_OR_HONOR = 0x0000001, // requires proc target to give exp or honor for aura proc
240 PROC_ATTR_TRIGGERED_CAN_PROC = 0x0000002, // aura can proc even with triggered spells
241 PROC_ATTR_REQ_MANA_COST = 0x0000004, // requires triggering spell to have a mana cost for aura proc
242 PROC_ATTR_REQ_SPELLMOD = 0x0000008, // requires triggering spell to be affected by proccing aura to drop charges
243 PROC_ATTR_REDUCE_PROC_60 = 0x0000080, // aura should have a reduced chance to proc if level of proc Actor > 60
244 PROC_ATTR_CANT_PROC_FROM_ITEM_CAST = 0x0000100, // do not allow aura proc if proc is caused by a spell casted by item
245};
246
248{
249 uint32 SchoolMask; // if nonzero - bitmask for matching proc condition based on spell's school
250 uint32 SpellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyName
251 flag96 SpellFamilyMask; // if nonzero - bitmask for matching proc condition based on candidate spell's SpellFamilyFlags
252 uint32 ProcFlags; // if nonzero - owerwrite procFlags field for given Spell.dbc entry, bitmask for matching proc condition, see enum ProcFlags
253 uint32 SpellTypeMask; // if nonzero - bitmask for matching proc condition based on candidate spell's damage/heal effects, see enum ProcFlagsSpellType
254 uint32 SpellPhaseMask; // if nonzero - bitmask for matching phase of a spellcast on which proc occurs, see enum ProcFlagsSpellPhase
255 uint32 HitMask; // if nonzero - bitmask for matching proc condition based on hit result, see enum ProcFlagsHit
256 uint32 AttributesMask; // bitmask, see ProcAttributes
258 float ProcsPerMinute; // if nonzero - chance to proc is equal to value * aura caster's weapon speed / 60
259 float Chance; // if nonzero - owerwrite procChance field for given Spell.dbc entry, defines chance of proc to occur, not used if ProcsPerMinute set
260 Milliseconds Cooldown; // if nonzero - cooldown in secs for aura proc, applied to aura
261 uint32 Charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite
262};
263
264typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap;
265
267{
268 ENCHANT_PROC_ATTR_WHITE_HIT = 0x0000001, // enchant shall only proc off white hits (not abilities)
269 ENCHANT_PROC_ATTR_LIMIT_60 = 0x0000002 // enchant effects shall be reduced past lvl 60
271
273{
274 float Chance; // if nonzero - overwrite SpellItemEnchantment value
275 float ProcsPerMinute; // if nonzero - chance to proc is equal to value * aura caster's weapon speed / 60
276 uint32 HitMask; // if nonzero - bitmask for matching proc condition based on hit result, see enum ProcFlagsHit
277 uint32 AttributesMask; // bitmask, see EnchantProcAttributes
278};
279
280typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap;
281
289
290typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap;
291
301
302namespace std
303{
304 template<>
305 struct hash<SpellGroup>
306 {
307 size_t operator()(SpellGroup const& group) const
308 {
309 return hash<uint32>()(uint32(group));
310 }
311 };
312}
313
314#define SPELL_GROUP_DB_RANGE_MIN 1000
315
316// spell_id, group_id
317typedef std::unordered_multimap<uint32, SpellGroup> SpellSpellGroupMap;
318typedef std::pair<SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator> SpellSpellGroupMapBounds;
319
320// group_id, spell_id
321typedef std::unordered_multimap<SpellGroup, int32> SpellGroupSpellMap;
322typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator> SpellGroupSpellMapBounds;
323
333
334typedef std::unordered_map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap;
335
336typedef std::unordered_map<SpellGroup, std::unordered_set<uint32 /*auraName*/>> SameEffectStackMap;
337
339{
340 int32 flatMod; // flat threat-value for this Spell - default: 0
341 float pctMod; // threat-multiplier for this Spell - default: 1.0f
342 float apPctMod; // Pct of AP that is added as Threat - default: 0.0f
343};
344
345typedef std::unordered_map<uint32, SpellThreatEntry> SpellThreatMap;
346
347// coordinates for spells (accessed using SpellMgr functions)
356
357typedef std::map<std::pair<uint32 /*spell_id*/, SpellEffIndex /*effIndex*/>, SpellTargetPosition> SpellTargetPositionMap;
358
359// Enum with EffectRadiusIndex and their actual radius
361{
398 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
417 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
420
421// Spell pet auras
423{
424 private:
425 typedef std::unordered_map<uint32, uint32> PetAuraMap;
426
427 public:
428 PetAura() : removeOnChangePet(false), damage(0) { }
429
430 PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
431 removeOnChangePet(_removeOnChangePet), damage(_damage)
432 {
433 auras[petEntry] = aura;
434 }
435
436 uint32 GetAura(uint32 petEntry) const
437 {
438 PetAuraMap::const_iterator itr = auras.find(petEntry);
439 if (itr != auras.end())
440 return itr->second;
441 PetAuraMap::const_iterator itr2 = auras.find(0);
442 if (itr2 != auras.end())
443 return itr2->second;
444 return 0;
445 }
446
447 void AddAura(uint32 petEntry, uint32 aura)
448 {
449 auras[petEntry] = aura;
450 }
451
453 {
454 return removeOnChangePet;
455 }
456
458 {
459 return damage;
460 }
461
462 private:
466};
467typedef std::map<uint32, PetAura> SpellPetAuraMap;
468
470{
472 uint32 areaId; // zone/subzone/or 0 is not limited to zone
473 uint32 questStart; // quest start (quest must be active or rewarded for spell apply)
474 uint32 questEnd; // quest end (quest must not be rewarded for spell apply)
475 int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case
476 uint32 raceMask; // can be applied only to races
477 Gender gender; // can be applied only to gender
478 uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell
479 uint32 questEndStatus; // QuestStatus that the quest_end must have in order to keep the spell (if the quest_end's status is different than this, the spell will be dropped)
480 bool autocast; // if true then auto applied at area enter, in other case just allowed to cast
481
482 // helpers
483 bool IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const;
484};
485
486typedef std::multimap<uint32, SpellArea> SpellAreaMap;
487typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap;
488typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap;
489typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap;
490typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds;
491typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds;
492typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds;
493typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds;
494
495// Spell rank chain (accessed using SpellMgr functions)
504
505typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
506
507// spell_id req_spell
508typedef std::multimap<uint32, uint32> SpellRequiredMap;
509typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds;
510
511// req_spell spell_id
512typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap;
513typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds;
514
515// Spell learning properties (accessed using SpellMgr functions)
517{
520 uint16 value; // 0 - max skill value for player level
521 uint16 maxvalue; // 0 - max skill value for player level
522};
523
524typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap;
525
527{
529 bool active; // show in spellbook or not
531};
532
533typedef std::multimap<uint32, SpellLearnSpellNode> SpellLearnSpellMap;
534typedef std::pair<SpellLearnSpellMap::const_iterator, SpellLearnSpellMap::const_iterator> SpellLearnSpellMapBounds;
535
536typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
537typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds;
538
539typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
540typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
541
542typedef std::map<uint32, uint32> SpellDifficultySearcherMap;
543
548
549// < 0 for petspelldata id, > 0 for creature_id
550typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap;
551
552typedef std::vector<bool> EnchantCustomAttribute;
553
554typedef std::vector<SpellInfo*> SpellInfoMap;
555
556typedef std::unordered_map<int32, std::vector<int32>> SpellLinkedMap;
557
559
560inline bool IsProfessionSkill(uint32 skill)
561{
562 return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
563}
564
566{
567 return IsProfessionSkill(skill) || skill == SKILL_RIDING;
568}
569
570bool IsPartOfSkillLine(uint32 skillId, uint32 spellId);
571
573{
574 // Constructors
575 private:
576 SpellMgr();
577 ~SpellMgr();
578
579 // Accessors (const or static functions)
580 public:
581 static SpellMgr* instance();
582
583 // Spell correctness for client using
584 static bool IsSpellValid(SpellInfo const* spellInfo, Player* player = nullptr, bool msg = true);
585
586 // Spell difficulty
587 uint32 GetSpellDifficultyId(uint32 spellId) const;
588 void SetSpellDifficultyId(uint32 spellId, uint32 id);
589 uint32 GetSpellIdForDifficulty(uint32 spellId, WorldObject const* caster) const;
590 SpellInfo const* GetSpellForDifficultyFromSpell(SpellInfo const* spell, WorldObject const* caster) const;
591
592 // Spell Ranks table
593 SpellChainNode const* GetSpellChainNode(uint32 spell_id) const;
594 uint32 GetFirstSpellInChain(uint32 spell_id) const;
595 uint32 GetLastSpellInChain(uint32 spell_id) const;
596 uint32 GetNextSpellInChain(uint32 spell_id) const;
597 uint32 GetPrevSpellInChain(uint32 spell_id) const;
598 uint8 GetSpellRank(uint32 spell_id) const;
599 // not strict check returns provided spell if rank not avalible
600 uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const;
601
602 // Spell Required table
603 Trinity::IteratorPair<SpellRequiredMap::const_iterator> GetSpellsRequiredForSpellBounds(uint32 spell_id) const;
604 SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const;
605 bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const;
606
607 // Spell learning
608 SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const;
609 SpellLearnSpellMapBounds GetSpellLearnSpellMapBounds(uint32 spell_id) const;
610 bool IsSpellLearnSpell(uint32 spell_id) const;
611 bool IsSpellLearnToSpell(uint32 spell_id1, uint32 spell_id2) const;
612
613 // Spell target coordinates
614 SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const;
615
616 // Spell Groups table
617 SpellSpellGroupMapBounds GetSpellSpellGroupMapBounds(uint32 spell_id) const;
618 bool IsSpellMemberOfSpellGroup(uint32 spellid, SpellGroup groupid) const;
619
620 SpellGroupSpellMapBounds GetSpellGroupSpellMapBounds(SpellGroup group_id) const;
621 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells) const;
622 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells, std::set<SpellGroup>& usedGroups) const;
623
624 // Spell Group Stack Rules table
625 bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, uint32 auraType, int32 amount, std::map<SpellGroup, int32>& groups) const;
626 SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
627 SpellGroupStackRule GetSpellGroupStackRule(SpellGroup groupid) const;
628
629 // Spell proc table
630 SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
631 static bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo);
632
633 // Spell bonus data table
634 SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const;
635
636 // Spell threat table
637 SpellThreatEntry const* GetSpellThreatEntry(uint32 spellID) const;
638
639 SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const;
640
641 PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const;
642
643 SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const;
644 bool IsArenaAllowedEnchancment(uint32 ench_id) const;
645
646 std::vector<int32> const* GetSpellLinked(int32 spell_id) const;
647
648 PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const;
649 PetDefaultSpellsEntry const* GetPetDefaultSpellsEntry(int32 id) const;
650
651 // Spell area
652 SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const;
653 SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const;
654 SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const;
655 SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const;
656 SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const;
657
658 // SpellInfo object management
659 SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
660 // Use this only with 100% valid spellIds
661 SpellInfo const* AssertSpellInfo(uint32 spellId) const
662 {
663 ASSERT(spellId < GetSpellInfoStoreSize());
664 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
665 ASSERT(spellInfo);
666 return spellInfo;
667 }
668 uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); }
669
670 private:
671 SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
672
673 // Modifiers
674 public:
675
676 // Loading data at server startup
677 void UnloadSpellInfoChains();
678 void LoadSpellTalentRanks();
679 void LoadSpellRanks();
680 void LoadSpellRequired();
681 void LoadSpellLearnSkills();
682 void LoadSpellLearnSpells();
683 void LoadSpellTargetPositions();
684 void LoadSpellGroups();
685 void LoadSpellGroupStackRules();
686 void LoadSpellProcs();
687 void LoadSpellBonuses();
688 void LoadSpellThreats();
689 void LoadSkillLineAbilityMap();
690 void LoadSpellPetAuras();
691 void LoadEnchantCustomAttr();
692 void LoadSpellEnchantProcData();
693 void LoadSpellLinked();
694 void LoadPetLevelupSpellMap();
695 void LoadPetDefaultSpells();
696 void LoadSpellAreas();
697 void LoadSpellInfoStore();
698 void UnloadSpellInfoStore();
699 void UnloadSpellInfoImplicitTargetConditionLists();
700 void LoadSpellInfoCustomAttributes();
701 void LoadSpellInfoCorrections();
702 void LoadSpellInfoSpellSpecificAndAuraState();
703 void LoadSpellInfoDiminishing();
704 void LoadSpellInfoImmunities();
705
706 private:
732 PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry
734
735 friend class UnitTestDataLoader;
736};
737
738#define sSpellMgr SpellMgr::instance()
739
740#endif
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
#define ASSERT
Definition Errors.h:68
SpellEffIndex
Gender
#define MAX_CREATURE_SPELL_DATA_SLOT
@ SKILL_COOKING
@ SKILL_FISHING
@ SKILL_RIDING
@ SKILL_FIRST_AID
std::multimap< uint32, SpellLearnSpellNode > SpellLearnSpellMap
Definition SpellMgr.h:533
bool IsPrimaryProfessionSkill(uint32 skill)
Definition SpellMgr.cpp:35
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
Definition SpellMgr.cpp:47
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
Definition SpellMgr.h:280
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
Definition SpellMgr.h:488
std::unordered_map< SpellGroup, std::unordered_set< uint32 > > SameEffectStackMap
Definition SpellMgr.h:336
bool IsProfessionOrRidingSkill(uint32 skill)
Definition SpellMgr.h:565
std::unordered_multimap< SpellGroup, int32 > SpellGroupSpellMap
Definition SpellMgr.h:321
ProcFlagsHit
Definition SpellMgr.h:218
@ PROC_HIT_BLOCK
Definition SpellMgr.h:226
@ PROC_HIT_FULL_RESIST
Definition SpellMgr.h:223
@ PROC_HIT_FULL_BLOCK
Definition SpellMgr.h:233
@ PROC_HIT_MISS
Definition SpellMgr.h:222
@ PROC_HIT_INTERRUPT
Definition SpellMgr.h:232
@ PROC_HIT_NONE
Definition SpellMgr.h:219
@ PROC_HIT_DEFLECT
Definition SpellMgr.h:229
@ PROC_HIT_EVADE
Definition SpellMgr.h:227
@ PROC_HIT_DODGE
Definition SpellMgr.h:224
@ PROC_HIT_IMMUNE
Definition SpellMgr.h:228
@ PROC_HIT_ABSORB
Definition SpellMgr.h:230
@ PROC_HIT_PARRY
Definition SpellMgr.h:225
@ PROC_HIT_MASK_ALL
Definition SpellMgr.h:234
@ PROC_HIT_CRITICAL
Definition SpellMgr.h:221
@ PROC_HIT_NORMAL
Definition SpellMgr.h:220
@ PROC_HIT_REFLECT
Definition SpellMgr.h:231
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
Definition SpellMgr.h:513
SpellFamilyFlag
Definition SpellMgr.h:53
@ SPELLFAMILYFLAG_SHAMAN_MANA_SPRING
Definition SpellMgr.h:88
@ SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT
Definition SpellMgr.h:60
@ SPELLFAMILYFLAG_WARLOCK_LIFETAP
Definition SpellMgr.h:74
@ SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW
Definition SpellMgr.h:71
@ SPELLFAMILYFLAG_ROGUE_KICK
Definition SpellMgr.h:62
@ SPELLFAMILYFLAG1_ROGUE_DISMANTLE
Definition SpellMgr.h:63
@ SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP
Definition SpellMgr.h:61
@ SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY
Definition SpellMgr.h:64
@ SPELLFAMILYFLAG_WARRIOR_EXECUTE
Definition SpellMgr.h:70
@ SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH
Definition SpellMgr.h:89
@ SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS
Definition SpellMgr.h:97
@ SPELLFAMILYFLAG_DK_DEATH_COIL
Definition SpellMgr.h:94
@ SPELLFAMILYFLAG_ROGUE_VANISH
Definition SpellMgr.h:59
@ SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK
Definition SpellMgr.h:86
@ SPELLFAMILYFLAG_WARRIOR_SLAM
Definition SpellMgr.h:69
@ SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY
Definition SpellMgr.h:65
@ SPELLFAMILYFLAG2_DRUID_STARFALL
Definition SpellMgr.h:80
@ SPELLFAMILYFLAG1_HUNTER_EXPLOSIVE_SHOT
Definition SpellMgr.h:77
@ SPELLFAMILYFLAG1_PALADIN_DIVINESTORM
Definition SpellMgr.h:83
@ SPELLFAMILYFLAG_WARRIOR_CHARGE
Definition SpellMgr.h:68
@ SPELLFAMILYFLAG_DK_DEATH_STRIKE
Definition SpellMgr.h:93
@ SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM
Definition SpellMgr.h:87
@ SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA
Definition SpellMgr.h:90
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
Definition SpellMgr.h:357
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
Definition SpellMgr.h:318
bool IsProfessionSkill(uint32 skill)
Definition SpellMgr.h:560
std::multimap< uint32, SpellArea > SpellAreaMap
Definition SpellMgr.h:486
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition SpellMgr.h:490
std::map< uint32, uint32 > SpellDifficultySearcherMap
Definition SpellMgr.h:542
SpellGroup
Definition SpellMgr.h:293
@ SPELL_GROUP_ELIXIR_SHATTRATH
Definition SpellMgr.h:298
@ SPELL_GROUP_NONE
Definition SpellMgr.h:294
@ SPELL_GROUP_CORE_RANGE_MAX
Definition SpellMgr.h:299
@ SPELL_GROUP_ELIXIR_BATTLE
Definition SpellMgr.h:295
@ SPELL_GROUP_ELIXIR_GUARDIAN
Definition SpellMgr.h:296
@ SPELL_GROUP_ELIXIR_UNSTABLE
Definition SpellMgr.h:297
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
Definition SpellMgr.h:493
std::unordered_map< uint32, SpellChainNode > SpellChainMap
Definition SpellMgr.h:505
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
Definition SpellMgr.h:264
ProcAttributes
Definition SpellMgr.h:238
@ PROC_ATTR_REQ_MANA_COST
Definition SpellMgr.h:241
@ PROC_ATTR_CANT_PROC_FROM_ITEM_CAST
Definition SpellMgr.h:244
@ PROC_ATTR_REDUCE_PROC_60
Definition SpellMgr.h:243
@ PROC_ATTR_REQ_EXP_OR_HONOR
Definition SpellMgr.h:239
@ PROC_ATTR_TRIGGERED_CAN_PROC
Definition SpellMgr.h:240
@ PROC_ATTR_REQ_SPELLMOD
Definition SpellMgr.h:242
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
Definition SpellMgr.h:489
std::unordered_map< uint32, SpellThreatEntry > SpellThreatMap
Definition SpellMgr.h:345
SpellGroupStackRule
Definition SpellMgr.h:325
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER
Definition SpellMgr.h:328
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE
Definition SpellMgr.h:327
@ SPELL_GROUP_STACK_RULE_DEFAULT
Definition SpellMgr.h:326
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT
Definition SpellMgr.h:329
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST
Definition SpellMgr.h:330
@ SPELL_GROUP_STACK_RULE_MAX
Definition SpellMgr.h:331
std::unordered_multimap< uint32, SpellGroup > SpellSpellGroupMap
Definition SpellMgr.h:317
std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
Definition SpellMgr.h:509
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
Definition SpellMgr.h:536
std::map< uint32, PetAura > SpellPetAuraMap
Definition SpellMgr.h:467
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
Definition SpellMgr.h:487
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
Definition SpellMgr.h:550
std::vector< bool > EnchantCustomAttribute
Definition SpellMgr.h:552
SpellLinkedType
Definition SpellMgr.h:103
@ SPELL_LINK_HIT
Definition SpellMgr.h:105
@ SPELL_LINK_CAST
Definition SpellMgr.h:104
@ SPELL_LINK_AURA
Definition SpellMgr.h:106
@ SPELL_LINK_REMOVE
Definition SpellMgr.h:107
SpellCategories
Definition SpellMgr.h:43
@ SPELLCATEGORY_DRINK
Definition SpellMgr.h:48
@ SPELLCATEGORY_DEVOUR_MAGIC
Definition SpellMgr.h:45
@ SPELLCATEGORY_HEALTH_MANA_POTIONS
Definition SpellMgr.h:44
@ SPELLCATEGORY_FOOD
Definition SpellMgr.h:47
@ SPELLCATEGORY_JUDGEMENT
Definition SpellMgr.h:46
std::unordered_map< int32, std::vector< int32 > > SpellLinkedMap
Definition SpellMgr.h:556
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
Definition SpellMgr.h:322
std::unordered_map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
Definition SpellMgr.h:524
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
Definition SpellMgr.h:492
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition SpellMgr.h:537
ProcFlagsSpellType
Definition SpellMgr.h:200
@ PROC_SPELL_TYPE_NONE
Definition SpellMgr.h:201
@ PROC_SPELL_TYPE_HEAL
Definition SpellMgr.h:203
@ PROC_SPELL_TYPE_MASK_ALL
Definition SpellMgr.h:205
@ PROC_SPELL_TYPE_DAMAGE
Definition SpellMgr.h:202
@ PROC_SPELL_TYPE_NO_DMG_HEAL
Definition SpellMgr.h:204
std::unordered_map< uint32, SpellBonusEntry > SpellBonusMap
Definition SpellMgr.h:290
std::map< uint32, PetLevelupSpellSet > PetLevelupSpellMap
Definition SpellMgr.h:540
EffectRadiusIndex
Definition SpellMgr.h:361
@ EFFECT_RADIUS_14_YARDS
Definition SpellMgr.h:414
@ EFFECT_RADIUS_500_YARDS
Definition SpellMgr.h:385
@ EFFECT_RADIUS_13_YARDS
Definition SpellMgr.h:372
@ EFFECT_RADIUS_7_YARDS
Definition SpellMgr.h:391
@ EFFECT_RADIUS_100_YARDS
Definition SpellMgr.h:367
@ EFFECT_RADIUS_45_YARDS_2
Definition SpellMgr.h:411
@ EFFECT_RADIUS_80_YARDS
Definition SpellMgr.h:386
@ EFFECT_RADIUS_20_YARDS
Definition SpellMgr.h:364
@ EFFECT_RADIUS_60_YARDS_2
Definition SpellMgr.h:405
@ EFFECT_RADIUS_8_YARDS
Definition SpellMgr.h:369
@ EFFECT_RADIUS_34_YARDS
Definition SpellMgr.h:393
@ EFFECT_RADIUS_45_YARDS
Definition SpellMgr.h:366
@ EFFECT_RADIUS_2_YARDS
Definition SpellMgr.h:362
@ EFFECT_RADIUS_50000_YARDS_2
Definition SpellMgr.h:408
@ EFFECT_RADIUS_44_YARDS
Definition SpellMgr.h:413
@ EFFECT_RADIUS_5_YARDS_3
Definition SpellMgr.h:406
@ EFFECT_RADIUS_15_YARDS
Definition SpellMgr.h:373
@ EFFECT_RADIUS_23_YARDS
Definition SpellMgr.h:416
@ EFFECT_RADIUS_55_YARDS
Definition SpellMgr.h:389
@ EFFECT_RADIUS_65_YARDS
Definition SpellMgr.h:379
@ EFFECT_RADIUS_32_YARDS
Definition SpellMgr.h:412
@ EFFECT_RADIUS_30_YARDS
Definition SpellMgr.h:365
@ EFFECT_RADIUS_1_YARD
Definition SpellMgr.h:371
@ EFFECT_RADIUS_9_YARDS
Definition SpellMgr.h:394
@ EFFECT_RADIUS_16_YARDS
Definition SpellMgr.h:397
@ EFFECT_RADIUS_60_YARDS
Definition SpellMgr.h:402
@ EFFECT_RADIUS_90_YARDS
Definition SpellMgr.h:403
@ EFFECT_RADIUS_130_YARDS
Definition SpellMgr.h:409
@ EFFECT_RADIUS_4_YARDS
Definition SpellMgr.h:381
@ EFFECT_RADIUS_25_YARDS
Definition SpellMgr.h:375
@ EFFECT_RADIUS_10_YARDS_2
Definition SpellMgr.h:399
@ EFFECT_RADIUS_15_YARDS_2
Definition SpellMgr.h:401
@ EFFECT_RADIUS_5_YARDS
Definition SpellMgr.h:363
@ EFFECT_RADIUS_40_YARDS
Definition SpellMgr.h:378
@ EFFECT_RADIUS_70_YARDS
Definition SpellMgr.h:380
@ EFFECT_RADIUS_5_YARDS_2
Definition SpellMgr.h:400
@ EFFECT_RADIUS_3_YARDS
Definition SpellMgr.h:370
@ EFFECT_RADIUS_38_YARDS
Definition SpellMgr.h:410
@ EFFECT_RADIUS_21_YARDS
Definition SpellMgr.h:392
@ EFFECT_RADIUS_50_YARDS
Definition SpellMgr.h:382
@ EFFECT_RADIUS_50000_YARDS
Definition SpellMgr.h:383
@ EFFECT_RADIUS_60_YARDS_3
Definition SpellMgr.h:407
@ EFFECT_RADIUS_18_YARDS
Definition SpellMgr.h:374
@ EFFECT_RADIUS_200_YARDS
Definition SpellMgr.h:377
@ EFFECT_RADIUS_12_YARDS
Definition SpellMgr.h:387
@ EFFECT_RADIUS_10_YARDS
Definition SpellMgr.h:368
@ EFFECT_RADIUS_0_YARDS
Definition SpellMgr.h:390
@ EFFECT_RADIUS_3_5_YARDS
Definition SpellMgr.h:417
@ EFFECT_RADIUS_150_YARDS
Definition SpellMgr.h:395
@ EFFECT_RADIUS_80_YARDS_2
Definition SpellMgr.h:418
@ EFFECT_RADIUS_35_YARDS
Definition SpellMgr.h:376
@ EFFECT_RADIUS_47_YARDS
Definition SpellMgr.h:415
@ EFFECT_RADIUS_6_YARDS
Definition SpellMgr.h:384
@ EFFECT_RADIUS_11_YARDS
Definition SpellMgr.h:396
@ EFFECT_RADIUS_15_YARDS_3
Definition SpellMgr.h:404
@ EFFECT_RADIUS_0_5_YARDS
Definition SpellMgr.h:398
@ EFFECT_RADIUS_99_YARDS
Definition SpellMgr.h:388
ProcFlagsSpellPhase
Definition SpellMgr.h:209
@ PROC_SPELL_PHASE_FINISH
Definition SpellMgr.h:213
@ PROC_SPELL_PHASE_NONE
Definition SpellMgr.h:210
@ PROC_SPELL_PHASE_CAST
Definition SpellMgr.h:211
@ PROC_SPELL_PHASE_HIT
Definition SpellMgr.h:212
@ PROC_SPELL_PHASE_MASK_ALL
Definition SpellMgr.h:214
ProcFlags
Definition SpellMgr.h:112
@ MELEE_PROC_FLAG_MASK
Definition SpellMgr.h:157
@ PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:127
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS
Definition SpellMgr.h:136
@ AUTO_ATTACK_PROC_FLAG_MASK
Definition SpellMgr.h:154
@ PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
Definition SpellMgr.h:125
@ PROC_FLAG_DONE_PERIODIC
Definition SpellMgr.h:142
@ TAKEN_HIT_PROC_FLAG_MASK
Definition SpellMgr.h:181
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
Definition SpellMgr.h:118
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS
Definition SpellMgr.h:130
@ PROC_FLAG_KILLED
Definition SpellMgr.h:115
@ PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:121
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:140
@ PROC_FLAG_DEATH
Definition SpellMgr.h:151
@ PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:128
@ PROC_FLAG_TAKEN_PERIODIC
Definition SpellMgr.h:143
@ REQ_SPELL_PHASE_PROC_FLAG_MASK
Definition SpellMgr.h:187
@ PROC_FLAG_KILL
Definition SpellMgr.h:116
@ PROC_FLAG_DONE_MAINHAND_ATTACK
Definition SpellMgr.h:148
@ PROC_FLAG_DONE_RANGED_AUTO_ATTACK
Definition SpellMgr.h:124
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG
Definition SpellMgr.h:134
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG
Definition SpellMgr.h:133
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS
Definition SpellMgr.h:137
@ PROC_FLAG_TAKEN_DAMAGE
Definition SpellMgr.h:145
@ PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
Definition SpellMgr.h:119
@ RANGED_PROC_FLAG_MASK
Definition SpellMgr.h:161
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS
Definition SpellMgr.h:131
@ PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:122
@ SPELL_PROC_FLAG_MASK
Definition SpellMgr.h:164
@ DONE_HIT_PROC_FLAG_MASK
Definition SpellMgr.h:174
@ PROC_FLAG_DONE_TRAP_ACTIVATION
Definition SpellMgr.h:146
@ PROC_FLAG_DONE_OFFHAND_ATTACK
Definition SpellMgr.h:149
@ PROC_FLAG_NONE
Definition SpellMgr.h:113
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:139
std::multimap< uint32, uint32 > SpellsRequiringSpellMap
Definition SpellMgr.h:512
EnchantProcAttributes
Definition SpellMgr.h:267
@ ENCHANT_PROC_ATTR_LIMIT_60
Definition SpellMgr.h:269
@ ENCHANT_PROC_ATTR_WHITE_HIT
Definition SpellMgr.h:268
std::multimap< uint32, uint32 > SpellRequiredMap
Definition SpellMgr.h:508
std::vector< SpellInfo * > SpellInfoMap
Definition SpellMgr.h:554
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
Definition SpellMgr.h:491
std::unordered_map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
Definition SpellMgr.h:334
std::pair< SpellLearnSpellMap::const_iterator, SpellLearnSpellMap::const_iterator > SpellLearnSpellMapBounds
Definition SpellMgr.h:534
std::multimap< uint32, uint32 > PetLevelupSpellSet
Definition SpellMgr.h:539
int32 damage
Definition SpellMgr.h:465
int32 GetDamage() const
Definition SpellMgr.h:457
std::unordered_map< uint32, uint32 > PetAuraMap
Definition SpellMgr.h:425
uint32 GetAura(uint32 petEntry) const
Definition SpellMgr.h:436
PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage)
Definition SpellMgr.h:430
PetAura()
Definition SpellMgr.h:428
bool removeOnChangePet
Definition SpellMgr.h:464
PetAuraMap auras
Definition SpellMgr.h:463
bool IsRemovedOnChangePet() const
Definition SpellMgr.h:452
void AddAura(uint32 petEntry, uint32 aura)
Definition SpellMgr.h:447
SpellRequiredMap mSpellReq
Definition SpellMgr.h:710
SpellLinkedMap mSpellLinkedMap
Definition SpellMgr.h:722
SpellInfo const * AssertSpellInfo(uint32 spellId) const
Definition SpellMgr.h:661
SkillLineAbilityMap mSkillLineAbilityMap
Definition SpellMgr.h:730
EnchantCustomAttribute mEnchantCustomAttr
Definition SpellMgr.h:724
SpellAreaForAuraMap mSpellAreaForAuraMap
Definition SpellMgr.h:728
SpellChainMap mSpellChains
Definition SpellMgr.h:708
SpellPetAuraMap mSpellPetAuraMap
Definition SpellMgr.h:721
SpellLearnSkillMap mSpellLearnSkills
Definition SpellMgr.h:711
SpellAreaForQuestMap mSpellAreaForQuestEndMap
Definition SpellMgr.h:727
PetDefaultSpellsMap mPetDefaultSpellsMap
Definition SpellMgr.h:732
SpellInfo const * GetSpellInfo(uint32 spellId) const
Definition SpellMgr.h:659
SpellDifficultySearcherMap mSpellDifficultySearcherMap
Definition SpellMgr.h:707
SpellGroupStackMap mSpellGroupStack
Definition SpellMgr.h:716
SpellEnchantProcEventMap mSpellEnchantProcEventMap
Definition SpellMgr.h:723
PetLevelupSpellMap mPetLevelupSpellMap
Definition SpellMgr.h:731
SpellProcMap mSpellProcMap
Definition SpellMgr.h:718
SpellsRequiringSpellMap mSpellsReqSpell
Definition SpellMgr.h:709
SpellTargetPositionMap mSpellTargetPositions
Definition SpellMgr.h:713
SpellGroupSpellMap mSpellGroupSpell
Definition SpellMgr.h:715
SameEffectStackMap mSpellSameEffectStack
Definition SpellMgr.h:717
SpellAreaForAreaMap mSpellAreaForAreaMap
Definition SpellMgr.h:729
SpellAreaMap mSpellAreaMap
Definition SpellMgr.h:725
uint32 GetSpellInfoStoreSize() const
Definition SpellMgr.h:668
SpellBonusMap mSpellBonusMap
Definition SpellMgr.h:719
SpellLearnSpellMap mSpellLearnSpells
Definition SpellMgr.h:712
SpellSpellGroupMap mSpellSpellGroup
Definition SpellMgr.h:714
SpellThreatMap mSpellThreatMap
Definition SpellMgr.h:720
SpellAreaForQuestMap mSpellAreaForQuestMap
Definition SpellMgr.h:726
SpellInfoMap mSpellInfoMap
Definition SpellMgr.h:733
SpellInfo * _GetSpellInfo(uint32 spellId)
Definition SpellMgr.h:671
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition Util.h:412
STL namespace.
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
Definition SpellMgr.h:546
uint32 questEnd
Definition SpellMgr.h:474
bool autocast
Definition SpellMgr.h:480
uint32 raceMask
Definition SpellMgr.h:476
uint32 questStartStatus
Definition SpellMgr.h:478
uint32 spellId
Definition SpellMgr.h:471
uint32 questEndStatus
Definition SpellMgr.h:479
int32 auraSpell
Definition SpellMgr.h:475
Gender gender
Definition SpellMgr.h:477
uint32 areaId
Definition SpellMgr.h:472
uint32 questStart
Definition SpellMgr.h:473
float ap_dot_bonus
Definition SpellMgr.h:287
float direct_damage
Definition SpellMgr.h:284
SpellInfo const * last
Definition SpellMgr.h:501
SpellInfo const * next
Definition SpellMgr.h:499
SpellInfo const * first
Definition SpellMgr.h:500
SpellInfo const * prev
Definition SpellMgr.h:498
uint32 SpellFamilyName
Definition SpellMgr.h:250
float ProcsPerMinute
Definition SpellMgr.h:258
Milliseconds Cooldown
Definition SpellMgr.h:260
uint32 Charges
Definition SpellMgr.h:261
uint32 AttributesMask
Definition SpellMgr.h:256
flag96 SpellFamilyMask
Definition SpellMgr.h:251
uint32 HitMask
Definition SpellMgr.h:255
uint32 SpellTypeMask
Definition SpellMgr.h:253
uint32 ProcFlags
Definition SpellMgr.h:252
uint32 SpellPhaseMask
Definition SpellMgr.h:254
uint32 SchoolMask
Definition SpellMgr.h:249
uint32 DisableEffectsMask
Definition SpellMgr.h:257
size_t operator()(SpellGroup const &group) const
Definition SpellMgr.h:307