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

Go to the source code of this file.

Classes

struct  SpellProcEventEntry
 
struct  SpellProcEntry
 
struct  SpellEnchantProcEntry
 
struct  SpellBonusEntry
 
struct  std::hash< SpellGroup >
 
struct  SpellThreatEntry
 
struct  SpellTargetPosition
 
class  PetAura
 
struct  SpellArea
 
struct  SpellChainNode
 
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, SpellProcEventEntrySpellProcEventMap
 
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< 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 ,
  SPELL_CAST_PROC_FLAG_MASK = SPELL_PROC_FLAG_MASK | PROC_FLAG_DONE_TRAP_ACTIVATION | RANGED_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 = 0x0000010 }
 
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:197
@ PROC_EX_DEFLECT
Definition SpellMgr.h:202
@ PROC_EX_BLOCK
Definition SpellMgr.h:199
@ PROC_EX_CRITICAL_HIT
Definition SpellMgr.h:194
@ PROC_EX_NORMAL_HIT
Definition SpellMgr.h:193
@ PROC_EX_IMMUNE
Definition SpellMgr.h:201
@ PROC_EX_MISS
Definition SpellMgr.h:195
@ PROC_EX_RESIST
Definition SpellMgr.h:196
@ PROC_EX_REFLECT
Definition SpellMgr.h:204
@ PROC_EX_ABSORB
Definition SpellMgr.h:203
@ PROC_EX_INTERRUPT
Definition SpellMgr.h:205
@ PROC_EX_PARRY
Definition SpellMgr.h:198
@ PROC_EX_EVADE
Definition SpellMgr.h:200
230{
231 PROC_SPELL_TYPE_NONE = 0x0000000,
232 PROC_SPELL_TYPE_DAMAGE = 0x0000001, // damage type of spell
233 PROC_SPELL_TYPE_HEAL = 0x0000002, // heal type of spell
234 PROC_SPELL_TYPE_NO_DMG_HEAL = 0x0000004, // other spells
236};
237
239{
240 PROC_SPELL_PHASE_NONE = 0x0000000,
241 PROC_SPELL_PHASE_CAST = 0x0000001,
242 PROC_SPELL_PHASE_HIT = 0x0000002,
243 PROC_SPELL_PHASE_FINISH = 0x0000004,
245};
246
247enum ProcFlagsHit
248{
249 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
250 PROC_HIT_NORMAL = 0x0000001, // non-critical hits
251 PROC_HIT_CRITICAL = 0x0000002,
252 PROC_HIT_MISS = 0x0000004,
253 PROC_HIT_FULL_RESIST = 0x0000008,
254 PROC_HIT_DODGE = 0x0000010,
255 PROC_HIT_PARRY = 0x0000020,
256 PROC_HIT_BLOCK = 0x0000040, // partial or full block
257 PROC_HIT_EVADE = 0x0000080,
258 PROC_HIT_IMMUNE = 0x0000100,
259 PROC_HIT_DEFLECT = 0x0000200,
260 PROC_HIT_ABSORB = 0x0000400, // partial or full absorb
261 PROC_HIT_REFLECT = 0x0000800,
262 PROC_HIT_INTERRUPT = 0x0001000, // (not used atm)
263 PROC_HIT_FULL_BLOCK = 0x0002000,
264 PROC_HIT_MASK_ALL = 0x0002FFF,
265};
266
268{
269 PROC_ATTR_REQ_EXP_OR_HONOR = 0x0000010,
270};
271
273{
274 uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
275 uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
276 flag96 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
277 uint32 procFlags; // bitmask for matching proc event
278 uint32 procEx; // proc Extend info (see ProcFlagsEx)
279 uint32 procPhase; // proc phase (see ProcFlagsSpellPhase)
280 float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
281 float customChance; // Owerride chance (in most cases for debug only)
282 uint32 cooldown; // hidden cooldown used for some spell proc events, applied to _triggered_spell_
283};
284
285typedef std::unordered_map<uint32, SpellProcEventEntry> SpellProcEventMap;
286
287struct SpellProcEntry
288{
289 uint32 SchoolMask; // if nonzero - bitmask for matching proc condition based on spell's school
290 uint32 SpellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyName
291 flag96 SpellFamilyMask; // if nonzero - bitmask for matching proc condition based on candidate spell's SpellFamilyFlags
292 uint32 ProcFlags; // if nonzero - owerwrite procFlags field for given Spell.dbc entry, bitmask for matching proc condition, see enum ProcFlags
293 uint32 SpellTypeMask; // if nonzero - bitmask for matching proc condition based on candidate spell's damage/heal effects, see enum ProcFlagsSpellType
294 uint32 SpellPhaseMask; // if nonzero - bitmask for matching phase of a spellcast on which proc occurs, see enum ProcFlagsSpellPhase
295 uint32 HitMask; // if nonzero - bitmask for matching proc condition based on hit result, see enum ProcFlagsHit
296 uint32 AttributesMask; // bitmask, see ProcAttributes
297 float ProcsPerMinute; // if nonzero - chance to proc is equal to value * aura caster's weapon speed / 60
298 float Chance; // if nonzero - owerwrite procChance field for given Spell.dbc entry, defines chance of proc to occur, not used if ProcsPerMinute set
299 Milliseconds Cooldown; // if nonzero - cooldown in secs for aura proc, applied to aura
300 uint32 Charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite
301};
302
303typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap;
304
306{
307 ENCHANT_PROC_ATTR_EXCLUSIVE = 0x1, // Only one instance of that effect can be active
308 ENCHANT_PROC_ATTR_WHITE_HIT = 0x2 // Enchant shall only proc off white hits (not abilities)
309};
310
312{
314 float PPMChance;
317};
318
319typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap;
320
321struct SpellBonusEntry
322{
323 float direct_damage;
324 float dot_damage;
325 float ap_bonus;
326 float ap_dot_bonus;
327};
328
329typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap;
330
331enum SpellGroup
332{
337};
338
339namespace std
340{
341 template<>
342 struct hash<SpellGroup>
343 {
344 size_t operator()(SpellGroup const& group) const
345 {
346 return hash<uint32>()(uint32(group));
347 }
348 };
349}
350
351#define SPELL_GROUP_DB_RANGE_MIN 1000
352
353// spell_id, group_id
354typedef std::unordered_multimap<uint32, SpellGroup> SpellSpellGroupMap;
355typedef std::pair<SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator> SpellSpellGroupMapBounds;
356
357// group_id, spell_id
358typedef std::unordered_multimap<SpellGroup, int32> SpellGroupSpellMap;
359typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator> SpellGroupSpellMapBounds;
360
362{
369};
370
371typedef std::unordered_map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap;
372
373typedef std::unordered_map<SpellGroup, std::unordered_set<uint32 /*auraName*/>> SameEffectStackMap;
374
375struct SpellThreatEntry
376{
377 int32 flatMod; // flat threat-value for this Spell - default: 0
378 float pctMod; // threat-multiplier for this Spell - default: 1.0f
379 float apPctMod; // Pct of AP that is added as Threat - default: 0.0f
380};
381
382typedef std::unordered_map<uint32, SpellThreatEntry> SpellThreatMap;
383typedef std::map<uint32, float> SpellMixologyMap;
384
385// coordinates for spells (accessed using SpellMgr functions)
387{
389 float target_X;
390 float target_Y;
391 float target_Z;
392 float target_Orientation;
393};
394
395typedef std::map<std::pair<uint32 /*spell_id*/, SpellEffIndex /*effIndex*/>, SpellTargetPosition> SpellTargetPositionMap;
396
397// Enum with EffectRadiusIndex and their actual radius
399{
436 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
455 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
457};
458
459// Spell pet auras
460class PetAura
461{
462private:
463 typedef std::unordered_map<uint32, uint32> PetAuraMap;
464
465public:
466 PetAura()
467 {
468 auras.clear();
469 }
470
471 PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
472 removeOnChangePet(_removeOnChangePet), damage(_damage)
473 {
474 auras[petEntry] = aura;
475 }
476
477 [[nodiscard]] uint32 GetAura(uint32 petEntry) const
478 {
479 PetAuraMap::const_iterator itr = auras.find(petEntry);
480 if (itr != auras.end())
481 return itr->second;
482 PetAuraMap::const_iterator itr2 = auras.find(0);
483 if (itr2 != auras.end())
484 return itr2->second;
485 return 0;
486 }
487
488 void AddAura(uint32 petEntry, uint32 aura)
489 {
490 auras[petEntry] = aura;
491 }
492
493 [[nodiscard]] bool IsRemovedOnChangePet() const
494 {
495 return removeOnChangePet;
496 }
497
498 [[nodiscard]] int32 GetDamage() const
499 {
500 return damage;
501 }
502
503private:
505 bool removeOnChangePet{false};
506 int32 damage{0};
507};
508typedef std::map<uint32, PetAura> SpellPetAuraMap;
509
510enum ICCBuff
511{
512 ICC_AREA = 4812,
513 ICC_RACEMASK_HORDE = 690,
515};
516
517struct SpellArea
518{
520 uint32 areaId; // zone/subzone/or 0 is not limited to zone
521 uint32 questStart; // quest start (quest must be active or rewarded for spell apply)
522 uint32 questEnd; // quest end (quest must not be rewarded for spell apply)
523 int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case
524 uint32 raceMask; // can be applied only to races
525 Gender gender; // can be applied only to gender
526 uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell
527 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)
528 bool autocast; // if true then auto applied at area enter, in other case just allowed to cast
529
530 // helpers
531 bool IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const;
532};
533
534typedef std::multimap<uint32, SpellArea> SpellAreaMap;
535typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap;
536typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap;
537typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap;
538typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds;
539typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds;
540typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds;
541typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds;
542
543// Spell rank chain (accessed using SpellMgr functions)
544struct SpellChainNode
545{
546 SpellInfo const* prev;
547 SpellInfo const* next;
548 SpellInfo const* first;
549 SpellInfo const* last;
550 uint8 rank;
551};
552
553typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
554
555// spell_id req_spell
556typedef std::multimap<uint32, uint32> SpellRequiredMap;
557typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds;
558
559// req_spell spell_id
560typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap;
561typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds;
562
563// Spell learning properties (accessed using SpellMgr functions)
565{
567 uint16 step;
568 uint16 value; // 0 - max skill value for player level
569 uint16 maxvalue; // 0 - max skill value for player level
570};
571
572typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap;
573
574typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
575typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds;
576
577typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
578typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
579
580typedef std::map<uint32, uint32> SpellDifficultySearcherMap;
581
583{
585};
586
587// < 0 for petspelldata id, > 0 for creature_id
588typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap;
589
590typedef std::vector<uint32> SpellCustomAttribute;
591typedef std::vector<bool> EnchantCustomAttribute;
592
593typedef std::vector<SpellInfo*> SpellInfoMap;
594
595typedef std::map<int32, std::vector<int32> > SpellLinkedMap;
596
598{
603};
604
605typedef std::map<uint32, SpellCooldownOverride> SpellCooldownOverrideMap;
606
608
609inline bool IsProfessionSkill(uint32 skill)
610{
611 return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
612}
613
614inline bool IsProfessionOrRidingSkill(uint32 skill)
615{
616 return IsProfessionSkill(skill) || skill == SKILL_RIDING;
617}
618
619bool IsPartOfSkillLine(uint32 skillId, uint32 spellId);
620
621// spell diminishing returns
622DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, bool triggered);
627
628typedef std::set<uint32> TalentAdditionalSet;
629
630class SpellMgr
631{
632 // Constructors
633private:
634 SpellMgr();
635 ~SpellMgr();
636
637 // Accessors (const or static functions)
638public:
639 static SpellMgr* instance();
640
641 // Spell correctness for client using
642 static bool ComputeIsSpellValid(SpellInfo const* spellInfo, bool msg = true);
643 static bool IsSpellValid(SpellInfo const* spellInfo);
644 static bool CheckSpellValid(SpellInfo const* spellInfo, uint32 spellId, bool isTalent);
645
646 // Spell difficulty
647 [[nodiscard]] uint32 GetSpellDifficultyId(uint32 spellId) const;
648 void SetSpellDifficultyId(uint32 spellId, uint32 id);
649 uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const* caster) const;
650 SpellInfo const* GetSpellForDifficultyFromSpell(SpellInfo const* spell, Unit const* caster) const;
651
652 // Spell Ranks table
653 [[nodiscard]] SpellChainNode const* GetSpellChainNode(uint32 spell_id) const;
654 [[nodiscard]] uint32 GetFirstSpellInChain(uint32 spell_id) const;
655 [[nodiscard]] uint32 GetLastSpellInChain(uint32 spell_id) const;
656 [[nodiscard]] uint32 GetNextSpellInChain(uint32 spell_id) const;
657 [[nodiscard]] uint32 GetPrevSpellInChain(uint32 spell_id) const;
658 [[nodiscard]] uint8 GetSpellRank(uint32 spell_id) const;
659 // not strict check returns provided spell if rank not avalible
660 [[nodiscard]] uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const;
661
662 // Spell Required table
665 [[nodiscard]] bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const;
666
667 // Spell learning
668 [[nodiscard]] SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const;
669
670 // Spell target coordinates
671 [[nodiscard]] SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const;
672
673 // Spell Groups table
675 bool IsSpellMemberOfSpellGroup(uint32 spell_id, SpellGroup group_id) const;
676
678 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells) const;
679 void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set<uint32>& foundSpells, std::set<SpellGroup>& usedGroups) const;
680
681 // Spell Group Stack Rules table
682 bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, uint32 auraType, int32 amount, std::map<SpellGroup, int32>& groups) const;
683 SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const;
685
686 // Spell proc event table
687 [[nodiscard]] SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const;
688 bool IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, ProcEventInfo const& eventInfo, bool active) const;
689
690 // Spell proc table
691 [[nodiscard]] SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
692 bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
693
694 // Spell bonus data table
695 [[nodiscard]] SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const;
696
697 // Spell threat table
698 [[nodiscard]] SpellThreatEntry const* GetSpellThreatEntry(uint32 spellID) const;
699
700 // Spell mixology table
701 [[nodiscard]] float GetSpellMixologyBonus(uint32 spellId) const;
702
704
705 [[nodiscard]] PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const;
706
707 [[nodiscard]] SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const;
708 [[nodiscard]] bool IsArenaAllowedEnchancment(uint32 ench_id) const;
709
710 [[nodiscard]] const std::vector<int32>* GetSpellLinked(int32 spell_id) const;
711
712 [[nodiscard]] PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const;
713 [[nodiscard]] PetDefaultSpellsEntry const* GetPetDefaultSpellsEntry(int32 id) const;
714
715 // Spell area
716 [[nodiscard]] SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const;
721
722 // SpellInfo object management
723 [[nodiscard]] SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
724 // Use this only with 100% valid spellIds
725 [[nodiscard]] SpellInfo const* AssertSpellInfo(uint32 spellId) const
726 {
727 ASSERT(spellId < GetSpellInfoStoreSize());
728 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
729 ASSERT(spellInfo);
730 return spellInfo;
731 }
732 // use this instead of AssertSpellInfo to have the problem logged instead of crashing the server
733 [[nodiscard]] SpellInfo const* CheckSpellInfo(uint32 spellId) const
734 {
735 if (spellId >= GetSpellInfoStoreSize())
736 {
737 LOG_ERROR("server", "spellId {} is not lower than GetSpellInfoStoreSize() ({})", spellId, GetSpellInfoStoreSize());
738 return nullptr;
739 }
740 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
741 if (!spellInfo)
742 {
743 LOG_ERROR("server", "spellId {} has invalid spellInfo", spellId);
744 return nullptr;
745 }
746 return spellInfo;
747 }
748 [[nodiscard]] uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); }
749
750 // Talent Additional Set
751 [[nodiscard]] bool IsAdditionalTalentSpell(uint32 spellId) const;
752
753 [[nodiscard]] bool HasSpellCooldownOverride(uint32 spellId) const;
754 [[nodiscard]] SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const;
755
756private:
757 SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
758
759 // Modifiers
760public:
761 // Loading data at server startup
764 void LoadSpellRanks();
765 void LoadSpellRequired();
768 void LoadSpellGroups();
770 void LoadSpellProcEvents();
771 void LoadSpellProcs();
772 void LoadSpellBonuses();
773 void LoadSpellThreats();
774 void LoadSpellMixology();
776 void LoadSpellPetAuras();
779 void LoadSpellLinked();
782 void LoadSpellAreas();
783 void LoadSpellInfoStore();
790
791private:
818 PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry
822};
823
824#define sSpellMgr SpellMgr::instance()
825
826#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:3507
Gender
Definition SharedDefines.h:60
DiminishingReturnsType
Definition SharedDefines.h:3499
@ SKILL_COOKING
Definition SharedDefines.h:3168
@ SKILL_FISHING
Definition SharedDefines.h:3207
@ SKILL_RIDING
Definition SharedDefines.h:3241
@ SKILL_FIRST_AID
Definition SharedDefines.h:3142
bool IsPrimaryProfessionSkill(uint32 skill)
Definition SpellMgr.cpp:33
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
Definition SpellMgr.cpp:45
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
Definition SpellMgr.h:320
std::unordered_map< uint32, SpellProcEventEntry > SpellProcEventMap
Definition SpellMgr.h:286
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
Definition SpellMgr.h:537
std::unordered_map< SpellGroup, std::unordered_set< uint32 > > SameEffectStackMap
Definition SpellMgr.h:374
bool IsProfessionOrRidingSkill(uint32 skill)
Definition SpellMgr.h:615
std::unordered_multimap< SpellGroup, int32 > SpellGroupSpellMap
Definition SpellMgr.h:359
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const *spellproto)
Definition SpellMgr.cpp:272
ProcFlagsHit
Definition SpellMgr.h:249
@ PROC_HIT_BLOCK
Definition SpellMgr.h:257
@ PROC_HIT_FULL_RESIST
Definition SpellMgr.h:254
@ PROC_HIT_FULL_BLOCK
Definition SpellMgr.h:264
@ PROC_HIT_MISS
Definition SpellMgr.h:253
@ PROC_HIT_INTERRUPT
Definition SpellMgr.h:263
@ PROC_HIT_NONE
Definition SpellMgr.h:250
@ PROC_HIT_DEFLECT
Definition SpellMgr.h:260
@ PROC_HIT_EVADE
Definition SpellMgr.h:258
@ PROC_HIT_DODGE
Definition SpellMgr.h:255
@ PROC_HIT_IMMUNE
Definition SpellMgr.h:259
@ PROC_HIT_ABSORB
Definition SpellMgr.h:261
@ PROC_HIT_PARRY
Definition SpellMgr.h:256
@ PROC_HIT_MASK_ALL
Definition SpellMgr.h:265
@ PROC_HIT_CRITICAL
Definition SpellMgr.h:252
@ PROC_HIT_NORMAL
Definition SpellMgr.h:251
@ PROC_HIT_REFLECT
Definition SpellMgr.h:262
std::map< uint32, float > SpellMixologyMap
Definition SpellMgr.h:384
DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const *spellproto, bool triggered)
Definition SpellMgr.cpp:55
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
Definition SpellMgr.h:562
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
Definition SpellMgr.h:396
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
Definition SpellMgr.cpp:327
std::pair< SpellSpellGroupMap::const_iterator, SpellSpellGroupMap::const_iterator > SpellSpellGroupMapBounds
Definition SpellMgr.h:356
bool IsProfessionSkill(uint32 skill)
Definition SpellMgr.h:610
std::multimap< uint32, SpellArea > SpellAreaMap
Definition SpellMgr.h:535
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition SpellMgr.h:539
std::map< uint32, uint32 > SpellDifficultySearcherMap
Definition SpellMgr.h:581
std::map< uint32, SpellCooldownOverride > SpellCooldownOverrideMap
Definition SpellMgr.h:606
std::map< int32, std::vector< int32 > > SpellLinkedMap
Definition SpellMgr.h:596
SpellGroup
Definition SpellMgr.h:333
@ SPELL_GROUP_NONE
Definition SpellMgr.h:334
@ SPELL_GROUP_CORE_RANGE_MAX
Definition SpellMgr.h:337
@ SPELL_GROUP_ELIXIR_BATTLE
Definition SpellMgr.h:335
@ SPELL_GROUP_ELIXIR_GUARDIAN
Definition SpellMgr.h:336
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
Definition SpellMgr.h:542
std::unordered_map< uint32, SpellChainNode > SpellChainMap
Definition SpellMgr.h:554
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
Definition SpellMgr.h:304
std::set< uint32 > TalentAdditionalSet
Definition SpellMgr.h:629
ProcAttributes
Definition SpellMgr.h:269
@ PROC_ATTR_REQ_EXP_OR_HONOR
Definition SpellMgr.h:270
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
Definition SpellMgr.h:538
std::unordered_map< uint32, SpellThreatEntry > SpellThreatMap
Definition SpellMgr.h:383
SpellGroupStackRule
Definition SpellMgr.h:363
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER
Definition SpellMgr.h:366
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE
Definition SpellMgr.h:365
@ SPELL_GROUP_STACK_RULE_DEFAULT
Definition SpellMgr.h:364
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT
Definition SpellMgr.h:367
@ SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST
Definition SpellMgr.h:368
@ SPELL_GROUP_STACK_RULE_MAX
Definition SpellMgr.h:369
std::unordered_multimap< uint32, SpellGroup > SpellSpellGroupMap
Definition SpellMgr.h:355
std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
Definition SpellMgr.h:558
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
Definition SpellMgr.h:575
std::map< uint32, PetAura > SpellPetAuraMap
Definition SpellMgr.h:509
ICCBuff
Definition SpellMgr.h:512
@ ICC_RACEMASK_HORDE
Definition SpellMgr.h:514
@ ICC_AREA
Definition SpellMgr.h:513
@ ICC_RACEMASK_ALLIANCE
Definition SpellMgr.h:515
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
Definition SpellMgr.h:536
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
Definition SpellMgr.h:589
std::vector< bool > EnchantCustomAttribute
Definition SpellMgr.h:592
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
Definition SpellMgr.cpp:242
std::pair< SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_iterator > SpellGroupSpellMapBounds
Definition SpellMgr.h:360
std::vector< uint32 > SpellCustomAttribute
Definition SpellMgr.h:591
std::unordered_map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
Definition SpellMgr.h:573
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
Definition SpellMgr.h:541
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition SpellMgr.h:576
@ PROC_SPELL_TYPE_NONE
Definition SpellMgr.h:232
@ PROC_SPELL_TYPE_HEAL
Definition SpellMgr.h:234
@ PROC_SPELL_TYPE_MASK_ALL
Definition SpellMgr.h:236
@ PROC_SPELL_TYPE_DAMAGE
Definition SpellMgr.h:233
@ PROC_SPELL_TYPE_NO_DMG_HEAL
Definition SpellMgr.h:235
std::unordered_map< uint32, SpellBonusEntry > SpellBonusMap
Definition SpellMgr.h:330
std::map< uint32, PetLevelupSpellSet > PetLevelupSpellMap
Definition SpellMgr.h:579
DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
Definition SpellMgr.cpp:261
EffectRadiusIndex
Definition SpellMgr.h:400
@ EFFECT_RADIUS_14_YARDS
Definition SpellMgr.h:453
@ EFFECT_RADIUS_500_YARDS
Definition SpellMgr.h:424
@ EFFECT_RADIUS_13_YARDS
Definition SpellMgr.h:411
@ EFFECT_RADIUS_7_YARDS
Definition SpellMgr.h:430
@ EFFECT_RADIUS_100_YARDS
Definition SpellMgr.h:406
@ EFFECT_RADIUS_45_YARDS_2
Definition SpellMgr.h:450
@ EFFECT_RADIUS_80_YARDS
Definition SpellMgr.h:425
@ EFFECT_RADIUS_20_YARDS
Definition SpellMgr.h:403
@ EFFECT_RADIUS_60_YARDS_2
Definition SpellMgr.h:444
@ EFFECT_RADIUS_8_YARDS
Definition SpellMgr.h:408
@ EFFECT_RADIUS_34_YARDS
Definition SpellMgr.h:432
@ EFFECT_RADIUS_45_YARDS
Definition SpellMgr.h:405
@ EFFECT_RADIUS_2_YARDS
Definition SpellMgr.h:401
@ EFFECT_RADIUS_50000_YARDS_2
Definition SpellMgr.h:447
@ EFFECT_RADIUS_44_YARDS
Definition SpellMgr.h:452
@ EFFECT_RADIUS_5_YARDS_3
Definition SpellMgr.h:445
@ EFFECT_RADIUS_15_YARDS
Definition SpellMgr.h:412
@ EFFECT_RADIUS_23_YARDS
Definition SpellMgr.h:455
@ EFFECT_RADIUS_55_YARDS
Definition SpellMgr.h:428
@ EFFECT_RADIUS_65_YARDS
Definition SpellMgr.h:418
@ EFFECT_RADIUS_32_YARDS
Definition SpellMgr.h:451
@ EFFECT_RADIUS_30_YARDS
Definition SpellMgr.h:404
@ EFFECT_RADIUS_1_YARD
Definition SpellMgr.h:410
@ EFFECT_RADIUS_9_YARDS
Definition SpellMgr.h:433
@ EFFECT_RADIUS_16_YARDS
Definition SpellMgr.h:436
@ EFFECT_RADIUS_60_YARDS
Definition SpellMgr.h:441
@ EFFECT_RADIUS_90_YARDS
Definition SpellMgr.h:442
@ EFFECT_RADIUS_130_YARDS
Definition SpellMgr.h:448
@ EFFECT_RADIUS_4_YARDS
Definition SpellMgr.h:420
@ EFFECT_RADIUS_25_YARDS
Definition SpellMgr.h:414
@ EFFECT_RADIUS_10_YARDS_2
Definition SpellMgr.h:438
@ EFFECT_RADIUS_15_YARDS_2
Definition SpellMgr.h:440
@ EFFECT_RADIUS_5_YARDS
Definition SpellMgr.h:402
@ EFFECT_RADIUS_40_YARDS
Definition SpellMgr.h:417
@ EFFECT_RADIUS_70_YARDS
Definition SpellMgr.h:419
@ EFFECT_RADIUS_5_YARDS_2
Definition SpellMgr.h:439
@ EFFECT_RADIUS_3_YARDS
Definition SpellMgr.h:409
@ EFFECT_RADIUS_38_YARDS
Definition SpellMgr.h:449
@ EFFECT_RADIUS_21_YARDS
Definition SpellMgr.h:431
@ EFFECT_RADIUS_50_YARDS
Definition SpellMgr.h:421
@ EFFECT_RADIUS_50000_YARDS
Definition SpellMgr.h:422
@ EFFECT_RADIUS_60_YARDS_3
Definition SpellMgr.h:446
@ EFFECT_RADIUS_18_YARDS
Definition SpellMgr.h:413
@ EFFECT_RADIUS_200_YARDS
Definition SpellMgr.h:416
@ EFFECT_RADIUS_12_YARDS
Definition SpellMgr.h:426
@ EFFECT_RADIUS_10_YARDS
Definition SpellMgr.h:407
@ EFFECT_RADIUS_0_YARDS
Definition SpellMgr.h:429
@ EFFECT_RADIUS_3_5_YARDS
Definition SpellMgr.h:456
@ EFFECT_RADIUS_150_YARDS
Definition SpellMgr.h:434
@ EFFECT_RADIUS_80_YARDS_2
Definition SpellMgr.h:457
@ EFFECT_RADIUS_35_YARDS
Definition SpellMgr.h:415
@ EFFECT_RADIUS_47_YARDS
Definition SpellMgr.h:454
@ EFFECT_RADIUS_6_YARDS
Definition SpellMgr.h:423
@ EFFECT_RADIUS_11_YARDS
Definition SpellMgr.h:435
@ EFFECT_RADIUS_15_YARDS_3
Definition SpellMgr.h:443
@ EFFECT_RADIUS_0_5_YARDS
Definition SpellMgr.h:437
@ EFFECT_RADIUS_99_YARDS
Definition SpellMgr.h:427
ProcFlagsSpellPhase
Definition SpellMgr.h:240
@ PROC_SPELL_PHASE_FINISH
Definition SpellMgr.h:244
@ PROC_SPELL_PHASE_NONE
Definition SpellMgr.h:241
@ PROC_SPELL_PHASE_CAST
Definition SpellMgr.h:242
@ PROC_SPELL_PHASE_HIT
Definition SpellMgr.h:243
@ PROC_SPELL_PHASE_MASK_ALL
Definition SpellMgr.h:245
std::multimap< uint32, uint32 > SpellsRequiringSpellMap
Definition SpellMgr.h:561
EnchantProcAttributes
Definition SpellMgr.h:307
@ ENCHANT_PROC_ATTR_WHITE_HIT
Definition SpellMgr.h:309
@ ENCHANT_PROC_ATTR_EXCLUSIVE
Definition SpellMgr.h:308
std::multimap< uint32, uint32 > SpellRequiredMap
Definition SpellMgr.h:557
std::vector< SpellInfo * > SpellInfoMap
Definition SpellMgr.h:594
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
Definition SpellMgr.h:540
std::unordered_map< SpellGroup, SpellGroupStackRule > SpellGroupStackMap
Definition SpellMgr.h:372
std::multimap< uint32, uint32 > PetLevelupSpellSet
Definition SpellMgr.h:578
DiminishingLevels
Definition Unit.h:269
Definition SpellMgr.h:462
int32 damage
Definition SpellMgr.h:507
int32 GetDamage() const
Definition SpellMgr.h:499
std::unordered_map< uint32, uint32 > PetAuraMap
Definition SpellMgr.h:464
uint32 GetAura(uint32 petEntry) const
Definition SpellMgr.h:478
PetAura()
Definition SpellMgr.h:467
bool removeOnChangePet
Definition SpellMgr.h:506
PetAuraMap auras
Definition SpellMgr.h:505
bool IsRemovedOnChangePet() const
Definition SpellMgr.h:494
void AddAura(uint32 petEntry, uint32 aura)
Definition SpellMgr.h:489
Definition Player.h:1071
Definition Unit.h:427
Definition SpellInfo.h:316
Definition SpellMgr.h:632
SpellRequiredMap mSpellReq
Definition SpellMgr.h:796
SpellLinkedMap mSpellLinkedMap
Definition SpellMgr.h:809
SpellInfo const * AssertSpellInfo(uint32 spellId) const
Definition SpellMgr.h:726
void LoadSpellLinked()
Definition SpellMgr.cpp:2434
SkillLineAbilityMap mSkillLineAbilityMap
Definition SpellMgr.h:817
SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1110
TalentAdditionalSet mTalentSpellAdditionalSet
Definition SpellMgr.h:822
EnchantCustomAttribute mEnchantCustomAttr
Definition SpellMgr.h:811
void SetSpellDifficultyId(uint32 spellId, uint32 id)
Definition SpellMgr.cpp:481
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:367
PetLevelupSpellSet const * GetPetLevelupSpellList(uint32 petFamily) const
Definition SpellMgr.cpp:1093
void LoadSpellInfoStore()
Definition SpellMgr.cpp:2872
uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const *caster) const
Definition SpellMgr.cpp:486
void LoadSpellBonuses()
Definition SpellMgr.cpp:2145
SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1120
SpellAreaForAuraMap mSpellAreaForAuraMap
Definition SpellMgr.h:815
SpellProcEventEntry const * GetSpellProcEvent(uint32 spellId) const
Definition SpellMgr.cpp:787
SpellChainMap mSpellChains
Definition SpellMgr.h:794
void LoadEnchantCustomAttr()
Definition SpellMgr.cpp:2348
void UnloadSpellInfoStore()
Definition SpellMgr.cpp:2943
void LoadSpellAreas()
Definition SpellMgr.cpp:2661
uint32 GetNextSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:567
static SpellMgr * instance()
Definition SpellMgr.cpp:360
SpellPetAuraMap mSpellPetAuraMap
Definition SpellMgr.h:808
SpellLearnSkillMap mSpellLearnSkills
Definition SpellMgr.h:797
void LoadSpellCooldownOverrides()
Definition SpellMgr.cpp:2901
SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1115
SpellBonusEntry const * GetSpellBonusData(uint32 spellId) const
Definition SpellMgr.cpp:1020
void LoadSkillLineAbilityMap()
Definition SpellMgr.cpp:2263
SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1060
SpellProcEventMap mSpellProcEventMap
Definition SpellMgr.h:803
static bool CheckSpellValid(SpellInfo const *spellInfo, uint32 spellId, bool isTalent)
Definition SpellMgr.cpp:456
float GetSpellMixologyBonus(uint32 spellId) const
Definition SpellMgr.cpp:1051
SpellAreaForQuestMap mSpellAreaForQuestEndMap
Definition SpellMgr.h:814
SpellGroupSpellMapBounds GetSpellGroupSpellMapBounds(SpellGroup group_id) const
Definition SpellMgr.cpp:665
bool IsSpellProcEventCanTriggeredBy(SpellInfo const *spellProto, SpellProcEventEntry const *spellProcEvent, uint32 EventProcFlag, ProcEventInfo const &eventInfo, bool active) const
Definition SpellMgr.cpp:795
PetDefaultSpellsMap mPetDefaultSpellsMap
Definition SpellMgr.h:819
uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict=false) const
Definition SpellMgr.cpp:593
SpellLearnSkillNode const * GetSpellLearnSkill(uint32 spell_id) const
Definition SpellMgr.cpp:631
bool IsSpellMemberOfSpellGroup(uint32 spell_id, SpellGroup group_id) const
Definition SpellMgr.cpp:654
SpellMixologyMap mSpellMixologyMap
Definition SpellMgr.h:807
void LoadSpellInfoCustomAttributes()
Definition SpellMgr.cpp:2978
const std::vector< int32 > * GetSpellLinked(int32 spell_id) const
Definition SpellMgr.cpp:1087
SpellRequiredMapBounds GetSpellsRequiredForSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:605
SpellInfo const * GetSpellInfo(uint32 spellId) const
Definition SpellMgr.h:724
uint32 GetPrevSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:576
bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const
Definition SpellMgr.cpp:615
void LoadSpellThreats()
Definition SpellMgr.cpp:2186
SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1125
void LoadSpellRequired()
Definition SpellMgr.cpp:1461
SpellInfo const * GetSpellForDifficultyFromSpell(SpellInfo const *spell, Unit const *caster) const
Definition SpellMgr.cpp:528
void LoadSpellTargetPositions()
Definition SpellMgr.cpp:1579
SpellDifficultySearcherMap mSpellDifficultySearcherMap
Definition SpellMgr.h:793
void GetSetOfSpellsInSpellGroup(SpellGroup group_id, std::set< uint32 > &foundSpells) const
Definition SpellMgr.cpp:670
void LoadSpellLearnSkills()
Definition SpellMgr.cpp:1526
uint32 GetLastSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:559
void LoadSpellTalentRanks()
Definition SpellMgr.cpp:1289
SpellGroupStackRule GetSpellGroupStackRule(SpellGroup group_id) const
Definition SpellMgr.cpp:778
SpellThreatEntry const * GetSpellThreatEntry(uint32 spellID) const
Definition SpellMgr.cpp:1036
void LoadSpellGroupStackRules()
Definition SpellMgr.cpp:1765
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition SpellMgr.cpp:438
SpellGroupStackMap mSpellGroupStack
Definition SpellMgr.h:801
uint32 GetFirstSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:551
bool CanSpellTriggerProcOnEvent(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
Definition SpellMgr.cpp:955
SpellEnchantProcEventMap mSpellEnchantProcEventMap
Definition SpellMgr.h:810
void LoadPetDefaultSpells()
Definition SpellMgr.cpp:2581
PetLevelupSpellMap mPetLevelupSpellMap
Definition SpellMgr.h:818
SpellInfo const * CheckSpellInfo(uint32 spellId) const
Definition SpellMgr.h:734
SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const *spellInfo1, SpellInfo const *spellInfo2) const
Definition SpellMgr.cpp:731
bool IsAdditionalTalentSpell(uint32 spellId) const
Definition SpellMgr.cpp:626
SpellProcMap mSpellProcMap
Definition SpellMgr.h:804
SpellsRequiringSpellMap mSpellsReqSpell
Definition SpellMgr.h:795
void LoadSpellInfoCorrections()
Definition SpellInfoCorrections.cpp:39
SpellTargetPositionMap mSpellTargetPositions
Definition SpellMgr.h:798
SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:2937
SpellProcEntry const * GetSpellProcEntry(uint32 spellId) const
Definition SpellMgr.cpp:947
SpellGroupSpellMap mSpellGroupSpell
Definition SpellMgr.h:800
void LoadSpellSpecificAndAuraState()
Definition SpellMgr.cpp:2960
PetDefaultSpellsEntry const * GetPetDefaultSpellsEntry(int32 id) const
Definition SpellMgr.cpp:1102
SpellTargetPosition const * GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const
Definition SpellMgr.cpp:640
SameEffectStackMap mSpellSameEffectStack
Definition SpellMgr.h:802
SpellCooldownOverrideMap mSpellCooldownOverrideMap
Definition SpellMgr.h:821
SpellEnchantProcEntry const * GetSpellEnchantProcEvent(uint32 enchId) const
Definition SpellMgr.cpp:1074
SpellAreaForAreaMap mSpellAreaForAreaMap
Definition SpellMgr.h:816
uint32 GetSpellDifficultyId(uint32 spellId) const
Definition SpellMgr.cpp:475
void LoadSpellProcEvents()
Definition SpellMgr.cpp:1919
uint8 GetSpellRank(uint32 spell_id) const
Definition SpellMgr.cpp:585
void LoadSpellPetAuras()
Definition SpellMgr.cpp:2285
void UnloadSpellInfoImplicitTargetConditionLists()
Definition SpellMgr.cpp:2951
SpellSpellGroupMapBounds GetSpellSpellGroupMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:648
SpellAreaMap mSpellAreaMap
Definition SpellMgr.h:812
void LoadSpellEnchantProcData()
Definition SpellMgr.cpp:2389
uint32 GetSpellInfoStoreSize() const
Definition SpellMgr.h:749
SpellBonusMap mSpellBonusMap
Definition SpellMgr.h:805
SpellMgr()
Definition SpellMgr.cpp:351
SpellChainNode const * GetSpellChainNode(uint32 spell_id) const
Definition SpellMgr.cpp:542
SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:610
void LoadSpellRanks()
Definition SpellMgr.cpp:1350
bool AddSameEffectStackRuleSpellGroups(SpellInfo const *spellInfo, uint32 auraType, int32 amount, std::map< SpellGroup, int32 > &groups) const
Definition SpellMgr.cpp:697
void LoadSpellGroups()
Definition SpellMgr.cpp:1684
void LoadPetLevelupSpellMap()
Definition SpellMgr.cpp:2487
SpellSpellGroupMap mSpellSpellGroup
Definition SpellMgr.h:799
PetAura const * GetPetAura(uint32 spell_id, uint8 eff) const
Definition SpellMgr.cpp:1065
void LoadSpellMixology()
Definition SpellMgr.cpp:2227
SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const
Definition SpellMgr.cpp:1130
bool IsArenaAllowedEnchancment(uint32 ench_id) const
Definition SpellMgr.cpp:1082
SpellThreatMap mSpellThreatMap
Definition SpellMgr.h:806
SpellAreaForQuestMap mSpellAreaForQuestMap
Definition SpellMgr.h:813
SpellInfoMap mSpellInfoMap
Definition SpellMgr.h:820
void LoadSpellProcs()
Definition SpellMgr.cpp:2013
~SpellMgr()
Definition SpellMgr.cpp:355
SpellInfo * _GetSpellInfo(uint32 spellId)
Definition SpellMgr.h:758
void UnloadSpellInfoChains()
Definition SpellMgr.cpp:1281
bool HasSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:2932
Definition Unit.h:655
Definition Util.h:442
STL namespace.
Definition SpellMgr.h:584
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
Definition SpellMgr.h:585
Definition SpellMgr.h:519
uint32 questEnd
Definition SpellMgr.h:523
bool autocast
Definition SpellMgr.h:529
uint32 raceMask
Definition SpellMgr.h:525
uint32 questStartStatus
Definition SpellMgr.h:527
uint32 spellId
Definition SpellMgr.h:520
uint32 questEndStatus
Definition SpellMgr.h:528
int32 auraSpell
Definition SpellMgr.h:524
bool IsFitToRequirements(Player const *player, uint32 newZone, uint32 newArea) const
Definition SpellMgr.cpp:1135
Gender gender
Definition SpellMgr.h:526
uint32 areaId
Definition SpellMgr.h:521
uint32 questStart
Definition SpellMgr.h:522
Definition SpellMgr.h:323
float ap_dot_bonus
Definition SpellMgr.h:327
float dot_damage
Definition SpellMgr.h:325
float ap_bonus
Definition SpellMgr.h:326
float direct_damage
Definition SpellMgr.h:324
Definition SpellMgr.h:546
SpellInfo const * last
Definition SpellMgr.h:550
SpellInfo const * next
Definition SpellMgr.h:548
uint8 rank
Definition SpellMgr.h:551
SpellInfo const * first
Definition SpellMgr.h:549
SpellInfo const * prev
Definition SpellMgr.h:547
Definition SpellMgr.h:599
uint32 StartRecoveryTime
Definition SpellMgr.h:602
uint32 CategoryRecoveryTime
Definition SpellMgr.h:601
uint32 StartRecoveryCategory
Definition SpellMgr.h:603
uint32 RecoveryTime
Definition SpellMgr.h:600
Definition SpellMgr.h:313
uint32 procEx
Definition SpellMgr.h:316
uint32 attributeMask
Definition SpellMgr.h:317
uint32 customChance
Definition SpellMgr.h:314
float PPMChance
Definition SpellMgr.h:315
Definition SpellMgr.h:566
uint16 value
Definition SpellMgr.h:569
uint16 step
Definition SpellMgr.h:568
uint16 maxvalue
Definition SpellMgr.h:570
uint16 skill
Definition SpellMgr.h:567
Definition SpellMgr.h:289
uint32 SpellFamilyName
Definition SpellMgr.h:291
float ProcsPerMinute
Definition SpellMgr.h:298
Milliseconds Cooldown
Definition SpellMgr.h:300
uint32 Charges
Definition SpellMgr.h:301
uint32 AttributesMask
Definition SpellMgr.h:297
flag96 SpellFamilyMask
Definition SpellMgr.h:292
uint32 HitMask
Definition SpellMgr.h:296
uint32 SpellTypeMask
Definition SpellMgr.h:294
uint32 ProcFlags
Definition SpellMgr.h:293
uint32 SpellPhaseMask
Definition SpellMgr.h:295
uint32 SchoolMask
Definition SpellMgr.h:290
float Chance
Definition SpellMgr.h:299
Definition SpellMgr.h:274
uint32 cooldown
Definition SpellMgr.h:283
uint32 procPhase
Definition SpellMgr.h:280
flag96 spellFamilyMask
Definition SpellMgr.h:277
uint32 spellFamilyName
Definition SpellMgr.h:276
uint32 procEx
Definition SpellMgr.h:279
float ppmRate
Definition SpellMgr.h:281
uint32 schoolMask
Definition SpellMgr.h:275
float customChance
Definition SpellMgr.h:282
uint32 procFlags
Definition SpellMgr.h:278
Definition SpellMgr.h:388
float target_Z
Definition SpellMgr.h:392
uint32 target_mapId
Definition SpellMgr.h:389
float target_Y
Definition SpellMgr.h:391
float target_Orientation
Definition SpellMgr.h:393
float target_X
Definition SpellMgr.h:390
Definition SpellMgr.h:377
int32 flatMod
Definition SpellMgr.h:378
float apPctMod
Definition SpellMgr.h:380
float pctMod
Definition SpellMgr.h:379

