32#include <unordered_map>
33#include <unordered_set>
100#define SPELL_LINKED_MAX_SPELLS 200000
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)
309 return hash<uint32>()(
uint32(group));
314#define SPELL_GROUP_DB_RANGE_MIN 1000
428 PetAura() : removeOnChangePet(false), damage(0) { }
431 removeOnChangePet(_removeOnChangePet), damage(_damage)
433 auras[petEntry] = aura;
438 PetAuraMap::const_iterator itr = auras.find(petEntry);
439 if (itr != auras.end())
441 PetAuraMap::const_iterator itr2 = auras.find(0);
442 if (itr2 != auras.end())
449 auras[petEntry] = aura;
454 return removeOnChangePet;
584 static bool IsSpellValid(
SpellInfo const* spellInfo,
Player* player =
nullptr,
bool msg =
true);
605 bool IsSpellRequiringSpell(
uint32 spellid,
uint32 req_spellid)
const;
610 bool IsSpellLearnSpell(
uint32 spell_id)
const;
611 bool IsSpellLearnToSpell(
uint32 spell_id1,
uint32 spell_id2)
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;
625 bool AddSameEffectStackRuleSpellGroups(
SpellInfo const* spellInfo,
uint32 auraType,
int32 amount, std::map<SpellGroup, int32>& groups)
const;
644 bool IsArenaAllowedEnchancment(
uint32 ench_id)
const;
646 std::vector<int32>
const* GetSpellLinked(
int32 spell_id)
const;
663 ASSERT(spellId < GetSpellInfoStoreSize());
664 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
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();
735 friend class UnitTestDataLoader;
738#define sSpellMgr SpellMgr::instance()
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
#define MAX_CREATURE_SPELL_DATA_SLOT
std::multimap< uint32, SpellLearnSpellNode > SpellLearnSpellMap
bool IsPrimaryProfessionSkill(uint32 skill)
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
std::unordered_map< SpellGroup, std::unordered_set< uint32 > > SameEffectStackMap
bool IsProfessionOrRidingSkill(uint32 skill)
std::unordered_multimap< SpellGroup, int32 > SpellGroupSpellMap
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
@ SPELLFAMILYFLAG_SHAMAN_MANA_SPRING
@ SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT
@ SPELLFAMILYFLAG_WARLOCK_LIFETAP
@ SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW
@ SPELLFAMILYFLAG_ROGUE_KICK
@ SPELLFAMILYFLAG1_ROGUE_DISMANTLE
@ SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP
@ SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY
@ SPELLFAMILYFLAG_WARRIOR_EXECUTE
@ SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH
@ SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS
@ SPELLFAMILYFLAG_DK_DEATH_COIL
@ SPELLFAMILYFLAG_ROGUE_VANISH
@ SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK
@ SPELLFAMILYFLAG_WARRIOR_SLAM
@ SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY
@ SPELLFAMILYFLAG2_DRUID_STARFALL
@ SPELLFAMILYFLAG1_HUNTER_EXPLOSIVE_SHOT
@ SPELLFAMILYFLAG1_PALADIN_DIVINESTORM
@ SPELLFAMILYFLAG_WARRIOR_CHARGE
@ SPELLFAMILYFLAG_DK_DEATH_STRIKE
@ SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM
@ SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
bool IsProfessionSkill(uint32 skill)
std::multimap< uint32, SpellArea > SpellAreaMap
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
std::map< uint32, uint32 > SpellDifficultySearcherMap
@ SPELL_GROUP_ELIXIR_SHATTRATH
@ SPELL_GROUP_CORE_RANGE_MAX
@ SPELL_GROUP_ELIXIR_BATTLE
@ SPELL_GROUP_ELIXIR_GUARDIAN
@ SPELL_GROUP_ELIXIR_UNSTABLE
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
std::unordered_map< uint32, SpellChainNode > SpellChainMap
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
@ PROC_ATTR_REQ_MANA_COST
@ PROC_ATTR_CANT_PROC_FROM_ITEM_CAST
@ PROC_ATTR_REDUCE_PROC_60
@ PROC_ATTR_REQ_EXP_OR_HONOR
@ PROC_ATTR_TRIGGERED_CAN_PROC
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
std::unordered_map< uint32, SpellThreatEntry > SpellThreatMap
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE
@ SPELL_GROUP_STACK_RULE_DEFAULT
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST
@ SPELL_GROUP_STACK_RULE_MAX
std::unordered_multimap< uint32, SpellGroup > SpellSpellGroupMap
std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
std::map< uint32, PetAura > SpellPetAuraMap
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
std::vector< bool > EnchantCustomAttribute
@ SPELLCATEGORY_DEVOUR_MAGIC
@ SPELLCATEGORY_HEALTH_MANA_POTIONS
@ SPELLCATEGORY_JUDGEMENT
std::unordered_map< int32, std::vector< int32 > > SpellLinkedMap
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
std::unordered_map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
@ PROC_SPELL_TYPE_MASK_ALL
@ PROC_SPELL_TYPE_NO_DMG_HEAL
std::unordered_map< uint32, SpellBonusEntry > SpellBonusMap
std::map< uint32, PetLevelupSpellSet > PetLevelupSpellMap
@ EFFECT_RADIUS_500_YARDS
@ EFFECT_RADIUS_100_YARDS
@ EFFECT_RADIUS_45_YARDS_2
@ EFFECT_RADIUS_60_YARDS_2
@ EFFECT_RADIUS_50000_YARDS_2
@ EFFECT_RADIUS_5_YARDS_3
@ EFFECT_RADIUS_130_YARDS
@ EFFECT_RADIUS_10_YARDS_2
@ EFFECT_RADIUS_15_YARDS_2
@ EFFECT_RADIUS_5_YARDS_2
@ EFFECT_RADIUS_50000_YARDS
@ EFFECT_RADIUS_60_YARDS_3
@ EFFECT_RADIUS_200_YARDS
@ EFFECT_RADIUS_3_5_YARDS
@ EFFECT_RADIUS_150_YARDS
@ EFFECT_RADIUS_80_YARDS_2
@ EFFECT_RADIUS_15_YARDS_3
@ EFFECT_RADIUS_0_5_YARDS
@ PROC_SPELL_PHASE_FINISH
@ PROC_SPELL_PHASE_MASK_ALL
@ PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS
@ AUTO_ATTACK_PROC_FLAG_MASK
@ PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
@ PROC_FLAG_DONE_PERIODIC
@ TAKEN_HIT_PROC_FLAG_MASK
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS
@ PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG
@ PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
@ PROC_FLAG_TAKEN_PERIODIC
@ REQ_SPELL_PHASE_PROC_FLAG_MASK
@ PROC_FLAG_DONE_MAINHAND_ATTACK
@ PROC_FLAG_DONE_RANGED_AUTO_ATTACK
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS
@ PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS
@ PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
@ DONE_HIT_PROC_FLAG_MASK
@ PROC_FLAG_DONE_TRAP_ACTIVATION
@ PROC_FLAG_DONE_OFFHAND_ATTACK
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
std::multimap< uint32, uint32 > SpellsRequiringSpellMap
@ ENCHANT_PROC_ATTR_LIMIT_60
@ ENCHANT_PROC_ATTR_WHITE_HIT
std::multimap< uint32, uint32 > SpellRequiredMap
std::vector< SpellInfo * > SpellInfoMap
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
std::unordered_map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
std::pair< SpellLearnSpellMap::const_iterator, SpellLearnSpellMap::const_iterator > SpellLearnSpellMapBounds
std::multimap< uint32, uint32 > PetLevelupSpellSet
std::unordered_map< uint32, uint32 > PetAuraMap
uint32 GetAura(uint32 petEntry) const
PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage)
bool IsRemovedOnChangePet() const
void AddAura(uint32 petEntry, uint32 aura)
SpellRequiredMap mSpellReq
SpellLinkedMap mSpellLinkedMap
SpellInfo const * AssertSpellInfo(uint32 spellId) const
SkillLineAbilityMap mSkillLineAbilityMap
EnchantCustomAttribute mEnchantCustomAttr
SpellAreaForAuraMap mSpellAreaForAuraMap
SpellChainMap mSpellChains
SpellPetAuraMap mSpellPetAuraMap
SpellLearnSkillMap mSpellLearnSkills
SpellAreaForQuestMap mSpellAreaForQuestEndMap
PetDefaultSpellsMap mPetDefaultSpellsMap
SpellInfo const * GetSpellInfo(uint32 spellId) const
SpellDifficultySearcherMap mSpellDifficultySearcherMap
SpellGroupStackMap mSpellGroupStack
SpellEnchantProcEventMap mSpellEnchantProcEventMap
PetLevelupSpellMap mPetLevelupSpellMap
SpellProcMap mSpellProcMap
SpellsRequiringSpellMap mSpellsReqSpell
SpellTargetPositionMap mSpellTargetPositions
SpellGroupSpellMap mSpellGroupSpell
SameEffectStackMap mSpellSameEffectStack
SpellAreaForAreaMap mSpellAreaForAreaMap
SpellAreaMap mSpellAreaMap
uint32 GetSpellInfoStoreSize() const
SpellBonusMap mSpellBonusMap
SpellLearnSpellMap mSpellLearnSpells
SpellSpellGroupMap mSpellSpellGroup
SpellThreatMap mSpellThreatMap
SpellAreaForQuestMap mSpellAreaForQuestMap
SpellInfoMap mSpellInfoMap
SpellInfo * _GetSpellInfo(uint32 spellId)
Utility class to enable range for loop syntax for multimap.equal_range uses.
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
uint32 DisableEffectsMask
size_t operator()(SpellGroup const &group) const