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
 
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, 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
395// Enum with EffectRadiusIndex and their actual radius
397{
434 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
453 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
455};
456
457// Spell pet auras
458class PetAura
459{
460private:
461 typedef std::unordered_map<uint32, uint32> PetAuraMap;
462
463public:
464 PetAura()
465 {
466 auras.clear();
467 }
468
469 PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
470 removeOnChangePet(_removeOnChangePet), damage(_damage)
471 {
472 auras[petEntry] = aura;
473 }
474
475 [[nodiscard]] uint32 GetAura(uint32 petEntry) const
476 {
477 PetAuraMap::const_iterator itr = auras.find(petEntry);
478 if (itr != auras.end())
479 return itr->second;
480 PetAuraMap::const_iterator itr2 = auras.find(0);
481 if (itr2 != auras.end())
482 return itr2->second;
483 return 0;
484 }
485
486 void AddAura(uint32 petEntry, uint32 aura)
487 {
488 auras[petEntry] = aura;
489 }
490
491 [[nodiscard]] bool IsRemovedOnChangePet() const
492 {
493 return removeOnChangePet;
494 }
495
496 [[nodiscard]] int32 GetDamage() const
497 {
498 return damage;
499 }
500
501private:
503 bool removeOnChangePet{false};
504 int32 damage{0};
505};
506typedef std::map<uint32, PetAura> SpellPetAuraMap;
507
508enum ICCBuff
509{
510 ICC_AREA = 4812,
511 ICC_RACEMASK_HORDE = 690,
513};
514
515struct SpellArea
516{
518 uint32 areaId; // zone/subzone/or 0 is not limited to zone
519 uint32 questStart; // quest start (quest must be active or rewarded for spell apply)
520 uint32 questEnd; // quest end (quest must not be rewarded for spell apply)
521 int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case
522 uint32 raceMask; // can be applied only to races
523 Gender gender; // can be applied only to gender
524 uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell
525 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)
526 bool autocast; // if true then auto applied at area enter, in other case just allowed to cast
527
528 // helpers
529 bool IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const;
530};
531
532typedef std::multimap<uint32, SpellArea> SpellAreaMap;
533typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap;
534typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap;
535typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap;
536typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds;
537typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds;
538typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds;
539typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds;
540
541// Spell rank chain (accessed using SpellMgr functions)
542struct SpellChainNode
543{
544 SpellInfo const* prev;
545 SpellInfo const* next;
546 SpellInfo const* first;
547 SpellInfo const* last;
548 uint8 rank;
549};
550
551typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
552
553// spell_id req_spell
554typedef std::multimap<uint32, uint32> SpellRequiredMap;
555typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds;
556
557// req_spell spell_id
558typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap;
559typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds;
560
561// Spell learning properties (accessed using SpellMgr functions)
563{
564 std::bitset<MAX_SPELL_SCHOOL> School;
565 std::bitset<DISPEL_MAX> DispelType;
566 std::bitset<MAX_MECHANIC> Mechanic;
567 std::vector<SpellEffects> Effect;
568 std::vector<AuraType> Aura;
569 bool ImmuneAoE = false;
570 bool ImmuneChain = false;
571};
572
573typedef std::unordered_map<int32, CreatureImmunities> CreatureImmunitiesMap;
575{
577 uint16 step;
578 uint16 value; // 0 - max skill value for player level
579 uint16 maxvalue; // 0 - max skill value for player level
580};
581
582typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap;
583
584typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
585typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds;
586
587typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
588typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
589
590typedef std::map<uint32, uint32> SpellDifficultySearcherMap;
591
593{
595};
596
597// < 0 for petspelldata id, > 0 for creature_id
598typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap;
599
600typedef std::vector<uint32> SpellCustomAttribute;
601typedef std::vector<bool> EnchantCustomAttribute;
602
603typedef std::vector<SpellInfo*> SpellInfoMap;
604
605typedef std::map<int32, std::vector<int32> > SpellLinkedMap;
606
608{
613};
614
615typedef std::map<uint32, SpellCooldownOverride> SpellCooldownOverrideMap;
616
618
619inline bool IsProfessionSkill(uint32 skill)
620{
621 return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
622}
623
624inline bool IsProfessionOrRidingSkill(uint32 skill)
625{
626 return IsProfessionSkill(skill) || skill == SKILL_RIDING;
627}
628
629bool IsPartOfSkillLine(uint32 skillId, uint32 spellId);
630
631// spell diminishing returns
632DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, bool triggered);
637
638typedef std::set<uint32> TalentAdditionalSet;
639
640class SpellMgr
641{
642 // Constructors
643private:
644 SpellMgr();
645 ~SpellMgr();
646
647 // Accessors (const or static functions)
648public:
649 static SpellMgr* instance();
650
651 // creature immunity definitions loaded from DB
652 CreatureImmunities const* GetCreatureImmunities(int32 creatureImmunitiesId) const;
653
654 // Spell correctness for client using
655 static bool ComputeIsSpellValid(SpellInfo const* spellInfo, bool msg = true);
656 static bool IsSpellValid(SpellInfo const* spellInfo);
657 static bool CheckSpellValid(SpellInfo const* spellInfo, uint32 spellId, bool isTalent);
658
659 // Spell difficulty
660 [[nodiscard]] uint32 GetSpellDifficultyId(uint32 spellId) const;
661 void SetSpellDifficultyId(uint32 spellId, uint32 id);
662 uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const* caster) const;
663 SpellInfo const* GetSpellForDifficultyFromSpell(SpellInfo const* spell, Unit const* caster) const;
664
665 // Spell Ranks table
666 [[nodiscard]] SpellChainNode const* GetSpellChainNode(uint32 spell_id) const;
667 [[nodiscard]] uint32 GetFirstSpellInChain(uint32 spell_id) const;
668 [[nodiscard]] uint32 GetLastSpellInChain(uint32 spell_id) const;
669 [[nodiscard]] uint32 GetNextSpellInChain(uint32 spell_id) const;
670 [[nodiscard]] uint32 GetPrevSpellInChain(uint32 spell_id) const;
671 [[nodiscard]] uint8 GetSpellRank(uint32 spell_id) const;
672 // not strict check returns provided spell if rank not avalible
673 [[nodiscard]] uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const;
674
675 // Spell Required table
678 [[nodiscard]] bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const;
679
680 // Spell learning
681 [[nodiscard]] SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const;
682
683 // Spell target coordinates
684 [[nodiscard]] SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const;
685
686 // Spell Groups table
688 bool IsSpellMemberOfSpellGroup(uint32 spell_id, SpellGroup group_id) const;
689
691 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells) const;
692 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells, std::set<SpellGroup>& usedGroups) const;
693
694 // Spell Group Stack Rules table
695 bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, uint32 auraType, int32 amount, std::map<SpellGroup, int32>& groups) const;
696 SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
698
699 // Spell proc table
700 [[nodiscard]] SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
701 bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
702
703 // Spell bonus data table
704 [[nodiscard]] SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const;
705
706 // Spell threat table
707 [[nodiscard]] SpellThreatEntry const* GetSpellThreatEntry(uint32 spellID) const;
708
709 // Spell mixology table
710 [[nodiscard]] float GetSpellMixologyBonus(uint32 spellId) const;
711
713
714 [[nodiscard]] PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const;
715
716 [[nodiscard]] SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const;
717 [[nodiscard]] bool IsArenaAllowedEnchancment(uint32 ench_id) const;
718
719 [[nodiscard]] const std::vector<int32>* GetSpellLinked(int32 spell_id) const;
720
721 [[nodiscard]] PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const;
722 [[nodiscard]] PetDefaultSpellsEntry const* GetPetDefaultSpellsEntry(int32 id) const;
723
724 // Spell area
725 [[nodiscard]] SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const;
730
731 // SpellInfo object management
732 [[nodiscard]] SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
733 // Use this only with 100% valid spellIds
734 [[nodiscard]] SpellInfo const* AssertSpellInfo(uint32 spellId) const
735 {
736 ASSERT(spellId < GetSpellInfoStoreSize());
737 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
738 ASSERT(spellInfo);
739 return spellInfo;
740 }
741 // use this instead of AssertSpellInfo to have the problem logged instead of crashing the server
742 [[nodiscard]] SpellInfo const* CheckSpellInfo(uint32 spellId) const
743 {
744 if (spellId >= GetSpellInfoStoreSize())
745 {
746 LOG_ERROR("server", "spellId {} is not lower than GetSpellInfoStoreSize() ({})", spellId, GetSpellInfoStoreSize());
747 return nullptr;
748 }
749 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
750 if (!spellInfo)
751 {
752 LOG_ERROR("server", "spellId {} has invalid spellInfo", spellId);
753 return nullptr;
754 }
755 return spellInfo;
756 }
757 [[nodiscard]] uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); }
758
759 // Talent Additional Set
760 [[nodiscard]] bool IsAdditionalTalentSpell(uint32 spellId) const;
761
762 [[nodiscard]] bool HasSpellCooldownOverride(uint32 spellId) const;
763 [[nodiscard]] SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const;
764
765private:
766 SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
767
768 // Modifiers
769public:
770 // Loading data at server startup
773 void LoadSpellRanks();
774 void LoadSpellRequired();
777 void LoadSpellGroups();
779 void LoadSpellProcs();
780 void LoadSpellBonuses();
781 void LoadSpellThreats();
782 void LoadSpellMixology();
784 void LoadSpellPetAuras();
787 void LoadSpellLinked();
790 void LoadSpellAreas();
791 void LoadSpellInfoStore();
801
802private:
829 PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry
833};
834
835#define sSpellMgr SpellMgr::instance()
836
837#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:158
SpellEffIndex
Definition SharedDefines.h:30
DiminishingGroup
Definition SharedDefines.h:3492
Gender
Definition SharedDefines.h:60
DiminishingReturnsType
Definition SharedDefines.h:3484
@ SKILL_COOKING
Definition SharedDefines.h:3153
@ SKILL_FISHING
Definition SharedDefines.h:3192
@ SKILL_RIDING
Definition SharedDefines.h:3226
@ SKILL_FIRST_AID
Definition SharedDefines.h:3127
bool IsPrimaryProfessionSkill(uint32 skill)
Definition SpellMgr.cpp:36
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
Definition SpellMgr.cpp:48
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
Definition SpellMgr.h:318
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
Definition SpellMgr.h:535
std::unordered_map< SpellGroup, std::unordered_set< uint32 > > SameEffectStackMap
Definition SpellMgr.h:372
bool IsProfessionOrRidingSkill(uint32 skill)
Definition SpellMgr.h:625
std::unordered_multimap< SpellGroup, int32 > SpellGroupSpellMap
Definition SpellMgr.h:357
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const *spellproto)
Definition SpellMgr.cpp:322
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:105
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
Definition SpellMgr.h:560
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
Definition SpellMgr.h:394
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
Definition SpellMgr.cpp:377
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
Definition SpellMgr.h:354
bool IsProfessionSkill(uint32 skill)
Definition SpellMgr.h:620
std::multimap< uint32, SpellArea > SpellAreaMap
Definition SpellMgr.h:533
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition SpellMgr.h:537
std::map< uint32, uint32 > SpellDifficultySearcherMap
Definition SpellMgr.h:591
std::map< uint32, SpellCooldownOverride > SpellCooldownOverrideMap
Definition SpellMgr.h:616
std::map< int32, std::vector< int32 > > SpellLinkedMap
Definition SpellMgr.h:606
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:540
std::unordered_map< uint32, SpellChainNode > SpellChainMap
Definition SpellMgr.h:552
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
Definition SpellMgr.h:302
std::set< uint32 > TalentAdditionalSet
Definition SpellMgr.h:639
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:536
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:556
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
Definition SpellMgr.h:585
std::map< uint32, PetAura > SpellPetAuraMap
Definition SpellMgr.h:507
ICCBuff
Definition SpellMgr.h:510
@ ICC_RACEMASK_HORDE
Definition SpellMgr.h:512
@ ICC_AREA
Definition SpellMgr.h:511
@ ICC_RACEMASK_ALLIANCE
Definition SpellMgr.h:513
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
Definition SpellMgr.h:534
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
Definition SpellMgr.h:599
std::vector< bool > EnchantCustomAttribute
Definition SpellMgr.h:602
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
Definition SpellMgr.cpp:292
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
Definition SpellMgr.h:358
std::vector< uint32 > SpellCustomAttribute
Definition SpellMgr.h:601
std::unordered_map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
Definition SpellMgr.h:583
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
Definition SpellMgr.h:539
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition SpellMgr.h:586
@ 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:589
DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
Definition SpellMgr.cpp:311
EffectRadiusIndex
Definition SpellMgr.h:398
@ EFFECT_RADIUS_14_YARDS
Definition SpellMgr.h:451
@ EFFECT_RADIUS_500_YARDS
Definition SpellMgr.h:422
@ EFFECT_RADIUS_13_YARDS
Definition SpellMgr.h:409
@ EFFECT_RADIUS_7_YARDS
Definition SpellMgr.h:428
@ EFFECT_RADIUS_100_YARDS
Definition SpellMgr.h:404
@ EFFECT_RADIUS_45_YARDS_2
Definition SpellMgr.h:448
@ EFFECT_RADIUS_80_YARDS
Definition SpellMgr.h:423
@ EFFECT_RADIUS_20_YARDS
Definition SpellMgr.h:401
@ EFFECT_RADIUS_60_YARDS_2
Definition SpellMgr.h:442
@ EFFECT_RADIUS_8_YARDS
Definition SpellMgr.h:406
@ EFFECT_RADIUS_34_YARDS
Definition SpellMgr.h:430
@ EFFECT_RADIUS_45_YARDS
Definition SpellMgr.h:403
@ EFFECT_RADIUS_2_YARDS
Definition SpellMgr.h:399
@ EFFECT_RADIUS_50000_YARDS_2
Definition SpellMgr.h:445
@ EFFECT_RADIUS_44_YARDS
Definition SpellMgr.h:450
@ EFFECT_RADIUS_5_YARDS_3
Definition SpellMgr.h:443
@ EFFECT_RADIUS_15_YARDS
Definition SpellMgr.h:410
@ EFFECT_RADIUS_23_YARDS
Definition SpellMgr.h:453
@ EFFECT_RADIUS_55_YARDS
Definition SpellMgr.h:426
@ EFFECT_RADIUS_65_YARDS
Definition SpellMgr.h:416
@ EFFECT_RADIUS_32_YARDS
Definition SpellMgr.h:449
@ EFFECT_RADIUS_30_YARDS
Definition SpellMgr.h:402
@ EFFECT_RADIUS_1_YARD
Definition SpellMgr.h:408
@ EFFECT_RADIUS_9_YARDS
Definition SpellMgr.h:431
@ EFFECT_RADIUS_16_YARDS
Definition SpellMgr.h:434
@ EFFECT_RADIUS_60_YARDS
Definition SpellMgr.h:439
@ EFFECT_RADIUS_90_YARDS
Definition SpellMgr.h:440
@ EFFECT_RADIUS_130_YARDS
Definition SpellMgr.h:446
@ EFFECT_RADIUS_4_YARDS
Definition SpellMgr.h:418
@ EFFECT_RADIUS_25_YARDS
Definition SpellMgr.h:412
@ EFFECT_RADIUS_10_YARDS_2
Definition SpellMgr.h:436
@ EFFECT_RADIUS_15_YARDS_2
Definition SpellMgr.h:438
@ EFFECT_RADIUS_5_YARDS
Definition SpellMgr.h:400
@ EFFECT_RADIUS_40_YARDS
Definition SpellMgr.h:415
@ EFFECT_RADIUS_70_YARDS
Definition SpellMgr.h:417
@ EFFECT_RADIUS_5_YARDS_2
Definition SpellMgr.h:437
@ EFFECT_RADIUS_3_YARDS
Definition SpellMgr.h:407
@ EFFECT_RADIUS_38_YARDS
Definition SpellMgr.h:447
@ EFFECT_RADIUS_21_YARDS
Definition SpellMgr.h:429
@ EFFECT_RADIUS_50_YARDS
Definition SpellMgr.h:419
@ EFFECT_RADIUS_50000_YARDS
Definition SpellMgr.h:420
@ EFFECT_RADIUS_60_YARDS_3
Definition SpellMgr.h:444
@ EFFECT_RADIUS_18_YARDS
Definition SpellMgr.h:411
@ EFFECT_RADIUS_200_YARDS
Definition SpellMgr.h:414
@ EFFECT_RADIUS_12_YARDS
Definition SpellMgr.h:424
@ EFFECT_RADIUS_10_YARDS
Definition SpellMgr.h:405
@ EFFECT_RADIUS_0_YARDS
Definition SpellMgr.h:427
@ EFFECT_RADIUS_3_5_YARDS
Definition SpellMgr.h:454
@ EFFECT_RADIUS_150_YARDS
Definition SpellMgr.h:432
@ EFFECT_RADIUS_80_YARDS_2
Definition SpellMgr.h:455
@ EFFECT_RADIUS_35_YARDS
Definition SpellMgr.h:413
@ EFFECT_RADIUS_47_YARDS
Definition SpellMgr.h:452
@ EFFECT_RADIUS_6_YARDS
Definition SpellMgr.h:421
@ EFFECT_RADIUS_11_YARDS
Definition SpellMgr.h:433
@ EFFECT_RADIUS_15_YARDS_3
Definition SpellMgr.h:441
@ EFFECT_RADIUS_0_5_YARDS
Definition SpellMgr.h:435
@ EFFECT_RADIUS_99_YARDS
Definition SpellMgr.h:425
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:559
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:555
std::vector< SpellInfo * > SpellInfoMap
Definition SpellMgr.h:604
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
Definition SpellMgr.h:538
std::unordered_map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
Definition SpellMgr.h:370
std::unordered_map< int32, CreatureImmunities > CreatureImmunitiesMap
Definition SpellMgr.h:574
std::multimap< uint32, uint32 > PetLevelupSpellSet
Definition SpellMgr.h:588
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:460
int32 damage
Definition SpellMgr.h:505
int32 GetDamage() const
Definition SpellMgr.h:497
std::unordered_map< uint32, uint32 > PetAuraMap
Definition SpellMgr.h:462
uint32 GetAura(uint32 petEntry) const
Definition SpellMgr.h:476
PetAura()
Definition SpellMgr.h:465
bool removeOnChangePet
Definition SpellMgr.h:504
PetAuraMap auras
Definition SpellMgr.h:503
bool IsRemovedOnChangePet() const
Definition SpellMgr.h:492
void AddAura(uint32 petEntry, uint32 aura)
Definition SpellMgr.h:487
Definition Player.h:1084
Definition Unit.h:440
Definition SpellInfo.h:340
Definition SpellMgr.h:642
SpellRequiredMap mSpellReq
Definition SpellMgr.h:807
CreatureImmunities const * GetCreatureImmunities(int32 creatureImmunitiesId) const
Definition SpellMgr.cpp:58
SpellLinkedMap mSpellLinkedMap
Definition SpellMgr.h:820
SpellInfo const * AssertSpellInfo(uint32 spellId) const
Definition SpellMgr.h:735
void LoadSpellLinked()
Definition SpellMgr.cpp:2465
SkillLineAbilityMap mSkillLineAbilityMap
Definition SpellMgr.h:828
SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1007
TalentAdditionalSet mTalentSpellAdditionalSet
Definition SpellMgr.h:833
EnchantCustomAttribute mEnchantCustomAttr
Definition SpellMgr.h:822
void SetSpellDifficultyId(uint32 spellId, uint32 id)
Definition SpellMgr.cpp:531
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:417
PetLevelupSpellSet const * GetPetLevelupSpellList(uint32 petFamily) const
Definition SpellMgr.cpp:990
void LoadSpellInfoStore()
Definition SpellMgr.cpp:2903
uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const *caster) const
Definition SpellMgr.cpp:536
void LoadSpellBonuses()
Definition SpellMgr.cpp:2176
SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1017
SpellAreaForAuraMap mSpellAreaForAuraMap
Definition SpellMgr.h:826
SpellChainMap mSpellChains
Definition SpellMgr.h:805
void LoadEnchantCustomAttr()
Definition SpellMgr.cpp:2379
void UnloadSpellInfoStore()
Definition SpellMgr.cpp:2976
void LoadSpellAreas()
Definition SpellMgr.cpp:2692
uint32 GetNextSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:617
static SpellMgr * instance()
Definition SpellMgr.cpp:410
SpellPetAuraMap mSpellPetAuraMap
Definition SpellMgr.h:819
SpellLearnSkillMap mSpellLearnSkills
Definition SpellMgr.h:808
void LoadSpellCooldownOverrides()
Definition SpellMgr.cpp:2934
SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1012
SpellBonusEntry const * GetSpellBonusData(uint32 spellId) const
Definition SpellMgr.cpp:917
void LoadSkillLineAbilityMap()
Definition SpellMgr.cpp:2294
SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:957
static bool CheckSpellValid(SpellInfo const *spellInfo, uint32 spellId, bool isTalent)
Definition SpellMgr.cpp:506
float GetSpellMixologyBonus(uint32 spellId) const
Definition SpellMgr.cpp:948
SpellAreaForQuestMap mSpellAreaForQuestEndMap
Definition SpellMgr.h:825
SpellGroupSpellMapBounds GetSpellGroupSpellMapBounds(SpellGroup group_id) const
Definition SpellMgr.cpp:715
PetDefaultSpellsMap mPetDefaultSpellsMap
Definition SpellMgr.h:830
void LoadCreatureImmunities()
Definition SpellMgr.cpp:63
uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict=false) const
Definition SpellMgr.cpp:643
SpellLearnSkillNode const * GetSpellLearnSkill(uint32 spell_id) const
Definition SpellMgr.cpp:681
bool IsSpellMemberOfSpellGroup(uint32 spell_id, SpellGroup group_id) const
Definition SpellMgr.cpp:704
SpellMixologyMap mSpellMixologyMap
Definition SpellMgr.h:818
void LoadSpellInfoCustomAttributes()
Definition SpellMgr.cpp:3047
const std::vector< int32 > * GetSpellLinked(int32 spell_id) const
Definition SpellMgr.cpp:984
SpellInfo const * GetSpellInfo(uint32 spellId) const
Definition SpellMgr.h:733
uint32 GetPrevSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:626
bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const
Definition SpellMgr.cpp:665
void LoadSpellThreats()
Definition SpellMgr.cpp:2217
SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1022
void LoadSpellRequired()
Definition SpellMgr.cpp:1358
SpellInfo const * GetSpellForDifficultyFromSpell(SpellInfo const *spell, Unit const *caster) const
Definition SpellMgr.cpp:578
void LoadSpellJumpDistances()
Definition SpellMgr.cpp:3011
void LoadSpellTargetPositions()
Definition SpellMgr.cpp:1476
SpellDifficultySearcherMap mSpellDifficultySearcherMap
Definition SpellMgr.h:804
void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set< uint32 > &foundSpells) const
Definition SpellMgr.cpp:720
void LoadSpellInfoImmunities()
Definition SpellMgr.cpp:3769
void LoadSpellLearnSkills()
Definition SpellMgr.cpp:1423
uint32 GetLastSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:609
Acore::IteratorPair< SpellRequiredMap::const_iterator > GetSpellsRequiredForSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:655
void LoadSpellTalentRanks()
Definition SpellMgr.cpp:1186
SpellGroupStackRule GetSpellGroupStackRule(SpellGroup group_id) const
Definition SpellMgr.cpp:828
SpellThreatEntry const * GetSpellThreatEntry(uint32 spellID) const
Definition SpellMgr.cpp:933
void LoadSpellGroupStackRules()
Definition SpellMgr.cpp:1662
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition SpellMgr.cpp:488
SpellGroupStackMap mSpellGroupStack
Definition SpellMgr.h:812
uint32 GetFirstSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:601
bool CanSpellTriggerProcOnEvent(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
Definition SpellMgr.cpp:845
SpellEnchantProcEventMap mSpellEnchantProcEventMap
Definition SpellMgr.h:821
void LoadPetDefaultSpells()
Definition SpellMgr.cpp:2612
PetLevelupSpellMap mPetLevelupSpellMap
Definition SpellMgr.h:829
SpellInfo const * CheckSpellInfo(uint32 spellId) const
Definition SpellMgr.h:743
SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const *spellInfo1, SpellInfo const *spellInfo2) const
Definition SpellMgr.cpp:781
bool IsAdditionalTalentSpell(uint32 spellId) const
Definition SpellMgr.cpp:676
SpellProcMap mSpellProcMap
Definition SpellMgr.h:814
SpellsRequiringSpellMap mSpellsReqSpell
Definition SpellMgr.h:806
CreatureImmunitiesMap mCreatureImmunities
Definition SpellMgr.h:815
void LoadSpellInfoCorrections()
Definition SpellInfoCorrections.cpp:39
SpellTargetPositionMap mSpellTargetPositions
Definition SpellMgr.h:809
SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:2970
SpellProcEntry const * GetSpellProcEntry(uint32 spellId) const
Definition SpellMgr.cpp:837
SpellGroupSpellMap mSpellGroupSpell
Definition SpellMgr.h:811
void LoadSpellSpecificAndAuraState()
Definition SpellMgr.cpp:2993
PetDefaultSpellsEntry const * GetPetDefaultSpellsEntry(int32 id) const
Definition SpellMgr.cpp:999
SpellTargetPosition const * GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const
Definition SpellMgr.cpp:690
SameEffectStackMap mSpellSameEffectStack
Definition SpellMgr.h:813
SpellCooldownOverrideMap mSpellCooldownOverrideMap
Definition SpellMgr.h:832
SpellEnchantProcEntry const * GetSpellEnchantProcEvent(uint32 enchId) const
Definition SpellMgr.cpp:971
SpellAreaForAreaMap mSpellAreaForAreaMap
Definition SpellMgr.h:827
uint32 GetSpellDifficultyId(uint32 spellId) const
Definition SpellMgr.cpp:525
uint8 GetSpellRank(uint32 spell_id) const
Definition SpellMgr.cpp:635
void LoadSpellPetAuras()
Definition SpellMgr.cpp:2316
void UnloadSpellInfoImplicitTargetConditionLists()
Definition SpellMgr.cpp:2984
SpellSpellGroupMapBounds GetSpellSpellGroupMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:698
SpellAreaMap mSpellAreaMap
Definition SpellMgr.h:823
void LoadSpellEnchantProcData()
Definition SpellMgr.cpp:2420
uint32 GetSpellInfoStoreSize() const
Definition SpellMgr.h:758
SpellBonusMap mSpellBonusMap
Definition SpellMgr.h:816
SpellMgr()
Definition SpellMgr.cpp:401
SpellChainNode const * GetSpellChainNode(uint32 spell_id) const
Definition SpellMgr.cpp:592
SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:660
void LoadSpellRanks()
Definition SpellMgr.cpp:1247
bool AddSameEffectStackRuleSpellGroups(SpellInfo const *spellInfo, uint32 auraType, int32 amount, std::map< SpellGroup, int32 > &groups) const
Definition SpellMgr.cpp:747
void LoadSpellGroups()
Definition SpellMgr.cpp:1581
void LoadPetLevelupSpellMap()
Definition SpellMgr.cpp:2518
SpellSpellGroupMap mSpellSpellGroup
Definition SpellMgr.h:810
PetAura const * GetPetAura(uint32 spell_id, uint8 eff) const
Definition SpellMgr.cpp:962
void LoadSpellMixology()
Definition SpellMgr.cpp:2258
SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const
Definition SpellMgr.cpp:1027
bool IsArenaAllowedEnchancment(uint32 ench_id) const
Definition SpellMgr.cpp:979
SpellThreatMap mSpellThreatMap
Definition SpellMgr.h:817
SpellAreaForQuestMap mSpellAreaForQuestMap
Definition SpellMgr.h:824
SpellInfoMap mSpellInfoMap
Definition SpellMgr.h:831
void LoadSpellProcs()
Definition SpellMgr.cpp:1887
~SpellMgr()
Definition SpellMgr.cpp:405
SpellInfo * _GetSpellInfo(uint32 spellId)
Definition SpellMgr.h:767
void UnloadSpellInfoChains()
Definition SpellMgr.cpp:1178
bool HasSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:2965
Definition Unit.h:664
Definition Util.h:442
STL namespace.
Definition SpellMgr.h:564
std::bitset< MAX_MECHANIC > Mechanic
Definition SpellMgr.h:567
bool ImmuneAoE
Definition SpellMgr.h:570
std::bitset< MAX_SPELL_SCHOOL > School
Definition SpellMgr.h:565
std::vector< SpellEffects > Effect
Definition SpellMgr.h:568
bool ImmuneChain
Definition SpellMgr.h:571
std::bitset< DISPEL_MAX > DispelType
Definition SpellMgr.h:566
std::vector< AuraType > Aura
Definition SpellMgr.h:569
Definition SpellMgr.h:594
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
Definition SpellMgr.h:595
Definition SpellMgr.h:517
uint32 questEnd
Definition SpellMgr.h:521
bool autocast
Definition SpellMgr.h:527
uint32 raceMask
Definition SpellMgr.h:523
uint32 questStartStatus
Definition SpellMgr.h:525
uint32 spellId
Definition SpellMgr.h:518
uint32 questEndStatus
Definition SpellMgr.h:526
int32 auraSpell
Definition SpellMgr.h:522
bool IsFitToRequirements(Player const *player, uint32 newZone, uint32 newArea) const
Definition SpellMgr.cpp:1032
Gender gender
Definition SpellMgr.h:524
uint32 areaId
Definition SpellMgr.h:519
uint32 questStart
Definition SpellMgr.h:520
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:544
SpellInfo const * last
Definition SpellMgr.h:548
SpellInfo const * next
Definition SpellMgr.h:546
uint8 rank
Definition SpellMgr.h:549
SpellInfo const * first
Definition SpellMgr.h:547
SpellInfo const * prev
Definition SpellMgr.h:545
Definition SpellMgr.h:609
uint32 StartRecoveryTime
Definition SpellMgr.h:612
uint32 CategoryRecoveryTime
Definition SpellMgr.h:611
uint32 StartRecoveryCategory
Definition SpellMgr.h:613
uint32 RecoveryTime
Definition SpellMgr.h:610
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:576
uint16 value
Definition SpellMgr.h:579
uint16 step
Definition SpellMgr.h:578
uint16 maxvalue
Definition SpellMgr.h:580
uint16 skill
Definition SpellMgr.h:577
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

