AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellMgr.h File Reference
#include "Log.h"
#include "IteratorPair.h"
#include "SharedDefines.h"
#include "Unit.h"
#include <vector>
#include <bitset>

Go to the source code of this file.

Classes

struct  SpellProcEntry
 
struct  SpellEnchantProcEntry
 
struct  SpellBonusEntry
 
struct  std::hash< SpellGroup >
 
struct  SpellThreatEntry
 
struct  SpellTargetPosition
 
struct  SpellCone
 
class  PetAura
 
struct  SpellArea
 
struct  SpellChainNode
 
struct  CreatureImmunities
 
struct  SpellLearnSkillNode
 
struct  PetDefaultSpellsEntry
 
struct  SpellCooldownOverride
 
class  SpellMgr
 

Namespaces

namespace  std
 STL namespace.
 

Macros

#define SPELL_RELIC_COOLDOWN   1
 
#define SPELL_LINKED_MAX_SPELLS   200000
 
#define MELEE_BASED_TRIGGER_MASK
 
#define AURA_SPELL_PROC_EX_MASK
 
#define SPELL_GROUP_DB_RANGE_MIN   1000
 
#define sSpellMgr   SpellMgr::instance()
 

Typedefs

typedef std::unordered_map< uint32, SpellProcEntrySpellProcMap
 
typedef std::unordered_map< uint32, SpellEnchantProcEntrySpellEnchantProcEventMap
 
typedef std::unordered_map< uint32, SpellBonusEntrySpellBonusMap
 
typedef std::unordered_multimap< uint32, SpellGroupSpellSpellGroupMap
 
typedef std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
 
typedef std::unordered_multimap< SpellGroup, int32SpellGroupSpellMap
 
typedef std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
 
typedef std::unordered_map< SpellGroup, SpellGroupStackRuleSpellGroupStackMap
 
typedef std::unordered_map< SpellGroup, std::unordered_set< uint32 > > SameEffectStackMap
 
typedef std::unordered_map< uint32, SpellThreatEntrySpellThreatMap
 
typedef std::map< uint32, float > SpellMixologyMap
 
typedef std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPositionSpellTargetPositionMap
 
typedef std::map< uint32, SpellConeSpellConeMap
 
typedef std::map< uint32, PetAuraSpellPetAuraMap
 
typedef std::multimap< uint32, SpellAreaSpellAreaMap
 
typedef std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
 
typedef std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
 
typedef std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
 
typedef std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
 
typedef std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
 
typedef std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
 
typedef std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
 
typedef std::unordered_map< uint32, SpellChainNodeSpellChainMap
 
typedef std::multimap< uint32, uint32SpellRequiredMap
 
typedef std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
 
typedef std::multimap< uint32, uint32SpellsRequiringSpellMap
 
typedef std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
 
typedef std::unordered_map< int32, CreatureImmunitiesCreatureImmunitiesMap
 
typedef std::unordered_map< uint32, SpellLearnSkillNodeSpellLearnSkillMap
 
typedef std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
 
typedef std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
 
typedef std::multimap< uint32, uint32PetLevelupSpellSet
 
typedef std::map< uint32, PetLevelupSpellSetPetLevelupSpellMap
 
typedef std::map< uint32, uint32SpellDifficultySearcherMap
 
typedef std::map< int32, PetDefaultSpellsEntryPetDefaultSpellsMap
 
typedef std::vector< uint32SpellCustomAttribute
 
typedef std::vector< bool > EnchantCustomAttribute
 
typedef std::vector< SpellInfo * > SpellInfoMap
 
typedef std::map< int32, std::vector< int32 > > SpellLinkedMap
 
typedef std::map< uint32, SpellCooldownOverrideSpellCooldownOverrideMap
 
typedef std::set< uint32TalentAdditionalSet
 

Enumerations

enum  SpellCategories {
  SPELLCATEGORY_HEALTH_MANA_POTIONS = 4 ,
  SPELLCATEGORY_DEVOUR_MAGIC = 12 ,
  SPELLCATEGORY_JUDGEMENT = 1210 ,
  SPELLCATEGORY_FOOD = 11 ,
  SPELLCATEGORY_DRINK = 59
}
 
enum  SpellFamilyFlag {
  SPELLFAMILYFLAG_ROGUE_VANISH = 0x00000800 ,
  SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT = 0x00000860 ,
  SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP = 0x00000240 ,
  SPELLFAMILYFLAG_ROGUE_KICK = 0x00000010 ,
  SPELLFAMILYFLAG1_ROGUE_DISMANTLE = 0x00100000 ,
  SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY = 0x40000000 ,
  SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY = 0x00000800 ,
  SPELLFAMILYFLAG_WARRIOR_CHARGE = 0x00000001 ,
  SPELLFAMILYFLAG_WARRIOR_SLAM = 0x00200000 ,
  SPELLFAMILYFLAG_WARRIOR_EXECUTE = 0x20000000 ,
  SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW = 0x04000000 ,
  SPELLFAMILYFLAG_WARLOCK_LIFETAP = 0x00040000 ,
  SPELLFAMILYFLAG2_DRUID_STARFALL = 0x00000100 ,
  SPELLFAMILYFLAG1_PALADIN_DIVINESTORM = 0x00020000 ,
  SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK = 0x80000000 ,
  SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM = 0x00002000 ,
  SPELLFAMILYFLAG_SHAMAN_MANA_SPRING = 0x00004000 ,
  SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH = 0x00000004 ,
  SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA = 0x28000000 ,
  SPELLFAMILYFLAG_DK_DEATH_STRIKE = 0x00000010 ,
  SPELLFAMILYFLAG_DK_DEATH_COIL = 0x00002000 ,
  SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS = 0x04000000
}
 
enum  SpellLinkedType {
  SPELL_LINK_CAST = 0 ,
  SPELL_LINK_HIT = 1 * 200000 ,
  SPELL_LINK_AURA = 2 * 200000 ,
  SPELL_LINK_REMOVE = 0
}
 
enum  ProcFlags {
  PROC_FLAG_NONE = 0x00000000 ,
  PROC_FLAG_KILLED = 0x00000001 ,
  PROC_FLAG_KILL = 0x00000002 ,
  PROC_FLAG_DONE_MELEE_AUTO_ATTACK = 0x00000004 ,
  PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK = 0x00000008 ,
  PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS = 0x00000010 ,
  PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS = 0x00000020 ,
  PROC_FLAG_DONE_RANGED_AUTO_ATTACK = 0x00000040 ,
  PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK = 0x00000080 ,
  PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS = 0x00000100 ,
  PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS = 0x00000200 ,
  PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS = 0x00000400 ,
  PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS = 0x00000800 ,
  PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG = 0x00001000 ,
  PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG = 0x00002000 ,
  PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS = 0x00004000 ,
  PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS = 0x00008000 ,
  PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG = 0x00010000 ,
  PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG = 0x00020000 ,
  PROC_FLAG_DONE_PERIODIC = 0x00040000 ,
  PROC_FLAG_TAKEN_PERIODIC = 0x00080000 ,
  PROC_FLAG_TAKEN_DAMAGE = 0x00100000 ,
  PROC_FLAG_DONE_TRAP_ACTIVATION = 0x00200000 ,
  PROC_FLAG_DONE_MAINHAND_ATTACK = 0x00400000 ,
  PROC_FLAG_DONE_OFFHAND_ATTACK = 0x00800000 ,
  PROC_FLAG_DEATH = 0x01000000 ,
  AUTO_ATTACK_PROC_FLAG_MASK ,
  MELEE_PROC_FLAG_MASK ,
  RANGED_PROC_FLAG_MASK ,
  SPELL_PROC_FLAG_MASK ,
  PERIODIC_PROC_FLAG_MASK = PROC_FLAG_DONE_PERIODIC | PROC_FLAG_TAKEN_PERIODIC ,
  DONE_HIT_PROC_FLAG_MASK ,
  TAKEN_HIT_PROC_FLAG_MASK ,
  REQ_SPELL_PHASE_PROC_FLAG_MASK = SPELL_PROC_FLAG_MASK & DONE_HIT_PROC_FLAG_MASK
}
 
enum  ProcFlagsExLegacy {
  PROC_EX_NONE = 0x0000000 ,
  PROC_EX_NORMAL_HIT = 0x0000001 ,
  PROC_EX_CRITICAL_HIT = 0x0000002 ,
  PROC_EX_MISS = 0x0000004 ,
  PROC_EX_RESIST = 0x0000008 ,
  PROC_EX_DODGE = 0x0000010 ,
  PROC_EX_PARRY = 0x0000020 ,
  PROC_EX_BLOCK = 0x0000040 ,
  PROC_EX_EVADE = 0x0000080 ,
  PROC_EX_IMMUNE = 0x0000100 ,
  PROC_EX_DEFLECT = 0x0000200 ,
  PROC_EX_ABSORB = 0x0000400 ,
  PROC_EX_REFLECT = 0x0000800 ,
  PROC_EX_INTERRUPT = 0x0001000 ,
  PROC_EX_FULL_BLOCK = 0x0002000 ,
  PROC_EX_RESERVED2 = 0x0004000 ,
  PROC_EX_NOT_ACTIVE_SPELL = 0x0008000 ,
  PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000 ,
  PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000 ,
  PROC_EX_ONLY_ACTIVE_SPELL = 0x0040000 ,
  PROC_EX_NO_OVERHEAL = 0x0080000 ,
  PROC_EX_NO_AURA_REFRESH = 0x0100000 ,
  PROC_EX_ONLY_FIRST_TICK = 0x0200000 ,
  PROC_EX_INTERNAL_CANT_PROC = 0x0800000 ,
  PROC_EX_INTERNAL_DOT = 0x1000000 ,
  PROC_EX_INTERNAL_HOT = 0x2000000 ,
  PROC_EX_INTERNAL_TRIGGERED = 0x4000000 ,
  PROC_EX_INTERNAL_REQ_FAMILY = 0x8000000
}
 
enum  ProcFlagsSpellType {
  PROC_SPELL_TYPE_NONE = 0x0000000 ,
  PROC_SPELL_TYPE_DAMAGE = 0x0000001 ,
  PROC_SPELL_TYPE_HEAL = 0x0000002 ,
  PROC_SPELL_TYPE_NO_DMG_HEAL = 0x0000004 ,
  PROC_SPELL_TYPE_MASK_ALL = PROC_SPELL_TYPE_DAMAGE | PROC_SPELL_TYPE_HEAL | PROC_SPELL_TYPE_NO_DMG_HEAL
}
 
enum  ProcFlagsSpellPhase {
  PROC_SPELL_PHASE_NONE = 0x0000000 ,
  PROC_SPELL_PHASE_CAST = 0x0000001 ,
  PROC_SPELL_PHASE_HIT = 0x0000002 ,
  PROC_SPELL_PHASE_FINISH = 0x0000004 ,
  PROC_SPELL_PHASE_MASK_ALL = PROC_SPELL_PHASE_CAST | PROC_SPELL_PHASE_HIT | PROC_SPELL_PHASE_FINISH
}
 
enum  ProcFlagsHit {
  PROC_HIT_NONE = 0x0000000 ,
  PROC_HIT_NORMAL = 0x0000001 ,
  PROC_HIT_CRITICAL = 0x0000002 ,
  PROC_HIT_MISS = 0x0000004 ,
  PROC_HIT_FULL_RESIST = 0x0000008 ,
  PROC_HIT_DODGE = 0x0000010 ,
  PROC_HIT_PARRY = 0x0000020 ,
  PROC_HIT_BLOCK = 0x0000040 ,
  PROC_HIT_EVADE = 0x0000080 ,
  PROC_HIT_IMMUNE = 0x0000100 ,
  PROC_HIT_DEFLECT = 0x0000200 ,
  PROC_HIT_ABSORB = 0x0000400 ,
  PROC_HIT_REFLECT = 0x0000800 ,
  PROC_HIT_INTERRUPT = 0x0001000 ,
  PROC_HIT_FULL_BLOCK = 0x0002000 ,
  PROC_HIT_MASK_ALL = 0x0002FFF
}
 
enum  ProcAttributes {
  PROC_ATTR_REQ_EXP_OR_HONOR = 0x0000001 ,
  PROC_ATTR_TRIGGERED_CAN_PROC = 0x0000002 ,
  PROC_ATTR_REQ_MANA_COST = 0x0000004 ,
  PROC_ATTR_REQ_SPELLMOD = 0x0000008 ,
  PROC_ATTR_USE_STACKS_FOR_CHARGES = 0x0000010 ,
  PROC_ATTR_REDUCE_PROC_60 = 0x0000080 ,
  PROC_ATTR_CANT_PROC_FROM_ITEM_CAST = 0x0000100
}
 
enum  EnchantProcAttributes {
  ENCHANT_PROC_ATTR_EXCLUSIVE = 0x1 ,
  ENCHANT_PROC_ATTR_WHITE_HIT = 0x2
}
 
enum  SpellGroup {
  SPELL_GROUP_NONE = 0 ,
  SPELL_GROUP_ELIXIR_BATTLE = 1 ,
  SPELL_GROUP_ELIXIR_GUARDIAN = 2 ,
  SPELL_GROUP_CORE_RANGE_MAX = 3
}
 
enum  SpellGroupStackRule {
  SPELL_GROUP_STACK_RULE_DEFAULT ,
  SPELL_GROUP_STACK_RULE_EXCLUSIVE ,
  SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER ,
  SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT ,
  SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST ,
  SPELL_GROUP_STACK_RULE_MAX
}
 