◆ MELEE_BASED_TRIGGER_MASK

#define MELEE_BASED_TRIGGER_MASK
Value:
@ PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:118
@ PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK
Definition SpellMgr.h:116
@ PROC_FLAG_DONE_MELEE_AUTO_ATTACK
Definition SpellMgr.h:109
@ PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:112
@ PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:119
@ PROC_FLAG_DONE_RANGED_AUTO_ATTACK
Definition SpellMgr.h:115
@ PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK
Definition SpellMgr.h:110
@ PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS
Definition SpellMgr.h:113

◆ 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

◆ 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

◆ SpellProcEventMap

typedef std::unordered_map<uint32, SpellProcEventEntry> SpellProcEventMap

◆ 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 
400{
437 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
456 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
458};

◆ EnchantProcAttributes

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

◆ ICCBuff

enum ICCBuff
Enumerator
ICC_AREA 
ICC_RACEMASK_HORDE 
ICC_RACEMASK_ALLIANCE 
512{
513 ICC_AREA = 4812,
514 ICC_RACEMASK_HORDE = 690,
516};

◆ ProcAttributes

Enumerator
PROC_ATTR_REQ_EXP_OR_HONOR 
269{
270 PROC_ATTR_REQ_EXP_OR_HONOR = 0x0000010,
271};

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

