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"

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

◆ MELEE_BASED_TRIGGER_MASK

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

◆ 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 
401{
438 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
457 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
459};

◆ EnchantProcAttributes

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

◆ ICCBuff

enum ICCBuff
Enumerator
ICC_AREA 
ICC_RACEMASK_HORDE 
ICC_RACEMASK_ALLIANCE 
513{
514 ICC_AREA = 4812,
515 ICC_RACEMASK_HORDE = 690,
517};

◆ ProcAttributes

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

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

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

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

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

◆ SpellCategories

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

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

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

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:1637
@ DIMINISHING_MIND_CONTROL
Definition SharedDefines.h:3510
@ DIMINISHING_HORROR
Definition SharedDefines.h:3509
@ DIMINISHING_DRAGONS_BREATH
Definition SharedDefines.h:3518
@ DIMINISHING_CONTROLLED_STUN
Definition SharedDefines.h:3502
@ DIMINISHING_CYCLONE
Definition SharedDefines.h:3504
@ DIMINISHING_BANISH
Definition SharedDefines.h:3499
@ DIMINISHING_CONTROLLED_ROOT
Definition SharedDefines.h:3503
@ DIMINISHING_NONE
Definition SharedDefines.h:3498
@ DIMINISHING_SLEEP
Definition SharedDefines.h:3515
@ DIMINISHING_STUN
Definition SharedDefines.h:3512
@ DIMINISHING_DISARM
Definition SharedDefines.h:3505
@ DIMINISHING_ENTRAPMENT
Definition SharedDefines.h:3507
@ DIMINISHING_FEAR
Definition SharedDefines.h:3508
@ DIMINISHING_SCATTER_SHOT
Definition SharedDefines.h:3513
@ DIMINISHING_LIMITONLY
Definition SharedDefines.h:3517
@ DIMINISHING_OPENING_STUN
Definition SharedDefines.h:3501
@ DIMINISHING_DISORIENT
Definition SharedDefines.h:3506
@ DIMINISHING_ROOT
Definition SharedDefines.h:3511
@ DIMINISHING_TAUNT
Definition SharedDefines.h:3516
@ DIMINISHING_CHARGE
Definition SharedDefines.h:3500
@ DIMINISHING_SILENCE
Definition SharedDefines.h:3514
@ 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:3789
@ SPELLFAMILY_MAGE
Definition SharedDefines.h:3787
@ SPELLFAMILY_GENERIC
Definition SharedDefines.h:3784
@ SPELLFAMILY_WARRIOR
Definition SharedDefines.h:3788
@ SPELLFAMILY_PALADIN
Definition SharedDefines.h:3794
@ SPELLFAMILY_HUNTER
Definition SharedDefines.h:3793
@ SPELLFAMILY_ROGUE
Definition SharedDefines.h:3792
@ SPELLFAMILY_SHAMAN
Definition SharedDefines.h:3795
@ SPELLFAMILY_DRUID
Definition SharedDefines.h:3791
@ SPELLFAMILY_DEATHKNIGHT
Definition SharedDefines.h:3799
@ SPELLFAMILY_UNK1
Definition SharedDefines.h:3785
@ SPELL_AURA_MOD_TAUNT
Definition SpellAuraDefines.h:74

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

Referenced by Spell::DoSpellHitOnUnit().

◆ GetDiminishingReturnsGroupType()

DiminishingReturnsType GetDiminishingReturnsGroupType ( DiminishingGroup  group)
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:3490
@ DRTYPE_PLAYER
Definition SharedDefines.h:3491
@ DRTYPE_ALL
Definition SharedDefines.h:3492

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:826

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:3318
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