enum  EffectRadiusIndex {
  EFFECT_RADIUS_2_YARDS = 7 ,
  EFFECT_RADIUS_5_YARDS = 8 ,
  EFFECT_RADIUS_20_YARDS = 9 ,
  EFFECT_RADIUS_30_YARDS = 10 ,
  EFFECT_RADIUS_45_YARDS = 11 ,
  EFFECT_RADIUS_100_YARDS = 12 ,
  EFFECT_RADIUS_10_YARDS = 13 ,
  EFFECT_RADIUS_8_YARDS = 14 ,
  EFFECT_RADIUS_3_YARDS = 15 ,
  EFFECT_RADIUS_1_YARD = 16 ,
  EFFECT_RADIUS_13_YARDS = 17 ,
  EFFECT_RADIUS_15_YARDS = 18 ,
  EFFECT_RADIUS_18_YARDS = 19 ,
  EFFECT_RADIUS_25_YARDS = 20 ,
  EFFECT_RADIUS_35_YARDS = 21 ,
  EFFECT_RADIUS_200_YARDS = 22 ,
  EFFECT_RADIUS_40_YARDS = 23 ,
  EFFECT_RADIUS_65_YARDS = 24 ,
  EFFECT_RADIUS_70_YARDS = 25 ,
  EFFECT_RADIUS_4_YARDS = 26 ,
  EFFECT_RADIUS_50_YARDS = 27 ,
  EFFECT_RADIUS_50000_YARDS = 28 ,
  EFFECT_RADIUS_6_YARDS = 29 ,
  EFFECT_RADIUS_500_YARDS = 30 ,
  EFFECT_RADIUS_80_YARDS = 31 ,
  EFFECT_RADIUS_12_YARDS = 32 ,
  EFFECT_RADIUS_99_YARDS = 33 ,
  EFFECT_RADIUS_55_YARDS = 35 ,
  EFFECT_RADIUS_0_YARDS = 36 ,
  EFFECT_RADIUS_7_YARDS = 37 ,
  EFFECT_RADIUS_21_YARDS = 38 ,
  EFFECT_RADIUS_34_YARDS = 39 ,
  EFFECT_RADIUS_9_YARDS = 40 ,
  EFFECT_RADIUS_150_YARDS = 41 ,
  EFFECT_RADIUS_11_YARDS = 42 ,
  EFFECT_RADIUS_16_YARDS = 43 ,
  EFFECT_RADIUS_0_5_YARDS = 44 ,
  EFFECT_RADIUS_10_YARDS_2 = 45 ,
  EFFECT_RADIUS_5_YARDS_2 = 46 ,
  EFFECT_RADIUS_15_YARDS_2 = 47 ,
  EFFECT_RADIUS_60_YARDS = 48 ,
  EFFECT_RADIUS_90_YARDS = 49 ,
  EFFECT_RADIUS_15_YARDS_3 = 50 ,
  EFFECT_RADIUS_60_YARDS_2 = 51 ,
  EFFECT_RADIUS_5_YARDS_3 = 52 ,
  EFFECT_RADIUS_60_YARDS_3 = 53 ,
  EFFECT_RADIUS_50000_YARDS_2 = 54 ,
  EFFECT_RADIUS_130_YARDS = 55 ,
  EFFECT_RADIUS_38_YARDS = 56 ,
  EFFECT_RADIUS_45_YARDS_2 = 57 ,
  EFFECT_RADIUS_32_YARDS = 59 ,
  EFFECT_RADIUS_44_YARDS = 60 ,
  EFFECT_RADIUS_14_YARDS = 61 ,
  EFFECT_RADIUS_47_YARDS = 62 ,
  EFFECT_RADIUS_23_YARDS = 63 ,
  EFFECT_RADIUS_3_5_YARDS = 64 ,
  EFFECT_RADIUS_80_YARDS_2 = 65
}
 
enum  ICCBuff {
  ICC_AREA = 4812 ,
  ICC_RACEMASK_HORDE = 690 ,
  ICC_RACEMASK_ALLIANCE = 1101
}
 

Functions

bool IsPrimaryProfessionSkill (uint32 skill)
 
bool IsProfessionSkill (uint32 skill)
 
bool IsProfessionOrRidingSkill (uint32 skill)
 
bool IsPartOfSkillLine (uint32 skillId, uint32 spellId)
 
DiminishingGroup GetDiminishingReturnsGroupForSpell (SpellInfo const *spellproto, bool triggered)
 
DiminishingReturnsType GetDiminishingReturnsGroupType (DiminishingGroup group)
 
DiminishingLevels GetDiminishingReturnsMaxLevel (DiminishingGroup group)
 
int32 GetDiminishingReturnsLimitDuration (DiminishingGroup group, SpellInfo const *spellproto)
 
bool IsDiminishingReturnsGroupDurationLimited (DiminishingGroup group)
 

Macro Definition Documentation

◆ AURA_SPELL_PROC_EX_MASK

