TrinityCore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
SpellMgr.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
3  * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2 of the License, or (at your
8  * option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef _SPELLMGR_H
20 #define _SPELLMGR_H
21 
22 // For static or at-server-startup loaded spell data
23 
24 #include "Define.h"
25 #include "DBCStructure.h"
26 #include "SharedDefines.h"
27 #include "Util.h"
28 
29 #include <map>
30 #include <set>
31 #include <vector>
32 #include <unordered_map>
33 
34 class SpellInfo;
35 class Player;
36 class Unit;
37 class ProcEventInfo;
39 
40 // only used in code
42 {
45  SPELLCATEGORY_JUDGEMENT = 1210, // Judgement (seal trigger)
48 };
49 
50 //SpellFamilyFlags
52 {
53  // SPELLFAMILYFLAG = SpellFamilyFlags[0]
54  // SPELLFAMILYFLAG1 = SpellFamilyFlags[1]
55  // SPELLFAMILYFLAG2 = SpellFamilyFlags[2]
56 
57  // Rogue
59  SPELLFAMILYFLAG0_ROGUE_VAN_SPRINT = 0x00000840, // Vanish, Sprint
60  SPELLFAMILYFLAG1_ROGUE_SHADOWSTEP = 0x00000200, // Shadowstep
61  SPELLFAMILYFLAG0_ROGUE_KICK = 0x00000010, // Kick
62  SPELLFAMILYFLAG1_ROGUE_DISMANTLE_SMOKE_BOMB = 0x80100000, // Dismantle, Smoke Bomb
63 
64  // Warrior
69 
70  // Warlock
72 
73  // Druid
75 
76  // Paladin
78 
79  // Shaman
85 
86  // Deathknight
89 
91  SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS = 0x04000000 // Seems to be linked to most totems and some totem effects
92 };
93 
94 
95 #define SPELL_LINKED_MAX_SPELLS 200000
96 
98 {
99  SPELL_LINK_CAST = 0, // +: cast; -: remove
100  SPELL_LINK_HIT = 1 * 200000,
101  SPELL_LINK_AURA = 2 * 200000, // +: aura; -: immune
103 };
104 
105 
106 // Spell proc event related declarations (accessed using SpellMgr functions)
108 {
109  PROC_FLAG_NONE = 0x00000000,
110 
111  PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - not sure about this flag
112  PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward)
113 
114  PROC_FLAG_DONE_MELEE_AUTO_ATTACK = 0x00000004, // 02 Done melee auto attack
115  PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK = 0x00000008, // 03 Taken melee auto attack
116 
117  PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS = 0x00000010, // 04 Done attack by Spell that has dmg class melee
118  PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS = 0x00000020, // 05 Taken attack by Spell that has dmg class melee
119 
120  PROC_FLAG_DONE_RANGED_AUTO_ATTACK = 0x00000040, // 06 Done ranged auto attack
121  PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK = 0x00000080, // 07 Taken ranged auto attack
122 
123  PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS = 0x00000100, // 08 Done attack by Spell that has dmg class ranged
124  PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS = 0x00000200, // 09 Taken attack by Spell that has dmg class ranged
125 
126  PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS = 0x00000400, // 10 Done positive spell that has dmg class none
127  PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS = 0x00000800, // 11 Taken positive spell that has dmg class none
128 
129  PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG = 0x00001000, // 12 Done negative spell that has dmg class none
130  PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG = 0x00002000, // 13 Taken negative spell that has dmg class none
131 
132  PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS = 0x00004000, // 14 Done positive spell that has dmg class magic
133  PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS = 0x00008000, // 15 Taken positive spell that has dmg class magic
134 
135  PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG = 0x00010000, // 16 Done negative spell that has dmg class magic
136  PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG = 0x00020000, // 17 Taken negative spell that has dmg class magic
137 
138  PROC_FLAG_DONE_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing)
139  PROC_FLAG_TAKEN_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing)
140 
141  PROC_FLAG_TAKEN_DAMAGE = 0x00100000, // 20 Taken any damage
142  PROC_FLAG_DONE_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation (possibly needs name change to ON_GAMEOBJECT_CAST or USE)
143 
144  PROC_FLAG_DONE_MAINHAND_ATTACK = 0x00400000, // 22 Done main-hand melee attacks (spell and autoattack)
145  PROC_FLAG_DONE_OFFHAND_ATTACK = 0x00800000, // 23 Done off-hand melee attacks (spell and autoattack)
146 
147  PROC_FLAG_DEATH = 0x01000000, // 24 Died in any way
148  PROC_FLAG_JUMP = 0x02000000, // 25 Jumped
149 
150  // flag masks
153 
157 
160 
167 
169 
171 
177 
183 
185 };
186 
187 #define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_DONE_MELEE_AUTO_ATTACK | \
188  PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK | \
189  PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | \
190  PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS | \
191  PROC_FLAG_DONE_RANGED_AUTO_ATTACK | \
192  PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK | \
193  PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS | \
194  PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS)
195 
197 {
198  PROC_EX_NONE = 0x0000000, // If none can tigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag)
199  PROC_EX_NORMAL_HIT = 0x0000001, // If set only from normal hit (only damage spells)
200  PROC_EX_CRITICAL_HIT = 0x0000002,
201  PROC_EX_MISS = 0x0000004,
202  PROC_EX_RESIST = 0x0000008,
203  PROC_EX_DODGE = 0x0000010,
204  PROC_EX_PARRY = 0x0000020,
205  PROC_EX_BLOCK = 0x0000040,
206  PROC_EX_EVADE = 0x0000080,
207  PROC_EX_IMMUNE = 0x0000100,
208  PROC_EX_DEFLECT = 0x0000200,
209  PROC_EX_ABSORB = 0x0000400,
210  PROC_EX_REFLECT = 0x0000800,
211  PROC_EX_INTERRUPT = 0x0001000, // Melee hit result can be Interrupt (not used)
212  PROC_EX_FULL_BLOCK = 0x0002000, // block al attack damage
213  PROC_EX_RESERVED2 = 0x0004000,
214  PROC_EX_NOT_ACTIVE_SPELL = 0x0008000, // Spell mustn't do damage/heal to proc
215  PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000, // If set trigger always no matter of hit result
216  PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000, // If set trigger always but only one time (not implemented yet)
217  PROC_EX_ONLY_ACTIVE_SPELL = 0x0040000, // Spell has to do damage/heal to proc
218 
219  // Flags for internal use - do not use these in db!
221  PROC_EX_INTERNAL_DOT = 0x1000000,
222  PROC_EX_INTERNAL_HOT = 0x2000000,
225 };
226 
227 #define AURA_SPELL_PROC_EX_MASK \
228  (PROC_EX_NORMAL_HIT | PROC_EX_CRITICAL_HIT | PROC_EX_MISS | \
229  PROC_EX_RESIST | PROC_EX_DODGE | PROC_EX_PARRY | PROC_EX_BLOCK | \
230  PROC_EX_EVADE | PROC_EX_IMMUNE | PROC_EX_DEFLECT | \
231  PROC_EX_ABSORB | PROC_EX_REFLECT | PROC_EX_INTERRUPT)
232 
234 {
235  PROC_SPELL_TYPE_NONE = 0x0000000,
236  PROC_SPELL_TYPE_DAMAGE = 0x0000001, // damage type of spell
237  PROC_SPELL_TYPE_HEAL = 0x0000002, // heal type of spell
238  PROC_SPELL_TYPE_NO_DMG_HEAL = 0x0000004, // other spells
240 };
241 
243 {
246  PROC_SPELL_PHASE_HIT = 0x0000002,
249 };
250 
252 {
253  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
254  PROC_HIT_NORMAL = 0x0000001, // non-critical hits
255  PROC_HIT_CRITICAL = 0x0000002,
256  PROC_HIT_MISS = 0x0000004,
257  PROC_HIT_FULL_RESIST = 0x0000008,
258  PROC_HIT_DODGE = 0x0000010,
259  PROC_HIT_PARRY = 0x0000020,
260  PROC_HIT_BLOCK = 0x0000040, // partial or full block
261  PROC_HIT_EVADE = 0x0000080,
262  PROC_HIT_IMMUNE = 0x0000100,
263  PROC_HIT_DEFLECT = 0x0000200,
264  PROC_HIT_ABSORB = 0x0000400, // partial or full absorb
265  PROC_HIT_REFLECT = 0x0000800,
266  PROC_HIT_INTERRUPT = 0x0001000, // (not used atm)
267  PROC_HIT_FULL_BLOCK = 0x0002000,
269 };
270 
272 {
274 };
275 
277 {
278  uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
279  uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
280  flag128 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
281  uint32 procFlags; // bitmask for matching proc event
282  uint32 procEx; // proc Extend info (see ProcFlagsEx)
283  float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
284  float customChance; // Owerride chance (in most cases for debug only)
285  uint32 cooldown; // hidden cooldown used for some spell proc events, applied to _triggered_spell_
286 };
287 
288 typedef std::unordered_map<uint32, SpellProcEventEntry> SpellProcEventMap;
289 
291 {
292  uint32 schoolMask; // if nonzero - bitmask for matching proc condition based on spell's school
293  uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyName
294  flag128 spellFamilyMask; // if nonzero - bitmask for matching proc condition based on candidate spell's SpellFamilyFlags
295  uint32 typeMask; // if nonzero - owerwrite procFlags field for given Spell.dbc entry, bitmask for matching proc condition, see enum ProcFlags
296  uint32 spellTypeMask; // if nonzero - bitmask for matching proc condition based on candidate spell's damage/heal effects, see enum ProcFlagsSpellType
297  uint32 spellPhaseMask; // if nonzero - bitmask for matching phase of a spellcast on which proc occurs, see enum ProcFlagsSpellPhase
298  uint32 hitMask; // if nonzero - bitmask for matching proc condition based on hit result, see enum ProcFlagsHit
299  uint32 attributesMask; // bitmask, see ProcAttributes
300  float ratePerMinute; // if nonzero - chance to proc is equal to value * aura caster's weapon speed / 60
301  float chance; // if nonzero - owerwrite procChance field for given Spell.dbc entry, defines chance of proc to occur, not used if perMinuteRate set
302  uint32 cooldown; // if nonzero - cooldown in secs for aura proc, applied to aura
303  uint32 charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite
304 };
305 
306 typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap;
307 
309 {
311  float PPMChance;
313 };
314 
315 typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap;
316 
318 {
325 };
326 
327 #define SPELL_GROUP_DB_RANGE_MIN 1000
328 
329 // spell_id, group_id
330 typedef std::multimap<uint32, SpellGroup > SpellSpellGroupMap;
331 typedef std::pair<SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator> SpellSpellGroupMapBounds;
332 
333 // group_id, spell_id
334 typedef std::multimap<SpellGroup, int32> SpellGroupSpellMap;
335 typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator> SpellGroupSpellMapBounds;
336 
338 {
345 };
346 
347 typedef std::map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap;
348 
350 {
351  int32 flatMod; // flat threat-value for this Spell - default: 0
352  float pctMod; // threat-multiplier for this Spell - default: 1.0f
353  float apPctMod; // Pct of AP that is added as Threat - default: 0.0f
354 };
355 
356 typedef std::map<uint32, SpellThreatEntry> SpellThreatMap;
357 
358 // coordinates for spells (accessed using SpellMgr functions)
360 {
362  float target_X;
363  float target_Y;
364  float target_Z;
366 };
367 
368 typedef std::map<std::pair<uint32 /*spell_id*/, SpellEffIndex /*effIndex*/>, SpellTargetPosition> SpellTargetPositionMap;
369 
370 // Enum with EffectRadiusIndex and their actual radius
372 {
409  EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
428  EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
430 };
431 
432 // Spell pet auras
434 {
435  private:
436  typedef std::unordered_map<uint32, uint32> PetAuraMap;
437 
438  public:
439  PetAura() : removeOnChangePet(false), damage(0) { }
440 
441  PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
442  removeOnChangePet(_removeOnChangePet), damage(_damage)
443  {
444  auras[petEntry] = aura;
445  }
446 
447  uint32 GetAura(uint32 petEntry) const
448  {
449  PetAuraMap::const_iterator itr = auras.find(petEntry);
450  if (itr != auras.end())
451  return itr->second;
452  PetAuraMap::const_iterator itr2 = auras.find(0);
453  if (itr2 != auras.end())
454  return itr2->second;
455  return 0;
456  }
457 
458  void AddAura(uint32 petEntry, uint32 aura)
459  {
460  auras[petEntry] = aura;
461  }
462 
463  bool IsRemovedOnChangePet() const
464  {
465  return removeOnChangePet;
466  }
467 
468  int32 GetDamage() const
469  {
470  return damage;
471  }
472 
473  private:
474  PetAuraMap auras;
477 };
478 typedef std::map<uint32, PetAura> SpellPetAuraMap;
479 
481 {
483  uint32 areaId; // zone/subzone/or 0 is not limited to zone
484  uint32 questStart; // quest start (quest must be active or rewarded for spell apply)
485  uint32 questEnd; // quest end (quest must not be rewarded for spell apply)
486  int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case
487  uint32 raceMask; // can be applied only to races
488  Gender gender; // can be applied only to gender
489  uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell
490  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)
491  bool autocast; // if true then auto applied at area enter, in other case just allowed to cast
492 
493  // helpers
494  bool IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const;
495 };
496 
497 typedef std::multimap<uint32, SpellArea> SpellAreaMap;
498 typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap;
499 typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap;
500 typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap;
501 typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds;
502 typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds;
503 typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds;
504 typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds;
505 
506 // Spell rank chain (accessed using SpellMgr functions)
508 {
509  SpellInfo const* prev;
510  SpellInfo const* next;
511  SpellInfo const* first;
512  SpellInfo const* last;
514 };
515 
516 typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
517 
518 // spell_id req_spell
519 typedef std::multimap<uint32, uint32> SpellRequiredMap;
520 typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds;
521 
522 // req_spell spell_id
523 typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap;
524 typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds;
525 
526 // Spell learning properties (accessed using SpellMgr functions)
528 {
531  uint16 value; // 0 - max skill value for player level
532  uint16 maxvalue; // 0 - max skill value for player level
533 };
534 
535 typedef std::map<uint32, SpellLearnSkillNode> SpellLearnSkillMap;
536 
538 {
541  bool Active; // show in spellbook or not
542  bool AutoLearned; // This marks the spell as automatically learned from another source that - will only be used for unlearning
543 };
544 
545 typedef std::multimap<uint32, SpellLearnSpellNode> SpellLearnSpellMap;
546 typedef std::pair<SpellLearnSpellMap::const_iterator, SpellLearnSpellMap::const_iterator> SpellLearnSpellMapBounds;
547 
548 typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
549 typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds;
550 
551 typedef std::set<uint32> PetFamilySpellsSet;
552 typedef std::map<uint32, PetFamilySpellsSet> PetFamilySpellsStore;
553 
554 typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
555 typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
556 
557 typedef std::map<uint32, uint32> SpellDifficultySearcherMap;
558 
559 #define MAX_CREATURE_SPELL_DATA_SLOT 4
560 
562 {
564 };
565 
566 // < 0 for petspelldata id, > 0 for creature_id
567 typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap;
568 
569 typedef std::vector<uint32> SpellCustomAttribute;
570 typedef std::vector<bool> EnchantCustomAttribute;
571 
572 typedef std::vector<SpellInfo*> SpellInfoMap;
573 
574 typedef std::map<int32, std::vector<int32> > SpellLinkedMap;
575 
576 bool IsPrimaryProfessionSkill(uint32 skill);
577 
578 bool IsWeaponSkill(uint32 skill);
579 
580 inline bool IsProfessionSkill(uint32 skill)
581 {
582  return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
583 }
584 
586 {
587  return IsProfessionSkill(skill) || skill == SKILL_RIDING;
588 }
589 
590 bool IsPartOfSkillLine(uint32 skillId, uint32 spellId);
591 
592 // spell diminishing returns
597 
599 
601 {
602  // Constructors
603  private:
604  SpellMgr();
605  ~SpellMgr();
606 
607  // Accessors (const or static functions)
608  public:
609  static SpellMgr* instance();
610 
611  // Spell correctness for client using
612  static bool IsSpellValid(SpellInfo const* spellInfo, Player* player = NULL, bool msg = true);
613 
614  // Spell Ranks table
615  SpellChainNode const* GetSpellChainNode(uint32 spell_id) const;
616  uint32 GetFirstSpellInChain(uint32 spell_id) const;
617  uint32 GetLastSpellInChain(uint32 spell_id) const;
618  uint32 GetNextSpellInChain(uint32 spell_id) const;
619  uint32 GetPrevSpellInChain(uint32 spell_id) const;
620  uint8 GetSpellRank(uint32 spell_id) const;
621  // not strict check returns provided spell if rank not avalible
622  uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const;
623 
624  // Spell Required table
625  SpellRequiredMapBounds GetSpellsRequiredForSpellBounds(uint32 spell_id) const;
626  SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const;
627  bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const;
628 
629  // Spell learning
630  SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const;
631  SpellLearnSpellMapBounds GetSpellLearnSpellMapBounds(uint32 spell_id) const;
632  bool IsSpellLearnSpell(uint32 spell_id) const;
633  bool IsSpellLearnToSpell(uint32 spell_id1, uint32 spell_id2) const;
634 
635  // Spell target coordinates
636  SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const;
637 
638  // Spell Groups table
639  SpellSpellGroupMapBounds GetSpellSpellGroupMapBounds(uint32 spell_id) const;
640  bool IsSpellMemberOfSpellGroup(uint32 spellid, SpellGroup groupid) const;
641 
642  SpellGroupSpellMapBounds GetSpellGroupSpellMapBounds(SpellGroup group_id) const;
643  void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells) const;
644  void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells, std::set<SpellGroup>& usedGroups) const;
645 
646  // Spell Group Stack Rules table
647  bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, int32 amount, std::map<SpellGroup, int32>& groups) const;
648  SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
649  SpellGroupStackRule GetSpellGroupStackRule(SpellGroup groupid) const;
650 
651  // Spell proc event table
652  SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const;
653  bool IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const;
654 
655  // Spell proc table
656  SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
657  bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
658 
659  // Spell threat table
660  SpellThreatEntry const* GetSpellThreatEntry(uint32 spellID) const;
661 
662  SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const;
663 
664  PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const;
665 
666  SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const;
667  bool IsArenaAllowedEnchancment(uint32 ench_id) const;
668 
669  const std::vector<int32> *GetSpellLinked(int32 spell_id) const;
670 
671  PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const;
672  PetDefaultSpellsEntry const* GetPetDefaultSpellsEntry(int32 id) const;
673 
674  // Spell area
675  SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const;
676  SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const;
677  SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const;
678  SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const;
679  SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const;
680 
681  // SpellInfo object management
682  SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : NULL; }
683  // Use this only with 100% valid spellIds
684  SpellInfo const* AssertSpellInfo(uint32 spellId) const
685  {
686  ASSERT(spellId < GetSpellInfoStoreSize());
687  SpellInfo const* spellInfo = mSpellInfoMap[spellId];
688  ASSERT(spellInfo);
689  return spellInfo;
690  }
691  uint32 GetSpellInfoStoreSize() const { return uint32(mSpellInfoMap.size()); }
692 
693  void LoadPetFamilySpellsStore();
694 
695  private:
696  SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : NULL; }
697 
698  // Modifiers
699  public:
700 
701  // Loading data at server startup
702  void UnloadSpellInfoChains();
703  void LoadSpellRanks();
704  void LoadSpellRequired();
705  void LoadSpellLearnSkills();
706  void LoadSpellLearnSpells();
707  void LoadSpellTargetPositions();
708  void LoadSpellGroups();
709  void LoadSpellGroupStackRules();
710  void LoadSpellProcEvents();
711  void LoadSpellProcs();
712  void LoadSpellThreats();
713  void LoadSkillLineAbilityMap();
714  void LoadSpellPetAuras();
715  void LoadEnchantCustomAttr();
716  void LoadSpellEnchantProcData();
717  void LoadSpellLinked();
718  void LoadPetLevelupSpellMap();
719  void LoadPetDefaultSpells();
720  void LoadSpellAreas();
721  void LoadSpellInfoStore();
722  void UnloadSpellInfoStore();
723  void UnloadSpellInfoImplicitTargetConditionLists();
724  void LoadSpellInfoCustomAttributes();
725  void LoadSpellInfoCorrections();
726 
727  private:
752  PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry
754 };
755 
756 #define sSpellMgr SpellMgr::instance()
757 
758 #endif
bool IsProfessionSkill(uint32 skill)
Definition: SpellMgr.h:580
Definition: SpellMgr.h:124
std::map< uint32, PetAura > SpellPetAuraMap
Definition: SpellMgr.h:478
Definition: SpellMgr.h:200
SpellPetAuraMap mSpellPetAuraMap
Definition: SpellMgr.h:741
Definition: SpellMgr.h:244
int32 auraSpell
Definition: SpellMgr.h:486
uint32 spellFamilyName
Definition: SpellMgr.h:293
Definition: SpellMgr.h:83
Definition: SpellMgr.h:406
Definition: SpellMgr.h:66
Definition: SpellMgr.h:393
Definition: SpellMgr.h:59
std::unordered_map< uint32, SpellProcEventEntry > SpellProcEventMap
Definition: SpellMgr.h:288
Definition: SpellMgr.h:254
uint32 questEndStatus
Definition: SpellMgr.h:490
Definition: SpellMgr.h:407
SpellInfo const * first
Definition: SpellMgr.h:511
Definition: SpellMgr.h:403
Definition: SpellMgr.h:112
Definition: SpellMgr.h:198
uint32 Spell
Definition: SpellMgr.h:539
Definition: SpellMgr.h:386
Definition: SpellMgr.h:129
Definition: SpellMgr.h:71
Definition: SpellMgr.h:205
Definition: SpellMgr.h:172
PetAuraMap auras
Definition: SpellMgr.h:474
Definition: SpellMgr.h:397
uint32 spellFamilyName
Definition: SpellMgr.h:279
SpellProcEventMap mSpellProcEventMap
Definition: SpellMgr.h:738
#define MAX_CREATURE_SPELL_DATA_SLOT
Definition: SpellMgr.h:559
Definition: SpellMgr.h:81
Definition: SpellMgr.h:410
std::map< uint32, PetLevelupSpellSet > PetLevelupSpellMap
Definition: SpellMgr.h:555
Definition: SpellMgr.h:391
Definition: SpellMgr.h:263
Definition: SpellMgr.h:424
Definition: SpellMgr.h:204
Definition: SpellMgr.h:247
SpellInfoMap mSpellInfoMap
Definition: SpellMgr.h:753
Definition: SpellMgr.h:168
Definition: SpellInfo.h:326
std::map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
Definition: SpellMgr.h:347
Definition: SpellMgr.h:221
ProcFlagsExLegacy
Definition: SpellMgr.h:196
bool IsWeaponSkill(uint32 skill)
Definition: SpellMgr.cpp:39
float target_X
Definition: SpellMgr.h:362
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
Definition: SpellMgr.cpp:45
Definition: SpellMgr.h:409
uint32 raceMask
Definition: SpellMgr.h:487
float target_Z
Definition: SpellMgr.h:364
Definition: SpellMgr.h:324
flag128 spellFamilyMask
Definition: SpellMgr.h:280
float apPctMod
Definition: SpellMgr.h:353
std::map< uint32, uint32 > SpellDifficultySearcherMap
Definition: SpellMgr.h:557
Definition: SpellMgr.h:374
SpellSpellGroupMap mSpellSpellGroup
Definition: SpellMgr.h:735
Definition: SpellMgr.h:405
uint32 areaId
Definition: SpellMgr.h:483
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
Definition: SpellMgr.h:498
SpellRequiredMap mSpellReq
Definition: SpellMgr.h:731
std::vector< uint32 > SpellCustomAttribute
Definition: SpellMgr.h:569
uint32 GetAura(uint32 petEntry) const
Definition: SpellMgr.h:447
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
Definition: SpellMgr.h:315
SpellInfo const * prev
Definition: SpellMgr.h:509
Definition: SpellMgr.h:151
SpellEnchantProcEventMap mSpellEnchantProcEventMap
Definition: SpellMgr.h:743
uint32 attributesMask
Definition: SpellMgr.h:299
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
Definition: SpellMgr.h:567
TC_GAME_API DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
Definition: SpellMgr.cpp:404
PetLevelupSpellMap mPetLevelupSpellMap
Definition: SpellMgr.h:751
std::map< int32, std::vector< int32 > > SpellLinkedMap
Definition: SpellMgr.h:574
EffectRadiusIndex
Definition: SpellMgr.h:371
Definition: SpellMgr.h:91
Definition: SpellMgr.h:58
DiminishingGroup
Definition: SharedDefines.h:4369
Definition: SpellMgr.h:259
uint32 charges
Definition: SpellMgr.h:303
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
Definition: SpellMgr.h:335
arena_t NULL
Definition: jemalloc_internal.h:624
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
Definition: SpellMgr.h:500
Definition: SpellMgr.h:429
uint32 questStartStatus
Definition: SpellMgr.h:489
uint32 spellPhaseMask
Definition: SpellMgr.h:297
Definition: SpellMgr.h:421
#define false
Definition: CascPort.h:18
Definition: SpellMgr.h:425
TC_GAME_API int32 GetDiminishingReturnsLimitDuration(SpellInfo const *spellproto)
Definition: SpellMgr.cpp:432
Definition: SpellMgr.h:400
float chance
Definition: SpellMgr.h:301
int32 damage
Definition: SpellMgr.h:476
Definition: SpellMgr.h:323
uint32 typeMask
Definition: SpellMgr.h:295
SkillLineAbilityMap mSkillLineAbilityMap
Definition: SpellMgr.h:750
Definition: SpellMgr.h:266
Definition: SpellMgr.h:420
SpellTargetPositionMap mSpellTargetPositions
Definition: SpellMgr.h:734
std::multimap< uint32, SpellArea > SpellAreaMap
Definition: SpellMgr.h:497
Definition: SpellMgr.h:237
Definition: SpellMgr.h:413
Definition: SpellMgr.h:114
Definition: SpellMgr.h:117
uint32 OverridesSpell
Definition: SpellMgr.h:540
Definition: SpellMgr.h:380
Definition: SpellMgr.h:121
Definition: SpellMgr.h:245
uint32 spellId
Definition: SpellMgr.h:482
Definition: SpellMgr.h:383
uint16 value
Definition: SpellMgr.h:531
Definition: SpellMgr.h:394
Definition: SpellMgr.h:211
Definition: SpellMgr.h:418
Definition: SpellMgr.h:238
Definition: SpellMgr.h:246
Definition: SpellMgr.h:109
Definition: SpellMgr.h:260
Definition: SpellMgr.h:419
std::multimap< uint32, uint32 > SpellsRequiringSpellMap
Definition: SpellMgr.h:523
Definition: SpellMgr.h:416
float ppmRate
Definition: SpellMgr.h:283
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition: SpellMgr.h:549
Definition: SpellMgr.h:262
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
Definition: SpellMgr.h:563
Definition: SpellMgr.h:138
uint32 target_mapId
Definition: SpellMgr.h:361
Definition: SpellMgr.h:45
Definition: SpellMgr.h:235
Definition: SpellMgr.h:139
std::multimap< uint32, uint32 > SpellRequiredMap
Definition: SpellMgr.h:519
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
Definition: SpellMgr.h:502
Definition: SpellMgr.h:44
Definition: SpellMgr.h:381
PetAura()
Definition: SpellMgr.h:439
Definition: SpellMgr.h:308
Definition: SpellMgr.h:77
SpellLinkedType
Definition: SpellMgr.h:97
SpellInfo * _GetSpellInfo(uint32 spellId)
Definition: SpellMgr.h:696
Definition: SpellMgr.h:120
bool IsRemovedOnChangePet() const
Definition: SpellMgr.h:463
Definition: SpellMgr.h:222
Definition: SpellMgr.h:385
SpellGroup
Definition: SpellMgr.h:317
SpellDifficultySearcherMap mSpellDifficultySearcherMap
Definition: SpellMgr.h:728
Definition: Unit.h:984
Definition: SpellMgr.h:379
std::map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
Definition: SpellMgr.h:535
Definition: SpellMgr.h:426
Definition: SpellMgr.h:600
Definition: SpellMgr.h:276
Definition: SpellMgr.h:84
bool IsPrimaryProfessionSkill(uint32 skill)
Definition: SpellMgr.cpp:33
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
Definition: SpellMgr.h:331
Definition: SpellMgr.h:265
Definition: SpellMgr.h:404
Definition: SpellMgr.h:214
Definition: SpellMgr.h:126
Definition: SpellMgr.h:236
Definition: SpellMgr.h:433
Definition: SpellMgr.h:60
SpellAreaMap mSpellAreaMap
Definition: SpellMgr.h:745
Definition: SpellMgr.h:527
std::multimap< SpellGroup, int32 > SpellGroupSpellMap
Definition: SpellMgr.h:334
std::unordered_map< uint32, SpellChainNode > SpellChainMap
Definition: SpellMgr.h:516
Definition: SpellMgr.h:61
Definition: SpellMgr.h:349
ProcFlagsHit
Definition: SpellMgr.h:251
std::unordered_map< uint32, uint32 > PetAuraMap
Definition: SpellMgr.h:436
Definition: SpellMgr.h:184
Definition: SpellMgr.h:290
Gender
Definition: SharedDefines.h:90
Definition: SpellMgr.h:401
Definition: SpellMgr.h:141
Definition: SpellMgr.h:209
Definition: SpellMgr.h:537
Definition: SpellMgr.h:202
Definition: SpellMgr.h:161
SpellAreaForQuestMap mSpellAreaForQuestEndMap
Definition: SpellMgr.h:747
uint32 GetSpellInfoStoreSize() const
Definition: SpellMgr.h:691
Definition: SpellMgr.h:100
Definition: SpellMgr.h:220
Definition: SpellMgr.h:267
uint32 customChance
Definition: SpellMgr.h:310
Definition: SpellMgr.h:427
uint32 hitMask
Definition: SpellMgr.h:298
Definition: SharedDefines.h:4010
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition: SpellMgr.h:501
Definition: SpellMgr.h:142
Definition: SpellMgr.h:144
Definition: SpellMgr.h:215
void AddAura(uint32 petEntry, uint32 aura)
Definition: SpellMgr.h:458
Definition: SpellMgr.h:212
Definition: Util.h:362
Definition: SpellMgr.h:207
Definition: SpellMgr.h:261
Definition: SpellMgr.h:257
SpellEffIndex
Definition: SharedDefines.h:26
Definition: SpellMgr.h:115
Definition: SharedDefines.h:3976
SpellCategories
Definition: SpellMgr.h:41
int32_t int32
Definition: Define.h:146
Definition: SpellMgr.h:148
Definition: SpellMgr.h:320
Definition: SpellMgr.h:388
Definition: SpellMgr.h:213
uint32_t uint32
Definition: Define.h:150
SpellFamilyFlag
Definition: SpellMgr.h:51
SpellAreaForQuestMap mSpellAreaForQuestMap
Definition: SpellMgr.h:746
SpellLinkedMap mSpellLinkedMap
Definition: SpellMgr.h:742
uint16_t uint16
Definition: Define.h:151
Gender gender
Definition: SpellMgr.h:488
Definition: SharedDefines.h:3937
PetDefaultSpellsMap mPetDefaultSpellsMap
Definition: SpellMgr.h:752
Definition: SpellMgr.h:378
Definition: SpellMgr.h:412
PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage)
Definition: SpellMgr.h:441
Definition: SpellMgr.h:373
DiminishingReturnsType
Definition: SharedDefines.h:4361
Definition: SpellMgr.h:47
Definition: SpellMgr.h:340
bool AutoLearned
Definition: SpellMgr.h:542
Definition: SpellMgr.h:203
Definition: SpellMgr.h:111
uint32 procEx
Definition: SpellMgr.h:312
Definition: SpellMgr.h:223
Definition: SpellMgr.h:480
SpellLearnSpellMap mSpellLearnSpells
Definition: SpellMgr.h:733
SpellLearnSkillMap mSpellLearnSkills
Definition: SpellMgr.h:732
Definition: SpellMgr.h:375
DiminishingLevels
Definition: SharedDefines.h:4874
std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
Definition: SpellMgr.h:520
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
Definition: SpellMgr.h:524
Definition: SpellMgr.h:253
Definition: SpellMgr.h:210
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
Definition: SpellMgr.h:548
Definition: SpellMgr.h:392
SpellGroupStackRule
Definition: SpellMgr.h:337
Definition: SpellMgr.h:256
SpellGroupStackMap mSpellGroupStack
Definition: SpellMgr.h:737
bool IsProfessionOrRidingSkill(uint32 skill)
Definition: SpellMgr.h:585
TC_GAME_API PetFamilySpellsStore sPetFamilySpellsStore
Definition: SpellMgr.cpp:31
Definition: SpellMgr.h:258
Definition: SpellMgr.h:273
Definition: SpellMgr.h:208
Definition: SpellMgr.h:199
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
Definition: SpellMgr.h:368
std::multimap< uint32, uint32 > PetLevelupSpellSet
Definition: SpellMgr.h:554
Definition: SpellMgr.h:239
SpellProcMap mSpellProcMap
Definition: SpellMgr.h:739
SpellGroupSpellMap mSpellGroupSpell
Definition: SpellMgr.h:736
std::map< uint32, SpellThreatEntry > SpellThreatMap
Definition: SpellMgr.h:356
Definition: SpellMgr.h:268
Definition: SpellMgr.h:396
Definition: SpellMgr.h:170
Definition: SpellMgr.h:74
Definition: SpellMgr.h:382
std::map< uint32, PetFamilySpellsSet > PetFamilySpellsStore
Definition: SpellMgr.h:552
Definition: SpellMgr.h:87
uint16 step
Definition: SpellMgr.h:530
uint32 procEx
Definition: SpellMgr.h:282
Definition: SpellMgr.h:43
Definition: SpellMgr.h:99
TC_GAME_API DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
Definition: SpellMgr.cpp:419
uint32 procFlags
Definition: SpellMgr.h:281
Definition: SpellMgr.h:344
Definition: SpellMgr.h:88
float target_Orientation
Definition: SpellMgr.h:365
SpellInfo const * GetSpellInfo(uint32 spellId) const
Definition: SpellMgr.h:682
Definition: SpellMgr.h:264
float ratePerMinute
Definition: SpellMgr.h:300
SpellThreatMap mSpellThreatMap
Definition: SpellMgr.h:740
SpellsRequiringSpellMap mSpellsReqSpell
Definition: SpellMgr.h:730
ProcAttributes
Definition: SpellMgr.h:271
SpellInfo const * next
Definition: SpellMgr.h:510
Definition: SpellMgr.h:339
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
Definition: SpellMgr.h:503
uint16 maxvalue
Definition: SpellMgr.h:532
Definition: SpellMgr.h:422
float customChance
Definition: SpellMgr.h:284
TC_GAME_API DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const *spellproto)
Definition: SpellMgr.cpp:55
std::set< uint32 > PetFamilySpellsSet
Definition: SpellMgr.h:551
uint32 schoolMask
Definition: SpellMgr.h:292
SpellAreaForAreaMap mSpellAreaForAreaMap
Definition: SpellMgr.h:749
Definition: SpellMgr.h:390
Definition: DBCStructure.h:965
std::multimap< uint32, SpellGroup > SpellSpellGroupMap
Definition: SpellMgr.h:330
Definition: SpellMgr.h:123
ProcFlagsSpellType
Definition: SpellMgr.h:233
SpellInfo const * last
Definition: SpellMgr.h:512
Definition: SpellMgr.h:82
#define TC_GAME_API
Definition: Define.h:134
Definition: SpellMgr.h:217
Definition: SpellMgr.h:224
Definition: SpellMgr.h:147
Definition: SpellMgr.h:387
uint32 questStart
Definition: SpellMgr.h:484
Definition: SpellMgr.h:321
Definition: SpellMgr.h:377
Definition: SpellMgr.h:417
uint8_t uint8
Definition: Define.h:152
int32 GetDamage() const
Definition: SpellMgr.h:468
Definition: SpellMgr.h:359
SpellChainMap mSpellChains
Definition: SpellMgr.h:729
SpellAreaForAuraMap mSpellAreaForAuraMap
Definition: SpellMgr.h:748
#define ASSERT
Definition: Errors.h:55
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
Definition: SpellMgr.h:504
float pctMod
Definition: SpellMgr.h:352
Definition: SpellMgr.h:428
Definition: SpellMgr.h:216
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
Definition: SpellMgr.h:499
uint32 spellTypeMask
Definition: SpellMgr.h:296
Definition: SpellMgr.h:399
Definition: SpellMgr.h:255
Definition: SpellMgr.h:118
Definition: SpellMgr.h:395
ProcFlagsSpellPhase
Definition: SpellMgr.h:242
ProcFlags
Definition: SpellMgr.h:107
uint32_t uint32
Definition: g3dmath.h:168
Definition: SpellMgr.h:46
Definition: SharedDefines.h:3911
Definition: SpellMgr.h:389
float target_Y
Definition: SpellMgr.h:363
Definition: SpellMgr.h:398
Definition: SpellMgr.h:201
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
Definition: SpellMgr.h:306
float PPMChance
Definition: SpellMgr.h:311
uint32 schoolMask
Definition: SpellMgr.h:278
uint32 cooldown
Definition: SpellMgr.h:302
bool Active
Definition: SpellMgr.h:541
Definition: SpellMgr.h:423
Definition: SpellMgr.h:178
Definition: Unit.h:1305
Definition: SpellMgr.h:415
bool autocast
Definition: SpellMgr.h:491
Definition: SpellMgr.h:154
std::vector< bool > EnchantCustomAttribute
Definition: SpellMgr.h:570
uint32 cooldown
Definition: SpellMgr.h:285
Definition: SpellMgr.h:414
Definition: SpellMgr.h:322
Definition: SpellMgr.h:145
uint8 rank
Definition: SpellMgr.h:513
SpellInfo const * AssertSpellInfo(uint32 spellId) const
Definition: SpellMgr.h:684
Definition: SpellMgr.h:411
bool removeOnChangePet
Definition: SpellMgr.h:475
EnchantCustomAttribute mEnchantCustomAttr
Definition: SpellMgr.h:744
flag128 spellFamilyMask
Definition: SpellMgr.h:294
Definition: SpellMgr.h:80
Definition: SpellMgr.h:376
Definition: SpellMgr.h:67
Definition: SpellMgr.h:206
std::multimap< uint32, SpellLearnSpellNode > SpellLearnSpellMap
Definition: SpellMgr.h:545
Definition: SpellMgr.h:158
std::vector< SpellInfo * > SpellInfoMap
Definition: SpellMgr.h:572
Definition: SpellMgr.h:402
Definition: SpellMgr.h:248
Definition: SpellMgr.h:319
Definition: SpellMgr.h:408
Definition: SpellMgr.h:507
Definition: SpellMgr.h:101
Definition: SpellMgr.h:384
Definition: SpellMgr.h:102
uint32 questEnd
Definition: SpellMgr.h:485
std::pair< SpellLearnSpellMap::const_iterator, SpellLearnSpellMap::const_iterator > SpellLearnSpellMapBounds
Definition: SpellMgr.h:546
int32 flatMod
Definition: SpellMgr.h:351
Definition: SpellMgr.h:561
uint16 skill
Definition: SpellMgr.h:529
Definition: SpellMgr.h:65