AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellMgr.h File Reference
#include "Common.h"
#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  SpellStackInfo
 
struct  SpellThreatEntry
 
struct  SpellTargetPosition
 
class  PetAura
 
struct  SpellArea
 
struct  SpellChainNode
 
struct  SpellLearnSkillNode
 
struct  PetDefaultSpellsEntry
 
struct  SpellCooldownOverride
 
class  SpellMgr
 

Macros

#define SPELL_RELIC_COOLDOWN   1
 
#define SPELL_LINKED_MAX_SPELLS   200000
 
#define MELEE_BASED_TRIGGER_MASK
 
#define AURA_SPELL_PROC_EX_MASK
 
#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::map< uint32, SpellStackInfoSpellGroupMap
 
typedef std::map< uint32, SpellGroupStackFlagsSpellGroupStackMap
 
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  SpellGroupSpecialFlags {
  SPELL_GROUP_SPECIAL_FLAG_NONE = 0x000 ,
  SPELL_GROUP_SPECIAL_FLAG_ELIXIR_BATTLE = 0x001 ,
  SPELL_GROUP_SPECIAL_FLAG_ELIXIR_GUARDIAN = 0x002 ,
  SPELL_GROUP_SPECIAL_FLAG_ELIXIR_UNSTABLE = 0x004 ,
  SPELL_GROUP_SPECIAL_FLAG_ELIXIR_SHATTRATH = 0x008 ,
  SPELL_GROUP_SPECIAL_FLAG_STACK_EXCLUSIVE_MAX = 0x00F ,
  SPELL_GROUP_SPECIAL_FLAG_FORCED_STRONGEST = 0x010 ,
  SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_CHECK = 0x020 ,
  SPELL_GROUP_SPECIAL_FLAG_BASE_AMOUNT_CHECK = 0x040 ,
  SPELL_GROUP_SPECIAL_FLAG_PRIORITY1 = 0x100 ,
  SPELL_GROUP_SPECIAL_FLAG_PRIORITY2 = 0x200 ,
  SPELL_GROUP_SPECIAL_FLAG_PRIORITY3 = 0x400 ,
  SPELL_GROUP_SPECIAL_FLAG_PRIORITY4 = 0x800 ,
  SPELL_GROUP_SPECIAL_FLAG_SAME_SPELL_CHECK = 0x1000 ,
  SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_SAME_SPELL = 0x2000 ,
  SPELL_GROUP_SPECIAL_FLAG_MAX = 0x4000 ,
  SPELL_GROUP_SPECIAL_FLAG_FLASK = SPELL_GROUP_SPECIAL_FLAG_ELIXIR_BATTLE | SPELL_GROUP_SPECIAL_FLAG_ELIXIR_GUARDIAN
}
 
enum  SpellGroupStackFlags {
  SPELL_GROUP_STACK_FLAG_NONE = 0x00 ,
  SPELL_GROUP_STACK_FLAG_EXCLUSIVE = 0x01 ,
  SPELL_GROUP_STACK_FLAG_NOT_SAME_CASTER = 0x02 ,
  SPELL_GROUP_STACK_FLAG_FLAGGED = 0x04 ,
  SPELL_GROUP_STACK_FLAG_NEVER_STACK = 0x08 ,
  SPELL_GROUP_STACK_FLAG_EFFECT_EXCLUSIVE = 0x10 ,
  SPELL_GROUP_STACK_FLAG_MAX = 0x20 ,
  SPELL_GROUP_STACK_FLAG_FORCED_STRONGEST = 0x100 ,
  SPELL_GROUP_STACK_FLAG_FORCED_WEAKEST = 0x200
}
 