#define AURA_SPELL_PROC_EX_MASK
Value:
@ PROC_EX_DODGE
Definition SpellMgr.h:203
@ PROC_EX_DEFLECT
Definition SpellMgr.h:208
@ PROC_EX_BLOCK
Definition SpellMgr.h:205
@ PROC_EX_CRITICAL_HIT
Definition SpellMgr.h:200
@ PROC_EX_NORMAL_HIT
Definition SpellMgr.h:199
@ PROC_EX_IMMUNE
Definition SpellMgr.h:207
@ PROC_EX_MISS
Definition SpellMgr.h:201
@ PROC_EX_RESIST
Definition SpellMgr.h:202
@ PROC_EX_REFLECT
Definition SpellMgr.h:210
@ PROC_EX_ABSORB
Definition SpellMgr.h:209
@ PROC_EX_INTERRUPT
Definition SpellMgr.h:211
@ PROC_EX_PARRY
Definition SpellMgr.h:204
@ PROC_EX_EVADE
Definition SpellMgr.h:206
236{
237 PROC_SPELL_TYPE_NONE = 0x0000000,
238 PROC_SPELL_TYPE_DAMAGE = 0x0000001, // damage type of spell
239 PROC_SPELL_TYPE_HEAL = 0x0000002, // heal type of spell
240 PROC_SPELL_TYPE_NO_DMG_HEAL = 0x0000004, // other spells
242};
243
245{
246 PROC_SPELL_PHASE_NONE = 0x0000000,
247 PROC_SPELL_PHASE_CAST = 0x0000001,
248 PROC_SPELL_PHASE_HIT = 0x0000002,
249 PROC_SPELL_PHASE_FINISH = 0x0000004,
251};
252
253enum ProcFlagsHit
254{
255 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
256 PROC_HIT_NORMAL = 0x0000001, // non-critical hits
257 PROC_HIT_CRITICAL = 0x0000002,
258 PROC_HIT_MISS = 0x0000004,
259 PROC_HIT_FULL_RESIST = 0x0000008,
260 PROC_HIT_DODGE = 0x0000010,
261 PROC_HIT_PARRY = 0x0000020,
262 PROC_HIT_BLOCK = 0x0000040, // partial or full block
263 PROC_HIT_EVADE = 0x0000080,
264 PROC_HIT_IMMUNE = 0x0000100,
265 PROC_HIT_DEFLECT = 0x0000200,
266 PROC_HIT_ABSORB = 0x0000400, // partial or full absorb
267 PROC_HIT_REFLECT = 0x0000800,
268 PROC_HIT_INTERRUPT = 0x0001000, // (not used atm)
269 PROC_HIT_FULL_BLOCK = 0x0002000,
270 PROC_HIT_MASK_ALL = 0x0002FFF,
271};
272
274{
275 PROC_ATTR_REQ_EXP_OR_HONOR = 0x0000001, // requires proc target to give exp or honor for aura proc
276 PROC_ATTR_TRIGGERED_CAN_PROC = 0x0000002, // aura can proc even with triggered spells
277 PROC_ATTR_REQ_MANA_COST = 0x0000004, // requires triggering spell to have a mana cost for aura proc
278 PROC_ATTR_REQ_SPELLMOD = 0x0000008, // requires triggering spell to be affected by proccing aura to drop charges
279 PROC_ATTR_USE_STACKS_FOR_CHARGES = 0x0000010, // consuming proc drops a stack from proccing aura instead of charge
280 PROC_ATTR_REDUCE_PROC_60 = 0x0000080, // aura should have a reduced chance to proc if level of proc actor > 60
281 PROC_ATTR_CANT_PROC_FROM_ITEM_CAST = 0x0000100, // do not allow aura proc if proc is caused by a spell casted by item
282};
283
284struct SpellProcEntry
285{
286 uint32 SchoolMask; // if nonzero - bitmask for matching proc condition based on spell's school
287 uint32 SpellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyName
288 flag96 SpellFamilyMask; // if nonzero - bitmask for matching proc condition based on candidate spell's SpellFamilyFlags
289 uint32 ProcFlags; // if nonzero - owerwrite procFlags field for given Spell.dbc entry, bitmask for matching proc condition, see enum ProcFlags
290 uint32 SpellTypeMask; // if nonzero - bitmask for matching proc condition based on candidate spell's damage/heal effects, see enum ProcFlagsSpellType
291 uint32 SpellPhaseMask; // if nonzero - bitmask for matching phase of a spellcast on which proc occurs, see enum ProcFlagsSpellPhase
292 uint32 HitMask; // if nonzero - bitmask for matching proc condition based on hit result, see enum ProcFlagsHit
293 uint32 AttributesMask; // bitmask, see ProcAttributes
294 uint32 DisableEffectsMask; // bitmask of effects to disable from triggering proc
295 float ProcsPerMinute; // if nonzero - chance to proc is equal to value * aura caster's weapon speed / 60
296 float Chance; // if nonzero - owerwrite procChance field for given Spell.dbc entry, defines chance of proc to occur, not used if ProcsPerMinute set
297 Milliseconds Cooldown; // if nonzero - cooldown in secs for aura proc, applied to aura
298 uint32 Charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite
299};
300
301typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap;
302
304{
305 ENCHANT_PROC_ATTR_EXCLUSIVE = 0x1, // Only one instance of that effect can be active
306 ENCHANT_PROC_ATTR_WHITE_HIT = 0x2 // Enchant shall only proc off white hits (not abilities)
307};
308
310{
312 float PPMChance;
315};
316
317typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap;
318
319struct SpellBonusEntry
320{
321 float direct_damage;
322 float dot_damage;
323 float ap_bonus;
324 float ap_dot_bonus;
325};
326
327typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap;
328
329enum SpellGroup
330{
335};
336
337namespace std
338{
339 template<>
340 struct hash<SpellGroup>
341 {
342 size_t operator()(SpellGroup const& group) const
343 {
344 return hash<uint32>()(uint32(group));
345 }
346 };
347}
348
349#define SPELL_GROUP_DB_RANGE_MIN 1000
350
351// spell_id, group_id
352typedef std::unordered_multimap<uint32, SpellGroup> SpellSpellGroupMap;
353typedef std::pair<SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator> SpellSpellGroupMapBounds;
354
355// group_id, spell_id
356typedef std::unordered_multimap<SpellGroup, int32> SpellGroupSpellMap;
357typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator> SpellGroupSpellMapBounds;
358
360{
367};
368
369typedef std::unordered_map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap;
370
371typedef std::unordered_map<SpellGroup, std::unordered_set<uint32 /*auraName*/>> SameEffectStackMap;
372
373struct SpellThreatEntry
374{
375 int32 flatMod; // flat threat-value for this Spell - default: 0
376 float pctMod; // threat-multiplier for this Spell - default: 1.0f
377 float apPctMod; // Pct of AP that is added as Threat - default: 0.0f
378};
379
380typedef std::unordered_map<uint32, SpellThreatEntry> SpellThreatMap;
381typedef std::map<uint32, float> SpellMixologyMap;
382
383// coordinates for spells (accessed using SpellMgr functions)
385{
387 float target_X;
388 float target_Y;
389 float target_Z;
390 float target_Orientation;
391};
392
393typedef std::map<std::pair<uint32 /*spell_id*/, SpellEffIndex /*effIndex*/>, SpellTargetPosition> SpellTargetPositionMap;
394
395struct SpellCone
396{
397 int16_t cone_degrees;
398};
399
400typedef std::map<uint32 /*spell_id*/, SpellCone> SpellConeMap;
401
402// Enum with EffectRadiusIndex and their actual radius
404{
441 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
460 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
462};
463
464// Spell pet auras
465class PetAura
466{
467private:
468 typedef std::unordered_map<uint32, uint32> PetAuraMap;
469
470public:
471 PetAura()
472 {
473 auras.clear();
474 }
475
476 PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
477 removeOnChangePet(_removeOnChangePet), damage(_damage)
478 {
479 auras[petEntry] = aura;
480 }
481
482 [[nodiscard]] uint32 GetAura(uint32 petEntry) const
483 {
484 PetAuraMap::const_iterator itr = auras.find(petEntry);
485 if (itr != auras.end())
486 return itr->second;
487 PetAuraMap::const_iterator itr2 = auras.find(0);
488 if (itr2 != auras.end())
489 return itr2->second;
490 return 0;
491 }
492
493 void AddAura(uint32 petEntry, uint32 aura)
494 {
495 auras[petEntry] = aura;
496 }
497
498 [[nodiscard]] bool IsRemovedOnChangePet() const
499 {
500 return removeOnChangePet;
501 }
502
503 [[nodiscard]] int32 GetDamage() const
504 {
505 return damage;
506 }
507
508private:
510 bool removeOnChangePet{false};
511 int32 damage{0};
512};
513typedef std::map<uint32, PetAura> SpellPetAuraMap;
514
515enum ICCBuff
516{
517 ICC_AREA = 4812,
518 ICC_RACEMASK_HORDE = 690,
520};
521
522struct SpellArea
523{
525 uint32 areaId; // zone/subzone/or 0 is not limited to zone
526 uint32 questStart; // quest start (quest must be active or rewarded for spell apply)
527 uint32 questEnd; // quest end (quest must not be rewarded for spell apply)
528 int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case
529 uint32 raceMask; // can be applied only to races
530 Gender gender; // can be applied only to gender
531 uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell
532 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)
533 bool autocast; // if true then auto applied at area enter, in other case just allowed to cast
534
535 // helpers
536 bool IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const;
537};
538
539typedef std::multimap<uint32, SpellArea> SpellAreaMap;
540typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap;
541typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap;
542typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap;
543typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds;
544typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds;
545typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds;
546typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds;
547
548// Spell rank chain (accessed using SpellMgr functions)
549struct SpellChainNode
550{
551 SpellInfo const* prev;
552 SpellInfo const* next;
553 SpellInfo const* first;
554 SpellInfo const* last;
555 uint8 rank;
556};
557
558typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
559
560// spell_id req_spell
561typedef std::multimap<uint32, uint32> SpellRequiredMap;
562typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds;
563
564// req_spell spell_id
565typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap;
566typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds;
567
568// Spell learning properties (accessed using SpellMgr functions)
570{
571 std::bitset<MAX_SPELL_SCHOOL> School;
572 std::bitset<DISPEL_MAX> DispelType;
573 std::bitset<MAX_MECHANIC> Mechanic;
574 std::vector<SpellEffects> Effect;
575 std::vector<AuraType> Aura;
576 bool ImmuneAoE = false;
577 bool ImmuneChain = false;
578};
579
580typedef std::unordered_map<int32, CreatureImmunities> CreatureImmunitiesMap;
582{
584 uint16 step;
585 uint16 value; // 0 - max skill value for player level
586 uint16 maxvalue; // 0 - max skill value for player level
587};
588
589typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap;
590
591typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
592typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds;
593
594typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
595typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
596
597typedef std::map<uint32, uint32> SpellDifficultySearcherMap;
598
600{
602};
603
604// < 0 for petspelldata id, > 0 for creature_id
605typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap;
606
607typedef std::vector<uint32> SpellCustomAttribute;
608typedef std::vector<bool> EnchantCustomAttribute;
609
610typedef std::vector<SpellInfo*> SpellInfoMap;
611
612typedef std::map<int32, std::vector<int32> > SpellLinkedMap;
613
615{
620};
621
622typedef std::map<uint32, SpellCooldownOverride> SpellCooldownOverrideMap;
623
625
626inline bool IsProfessionSkill(uint32 skill)
627{
628 return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
629}
630
631inline bool IsProfessionOrRidingSkill(uint32 skill)
632{
633 return IsProfessionSkill(skill) || skill == SKILL_RIDING;
634}
635
636bool IsPartOfSkillLine(uint32 skillId, uint32 spellId);
637
638// spell diminishing returns
639DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, bool triggered);
644
645typedef std::set<uint32> TalentAdditionalSet;
646
647class SpellMgr
648{
649 // Constructors
650private:
651 SpellMgr();
652 ~SpellMgr();
653
654 // Accessors (const or static functions)
655public:
656 static SpellMgr* instance();
657
658 // creature immunity definitions loaded from DB
659 CreatureImmunities const* GetCreatureImmunities(int32 creatureImmunitiesId) const;
660
661 // Spell correctness for client using
662 static bool ComputeIsSpellValid(SpellInfo const* spellInfo, bool msg = true);
663 static bool IsSpellValid(SpellInfo const* spellInfo);
664 static bool CheckSpellValid(SpellInfo const* spellInfo, uint32 spellId, bool isTalent);
665
666 // Spell difficulty
667 [[nodiscard]] uint32 GetSpellDifficultyId(uint32 spellId) const;
668 void SetSpellDifficultyId(uint32 spellId, uint32 id);
669 uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const* caster) const;
670 SpellInfo const* GetSpellForDifficultyFromSpell(SpellInfo const* spell, Unit const* caster) const;
671
672 // Spell Ranks table
673 [[nodiscard]] SpellChainNode const* GetSpellChainNode(uint32 spell_id) const;
674 [[nodiscard]] uint32 GetFirstSpellInChain(uint32 spell_id) const;
675 [[nodiscard]] uint32 GetLastSpellInChain(uint32 spell_id) const;
676 [[nodiscard]] uint32 GetNextSpellInChain(uint32 spell_id) const;
677 [[nodiscard]] uint32 GetPrevSpellInChain(uint32 spell_id) const;
678 [[nodiscard]] uint8 GetSpellRank(uint32 spell_id) const;
679 // not strict check returns provided spell if rank not avalible
680 [[nodiscard]] uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const;
681
682 // Spell Required table
685 [[nodiscard]] bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const;
686
687 // Spell learning
688 [[nodiscard]] SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const;
689 [[nodiscard]] std::vector<uint32> GetSkillRankSpells(uint32 skillId) const;
690
691 // Spell target coordinates
692 [[nodiscard]] SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const;
693 [[nodiscard]] SpellCone const* GetSpellCone(uint32 spell_id) const;
694
695 // Spell Groups table
697 bool IsSpellMemberOfSpellGroup(uint32 spell_id, SpellGroup group_id) const;
698
700 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells) const;
701 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells, std::set<SpellGroup>& usedGroups) const;
702
703 // Spell Group Stack Rules table
704 bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, uint32 auraType, int32 amount, std::map<SpellGroup, int32>& groups) const;
705 SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
707
708 // Spell proc table
709 [[nodiscard]] SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
710 bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
711
712 // Spell bonus data table
713 [[nodiscard]] SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const;
714
715 // Spell threat table
716 [[nodiscard]] SpellThreatEntry const* GetSpellThreatEntry(uint32 spellID) const;
717
718 // Spell mixology table
719 [[nodiscard]] float GetSpellMixologyBonus(uint32 spellId) const;
720
722
723 [[nodiscard]] PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const;
724
725 [[nodiscard]] SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const;
726 [[nodiscard]] bool IsArenaAllowedEnchancment(uint32 ench_id) const;
727
728 [[nodiscard]] const std::vector<int32>* GetSpellLinked(int32 spell_id) const;
729
730 [[nodiscard]] PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const;
731 [[nodiscard]] PetDefaultSpellsEntry const* GetPetDefaultSpellsEntry(int32 id) const;
732
733 // Spell area
734 [[nodiscard]] SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const;
739
740 // SpellInfo object management
741 [[nodiscard]] SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
742 // Use this only with 100% valid spellIds
743 [[nodiscard]] SpellInfo const* AssertSpellInfo(uint32 spellId) const
744 {
745 ASSERT(spellId < GetSpellInfoStoreSize());
746 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
747 ASSERT(spellInfo);
748 return spellInfo;
749 }
750 // use this instead of AssertSpellInfo to have the problem logged instead of crashing the server
751 [[nodiscard]] SpellInfo const* CheckSpellInfo(uint32 spellId) const
752 {
753 if (spellId >= GetSpellInfoStoreSize())
754 {
755 LOG_ERROR("server", "spellId {} is not lower than GetSpellInfoStoreSize() ({})", spellId, GetSpellInfoStoreSize());
756 return nullptr;
757 }
758 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
759 if (!spellInfo)
760 {
761 LOG_ERROR("server", "spellId {} has invalid spellInfo", spellId);
762 return nullptr;
763 }
764 return spellInfo;
765 }
766 [[nodiscard]] uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); }
767
768 // Talent Additional Set
769 [[nodiscard]] bool IsAdditionalTalentSpell(uint32 spellId) const;
770
771 [[nodiscard]] bool HasSpellCooldownOverride(uint32 spellId) const;
772 [[nodiscard]] SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const;
773
774private:
775 SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
776
777 // Modifiers
778public:
779 // Loading data at server startup
782 void LoadSpellRanks();
783 void LoadSpellRequired();
786 void LoadSpellCones();
787 void LoadSpellGroups();
789 void LoadSpellProcs();
790 void LoadSpellBonuses();
791 void LoadSpellThreats();
792 void LoadSpellMixology();
794 void LoadSpellPetAuras();
797 void LoadSpellLinked();
800 void LoadSpellAreas();
801 void LoadSpellInfoStore();
811
812private:
840 PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry
844};
845
846#define sSpellMgr SpellMgr::instance()
847
848#endif
#define MAX_CREATURE_SPELL_DATA_SLOT
Definition DBCStructure.h:807
std::int32_t int32
Definition Define.h:103
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
std::uint16_t uint16
Definition Define.h:108
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
#define ASSERT
Definition Errors.h:68
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
SpellEffIndex
Definition SharedDefines.h:30
DiminishingGroup
Definition SharedDefines.h:3490
Gender
Definition SharedDefines.h:60
DiminishingReturnsType
Definition SharedDefines.h:3482
@ SKILL_COOKING
Definition SharedDefines.h:3151
@ SKILL_FISHING
Definition SharedDefines.h:3190
@ SKILL_RIDING
Definition SharedDefines.h:3224
@ SKILL_FIRST_AID
Definition SharedDefines.h:3125
bool IsPrimaryProfessionSkill(uint32 skill)
Definition SpellMgr.cpp:38
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
Definition SpellMgr.cpp:50
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
Definition SpellMgr.h:318
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
Definition SpellMgr.h:542
std::unordered_map< SpellGroup, std::unordered_set< uint32 > > SameEffectStackMap
Definition SpellMgr.h:372
std::map< uint32, SpellCone > SpellConeMap
Definition SpellMgr.h:401
bool IsProfessionOrRidingSkill(uint32 skill)
Definition SpellMgr.h:632
std::unordered_multimap< SpellGroup, int32 > SpellGroupSpellMap
Definition SpellMgr.h:357
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const *spellproto)
Definition SpellMgr.cpp:324
ProcFlagsHit
Definition SpellMgr.h:255
@ PROC_HIT_BLOCK
Definition SpellMgr.h:263
@ PROC_HIT_FULL_RESIST
Definition SpellMgr.h:260
@ PROC_HIT_FULL_BLOCK
Definition SpellMgr.h:270
@ PROC_HIT_MISS
Definition SpellMgr.h:259
@ PROC_HIT_INTERRUPT
Definition SpellMgr.h:269
@ PROC_HIT_NONE
Definition SpellMgr.h:256
@ PROC_HIT_DEFLECT
Definition SpellMgr.h:266
@ PROC_HIT_EVADE
Definition SpellMgr.h:264
@ PROC_HIT_DODGE
Definition SpellMgr.h:261
@ PROC_HIT_IMMUNE
Definition SpellMgr.h:265
@ PROC_HIT_ABSORB
Definition SpellMgr.h:267
@ PROC_HIT_PARRY
Definition SpellMgr.h:262
@ PROC_HIT_MASK_ALL
Definition SpellMgr.h:271
@ PROC_HIT_CRITICAL
Definition SpellMgr.h:258
@ PROC_HIT_NORMAL
Definition SpellMgr.h:257
@ PROC_HIT_REFLECT
Definition SpellMgr.h:268
std::map< uint32, float > SpellMixologyMap
Definition SpellMgr.h:382
DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const *spellproto, bool triggered)
Definition SpellMgr.cpp:107
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
Definition SpellMgr.h:567
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
Definition SpellMgr.h:394
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
Definition SpellMgr.cpp:379
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
Definition SpellMgr.h:354
bool IsProfessionSkill(uint32 skill)
Definition SpellMgr.h:627
std::multimap< uint32, SpellArea > SpellAreaMap
Definition SpellMgr.h:540
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition SpellMgr.h:544
std::map< uint32, uint32 > SpellDifficultySearcherMap
Definition SpellMgr.h:598
std::map< uint32, SpellCooldownOverride > SpellCooldownOverrideMap
Definition SpellMgr.h:623
std::map< int32, std::vector< int32 > > SpellLinkedMap
Definition SpellMgr.h:613
SpellGroup
Definition SpellMgr.h:331
@ SPELL_GROUP_NONE
Definition SpellMgr.h:332
@ SPELL_GROUP_CORE_RANGE_MAX
Definition SpellMgr.h:335
@ SPELL_GROUP_ELIXIR_BATTLE
Definition SpellMgr.h:333
@ SPELL_GROUP_ELIXIR_GUARDIAN
Definition SpellMgr.h:334
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
Definition SpellMgr.h:547
std::unordered_map< uint32, SpellChainNode > SpellChainMap
Definition SpellMgr.h:559
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
Definition SpellMgr.h:302
std::set< uint32 > TalentAdditionalSet
Definition SpellMgr.h:646
ProcAttributes
Definition SpellMgr.h:275
@ PROC_ATTR_REQ_MANA_COST
Definition SpellMgr.h:278
@ PROC_ATTR_CANT_PROC_FROM_ITEM_CAST
Definition SpellMgr.h:282
@ PROC_ATTR_USE_STACKS_FOR_CHARGES
Definition SpellMgr.h:280
@ PROC_ATTR_REDUCE_PROC_60
Definition SpellMgr.h:281
@ PROC_ATTR_REQ_EXP_OR_HONOR
Definition SpellMgr.h:276
@ PROC_ATTR_TRIGGERED_CAN_PROC
Definition SpellMgr.h:277
@ PROC_ATTR_REQ_SPELLMOD
Definition SpellMgr.h:279
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
Definition SpellMgr.h:543
std::unordered_map< uint32, SpellThreatEntry > SpellThreatMap
Definition SpellMgr.h:381
SpellGroupStackRule
Definition SpellMgr.h:361
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER
Definition SpellMgr.h:364
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE
Definition SpellMgr.h:363
@ SPELL_GROUP_STACK_RULE_DEFAULT
Definition SpellMgr.h:362
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT
Definition SpellMgr.h:365
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST
Definition SpellMgr.h:366
@ SPELL_GROUP_STACK_RULE_MAX
Definition SpellMgr.h:367
std::unordered_multimap< uint32, SpellGroup > SpellSpellGroupMap
Definition SpellMgr.h:353
std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
Definition SpellMgr.h:563
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
Definition SpellMgr.h:592
std::map< uint32, PetAura > SpellPetAuraMap
Definition SpellMgr.h:514
ICCBuff
Definition SpellMgr.h:517
@ ICC_RACEMASK_HORDE
Definition SpellMgr.h:519
@ ICC_AREA
Definition SpellMgr.h:518
@ ICC_RACEMASK_ALLIANCE
Definition SpellMgr.h:520
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
Definition SpellMgr.h:541
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
Definition SpellMgr.h:606
std::vector< bool > EnchantCustomAttribute
Definition SpellMgr.h:609
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
Definition SpellMgr.cpp:294
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
Definition SpellMgr.h:358
std::vector< uint32 > SpellCustomAttribute
Definition SpellMgr.h:608
std::unordered_map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
Definition SpellMgr.h:590
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
Definition SpellMgr.h:546
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition SpellMgr.h:593
@ PROC_SPELL_TYPE_NONE
Definition SpellMgr.h:238
@ PROC_SPELL_TYPE_HEAL
Definition SpellMgr.h:240
@ PROC_SPELL_TYPE_MASK_ALL
Definition SpellMgr.h:242
@ PROC_SPELL_TYPE_DAMAGE
Definition SpellMgr.h:239
@ PROC_SPELL_TYPE_NO_DMG_HEAL
Definition SpellMgr.h:241
std::unordered_map< uint32, SpellBonusEntry > SpellBonusMap
Definition SpellMgr.h:328
std::map< uint32, PetLevelupSpellSet > PetLevelupSpellMap
Definition SpellMgr.h:596
DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
Definition SpellMgr.cpp:313
EffectRadiusIndex
Definition SpellMgr.h:405
@ EFFECT_RADIUS_14_YARDS
Definition SpellMgr.h:458
@ EFFECT_RADIUS_500_YARDS
Definition SpellMgr.h:429
@ EFFECT_RADIUS_13_YARDS
Definition SpellMgr.h:416
@ EFFECT_RADIUS_7_YARDS
Definition SpellMgr.h:435
@ EFFECT_RADIUS_100_YARDS
Definition SpellMgr.h:411
@ EFFECT_RADIUS_45_YARDS_2
Definition SpellMgr.h:455
@ EFFECT_RADIUS_80_YARDS
Definition SpellMgr.h:430
@ EFFECT_RADIUS_20_YARDS
Definition SpellMgr.h:408
@ EFFECT_RADIUS_60_YARDS_2
Definition SpellMgr.h:449
@ EFFECT_RADIUS_8_YARDS
Definition SpellMgr.h:413
@ EFFECT_RADIUS_34_YARDS
Definition SpellMgr.h:437
@ EFFECT_RADIUS_45_YARDS
Definition SpellMgr.h:410
@ EFFECT_RADIUS_2_YARDS
Definition SpellMgr.h:406
@ EFFECT_RADIUS_50000_YARDS_2
Definition SpellMgr.h:452
@ EFFECT_RADIUS_44_YARDS
Definition SpellMgr.h:457
@ EFFECT_RADIUS_5_YARDS_3
Definition SpellMgr.h:450
@ EFFECT_RADIUS_15_YARDS
Definition SpellMgr.h:417
@ EFFECT_RADIUS_23_YARDS
Definition SpellMgr.h:460
@ EFFECT_RADIUS_55_YARDS
Definition SpellMgr.h:433
@ EFFECT_RADIUS_65_YARDS
Definition SpellMgr.h:423
@ EFFECT_RADIUS_32_YARDS
Definition SpellMgr.h:456
@ EFFECT_RADIUS_30_YARDS
Definition SpellMgr.h:409
@ EFFECT_RADIUS_1_YARD
Definition SpellMgr.h:415
@ EFFECT_RADIUS_9_YARDS
Definition SpellMgr.h:438
@ EFFECT_RADIUS_16_YARDS
Definition SpellMgr.h:441
@ EFFECT_RADIUS_60_YARDS
Definition SpellMgr.h:446
@ EFFECT_RADIUS_90_YARDS
Definition SpellMgr.h:447
@ EFFECT_RADIUS_130_YARDS
Definition SpellMgr.h:453
@ EFFECT_RADIUS_4_YARDS
Definition SpellMgr.h:425
@ EFFECT_RADIUS_25_YARDS
Definition SpellMgr.h:419
@ EFFECT_RADIUS_10_YARDS_2
Definition SpellMgr.h:443
@ EFFECT_RADIUS_15_YARDS_2
Definition SpellMgr.h:445
@ EFFECT_RADIUS_5_YARDS
Definition SpellMgr.h:407
@ EFFECT_RADIUS_40_YARDS
Definition SpellMgr.h:422
@ EFFECT_RADIUS_70_YARDS
Definition SpellMgr.h:424
@ EFFECT_RADIUS_5_YARDS_2
Definition SpellMgr.h:444
@ EFFECT_RADIUS_3_YARDS
Definition SpellMgr.h:414
@ EFFECT_RADIUS_38_YARDS
Definition SpellMgr.h:454
@ EFFECT_RADIUS_21_YARDS
Definition SpellMgr.h:436
@ EFFECT_RADIUS_50_YARDS
Definition SpellMgr.h:426
@ EFFECT_RADIUS_50000_YARDS
Definition SpellMgr.h:427
@ EFFECT_RADIUS_60_YARDS_3
Definition SpellMgr.h:451
@ EFFECT_RADIUS_18_YARDS
Definition SpellMgr.h:418
@ EFFECT_RADIUS_200_YARDS
Definition SpellMgr.h:421
@ EFFECT_RADIUS_12_YARDS
Definition SpellMgr.h:431
@ EFFECT_RADIUS_10_YARDS
Definition SpellMgr.h:412
@ EFFECT_RADIUS_0_YARDS
Definition SpellMgr.h:434
@ EFFECT_RADIUS_3_5_YARDS
Definition SpellMgr.h:461
@ EFFECT_RADIUS_150_YARDS
Definition SpellMgr.h:439
@ EFFECT_RADIUS_80_YARDS_2
Definition SpellMgr.h:462
@ EFFECT_RADIUS_35_YARDS
Definition SpellMgr.h:420
@ EFFECT_RADIUS_47_YARDS
Definition SpellMgr.h:459
@ EFFECT_RADIUS_6_YARDS
Definition SpellMgr.h:428
@ EFFECT_RADIUS_11_YARDS
Definition SpellMgr.h:440
@ EFFECT_RADIUS_15_YARDS_3
Definition SpellMgr.h:448
@ EFFECT_RADIUS_0_5_YARDS
Definition SpellMgr.h:442
@ EFFECT_RADIUS_99_YARDS
Definition SpellMgr.h:432
ProcFlagsSpellPhase
Definition SpellMgr.h:246
@ PROC_SPELL_PHASE_FINISH
Definition SpellMgr.h:250
@ PROC_SPELL_PHASE_NONE
Definition SpellMgr.h:247
@ PROC_SPELL_PHASE_CAST
Definition SpellMgr.h:248
@ PROC_SPELL_PHASE_HIT
Definition SpellMgr.h:249
@ PROC_SPELL_PHASE_MASK_ALL
Definition SpellMgr.h:251
std::multimap< uint32, uint32 > SpellsRequiringSpellMap
Definition SpellMgr.h:566
EnchantProcAttributes
Definition SpellMgr.h:305
@ ENCHANT_PROC_ATTR_WHITE_HIT
Definition SpellMgr.h:307
@ ENCHANT_PROC_ATTR_EXCLUSIVE
Definition SpellMgr.h:306
std::multimap< uint32, uint32 > SpellRequiredMap
Definition SpellMgr.h:562
std::vector< SpellInfo * > SpellInfoMap
Definition SpellMgr.h:611
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
Definition SpellMgr.h:545
std::unordered_map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
Definition SpellMgr.h:370
std::unordered_map< int32, CreatureImmunities > CreatureImmunitiesMap
Definition SpellMgr.h:581
std::multimap< uint32, uint32 > PetLevelupSpellSet
Definition SpellMgr.h:595
DiminishingLevels
Definition Unit.h:268
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition IteratorPair.h:32
Definition SpellMgr.h:467
int32 damage
Definition SpellMgr.h:512
int32 GetDamage() const
Definition SpellMgr.h:504
std::unordered_map< uint32, uint32 > PetAuraMap
Definition SpellMgr.h:469
uint32 GetAura(uint32 petEntry) const
Definition SpellMgr.h:483
PetAura()
Definition SpellMgr.h:472
bool removeOnChangePet
Definition SpellMgr.h:511
PetAuraMap auras
Definition SpellMgr.h:510
bool IsRemovedOnChangePet() const
Definition SpellMgr.h:499
void AddAura(uint32 petEntry, uint32 aura)
Definition SpellMgr.h:494
Definition Player.h:1084
Definition Unit.h:440
Definition SpellInfo.h:340
Definition SpellMgr.h:649
SpellRequiredMap mSpellReq
Definition SpellMgr.h:817
CreatureImmunities const * GetCreatureImmunities(int32 creatureImmunitiesId) const
Definition SpellMgr.cpp:60
SpellLinkedMap mSpellLinkedMap
Definition SpellMgr.h:831
SpellInfo const * AssertSpellInfo(uint32 spellId) const
Definition SpellMgr.h:744
void LoadSpellLinked()
Definition SpellMgr.cpp:2584
SkillLineAbilityMap mSkillLineAbilityMap
Definition SpellMgr.h:839
SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1037
TalentAdditionalSet mTalentSpellAdditionalSet
Definition SpellMgr.h:844
EnchantCustomAttribute mEnchantCustomAttr
Definition SpellMgr.h:833
void SetSpellDifficultyId(uint32 spellId, uint32 id)
Definition SpellMgr.cpp:533
static bool ComputeIsSpellValid(SpellInfo const *spellInfo, bool msg=true)
Some checks for spells, to prevent adding deprecated/broken spells for trainers, spell book,...
Definition SpellMgr.cpp:419
PetLevelupSpellSet const * GetPetLevelupSpellList(uint32 petFamily) const
Definition SpellMgr.cpp:1020
void LoadSpellInfoStore()
Definition SpellMgr.cpp:3022
uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const *caster) const
Definition SpellMgr.cpp:538
void LoadSpellBonuses()
Definition SpellMgr.cpp:2295
SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1047
SpellAreaForAuraMap mSpellAreaForAuraMap
Definition SpellMgr.h:837
SpellChainMap mSpellChains
Definition SpellMgr.h:815
void LoadEnchantCustomAttr()
Definition SpellMgr.cpp:2498
void LoadSpellCones()
Definition SpellMgr.cpp:1613
void UnloadSpellInfoStore()
Definition SpellMgr.cpp:3095
void LoadSpellAreas()
Definition SpellMgr.cpp:2811
uint32 GetNextSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:619
static SpellMgr * instance()
Definition SpellMgr.cpp:412
SpellPetAuraMap mSpellPetAuraMap
Definition SpellMgr.h:830
SpellLearnSkillMap mSpellLearnSkills
Definition SpellMgr.h:818
void LoadSpellCooldownOverrides()
Definition SpellMgr.cpp:3053
SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1042
SpellBonusEntry const * GetSpellBonusData(uint32 spellId) const
Definition SpellMgr.cpp:947
void LoadSkillLineAbilityMap()
Definition SpellMgr.cpp:2413
SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:987
static bool CheckSpellValid(SpellInfo const *spellInfo, uint32 spellId, bool isTalent)
Definition SpellMgr.cpp:508
float GetSpellMixologyBonus(uint32 spellId) const
Definition SpellMgr.cpp:978
std::vector< uint32 > GetSkillRankSpells(uint32 skillId) const
Definition SpellMgr.cpp:692
SpellAreaForQuestMap mSpellAreaForQuestEndMap
Definition SpellMgr.h:836
SpellGroupSpellMapBounds GetSpellGroupSpellMapBounds(SpellGroup group_id) const
Definition SpellMgr.cpp:745
PetDefaultSpellsMap mPetDefaultSpellsMap
Definition SpellMgr.h:841
void LoadCreatureImmunities()
Definition SpellMgr.cpp:65
uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict=false) const
Definition SpellMgr.cpp:645
SpellLearnSkillNode const * GetSpellLearnSkill(uint32 spell_id) const
Definition SpellMgr.cpp:683
bool IsSpellMemberOfSpellGroup(uint32 spell_id, SpellGroup group_id) const
Definition SpellMgr.cpp:734
SpellMixologyMap mSpellMixologyMap
Definition SpellMgr.h:829
void LoadSpellInfoCustomAttributes()
Definition SpellMgr.cpp:3166
const std::vector< int32 > * GetSpellLinked(int32 spell_id) const
Definition SpellMgr.cpp:1014
SpellCone const * GetSpellCone(uint32 spell_id) const
Definition SpellMgr.cpp:718
SpellInfo const * GetSpellInfo(uint32 spellId) const
Definition SpellMgr.h:742
uint32 GetPrevSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:628
bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const
Definition SpellMgr.cpp:667
void LoadSpellThreats()
Definition SpellMgr.cpp:2336
SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1052
void LoadSpellRequired()
Definition SpellMgr.cpp:1390
SpellInfo const * GetSpellForDifficultyFromSpell(SpellInfo const *spell, Unit const *caster) const
Definition SpellMgr.cpp:580
void LoadSpellJumpDistances()
Definition SpellMgr.cpp:3130
void LoadSpellTargetPositions()
Definition SpellMgr.cpp:1508
SpellDifficultySearcherMap mSpellDifficultySearcherMap
Definition SpellMgr.h:814
void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set< uint32 > &foundSpells) const
Definition SpellMgr.cpp:750
void LoadSpellInfoImmunities()
Definition SpellMgr.cpp:3890
void LoadSpellLearnSkills()
Definition SpellMgr.cpp:1455
uint32 GetLastSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:611
Acore::IteratorPair< SpellRequiredMap::const_iterator > GetSpellsRequiredForSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:657
void LoadSpellTalentRanks()
Definition SpellMgr.cpp:1218
SpellGroupStackRule GetSpellGroupStackRule(SpellGroup group_id) const
Definition SpellMgr.cpp:858
SpellThreatEntry const * GetSpellThreatEntry(uint32 spellID) const
Definition SpellMgr.cpp:963
void LoadSpellGroupStackRules()
Definition SpellMgr.cpp:1781
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition SpellMgr.cpp:490
SpellGroupStackMap mSpellGroupStack
Definition SpellMgr.h:823
uint32 GetFirstSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:603
bool CanSpellTriggerProcOnEvent(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
Definition SpellMgr.cpp:875
SpellEnchantProcEventMap mSpellEnchantProcEventMap
Definition SpellMgr.h:832
SpellConeMap mSpellCones
Definition SpellMgr.h:820
void LoadPetDefaultSpells()
Definition SpellMgr.cpp:2731
PetLevelupSpellMap mPetLevelupSpellMap
Definition SpellMgr.h:840
SpellInfo const * CheckSpellInfo(uint32 spellId) const
Definition SpellMgr.h:752
SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const *spellInfo1, SpellInfo const *spellInfo2) const
Definition SpellMgr.cpp:811
bool IsAdditionalTalentSpell(uint32 spellId) const
Definition SpellMgr.cpp:678
SpellProcMap mSpellProcMap
Definition SpellMgr.h:825
SpellsRequiringSpellMap mSpellsReqSpell
Definition SpellMgr.h:816
CreatureImmunitiesMap mCreatureImmunities
Definition SpellMgr.h:826
void LoadSpellInfoCorrections()
Definition SpellInfoCorrections.cpp:39
SpellTargetPositionMap mSpellTargetPositions
Definition SpellMgr.h:819
SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:3089
SpellProcEntry const * GetSpellProcEntry(uint32 spellId) const
Definition SpellMgr.cpp:867
SpellGroupSpellMap mSpellGroupSpell
Definition SpellMgr.h:822
void LoadSpellSpecificAndAuraState()
Definition SpellMgr.cpp:3112
PetDefaultSpellsEntry const * GetPetDefaultSpellsEntry(int32 id) const
Definition SpellMgr.cpp:1029
SpellTargetPosition const * GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const
Definition SpellMgr.cpp:710
SameEffectStackMap mSpellSameEffectStack
Definition SpellMgr.h:824
SpellCooldownOverrideMap mSpellCooldownOverrideMap
Definition SpellMgr.h:843
SpellEnchantProcEntry const * GetSpellEnchantProcEvent(uint32 enchId) const
Definition SpellMgr.cpp:1001
SpellAreaForAreaMap mSpellAreaForAreaMap
Definition SpellMgr.h:838
uint32 GetSpellDifficultyId(uint32 spellId) const
Definition SpellMgr.cpp:527
uint8 GetSpellRank(uint32 spell_id) const
Definition SpellMgr.cpp:637
void LoadSpellPetAuras()
Definition SpellMgr.cpp:2435
void UnloadSpellInfoImplicitTargetConditionLists()
Definition SpellMgr.cpp:3103
SpellSpellGroupMapBounds GetSpellSpellGroupMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:728
SpellAreaMap mSpellAreaMap
Definition SpellMgr.h:834
void LoadSpellEnchantProcData()
Definition SpellMgr.cpp:2539
uint32 GetSpellInfoStoreSize() const
Definition SpellMgr.h:767
SpellBonusMap mSpellBonusMap
Definition SpellMgr.h:827
SpellMgr()
Definition SpellMgr.cpp:403
SpellChainNode const * GetSpellChainNode(uint32 spell_id) const
Definition SpellMgr.cpp:594
SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:662
void LoadSpellRanks()
Definition SpellMgr.cpp:1279
bool AddSameEffectStackRuleSpellGroups(SpellInfo const *spellInfo, uint32 auraType, int32 amount, std::map< SpellGroup, int32 > &groups) const
Definition SpellMgr.cpp:777
void LoadSpellGroups()
Definition SpellMgr.cpp:1700
void LoadPetLevelupSpellMap()
Definition SpellMgr.cpp:2637
SpellSpellGroupMap mSpellSpellGroup
Definition SpellMgr.h:821
PetAura const * GetPetAura(uint32 spell_id, uint8 eff) const
Definition SpellMgr.cpp:992
void LoadSpellMixology()
Definition SpellMgr.cpp:2377
SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const
Definition SpellMgr.cpp:1057
bool IsArenaAllowedEnchancment(uint32 ench_id) const
Definition SpellMgr.cpp:1009
SpellThreatMap mSpellThreatMap
Definition SpellMgr.h:828
SpellAreaForQuestMap mSpellAreaForQuestMap
Definition SpellMgr.h:835
SpellInfoMap mSpellInfoMap
Definition SpellMgr.h:842
void LoadSpellProcs()
Definition SpellMgr.cpp:2006
~SpellMgr()
Definition SpellMgr.cpp:407
SpellInfo * _GetSpellInfo(uint32 spellId)
Definition SpellMgr.h:776
void UnloadSpellInfoChains()
Definition SpellMgr.cpp:1210
bool HasSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:3084
Definition Unit.h:664
Definition Util.h:442
STL namespace.
Definition SpellMgr.h:571
std::bitset< MAX_MECHANIC > Mechanic
Definition SpellMgr.h:574
bool ImmuneAoE
Definition SpellMgr.h:577
std::bitset< MAX_SPELL_SCHOOL > School
Definition SpellMgr.h:572
std::vector< SpellEffects > Effect
Definition SpellMgr.h:575
bool ImmuneChain
Definition SpellMgr.h:578
std::bitset< DISPEL_MAX > DispelType
Definition SpellMgr.h:573
std::vector< AuraType > Aura
Definition SpellMgr.h:576
Definition SpellMgr.h:601
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
Definition SpellMgr.h:602
Definition SpellMgr.h:524
uint32 questEnd
Definition SpellMgr.h:528
bool autocast
Definition SpellMgr.h:534
uint32 raceMask
Definition SpellMgr.h:530
uint32 questStartStatus
Definition SpellMgr.h:532
uint32 spellId
Definition SpellMgr.h:525
uint32 questEndStatus
Definition SpellMgr.h:533
int32 auraSpell
Definition SpellMgr.h:529
bool IsFitToRequirements(Player const *player, uint32 newZone, uint32 newArea) const
Definition SpellMgr.cpp:1062
Gender gender
Definition SpellMgr.h:531
uint32 areaId
Definition SpellMgr.h:526
uint32 questStart
Definition SpellMgr.h:527
Definition SpellMgr.h:321
float ap_dot_bonus
Definition SpellMgr.h:325
float dot_damage
Definition SpellMgr.h:323
float ap_bonus
Definition SpellMgr.h:324
float direct_damage
Definition SpellMgr.h:322
Definition SpellMgr.h:551
SpellInfo const * last
Definition SpellMgr.h:555
SpellInfo const * next
Definition SpellMgr.h:553
uint8 rank
Definition SpellMgr.h:556
SpellInfo const * first
Definition SpellMgr.h:554
SpellInfo const * prev
Definition SpellMgr.h:552
Definition SpellMgr.h:397
int16_t cone_degrees
Definition SpellMgr.h:398
Definition SpellMgr.h:616
uint32 StartRecoveryTime
Definition SpellMgr.h:619
uint32 CategoryRecoveryTime
Definition SpellMgr.h:618
uint32 StartRecoveryCategory
Definition SpellMgr.h:620
uint32 RecoveryTime
Definition SpellMgr.h:617
Definition SpellMgr.h:311
uint32 procEx
Definition SpellMgr.h:314
uint32 attributeMask
Definition SpellMgr.h:315
uint32 customChance
Definition SpellMgr.h:312
float PPMChance
Definition SpellMgr.h:313
Definition SpellMgr.h:583
uint16 value
Definition SpellMgr.h:586
uint16 step
Definition SpellMgr.h:585
uint16 maxvalue
Definition SpellMgr.h:587
uint16 skill
Definition SpellMgr.h:584
Definition SpellMgr.h:286
uint32 SpellFamilyName
Definition SpellMgr.h:288
float ProcsPerMinute
Definition SpellMgr.h:296
Milliseconds Cooldown
Definition SpellMgr.h:298
uint32 Charges
Definition SpellMgr.h:299
uint32 AttributesMask
Definition SpellMgr.h:294
flag96 SpellFamilyMask
Definition SpellMgr.h:289
uint32 HitMask
Definition SpellMgr.h:293
uint32 SpellTypeMask
Definition SpellMgr.h:291
uint32 ProcFlags
Definition SpellMgr.h:290
uint32 SpellPhaseMask
Definition SpellMgr.h:292
uint32 SchoolMask
Definition SpellMgr.h:287
uint32 DisableEffectsMask
Definition SpellMgr.h:295
float Chance
Definition SpellMgr.h:297
Definition SpellMgr.h:386
float target_Z
Definition SpellMgr.h:390
uint32 target_mapId
Definition SpellMgr.h:387
float target_Y
Definition SpellMgr.h:389
float target_Orientation
Definition SpellMgr.h:391
float target_X
Definition SpellMgr.h:388
Definition SpellMgr.h:375
int32 flatMod
Definition SpellMgr.h:376
float apPctMod
Definition SpellMgr.h:378
float pctMod
Definition SpellMgr.h:377