◆ 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 
191{
192 PROC_EX_NONE = 0x0000000, // If none can tigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag)
193 PROC_EX_NORMAL_HIT = 0x0000001, // If set only from normal hit (only damage spells)
194 PROC_EX_CRITICAL_HIT = 0x0000002,
195 PROC_EX_MISS = 0x0000004,
196 PROC_EX_RESIST = 0x0000008,
197 PROC_EX_DODGE = 0x0000010,
198 PROC_EX_PARRY = 0x0000020,
199 PROC_EX_BLOCK = 0x0000040,
200 PROC_EX_EVADE = 0x0000080,
201 PROC_EX_IMMUNE = 0x0000100,
202 PROC_EX_DEFLECT = 0x0000200,
203 PROC_EX_ABSORB = 0x0000400,
204 PROC_EX_REFLECT = 0x0000800,
205 PROC_EX_INTERRUPT = 0x0001000, // Melee hit result can be Interrupt (not used)
206 PROC_EX_FULL_BLOCK = 0x0002000, // block all attack damage
207 PROC_EX_RESERVED2 = 0x0004000,
208 PROC_EX_NOT_ACTIVE_SPELL = 0x0008000, // Spell mustn't do damage/heal to proc
209 PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000, // If set trigger always no matter of hit result
210 PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000, // If set trigger always but only one time (not implemented yet)
211 PROC_EX_ONLY_ACTIVE_SPELL = 0x0040000, // Spell has to do damage/heal to proc
212 PROC_EX_NO_OVERHEAL = 0x0080000, // Proc if heal did some work
213 PROC_EX_NO_AURA_REFRESH = 0x0100000, // Proc if aura was not refreshed
214 PROC_EX_ONLY_FIRST_TICK = 0x0200000, // Proc only on first tick (in case of periodic spells)
215
216 // Flags for internal use - do not use these in db!
217 PROC_EX_INTERNAL_CANT_PROC = 0x0800000,
218 PROC_EX_INTERNAL_DOT = 0x1000000,
219 PROC_EX_INTERNAL_HOT = 0x2000000,
220 PROC_EX_INTERNAL_TRIGGERED = 0x4000000,
222};
@ PROC_EX_NONE
Definition SpellMgr.h:192
@ PROC_EX_NO_OVERHEAL
Definition SpellMgr.h:212
@ PROC_EX_NO_AURA_REFRESH
Definition SpellMgr.h:213
@ PROC_EX_INTERNAL_CANT_PROC
Definition SpellMgr.h:217
@ PROC_EX_RESERVED2
Definition SpellMgr.h:207
@ PROC_EX_INTERNAL_DOT
Definition SpellMgr.h:218
@ PROC_EX_INTERNAL_HOT
Definition SpellMgr.h:219
@ PROC_EX_ONLY_ACTIVE_SPELL
Definition SpellMgr.h:211
@ PROC_EX_FULL_BLOCK
Definition SpellMgr.h:206
@ PROC_EX_EX_ONE_TIME_TRIGGER
Definition SpellMgr.h:210
@ PROC_EX_ONLY_FIRST_TICK
Definition SpellMgr.h:214
@ PROC_EX_INTERNAL_TRIGGERED
Definition SpellMgr.h:220
@ PROC_EX_EX_TRIGGER_ALWAYS
Definition SpellMgr.h:209
@ PROC_EX_NOT_ACTIVE_SPELL
Definition SpellMgr.h:208
@ PROC_EX_INTERNAL_REQ_FAMILY
Definition SpellMgr.h:221

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