enum  SpellGroupIDs { SPELL_GROUP_GUARDIAN_AND_BATTLE_ELIXIRS = 1 }
 
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
333{
340 SPELL_GROUP_SPECIAL_FLAG_FORCED_STRONGEST = 0x010, // xinef: specially helpful flag if some spells have different auras, but only one should be present
350
352};
353
355{
359 SPELL_GROUP_STACK_FLAG_FLAGGED = 0x04, // xinef: just a marker
363
364 // Internal use
367};
368
369enum SpellGroupIDs
370{
372};
373
374struct SpellStackInfo
375{
378};
379// spell_id, group_id
380typedef std::map<uint32, SpellStackInfo> SpellGroupMap;
381typedef std::map<uint32, SpellGroupStackFlags> SpellGroupStackMap;
382
383struct SpellThreatEntry
384{
385 int32 flatMod; // flat threat-value for this Spell - default: 0
386 float pctMod; // threat-multiplier for this Spell - default: 1.0f
387 float apPctMod; // Pct of AP that is added as Threat - default: 0.0f
388};
389
390typedef std::unordered_map<uint32, SpellThreatEntry> SpellThreatMap;
391typedef std::map<uint32, float> SpellMixologyMap;
392
393// coordinates for spells (accessed using SpellMgr functions)
395{
397 float target_X;
398 float target_Y;
399 float target_Z;
400 float target_Orientation;
401};
402
403typedef std::map<std::pair<uint32 /*spell_id*/, SpellEffIndex /*effIndex*/>, SpellTargetPosition> SpellTargetPositionMap;
404
405// Enum with EffectRadiusIndex and their actual radius
407{
444 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
463 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
465};
466
467// Spell pet auras
468class PetAura
469{
470private:
471 typedef std::unordered_map<uint32, uint32> PetAuraMap;
472
473public:
474 PetAura()
475 {
476 auras.clear();
477 }
478
479 PetAura(uint32 petEntry, uint32 aura, bool _removeOnChangePet, int _damage) :
480 removeOnChangePet(_removeOnChangePet), damage(_damage)
481 {
482 auras[petEntry] = aura;
483 }
484
485 [[nodiscard]] uint32 GetAura(uint32 petEntry) const
486 {
487 PetAuraMap::const_iterator itr = auras.find(petEntry);
488 if (itr != auras.end())
489 return itr->second;
490 PetAuraMap::const_iterator itr2 = auras.find(0);
491 if (itr2 != auras.end())
492 return itr2->second;
493 return 0;
494 }
495
496 void AddAura(uint32 petEntry, uint32 aura)
497 {
498 auras[petEntry] = aura;
499 }
500
501 [[nodiscard]] bool IsRemovedOnChangePet() const
502 {
503 return removeOnChangePet;
504 }
505
506 [[nodiscard]] int32 GetDamage() const
507 {
508 return damage;
509 }
510
511private:
513 bool removeOnChangePet{false};
514 int32 damage{0};
515};
516typedef std::map<uint32, PetAura> SpellPetAuraMap;
517
518enum ICCBuff
519{
520 ICC_AREA = 4812,
521 ICC_RACEMASK_HORDE = 690,
523};
524
525struct SpellArea
526{
528 uint32 areaId; // zone/subzone/or 0 is not limited to zone
529 uint32 questStart; // quest start (quest must be active or rewarded for spell apply)
530 uint32 questEnd; // quest end (quest must not be rewarded for spell apply)
531 int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case
532 uint32 raceMask; // can be applied only to races
533 Gender gender; // can be applied only to gender
534 uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell
535 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)
536 bool autocast; // if true then auto applied at area enter, in other case just allowed to cast
537
538 // helpers
539 bool IsFitToRequirements(Player const* player, uint32 newZone, uint32 newArea) const;
540};
541
542typedef std::multimap<uint32, SpellArea> SpellAreaMap;
543typedef std::multimap<uint32, SpellArea const*> SpellAreaForQuestMap;
544typedef std::multimap<uint32, SpellArea const*> SpellAreaForAuraMap;
545typedef std::multimap<uint32, SpellArea const*> SpellAreaForAreaMap;
546typedef std::pair<SpellAreaMap::const_iterator, SpellAreaMap::const_iterator> SpellAreaMapBounds;
547typedef std::pair<SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator> SpellAreaForQuestMapBounds;
548typedef std::pair<SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator> SpellAreaForAuraMapBounds;
549typedef std::pair<SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator> SpellAreaForAreaMapBounds;
550
551// Spell rank chain (accessed using SpellMgr functions)
552struct SpellChainNode
553{
554 SpellInfo const* prev;
555 SpellInfo const* next;
556 SpellInfo const* first;
557 SpellInfo const* last;
558 uint8 rank;
559};
560
561typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap;
562
563// spell_id req_spell
564typedef std::multimap<uint32, uint32> SpellRequiredMap;
565typedef std::pair<SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator> SpellRequiredMapBounds;
566
567// req_spell spell_id
568typedef std::multimap<uint32, uint32> SpellsRequiringSpellMap;
569typedef std::pair<SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator> SpellsRequiringSpellMapBounds;
570
571// Spell learning properties (accessed using SpellMgr functions)
573{
575 uint16 step;
576 uint16 value; // 0 - max skill value for player level
577 uint16 maxvalue; // 0 - max skill value for player level
578};
579
580typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap;
581
582typedef std::multimap<uint32, SkillLineAbilityEntry const*> SkillLineAbilityMap;
583typedef std::pair<SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator> SkillLineAbilityMapBounds;
584
585typedef std::multimap<uint32, uint32> PetLevelupSpellSet;
586typedef std::map<uint32, PetLevelupSpellSet> PetLevelupSpellMap;
587
588typedef std::map<uint32, uint32> SpellDifficultySearcherMap;
589
591{
593};
594
595// < 0 for petspelldata id, > 0 for creature_id
596typedef std::map<int32, PetDefaultSpellsEntry> PetDefaultSpellsMap;
597
598typedef std::vector<uint32> SpellCustomAttribute;
599typedef std::vector<bool> EnchantCustomAttribute;
600
601typedef std::vector<SpellInfo*> SpellInfoMap;
602
603typedef std::map<int32, std::vector<int32> > SpellLinkedMap;
604
606{
611};
612
613typedef std::map<uint32, SpellCooldownOverride> SpellCooldownOverrideMap;
614
616
617inline bool IsProfessionSkill(uint32 skill)
618{
619 return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID;
620}
621
622inline bool IsProfessionOrRidingSkill(uint32 skill)
623{
624 return IsProfessionSkill(skill) || skill == SKILL_RIDING;
625}
626
627bool IsPartOfSkillLine(uint32 skillId, uint32 spellId);
628
629// spell diminishing returns
630DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, bool triggered);
635
636typedef std::set<uint32> TalentAdditionalSet;
637
638class SpellMgr
639{
640 // Constructors
641private:
642 SpellMgr();
643 ~SpellMgr();
644
645 // Accessors (const or static functions)
646public:
647 static SpellMgr* instance();
648
649 // Spell correctness for client using
650 static bool ComputeIsSpellValid(SpellInfo const* spellInfo, bool msg = true);
651 static bool IsSpellValid(SpellInfo const* spellInfo);
652 static bool CheckSpellValid(SpellInfo const* spellInfo, uint32 spellId, bool isTalent);
653
654 // Spell difficulty
655 [[nodiscard]] uint32 GetSpellDifficultyId(uint32 spellId) const;
656 void SetSpellDifficultyId(uint32 spellId, uint32 id);
657 uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const* caster) const;
658 SpellInfo const* GetSpellForDifficultyFromSpell(SpellInfo const* spell, Unit const* caster) const;
659
660 // Spell Ranks table
661 [[nodiscard]] SpellChainNode const* GetSpellChainNode(uint32 spell_id) const;
662 [[nodiscard]] uint32 GetFirstSpellInChain(uint32 spell_id) const;
663 [[nodiscard]] uint32 GetLastSpellInChain(uint32 spell_id) const;
664 [[nodiscard]] uint32 GetNextSpellInChain(uint32 spell_id) const;
665 [[nodiscard]] uint32 GetPrevSpellInChain(uint32 spell_id) const;
666 [[nodiscard]] uint8 GetSpellRank(uint32 spell_id) const;
667 // not strict check returns provided spell if rank not avalible
668 [[nodiscard]] uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict = false) const;
669
670 // Spell Required table
673 [[nodiscard]] bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const;
674
675 // Spell learning
676 [[nodiscard]] SpellLearnSkillNode const* GetSpellLearnSkill(uint32 spell_id) const;
677
678 // Spell target coordinates
679 [[nodiscard]] SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const;
680
681 // Spell Groups
682 [[nodiscard]] uint32 GetSpellGroup(uint32 spellid) const;
683 [[nodiscard]] SpellGroupSpecialFlags GetSpellGroupSpecialFlags(uint32 spell_id) const;
684 [[nodiscard]] SpellGroupStackFlags GetGroupStackFlags(uint32 groupid) const;
685 SpellGroupStackFlags CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2, bool remove, bool areaAura) const;
686 void GetSetOfSpellsInSpellGroupWithFlag(uint32 group_id, SpellGroupSpecialFlags flag, std::set<uint32>& availableElixirs) const;
687
688 // Spell proc event table
689 [[nodiscard]] SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const;
690 bool IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, ProcEventInfo const& eventInfo, bool active) const;
691
692 // Spell proc table
693 [[nodiscard]] SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const;
694 bool CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcEventInfo& eventInfo) const;
695
696 // Spell bonus data table
697 [[nodiscard]] SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const;
698
699 // Spell threat table
700 [[nodiscard]] SpellThreatEntry const* GetSpellThreatEntry(uint32 spellID) const;
701
702 // Spell mixology table
703 [[nodiscard]] float GetSpellMixologyBonus(uint32 spellId) const;
704
706
707 [[nodiscard]] PetAura const* GetPetAura(uint32 spell_id, uint8 eff) const;
708
709 [[nodiscard]] SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const;
710 [[nodiscard]] bool IsArenaAllowedEnchancment(uint32 ench_id) const;
711
712 [[nodiscard]] const std::vector<int32>* GetSpellLinked(int32 spell_id) const;
713
714 [[nodiscard]] PetLevelupSpellSet const* GetPetLevelupSpellList(uint32 petFamily) const;
715 [[nodiscard]] PetDefaultSpellsEntry const* GetPetDefaultSpellsEntry(int32 id) const;
716
717 // Spell area
718 [[nodiscard]] SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const;
723
724 // SpellInfo object management
725 [[nodiscard]] SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
726 // Use this only with 100% valid spellIds
727 [[nodiscard]] SpellInfo const* AssertSpellInfo(uint32 spellId) const
728 {
729 ASSERT(spellId < GetSpellInfoStoreSize());
730 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
731 ASSERT(spellInfo);
732 return spellInfo;
733 }
734 // use this instead of AssertSpellInfo to have the problem logged instead of crashing the server
735 [[nodiscard]] SpellInfo const* CheckSpellInfo(uint32 spellId) const
736 {
737 if (spellId >= GetSpellInfoStoreSize())
738 {
739 LOG_ERROR("server", "spellId {} is not lower than GetSpellInfoStoreSize() ({})", spellId, GetSpellInfoStoreSize());
740 return nullptr;
741 }
742 SpellInfo const* spellInfo = mSpellInfoMap[spellId];
743 if (!spellInfo)
744 {
745 LOG_ERROR("server", "spellId {} has invalid spellInfo", spellId);
746 return nullptr;
747 }
748 return spellInfo;
749 }
750 [[nodiscard]] uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); }
751
752 // Talent Additional Set
753 [[nodiscard]] bool IsAdditionalTalentSpell(uint32 spellId) const;
754
755 [[nodiscard]] bool HasSpellCooldownOverride(uint32 spellId) const;
756 [[nodiscard]] SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const;
757
758private:
759 SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; }
760
761 // Modifiers
762public:
763 // Loading data at server startup
766 void LoadSpellRanks();
767 void LoadSpellRequired();
770 void LoadSpellGroups();
772 void LoadSpellProcEvents();
773 void LoadSpellProcs();
774 void LoadSpellBonuses();
775 void LoadSpellThreats();
776 void LoadSpellMixology();
778 void LoadSpellPetAuras();
781 void LoadSpellLinked();
784 void LoadSpellAreas();
785 void LoadSpellInfoStore();
792
793private:
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:806
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:157
SpellEffIndex
Definition SharedDefines.h:30
DiminishingGroup
Definition SharedDefines.h:3257
Gender
Definition SharedDefines.h:60
DiminishingReturnsType
Definition SharedDefines.h:3249
@ SKILL_COOKING
Definition SharedDefines.h:2918
@ SKILL_FISHING
Definition SharedDefines.h:2957
@ SKILL_RIDING
Definition SharedDefines.h:2991
@ SKILL_FIRST_AID
Definition SharedDefines.h:2892
bool IsPrimaryProfessionSkill(uint32 skill)
Definition SpellMgr.cpp:36
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
Definition SpellMgr.cpp:48
std::unordered_map< uint32, SpellEnchantProcEntry > SpellEnchantProcEventMap
Definition SpellMgr.h:321
std::unordered_map< uint32, SpellProcEventEntry > SpellProcEventMap
Definition SpellMgr.h:287
std::multimap< uint32, SpellArea const * > SpellAreaForAuraMap
Definition SpellMgr.h:545
bool IsProfessionOrRidingSkill(uint32 skill)
Definition SpellMgr.h:623
int32 GetDiminishingReturnsLimitDuration(DiminishingGroup group, SpellInfo const *spellproto)
Definition SpellMgr.cpp:275
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:392
SpellGroupStackFlags
Definition SpellMgr.h:356
@ SPELL_GROUP_STACK_FLAG_FLAGGED
Definition SpellMgr.h:360
@ SPELL_GROUP_STACK_FLAG_EXCLUSIVE
Definition SpellMgr.h:358
@ SPELL_GROUP_STACK_FLAG_FORCED_WEAKEST
Definition SpellMgr.h:367
@ SPELL_GROUP_STACK_FLAG_FORCED_STRONGEST
Definition SpellMgr.h:366
@ SPELL_GROUP_STACK_FLAG_MAX
Definition SpellMgr.h:363
@ SPELL_GROUP_STACK_FLAG_NOT_SAME_CASTER
Definition SpellMgr.h:359
@ SPELL_GROUP_STACK_FLAG_NONE
Definition SpellMgr.h:357
@ SPELL_GROUP_STACK_FLAG_NEVER_STACK
Definition SpellMgr.h:361
@ SPELL_GROUP_STACK_FLAG_EFFECT_EXCLUSIVE
Definition SpellMgr.h:362
DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const *spellproto, bool triggered)
Definition SpellMgr.cpp:58
std::pair< SpellsRequiringSpellMap::const_iterator, SpellsRequiringSpellMap::const_iterator > SpellsRequiringSpellMapBounds
Definition SpellMgr.h:570
std::map< std::pair< uint32, SpellEffIndex >, SpellTargetPosition > SpellTargetPositionMap
Definition SpellMgr.h:404
bool IsDiminishingReturnsGroupDurationLimited(DiminishingGroup group)
Definition SpellMgr.cpp:330
bool IsProfessionSkill(uint32 skill)
Definition SpellMgr.h:618
std::multimap< uint32, SpellArea > SpellAreaMap
Definition SpellMgr.h:543
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition SpellMgr.h:547
std::map< uint32, uint32 > SpellDifficultySearcherMap
Definition SpellMgr.h:589
std::map< uint32, SpellCooldownOverride > SpellCooldownOverrideMap
Definition SpellMgr.h:614
std::map< int32, std::vector< int32 > > SpellLinkedMap
Definition SpellMgr.h:604
std::pair< SpellAreaForAreaMap::const_iterator, SpellAreaForAreaMap::const_iterator > SpellAreaForAreaMapBounds
Definition SpellMgr.h:550
std::unordered_map< uint32, SpellChainNode > SpellChainMap
Definition SpellMgr.h:562
std::unordered_map< uint32, SpellProcEntry > SpellProcMap
Definition SpellMgr.h:305
std::set< uint32 > TalentAdditionalSet
Definition SpellMgr.h:637
ProcAttributes
Definition SpellMgr.h:270
@ PROC_ATTR_REQ_EXP_OR_HONOR
Definition SpellMgr.h:271
std::multimap< uint32, SpellArea const * > SpellAreaForAreaMap
Definition SpellMgr.h:546
std::unordered_map< uint32, SpellThreatEntry > SpellThreatMap
Definition SpellMgr.h:391
std::pair< SpellRequiredMap::const_iterator, SpellRequiredMap::const_iterator > SpellRequiredMapBounds
Definition SpellMgr.h:566
SpellGroupIDs
Definition SpellMgr.h:371
@ SPELL_GROUP_GUARDIAN_AND_BATTLE_ELIXIRS
Definition SpellMgr.h:372
std::multimap< uint32, SkillLineAbilityEntry const * > SkillLineAbilityMap
Definition SpellMgr.h:583
std::map< uint32, PetAura > SpellPetAuraMap
Definition SpellMgr.h:517
ICCBuff
Definition SpellMgr.h:520
@ ICC_RACEMASK_HORDE
Definition SpellMgr.h:522
@ ICC_AREA
Definition SpellMgr.h:521
@ ICC_RACEMASK_ALLIANCE
Definition SpellMgr.h:523
std::multimap< uint32, SpellArea const * > SpellAreaForQuestMap
Definition SpellMgr.h:544
std::map< int32, PetDefaultSpellsEntry > PetDefaultSpellsMap
Definition SpellMgr.h:597
std::vector< bool > EnchantCustomAttribute
Definition SpellMgr.h:600
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
Definition SpellMgr.cpp:245
SpellGroupSpecialFlags
Definition SpellMgr.h:334
@ SPELL_GROUP_SPECIAL_FLAG_PRIORITY1
Definition SpellMgr.h:344
@ SPELL_GROUP_SPECIAL_FLAG_PRIORITY3
Definition SpellMgr.h:346
@ SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_CHECK
Definition SpellMgr.h:342
@ SPELL_GROUP_SPECIAL_FLAG_FORCED_STRONGEST
Definition SpellMgr.h:341
@ SPELL_GROUP_SPECIAL_FLAG_PRIORITY2
Definition SpellMgr.h:345
@ SPELL_GROUP_SPECIAL_FLAG_MAX
Definition SpellMgr.h:350
@ SPELL_GROUP_SPECIAL_FLAG_ELIXIR_SHATTRATH
Definition SpellMgr.h:339
@ SPELL_GROUP_SPECIAL_FLAG_SAME_SPELL_CHECK
Definition SpellMgr.h:348
@ SPELL_GROUP_SPECIAL_FLAG_STACK_EXCLUSIVE_MAX
Definition SpellMgr.h:340
@ SPELL_GROUP_SPECIAL_FLAG_BASE_AMOUNT_CHECK
Definition SpellMgr.h:343
@ SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_SAME_SPELL
Definition SpellMgr.h:349
@ SPELL_GROUP_SPECIAL_FLAG_PRIORITY4
Definition SpellMgr.h:347
@ SPELL_GROUP_SPECIAL_FLAG_ELIXIR_BATTLE
Definition SpellMgr.h:336
@ SPELL_GROUP_SPECIAL_FLAG_ELIXIR_GUARDIAN
Definition SpellMgr.h:337
@ SPELL_GROUP_SPECIAL_FLAG_FLASK
Definition SpellMgr.h:352
@ SPELL_GROUP_SPECIAL_FLAG_ELIXIR_UNSTABLE
Definition SpellMgr.h:338
@ SPELL_GROUP_SPECIAL_FLAG_NONE
Definition SpellMgr.h:335
std::vector< uint32 > SpellCustomAttribute
Definition SpellMgr.h:599
std::unordered_map< uint32, SpellLearnSkillNode > SpellLearnSkillMap
Definition SpellMgr.h:581
std::pair< SpellAreaForAuraMap::const_iterator, SpellAreaForAuraMap::const_iterator > SpellAreaForAuraMapBounds
Definition SpellMgr.h:549
std::map< uint32, SpellStackInfo > SpellGroupMap
Definition SpellMgr.h:381
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition SpellMgr.h:584
@ 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:587
DiminishingLevels GetDiminishingReturnsMaxLevel(DiminishingGroup group)
Definition SpellMgr.cpp:264
EffectRadiusIndex
Definition SpellMgr.h:408
@ EFFECT_RADIUS_14_YARDS
Definition SpellMgr.h:461
@ EFFECT_RADIUS_500_YARDS
Definition SpellMgr.h:432
@ EFFECT_RADIUS_13_YARDS
Definition SpellMgr.h:419
@ EFFECT_RADIUS_7_YARDS
Definition SpellMgr.h:438
@ EFFECT_RADIUS_100_YARDS
Definition SpellMgr.h:414
@ EFFECT_RADIUS_45_YARDS_2
Definition SpellMgr.h:458
@ EFFECT_RADIUS_80_YARDS
Definition SpellMgr.h:433
@ EFFECT_RADIUS_20_YARDS
Definition SpellMgr.h:411
@ EFFECT_RADIUS_60_YARDS_2
Definition SpellMgr.h:452
@ EFFECT_RADIUS_8_YARDS
Definition SpellMgr.h:416
@ EFFECT_RADIUS_34_YARDS
Definition SpellMgr.h:440
@ EFFECT_RADIUS_45_YARDS
Definition SpellMgr.h:413
@ EFFECT_RADIUS_2_YARDS
Definition SpellMgr.h:409
@ EFFECT_RADIUS_50000_YARDS_2
Definition SpellMgr.h:455
@ EFFECT_RADIUS_44_YARDS
Definition SpellMgr.h:460
@ EFFECT_RADIUS_5_YARDS_3
Definition SpellMgr.h:453
@ EFFECT_RADIUS_15_YARDS
Definition SpellMgr.h:420
@ EFFECT_RADIUS_23_YARDS
Definition SpellMgr.h:463
@ EFFECT_RADIUS_55_YARDS
Definition SpellMgr.h:436
@ EFFECT_RADIUS_65_YARDS
Definition SpellMgr.h:426
@ EFFECT_RADIUS_32_YARDS
Definition SpellMgr.h:459
@ EFFECT_RADIUS_30_YARDS
Definition SpellMgr.h:412
@ EFFECT_RADIUS_1_YARD
Definition SpellMgr.h:418
@ EFFECT_RADIUS_9_YARDS
Definition SpellMgr.h:441
@ EFFECT_RADIUS_16_YARDS
Definition SpellMgr.h:444
@ EFFECT_RADIUS_60_YARDS
Definition SpellMgr.h:449
@ EFFECT_RADIUS_90_YARDS
Definition SpellMgr.h:450
@ EFFECT_RADIUS_130_YARDS
Definition SpellMgr.h:456
@ EFFECT_RADIUS_4_YARDS
Definition SpellMgr.h:428
@ EFFECT_RADIUS_25_YARDS
Definition SpellMgr.h:422
@ EFFECT_RADIUS_10_YARDS_2
Definition SpellMgr.h:446
@ EFFECT_RADIUS_15_YARDS_2
Definition SpellMgr.h:448
@ EFFECT_RADIUS_5_YARDS
Definition SpellMgr.h:410
@ EFFECT_RADIUS_40_YARDS
Definition SpellMgr.h:425
@ EFFECT_RADIUS_70_YARDS
Definition SpellMgr.h:427
@ EFFECT_RADIUS_5_YARDS_2
Definition SpellMgr.h:447
@ EFFECT_RADIUS_3_YARDS
Definition SpellMgr.h:417
@ EFFECT_RADIUS_38_YARDS
Definition SpellMgr.h:457
@ EFFECT_RADIUS_21_YARDS
Definition SpellMgr.h:439
@ EFFECT_RADIUS_50_YARDS
Definition SpellMgr.h:429
@ EFFECT_RADIUS_50000_YARDS
Definition SpellMgr.h:430
@ EFFECT_RADIUS_60_YARDS_3
Definition SpellMgr.h:454
@ EFFECT_RADIUS_18_YARDS
Definition SpellMgr.h:421
@ EFFECT_RADIUS_200_YARDS
Definition SpellMgr.h:424
@ EFFECT_RADIUS_12_YARDS
Definition SpellMgr.h:434
@ EFFECT_RADIUS_10_YARDS
Definition SpellMgr.h:415
@ EFFECT_RADIUS_0_YARDS
Definition SpellMgr.h:437
@ EFFECT_RADIUS_3_5_YARDS
Definition SpellMgr.h:464
@ EFFECT_RADIUS_150_YARDS
Definition SpellMgr.h:442
@ EFFECT_RADIUS_80_YARDS_2
Definition SpellMgr.h:465
@ EFFECT_RADIUS_35_YARDS
Definition SpellMgr.h:423
@ EFFECT_RADIUS_47_YARDS
Definition SpellMgr.h:462
@ EFFECT_RADIUS_6_YARDS
Definition SpellMgr.h:431
@ EFFECT_RADIUS_11_YARDS
Definition SpellMgr.h:443
@ EFFECT_RADIUS_15_YARDS_3
Definition SpellMgr.h:451
@ EFFECT_RADIUS_0_5_YARDS
Definition SpellMgr.h:445
@ EFFECT_RADIUS_99_YARDS
Definition SpellMgr.h:435
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:569
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:565
std::vector< SpellInfo * > SpellInfoMap
Definition SpellMgr.h:602
std::pair< SpellAreaForQuestMap::const_iterator, SpellAreaForQuestMap::const_iterator > SpellAreaForQuestMapBounds
Definition SpellMgr.h:548
std::map< uint32, SpellGroupStackFlags > SpellGroupStackMap
Definition SpellMgr.h:382
std::multimap< uint32, uint32 > PetLevelupSpellSet
Definition SpellMgr.h:586
DiminishingLevels
Definition Unit.h:262
Definition SpellMgr.h:470
int32 damage
Definition SpellMgr.h:515
int32 GetDamage() const
Definition SpellMgr.h:507
std::unordered_map< uint32, uint32 > PetAuraMap
Definition SpellMgr.h:472
uint32 GetAura(uint32 petEntry) const
Definition SpellMgr.h:486
PetAura()
Definition SpellMgr.h:475
bool removeOnChangePet
Definition SpellMgr.h:514
PetAuraMap auras
Definition SpellMgr.h:513
bool IsRemovedOnChangePet() const
Definition SpellMgr.h:502
void AddAura(uint32 petEntry, uint32 aura)
Definition SpellMgr.h:497
Definition Player.h:1082
Definition Unit.h:420
Definition SpellInfo.h:316
Definition SpellMgr.h:640
SpellRequiredMap mSpellReq
Definition SpellMgr.h:798
SpellLinkedMap mSpellLinkedMap
Definition SpellMgr.h:809
SpellInfo const * AssertSpellInfo(uint32 spellId) const
Definition SpellMgr.h:728
void LoadSpellLinked()
Definition SpellMgr.cpp:2252
SkillLineAbilityMap mSkillLineAbilityMap
Definition SpellMgr.h:817
SpellAreaMapBounds GetSpellAreaMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1052
TalentAdditionalSet mTalentSpellAdditionalSet
Definition SpellMgr.h:822
void GetSetOfSpellsInSpellGroupWithFlag(uint32 group_id, SpellGroupSpecialFlags flag, std::set< uint32 > &availableElixirs) const
Definition SpellMgr.cpp:722
EnchantCustomAttribute mEnchantCustomAttr
Definition SpellMgr.h:811
void SetSpellDifficultyId(uint32 spellId, uint32 id)
Definition SpellMgr.cpp:484
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:370
PetLevelupSpellSet const * GetPetLevelupSpellList(uint32 petFamily) const
Definition SpellMgr.cpp:1035
void LoadSpellInfoStore()
Definition SpellMgr.cpp:2690
uint32 GetSpellIdForDifficulty(uint32 spellId, Unit const *caster) const
Definition SpellMgr.cpp:489
void LoadSpellBonuses()
Definition SpellMgr.cpp:1963
SpellAreaForQuestMapBounds GetSpellAreaForQuestEndMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1062
SpellAreaForAuraMap mSpellAreaForAuraMap
Definition SpellMgr.h:815
SpellProcEventEntry const * GetSpellProcEvent(uint32 spellId) const
Definition SpellMgr.cpp:729
SpellChainMap mSpellChains
Definition SpellMgr.h:796
void LoadEnchantCustomAttr()
Definition SpellMgr.cpp:2166
void UnloadSpellInfoStore()
Definition SpellMgr.cpp:2761
void LoadSpellAreas()
Definition SpellMgr.cpp:2479
uint32 GetNextSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:570
static SpellMgr * instance()
Definition SpellMgr.cpp:363
SpellPetAuraMap mSpellPetAuraMap
Definition SpellMgr.h:808
SpellLearnSkillMap mSpellLearnSkills
Definition SpellMgr.h:799
void LoadSpellCooldownOverrides()
Definition SpellMgr.cpp:2719
SpellAreaForQuestMapBounds GetSpellAreaForQuestMapBounds(uint32 quest_id) const
Definition SpellMgr.cpp:1057
SpellBonusEntry const * GetSpellBonusData(uint32 spellId) const
Definition SpellMgr.cpp:962
void LoadSkillLineAbilityMap()
Definition SpellMgr.cpp:2081
SkillLineAbilityMapBounds GetSkillLineAbilityMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1002
SpellProcEventMap mSpellProcEventMap
Definition SpellMgr.h:803
static bool CheckSpellValid(SpellInfo const *spellInfo, uint32 spellId, bool isTalent)
Definition SpellMgr.cpp:459
float GetSpellMixologyBonus(uint32 spellId) const
Definition SpellMgr.cpp:993
SpellAreaForQuestMap mSpellAreaForQuestEndMap
Definition SpellMgr.h:814
SpellGroupStackFlags CheckSpellGroupStackRules(SpellInfo const *spellInfo1, SpellInfo const *spellInfo2, bool remove, bool areaAura) const
Definition SpellMgr.cpp:680
bool IsSpellProcEventCanTriggeredBy(SpellInfo const *spellProto, SpellProcEventEntry const *spellProcEvent, uint32 EventProcFlag, ProcEventInfo const &eventInfo, bool active) const
Definition SpellMgr.cpp:737
PetDefaultSpellsMap mPetDefaultSpellsMap
Definition SpellMgr.h:819
uint32 GetSpellWithRank(uint32 spell_id, uint32 rank, bool strict=false) const
Definition SpellMgr.cpp:596
SpellLearnSkillNode const * GetSpellLearnSkill(uint32 spell_id) const
Definition SpellMgr.cpp:634
SpellMixologyMap mSpellMixologyMap
Definition SpellMgr.h:807
void LoadSpellInfoCustomAttributes()
Definition SpellMgr.cpp:2796
const std::vector< int32 > * GetSpellLinked(int32 spell_id) const
Definition SpellMgr.cpp:1029
SpellRequiredMapBounds GetSpellsRequiredForSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:608
SpellInfo const * GetSpellInfo(uint32 spellId) const
Definition SpellMgr.h:726
SpellGroupStackMap mSpellGroupStackMap
Definition SpellMgr.h:802
uint32 GetPrevSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:579
bool IsSpellRequiringSpell(uint32 spellid, uint32 req_spellid) const
Definition SpellMgr.cpp:618
void LoadSpellThreats()
Definition SpellMgr.cpp:2004
SpellAreaForAuraMapBounds GetSpellAreaForAuraMapBounds(uint32 spell_id) const
Definition SpellMgr.cpp:1067
uint32 GetSpellGroup(uint32 spellid) const
Definition SpellMgr.cpp:660
void LoadSpellRequired()
Definition SpellMgr.cpp:1403
SpellInfo const * GetSpellForDifficultyFromSpell(SpellInfo const *spell, Unit const *caster) const
Definition SpellMgr.cpp:531
SpellGroupStackFlags GetGroupStackFlags(uint32 groupid) const
Definition SpellMgr.cpp:651
void LoadSpellTargetPositions()
Definition SpellMgr.cpp:1521
SpellDifficultySearcherMap mSpellDifficultySearcherMap
Definition SpellMgr.h:795
void LoadSpellLearnSkills()
Definition SpellMgr.cpp:1468
uint32 GetLastSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:562
SpellGroupMap mSpellGroupMap
Definition SpellMgr.h:801
void LoadSpellTalentRanks()
Definition SpellMgr.cpp:1231
SpellThreatEntry const * GetSpellThreatEntry(uint32 spellID) const
Definition SpellMgr.cpp:978
void LoadSpellGroupStackRules()
Definition SpellMgr.cpp:1686
static bool IsSpellValid(SpellInfo const *spellInfo)
Definition SpellMgr.cpp:441
uint32 GetFirstSpellInChain(uint32 spell_id) const
Definition SpellMgr.cpp:554
bool CanSpellTriggerProcOnEvent(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
Definition SpellMgr.cpp:897
SpellEnchantProcEventMap mSpellEnchantProcEventMap
Definition SpellMgr.h:810
void LoadPetDefaultSpells()
Definition SpellMgr.cpp:2399
PetLevelupSpellMap mPetLevelupSpellMap
Definition SpellMgr.h:818
SpellInfo const * CheckSpellInfo(uint32 spellId) const
Definition SpellMgr.h:736
bool IsAdditionalTalentSpell(uint32 spellId) const
Definition SpellMgr.cpp:629
SpellProcMap mSpellProcMap
Definition SpellMgr.h:804
SpellsRequiringSpellMap mSpellsReqSpell
Definition SpellMgr.h:797
void LoadSpellInfoCorrections()
Definition SpellInfoCorrections.cpp:39
SpellTargetPositionMap mSpellTargetPositions
Definition SpellMgr.h:800
SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:2755
SpellProcEntry const * GetSpellProcEntry(uint32 spellId) const
Definition SpellMgr.cpp:889
void LoadSpellSpecificAndAuraState()
Definition SpellMgr.cpp:2778
PetDefaultSpellsEntry const * GetPetDefaultSpellsEntry(int32 id) const
Definition SpellMgr.cpp:1044
SpellTargetPosition const * GetSpellTargetPosition(uint32 spell_id, SpellEffIndex effIndex) const
Definition SpellMgr.cpp:643
SpellCooldownOverrideMap mSpellCooldownOverrideMap
Definition SpellMgr.h:821
SpellEnchantProcEntry const * GetSpellEnchantProcEvent(uint32 enchId) const
Definition SpellMgr.cpp:1016
SpellAreaForAreaMap mSpellAreaForAreaMap
Definition SpellMgr.h:816
uint32 GetSpellDifficultyId(uint32 spellId) const
Definition SpellMgr.cpp:478
void LoadSpellProcEvents()
Definition SpellMgr.cpp:1737
uint8 GetSpellRank(uint32 spell_id) const
Definition SpellMgr.cpp:588
void LoadSpellPetAuras()
Definition SpellMgr.cpp:2103
void UnloadSpellInfoImplicitTargetConditionLists()
Definition SpellMgr.cpp:2769
SpellAreaMap mSpellAreaMap
Definition SpellMgr.h:812
void LoadSpellEnchantProcData()
Definition SpellMgr.cpp:2207
uint32 GetSpellInfoStoreSize() const
Definition SpellMgr.h:751
SpellBonusMap mSpellBonusMap
Definition SpellMgr.h:805
SpellMgr()
Definition SpellMgr.cpp:354
SpellChainNode const * GetSpellChainNode(uint32 spell_id) const
Definition SpellMgr.cpp:545
SpellsRequiringSpellMapBounds GetSpellsRequiringSpellBounds(uint32 spell_id) const
Definition SpellMgr.cpp:613
void LoadSpellRanks()
Definition SpellMgr.cpp:1292
void LoadSpellGroups()
Definition SpellMgr.cpp:1626
void LoadPetLevelupSpellMap()
Definition SpellMgr.cpp:2305
PetAura const * GetPetAura(uint32 spell_id, uint8 eff) const
Definition SpellMgr.cpp:1007
void LoadSpellMixology()
Definition SpellMgr.cpp:2045
SpellAreaForAreaMapBounds GetSpellAreaForAreaMapBounds(uint32 area_id) const
Definition SpellMgr.cpp:1072
bool IsArenaAllowedEnchancment(uint32 ench_id) const
Definition SpellMgr.cpp:1024
SpellThreatMap mSpellThreatMap
Definition SpellMgr.h:806
SpellAreaForQuestMap mSpellAreaForQuestMap
Definition SpellMgr.h:813
SpellInfoMap mSpellInfoMap
Definition SpellMgr.h:820
void LoadSpellProcs()
Definition SpellMgr.cpp:1831
~SpellMgr()
Definition SpellMgr.cpp:358
SpellInfo * _GetSpellInfo(uint32 spellId)
Definition SpellMgr.h:760
void UnloadSpellInfoChains()
Definition SpellMgr.cpp:1223
bool HasSpellCooldownOverride(uint32 spellId) const
Definition SpellMgr.cpp:2750
SpellGroupSpecialFlags GetSpellGroupSpecialFlags(uint32 spell_id) const
Definition SpellMgr.cpp:670
Definition Unit.h:636
Definition Util.h:451
Definition SpellMgr.h:592
uint32 spellid[MAX_CREATURE_SPELL_DATA_SLOT]
Definition SpellMgr.h:593
Definition SpellMgr.h:527
uint32 questEnd
Definition SpellMgr.h:531
bool autocast
Definition SpellMgr.h:537
uint32 raceMask
Definition SpellMgr.h:533
uint32 questStartStatus
Definition SpellMgr.h:535
uint32 spellId
Definition SpellMgr.h:528
uint32 questEndStatus
Definition SpellMgr.h:536
int32 auraSpell
Definition SpellMgr.h:532
bool IsFitToRequirements(Player const *player, uint32 newZone, uint32 newArea) const
Definition SpellMgr.cpp:1077
Gender gender
Definition SpellMgr.h:534
uint32 areaId
Definition SpellMgr.h:529
uint32 questStart
Definition SpellMgr.h:530
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:554
SpellInfo const * last
Definition SpellMgr.h:558
SpellInfo const * next
Definition SpellMgr.h:556
uint8 rank
Definition SpellMgr.h:559
SpellInfo const * first
Definition SpellMgr.h:557
SpellInfo const * prev
Definition SpellMgr.h:555
Definition SpellMgr.h:607
uint32 StartRecoveryTime
Definition SpellMgr.h:610
uint32 CategoryRecoveryTime
Definition SpellMgr.h:609
uint32 StartRecoveryCategory
Definition SpellMgr.h:611
uint32 RecoveryTime
Definition SpellMgr.h:608
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:574
uint16 value
Definition SpellMgr.h:577
uint16 step
Definition SpellMgr.h:576
uint16 maxvalue
Definition SpellMgr.h:578
uint16 skill
Definition SpellMgr.h:575
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:376
SpellGroupSpecialFlags specialFlags
Definition SpellMgr.h:378
uint32 groupId
Definition SpellMgr.h:377
Definition SpellMgr.h:396
float target_Z
Definition SpellMgr.h:400
uint32 target_mapId
Definition SpellMgr.h:397
float target_Y
Definition SpellMgr.h:399
float target_Orientation
Definition SpellMgr.h:401
float target_X
Definition SpellMgr.h:398
Definition SpellMgr.h:385
int32 flatMod
Definition SpellMgr.h:386
float apPctMod
Definition SpellMgr.h:388
float pctMod
Definition SpellMgr.h:387

◆ 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_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

◆ 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

◆ SpellGroupMap

typedef std::map<uint32, SpellStackInfo> SpellGroupMap

◆ 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

◆ 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 
408{
445 EFFECT_RADIUS_0_5_YARDS = 44, // 0.5 yards
464 EFFECT_RADIUS_3_5_YARDS = 64, // 3.5 yards
466};

◆ 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 
520{
521 ICC_AREA = 4812,
522 ICC_RACEMASK_HORDE = 690,
524};

◆ 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

◆ SpellGroupIDs

Enumerator
SPELL_GROUP_GUARDIAN_AND_BATTLE_ELIXIRS 

◆ SpellGroupSpecialFlags

Enumerator
SPELL_GROUP_SPECIAL_FLAG_NONE 
SPELL_GROUP_SPECIAL_FLAG_ELIXIR_BATTLE 
SPELL_GROUP_SPECIAL_FLAG_ELIXIR_GUARDIAN 
SPELL_GROUP_SPECIAL_FLAG_ELIXIR_UNSTABLE 
SPELL_GROUP_SPECIAL_FLAG_ELIXIR_SHATTRATH 
SPELL_GROUP_SPECIAL_FLAG_STACK_EXCLUSIVE_MAX 
SPELL_GROUP_SPECIAL_FLAG_FORCED_STRONGEST 
SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_CHECK 
SPELL_GROUP_SPECIAL_FLAG_BASE_AMOUNT_CHECK 
SPELL_GROUP_SPECIAL_FLAG_PRIORITY1 
SPELL_GROUP_SPECIAL_FLAG_PRIORITY2 
SPELL_GROUP_SPECIAL_FLAG_PRIORITY3 
SPELL_GROUP_SPECIAL_FLAG_PRIORITY4 
SPELL_GROUP_SPECIAL_FLAG_SAME_SPELL_CHECK 
SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_SAME_SPELL 
SPELL_GROUP_SPECIAL_FLAG_MAX 
SPELL_GROUP_SPECIAL_FLAG_FLASK 

◆ SpellGroupStackFlags

Enumerator
SPELL_GROUP_STACK_FLAG_NONE 
SPELL_GROUP_STACK_FLAG_EXCLUSIVE 
SPELL_GROUP_STACK_FLAG_NOT_SAME_CASTER 
SPELL_GROUP_STACK_FLAG_FLAGGED 
SPELL_GROUP_STACK_FLAG_NEVER_STACK 
SPELL_GROUP_STACK_FLAG_EFFECT_EXCLUSIVE 
SPELL_GROUP_STACK_FLAG_MAX 
SPELL_GROUP_STACK_FLAG_FORCED_STRONGEST 
SPELL_GROUP_STACK_FLAG_FORCED_WEAKEST 

◆ 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 
)
59{
60 if (spellproto->IsPositive())
61 return DIMINISHING_NONE;
62
63 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
64 {
65 if (spellproto->Effects[i].ApplyAuraName == SPELL_AURA_MOD_TAUNT)
66 return DIMINISHING_TAUNT;
67 }
68
69 // Explicit Diminishing Groups
70 switch (spellproto->SpellFamilyName)
71 {
73 {
74 // Pet charge effects (Infernal Awakening, Demon Charge)
75 if (spellproto->SpellVisual[0] == 2816 && spellproto->SpellIconID == 15)
77 // Gnaw
78 else if (spellproto->Id == 47481)
80 // Screams of the Past
81 else if (spellproto->Id == 7074)
82 return DIMINISHING_NONE;
83 break;
84 }
85 // Event spells
87 return DIMINISHING_NONE;
89 {
90 // Frostbite
91 if (spellproto->Id == 12494)
92 return DIMINISHING_ROOT;
93 // Shattered Barrier
94 else if (spellproto->Id == 55080)
95 return DIMINISHING_ROOT;
96 // Deep Freeze
97 else if (spellproto->SpellIconID == 2939 && spellproto->SpellVisual[0] == 9963)
99 // Frost Nova / Freeze (Water Elemental)
100 else if (spellproto->SpellIconID == 193)
102 // Dragon's Breath
103 else if (spellproto->SpellFamilyFlags[0] & 0x800000)
105 break;
106 }
108 {
109 // Hamstring - limit duration to 10s in PvP
110 if (spellproto->SpellFamilyFlags[0] & 0x2)
112 // Improved Hamstring
113 else if (spellproto->Id == 23694)
114 return DIMINISHING_ROOT;
115 // Charge Stun (own diminishing)
116 else if (spellproto->SpellFamilyFlags[0] & 0x01000000)
117 return DIMINISHING_CHARGE;
118 break;
119 }
121 {
122 // Curses/etc
123 if ((spellproto->SpellFamilyFlags[0] & 0x80000000) || (spellproto->SpellFamilyFlags[1] & 0x200))
125 // Seduction
126 else if (spellproto->SpellFamilyFlags[1] & 0x10000000)
127 return DIMINISHING_FEAR;
128 break;
129 }
131 {
132 // Pounce
133 if (spellproto->SpellFamilyFlags[0] & 0x20000)
135 // Cyclone
136 else if (spellproto->SpellFamilyFlags[1] & 0x20)
137 return DIMINISHING_CYCLONE;
138 // Entangling Roots
139 // Nature's Grasp
140 else if (spellproto->SpellFamilyFlags[0] & 0x00000200)
142 // Faerie Fire
143 else if (spellproto->SpellFamilyFlags[0] & 0x400)
145 // Feral Charge Root Effect
146 else if (spellproto->Id == 45334)
147 return DIMINISHING_NONE;
148 break;
149 }
151 {
152 // Gouge
153 if (spellproto->SpellFamilyFlags[0] & 0x8)
155 // Blind
156 else if (spellproto->SpellFamilyFlags[0] & 0x1000000)
157 return DIMINISHING_FEAR;
158 // Cheap Shot
159 else if (spellproto->SpellFamilyFlags[0] & 0x400)
161 // Crippling poison - Limit to 10 seconds in PvP (No SpellFamilyFlags)
162 else if (spellproto->SpellIconID == 163)
164 break;
165 }
167 {
168 // Hunter's Mark
169 if ((spellproto->SpellFamilyFlags[0] & 0x400) && spellproto->SpellIconID == 538)
171 // Scatter Shot (own diminishing)
172 else if ((spellproto->SpellFamilyFlags[0] & 0x40000) && spellproto->SpellIconID == 132)
174 // Entrapment (own diminishing)
175 else if (spellproto->SpellVisual[0] == 7484 && spellproto->SpellIconID == 20)
177 // Wyvern Sting mechanic is MECHANIC_SLEEP but the diminishing is DIMINISHING_DISORIENT
178 else if ((spellproto->SpellFamilyFlags[1] & 0x1000) && spellproto->SpellIconID == 1721)
180 // Freezing Arrow
181 else if (spellproto->SpellFamilyFlags[0] & 0x8)
183 break;
184 }
186 {
187 // Judgement of Justice - limit duration to 10s in PvP
188 if (spellproto->SpellFamilyFlags[0] & 0x100000)
190 // Turn Evil
191 else if ((spellproto->SpellFamilyFlags[1] & 0x804000) && spellproto->SpellIconID == 309)
192 return DIMINISHING_FEAR;
193 break;
194 }
196 {
197 // Storm, Earth and Fire - Earthgrab
198 if (spellproto->SpellFamilyFlags[2] & 0x4000)
199 return DIMINISHING_NONE;
200 break;
201 }
203 {
204 // Hungering Cold (no flags)
205 if (spellproto->SpellIconID == 2797)
207 // Mark of Blood
208 else if ((spellproto->SpellFamilyFlags[0] & 0x10000000) && spellproto->SpellIconID == 2285)
210 break;
211 }
212 default:
213 break;
214 }
215
216 // Lastly - Set diminishing depending on mechanic
217 uint32 mechanic = spellproto->GetAllEffectsMechanicMask();
218 if (mechanic & (1 << MECHANIC_CHARM))
220 if (mechanic & (1 << MECHANIC_SILENCE))
221 return DIMINISHING_SILENCE;
222 if (mechanic & (1 << MECHANIC_SLEEP))
223 return DIMINISHING_SLEEP;
224 if (mechanic & ((1 << MECHANIC_SAPPED) | (1 << MECHANIC_POLYMORPH) | (1 << MECHANIC_SHACKLE)))
226 // Mechanic Knockout, except Blast Wave
227 if (mechanic & (1 << MECHANIC_KNOCKOUT) && spellproto->SpellIconID != 292)
229 if (mechanic & (1 << MECHANIC_DISARM))
230 return DIMINISHING_DISARM;
231 if (mechanic & (1 << MECHANIC_FEAR))
232 return DIMINISHING_FEAR;
233 if (mechanic & (1 << MECHANIC_STUN))
235 if (mechanic & (1 << MECHANIC_BANISH))
236 return DIMINISHING_BANISH;
237 if (mechanic & (1 << MECHANIC_ROOT))
239 if (mechanic & (1 << MECHANIC_HORROR))
240 return DIMINISHING_HORROR;
241
242 return DIMINISHING_NONE;
243}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1637
@ DIMINISHING_MIND_CONTROL
Definition SharedDefines.h:3270
@ DIMINISHING_HORROR
Definition SharedDefines.h:3269
@ DIMINISHING_DRAGONS_BREATH
Definition SharedDefines.h:3278
@ DIMINISHING_CONTROLLED_STUN
Definition SharedDefines.h:3262
@ DIMINISHING_CYCLONE
Definition SharedDefines.h:3264
@ DIMINISHING_BANISH
Definition SharedDefines.h:3259
@ DIMINISHING_CONTROLLED_ROOT
Definition SharedDefines.h:3263
@ DIMINISHING_NONE
Definition SharedDefines.h:3258
@ DIMINISHING_SLEEP
Definition SharedDefines.h:3275
@ DIMINISHING_STUN
Definition SharedDefines.h:3272
@ DIMINISHING_DISARM
Definition SharedDefines.h:3265
@ DIMINISHING_ENTRAPMENT
Definition SharedDefines.h:3267
@ DIMINISHING_FEAR
Definition SharedDefines.h:3268
@ DIMINISHING_SCATTER_SHOT
Definition SharedDefines.h:3273
@ DIMINISHING_LIMITONLY
Definition SharedDefines.h:3277
@ DIMINISHING_OPENING_STUN
Definition SharedDefines.h:3261
@ DIMINISHING_DISORIENT
Definition SharedDefines.h:3266
@ DIMINISHING_ROOT
Definition SharedDefines.h:3271
@ DIMINISHING_TAUNT
Definition SharedDefines.h:3276
@ DIMINISHING_CHARGE
Definition SharedDefines.h:3260
@ DIMINISHING_SILENCE
Definition SharedDefines.h:3274
@ MECHANIC_DISARM
Definition SharedDefines.h:1328
@ MECHANIC_FEAR
Definition SharedDefines.h:1330
@ MECHANIC_KNOCKOUT
Definition SharedDefines.h:1339
@ MECHANIC_CHARM
Definition SharedDefines.h:1326
@ MECHANIC_STUN
Definition SharedDefines.h:1337
@ MECHANIC_ROOT
Definition SharedDefines.h:1332
@ MECHANIC_SLEEP
Definition SharedDefines.h:1335
@ MECHANIC_POLYMORPH
Definition SharedDefines.h:1342
@ MECHANIC_BANISH
Definition SharedDefines.h:1343
@ MECHANIC_SILENCE
Definition SharedDefines.h:1334
@ MECHANIC_SHACKLE
Definition SharedDefines.h:1345
@ MECHANIC_SAPPED
Definition SharedDefines.h:1355
@ MECHANIC_HORROR
Definition SharedDefines.h:1349
@ SPELLFAMILY_WARLOCK
Definition SharedDefines.h:3533
@ SPELLFAMILY_MAGE
Definition SharedDefines.h:3531
@ SPELLFAMILY_GENERIC
Definition SharedDefines.h:3528
@ SPELLFAMILY_WARRIOR
Definition SharedDefines.h:3532
@ SPELLFAMILY_PALADIN
Definition SharedDefines.h:3538
@ SPELLFAMILY_HUNTER
Definition SharedDefines.h:3537
@ SPELLFAMILY_ROGUE
Definition SharedDefines.h:3536
@ SPELLFAMILY_SHAMAN
Definition SharedDefines.h:3539
@ SPELLFAMILY_DRUID
Definition SharedDefines.h:3535
@ SPELLFAMILY_DEATHKNIGHT
Definition SharedDefines.h:3543
@ SPELLFAMILY_UNK1
Definition SharedDefines.h:3529
@ 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)
246{
247 switch (group)
248 {
251 case DIMINISHING_STUN:
255 return DRTYPE_ALL;
257 case DIMINISHING_NONE:
258 return DRTYPE_NONE;
259 default:
260 return DRTYPE_PLAYER;
261 }
262}
@ DRTYPE_NONE
Definition SharedDefines.h:3250
@ DRTYPE_PLAYER
Definition SharedDefines.h:3251
@ DRTYPE_ALL
Definition SharedDefines.h:3252

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

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)
265{
266 switch (group)
267 {
270 default:
272 }
273}
@ DIMINISHING_LEVEL_IMMUNE
Definition Unit.h:266
@ DIMINISHING_LEVEL_TAUNT_IMMUNE
Definition Unit.h:268

References DIMINISHING_LEVEL_IMMUNE, DIMINISHING_LEVEL_TAUNT_IMMUNE, and DIMINISHING_TAUNT.

Referenced by Unit::IncrDiminishing().

◆ IsDiminishingReturnsGroupDurationLimited()

◆ IsPartOfSkillLine()

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

References sSpellMgr.

Referenced by SpellMgr::LoadSpellInfoCustomAttributes().

◆ IsPrimaryProfessionSkill()

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