◆ MELEE_BASED_TRIGGER_MASK

#define MELEE_BASED_TRIGGER_MASK
Value:
@ PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:122
@ PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
Definition SpellMgr.h:120
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
Definition SpellMgr.h:113
@ PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:116
@ PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:123
@ PROC_FLAG_DONE_RANGED_AUTO_ATTACK
Definition SpellMgr.h:119
@ PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
Definition SpellMgr.h:114
@ PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:117

◆ SPELL_GROUP_DB_RANGE_MIN

#define SPELL_GROUP_DB_RANGE_MIN   1000

◆ SPELL_LINKED_MAX_SPELLS

#define SPELL_LINKED_MAX_SPELLS   200000

◆ SPELL_RELIC_COOLDOWN

#define SPELL_RELIC_COOLDOWN   1

◆ sSpellMgr

#define sSpellMgr   SpellMgr::instance()

Typedef Documentation

◆ CreatureImmunitiesMap

typedef std::unordered_map<int32, CreatureImmunities> CreatureImmunitiesMap

◆ EnchantCustomAttribute

typedef std::vector<bool> EnchantCustomAttribute

◆ PetDefaultSpellsMap

◆ PetLevelupSpellMap

◆ PetLevelupSpellSet

typedef std::multimap<uint32, uint32> PetLevelupSpellSet