◆ 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 
231{
232 PROC_SPELL_TYPE_NONE = 0x0000000,
233 PROC_SPELL_TYPE_DAMAGE = 0x0000001, // damage type of spell
234 PROC_SPELL_TYPE_HEAL = 0x0000002, // heal type of spell
235 PROC_SPELL_TYPE_NO_DMG_HEAL = 0x0000004, // other spells
237};

◆ SpellCategories

Enumerator
SPELLCATEGORY_HEALTH_MANA_POTIONS 
SPELLCATEGORY_DEVOUR_MAGIC 
SPELLCATEGORY_JUDGEMENT 
SPELLCATEGORY_FOOD 
SPELLCATEGORY_DRINK 
37{
40 SPELLCATEGORY_JUDGEMENT = 1210, // Judgement (seal trigger)
43};
@ SPELLCATEGORY_DRINK
Definition SpellMgr.h:42
@ SPELLCATEGORY_DEVOUR_MAGIC
Definition SpellMgr.h:39
@ SPELLCATEGORY_HEALTH_MANA_POTIONS
Definition SpellMgr.h:38
@ SPELLCATEGORY_FOOD
Definition SpellMgr.h:41
@ SPELLCATEGORY_JUDGEMENT
Definition SpellMgr.h:40

◆ 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)
47{
48 // SPELLFAMILYFLAG = SpellFamilyFlags[0]
49 // SPELLFAMILYFLAG1 = SpellFamilyFlags[1]
50 // SPELLFAMILYFLAG2 = SpellFamilyFlags[2]
51
52 // Rogue
54 SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT = 0x00000860, // Vanish, Evasion, Sprint
55 SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP = 0x00000240, // Cold Blood, Shadowstep
56 SPELLFAMILYFLAG_ROGUE_KICK = 0x00000010, // Kick
57 SPELLFAMILYFLAG1_ROGUE_DISMANTLE = 0x00100000, // Dismantle
58 SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY = 0x40000000, // Blade Flurry
59 SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY = 0x00000800, // Blade Flurry
60
61 // Warrior
66
67 // Warlock
69
70 // Druid
72
73 // Paladin
75
76 // Shaman
82
83 // Deathknight
86
88 SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS = 0x04000000, // Seems to be linked to most totems and some totem effects
89};
@ SPELLFAMILYFLAG_SHAMAN_MANA_SPRING
Definition SpellMgr.h:79
@ SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT
Definition SpellMgr.h:54
@ SPELLFAMILYFLAG_WARLOCK_LIFETAP
Definition SpellMgr.h:68
@ SPELLFAMILYFLAG_WARRIOR_CONCUSSION_BLOW
Definition SpellMgr.h:65
@ SPELLFAMILYFLAG_ROGUE_KICK
Definition SpellMgr.h:56
@ SPELLFAMILYFLAG1_ROGUE_DISMANTLE
Definition SpellMgr.h:57
@ SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP
Definition SpellMgr.h:55
@ SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY
Definition SpellMgr.h:58
@ SPELLFAMILYFLAG_WARRIOR_EXECUTE
Definition SpellMgr.h:64
@ SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH
Definition SpellMgr.h:80
@ SPELLFAMILYFLAG_SHAMAN_TOTEM_EFFECTS
Definition SpellMgr.h:88
@ SPELLFAMILYFLAG_DK_DEATH_COIL
Definition SpellMgr.h:85
@ SPELLFAMILYFLAG_ROGUE_VANISH
Definition SpellMgr.h:53
@ SPELLFAMILYFLAG_SHAMAN_FROST_SHOCK
Definition SpellMgr.h:77
@ SPELLFAMILYFLAG_WARRIOR_SLAM
Definition SpellMgr.h:63
@ SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY
Definition SpellMgr.h:59
@ SPELLFAMILYFLAG2_DRUID_STARFALL
Definition SpellMgr.h:71
@ SPELLFAMILYFLAG1_PALADIN_DIVINESTORM
Definition SpellMgr.h:74
@ SPELLFAMILYFLAG_WARRIOR_CHARGE
Definition SpellMgr.h:62
@ SPELLFAMILYFLAG_DK_DEATH_STRIKE
Definition SpellMgr.h:84
@ SPELLFAMILYFLAG_SHAMAN_HEALING_STREAM
Definition SpellMgr.h:78
@ SPELLFAMILYFLAG_SHAMAN_FIRE_NOVA
Definition SpellMgr.h:81