◆ 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 
398{
435 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
454 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
456};

◆ 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 
510{
511 ICC_AREA = 4812,
512 ICC_RACEMASK_HORDE = 690,
514};

◆ 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 
)
106{
107 if (spellproto->IsPositive())
108 return DIMINISHING_NONE;
109
110 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
111 {
112 if (spellproto->Effects[i].ApplyAuraName == SPELL_AURA_MOD_TAUNT)
113 return DIMINISHING_TAUNT;
114 }
115
116 // Explicit Diminishing Groups
117 switch (spellproto->SpellFamilyName)
118 {
120 {
121 // Pet charge effects (Infernal Awakening, Demon Charge)
122 if (spellproto->SpellVisual[0] == 2816 && spellproto->SpellIconID == 15)
124 // Gnaw
125 else if (spellproto->Id == 47481)
127 // Screams of the Past
128 else if (spellproto->Id == 7074)
129 return DIMINISHING_NONE;
130 break;
131 }
132 // Event spells
133 case SPELLFAMILY_UNK1:
134 return DIMINISHING_NONE;
135 case SPELLFAMILY_MAGE:
136 {
137 // Frostbite
138 if (spellproto->Id == 12494)
139 return DIMINISHING_ROOT;
140 // Shattered Barrier
141 else if (spellproto->Id == 55080)
142 return DIMINISHING_ROOT;
143 // Deep Freeze
144 else if (spellproto->SpellIconID == 2939 && spellproto->SpellVisual[0] == 9963)
146 // Frost Nova / Freeze (Water Elemental)
147 else if (spellproto->SpellIconID == 193)
149 // Dragon's Breath
150 else if (spellproto->SpellFamilyFlags[0] & 0x800000)
152 break;
153 }
155 {
156 // Hamstring - limit duration to 10s in PvP
157 if (spellproto->SpellFamilyFlags[0] & 0x2)
159 // Improved Hamstring
160 else if (spellproto->Id == 23694)
161 return DIMINISHING_ROOT;
162 // Charge Stun (own diminishing)
163 else if (spellproto->SpellFamilyFlags[0] & 0x01000000)
164 return DIMINISHING_CHARGE;
165 break;
166 }
168 {
169 // Curses/etc
170 if ((spellproto->SpellFamilyFlags[0] & 0x80000000) || (spellproto->SpellFamilyFlags[1] & 0x200))
172 // Seduction
173 else if (spellproto->SpellFamilyFlags[1] & 0x10000000)
174 return DIMINISHING_FEAR;
175 break;
176 }
178 {
179 // Pounce
180 if (spellproto->SpellFamilyFlags[0] & 0x20000)
182 // Cyclone
183 else if (spellproto->SpellFamilyFlags[1] & 0x20)
184 return DIMINISHING_CYCLONE;
185 // Entangling Roots
186 // Nature's Grasp
187 else if (spellproto->SpellFamilyFlags[0] & 0x00000200)
189 // Faerie Fire
190 else if (spellproto->SpellFamilyFlags[0] & 0x400)
192 // Feral Charge Root Effect
193 else if (spellproto->Id == 45334)
194 return DIMINISHING_NONE;
195 break;
196 }
198 {
199 // Gouge
200 if (spellproto->SpellFamilyFlags[0] & 0x8)
202 // Blind
203 else if (spellproto->SpellFamilyFlags[0] & 0x1000000)
204 return DIMINISHING_FEAR;
205 // Cheap Shot
206 else if (spellproto->SpellFamilyFlags[0] & 0x400)
208 // Crippling poison - Limit to 10 seconds in PvP (No SpellFamilyFlags)
209 else if (spellproto->SpellIconID == 163)
211 break;
212 }
214 {
215 // Hunter's Mark
216 if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538)
218 // Scatter Shot (own diminishing)
219 else if ((spellproto->SpellFamilyFlags[0] & 0x40000) && spellproto->SpellIconID == 132)
221 // Entrapment (own diminishing)
222 else if (spellproto->SpellVisual[0] == 7484 && spellproto->SpellIconID == 20)
224 // Wyvern Sting mechanic is MECHANIC_SLEEP but the diminishing is DIMINISHING_DISORIENT
225 else if ((spellproto->SpellFamilyFlags[1] & 0x1000) && spellproto->SpellIconID == 1721)
227 // Freezing Arrow
228 else if (spellproto->SpellFamilyFlags[0] & 0x8)
230 break;
231 }
233 {
234 // Judgement of Justice - limit duration to 10s in PvP
235 if (spellproto->SpellFamilyFlags[0] & 0x100000)
237 // Turn Evil
238 else if ((spellproto->SpellFamilyFlags[1] & 0x804000) && spellproto->SpellIconID == 309)
239 return DIMINISHING_FEAR;
240 break;
241 }
243 {
244 // Storm, Earth and Fire - Earthgrab
245 if (spellproto->SpellFamilyFlags[2] & 0x4000)
247 break;
248 }
250 {
251 // Hungering Cold (no flags)
252 if (spellproto->SpellIconID == 2797)
254 // Mark of Blood
255 else if ((spellproto->SpellFamilyFlags[0] & 0x10000000) && spellproto->SpellIconID == 2285)
257 break;
258 }
259 default:
260 break;
261 }
262
263 // Lastly - Set diminishing depending on mechanic
264 uint64 mechanic = spellproto->GetAllEffectsMechanicMask();
265 if (mechanic & (1ULL << MECHANIC_CHARM))
267 if (mechanic & (1ULL << MECHANIC_SILENCE))
268 return DIMINISHING_SILENCE;
269 if (mechanic & (1ULL << MECHANIC_SLEEP))
270 return DIMINISHING_SLEEP;
271 if (mechanic & ((1ULL << MECHANIC_SAPPED) | (1ULL << MECHANIC_POLYMORPH) | (1ULL << MECHANIC_SHACKLE)))
273 // Mechanic Knockout, except Blast Wave
274 if (mechanic & (1ULL << MECHANIC_KNOCKOUT) && spellproto->SpellIconID != 292)
276 if (mechanic & (1ULL << MECHANIC_DISARM))
277 return DIMINISHING_DISARM;
278 if (mechanic & (1ULL << MECHANIC_FEAR))
279 return DIMINISHING_FEAR;
280 if (mechanic & (1ULL << MECHANIC_STUN))
282 if (mechanic & (1ULL << MECHANIC_BANISH))
283 return DIMINISHING_BANISH;
284 if (mechanic & (1ULL << MECHANIC_ROOT))
286 if (mechanic & (1ULL << MECHANIC_HORROR))
287 return DIMINISHING_HORROR;
288
289 return DIMINISHING_NONE;
290}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1637
std::uint64_t uint64
Definition Define.h:106
@ DIMINISHING_MIND_CONTROL
Definition SharedDefines.h:3505
@ DIMINISHING_HORROR
Definition SharedDefines.h:3504
@ DIMINISHING_DRAGONS_BREATH
Definition SharedDefines.h:3513
@ DIMINISHING_CONTROLLED_STUN
Definition SharedDefines.h:3497
@ DIMINISHING_CYCLONE
Definition SharedDefines.h:3499
@ DIMINISHING_BANISH
Definition SharedDefines.h:3494
@ DIMINISHING_CONTROLLED_ROOT
Definition SharedDefines.h:3498
@ DIMINISHING_NONE
Definition SharedDefines.h:3493
@ DIMINISHING_SLEEP
Definition SharedDefines.h:3510
@ DIMINISHING_STUN
Definition SharedDefines.h:3507
@ DIMINISHING_DISARM
Definition SharedDefines.h:3500
@ DIMINISHING_ENTRAPMENT
Definition SharedDefines.h:3502
@ DIMINISHING_FEAR
Definition SharedDefines.h:3503
@ DIMINISHING_SCATTER_SHOT
Definition SharedDefines.h:3508
@ DIMINISHING_LIMITONLY
Definition SharedDefines.h:3512
@ DIMINISHING_OPENING_STUN
Definition SharedDefines.h:3496
@ DIMINISHING_DISORIENT
Definition SharedDefines.h:3501
@ DIMINISHING_ROOT
Definition SharedDefines.h:3506
@ DIMINISHING_TAUNT
Definition SharedDefines.h:3511
@ DIMINISHING_CHARGE
Definition SharedDefines.h:3495
@ DIMINISHING_SILENCE
Definition SharedDefines.h:3509
@ 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:3791
@ SPELLFAMILY_MAGE
Definition SharedDefines.h:3789
@ SPELLFAMILY_GENERIC
Definition SharedDefines.h:3786
@ SPELLFAMILY_WARRIOR
Definition SharedDefines.h:3790
@ SPELLFAMILY_PALADIN
Definition SharedDefines.h:3796
@ SPELLFAMILY_HUNTER
Definition SharedDefines.h:3795
@ SPELLFAMILY_ROGUE
Definition SharedDefines.h:3794
@ SPELLFAMILY_SHAMAN
Definition SharedDefines.h:3797
@ SPELLFAMILY_DRUID
Definition SharedDefines.h:3793
@ SPELLFAMILY_DEATHKNIGHT
Definition SharedDefines.h:3801
@ SPELLFAMILY_UNK1
Definition SharedDefines.h:3787
@ 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)
293{
294 switch (group)
295 {
298 case DIMINISHING_STUN:
302 return DRTYPE_ALL;
304 case DIMINISHING_NONE:
305 return DRTYPE_NONE;
306 default:
307 return DRTYPE_PLAYER;
308 }
309}
@ DRTYPE_NONE
Definition SharedDefines.h:3485
@ DRTYPE_PLAYER
Definition SharedDefines.h:3486
@ DRTYPE_ALL
Definition SharedDefines.h:3487

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

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)
312{
313 switch (group)
314 {
317 default:
319 }
320}
@ 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 
)
49{
50 SkillLineAbilityMapBounds skillBounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
51 for (SkillLineAbilityMap::const_iterator itr = skillBounds.first; itr != skillBounds.second; ++itr)
52 if (itr->second->SkillLine == skillId)
53 return true;
54
55 return false;
56}
#define sSpellMgr
Definition SpellMgr.h:836

References sSpellMgr.

Referenced by SpellMgr::LoadSpellInfoCustomAttributes().

◆ IsPrimaryProfessionSkill()

bool IsPrimaryProfessionSkill ( uint32  skill)
37{
38 SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(skill);
39 if (!pSkill)
40 return false;
41
43 return false;
44
45 return true;
46}
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
@ SKILL_CATEGORY_PROFESSION
Definition SharedDefines.h:3313
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