82#define SPELL_LINKED_MAX_SPELLS 200000
173#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_DONE_MELEE_AUTO_ATTACK | \
174 PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK | \
175 PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS | \
176 PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS | \
177 PROC_FLAG_DONE_RANGED_AUTO_ATTACK | \
178 PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK | \
179 PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS | \
180 PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS)
213#define AURA_SPELL_PROC_EX_MASK \
214 (PROC_EX_NORMAL_HIT | PROC_EX_CRITICAL_HIT | PROC_EX_MISS | \
215 PROC_EX_RESIST | PROC_EX_DODGE | PROC_EX_PARRY | PROC_EX_BLOCK | \
216 PROC_EX_EVADE | PROC_EX_IMMUNE | PROC_EX_DEFLECT | \
217 PROC_EX_ABSORB | PROC_EX_REFLECT | PROC_EX_INTERRUPT)
323#define SPELL_GROUP_DB_RANGE_MIN 1000
341#define SPELL_GROUP_STACK_RULE_MAX 4
440 auras[petEntry] = aura;
445 PetAuraMap::const_iterator itr =
auras.find(petEntry);
446 if (itr !=
auras.end())
448 PetAuraMap::const_iterator itr2 =
auras.find(0);
449 if (itr2 !=
auras.end())
456 auras[petEntry] = aura;
600 static bool
IsSpellValid(SpellInfo const* spellInfo, Player* player = NULL, bool msg = true);
646 bool
IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const;
744#define sSpellMgr Skyfire::Singleton<SpellMgr, Skyfire::NullMutex>::instance()
#define MAX_CREATURE_SPELL_DATA_SLOT
std::multimap< uint32, SpellLearnSpellNode > SpellLearnSpellMap
bool IsPrimaryProfessionSkill(uint32 skill)
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
bool IsProfessionOrRidingSkill(uint32 skill)
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const *spellproto)
DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const *spellproto, bool triggered)
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
@ SPELLFAMILYFLAG_SHAMAN_MANA_SPRING
@ SPELLFAMILYFLAG_WARLOCK_LIFETAP
@ SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW
@ SPELLFAMILYFLAG1_ROGUE_SHADOWSTEP
@ SPELLFAMILYFLAG_WARRIOR_EXECUTE
@ SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH
@ SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS
@ SPELLFAMILYFLAG_DK_DEATH_COIL
@ SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK
@ SPELLFAMILYFLAG_WARRIOR_SLAM
@ SPELLFAMILYFLAG2_DRUID_STARFALL
@ SPELLFAMILYFLAG0_ROGUE_VAN_SPRINT
@ SPELLFAMILYFLAG1_PALADIN_DIVINESTORM
@ SPELLFAMILYFLAG1_ROGUE_DISMANTLE_SMOKE_BOMB
@ SPELLFAMILYFLAG_WARRIOR_CHARGE
@ SPELLFAMILYFLAG_DK_DEATH_STRIKE
@ SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM
@ SPELLFAMILYFLAG0_ROGUE_KICK
@ SPELLFAMILYFLAG0_ROGUE_VANISH
@ SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA
std::map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
bool IsProfessionSkill(uint32 skill)
bool IsWeaponSkill(uint32 skill)
std::multimap< uint32, SpellArea > SpellAreaMap
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
std::map< uint32, uint32 > SpellDifficultySearcherMap
std::map< int32, std::vector< int32 > > SpellLinkedMap
@ SPELL_GROUP_ELIXIR_SHATTRATH
@ SPELL_GROUP_CORE_RANGE_MAX
@ SPELL_GROUP_ELIXIR_BATTLE
@ SPELL_GROUP_ELIXIR_GUARDIAN
@ SPELL_GROUP_ELIXIR_UNSTABLE
std::multimap< uint32, SpellGroup > SpellSpellGroupMap
UNORDERED_MAP< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
UNORDERED_MAP< uint32, SpellProcEntry > SpellProcMap
@ PROC_ATTR_REQ_EXP_OR_HONOR
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
@ 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
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::multimap< SpellGroup, int32 > SpellGroupSpellMap
UNORDERED_MAP< uint32, SpellBonusEntry > SpellBonusMap
std::vector< bool > EnchantCustomAttribute
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
@ SPELLCATEGORY_DEVOUR_MAGIC
@ SPELLCATEGORY_HEALTH_MANA_POTIONS
@ SPELLCATEGORY_JUDGEMENT
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
std::vector< uint32 > SpellCustomAttribute
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
@ PROC_EX_INTERNAL_CANT_PROC
@ PROC_EX_ONLY_ACTIVE_SPELL
@ PROC_EX_EX_ONE_TIME_TRIGGER
@ PROC_EX_INTERNAL_TRIGGERED
@ PROC_EX_EX_TRIGGER_ALWAYS
@ PROC_EX_NOT_ACTIVE_SPELL
@ PROC_EX_INTERNAL_REQ_FAMILY
@ PROC_SPELL_TYPE_MASK_ALL
@ PROC_SPELL_TYPE_NO_DMG_HEAL
std::map< uint32, SpellThreatEntry > SpellThreatMap
std::map< uint32, PetLevelupSpellSet > PetLevelupSpellMap
DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
@ 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
@ SPELL_CAST_PROC_FLAG_MASK
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
@ PERIODIC_PROC_FLAG_MASK
@ 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
std::multimap< uint32, uint32 > SpellRequiredMap
std::vector< SpellInfo * > SpellInfoMap
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
std::pair< SpellLearnSpellMap::const_iterator, SpellLearnSpellMap::const_iterator > SpellLearnSpellMapBounds
UNORDERED_MAP< uint32, SpellProcEventEntry > SpellProcEventMap
std::map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
std::multimap< uint32, uint32 > PetLevelupSpellSet
UNORDERED_MAP< uint32, SpellChainNode > SpellChainMap
uint32 GetAura(uint32 petEntry) const
PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage)
UNORDERED_MAP< uint32, uint32 > PetAuraMap
bool IsRemovedOnChangePet() const
void AddAura(uint32 petEntry, uint32 aura)
SpellRequiredMap mSpellReq
SpellLinkedMap mSpellLinkedMap
SkillLineAbilityMap mSkillLineAbilityMap
SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const
EnchantCustomAttribute mEnchantCustomAttr
void SetSpellDifficultyId(uint32 spellId, uint32 id)
SpellLearnSpellMapBounds GetSpellLearnSpellMapBounds(uint32 spell_id) const
PetLevelupSpellSet const * GetPetLevelupSpellList(uint32 petFamily) const
void LoadSpellInfoStore()
uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const *caster) const
SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const
SpellAreaForAuraMap mSpellAreaForAuraMap
SpellProcEventEntry const * GetSpellProcEvent(uint32 spellId) const
SpellChainMap mSpellChains
void LoadEnchantCustomAttr()
void UnloadSpellInfoStore()
uint32 GetNextSpellInChain(uint32 spell_id) const
SpellPetAuraMap mSpellPetAuraMap
SpellLearnSkillMap mSpellLearnSkills
SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const
SpellBonusEntry const * GetSpellBonusData(uint32 spellId) const
void LoadSkillLineAbilityMap()
SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const
SpellProcEventMap mSpellProcEventMap
static bool IsSpellValid(SpellInfo const *spellInfo, Player *player=NULL, bool msg=true)
Some checks for spells, to prevent adding deprecated/broken spells for trainers, spell book,...
SpellAreaForQuestMap mSpellAreaForQuestEndMap
SpellGroupSpellMapBounds GetSpellGroupSpellMapBounds(SpellGroup group_id) const
PetDefaultSpellsMap mPetDefaultSpellsMap
uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict=false) const
SpellLearnSkillNode const * GetSpellLearnSkill(uint32 spell_id) const
void LoadSpellInfoCustomAttributes()
const std::vector< int32 > * GetSpellLinked(int32 spell_id) const
SpellRequiredMapBounds GetSpellsRequiredForSpellBounds(uint32 spell_id) const
SpellInfo const * GetSpellInfo(uint32 spellId) const
uint32 GetPrevSpellInChain(uint32 spell_id) const
bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const
bool IsSpellLearnToSpell(uint32 spell_id1, uint32 spell_id2) const
SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const
SpellInfo const * GetSpellForDifficultyFromSpell(SpellInfo const *spell, Unit const *caster) const
void LoadSpellTargetPositions()
SpellDifficultySearcherMap mSpellDifficultySearcherMap
void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set< uint32 > &foundSpells) const
void LoadSpellLearnSkills()
uint32 GetLastSpellInChain(uint32 spell_id) const
bool AddSameEffectStackRuleSpellGroups(SpellInfo const *spellInfo, int32 amount, std::map< SpellGroup, int32 > &groups) const
void LoadSpellTalentRanks()
bool IsSpellLearnSpell(uint32 spell_id) const
SpellThreatEntry const * GetSpellThreatEntry(uint32 spellID) const
void LoadSpellGroupStackRules()
SpellGroupStackMap mSpellGroupStack
uint32 GetFirstSpellInChain(uint32 spell_id) const
bool CanSpellTriggerProcOnEvent(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
SpellEnchantProcEventMap mSpellEnchantProcEventMap
void LoadPetDefaultSpells()
PetLevelupSpellMap mPetLevelupSpellMap
void LoadSpellLearnSpells()
SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const *spellInfo1, SpellInfo const *spellInfo2) const
SpellProcMap mSpellProcMap
SpellsRequiringSpellMap mSpellsReqSpell
void LoadSpellInfoCorrections()
SpellTargetPositionMap mSpellTargetPositions
SpellProcEntry const * GetSpellProcEntry(uint32 spellId) const
SpellGroupSpellMap mSpellGroupSpell
PetDefaultSpellsEntry const * GetPetDefaultSpellsEntry(int32 id) const
SpellTargetPosition const * GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const
SpellEnchantProcEntry const * GetSpellEnchantProcEvent(uint32 enchId) const
SpellAreaForAreaMap mSpellAreaForAreaMap
bool IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const *spellProcEvent, uint32 EventProcFlag, SpellInfo const *procSpell, uint32 procFlags, uint32 procExtra, bool active) const
uint32 GetSpellDifficultyId(uint32 spellId) const
void LoadSpellProcEvents()
uint8 GetSpellRank(uint32 spell_id) const
void UnloadSpellInfoImplicitTargetConditionLists()
SpellSpellGroupMapBounds GetSpellSpellGroupMapBounds(uint32 spell_id) const
SpellAreaMap mSpellAreaMap
void LoadSpellEnchantProcData()
uint32 GetSpellInfoStoreSize() const
SpellBonusMap mSpellBonusMap
SpellChainNode const * GetSpellChainNode(uint32 spell_id) const
SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const
void LoadPetLevelupSpellMap()
SpellLearnSpellMap mSpellLearnSpells
SpellSpellGroupMap mSpellSpellGroup
PetAura const * GetPetAura(uint32 spell_id, uint8 eff) const
SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const
bool IsArenaAllowedEnchancment(uint32 ench_id) const
SpellThreatMap mSpellThreatMap
SpellAreaForQuestMap mSpellAreaForQuestMap
SpellInfoMap mSpellInfoMap
SpellInfo * _GetSpellInfo(uint32 spellId)
void UnloadSpellInfoChains()
bool IsSpellMemberOfSpellGroup(uint32 spellid, SpellGroup groupid) const
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
bool IsFitToRequirements(Player const *player, uint32 newZone, uint32 newArea) const