◆ 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 
94{
95 SPELL_LINK_CAST = 0, // +: cast; -: remove
96 SPELL_LINK_HIT = 1 * 200000,
97 SPELL_LINK_AURA = 2 * 200000, // +: aura; -: immune
99};
@ SPELL_LINK_HIT
Definition SpellMgr.h:96
@ SPELL_LINK_CAST
Definition SpellMgr.h:95
@ SPELL_LINK_AURA
Definition SpellMgr.h:97
@ SPELL_LINK_REMOVE
Definition SpellMgr.h:98

Function Documentation

◆ GetDiminishingReturnsGroupForSpell()

DiminishingGroup GetDiminishingReturnsGroupForSpell ( SpellInfo const *  spellproto,
bool  triggered 
)
56{
57 if (spellproto->IsPositive())
58 return DIMINISHING_NONE;
59
60 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
61 {
62 if (spellproto->Effects[i].ApplyAuraName == SPELL_AURA_MOD_TAUNT)
63 return DIMINISHING_TAUNT;
64 }
65
66 // Explicit Diminishing Groups
67 switch (spellproto->SpellFamilyName)
68 {
70 {
71 // Pet charge effects (Infernal Awakening, Demon Charge)
72 if (spellproto->SpellVisual[0] == 2816 && spellproto->SpellIconID == 15)
74 // Gnaw
75 else if (spellproto->Id == 47481)
77 // Screams of the Past
78 else if (spellproto->Id == 7074)
79 return DIMINISHING_NONE;
80 break;
81 }
82 // Event spells
84 return DIMINISHING_NONE;
86 {
87 // Frostbite
88 if (spellproto->Id == 12494)
89 return DIMINISHING_ROOT;
90 // Shattered Barrier
91 else if (spellproto->Id == 55080)
92 return DIMINISHING_ROOT;
93 // Deep Freeze
94 else if (spellproto->SpellIconID == 2939 && spellproto->SpellVisual[0] == 9963)
96 // Frost Nova / Freeze (Water Elemental)
97 else if (spellproto->SpellIconID == 193)
99 // Dragon's Breath
100 else if (spellproto->SpellFamilyFlags[0] & 0x800000)
102 break;
103 }
105 {
106 // Hamstring - limit duration to 10s in PvP
107 if (spellproto->SpellFamilyFlags[0] & 0x2)
109 // Improved Hamstring
110 else if (spellproto->Id == 23694)
111 return DIMINISHING_ROOT;
112 // Charge Stun (own diminishing)
113 else if (spellproto->SpellFamilyFlags[0] & 0x01000000)
114 return DIMINISHING_CHARGE;
115 break;
116 }
118 {
119 // Curses/etc
120 if ((spellproto->SpellFamilyFlags[0] & 0x80000000) || (spellproto->SpellFamilyFlags[1] & 0x200))
122 // Seduction
123 else if (spellproto->SpellFamilyFlags[1] & 0x10000000)
124 return DIMINISHING_FEAR;
125 break;
126 }
128 {
129 // Pounce
130 if (spellproto->SpellFamilyFlags[0] & 0x20000)
132 // Cyclone
133 else if (spellproto->SpellFamilyFlags[1] & 0x20)
134 return DIMINISHING_CYCLONE;
135 // Entangling Roots
136 // Nature's Grasp
137 else if (spellproto->SpellFamilyFlags[0] & 0x00000200)
139 // Faerie Fire
140 else if (spellproto->SpellFamilyFlags[0] & 0x400)
142 // Feral Charge Root Effect
143 else if (spellproto->Id == 45334)
144 return DIMINISHING_NONE;
145 break;
146 }
148 {
149 // Gouge
150 if (spellproto->SpellFamilyFlags[0] & 0x8)
152 // Blind
153 else if (spellproto->SpellFamilyFlags[0] & 0x1000000)
154 return DIMINISHING_FEAR;
155 // Cheap Shot
156 else if (spellproto->SpellFamilyFlags[0] & 0x400)
158 // Crippling poison - Limit to 10 seconds in PvP (No SpellFamilyFlags)
159 else if (spellproto->SpellIconID == 163)
161 break;
162 }
164 {
165 // Hunter's Mark
166 if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538)
168 // Scatter Shot (own diminishing)
169 else if ((spellproto->SpellFamilyFlags[0] & 0x40000) && spellproto->SpellIconID == 132)
171 // Entrapment (own diminishing)
172 else if (spellproto->SpellVisual[0] == 7484 && spellproto->SpellIconID == 20)
174 // Wyvern Sting mechanic is MECHANIC_SLEEP but the diminishing is DIMINISHING_DISORIENT
175 else if ((spellproto->SpellFamilyFlags[1] & 0x1000) && spellproto->SpellIconID == 1721)
177 // Freezing Arrow
178 else if (spellproto->SpellFamilyFlags[0] & 0x8)
180 break;
181 }
183 {
184 // Judgement of Justice - limit duration to 10s in PvP
185 if (spellproto->SpellFamilyFlags[0] & 0x100000)
187 // Turn Evil
188 else if ((spellproto->SpellFamilyFlags[1] & 0x804000) && spellproto->SpellIconID == 309)
189 return DIMINISHING_FEAR;
190 break;
191 }
193 {
194 // Storm, Earth and Fire - Earthgrab
195 if (spellproto->SpellFamilyFlags[2] & 0x4000)
197 break;
198 }
200 {
201 // Hungering Cold (no flags)
202 if (spellproto->SpellIconID == 2797)
204 // Mark of Blood
205 else if ((spellproto->SpellFamilyFlags[0] & 0x10000000) && spellproto->SpellIconID == 2285)
207 break;
208 }
209 default:
210 break;
211 }
212
213 // Lastly - Set diminishing depending on mechanic
214 uint32 mechanic = spellproto->GetAllEffectsMechanicMask();
215 if (mechanic & (1 << MECHANIC_CHARM))
217 if (mechanic & (1 << MECHANIC_SILENCE))
218 return DIMINISHING_SILENCE;
219 if (mechanic & (1 << MECHANIC_SLEEP))
220 return DIMINISHING_SLEEP;
221 if (mechanic & ((1 << MECHANIC_SAPPED) | (1 << MECHANIC_POLYMORPH) | (1 << MECHANIC_SHACKLE)))
223 // Mechanic Knockout, except Blast Wave
224 if (mechanic & (1 << MECHANIC_KNOCKOUT) && spellproto->SpellIconID != 292)
226 if (mechanic & (1 << MECHANIC_DISARM))
227 return DIMINISHING_DISARM;
228 if (mechanic & (1 << MECHANIC_FEAR))
229 return DIMINISHING_FEAR;
230 if (mechanic & (1 << MECHANIC_STUN))
232 if (mechanic & (1 << MECHANIC_BANISH))
233 return DIMINISHING_BANISH;
234 if (mechanic & (1 << MECHANIC_ROOT))
236 if (mechanic & (1 << MECHANIC_HORROR))
237 return DIMINISHING_HORROR;
238
239 return DIMINISHING_NONE;
240}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1635
@ DIMINISHING_MIND_CONTROL
Definition SharedDefines.h:3520
@ DIMINISHING_HORROR
Definition SharedDefines.h:3519
@ DIMINISHING_DRAGONS_BREATH
Definition SharedDefines.h:3528
@ DIMINISHING_CONTROLLED_STUN
Definition SharedDefines.h:3512
@ DIMINISHING_CYCLONE
Definition SharedDefines.h:3514
@ DIMINISHING_BANISH
Definition SharedDefines.h:3509
@ DIMINISHING_CONTROLLED_ROOT
Definition SharedDefines.h:3513
@ DIMINISHING_NONE
Definition SharedDefines.h:3508
@ DIMINISHING_SLEEP
Definition SharedDefines.h:3525
@ DIMINISHING_STUN
Definition SharedDefines.h:3522
@ DIMINISHING_DISARM
Definition SharedDefines.h:3515
@ DIMINISHING_ENTRAPMENT
Definition SharedDefines.h:3517
@ DIMINISHING_FEAR
Definition SharedDefines.h:3518
@ DIMINISHING_SCATTER_SHOT
Definition SharedDefines.h:3523
@ DIMINISHING_LIMITONLY
Definition SharedDefines.h:3527
@ DIMINISHING_OPENING_STUN
Definition SharedDefines.h:3511
@ DIMINISHING_DISORIENT
Definition SharedDefines.h:3516
@ DIMINISHING_ROOT
Definition SharedDefines.h:3521
@ DIMINISHING_TAUNT
Definition SharedDefines.h:3526
@ DIMINISHING_CHARGE
Definition SharedDefines.h:3510
@ DIMINISHING_SILENCE
Definition SharedDefines.h:3524
@ MECHANIC_DISARM
Definition SharedDefines.h:1339
@ MECHANIC_FEAR
Definition SharedDefines.h:1341
@ MECHANIC_KNOCKOUT
Definition SharedDefines.h:1350
@ MECHANIC_CHARM
Definition SharedDefines.h:1337
@ MECHANIC_STUN
Definition SharedDefines.h:1348
@ MECHANIC_ROOT
Definition SharedDefines.h:1343
@ MECHANIC_SLEEP
Definition SharedDefines.h:1346
@ MECHANIC_POLYMORPH
Definition SharedDefines.h:1353
@ MECHANIC_BANISH
Definition SharedDefines.h:1354
@ MECHANIC_SILENCE
Definition SharedDefines.h:1345
@ MECHANIC_SHACKLE
Definition SharedDefines.h:1356
@ MECHANIC_SAPPED
Definition SharedDefines.h:1366
@ MECHANIC_HORROR
Definition SharedDefines.h:1360
@ SPELLFAMILY_WARLOCK
Definition SharedDefines.h:3799
@ SPELLFAMILY_MAGE
Definition SharedDefines.h:3797
@ SPELLFAMILY_GENERIC
Definition SharedDefines.h:3794
@ SPELLFAMILY_WARRIOR
Definition SharedDefines.h:3798
@ SPELLFAMILY_PALADIN
Definition SharedDefines.h:3804
@ SPELLFAMILY_HUNTER
Definition SharedDefines.h:3803
@ SPELLFAMILY_ROGUE
Definition SharedDefines.h:3802
@ SPELLFAMILY_SHAMAN
Definition SharedDefines.h:3805
@ SPELLFAMILY_DRUID
Definition SharedDefines.h:3801
@ SPELLFAMILY_DEATHKNIGHT
Definition SharedDefines.h:3809
@ SPELLFAMILY_UNK1
Definition SharedDefines.h:3795
@ 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)
243{
244 switch (group)
245 {
248 case DIMINISHING_STUN:
252 return DRTYPE_ALL;
254 case DIMINISHING_NONE:
255 return DRTYPE_NONE;
256 default:
257 return DRTYPE_PLAYER;
258 }
259}
@ DRTYPE_NONE
Definition SharedDefines.h:3500
@ DRTYPE_PLAYER
Definition SharedDefines.h:3501
@ DRTYPE_ALL
Definition SharedDefines.h:3502

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 
)
273{
275 return 0;
276
277 // Explicit diminishing duration
278 switch (spellproto->SpellFamilyName)
279 {
281 {
282 // Faerie Fire - limit to 40 seconds in PvP (3.1)
283 if (spellproto->SpellFamilyFlags[0] & 0x400)
284 return 40 * IN_MILLISECONDS;
285 break;
286 }
288 {
289 // Wyvern Sting
290 if (spellproto->SpellFamilyFlags[1] & 0x1000)
291 return 6 * IN_MILLISECONDS;
292 // Hunter's Mark
293 if (spellproto->SpellFamilyFlags[0] & 0x400)
294 return 120 * IN_MILLISECONDS;
295 break;
296 }
298 {
299 // Repentance - limit to 6 seconds in PvP
300 if (spellproto->SpellFamilyFlags[0] & 0x4)
301 return 6 * IN_MILLISECONDS;
302 break;
303 }
305 {
306 // Banish - limit to 6 seconds in PvP
307 if (spellproto->SpellFamilyFlags[1] & 0x8000000)
308 return 6 * IN_MILLISECONDS;
309 // Curse of Tongues - limit to 12 seconds in PvP
310 else if (spellproto->SpellFamilyFlags[2] & 0x800)
311 return 12 * IN_MILLISECONDS;
312 // Curse of Elements - limit to 120 seconds in PvP
313 else if (spellproto->SpellFamilyFlags[1] & 0x200)
314 return 120 * IN_MILLISECONDS;
315 // Curse of Exhaustion
316 else if (spellproto->SpellFamilyFlags[0] & 0x400000)
317 return 12 * IN_MILLISECONDS;
318 break;
319 }
320 default:
321 break;
322 }
323
324 return 10 * IN_MILLISECONDS;
325}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
Definition SpellMgr.cpp:327

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)
262{
263 switch (group)
264 {
267 default:
269 }
270}
@ DIMINISHING_LEVEL_IMMUNE
Definition Unit.h:273
@ DIMINISHING_LEVEL_TAUNT_IMMUNE
Definition Unit.h:275