◆ SameEffectStackMap

typedef std::unordered_map<SpellGroup, std::unordered_set<uint32 > > SameEffectStackMap

◆ SkillLineAbilityMap

typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap

◆ SkillLineAbilityMapBounds

typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds

◆ SpellAreaForAreaMap

typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap

◆ SpellAreaForAreaMapBounds

typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds

◆ SpellAreaForAuraMap

typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap

◆ SpellAreaForAuraMapBounds

typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds

◆ SpellAreaForQuestMap

typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap

◆ SpellAreaForQuestMapBounds

typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds

◆ SpellAreaMap

typedef std::multimap<uint32, SpellArea> SpellAreaMap

◆ SpellAreaMapBounds

typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds

◆ SpellBonusMap

typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap

◆ SpellChainMap

typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap

◆ SpellConeMap

typedef std::map<uint32 , SpellCone> SpellConeMap

◆ SpellCooldownOverrideMap

◆ SpellCustomAttribute

typedef std::vector<uint32> SpellCustomAttribute

◆ SpellDifficultySearcherMap

◆ SpellEnchantProcEventMap

◆ SpellGroupSpellMap

typedef std::unordered_multimap<SpellGroup, int32> SpellGroupSpellMap

◆ SpellGroupSpellMapBounds

typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator> SpellGroupSpellMapBounds

◆ SpellGroupStackMap

typedef std::unordered_map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap

◆ SpellInfoMap

typedef std::vector<SpellInfo*> SpellInfoMap

◆ SpellLearnSkillMap

typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap

◆ SpellLinkedMap

typedef std::map<int32, std::vector<int32> > SpellLinkedMap

◆ SpellMixologyMap

typedef std::map<uint32, float> SpellMixologyMap

◆ SpellPetAuraMap

typedef std::map<uint32, PetAura> SpellPetAuraMap

◆ SpellProcMap

typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap

◆ SpellRequiredMap

typedef std::multimap<uint32, uint32> SpellRequiredMap

◆ SpellRequiredMapBounds

typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds

◆ SpellSpellGroupMap

typedef std::unordered_multimap<uint32, SpellGroup> SpellSpellGroupMap

◆ SpellSpellGroupMapBounds

typedef std::pair<SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator> SpellSpellGroupMapBounds

◆ SpellsRequiringSpellMap

typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap

◆ SpellsRequiringSpellMapBounds

typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds

◆ SpellTargetPositionMap

◆ SpellThreatMap

typedef std::unordered_map<uint32, SpellThreatEntry> SpellThreatMap

◆ TalentAdditionalSet

typedef std::set<uint32> TalentAdditionalSet

Enumeration Type Documentation

◆ EffectRadiusIndex

Enumerator
EFFECT_RADIUS_2_YARDS 
EFFECT_RADIUS_5_YARDS 
EFFECT_RADIUS_20_YARDS 
EFFECT_RADIUS_30_YARDS 
EFFECT_RADIUS_45_YARDS 
EFFECT_RADIUS_100_YARDS 
EFFECT_RADIUS_10_YARDS 
EFFECT_RADIUS_8_YARDS 
EFFECT_RADIUS_3_YARDS 
EFFECT_RADIUS_1_YARD 
EFFECT_RADIUS_13_YARDS 
EFFECT_RADIUS_15_YARDS 
EFFECT_RADIUS_18_YARDS 
EFFECT_RADIUS_25_YARDS 
EFFECT_RADIUS_35_YARDS 
EFFECT_RADIUS_200_YARDS 
EFFECT_RADIUS_40_YARDS 
EFFECT_RADIUS_65_YARDS 
EFFECT_RADIUS_70_YARDS 
EFFECT_RADIUS_4_YARDS 
EFFECT_RADIUS_50_YARDS 
EFFECT_RADIUS_50000_YARDS 
EFFECT_RADIUS_6_YARDS 
EFFECT_RADIUS_500_YARDS 
EFFECT_RADIUS_80_YARDS 
EFFECT_RADIUS_12_YARDS 
EFFECT_RADIUS_99_YARDS 
EFFECT_RADIUS_55_YARDS 
EFFECT_RADIUS_0_YARDS 
EFFECT_RADIUS_7_YARDS 
EFFECT_RADIUS_21_YARDS 
EFFECT_RADIUS_34_YARDS 
EFFECT_RADIUS_9_YARDS 
EFFECT_RADIUS_150_YARDS 
EFFECT_RADIUS_11_YARDS 
EFFECT_RADIUS_16_YARDS 
EFFECT_RADIUS_0_5_YARDS 
EFFECT_RADIUS_10_YARDS_2 
EFFECT_RADIUS_5_YARDS_2 
EFFECT_RADIUS_15_YARDS_2 
EFFECT_RADIUS_60_YARDS 
EFFECT_RADIUS_90_YARDS 
EFFECT_RADIUS_15_YARDS_3 
EFFECT_RADIUS_60_YARDS_2 
EFFECT_RADIUS_5_YARDS_3 
EFFECT_RADIUS_60_YARDS_3 
EFFECT_RADIUS_50000_YARDS_2 
EFFECT_RADIUS_130_YARDS 
EFFECT_RADIUS_38_YARDS 
EFFECT_RADIUS_45_YARDS_2 
EFFECT_RADIUS_32_YARDS 
EFFECT_RADIUS_44_YARDS 
EFFECT_RADIUS_14_YARDS 
EFFECT_RADIUS_47_YARDS 
EFFECT_RADIUS_23_YARDS 
EFFECT_RADIUS_3_5_YARDS 
EFFECT_RADIUS_80_YARDS_2 
405{
442 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
461 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
463};

◆ EnchantProcAttributes

Enumerator
ENCHANT_PROC_ATTR_EXCLUSIVE 
ENCHANT_PROC_ATTR_WHITE_HIT 
305{
306 ENCHANT_PROC_ATTR_EXCLUSIVE = 0x1, // Only one instance of that effect can be active
307 ENCHANT_PROC_ATTR_WHITE_HIT = 0x2 // Enchant shall only proc off white hits (not abilities)
308};

◆ ICCBuff

enum ICCBuff
Enumerator
ICC_AREA 
ICC_RACEMASK_HORDE 
ICC_RACEMASK_ALLIANCE 
517{
518 ICC_AREA = 4812,
519 ICC_RACEMASK_HORDE = 690,
521};

◆ ProcAttributes

Enumerator
PROC_ATTR_REQ_EXP_OR_HONOR 
PROC_ATTR_TRIGGERED_CAN_PROC 
PROC_ATTR_REQ_MANA_COST 
PROC_ATTR_REQ_SPELLMOD 
PROC_ATTR_USE_STACKS_FOR_CHARGES 
PROC_ATTR_REDUCE_PROC_60 
PROC_ATTR_CANT_PROC_FROM_ITEM_CAST 
275{
276 PROC_ATTR_REQ_EXP_OR_HONOR = 0x0000001, // requires proc target to give exp or honor for aura proc
277 PROC_ATTR_TRIGGERED_CAN_PROC = 0x0000002, // aura can proc even with triggered spells
278 PROC_ATTR_REQ_MANA_COST = 0x0000004, // requires triggering spell to have a mana cost for aura proc
279 PROC_ATTR_REQ_SPELLMOD = 0x0000008, // requires triggering spell to be affected by proccing aura to drop charges
280 PROC_ATTR_USE_STACKS_FOR_CHARGES = 0x0000010, // consuming proc drops a stack from proccing aura instead of charge
281 PROC_ATTR_REDUCE_PROC_60 = 0x0000080, // aura should have a reduced chance to proc if level of proc actor > 60
282 PROC_ATTR_CANT_PROC_FROM_ITEM_CAST = 0x0000100, // do not allow aura proc if proc is caused by a spell casted by item
283};

◆ ProcFlags

enum ProcFlags
Enumerator
PROC_FLAG_NONE 
PROC_FLAG_KILLED 
PROC_FLAG_KILL 
PROC_FLAG_DONE_MELEE_AUTO_ATTACK 
PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK 
PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS 
PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS 
PROC_FLAG_DONE_RANGED_AUTO_ATTACK 
PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK 
PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS 
PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS 
PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS 
PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS 
PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG 
PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG 
PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS 
PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS 
PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG 
PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG 
PROC_FLAG_DONE_PERIODIC 
PROC_FLAG_TAKEN_PERIODIC 
PROC_FLAG_TAKEN_DAMAGE 
PROC_FLAG_DONE_TRAP_ACTIVATION 
PROC_FLAG_DONE_MAINHAND_ATTACK 
PROC_FLAG_DONE_OFFHAND_ATTACK 
PROC_FLAG_DEATH 
AUTO_ATTACK_PROC_FLAG_MASK 
MELEE_PROC_FLAG_MASK 
RANGED_PROC_FLAG_MASK 
SPELL_PROC_FLAG_MASK 
PERIODIC_PROC_FLAG_MASK 
DONE_HIT_PROC_FLAG_MASK 
TAKEN_HIT_PROC_FLAG_MASK 
REQ_SPELL_PHASE_PROC_FLAG_MASK 
107{
108 PROC_FLAG_NONE = 0x00000000,
109
110 PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - not sure about this flag
111 PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward)
112
113 PROC_FLAG_DONE_MELEE_AUTO_ATTACK = 0x00000004, // 02 Done melee auto attack
114 PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK = 0x00000008, // 03 Taken melee auto attack
115
116 PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS = 0x00000010, // 04 Done attack by Spell that has dmg class melee
117 PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS = 0x00000020, // 05 Taken attack by Spell that has dmg class melee
118
119 PROC_FLAG_DONE_RANGED_AUTO_ATTACK = 0x00000040, // 06 Done ranged auto attack
120 PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK = 0x00000080, // 07 Taken ranged auto attack
121
122 PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS = 0x00000100, // 08 Done attack by Spell that has dmg class ranged
123 PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS = 0x00000200, // 09 Taken attack by Spell that has dmg class ranged
124
125 PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS = 0x00000400, // 10 Done positive spell that has dmg class none
126 PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS = 0x00000800, // 11 Taken positive spell that has dmg class none
127
128 PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG = 0x00001000, // 12 Done negative spell that has dmg class none
129 PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG = 0x00002000, // 13 Taken negative spell that has dmg class none
130
131 PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS = 0x00004000, // 14 Done positive spell that has dmg class magic
132 PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS = 0x00008000, // 15 Taken positive spell that has dmg class magic
133
134 PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG = 0x00010000, // 16 Done negative spell that has dmg class magic
135 PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG = 0x00020000, // 17 Taken negative spell that has dmg class magic
136
137 PROC_FLAG_DONE_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing)
138 PROC_FLAG_TAKEN_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing)
139
140 PROC_FLAG_TAKEN_DAMAGE = 0x00100000, // 20 Taken any damage
141 PROC_FLAG_DONE_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation (possibly needs name change to ON_GAMEOBJECT_CAST or USE)
142
143 PROC_FLAG_DONE_MAINHAND_ATTACK = 0x00400000, // 22 Done main-hand melee attacks (spell and autoattack)
144 PROC_FLAG_DONE_OFFHAND_ATTACK = 0x00800000, // 23 Done off-hand melee attacks (spell and autoattack)
145
146 PROC_FLAG_DEATH = 0x01000000, // 24 Died in any way
147
148 // flag masks
151
155
158
168
170
177
183
185};
@ MELEE_PROC_FLAG_MASK
Definition SpellMgr.h:152
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS
Definition SpellMgr.h:131
@ AUTO_ATTACK_PROC_FLAG_MASK
Definition SpellMgr.h:149
@ PROC_FLAG_DONE_PERIODIC
Definition SpellMgr.h:137
@ TAKEN_HIT_PROC_FLAG_MASK
Definition SpellMgr.h:178
@ PERIODIC_PROC_FLAG_MASK
Definition SpellMgr.h:169
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS
Definition SpellMgr.h:125
@ PROC_FLAG_KILLED
Definition SpellMgr.h:110
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:135
@ PROC_FLAG_DEATH
Definition SpellMgr.h:146
@ PROC_FLAG_TAKEN_PERIODIC
Definition SpellMgr.h:138
@ REQ_SPELL_PHASE_PROC_FLAG_MASK
Definition SpellMgr.h:184
@ PROC_FLAG_KILL
Definition SpellMgr.h:111
@ PROC_FLAG_DONE_MAINHAND_ATTACK
Definition SpellMgr.h:143
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG
Definition SpellMgr.h:129
@ PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG
Definition SpellMgr.h:128
@ PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS
Definition SpellMgr.h:132
@ PROC_FLAG_TAKEN_DAMAGE
Definition SpellMgr.h:140
@ RANGED_PROC_FLAG_MASK
Definition SpellMgr.h:156
@ PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS
Definition SpellMgr.h:126
@ SPELL_PROC_FLAG_MASK
Definition SpellMgr.h:159
@ DONE_HIT_PROC_FLAG_MASK
Definition SpellMgr.h:171
@ PROC_FLAG_DONE_TRAP_ACTIVATION
Definition SpellMgr.h:141
@ PROC_FLAG_DONE_OFFHAND_ATTACK
Definition SpellMgr.h:144
@ PROC_FLAG_NONE
Definition SpellMgr.h:108
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:134

◆ ProcFlagsExLegacy

Enumerator
PROC_EX_NONE 
PROC_EX_NORMAL_HIT 
PROC_EX_CRITICAL_HIT 
PROC_EX_MISS 
PROC_EX_RESIST 
PROC_EX_DODGE 
PROC_EX_PARRY 
PROC_EX_BLOCK 
PROC_EX_EVADE 
PROC_EX_IMMUNE 
PROC_EX_DEFLECT 
PROC_EX_ABSORB 
PROC_EX_REFLECT 
PROC_EX_INTERRUPT 
PROC_EX_FULL_BLOCK 
PROC_EX_RESERVED2 
PROC_EX_NOT_ACTIVE_SPELL 
PROC_EX_EX_TRIGGER_ALWAYS 
PROC_EX_EX_ONE_TIME_TRIGGER 
PROC_EX_ONLY_ACTIVE_SPELL 
PROC_EX_NO_OVERHEAL 
PROC_EX_NO_AURA_REFRESH 
PROC_EX_ONLY_FIRST_TICK 
PROC_EX_INTERNAL_CANT_PROC 
PROC_EX_INTERNAL_DOT 
PROC_EX_INTERNAL_HOT 
PROC_EX_INTERNAL_TRIGGERED 
PROC_EX_INTERNAL_REQ_FAMILY 
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 all 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 PROC_EX_NO_OVERHEAL = 0x0080000, // Proc if heal did some work
219 PROC_EX_NO_AURA_REFRESH = 0x0100000, // Proc if aura was not refreshed
220 PROC_EX_ONLY_FIRST_TICK = 0x0200000, // Proc only on first tick (in case of periodic spells)
221
222 // Flags for internal use - do not use these in db!
223 PROC_EX_INTERNAL_CANT_PROC = 0x0800000,
224 PROC_EX_INTERNAL_DOT = 0x1000000,
225 PROC_EX_INTERNAL_HOT = 0x2000000,
226 PROC_EX_INTERNAL_TRIGGERED = 0x4000000,
228};
@ PROC_EX_NONE
Definition SpellMgr.h:198
@ PROC_EX_NO_OVERHEAL
Definition SpellMgr.h:218
@ PROC_EX_NO_AURA_REFRESH
Definition SpellMgr.h:219
@ PROC_EX_INTERNAL_CANT_PROC
Definition SpellMgr.h:223
@ PROC_EX_RESERVED2
Definition SpellMgr.h:213
@ PROC_EX_INTERNAL_DOT
Definition SpellMgr.h:224
@ PROC_EX_INTERNAL_HOT
Definition SpellMgr.h:225
@ PROC_EX_ONLY_ACTIVE_SPELL
Definition SpellMgr.h:217
@ PROC_EX_FULL_BLOCK
Definition SpellMgr.h:212
@ PROC_EX_EX_ONE_TIME_TRIGGER
Definition SpellMgr.h:216
@ PROC_EX_ONLY_FIRST_TICK
Definition SpellMgr.h:220
@ PROC_EX_INTERNAL_TRIGGERED
Definition SpellMgr.h:226
@ PROC_EX_EX_TRIGGER_ALWAYS
Definition SpellMgr.h:215
@ PROC_EX_NOT_ACTIVE_SPELL
Definition SpellMgr.h:214
@ PROC_EX_INTERNAL_REQ_FAMILY
Definition SpellMgr.h:227