References DIMINISHING_LEVEL_IMMUNE, DIMINISHING_LEVEL_TAUNT_IMMUNE, and DIMINISHING_TAUNT.

Referenced by Unit::IncrDiminishing().

◆ IsDiminishingReturnsGroupDurationLimited()

◆ IsPartOfSkillLine()

bool IsPartOfSkillLine ( uint32  skillId,
uint32  spellId 
)
46{
47 SkillLineAbilityMapBounds skillBounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId);
48 for (SkillLineAbilityMap::const_iterator itr = skillBounds.first; itr != skillBounds.second; ++itr)
49 if (itr->second->SkillLine == skillId)
50 return true;
51
52 return false;
53}
#define sSpellMgr
Definition SpellMgr.h:825

References sSpellMgr.

Referenced by SpellMgr::LoadSpellInfoCustomAttributes().

◆ IsPrimaryProfessionSkill()

bool IsPrimaryProfessionSkill ( uint32  skill)
34{
35 SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(skill);
36 if (!pSkill)
37 return false;
38
40 return false;
41
42 return true;
43}
DBCStorage< SkillLineEntry > sSkillLineStore(SkillLinefmt)
@ SKILL_CATEGORY_PROFESSION
Definition SharedDefines.h:3328
Definition DBCStructure.h:1581
int32 categoryId
Definition DBCStructure.h:1583

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