◆ ProcFlagsHit

Enumerator
PROC_HIT_NONE 
PROC_HIT_NORMAL 
PROC_HIT_CRITICAL 
PROC_HIT_MISS 
PROC_HIT_FULL_RESIST 
PROC_HIT_DODGE 
PROC_HIT_PARRY 
PROC_HIT_BLOCK 
PROC_HIT_EVADE 
PROC_HIT_IMMUNE 
PROC_HIT_DEFLECT 
PROC_HIT_ABSORB 
PROC_HIT_REFLECT 
PROC_HIT_INTERRUPT 
PROC_HIT_FULL_BLOCK 
PROC_HIT_MASK_ALL 
255{
256 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
257 PROC_HIT_NORMAL = 0x0000001, // non-critical hits
258 PROC_HIT_CRITICAL = 0x0000002,
259 PROC_HIT_MISS = 0x0000004,
260 PROC_HIT_FULL_RESIST = 0x0000008,
261 PROC_HIT_DODGE = 0x0000010,
262 PROC_HIT_PARRY = 0x0000020,
263 PROC_HIT_BLOCK = 0x0000040, // partial or full block
264 PROC_HIT_EVADE = 0x0000080,
265 PROC_HIT_IMMUNE = 0x0000100,
266 PROC_HIT_DEFLECT = 0x0000200,
267 PROC_HIT_ABSORB = 0x0000400, // partial or full absorb
268 PROC_HIT_REFLECT = 0x0000800,
269 PROC_HIT_INTERRUPT = 0x0001000, // (not used atm)
270 PROC_HIT_FULL_BLOCK = 0x0002000,
271 PROC_HIT_MASK_ALL = 0x0002FFF,
272};

◆ ProcFlagsSpellPhase

Enumerator
PROC_SPELL_PHASE_NONE 
PROC_SPELL_PHASE_CAST 
PROC_SPELL_PHASE_HIT 
PROC_SPELL_PHASE_FINISH 
PROC_SPELL_PHASE_MASK_ALL 

◆ ProcFlagsSpellType

Enumerator
PROC_SPELL_TYPE_NONE 
PROC_SPELL_TYPE_DAMAGE 
PROC_SPELL_TYPE_HEAL 
PROC_SPELL_TYPE_NO_DMG_HEAL 
PROC_SPELL_TYPE_MASK_ALL 
237{
238 PROC_SPELL_TYPE_NONE = 0x0000000,
239 PROC_SPELL_TYPE_DAMAGE = 0x0000001, // damage type of spell
240 PROC_SPELL_TYPE_HEAL = 0x0000002, // heal type of spell
241 PROC_SPELL_TYPE_NO_DMG_HEAL = 0x0000004, // other spells
243};

◆ SpellCategories

Enumerator
SPELLCATEGORY_HEALTH_MANA_POTIONS 
SPELLCATEGORY_DEVOUR_MAGIC 
SPELLCATEGORY_JUDGEMENT 
SPELLCATEGORY_FOOD 
SPELLCATEGORY_DRINK 
41{
44 SPELLCATEGORY_JUDGEMENT = 1210, // Judgement (seal trigger)
47};
@ SPELLCATEGORY_DRINK
Definition SpellMgr.h:46
@ SPELLCATEGORY_DEVOUR_MAGIC
Definition SpellMgr.h:43
@ SPELLCATEGORY_HEALTH_MANA_POTIONS
Definition SpellMgr.h:42
@ SPELLCATEGORY_FOOD
Definition SpellMgr.h:45
@ SPELLCATEGORY_JUDGEMENT
Definition SpellMgr.h:44

◆ SpellFamilyFlag

Enumerator
SPELLFAMILYFLAG_ROGUE_VANISH 
SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT 
SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP 
SPELLFAMILYFLAG_ROGUE_KICK 
SPELLFAMILYFLAG1_ROGUE_DISMANTLE 
SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY 
SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY 
SPELLFAMILYFLAG_WARRIOR_CHARGE 
SPELLFAMILYFLAG_WARRIOR_SLAM 
SPELLFAMILYFLAG_WARRIOR_EXECUTE 
SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW 
SPELLFAMILYFLAG_WARLOCK_LIFETAP 
SPELLFAMILYFLAG2_DRUID_STARFALL 
SPELLFAMILYFLAG1_PALADIN_DIVINESTORM 
SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK 
SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM 
SPELLFAMILYFLAG_SHAMAN_MANA_SPRING 
SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH 
SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA 
SPELLFAMILYFLAG_DK_DEATH_STRIKE 
SPELLFAMILYFLAG_DK_DEATH_COIL 
SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS 
Todo:
: Figure out a more accurate name for the following familyflag(s)
51{
52 // SPELLFAMILYFLAG = SpellFamilyFlags[0]
53 // SPELLFAMILYFLAG1 = SpellFamilyFlags[1]
54 // SPELLFAMILYFLAG2 = SpellFamilyFlags[2]
55
56 // Rogue
58 SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT = 0x00000860, // Vanish, Evasion, Sprint
59 SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP = 0x00000240, // Cold Blood, Shadowstep
60 SPELLFAMILYFLAG_ROGUE_KICK = 0x00000010, // Kick
61 SPELLFAMILYFLAG1_ROGUE_DISMANTLE = 0x00100000, // Dismantle
62 SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY = 0x40000000, // Blade Flurry
63 SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY = 0x00000800, // Blade Flurry
64
65 // Warrior
70
71 // Warlock
73
74 // Druid
76
77 // Paladin
79
80 // Shaman
86
87 // Deathknight
90
92 SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS = 0x04000000, // Seems to be linked to most totems and some totem effects
93};
@ SPELLFAMILYFLAG_SHAMAN_MANA_SPRING
Definition SpellMgr.h:83
@ SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT
Definition SpellMgr.h:58
@ SPELLFAMILYFLAG_WARLOCK_LIFETAP
Definition SpellMgr.h:72
@ SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW
Definition SpellMgr.h:69
@ SPELLFAMILYFLAG_ROGUE_KICK
Definition SpellMgr.h:60
@ SPELLFAMILYFLAG1_ROGUE_DISMANTLE
Definition SpellMgr.h:61
@ SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP
Definition SpellMgr.h:59
@ SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY
Definition SpellMgr.h:62
@ SPELLFAMILYFLAG_WARRIOR_EXECUTE
Definition SpellMgr.h:68
@ SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH
Definition SpellMgr.h:84
@ SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS
Definition SpellMgr.h:92
@ SPELLFAMILYFLAG_DK_DEATH_COIL
Definition SpellMgr.h:89
@ SPELLFAMILYFLAG_ROGUE_VANISH
Definition SpellMgr.h:57
@ SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK
Definition SpellMgr.h:81
@ SPELLFAMILYFLAG_WARRIOR_SLAM
Definition SpellMgr.h:67
@ SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY
Definition SpellMgr.h:63
@ SPELLFAMILYFLAG2_DRUID_STARFALL
Definition SpellMgr.h:75
@ SPELLFAMILYFLAG1_PALADIN_DIVINESTORM
Definition SpellMgr.h:78
@ SPELLFAMILYFLAG_WARRIOR_CHARGE
Definition SpellMgr.h:66
@ SPELLFAMILYFLAG_DK_DEATH_STRIKE
Definition SpellMgr.h:88
@ SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM
Definition SpellMgr.h:82
@ SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA
Definition SpellMgr.h:85

◆ SpellGroup

enum SpellGroup
Enumerator
SPELL_GROUP_NONE 
SPELL_GROUP_ELIXIR_BATTLE 
SPELL_GROUP_ELIXIR_GUARDIAN 
SPELL_GROUP_CORE_RANGE_MAX 

◆ SpellGroupStackRule

Enumerator
SPELL_GROUP_STACK_RULE_DEFAULT 
SPELL_GROUP_STACK_RULE_EXCLUSIVE 
SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER 
SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT 
SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST 
SPELL_GROUP_STACK_RULE_MAX 

◆ SpellLinkedType

Enumerator
SPELL_LINK_CAST 
SPELL_LINK_HIT 
SPELL_LINK_AURA 
SPELL_LINK_REMOVE 
98{
99 SPELL_LINK_CAST = 0, // +: cast; -: remove
100 SPELL_LINK_HIT = 1 * 200000,
101 SPELL_LINK_AURA = 2 * 200000, // +: aura; -: immune
103};
@ SPELL_LINK_HIT
Definition SpellMgr.h:100
@ SPELL_LINK_CAST
Definition SpellMgr.h:99
@ SPELL_LINK_AURA
Definition SpellMgr.h:101
@ SPELL_LINK_REMOVE
Definition SpellMgr.h:102

Function Documentation

◆ GetDiminishingReturnsGroupForSpell()

DiminishingGroup GetDiminishingReturnsGroupForSpell ( SpellInfo const *  spellproto,
bool  triggered 
)
108{
109 if (spellproto->IsPositive())
110 return DIMINISHING_NONE;
111
112 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
113 {
114 if (spellproto->Effects[i].ApplyAuraName == SPELL_AURA_MOD_TAUNT)
115 return DIMINISHING_TAUNT;
116 }
117
118 // Explicit Diminishing Groups
119 switch (spellproto->SpellFamilyName)
120 {
122 {
123 // Pet charge effects (Infernal Awakening, Demon Charge)
124 if (spellproto->SpellVisual[0] == 2816 && spellproto->SpellIconID == 15)
126 // Gnaw
127 else if (spellproto->Id == 47481)
129 // Screams of the Past
130 else if (spellproto->Id == 7074)
131 return DIMINISHING_NONE;
132 break;
133 }
134 // Event spells
135 case SPELLFAMILY_UNK1:
136 return DIMINISHING_NONE;
137 case SPELLFAMILY_MAGE:
138 {
139 // Frostbite
140 if (spellproto->Id == 12494)
141 return DIMINISHING_ROOT;
142 // Shattered Barrier
143 else if (spellproto->Id == 55080)
144 return DIMINISHING_ROOT;
145 // Deep Freeze
146 else if (spellproto->SpellIconID == 2939 && spellproto->SpellVisual[0] == 9963)
148 // Frost Nova / Freeze (Water Elemental)
149 else if (spellproto->SpellIconID == 193)
151 // Dragon's Breath
152 else if (spellproto->SpellFamilyFlags[0] & 0x800000)
154 break;
155 }
157 {
158 // Hamstring - limit duration to 10s in PvP
159 if (spellproto->SpellFamilyFlags[0] & 0x2)
161 // Improved Hamstring
162 else if (spellproto->Id == 23694)
163 return DIMINISHING_ROOT;
164 // Charge Stun (own diminishing)
165 else if (spellproto->SpellFamilyFlags[0] & 0x01000000)
166 return DIMINISHING_CHARGE;
167 break;
168 }
170 {
171 // Curses/etc
172 if ((spellproto->SpellFamilyFlags[0] & 0x80000000) || (spellproto->SpellFamilyFlags[1] & 0x200))
174 // Seduction
175 else if (spellproto->SpellFamilyFlags[1] & 0x10000000)
176 return DIMINISHING_FEAR;
177 break;
178 }
180 {
181 // Pounce
182 if (spellproto->SpellFamilyFlags[0] & 0x20000)
184 // Cyclone
185 else if (spellproto->SpellFamilyFlags[1] & 0x20)
186 return DIMINISHING_CYCLONE;
187 // Entangling Roots
188 // Nature's Grasp
189 else if (spellproto->SpellFamilyFlags[0] & 0x00000200)
191 // Faerie Fire
192 else if (spellproto->SpellFamilyFlags[0] & 0x400)
194 // Feral Charge Root Effect
195 else if (spellproto->Id == 45334)
196 return DIMINISHING_NONE;
197 break;
198 }
200 {
201 // Gouge
202 if (spellproto->SpellFamilyFlags[0] & 0x8)
204 // Blind
205 else if (spellproto->SpellFamilyFlags[0] & 0x1000000)
206 return DIMINISHING_FEAR;
207 // Cheap Shot
208 else if (spellproto->SpellFamilyFlags[0] & 0x400)
210 // Crippling poison - Limit to 10 seconds in PvP (No SpellFamilyFlags)
211 else if (spellproto->SpellIconID == 163)
213 break;
214 }
216 {
217 // Hunter's Mark
218 if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538)
220 // Scatter Shot (own diminishing)
221 else if ((spellproto->SpellFamilyFlags[0] & 0x40000) && spellproto->SpellIconID == 132)
223 // Entrapment (own diminishing)
224 else if (spellproto->SpellVisual[0] == 7484 && spellproto->SpellIconID == 20)
226 // Wyvern Sting mechanic is MECHANIC_SLEEP but the diminishing is DIMINISHING_DISORIENT
227 else if ((spellproto->SpellFamilyFlags[1] & 0x1000) && spellproto->SpellIconID == 1721)
229 // Freezing Arrow
230 else if (spellproto->SpellFamilyFlags[0] & 0x8)
232 break;
233 }
235 {
236 // Judgement of Justice - limit duration to 10s in PvP
237 if (spellproto->SpellFamilyFlags[0] & 0x100000)
239 // Turn Evil
240 else if ((spellproto->SpellFamilyFlags[1] & 0x804000) && spellproto->SpellIconID == 309)
241 return DIMINISHING_FEAR;
242 break;
243 }
245 {
246 // Storm, Earth and Fire - Earthgrab
247 if (spellproto->SpellFamilyFlags[2] & 0x4000)
249 break;
250 }
252 {
253 // Hungering Cold (no flags)
254 if (spellproto->SpellIconID == 2797)
256 // Mark of Blood
257 else if ((spellproto->SpellFamilyFlags[0] & 0x10000000) && spellproto->SpellIconID == 2285)
259 break;
260 }
261 default:
262 break;
263 }
264
265 // Lastly - Set diminishing depending on mechanic
266 uint64 mechanic = spellproto->GetAllEffectsMechanicMask();
267 if (mechanic & (1ULL << MECHANIC_CHARM))
269 if (mechanic & (1ULL << MECHANIC_SILENCE))
270 return DIMINISHING_SILENCE;
271 if (mechanic & (1ULL << MECHANIC_SLEEP))
272 return DIMINISHING_SLEEP;
273 if (mechanic & ((1ULL << MECHANIC_SAPPED) | (1ULL << MECHANIC_POLYMORPH) | (1ULL << MECHANIC_SHACKLE)))
275 // Mechanic Knockout, except Blast Wave
276 if (mechanic & (1ULL << MECHANIC_KNOCKOUT) && spellproto->SpellIconID != 292)
278 if (mechanic & (1ULL << MECHANIC_DISARM))
279 return DIMINISHING_DISARM;
280 if (mechanic & (1ULL << MECHANIC_FEAR))
281 return DIMINISHING_FEAR;
282 if (mechanic & (1ULL << MECHANIC_STUN))
284 if (mechanic & (1ULL << MECHANIC_BANISH))
285 return DIMINISHING_BANISH;
286 if (mechanic & (1ULL << MECHANIC_ROOT))
288 if (mechanic & (1ULL << MECHANIC_HORROR))
289 return DIMINISHING_HORROR;
290
291 return DIMINISHING_NONE;
292}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1637
std::uint64_t uint64
Definition Define.h:106
@ DIMINISHING_MIND_CONTROL
Definition SharedDefines.h:3503
@ DIMINISHING_HORROR
Definition SharedDefines.h:3502
@ DIMINISHING_DRAGONS_BREATH
Definition SharedDefines.h:3511
@ DIMINISHING_CONTROLLED_STUN
Definition SharedDefines.h:3495
@ DIMINISHING_CYCLONE
Definition SharedDefines.h:3497
@ DIMINISHING_BANISH
Definition SharedDefines.h:3492
@ DIMINISHING_CONTROLLED_ROOT
Definition SharedDefines.h:3496
@ DIMINISHING_NONE
Definition SharedDefines.h:3491
@ DIMINISHING_SLEEP
Definition SharedDefines.h:3508
@ DIMINISHING_STUN
Definition SharedDefines.h:3505
@ DIMINISHING_DISARM
Definition SharedDefines.h:3498
@ DIMINISHING_ENTRAPMENT
Definition SharedDefines.h:3500
@ DIMINISHING_FEAR
Definition SharedDefines.h:3501
@ DIMINISHING_SCATTER_SHOT
Definition SharedDefines.h:3506
@ DIMINISHING_LIMITONLY
Definition SharedDefines.h:3510
@ DIMINISHING_OPENING_STUN
Definition SharedDefines.h:3494
@ DIMINISHING_DISORIENT
Definition SharedDefines.h:3499
@ DIMINISHING_ROOT
Definition SharedDefines.h:3504
@ DIMINISHING_TAUNT
Definition SharedDefines.h:3509
@ DIMINISHING_CHARGE
Definition SharedDefines.h:3493
@ DIMINISHING_SILENCE
Definition SharedDefines.h:3507
@ MECHANIC_DISARM
Definition SharedDefines.h:1316
@ MECHANIC_FEAR
Definition SharedDefines.h:1318
@ MECHANIC_KNOCKOUT
Definition SharedDefines.h:1327
@ MECHANIC_CHARM
Definition SharedDefines.h:1314
@ MECHANIC_STUN
Definition SharedDefines.h:1325
@ MECHANIC_ROOT
Definition SharedDefines.h:1320
@ MECHANIC_SLEEP
Definition SharedDefines.h:1323
@ MECHANIC_POLYMORPH
Definition SharedDefines.h:1330
@ MECHANIC_BANISH
Definition SharedDefines.h:1331
@ MECHANIC_SILENCE
Definition SharedDefines.h:1322
@ MECHANIC_SHACKLE
Definition SharedDefines.h:1333
@ MECHANIC_SAPPED
Definition SharedDefines.h:1343
@ MECHANIC_HORROR
Definition SharedDefines.h:1337
@ SPELLFAMILY_WARLOCK
Definition SharedDefines.h:3789
@ SPELLFAMILY_MAGE
Definition SharedDefines.h:3787
@ SPELLFAMILY_GENERIC
Definition SharedDefines.h:3784
@ SPELLFAMILY_WARRIOR
Definition SharedDefines.h:3788
@ SPELLFAMILY_PALADIN
Definition SharedDefines.h:3794
@ SPELLFAMILY_HUNTER
Definition SharedDefines.h:3793
@ SPELLFAMILY_ROGUE
Definition SharedDefines.h:3792
@ SPELLFAMILY_SHAMAN
Definition SharedDefines.h:3795
@ SPELLFAMILY_DRUID
Definition SharedDefines.h:3791
@ SPELLFAMILY_DEATHKNIGHT
Definition SharedDefines.h:3799
@ SPELLFAMILY_UNK1
Definition SharedDefines.h:3785
@ SPELL_AURA_MOD_TAUNT
Definition SpellAuraDefines.h:74

References DIMINISHING_BANISH, DIMINISHING_CHARGE, DIMINISHING_CONTROLLED_ROOT, DIMINISHING_CONTROLLED_STUN, DIMINISHING_CYCLONE, DIMINISHING_DISARM, DIMINISHING_DISORIENT, DIMINISHING_DRAGONS_BREATH, DIMINISHING_ENTRAPMENT, DIMINISHING_FEAR, DIMINISHING_HORROR, DIMINISHING_LIMITONLY, DIMINISHING_MIND_CONTROL, DIMINISHING_NONE, DIMINISHING_OPENING_STUN, DIMINISHING_ROOT, DIMINISHING_SCATTER_SHOT, DIMINISHING_SILENCE, DIMINISHING_SLEEP, DIMINISHING_STUN, DIMINISHING_TAUNT, SpellInfo::Effects, SpellInfo::GetAllEffectsMechanicMask(), SpellInfo::Id, SpellInfo::IsPositive(), MAX_SPELL_EFFECTS, MECHANIC_BANISH, MECHANIC_CHARM, MECHANIC_DISARM, MECHANIC_FEAR, MECHANIC_HORROR, MECHANIC_KNOCKOUT, MECHANIC_POLYMORPH, MECHANIC_ROOT, MECHANIC_SAPPED, MECHANIC_SHACKLE, MECHANIC_SILENCE, MECHANIC_SLEEP, MECHANIC_STUN, SPELL_AURA_MOD_TAUNT, SPELLFAMILY_DEATHKNIGHT, SPELLFAMILY_DRUID, SPELLFAMILY_GENERIC, SPELLFAMILY_HUNTER, SPELLFAMILY_MAGE, SPELLFAMILY_PALADIN, SPELLFAMILY_ROGUE, SPELLFAMILY_SHAMAN, SPELLFAMILY_UNK1, SPELLFAMILY_WARLOCK, SPELLFAMILY_WARRIOR, SpellInfo::SpellFamilyFlags, SpellInfo::SpellFamilyName, SpellInfo::SpellIconID, and SpellInfo::SpellVisual.

Referenced by Spell::DoSpellHitOnUnit().

◆ GetDiminishingReturnsGroupType()

DiminishingReturnsType GetDiminishingReturnsGroupType ( DiminishingGroup  group)
295{
296 switch (group)
297 {
300 case DIMINISHING_STUN:
304 return DRTYPE_ALL;
306 case DIMINISHING_NONE:
307 return DRTYPE_NONE;
308 default:
309 return DRTYPE_PLAYER;
310 }
311}
@ DRTYPE_NONE
Definition SharedDefines.h:3483
@ DRTYPE_PLAYER
Definition SharedDefines.h:3484
@ DRTYPE_ALL
Definition SharedDefines.h:3485

References DIMINISHING_CHARGE, DIMINISHING_CONTROLLED_STUN, DIMINISHING_CYCLONE, DIMINISHING_LIMITONLY, DIMINISHING_NONE, DIMINISHING_OPENING_STUN, DIMINISHING_STUN, DIMINISHING_TAUNT, DRTYPE_ALL, DRTYPE_NONE, and DRTYPE_PLAYER.

Referenced by Unit::ApplyDiminishingToDuration(), and Spell::DoSpellHitOnUnit().

◆ GetDiminishingReturnsLimitDuration()

int32 GetDiminishingReturnsLimitDuration ( DiminishingGroup  group,
SpellInfo const *  spellproto 
)
325{
327 return 0;
328
329 // Explicit diminishing duration
330 switch (spellproto->SpellFamilyName)
331 {
333 {
334 // Faerie Fire - limit to 40 seconds in PvP (3.1)
335 if (spellproto->SpellFamilyFlags[0] & 0x400)
336 return 40 * IN_MILLISECONDS;
337 break;
338 }
340 {
341 // Wyvern Sting
342 if (spellproto->SpellFamilyFlags[1] & 0x1000)
343 return 6 * IN_MILLISECONDS;
344 // Hunter's Mark
345 if (spellproto->SpellFamilyFlags[0] & 0x400)
346 return 120 * IN_MILLISECONDS;
347 break;
348 }
350 {
351 // Repentance - limit to 6 seconds in PvP
352 if (spellproto->SpellFamilyFlags[0] & 0x4)
353 return 6 * IN_MILLISECONDS;
354 break;
355 }
357 {
358 // Banish - limit to 6 seconds in PvP
359 if (spellproto->SpellFamilyFlags[1] & 0x8000000)
360 return 6 * IN_MILLISECONDS;
361 // Curse of Tongues - limit to 12 seconds in PvP
362 else if (spellproto->SpellFamilyFlags[2] & 0x800)
363 return 12 * IN_MILLISECONDS;
364 // Curse of Elements - limit to 120 seconds in PvP
365 else if (spellproto->SpellFamilyFlags[1] & 0x200)
366 return 120 * IN_MILLISECONDS;
367 // Curse of Exhaustion
368 else if (spellproto->SpellFamilyFlags[0] & 0x400000)
369 return 12 * IN_MILLISECONDS;
370 break;
371 }
372 default:
373 break;
374 }
375
376 return 10 * IN_MILLISECONDS;
377}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
Definition SpellMgr.cpp:379

References IN_MILLISECONDS, IsDiminishingReturnsGroupDurationLimited(), SPELLFAMILY_DRUID, SPELLFAMILY_HUNTER, SPELLFAMILY_PALADIN, SPELLFAMILY_WARLOCK, SpellInfo::SpellFamilyFlags, and SpellInfo::SpellFamilyName.

Referenced by Spell::DoSpellHitOnUnit().

◆ GetDiminishingReturnsMaxLevel()

DiminishingLevels GetDiminishingReturnsMaxLevel ( DiminishingGroup  group)
314{
315 switch (group)
316 {
319 default:
321 }
322}
@ DIMINISHING_LEVEL_IMMUNE
Definition Unit.h:272
@ DIMINISHING_LEVEL_TAUNT_IMMUNE
Definition Unit.h:274

References DIMINISHING_LEVEL_IMMUNE, DIMINISHING_LEVEL_TAUNT_IMMUNE, and DIMINISHING_TAUNT.

Referenced by Unit::IncrDiminishing().

◆ IsDiminishingReturnsGroupDurationLimited()

◆ IsPartOfSkillLine()

bool IsPartOfSkillLine ( uint32  skillId,
uint32  spellId 
)
51{
52 SkillLineAbilityMapBounds skillBounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
53 for (SkillLineAbilityMap::const_iterator itr = skillBounds.first; itr != skillBounds.second; ++itr)
54 if (itr->second->SkillLine == skillId)
55 return true;
56
57 return false;
58}
#define sSpellMgr
Definition SpellMgr.h:847

References sSpellMgr.

Referenced by SpellMgr::LoadSpellInfoCustomAttributes().

◆ IsPrimaryProfessionSkill()

bool IsPrimaryProfessionSkill ( uint32  skill)
39{
40 SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(skill);
41 if (!pSkill)
42 return false;
43
45 return false;
46
47 return true;
48}
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
@ SKILL_CATEGORY_PROFESSION
Definition SharedDefines.h:3311
Definition DBCStructure.h:1583
int32 categoryId
Definition DBCStructure.h:1585

References SkillLineEntry::categoryId, SKILL_CATEGORY_PROFESSION, and sSkillLineStore.

Referenced by WorldSession::HandleUnlearnSkillOpcode(), SpellInfo::IsPrimaryProfession(), and IsProfessionSkill().

◆ IsProfessionOrRidingSkill()

bool IsProfessionOrRidingSkill ( uint32  skill)
inline

◆ IsProfessionSkill()

bool IsProfessionSkill ( uint32  skill)
inline