AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellInfo Class Reference

#include "SpellInfo.h"

Public Member Functions

 SpellInfo (SpellEntry const *spellEntry)
 
 ~SpellInfo ()
 
uint32 GetCategory () const
 
bool HasEffect (SpellEffects effect) const
 
bool HasAura (AuraType aura) const
 
bool HasAnyAura () const
 
bool HasAreaAuraEffect () const
 
bool HasAttribute (SpellAttr0 attribute) const
 
bool HasAttribute (SpellAttr1 attribute) const
 
bool HasAttribute (SpellAttr2 attribute) const
 
bool HasAttribute (SpellAttr3 attribute) const
 
bool HasAttribute (SpellAttr4 attribute) const
 
bool HasAttribute (SpellAttr5 attribute) const
 
bool HasAttribute (SpellAttr6 attribute) const
 
bool HasAttribute (SpellAttr7 attribute) const
 
bool HasAttribute (SpellCustomAttributes customAttribute) const
 
bool IsExplicitDiscovery () const
 
bool IsLootCrafting () const
 
bool IsQuestTame () const
 
bool IsProfessionOrRiding () const
 
bool IsProfession () const
 
bool IsPrimaryProfession () const
 
bool IsPrimaryProfessionFirstRank () const
 
bool IsAbilityLearnedWithProfession () const
 
bool IsAbilityOfSkillType (uint32 skillType) const
 
bool IsAffectingArea () const
 
bool IsTargetingArea () const
 
bool NeedsExplicitUnitTarget () const
 
bool NeedsToBeTriggeredByCaster (SpellInfo const *triggeringSpell, uint8 effIndex=MAX_SPELL_EFFECTS) const
 
bool IsChannelCategorySpell () const
 
bool IsSelfCast () const
 
bool IsPassive () const
 
bool IsAutocastable () const
 
bool ComputeIsCritCapable () const
 
bool IsCritCapable () const
 
bool RequireCooldownInfo () const
 
void SetCritCapable (bool val)
 
bool ComputeIsStackableWithRanks () const
 
bool IsStackableWithRanks () const
 
void SetStackableWithRanks (bool val)
 
bool IsSpellValid () const
 
void SetSpellValid (bool val)
 
bool IsPassiveStackableWithRanks () const
 
bool IsMultiSlotAura () const
 
bool IsCooldownStartedOnEvent () const
 
bool IsDeathPersistent () const
 
bool IsRequiringDeadTarget () const
 
bool IsAllowingDeadTarget () const
 
bool CanBeUsedInCombat () const
 
bool IsPositive () const
 
bool IsPositiveEffect (uint8 effIndex) const
 
bool IsChanneled () const
 
bool IsActionAllowedChannel () const
 
bool NeedsComboPoints () const
 
bool IsBreakingStealth () const
 
bool IsRangedWeaponSpell () const
 
bool IsAutoRepeatRangedSpell () const
 
bool IsAffectedBySpellMods () const
 
bool IsAffectedBySpellMod (SpellModifier const *mod) const
 
bool CanPierceImmuneAura (SpellInfo const *aura) const
 
bool CanDispelAura (SpellInfo const *aura) const
 
bool IsSingleTarget () const
 
bool IsAuraExclusiveBySpecificWith (SpellInfo const *spellInfo) const
 
bool IsAuraExclusiveBySpecificPerCasterWith (SpellInfo const *spellInfo) const
 
SpellCastResult CheckShapeshift (uint32 form) const
 
SpellCastResult CheckLocation (uint32 map_id, uint32 zone_id, uint32 area_id, Player *player=nullptr, bool strict=true) const
 
SpellCastResult CheckTarget (Unit const *caster, WorldObject const *target, bool implicit=true) const
 
SpellCastResult CheckExplicitTarget (Unit const *caster, WorldObject const *target, Item const *itemTarget=nullptr) const
 
bool CheckTargetCreatureType (Unit const *target) const
 
bool IsStrongerAuraActive (Unit const *caster, Unit const *target) const
 
bool IsAuraEffectEqual (SpellInfo const *otherSpellInfo) const
 
bool ValidateAttribute6SpellDamageMods (Unit const *caster, const AuraEffect *auraEffect, bool isDot) const
 
SpellSchoolMask GetSchoolMask () const
 
uint32 GetAllEffectsMechanicMask () const
 
uint32 GetEffectMechanicMask (uint8 effIndex) const
 
uint32 GetSpellMechanicMaskByEffectMask (uint32 effectMask) const
 
Mechanics GetEffectMechanic (uint8 effIndex) const
 
bool HasAnyEffectMechanic () const
 
uint32 GetDispelMask () const
 
uint32 GetExplicitTargetMask () const
 
AuraStateType GetAuraState () const
 
SpellSpecificType GetSpellSpecific () const
 
float GetMinRange (bool positive=false) const
 
float GetMaxRange (bool positive=false, Unit *caster=nullptr, Spell *spell=nullptr) const
 
int32 GetDuration () const
 
int32 GetMaxDuration () const
 
uint32 GetMaxTicks () const
 
uint32 CalcCastTime (Unit *caster=nullptr, Spell *spell=nullptr) const
 
uint32 GetRecoveryTime () const
 
int32 CalcPowerCost (Unit const *caster, SpellSchoolMask schoolMask, Spell *spell=nullptr) const
 
bool IsRanked () const
 
uint8 GetRank () const
 
SpellInfo const * GetFirstRankSpell () const
 
SpellInfo const * GetLastRankSpell () const
 
SpellInfo const * GetNextRankSpell () const
 
SpellInfo const * GetPrevRankSpell () const
 
SpellInfo const * GetAuraRankForLevel (uint8 level) const
 
bool IsRankOf (SpellInfo const *spellInfo) const
 
bool IsDifferentRankOf (SpellInfo const *spellInfo) const
 
bool IsHighRankOf (SpellInfo const *spellInfo) const
 
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > const & GetEffects () const
 
SpellEffectInfo const & GetEffect (SpellEffIndex index) const
 
void _InitializeExplicitTargetMask ()
 
bool _IsPositiveEffect (uint8 effIndex, bool deep) const
 
bool _IsPositiveSpell () const
 
AuraStateType LoadAuraState () const
 
SpellSpecificType LoadSpellSpecific () const
 
void _UnloadImplicitTargetConditionLists ()
 
bool CheckElixirStacking (Unit const *caster) const
 

Static Public Member Functions

static uint32 GetDispelMask (DispelType type)
 
static bool _IsPositiveTarget (uint32 targetA, uint32 targetB)
 

Public Attributes

uint32 Id
 
SpellCategoryEntry const * CategoryEntry
 
uint32 Dispel
 
uint32 Mechanic
 
uint32 Attributes
 
uint32 AttributesEx
 
uint32 AttributesEx2
 
uint32 AttributesEx3
 
uint32 AttributesEx4
 
uint32 AttributesEx5
 
uint32 AttributesEx6
 
uint32 AttributesEx7
 
uint32 AttributesCu
 
uint32 Stances
 
uint32 StancesNot
 
uint32 Targets
 
uint32 TargetCreatureType
 
uint32 RequiresSpellFocus
 
uint32 FacingCasterFlags
 
uint32 CasterAuraState
 
uint32 TargetAuraState
 
uint32 CasterAuraStateNot
 
uint32 TargetAuraStateNot
 
uint32 CasterAuraSpell
 
uint32 TargetAuraSpell
 
uint32 ExcludeCasterAuraSpell
 
uint32 ExcludeTargetAuraSpell
 
SpellCastTimesEntry const * CastTimeEntry
 
uint32 RecoveryTime
 
uint32 CategoryRecoveryTime
 
uint32 StartRecoveryCategory
 
uint32 StartRecoveryTime
 
uint32 InterruptFlags
 
uint32 AuraInterruptFlags
 
uint32 ChannelInterruptFlags
 
uint32 ProcFlags
 
uint32 ProcChance
 
uint32 ProcCharges
 
uint32 MaxLevel
 
uint32 BaseLevel
 
uint32 SpellLevel
 
SpellDurationEntry const * DurationEntry
 
uint32 PowerType
 
uint32 ManaCost
 
uint32 ManaCostPerlevel
 
uint32 ManaPerSecond
 
uint32 ManaPerSecondPerLevel
 
uint32 ManaCostPercentage
 
uint32 RuneCostID
 
SpellRangeEntry const * RangeEntry
 
float Speed
 
uint32 StackAmount
 
std::array< uint32, 2 > Totem
 
std::array< int32, MAX_SPELL_REAGENTSReagent
 
std::array< uint32, MAX_SPELL_REAGENTSReagentCount
 
int32 EquippedItemClass
 
int32 EquippedItemSubClassMask
 
int32 EquippedItemInventoryTypeMask
 
std::array< uint32, 2 > TotemCategory
 
std::array< uint32, 2 > SpellVisual
 
uint32 SpellIconID
 
uint32 ActiveIconID
 
uint32 SpellPriority
 
std::array< char const *, 16 > SpellName
 
std::array< char const *, 16 > Rank
 
uint32 MaxTargetLevel
 
uint32 MaxAffectedTargets
 
uint32 SpellFamilyName
 
flag96 SpellFamilyFlags
 
uint32 DmgClass
 
uint32 PreventionType
 
int32 AreaGroupId
 
uint32 SchoolMask
 
std::array< SpellEffectInfo, MAX_SPELL_EFFECTSEffects
 
uint32 ExplicitTargetMask
 
SpellChainNode const * ChainEntry
 
AuraStateType _auraState
 
SpellSpecificType _spellSpecific
 
bool _isStackableWithRanks
 
bool _isSpellValid
 
bool _isCritCapable
 
bool _requireCooldownInfo
 

Private Member Functions

std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > & _GetEffects ()
 
SpellEffectInfo_GetEffect (SpellEffIndex index)
 

Friends

class SpellMgr
 

Detailed Description

Constructor & Destructor Documentation

◆ SpellInfo()

SpellInfo::SpellInfo ( SpellEntry const *  spellEntry)
775{
776 Id = spellEntry->Id;
777 CategoryEntry = spellEntry->Category ? sSpellCategoryStore.LookupEntry(spellEntry->Category) : nullptr;
778 Dispel = spellEntry->Dispel;
779 Mechanic = spellEntry->Mechanic;
780 Attributes = spellEntry->Attributes;
781 AttributesEx = spellEntry->AttributesEx;
782 AttributesEx2 = spellEntry->AttributesEx2;
783 AttributesEx3 = spellEntry->AttributesEx3;
784 AttributesEx4 = spellEntry->AttributesEx4;
785 AttributesEx5 = spellEntry->AttributesEx5;
786 AttributesEx6 = spellEntry->AttributesEx6;
787 AttributesEx7 = spellEntry->AttributesEx7;
788 AttributesCu = 0;
789 Stances = spellEntry->Stances;
790 StancesNot = spellEntry->StancesNot;
791 Targets = spellEntry->Targets;
792 TargetCreatureType = spellEntry->TargetCreatureType;
793 RequiresSpellFocus = spellEntry->RequiresSpellFocus;
794 FacingCasterFlags = spellEntry->FacingCasterFlags;
795 CasterAuraState = spellEntry->CasterAuraState;
796 TargetAuraState = spellEntry->TargetAuraState;
797 CasterAuraStateNot = spellEntry->CasterAuraStateNot;
798 TargetAuraStateNot = spellEntry->TargetAuraStateNot;
799 CasterAuraSpell = spellEntry->CasterAuraSpell;
800 TargetAuraSpell = spellEntry->TargetAuraSpell;
801 ExcludeCasterAuraSpell = spellEntry->ExcludeCasterAuraSpell;
802 ExcludeTargetAuraSpell = spellEntry->ExcludeTargetAuraSpell;
803 CastTimeEntry = spellEntry->CastingTimeIndex ? sSpellCastTimesStore.LookupEntry(spellEntry->CastingTimeIndex) : nullptr;
804 RecoveryTime = spellEntry->RecoveryTime;
805 CategoryRecoveryTime = spellEntry->CategoryRecoveryTime;
806 StartRecoveryCategory = spellEntry->StartRecoveryCategory;
807 StartRecoveryTime = spellEntry->StartRecoveryTime;
808 InterruptFlags = spellEntry->InterruptFlags;
809 AuraInterruptFlags = spellEntry->AuraInterruptFlags;
810 ChannelInterruptFlags = spellEntry->ChannelInterruptFlags;
811 ProcFlags = spellEntry->ProcFlags;
812 ProcChance = spellEntry->ProcChance;
813 ProcCharges = spellEntry->ProcCharges;
814 MaxLevel = spellEntry->MaxLevel;
815 BaseLevel = spellEntry->BaseLevel;
816 SpellLevel = spellEntry->SpellLevel;
817 DurationEntry = spellEntry->DurationIndex ? sSpellDurationStore.LookupEntry(spellEntry->DurationIndex) : nullptr;
818 PowerType = spellEntry->PowerType;
819 ManaCost = spellEntry->ManaCost;
820 ManaCostPerlevel = spellEntry->ManaCostPerlevel;
821 ManaPerSecond = spellEntry->ManaPerSecond;
822 ManaPerSecondPerLevel = spellEntry->ManaPerSecondPerLevel;
823 ManaCostPercentage = spellEntry->ManaCostPercentage;
824 RuneCostID = spellEntry->RuneCostID;
825 RangeEntry = spellEntry->RangeIndex ? sSpellRangeStore.LookupEntry(spellEntry->RangeIndex) : nullptr;
826 Speed = spellEntry->Speed;
827 StackAmount = spellEntry->StackAmount;
828 Totem = spellEntry->Totem;
829 Reagent = spellEntry->Reagent;
830 ReagentCount = spellEntry->ReagentCount;
831 EquippedItemClass = spellEntry->EquippedItemClass;
832 EquippedItemSubClassMask = spellEntry->EquippedItemSubClassMask;
833 EquippedItemInventoryTypeMask = spellEntry->EquippedItemInventoryTypeMask;
834 TotemCategory = spellEntry->TotemCategory;
835 SpellVisual = spellEntry->SpellVisual;
836 SpellIconID = spellEntry->SpellIconID;
837 ActiveIconID = spellEntry->ActiveIconID;
838 SpellPriority = spellEntry->SpellPriority;
839 SpellName = spellEntry->SpellName;
840 Rank = spellEntry->Rank;
841 MaxTargetLevel = spellEntry->MaxTargetLevel;
842 MaxAffectedTargets = spellEntry->MaxAffectedTargets;
843 SpellFamilyName = spellEntry->SpellFamilyName;
844 SpellFamilyFlags = spellEntry->SpellFamilyFlags;
845 DmgClass = spellEntry->DmgClass;
846 PreventionType = spellEntry->PreventionType;
847 AreaGroupId = spellEntry->AreaGroupId;
848 SchoolMask = spellEntry->SchoolMask;
849 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
850 Effects[i] = SpellEffectInfo(spellEntry, this, i);
851
852 ChainEntry = nullptr;
854
855 // Mine
856 _isStackableWithRanks = false;
857 _isSpellValid = true;
858 _isCritCapable = false;
859 _requireCooldownInfo = false;
860}
std::uint8_t uint8
Definition: Define.h:110
DBCStorage< SpellCategoryEntry > sSpellCategoryStore(SpellCategoryfmt)
DBCStorage< SpellCastTimesEntry > sSpellCastTimesStore(SpellCastTimefmt)
DBCStorage< SpellRangeEntry > sSpellRangeStore(SpellRangefmt)
DBCStorage< SpellDurationEntry > sSpellDurationStore(SpellDurationfmt)
PowerType
Definition: VehicleDefines.h:30
ProcFlags
Definition: SpellMgr.h:104
#define MAX_SPELL_EFFECTS
Definition: DBCStructure.h:1635
Targets
Definition: SharedDefines.h:1409
TotemCategory
Definition: SharedDefines.h:3083
Definition: Totem.h:43
Totem(SummonPropertiesEntry const *properties, ObjectGuid owner)
Definition: Totem.cpp:27
Definition: SpellInfo.h:247
uint32 ChannelInterruptFlags
Definition: SpellInfo.h:352
uint32 RequiresSpellFocus
Definition: SpellInfo.h:335
uint32 BaseLevel
Definition: SpellInfo.h:357
uint32 MaxLevel
Definition: SpellInfo.h:356
uint32 SpellLevel
Definition: SpellInfo.h:358
uint32 TargetAuraState
Definition: SpellInfo.h:338
std::array< int32, MAX_SPELL_REAGENTS > Reagent
Definition: SpellInfo.h:371
uint32 ExcludeTargetAuraSpell
Definition: SpellInfo.h:344
uint32 TargetAuraStateNot
Definition: SpellInfo.h:340
uint32 PreventionType
Definition: SpellInfo.h:388
uint32 CasterAuraSpell
Definition: SpellInfo.h:341
uint32 RuneCostID
Definition: SpellInfo.h:366
uint32 MaxTargetLevel
Definition: SpellInfo.h:383
uint32 Stances
Definition: SpellInfo.h:331
uint32 ManaCostPerlevel
Definition: SpellInfo.h:362
flag96 SpellFamilyFlags
Definition: SpellInfo.h:386
uint32 AttributesCu
Definition: SpellInfo.h:330
uint32 RecoveryTime
Definition: SpellInfo.h:346
uint32 ManaPerSecondPerLevel
Definition: SpellInfo.h:364
bool _isSpellValid
Definition: SpellInfo.h:399
uint32 StancesNot
Definition: SpellInfo.h:332
uint32 StackAmount
Definition: SpellInfo.h:369
uint32 Mechanic
Definition: SpellInfo.h:321
uint32 Id
Definition: SpellInfo.h:318
SpellRangeEntry const * RangeEntry
Definition: SpellInfo.h:367
uint32 ProcCharges
Definition: SpellInfo.h:355
bool _requireCooldownInfo
Definition: SpellInfo.h:401
bool _isStackableWithRanks
Definition: SpellInfo.h:398
uint32 Dispel
Definition: SpellInfo.h:320
uint32 ActiveIconID
Definition: SpellInfo.h:379
float Speed
Definition: SpellInfo.h:368
int32 EquippedItemClass
Definition: SpellInfo.h:373
uint32 SchoolMask
Definition: SpellInfo.h:390
uint32 CasterAuraState
Definition: SpellInfo.h:337
std::array< uint32, 2 > SpellVisual
Definition: SpellInfo.h:377
uint32 CategoryRecoveryTime
Definition: SpellInfo.h:347
uint32 ExplicitTargetMask
Definition: SpellInfo.h:392
uint32 AttributesEx3
Definition: SpellInfo.h:325
uint32 CasterAuraStateNot
Definition: SpellInfo.h:339
int32 AreaGroupId
Definition: SpellInfo.h:389
uint32 ManaPerSecond
Definition: SpellInfo.h:363
std::array< uint32, MAX_SPELL_REAGENTS > ReagentCount
Definition: SpellInfo.h:372
uint32 InterruptFlags
Definition: SpellInfo.h:350
SpellDurationEntry const * DurationEntry
Definition: SpellInfo.h:359
uint32 Attributes
Definition: SpellInfo.h:322
uint32 AttributesEx
Definition: SpellInfo.h:323
uint32 SpellPriority
Definition: SpellInfo.h:380
SpellCategoryEntry const * CategoryEntry
Definition: SpellInfo.h:319
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition: SpellInfo.h:391
uint32 MaxAffectedTargets
Definition: SpellInfo.h:384
uint32 ManaCostPercentage
Definition: SpellInfo.h:365
uint32 AttributesEx6
Definition: SpellInfo.h:328
uint32 AttributesEx7
Definition: SpellInfo.h:329
int32 EquippedItemSubClassMask
Definition: SpellInfo.h:374
uint32 FacingCasterFlags
Definition: SpellInfo.h:336
uint32 StartRecoveryTime
Definition: SpellInfo.h:349
uint32 TargetAuraSpell
Definition: SpellInfo.h:342
uint32 SpellIconID
Definition: SpellInfo.h:378
SpellChainNode const * ChainEntry
Definition: SpellInfo.h:393
bool _isCritCapable
Definition: SpellInfo.h:400
SpellCastTimesEntry const * CastTimeEntry
Definition: SpellInfo.h:345
int32 EquippedItemInventoryTypeMask
Definition: SpellInfo.h:375
uint32 TargetCreatureType
Definition: SpellInfo.h:334
uint32 ProcChance
Definition: SpellInfo.h:354
uint32 AttributesEx2
Definition: SpellInfo.h:324
uint32 DmgClass
Definition: SpellInfo.h:387
uint32 AttributesEx5
Definition: SpellInfo.h:327
uint32 AttributesEx4
Definition: SpellInfo.h:326
uint32 ExcludeCasterAuraSpell
Definition: SpellInfo.h:343
uint32 StartRecoveryCategory
Definition: SpellInfo.h:348
uint32 SpellFamilyName
Definition: SpellInfo.h:385
uint32 ManaCost
Definition: SpellInfo.h:361
std::array< char const *, 16 > SpellName
Definition: SpellInfo.h:381
uint32 AuraInterruptFlags
Definition: SpellInfo.h:351
std::array< char const *, 16 > Rank
Definition: SpellInfo.h:382

References _isCritCapable, _isSpellValid, _isStackableWithRanks, _requireCooldownInfo, ActiveIconID, SpellEntry::ActiveIconID, AreaGroupId, SpellEntry::AreaGroupId, Attributes, SpellEntry::Attributes, AttributesCu, AttributesEx, SpellEntry::AttributesEx, AttributesEx2, SpellEntry::AttributesEx2, AttributesEx3, SpellEntry::AttributesEx3, AttributesEx4, SpellEntry::AttributesEx4, AttributesEx5, SpellEntry::AttributesEx5, AttributesEx6, SpellEntry::AttributesEx6, AttributesEx7, SpellEntry::AttributesEx7, AuraInterruptFlags, SpellEntry::AuraInterruptFlags, BaseLevel, SpellEntry::BaseLevel, CasterAuraSpell, SpellEntry::CasterAuraSpell, CasterAuraState, SpellEntry::CasterAuraState, CasterAuraStateNot, SpellEntry::CasterAuraStateNot, SpellEntry::CastingTimeIndex, CastTimeEntry, SpellEntry::Category, CategoryEntry, CategoryRecoveryTime, SpellEntry::CategoryRecoveryTime, ChainEntry, ChannelInterruptFlags, SpellEntry::ChannelInterruptFlags, Dispel, SpellEntry::Dispel, DmgClass, SpellEntry::DmgClass, DurationEntry, SpellEntry::DurationIndex, Effects, EquippedItemClass, SpellEntry::EquippedItemClass, EquippedItemInventoryTypeMask, SpellEntry::EquippedItemInventoryTypeMask, EquippedItemSubClassMask, SpellEntry::EquippedItemSubClassMask, ExcludeCasterAuraSpell, SpellEntry::ExcludeCasterAuraSpell, ExcludeTargetAuraSpell, SpellEntry::ExcludeTargetAuraSpell, ExplicitTargetMask, FacingCasterFlags, SpellEntry::FacingCasterFlags, Id, SpellEntry::Id, InterruptFlags, SpellEntry::InterruptFlags, ManaCost, SpellEntry::ManaCost, ManaCostPercentage, SpellEntry::ManaCostPercentage, ManaCostPerlevel, SpellEntry::ManaCostPerlevel, ManaPerSecond, SpellEntry::ManaPerSecond, ManaPerSecondPerLevel, SpellEntry::ManaPerSecondPerLevel, MAX_SPELL_EFFECTS, MaxAffectedTargets, SpellEntry::MaxAffectedTargets, MaxLevel, SpellEntry::MaxLevel, MaxTargetLevel, SpellEntry::MaxTargetLevel, Mechanic, SpellEntry::Mechanic, SpellEntry::PowerType, PreventionType, SpellEntry::PreventionType, ProcChance, SpellEntry::ProcChance, ProcCharges, SpellEntry::ProcCharges, SpellEntry::ProcFlags, RangeEntry, SpellEntry::RangeIndex, Rank, SpellEntry::Rank, Reagent, SpellEntry::Reagent, ReagentCount, SpellEntry::ReagentCount, RecoveryTime, SpellEntry::RecoveryTime, RequiresSpellFocus, SpellEntry::RequiresSpellFocus, RuneCostID, SpellEntry::RuneCostID, SchoolMask, SpellEntry::SchoolMask, Speed, SpellEntry::Speed, SpellFamilyFlags, SpellEntry::SpellFamilyFlags, SpellFamilyName, SpellEntry::SpellFamilyName, SpellIconID, SpellEntry::SpellIconID, SpellLevel, SpellEntry::SpellLevel, SpellName, SpellEntry::SpellName, SpellPriority, SpellEntry::SpellPriority, SpellVisual, SpellEntry::SpellVisual, sSpellCastTimesStore, sSpellCategoryStore, sSpellDurationStore, sSpellRangeStore, StackAmount, SpellEntry::StackAmount, Stances, SpellEntry::Stances, StancesNot, SpellEntry::StancesNot, StartRecoveryCategory, SpellEntry::StartRecoveryCategory, StartRecoveryTime, SpellEntry::StartRecoveryTime, TargetAuraSpell, SpellEntry::TargetAuraSpell, TargetAuraState, SpellEntry::TargetAuraState, TargetAuraStateNot, SpellEntry::TargetAuraStateNot, TargetCreatureType, SpellEntry::TargetCreatureType, SpellEntry::Targets, SpellEntry::Totem, and SpellEntry::TotemCategory.

◆ ~SpellInfo()

SpellInfo::~SpellInfo ( )
863{
865}
void _UnloadImplicitTargetConditionLists()
Definition: SpellInfo.cpp:2859

References _UnloadImplicitTargetConditionLists().

Member Function Documentation

◆ _GetEffect()

SpellEffectInfo & SpellInfo::_GetEffect ( SpellEffIndex  index)
inlineprivate
543{ ASSERT(index < Effects.size()); return Effects[index]; }
#define ASSERT
Definition: Errors.h:68

References ASSERT.

◆ _GetEffects()

std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > & SpellInfo::_GetEffects ( )
inlineprivate
542{ return Effects; }

◆ _InitializeExplicitTargetMask()

void SpellInfo::_InitializeExplicitTargetMask ( )
2579{
2580 bool srcSet = false;
2581 bool dstSet = false;
2582 uint32 targetMask = Targets;
2583 // prepare target mask using effect target entries
2584 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2585 {
2586 if (!Effects[i].IsEffect())
2587 continue;
2588 targetMask |= Effects[i].TargetA.GetExplicitTargetMask(srcSet, dstSet);
2589 targetMask |= Effects[i].TargetB.GetExplicitTargetMask(srcSet, dstSet);
2590
2591 // add explicit target flags based on spell effects which have EFFECT_IMPLICIT_TARGET_EXPLICIT and no valid target provided
2592 if (Effects[i].GetImplicitTargetType() != EFFECT_IMPLICIT_TARGET_EXPLICIT)
2593 continue;
2594
2595 // extend explicit target mask only if valid targets for effect could not be provided by target types
2596 uint32 effectTargetMask = Effects[i].GetMissingTargetMask(srcSet, dstSet, targetMask);
2597
2598 // don't add explicit object/dest flags when spell has no max range
2599 if (GetMaxRange(true) == 0.0f && GetMaxRange(false) == 0.0f)
2601 targetMask |= effectTargetMask;
2602 }
2603 ExplicitTargetMask = targetMask;
2604}
std::uint32_t uint32
Definition: Define.h:108
@ EFFECT_IMPLICIT_TARGET_EXPLICIT
Definition: SpellInfo.h:143
@ TARGET_FLAG_GAMEOBJECT
Definition: SpellInfo.h:57
@ TARGET_FLAG_DEST_LOCATION
Definition: SpellInfo.h:52
@ TARGET_FLAG_UNIT_MASK
Definition: SpellInfo.h:68
@ TARGET_FLAG_CORPSE_MASK
Definition: SpellInfo.h:71
float GetMaxRange(bool positive=false, Unit *caster=nullptr, Spell *spell=nullptr) const
Definition: SpellInfo.cpp:2309
uint32 Targets
Definition: SpellInfo.h:333

References EFFECT_IMPLICIT_TARGET_EXPLICIT, Effects, ExplicitTargetMask, GetMaxRange(), MAX_SPELL_EFFECTS, TARGET_FLAG_CORPSE_MASK, TARGET_FLAG_DEST_LOCATION, TARGET_FLAG_GAMEOBJECT, TARGET_FLAG_UNIT_MASK, and Targets.

Referenced by SpellMgr::LoadSpellInfoCustomAttributes().

◆ _IsPositiveEffect()

bool SpellInfo::_IsPositiveEffect ( uint8  effIndex,
bool  deep 
) const
2607{
2608 // not found a single positive spell with this attribute
2610 return false;
2611
2612 switch (Mechanic)
2613 {
2615 return true;
2616 default:
2617 break;
2618 }
2619
2620 // Special case: effects which determine positivity of whole spell
2621 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2622 {
2623 if (Effects[i].IsAura() && Effects[i].ApplyAuraName == SPELL_AURA_MOD_STEALTH)
2624 return true;
2625 }
2626
2627 switch (Effects[effIndex].Effect)
2628 {
2629 case SPELL_EFFECT_DUMMY:
2630 // some explicitly required dummy effect sets
2631 switch (Id)
2632 {
2633 case 28441:
2634 return false; // AB Effect 000
2635 default:
2636 break;
2637 }
2638 break;
2639 // always positive effects (check before target checks that provided non-positive result in some case for positive effects)
2640 case SPELL_EFFECT_HEAL:
2645 return true;
2647 return false;
2648
2650 return false;
2651
2653 {
2654 bool only = true;
2655 for (int i = EFFECT_0; i <= EFFECT_2; ++i)
2656 {
2657 if (Effects[effIndex].Effect > 0 && Effects[effIndex].Effect != SPELL_EFFECT_SCHOOL_DAMAGE)
2658 only = false;
2659 if (Effects[effIndex].Effect == SPELL_EFFECT_GAMEOBJECT_DAMAGE)
2660 return false;
2661 }
2662 // effects with school damage only cannot be positive...
2663 if (only)
2664 return false;
2665 break;
2666 }
2669 {
2670 for (int i = EFFECT_0; i <= EFFECT_2; ++i)
2671 if (Effects[effIndex].Effect == SPELL_EFFECT_GAMEOBJECT_DAMAGE)
2672 return false;
2673 break;
2674 }
2675
2676 // non-positive aura use
2679 {
2680 switch (Effects[effIndex].ApplyAuraName)
2681 {
2682 case SPELL_AURA_MOD_DAMAGE_DONE: // dependent from bas point sign (negative -> negative)
2689 if (Effects[effIndex].CalcValue() < 0)
2690 return false;
2691 break;
2692 case SPELL_AURA_MOD_DAMAGE_TAKEN: // dependent from bas point sign (positive -> negative)
2693 if (Effects[effIndex].CalcValue() > 0)
2694 return false;
2695 break;
2698 if (Effects[effIndex].CalcValue() > 0)
2699 return true; // some expected positive spells have SPELL_ATTR1_NEGATIVE
2700 break;
2702 return true;
2706 if (!deep)
2707 {
2708 if (SpellInfo const* spellTriggeredProto = sSpellMgr->GetSpellInfo(Effects[effIndex].TriggerSpell))
2709 {
2710 // negative targets of main spell return early
2711 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2712 {
2713 if (!spellTriggeredProto->Effects[i].Effect)
2714 continue;
2715 // if non-positive trigger cast targeted to positive target this main cast is non-positive
2716 // this will place this spell auras as debuffs
2717 if (_IsPositiveTarget(spellTriggeredProto->Effects[i].TargetA.GetTarget(), spellTriggeredProto->Effects[i].TargetB.GetTarget()) && !spellTriggeredProto->_IsPositiveEffect(i, true))
2718 return false;
2719 }
2720 }
2721 }
2723 // many positive auras have negative triggered spells at damage for example and this not make it negative (it can be canceled for example)
2724 break;
2725 case SPELL_AURA_MOD_STUN: //have positive and negative spells, we can't sort its correctly at this moment.
2726 if (effIndex == 0 && Effects[1].Effect == 0 && Effects[2].Effect == 0)
2727 return false; // but all single stun aura spells is negative
2728 break;
2730 if (Id == 24740) // Wisp Costume
2731 return true;
2732 return false;
2736 case SPELL_AURA_GHOST:
2741 return false;
2742 case SPELL_AURA_PERIODIC_DAMAGE: // used in positive spells also.
2743 // part of negative spell if casted at self (prevent cancel)
2744 if (Effects[effIndex].TargetA.GetTarget() == TARGET_UNIT_CASTER)
2745 return false;
2746 break;
2747 case SPELL_AURA_MOD_DECREASE_SPEED: // used in positive spells also
2748 // part of positive spell if casted at self
2749 if (Effects[effIndex].TargetA.GetTarget() != TARGET_UNIT_CASTER)
2750 return false;
2751 // but not this if this first effect (didn't find better check)
2752 if (HasAttribute(SPELL_ATTR0_AURA_IS_DEBUFF) && effIndex == 0)
2753 return false;
2754 break;
2756 {
2757 // non-positive immunities
2758 switch (Effects[effIndex].MiscValue)
2759 {
2760 case MECHANIC_BANDAGE:
2761 case MECHANIC_SHIELD:
2762 case MECHANIC_MOUNT:
2764 return false;
2765 default:
2766 break;
2767 }
2768 break;
2769 }
2770 case SPELL_AURA_ADD_FLAT_MODIFIER: // mods
2772 {
2773 // non-positive mods
2774 switch (Effects[effIndex].MiscValue)
2775 {
2776 case SPELLMOD_COST: // dependent from bas point sign (negative -> positive)
2777 if (Effects[effIndex].CalcValue() > 0)
2778 {
2779 if (!deep)
2780 {
2781 bool negative = true;
2782 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2783 {
2784 if (i != effIndex)
2785 if (_IsPositiveEffect(i, true))
2786 {
2787 negative = false;
2788 break;
2789 }
2790 }
2791 if (negative)
2792 return false;
2793 }
2794 }
2795 break;
2796 default:
2797 break;
2798 }
2799 break;
2800 }
2801 default:
2802 break;
2803 }
2804 break;
2805 }
2806 default:
2807 break;
2808 }
2809
2810 // non-positive targets
2811 if (!_IsPositiveTarget(Effects[effIndex].TargetA.GetTarget(), Effects[effIndex].TargetB.GetTarget()))
2812 return false;
2813
2814 // negative spell if triggered spell is negative
2815 if (!deep && !Effects[effIndex].ApplyAuraName && Effects[effIndex].TriggerSpell)
2816 {
2817 if (SpellInfo const* spellTriggeredProto = sSpellMgr->GetSpellInfo(Effects[effIndex].TriggerSpell))
2818 if (!spellTriggeredProto->_IsPositiveSpell())
2819 return false;
2820 }
2821
2822 // ok, positive
2823 return true;
2824}
@ SPELL_AURA_PREVENT_RESURRECTION
Definition: SpellAuraDefines.h:377
@ SPELL_AURA_MOD_SKILL
Definition: SpellAuraDefines.h:93
@ SPELL_AURA_PERIODIC_DAMAGE
Definition: SpellAuraDefines.h:66
@ SPELL_AURA_ADD_PCT_MODIFIER
Definition: SpellAuraDefines.h:171
@ SPELL_AURA_PROC_TRIGGER_SPELL
Definition: SpellAuraDefines.h:105
@ SPELL_AURA_MOD_FEAR
Definition: SpellAuraDefines.h:70
@ SPELL_AURA_ADD_FLAT_MODIFIER
Definition: SpellAuraDefines.h:170
@ SPELL_AURA_MOD_STALKED
Definition: SpellAuraDefines.h:131
@ SPELL_AURA_MOD_SPELL_CRIT_CHANCE
Definition: SpellAuraDefines.h:120
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
Definition: SpellAuraDefines.h:152
@ SPELL_AURA_MOD_DODGE_PERCENT
Definition: SpellAuraDefines.h:112
@ SPELL_AURA_MOD_SILENCE
Definition: SpellAuraDefines.h:90
@ SPELL_AURA_ADD_TARGET_TRIGGER
Definition: SpellAuraDefines.h:172
@ SPELL_AURA_MOD_STAT
Definition: SpellAuraDefines.h:92
@ SPELL_AURA_MOD_HEALING_DONE
Definition: SpellAuraDefines.h:198
@ SPELL_AURA_MOD_HEALING_PCT
Definition: SpellAuraDefines.h:181
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
Definition: SpellAuraDefines.h:142
@ SPELL_AURA_GHOST
Definition: SpellAuraDefines.h:158
@ SPELL_AURA_MOD_ROOT
Definition: SpellAuraDefines.h:89
@ SPELL_AURA_MECHANIC_IMMUNITY
Definition: SpellAuraDefines.h:140
@ SPELL_AURA_MOD_DAMAGE_TAKEN
Definition: SpellAuraDefines.h:77
@ SPELL_AURA_MOD_CRIT_PCT
Definition: SpellAuraDefines.h:353
@ SPELL_AURA_MOD_PACIFY_SILENCE
Definition: SpellAuraDefines.h:123
@ SPELL_AURA_MOD_DECREASE_SPEED
Definition: SpellAuraDefines.h:96
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE
Definition: SpellAuraDefines.h:290
@ SPELL_AURA_PERIODIC_LEECH
Definition: SpellAuraDefines.h:116
@ SPELL_AURA_MOD_DAMAGE_DONE
Definition: SpellAuraDefines.h:76
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT
Definition: SpellAuraDefines.h:111
@ SPELL_AURA_MOD_STEALTH
Definition: SpellAuraDefines.h:79
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
Definition: SpellAuraDefines.h:86
@ SPELL_AURA_MOD_STUN
Definition: SpellAuraDefines.h:75
@ SPELLMOD_COST
Definition: SpellDefines.h:91
#define sSpellMgr
Definition: SpellMgr.h:825
@ EFFECT_0
Definition: SharedDefines.h:31
@ EFFECT_2
Definition: SharedDefines.h:33
@ SPELL_EFFECT_DUMMY
Definition: SharedDefines.h:781
@ SPELL_EFFECT_ENERGIZE_PCT
Definition: SharedDefines.h:915
@ SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
Definition: SharedDefines.h:906
@ SPELL_EFFECT_HEAL
Definition: SharedDefines.h:788
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition: SharedDefines.h:922
@ SPELL_EFFECT_KNOCK_BACK
Definition: SharedDefines.h:876
@ SPELL_EFFECT_SCHOOL_DAMAGE
Definition: SharedDefines.h:780
@ SPELL_EFFECT_GAMEOBJECT_DAMAGE
Definition: SharedDefines.h:865
@ SPELL_EFFECT_LEARN_SPELL
Definition: SharedDefines.h:814
@ SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
Definition: SharedDefines.h:907
@ SPELL_EFFECT_HEAL_PCT
Definition: SharedDefines.h:914
@ SPELL_EFFECT_SKILL_STEP
Definition: SharedDefines.h:822
@ SPELL_EFFECT_APPLY_AURA
Definition: SharedDefines.h:784
@ TARGET_UNIT_CASTER
Definition: SharedDefines.h:1410
@ MECHANIC_MOUNT
Definition: SharedDefines.h:1346
@ MECHANIC_INVULNERABILITY
Definition: SharedDefines.h:1350
@ MECHANIC_BANDAGE
Definition: SharedDefines.h:1341
@ MECHANIC_IMMUNE_SHIELD
Definition: SharedDefines.h:1354
@ MECHANIC_SHIELD
Definition: SharedDefines.h:1344
@ SPELL_ATTR0_AURA_IS_DEBUFF
Definition: SharedDefines.h:408
Definition: SpellInfo.h:314
static bool _IsPositiveTarget(uint32 targetA, uint32 targetB)
Definition: SpellInfo.cpp:2836
bool _IsPositiveEffect(uint8 effIndex, bool deep) const
Definition: SpellInfo.cpp:2606
bool HasAttribute(SpellAttr0 attribute) const
Definition: SpellInfo.h:412

References _IsPositiveEffect(), _IsPositiveTarget(), EFFECT_0, EFFECT_2, Effects, HasAttribute(), Id, MAX_SPELL_EFFECTS, Mechanic, MECHANIC_BANDAGE, MECHANIC_IMMUNE_SHIELD, MECHANIC_INVULNERABILITY, MECHANIC_MOUNT, MECHANIC_SHIELD, SPELL_ATTR0_AURA_IS_DEBUFF, SPELL_AURA_ADD_FLAT_MODIFIER, SPELL_AURA_ADD_PCT_MODIFIER, SPELL_AURA_ADD_TARGET_TRIGGER, SPELL_AURA_GHOST, SPELL_AURA_MECHANIC_IMMUNITY, SPELL_AURA_MOD_CRIT_PCT, SPELL_AURA_MOD_DAMAGE_DONE, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, SPELL_AURA_MOD_DAMAGE_TAKEN, SPELL_AURA_MOD_DECREASE_SPEED, SPELL_AURA_MOD_DODGE_PERCENT, SPELL_AURA_MOD_FEAR, SPELL_AURA_MOD_HEALING_DONE, SPELL_AURA_MOD_HEALING_PCT, SPELL_AURA_MOD_PACIFY_SILENCE, SPELL_AURA_MOD_ROOT, SPELL_AURA_MOD_SILENCE, SPELL_AURA_MOD_SKILL, SPELL_AURA_MOD_SPELL_CRIT_CHANCE, SPELL_AURA_MOD_STALKED, SPELL_AURA_MOD_STAT, SPELL_AURA_MOD_STEALTH, SPELL_AURA_MOD_STUN, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_PERIODIC_DAMAGE_PERCENT, SPELL_AURA_PERIODIC_LEECH, SPELL_AURA_PERIODIC_TRIGGER_SPELL, SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT, SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE, SPELL_AURA_PREVENT_RESURRECTION, SPELL_AURA_PROC_TRIGGER_SPELL, SPELL_EFFECT_APPLY_AREA_AURA_ENEMY, SPELL_EFFECT_APPLY_AREA_AURA_FRIEND, SPELL_EFFECT_APPLY_AURA, SPELL_EFFECT_DUMMY, SPELL_EFFECT_ENERGIZE_PCT, SPELL_EFFECT_GAMEOBJECT_DAMAGE, SPELL_EFFECT_HEAL, SPELL_EFFECT_HEAL_PCT, SPELL_EFFECT_KNOCK_BACK, SPELL_EFFECT_KNOCK_BACK_DEST, SPELL_EFFECT_LEARN_SPELL, SPELL_EFFECT_SCHOOL_DAMAGE, SPELL_EFFECT_SKILL_STEP, SPELLMOD_COST, sSpellMgr, and TARGET_UNIT_CASTER.

Referenced by _IsPositiveEffect(), _IsPositiveSpell(), WorldSession::HandlePetActionHelper(), and SpellMgr::LoadSpellInfoCustomAttributes().

◆ _IsPositiveSpell()

bool SpellInfo::_IsPositiveSpell ( ) const
2827{
2828 // spells with at least one negative effect are considered negative
2829 // some self-applied spells have negative effects but in self casting case negative check ignored.
2830 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2831 if (!_IsPositiveEffect(i, true))
2832 return false;
2833 return true;
2834}

References _IsPositiveEffect(), and MAX_SPELL_EFFECTS.

Referenced by Spell::HandleThreatSpells().

◆ _IsPositiveTarget()

bool SpellInfo::_IsPositiveTarget ( uint32  targetA,
uint32  targetB 
)
static
2837{
2838 // non-positive targets
2839 switch (targetA)
2840 {
2850 return false;
2851 default:
2852 break;
2853 }
2854 if (targetB)
2855 return _IsPositiveTarget(targetB, 0);
2856 return true;
2857}
@ TARGET_DEST_DYNOBJ_ENEMY
Definition: SharedDefines.h:1432
@ TARGET_UNIT_DEST_AREA_ENEMY
Definition: SharedDefines.h:1421
@ TARGET_UNIT_CONE_ENEMY_104
Definition: SharedDefines.h:1508
@ TARGET_UNIT_SRC_AREA_ENEMY
Definition: SharedDefines.h:1420
@ TARGET_DEST_TARGET_ENEMY
Definition: SharedDefines.h:1457
@ TARGET_UNIT_TARGET_ENEMY
Definition: SharedDefines.h:1415
@ TARGET_UNIT_CONE_ENEMY_54
Definition: SharedDefines.h:1458
@ TARGET_UNIT_CONE_ENEMY_24
Definition: SharedDefines.h:1428
@ TARGET_UNIT_NEARBY_ENEMY
Definition: SharedDefines.h:1411

References _IsPositiveTarget(), TARGET_DEST_DYNOBJ_ENEMY, TARGET_DEST_TARGET_ENEMY, TARGET_UNIT_CONE_ENEMY_104, TARGET_UNIT_CONE_ENEMY_24, TARGET_UNIT_CONE_ENEMY_54, TARGET_UNIT_DEST_AREA_ENEMY, TARGET_UNIT_NEARBY_ENEMY, TARGET_UNIT_SRC_AREA_ENEMY, and TARGET_UNIT_TARGET_ENEMY.

Referenced by _IsPositiveEffect(), and _IsPositiveTarget().

◆ _UnloadImplicitTargetConditionLists()

void SpellInfo::_UnloadImplicitTargetConditionLists ( )
2860{
2861 // find the same instances of ConditionList and delete them.
2862 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2863 {
2864 ConditionList* cur = Effects[i].ImplicitTargetConditions;
2865 if (!cur)
2866 continue;
2867 for (uint8 j = i; j < MAX_SPELL_EFFECTS; ++j)
2868 {
2869 if (Effects[j].ImplicitTargetConditions == cur)
2870 Effects[j].ImplicitTargetConditions = nullptr;
2871 }
2872 delete cur;
2873 }
2874}
std::list< Condition * > ConditionList
Definition: ConditionMgr.h:236

References Effects, and MAX_SPELL_EFFECTS.

Referenced by ~SpellInfo().

◆ CalcCastTime()

uint32 SpellInfo::CalcCastTime ( Unit caster = nullptr,
Spell spell = nullptr 
) const
2339{
2340 // not all spells have cast time index and this is all is pasiive abilities
2341 if (!CastTimeEntry)
2342 return 0;
2343
2344 int32 castTime = CastTimeEntry->CastTime;
2346 castTime += 500;
2347
2348 if (caster)
2349 caster->ModSpellCastTime(this, castTime, spell);
2350
2351 return (castTime > 0) ? uint32(castTime) : 0;
2352}
std::int32_t int32
Definition: Define.h:104
@ SPELL_ATTR0_USES_RANGED_SLOT
Definition: SharedDefines.h:383
void ModSpellCastTime(SpellInfo const *spellProto, int32 &castTime, Spell *spell=nullptr)
Definition: Unit.cpp:14959
bool IsAutoRepeatRangedSpell() const
Definition: SpellInfo.cpp:1270
int32 CastTime
Definition: DBCStructure.h:1760

References SpellCastTimesEntry::CastTime, CastTimeEntry, HasAttribute(), IsAutoRepeatRangedSpell(), Unit::ModSpellCastTime(), and SPELL_ATTR0_USES_RANGED_SLOT.

Referenced by Spell::_cast(), Unit::CalculateDefaultCoefficient(), GameObject::CastSpell(), Unit::GetCastingTimeForBonus(), Spell::prepare(), Player::PrepareCharmAISpells(), and Unit::ProcDamageAndSpellFor().

◆ CalcPowerCost()

int32 SpellInfo::CalcPowerCost ( Unit const *  caster,
SpellSchoolMask  schoolMask,
Spell spell = nullptr 
) const
2388{
2389 // Spell drain all exist power on cast (Only paladin lay of Hands)
2391 {
2392 // If power type - health drain all
2393 if (PowerType == POWER_HEALTH)
2394 return caster->GetHealth();
2395 // Else drain all power
2396 if (PowerType < MAX_POWERS)
2397 return caster->GetPower(Powers(PowerType));
2398 LOG_ERROR("spells", "SpellInfo::CalcPowerCost: Unknown power type '{}' in spell {}", PowerType, Id);
2399 return 0;
2400 }
2401
2402 // Base powerCost
2403 int32 powerCost = ManaCost;
2404 // PCT cost from total amount
2406 {
2407 switch (PowerType)
2408 {
2409 // health as power used
2410 case POWER_HEALTH:
2411 powerCost += int32(CalculatePct(caster->GetCreateHealth(), ManaCostPercentage));
2412 break;
2413 case POWER_MANA:
2414 powerCost += int32(CalculatePct(caster->GetCreateMana(), ManaCostPercentage));
2415 break;
2416 case POWER_RAGE:
2417 case POWER_FOCUS:
2418 case POWER_ENERGY:
2419 case POWER_HAPPINESS:
2420 powerCost += int32(CalculatePct(caster->GetMaxPower(Powers(PowerType)), ManaCostPercentage));
2421 break;
2422 case POWER_RUNE:
2423 case POWER_RUNIC_POWER:
2424 LOG_DEBUG("spells.aura", "CalculateManaCost: Not implemented yet!");
2425 break;
2426 default:
2427 LOG_ERROR("spells", "CalculateManaCost: Unknown power type '{}' in spell {}", PowerType, Id);
2428 return 0;
2429 }
2430 }
2431 SpellSchools school = GetFirstSchoolInMask(schoolMask);
2432 // Flat mod from caster auras by spell school
2433 powerCost += caster->GetInt32Value(static_cast<uint16>(UNIT_FIELD_POWER_COST_MODIFIER) + school);
2434
2435 // Shiv - costs 20 + weaponSpeed*10 energy (apply only to non-triggered spell with energy cost)
2437 {
2438 uint32 speed = 0;
2439 if (SpellShapeshiftEntry const* ss = sSpellShapeshiftStore.LookupEntry(caster->GetShapeshiftForm()))
2440 speed = ss->attackSpeed;
2441 else
2442 {
2445 slot = OFF_ATTACK;
2446
2447 speed = caster->GetAttackTime(slot);
2448 }
2449
2450 powerCost += speed / 100;
2451 }
2452
2453 // Apply cost mod by spell
2454 if (Player* modOwner = caster->GetSpellModOwner())
2455 modOwner->ApplySpellMod(Id, SPELLMOD_COST, powerCost, spell);
2456
2457 if (!caster->IsControlledByPlayer())
2458 {
2460 {
2461 GtNPCManaCostScalerEntry const* spellScaler = sGtNPCManaCostScalerStore.LookupEntry(SpellLevel - 1);
2462 GtNPCManaCostScalerEntry const* casterScaler = sGtNPCManaCostScalerStore.LookupEntry(caster->GetLevel() - 1);
2463 if (spellScaler && casterScaler)
2464 powerCost *= casterScaler->ratio / spellScaler->ratio;
2465 }
2466 }
2467
2468 // PCT mod from user auras by school
2469 powerCost = int32(powerCost * (1.0f + caster->GetFloatValue(static_cast<uint16>(UNIT_FIELD_POWER_COST_MULTIPLIER) + school)));
2470 if (powerCost < 0)
2471 powerCost = 0;
2472 return powerCost;
2473}
std::uint16_t uint16
Definition: Define.h:109
#define LOG_ERROR(filterType__,...)
Definition: Log.h:157
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:169
T CalculatePct(T base, U pct)
Definition: Util.h:61
DBCStorage< SpellShapeshiftEntry > sSpellShapeshiftStore(SpellShapeshiftfmt)
DBCStorage< GtNPCManaCostScalerEntry > sGtNPCManaCostScalerStore(GtNPCManaCostScalerfmt)
@ UNIT_FIELD_POWER_COST_MODIFIER
Definition: UpdateFields.h:170
@ UNIT_FIELD_POWER_COST_MULTIPLIER
Definition: UpdateFields.h:171
WeaponAttackType
Definition: Unit.h:395
@ OFF_ATTACK
Definition: Unit.h:397
@ BASE_ATTACK
Definition: Unit.h:396
Powers
Definition: SharedDefines.h:268
@ MAX_POWERS
Definition: SharedDefines.h:276
@ POWER_RAGE
Definition: SharedDefines.h:270
@ POWER_HEALTH
Definition: SharedDefines.h:278
@ POWER_RUNIC_POWER
Definition: SharedDefines.h:275
@ POWER_HAPPINESS
Definition: SharedDefines.h:273
@ POWER_ENERGY
Definition: SharedDefines.h:272
@ POWER_MANA
Definition: SharedDefines.h:269
@ POWER_RUNE
Definition: SharedDefines.h:274
@ POWER_FOCUS
Definition: SharedDefines.h:271
SpellSchools
Definition: SharedDefines.h:282
@ SPELL_ATTR1_USE_ALL_MANA
Definition: SharedDefines.h:420
SpellSchools GetFirstSchoolInMask(SpellSchoolMask mask)
Definition: SharedDefines.h:318
@ SPELL_ATTR3_REQUIRES_OFF_HAND_WEAPON
Definition: SharedDefines.h:517
@ SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL
Definition: SharedDefines.h:401
@ SPELL_ATTR4_WEAPON_SPEED_COST_SCALING
Definition: SharedDefines.h:540
Definition: Player.h:1056
Player * GetSpellModOwner() const
Definition: Unit.cpp:16845
Definition: DBCStructure.h:1058
float ratio
Definition: DBCStructure.h:1059
Definition: DBCStructure.h:1817

References AttributesEx, AttributesEx3, AttributesEx4, BASE_ATTACK, CalculatePct(), Unit::GetAttackTime(), Unit::GetCreateHealth(), Unit::GetCreateMana(), GetFirstSchoolInMask(), Object::GetFloatValue(), Unit::GetHealth(), Object::GetInt32Value(), Unit::GetLevel(), Unit::GetMaxPower(), Unit::GetPower(), Unit::GetShapeshiftForm(), Unit::GetSpellModOwner(), HasAttribute(), Id, Unit::IsControlledByPlayer(), LOG_DEBUG, LOG_ERROR, ManaCost, ManaCostPercentage, MAX_POWERS, OFF_ATTACK, POWER_ENERGY, POWER_FOCUS, POWER_HAPPINESS, POWER_HEALTH, POWER_MANA, POWER_RAGE, POWER_RUNE, POWER_RUNIC_POWER, GtNPCManaCostScalerEntry::ratio, sGtNPCManaCostScalerStore, SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL, SPELL_ATTR1_USE_ALL_MANA, SPELL_ATTR3_REQUIRES_OFF_HAND_WEAPON, SPELL_ATTR4_WEAPON_SPEED_COST_SCALING, SpellLevel, SPELLMOD_COST, sSpellShapeshiftStore, UNIT_FIELD_POWER_COST_MODIFIER, and UNIT_FIELD_POWER_COST_MULTIPLIER.

Referenced by PetAI::_canMeleeAttack(), Spell::CheckPetCast(), Spell::EffectCastButtons(), Unit::HandleDummyAuraProc(), spell_warr_execute::HandleEffect(), spell_hun_glyph_of_arcane_shot::HandleProc(), spell_mage_burnout::HandleProc(), spell_mage_master_of_elements::HandleProc(), spell_sha_item_mana_surge::HandleProc(), and Spell::prepare().

◆ CanBeUsedInCombat()

bool SpellInfo::CanBeUsedInCombat ( ) const
1220{
1222}
@ SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL
Definition: SharedDefines.h:410

References HasAttribute(), and SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL.

Referenced by Spell::CheckCast(), and PetAI::UpdateAI().

◆ CanDispelAura()

bool SpellInfo::CanDispelAura ( SpellInfo const *  aura) const
1338{
1339 // Xinef: Passive auras cannot be dispelled
1340 if (aura->IsPassive())
1341 return false;
1342
1343 // These auras (like Divine Shield) can't be dispelled
1344 if (aura->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
1345 return false;
1346
1347 // These spells (like Mass Dispel) can dispell all auras
1349 return true;
1350
1351 // These auras (Cyclone for example) are not dispelable
1352 if ((aura->HasAttribute(SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS) && aura->Mechanic != MECHANIC_NONE)
1353 || aura->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
1354 {
1355 return false;
1356 }
1357
1358 return true;
1359}
@ SPELL_ATTR2_NO_SCHOOL_IMMUNITIES
Definition: SharedDefines.h:482
@ SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS
Definition: SharedDefines.h:435
@ MECHANIC_NONE
Definition: SharedDefines.h:1325
@ SPELL_ATTR0_NO_IMMUNITIES
Definition: SharedDefines.h:411

References HasAttribute(), IsPassive(), Mechanic, MECHANIC_NONE, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS, and SPELL_ATTR2_NO_SCHOOL_IMMUNITIES.

◆ CanPierceImmuneAura()

bool SpellInfo::CanPierceImmuneAura ( SpellInfo const *  aura) const
1311{
1312 // aura can't be pierced
1313 if (!aura || aura->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
1314 {
1315 return false;
1316 }
1317
1318 // these spells pierce all avalible spells (Resurrection Sickness for example)
1320 return true;
1321
1322 // these spells (Cyclone for example) can pierce all...
1324 {
1325 if (aura->Mechanic != MECHANIC_IMMUNE_SHIELD &&
1326 aura->Mechanic != MECHANIC_INVULNERABILITY &&
1327 aura->Mechanic != MECHANIC_BANISH)
1328 {
1329 return true;
1330 }
1331
1332 }
1333
1334 return false;
1335}
@ MECHANIC_BANISH
Definition: SharedDefines.h:1343

References HasAttribute(), Mechanic, MECHANIC_BANISH, MECHANIC_IMMUNE_SHIELD, MECHANIC_INVULNERABILITY, SPELL_ATTR0_NO_IMMUNITIES, SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS, and SPELL_ATTR2_NO_SCHOOL_IMMUNITIES.

Referenced by Unit::IsImmunedToSchool(), and Unit::IsImmunedToSpell().

◆ CheckElixirStacking()

bool SpellInfo::CheckElixirStacking ( Unit const *  caster) const
2877{
2878 if (!caster)
2879 {
2880 return true;
2881 }
2882
2883 // xinef: check spell group
2884 uint32 groupId = sSpellMgr->GetSpellGroup(Id);
2886 {
2887 return true;
2888 }
2889
2890 SpellGroupSpecialFlags sFlag = sSpellMgr->GetSpellGroupSpecialFlags(Id);
2891 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
2892 {
2893 if (!Effects[i].IsAura())
2894 {
2895 continue;
2896 }
2897
2898 Unit::AuraApplicationMap const& Auras = caster->GetAppliedAuras();
2899 for (Unit::AuraApplicationMap::const_iterator itr = Auras.begin(); itr != Auras.end(); ++itr)
2900 {
2901 // xinef: aura is not groupped or in different group
2902 uint32 auraGroup = sSpellMgr->GetSpellGroup(itr->first);
2903 if (auraGroup != groupId)
2904 {
2905 continue;
2906 }
2907
2908 // Cannot apply guardian/battle elixir if flask is present
2910 {
2911 SpellGroupSpecialFlags sAuraFlag = sSpellMgr->GetSpellGroupSpecialFlags(itr->first);
2913 {
2914 return false;
2915 }
2916 }
2917 }
2918 }
2919
2920 return true;
2921}
@ SPELL_GROUP_GUARDIAN_AND_BATTLE_ELIXIRS
Definition: SpellMgr.h:372
SpellGroupSpecialFlags
Definition: SpellMgr.h:334
@ 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
std::multimap< uint32, AuraApplication * > AuraApplicationMap
Definition: Unit.h:1311

References EFFECT_0, Effects, Unit::GetAppliedAuras(), Id, MAX_SPELL_EFFECTS, SPELL_GROUP_GUARDIAN_AND_BATTLE_ELIXIRS, SPELL_GROUP_SPECIAL_FLAG_ELIXIR_BATTLE, SPELL_GROUP_SPECIAL_FLAG_ELIXIR_GUARDIAN, SPELL_GROUP_SPECIAL_FLAG_FLASK, and sSpellMgr.

Referenced by Player::CastItemUseSpell().

◆ CheckExplicitTarget()

SpellCastResult SpellInfo::CheckExplicitTarget ( Unit const *  caster,
WorldObject const *  target,
Item const *  itemTarget = nullptr 
) const
1925{
1926 uint32 neededTargets = GetExplicitTargetMask();
1927 if (!target)
1928 {
1930 if (!(neededTargets & TARGET_FLAG_GAMEOBJECT_ITEM) || !itemTarget)
1932 return SPELL_CAST_OK;
1933 }
1934
1935 if (Unit const* unitTarget = target->ToUnit())
1936 {
1938 {
1939 if (neededTargets & TARGET_FLAG_UNIT_ENEMY)
1940 if (caster->_IsValidAttackTarget(unitTarget, this))
1941 return SPELL_CAST_OK;
1942 if (neededTargets & TARGET_FLAG_UNIT_ALLY
1943 || (neededTargets & TARGET_FLAG_UNIT_PARTY && caster->IsInPartyWith(unitTarget))
1944 || (neededTargets & TARGET_FLAG_UNIT_RAID && caster->IsInRaidWith(unitTarget)))
1945 if (caster->_IsValidAssistTarget(unitTarget, this))
1946 return SPELL_CAST_OK;
1947 if (neededTargets & TARGET_FLAG_UNIT_MINIPET)
1948 if (unitTarget->GetGUID() == caster->GetCritterGUID())
1949 return SPELL_CAST_OK;
1950 if (neededTargets & TARGET_FLAG_UNIT_PASSENGER)
1951 if (unitTarget->IsOnVehicle(caster))
1952 return SPELL_CAST_OK;
1954 }
1955 }
1956 return SPELL_CAST_OK;
1957}
@ TARGET_FLAG_UNIT_RAID
Definition: SpellInfo.h:48
@ TARGET_FLAG_UNIT_ENEMY
Definition: SpellInfo.h:53
@ TARGET_FLAG_UNIT_MINIPET
Definition: SpellInfo.h:62
@ TARGET_FLAG_UNIT_PASSENGER
Definition: SpellInfo.h:66
@ TARGET_FLAG_GAMEOBJECT_ITEM
Definition: SpellInfo.h:60
@ TARGET_FLAG_UNIT_ALLY
Definition: SpellInfo.h:54
@ TARGET_FLAG_GAMEOBJECT_MASK
Definition: SpellInfo.h:70
@ TARGET_FLAG_UNIT_PARTY
Definition: SpellInfo.h:49
@ SPELL_FAILED_BAD_TARGETS
Definition: SharedDefines.h:961
@ SPELL_CAST_OK
Definition: SharedDefines.h:1138
Unit * ToUnit()
Definition: Object.h:200
Definition: Unit.h:1302
uint32 GetExplicitTargetMask() const
Definition: SpellInfo.cpp:2042

References Unit::_IsValidAssistTarget(), Unit::_IsValidAttackTarget(), Unit::GetCritterGUID(), GetExplicitTargetMask(), Unit::IsInPartyWith(), Unit::IsInRaidWith(), SPELL_CAST_OK, SPELL_FAILED_BAD_TARGETS, TARGET_FLAG_CORPSE_MASK, TARGET_FLAG_GAMEOBJECT_ITEM, TARGET_FLAG_GAMEOBJECT_MASK, TARGET_FLAG_UNIT_ALLY, TARGET_FLAG_UNIT_ENEMY, TARGET_FLAG_UNIT_MASK, TARGET_FLAG_UNIT_MINIPET, TARGET_FLAG_UNIT_PARTY, TARGET_FLAG_UNIT_PASSENGER, TARGET_FLAG_UNIT_RAID, and Object::ToUnit().

Referenced by Spell::CheckCast(), Unit::GetMagicHitRedirectTarget(), Unit::GetMeleeHitRedirectTarget(), and Spell::InitExplicitTargets().

◆ CheckLocation()

SpellCastResult SpellInfo::CheckLocation ( uint32  map_id,
uint32  zone_id,
uint32  area_id,
Player player = nullptr,
bool  strict = true 
) const
1477{
1478 // normal case
1479 if (AreaGroupId > 0)
1480 {
1481 bool found = false;
1482 AreaGroupEntry const* groupEntry = sAreaGroupStore.LookupEntry(AreaGroupId);
1483 while (groupEntry)
1484 {
1485 for (uint8 i = 0; i < MAX_GROUP_AREA_IDS; ++i)
1486 if (groupEntry->AreaId[i] == zone_id || groupEntry->AreaId[i] == area_id)
1487 found = true;
1488 if (found || !groupEntry->nextGroup)
1489 break;
1490 // Try search in next group
1491 groupEntry = sAreaGroupStore.LookupEntry(groupEntry->nextGroup);
1492 }
1493
1494 if (!found)
1496 }
1497
1498 // continent limitation (virtual continent)
1499 if (HasAttribute(SPELL_ATTR4_ONLY_FLYING_AREAS) && (area_id || zone_id))
1500 {
1501 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(area_id);
1502 if (!areaEntry)
1503 {
1504 areaEntry = sAreaTableStore.LookupEntry(zone_id);
1505 }
1506
1507 if (!areaEntry || !areaEntry->IsFlyable() || (strict && (areaEntry->flags & AREA_FLAG_NO_FLY_ZONE) != 0) || !player->canFlyInZone(map_id, zone_id, this))
1508 {
1510 }
1511 }
1512
1513 // raid instance limitation
1515 {
1516 MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
1517 if (!mapEntry || mapEntry->IsRaid())
1519 }
1520
1521 // DB base check (if non empty then must fit at least single for allow)
1522 SpellAreaMapBounds saBounds = sSpellMgr->GetSpellAreaMapBounds(Id);
1523 if (saBounds.first != saBounds.second)
1524 {
1525 for (SpellAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr)
1526 {
1527 if (itr->second.IsFitToRequirements(player, zone_id, area_id))
1528 return SPELL_CAST_OK;
1529 }
1531 }
1532
1533 // bg spell checks
1534 switch (Id)
1535 {
1536 case 23333: // Warsong Flag
1537 case 23335: // Silverwing Flag
1538 return map_id == 489 && player && player->InBattleground() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1539 case 34976: // Netherstorm Flag
1540 return map_id == 566 && player && player->InBattleground() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1541 case 2584: // Waiting to Resurrect
1542 case 22011: // Spirit Heal Channel
1543 case 22012: // Spirit Heal
1544 case 42792: // Recently Dropped Flag
1545 case 43681: // Inactive
1546 case 44535: // Spirit Heal (mana)
1547 {
1548 MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
1549 if (!mapEntry)
1551
1552 return zone_id == 4197 || (mapEntry->IsBattleground() && player && player->InBattleground()) ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1553 }
1554 case 32724: // Gold Team (Alliance)
1555 case 32725: // Green Team (Alliance)
1556 case 35774: // Gold Team (Horde)
1557 case 35775: // Green Team (Horde)
1558 {
1559 MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
1560 if (!mapEntry)
1562
1563 return mapEntry->IsBattleArena() && player && player->InBattleground() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1564 }
1565 }
1566
1567 return SPELL_CAST_OK;
1568}
DBCStorage< AreaGroupEntry > sAreaGroupStore(AreaGroupEntryfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
Definition: SpellMgr.h:547
@ AREA_FLAG_NO_FLY_ZONE
Definition: DBCEnums.h:270
#define MAX_GROUP_AREA_IDS
Definition: DBCStructure.h:546
@ SPELL_FAILED_INCORRECT_AREA
Definition: SharedDefines.h:988
@ SPELL_FAILED_NOT_IN_RAID_INSTANCE
Definition: SharedDefines.h:1116
@ SPELL_FAILED_REQUIRES_AREA
Definition: SharedDefines.h:1050
@ SPELL_ATTR4_ONLY_FLYING_AREAS
Definition: SharedDefines.h:556
@ SPELL_ATTR6_NOT_IN_RAID_INSTANCES
Definition: SharedDefines.h:615
bool InBattleground() const
Definition: Player.h:2214
bool canFlyInZone(uint32 mapid, uint32 zone, SpellInfo const *bySpell)
Definition: Player.cpp:13559
Definition: DBCStructure.h:519
bool IsFlyable() const
Definition: DBCStructure.h:540
uint32 flags
Definition: DBCStructure.h:524
Definition: DBCStructure.h:549
uint32 nextGroup
Definition: DBCStructure.h:552
uint32 AreaId[MAX_GROUP_AREA_IDS]
Definition: DBCStructure.h:551
Definition: DBCStructure.h:1323
bool IsBattleground() const
Definition: DBCStructure.h:1353
bool IsRaid() const
Definition: DBCStructure.h:1352
bool IsBattleArena() const
Definition: DBCStructure.h:1354
Definition: System.cpp:62

References AREA_FLAG_NO_FLY_ZONE, AreaGroupId, AreaGroupEntry::AreaId, Player::canFlyInZone(), AreaTableEntry::flags, HasAttribute(), Id, Player::InBattleground(), MapEntry::IsBattleArena(), MapEntry::IsBattleground(), AreaTableEntry::IsFlyable(), MapEntry::IsRaid(), MAX_GROUP_AREA_IDS, AreaGroupEntry::nextGroup, sAreaGroupStore, sAreaTableStore, sMapStore, SPELL_ATTR4_ONLY_FLYING_AREAS, SPELL_ATTR6_NOT_IN_RAID_INSTANCES, SPELL_CAST_OK, SPELL_FAILED_INCORRECT_AREA, SPELL_FAILED_NOT_IN_RAID_INSTANCE, SPELL_FAILED_REQUIRES_AREA, and sSpellMgr.

Referenced by Spell::CheckCast().

◆ CheckShapeshift()

SpellCastResult SpellInfo::CheckShapeshift ( uint32  form) const
Todo:
: Find a way to disable use of these spells clientside
1422{
1423 // talents that learn spells can have stance requirements that need ignore
1424 // (this requirement only for client-side stance show in talent description)
1425 if (GetTalentSpellCost(Id) > 0 &&
1427 return SPELL_CAST_OK;
1428
1429 uint32 stanceMask = (form ? 1 << (form - 1) : 0);
1430
1431 if (stanceMask & StancesNot) // can explicitly not be casted in this stance
1433
1434 if (stanceMask & Stances) // can explicitly be casted in this stance
1435 return SPELL_CAST_OK;
1436
1437 bool actAsShifted = false;
1438 SpellShapeshiftEntry const* shapeInfo = nullptr;
1439 if (form > 0)
1440 {
1441 shapeInfo = sSpellShapeshiftStore.LookupEntry(form);
1442 if (!shapeInfo)
1443 {
1444 LOG_ERROR("spells", "GetErrorAtShapeshiftedCast: unknown shapeshift {}", form);
1445 return SPELL_CAST_OK;
1446 }
1447 actAsShifted = !(shapeInfo->flags1 & 1); // shapeshift acts as normal form for spells
1448 }
1449
1450 if (actAsShifted)
1451 {
1452 if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFTED)) // not while shapeshifted
1454 else if (Stances != 0) // needs other shapeshift
1456 }
1457 else
1458 {
1459 // needs shapeshift
1462 }
1463
1464 // Check if stance disables cast of not-stance spells
1465 // Example: cannot cast any other spells in zombie or ghoul form
1467 if (shapeInfo && shapeInfo->flags1 & 0x400)
1468 {
1469 if (!(stanceMask & Stances))
1471 }
1472
1473 return SPELL_CAST_OK;
1474}
uint32 GetTalentSpellCost(uint32 spellId)
Definition: DBCStores.cpp:682
@ SPELL_ATTR2_ALLOW_WHILE_NOT_SHAPESHIFTED
Definition: SharedDefines.h:475
@ SPELL_ATTR0_NOT_SHAPESHIFTED
Definition: SharedDefines.h:398
@ SPELL_FAILED_ONLY_SHAPESHIFT
Definition: SharedDefines.h:1043
@ SPELL_FAILED_NOT_SHAPESHIFT
Definition: SharedDefines.h:1017
uint32 flags1
Definition: DBCStructure.h:1822

References AttributesEx2, Effects, SpellShapeshiftEntry::flags1, GetTalentSpellCost(), HasAttribute(), Id, LOG_ERROR, SPELL_ATTR0_NOT_SHAPESHIFTED, SPELL_ATTR2_ALLOW_WHILE_NOT_SHAPESHIFTED, SPELL_CAST_OK, SPELL_EFFECT_LEARN_SPELL, SPELL_FAILED_NOT_SHAPESHIFT, SPELL_FAILED_ONLY_SHAPESHIFT, sSpellShapeshiftStore, Stances, and StancesNot.

Referenced by Player::ApplyEquipSpell(), and Spell::CheckCast().

◆ CheckTarget()

SpellCastResult SpellInfo::CheckTarget ( Unit const *  caster,
WorldObject const *  target,
bool  implicit = true 
) const
1747{
1748 if (AttributesEx & SPELL_ATTR1_EXCLUDE_CASTER && caster == target)
1750
1751 // check visibility - ignore stealth for implicit (area) targets
1752 if (!(AttributesEx6 & SPELL_ATTR6_IGNORE_PHASE_SHIFT) && !caster->CanSeeOrDetect(target, implicit))
1754
1755 Unit const* unitTarget = target->ToUnit();
1756
1757 // creature/player specific target checks
1758 if (unitTarget)
1759 {
1760 // xinef: spells cannot be cast if player is in fake combat also
1761 if (AttributesEx & SPELL_ATTR1_ONLY_PEACEFUL_TARGETS && (unitTarget->IsInCombat() || unitTarget->IsPetInCombat()))
1763
1764 // only spells with SPELL_ATTR3_ONLY_ON_GHOSTS can target ghosts
1766 {
1769 else
1771 }
1772
1773 if (caster != unitTarget)
1774 {
1775 if (caster->GetTypeId() == TYPEID_PLAYER)
1776 {
1777 // Do not allow these spells to target creatures not tapped by us (Banish, Polymorph, many quest spells)
1779 if (Creature const* targetCreature = unitTarget->ToCreature())
1780 if (targetCreature->hasLootRecipient() && !targetCreature->isTappedBy(caster->ToPlayer()))
1782
1784 {
1785 Creature const* targetCreature = unitTarget->ToCreature();
1786 if (!targetCreature)
1788
1791 }
1792
1793 // Not allow disarm unarmed player
1795 {
1796 bool valid = false;
1797 for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i)
1798 {
1799 AuraType disarmAuraType = SPELL_AURA_MOD_DISARM;
1800 switch (i)
1801 {
1802 case OFF_ATTACK:
1803 disarmAuraType = SPELL_AURA_MOD_DISARM_OFFHAND;
1804 break;
1805 case RANGED_ATTACK:
1806 disarmAuraType = SPELL_AURA_MOD_DISARM_RANGED;
1807 break;
1808 }
1809
1810 if (HasAura(disarmAuraType))
1811 {
1812 if (Player const* player = unitTarget->ToPlayer())
1813 {
1814 if (player->GetWeaponForAttack(WeaponAttackType(BASE_ATTACK + i), true))
1815 {
1816 valid = true;
1817 break;
1818 }
1819 }
1820 else if (unitTarget->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + i))
1821 {
1822 valid = true;
1823 break;
1824 }
1825 }
1826 }
1827
1828 if (!valid)
1829 {
1831 }
1832 }
1833 }
1834 }
1835 }
1836 // corpse specific target checks
1837 else if (Corpse const* corpseTarget = target->ToCorpse())
1838 {
1839 // cannot target bare bones
1840 if (corpseTarget->GetType() == CORPSE_BONES)
1842 // we have to use owner for some checks (aura preventing resurrection for example)
1843 if (Player* owner = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()))
1844 unitTarget = owner;
1845 // we're not interested in corpses without owner
1846 else
1848 }
1849 // other types of objects - always valid
1850 else return SPELL_CAST_OK;
1851
1852 // corpseOwner and unit specific target checks
1853 if (AttributesEx3 & SPELL_ATTR3_ONLY_ON_PLAYER && !unitTarget->ToPlayer())
1855
1856 if (!IsAllowingDeadTarget() && !unitTarget->IsAlive())
1858
1859 // check this flag only for implicit targets (chain and area), allow to explicitly target units for spells like Shield of Righteousness
1862
1863 // checked in Unit::IsValidAttack/AssistTarget, shouldn't be checked for ENTRY targets
1864 //if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
1865 // return SPELL_FAILED_BAD_TARGETS;
1866
1867 //if (!(AttributesEx6 & SPELL_ATTR6_NO_AURA_LOG)
1868
1869 if (!CheckTargetCreatureType(unitTarget))
1870 {
1871 if (target->GetTypeId() == TYPEID_PLAYER)
1873 else
1875 }
1876
1877 // check GM mode and GM invisibility - only for player casts (npc casts are controlled by AI) and negative spells
1878 if (unitTarget != caster && (caster->IsControlledByPlayer() || !IsPositive()) && unitTarget->GetTypeId() == TYPEID_PLAYER)
1879 {
1880 if (!unitTarget->ToPlayer()->IsVisible())
1882
1883 if (unitTarget->ToPlayer()->IsGameMaster())
1885 }
1886
1887 // not allow casting on flying player
1890
1891 /* TARGET_UNIT_MASTER gets blocked here for passengers, because the whole idea of this check is to
1892 not allow passengers to be implicitly hit by spells, however this target type should be an exception,
1893 if this is left it kills spells that award kill credit from vehicle to master (few spells),
1894 the use of these 2 covers passenger target check, logically, if vehicle cast this to master it should always hit
1895 him, because it would be it's passenger, there's no such case where this gets to fail legitimacy, this problem
1896 cannot be solved from within the check in other way since target type cannot be called for the spell currently
1897 Spell examples: [ID - 52864 Devour Water, ID - 52862 Devour Wind, ID - 49370 Wyrmrest Defender: Destabilize Azure Dragonshrine Effect] */
1898 if (!caster->IsVehicle() && caster->GetCharmerOrOwner() != target)
1899 {
1900 if (TargetAuraState && !unitTarget->HasAuraState(AuraStateType(TargetAuraState), this, caster))
1902
1903 if (TargetAuraStateNot && unitTarget->HasAuraState(AuraStateType(TargetAuraStateNot), this, caster))
1905 }
1906
1907 if (TargetAuraSpell && !unitTarget->HasAura(sSpellMgr->GetSpellIdForDifficulty(TargetAuraSpell, caster)))
1909
1910 if (ExcludeTargetAuraSpell && unitTarget->HasAura(sSpellMgr->GetSpellIdForDifficulty(ExcludeTargetAuraSpell, caster)))
1912
1916
1917 // xinef: check if stronger aura is active
1918 if (IsStrongerAuraActive(caster, unitTarget))
1920
1921 return SPELL_CAST_OK;
1922}
@ CORPSE_BONES
Definition: Corpse.h:28
@ TYPEID_PLAYER
Definition: ObjectGuid.h:38
@ UNIT_VIRTUAL_ITEM_SLOT_ID
Definition: UpdateFields.h:116
@ MAX_ATTACK
Definition: Unit.h:399
@ RANGED_ATTACK
Definition: Unit.h:398
LootStore LootTemplates_Pickpocketing("pickpocketing_loot_template", "creature pickpocket lootid", true)
AuraType
Definition: SpellAuraDefines.h:62
@ SPELL_AURA_MOD_DISARM_RANGED
Definition: SpellAuraDefines.h:341
@ SPELL_AURA_MOD_DISARM
Definition: SpellAuraDefines.h:130
@ SPELL_AURA_MOD_DISARM_OFFHAND
Definition: SpellAuraDefines.h:317
@ SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET
Definition: SpellInfo.h:194
@ SPELL_ATTR0_CU_PICKPOCKET
Definition: SpellInfo.h:186
@ SPELL_ATTR7_BYPASS_NO_RESURRECTION_AURA
Definition: SharedDefines.h:668
@ SPELL_EFFECT_SELF_RESURRECT
Definition: SharedDefines.h:872
@ SPELL_EFFECT_RESURRECT
Definition: SharedDefines.h:796
@ SPELL_EFFECT_RESURRECT_NEW
Definition: SharedDefines.h:891
@ SPELL_ATTR2_CANNOT_CAST_ON_TAPPED
Definition: SharedDefines.h:462
@ SPELL_ATTR1_EXCLUDE_CASTER
Definition: SharedDefines.h:438
@ SPELL_ATTR1_ONLY_PEACEFUL_TARGETS
Definition: SharedDefines.h:427
@ SPELL_ATTR3_ONLY_ON_GHOSTS
Definition: SharedDefines.h:505
@ SPELL_ATTR3_ONLY_ON_PLAYER
Definition: SharedDefines.h:501
@ MECHANIC_DISARM
Definition: SharedDefines.h:1328
AuraStateType
Definition: SharedDefines.h:1288
@ SPELL_FAILED_TARGET_NOT_PLAYER
Definition: SharedDefines.h:1071
@ SPELL_FAILED_TARGET_NO_POCKETS
Definition: SharedDefines.h:1072
@ SPELL_FAILED_TARGET_IS_PLAYER
Definition: SharedDefines.h:1066
@ SPELL_FAILED_CANT_CAST_ON_TAPPED
Definition: SharedDefines.h:967
@ SPELL_FAILED_TARGET_AURASTATE
Definition: SharedDefines.h:1060
@ SPELL_FAILED_BM_OR_INVISGOD
Definition: SharedDefines.h:1108
@ SPELL_FAILED_TARGETS_DEAD
Definition: SharedDefines.h:1058
@ SPELL_FAILED_AURA_BOUNCED
Definition: SharedDefines.h:958
@ SPELL_FAILED_TARGET_NOT_GHOST
Definition: SharedDefines.h:1092
@ SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED
Definition: SharedDefines.h:1135
@ SPELL_FAILED_TARGET_NO_WEAPONS
Definition: SharedDefines.h:1073
@ SPELL_FAILED_TARGET_AFFECTING_COMBAT
Definition: SharedDefines.h:1059
@ SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS
Definition: SharedDefines.h:612
@ SPELL_ATTR6_IGNORE_PHASE_SHIFT
Definition: SharedDefines.h:617
Player * FindPlayer(ObjectGuid const guid)
Definition: ObjectAccessor.cpp:248
Definition: Corpse.h:49
Definition: Creature.h:46
CreatureTemplate const * GetCreatureTemplate() const
Definition: Creature.h:199
uint32 pickpocketLootId
Definition: CreatureData.h:218
Corpse * ToCorpse()
Definition: Object.h:205
uint32 GetUInt32Value(uint16 index) const
Definition: Object.cpp:305
Player * ToPlayer()
Definition: Object.h:195
TypeID GetTypeId() const
Definition: Object.h:121
Creature * ToCreature()
Definition: Object.h:197
bool IsGameMaster() const
Definition: Player.h:1148
bool CanFreeMove() const
Definition: Unit.h:1413
bool IsAlive() const
Definition: Unit.h:1822
bool IsPetInCombat() const
Definition: Unit.h:1705
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5636
bool IsInFlight() const
Definition: Unit.h:1690
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
Definition: Unit.cpp:10546
bool IsVisible() const
Definition: Unit.h:2141
bool HasAuraType(AuraType auraType) const
Definition: Unit.cpp:5643
bool IsInCombat() const
Definition: Unit.h:1702
bool HaveLootFor(uint32 loot_id) const
Definition: LootMgr.h:224
bool IsStrongerAuraActive(Unit const *caster, Unit const *target) const
Definition: SpellInfo.cpp:1570
bool IsRequiringDeadTarget() const
Definition: SpellInfo.cpp:1209
bool IsDeathPersistent() const
Definition: SpellInfo.cpp:1204
bool CheckTargetCreatureType(Unit const *target) const
Definition: SpellInfo.cpp:1959
bool IsAllowingDeadTarget() const
Definition: SpellInfo.cpp:1214
bool HasEffect(SpellEffects effect) const
Definition: SpellInfo.cpp:872
bool IsPositive() const
Definition: SpellInfo.cpp:1224
bool HasAura(AuraType aura) const
Definition: SpellInfo.cpp:880

References AttributesEx, AttributesEx2, AttributesEx3, AttributesEx6, BASE_ATTACK, Unit::CanFreeMove(), WorldObject::CanSeeOrDetect(), CheckTargetCreatureType(), CORPSE_BONES, ExcludeTargetAuraSpell, ObjectAccessor::FindPlayer(), Unit::GetCharmerOrOwner(), Creature::GetCreatureTemplate(), Object::GetTypeId(), Object::GetUInt32Value(), HasAttribute(), HasAura(), Unit::HasAura(), Unit::HasAuraState(), Unit::HasAuraType(), HasEffect(), LootStore::HaveLootFor(), Unit::IsAlive(), IsAllowingDeadTarget(), Unit::IsControlledByPlayer(), IsDeathPersistent(), Player::IsGameMaster(), Unit::IsInCombat(), Unit::IsInFlight(), Unit::IsPetInCombat(), IsPositive(), IsRequiringDeadTarget(), IsStrongerAuraActive(), Unit::IsVehicle(), Unit::IsVisible(), LootTemplates_Pickpocketing, MAX_ATTACK, Mechanic, MECHANIC_DISARM, OFF_ATTACK, CreatureTemplate::pickpocketLootId, RANGED_ATTACK, SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET, SPELL_ATTR0_CU_PICKPOCKET, SPELL_ATTR1_EXCLUDE_CASTER, SPELL_ATTR1_ONLY_PEACEFUL_TARGETS, SPELL_ATTR2_CANNOT_CAST_ON_TAPPED, SPELL_ATTR3_ONLY_ON_GHOSTS, SPELL_ATTR3_ONLY_ON_PLAYER, SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS, SPELL_ATTR6_IGNORE_PHASE_SHIFT, SPELL_ATTR7_BYPASS_NO_RESURRECTION_AURA, SPELL_AURA_GHOST, SPELL_AURA_MOD_DISARM, SPELL_AURA_MOD_DISARM_OFFHAND, SPELL_AURA_MOD_DISARM_RANGED, SPELL_AURA_PREVENT_RESURRECTION, SPELL_CAST_OK, SPELL_EFFECT_RESURRECT, SPELL_EFFECT_RESURRECT_NEW, SPELL_EFFECT_SELF_RESURRECT, SPELL_FAILED_AURA_BOUNCED, SPELL_FAILED_BAD_TARGETS, SPELL_FAILED_BM_OR_INVISGOD, SPELL_FAILED_CANT_CAST_ON_TAPPED, SPELL_FAILED_TARGET_AFFECTING_COMBAT, SPELL_FAILED_TARGET_AURASTATE, SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED, SPELL_FAILED_TARGET_IS_PLAYER, SPELL_FAILED_TARGET_NO_POCKETS, SPELL_FAILED_TARGET_NO_WEAPONS, SPELL_FAILED_TARGET_NOT_GHOST, SPELL_FAILED_TARGET_NOT_PLAYER, SPELL_FAILED_TARGETS_DEAD, sSpellMgr, TargetAuraSpell, TargetAuraState, TargetAuraStateNot, Object::ToCorpse(), Object::ToCreature(), Object::ToPlayer(), Object::ToUnit(), TYPEID_PLAYER, and UNIT_VIRTUAL_ITEM_SLOT_ID.

Referenced by Spell::AddUnitTarget(), Spell::CheckCast(), Unit::GetMeleeHitRedirectTarget(), SpellTargetSelector::operator()(), and Acore::WorldObjectSpellTargetCheck::operator()().

◆ CheckTargetCreatureType()

bool SpellInfo::CheckTargetCreatureType ( Unit const *  target) const
1960{
1961 // Curse of Doom & Exorcism: not find another way to fix spell target check :/
1963 {
1964 // not allow cast at player
1965 if (target->GetTypeId() == TYPEID_PLAYER)
1966 return false;
1967 else
1968 return true;
1969 }
1970 uint32 creatureType = target->GetCreatureTypeMask();
1971 return !TargetCreatureType || !creatureType || (creatureType & TargetCreatureType);
1972}
@ SPELLFAMILY_WARLOCK
Definition: SharedDefines.h:3533
uint32 GetCategory() const
Definition: SpellInfo.cpp:867

References GetCategory(), Unit::GetCreatureTypeMask(), Object::GetTypeId(), SPELLFAMILY_WARLOCK, SpellFamilyName, TargetCreatureType, and TYPEID_PLAYER.

Referenced by CheckTarget().

◆ ComputeIsCritCapable()

bool SpellInfo::ComputeIsCritCapable ( ) const
1143{
1144 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1145 {
1146 switch (Effects[i].Effect)
1147 {
1150 case SPELL_EFFECT_HEAL:
1158 return true;
1159 }
1160 }
1161 return false;
1162}
@ SPELL_EFFECT_POWER_BURN
Definition: SharedDefines.h:840
@ SPELL_EFFECT_HEALTH_LEECH
Definition: SharedDefines.h:787
@ SPELL_EFFECT_WEAPON_DAMAGE
Definition: SharedDefines.h:836
@ SPELL_EFFECT_NORMALIZED_WEAPON_DMG
Definition: SharedDefines.h:899
@ SPELL_EFFECT_HEAL_MECHANICAL
Definition: SharedDefines.h:853
@ SPELL_EFFECT_WEAPON_PERCENT_DAMAGE
Definition: SharedDefines.h:809
@ SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL
Definition: SharedDefines.h:795

References Effects, MAX_SPELL_EFFECTS, SPELL_EFFECT_HEAL, SPELL_EFFECT_HEAL_MECHANICAL, SPELL_EFFECT_HEAL_PCT, SPELL_EFFECT_HEALTH_LEECH, SPELL_EFFECT_NORMALIZED_WEAPON_DMG, SPELL_EFFECT_POWER_BURN, SPELL_EFFECT_SCHOOL_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, and SPELL_EFFECT_WEAPON_PERCENT_DAMAGE.

◆ ComputeIsStackableWithRanks()

bool SpellInfo::ComputeIsStackableWithRanks ( ) const
1100{
1101 if (IsPassive())
1102 return false;
1104 return false;
1106 return false;
1107
1109 return false;
1110
1111 // All stance spells. if any better way, change it.
1112 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1113 {
1114 switch (SpellFamilyName)
1115 {
1117 // Paladin aura Spell
1119 return false;
1120 break;
1121 case SPELLFAMILY_DRUID:
1122 // Druid form Spell
1123 if (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA &&
1124 Effects[i].ApplyAuraName == SPELL_AURA_MOD_SHAPESHIFT)
1125 return false;
1126 break;
1127 }
1128 }
1129 return true;
1130}
@ SPELL_AURA_MOD_SHAPESHIFT
Definition: SpellAuraDefines.h:99
@ SPELL_EFFECT_APPLY_AREA_AURA_RAID
Definition: SharedDefines.h:843
@ SPELLFAMILY_PALADIN
Definition: SharedDefines.h:3538
@ SPELLFAMILY_DRUID
Definition: SharedDefines.h:3535
bool IsProfessionOrRiding() const
Definition: SpellInfo.cpp:925
bool IsPassive() const
Definition: SpellInfo.cpp:1085
bool IsAbilityLearnedWithProfession() const
Definition: SpellInfo.cpp:975

References Effects, IsAbilityLearnedWithProfession(), IsPassive(), IsProfessionOrRiding(), MAX_SPELL_EFFECTS, POWER_HEALTH, POWER_MANA, SPELL_AURA_MOD_SHAPESHIFT, SPELL_EFFECT_APPLY_AREA_AURA_RAID, SPELL_EFFECT_APPLY_AURA, SPELLFAMILY_DRUID, SPELLFAMILY_PALADIN, and SpellFamilyName.

◆ GetAllEffectsMechanicMask()

◆ GetAuraRankForLevel()

SpellInfo const * SpellInfo::GetAuraRankForLevel ( uint8  level) const
2513{
2514 // ignore passive spells
2515 //if (IsPassive())
2516 // return this;
2517
2518 bool needRankSelection = false;
2519 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2520 {
2521 if (IsPositiveEffect(i) &&
2522 (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA ||
2525 {
2526 needRankSelection = true;
2527 break;
2528 }
2529 }
2530
2531 // not required
2532 if (!needRankSelection)
2533 return this;
2534
2535 SpellInfo const* nextSpellInfo = nullptr;
2536
2537 sScriptMgr->OnBeforeAuraRankForLevel(this, nextSpellInfo, level);
2538
2539 if (nextSpellInfo != nullptr)
2540 return nextSpellInfo;
2541
2542 for (nextSpellInfo = this; nextSpellInfo != nullptr; nextSpellInfo = nextSpellInfo->GetPrevRankSpell())
2543 {
2544 // if found appropriate level
2545 if (uint32(level + 10) >= nextSpellInfo->SpellLevel)
2546 return nextSpellInfo;
2547
2548 // one rank less then
2549 }
2550
2551 // not found
2552 return nullptr;
2553}
#define sScriptMgr
Definition: ScriptMgr.h:698
@ SPELL_EFFECT_APPLY_AREA_AURA_PARTY
Definition: SharedDefines.h:813
SpellInfo const * GetPrevRankSpell() const
Definition: SpellInfo.cpp:2505
bool IsPositiveEffect(uint8 effIndex) const
Definition: SpellInfo.cpp:1229

References Effects, GetPrevRankSpell(), IsPositiveEffect(), MAX_SPELL_EFFECTS, SPELL_EFFECT_APPLY_AREA_AURA_PARTY, SPELL_EFFECT_APPLY_AREA_AURA_RAID, SPELL_EFFECT_APPLY_AURA, SpellLevel, and sScriptMgr.

Referenced by Pet::_LoadAuras(), Spell::DoSpellHitOnUnit(), and WorldSession::HandleCastSpellOpcode().

◆ GetAuraState()

AuraStateType SpellInfo::GetAuraState ( ) const
2048{
2049 return _auraState;
2050}
AuraStateType _auraState
Definition: SpellInfo.h:396

References _auraState.

Referenced by Unit::_ApplyAura(), Unit::_CreateAuraApplication(), and Unit::_UnapplyAura().

◆ GetCategory()

◆ GetDispelMask() [1/2]

uint32 SpellInfo::GetDispelMask ( ) const

◆ GetDispelMask() [2/2]

uint32 SpellInfo::GetDispelMask ( DispelType  type)
static
2034{
2035 // If dispel all
2036 if (type == DISPEL_ALL)
2037 return DISPEL_ALL_MASK;
2038 else
2039 return uint32(1 << type);
2040}
#define DISPEL_ALL_MASK
Definition: SharedDefines.h:1386
@ DISPEL_ALL
Definition: SharedDefines.h:1379

References DISPEL_ALL, and DISPEL_ALL_MASK.

◆ GetDuration()

◆ GetEffect()

◆ GetEffectMechanic()

Mechanics SpellInfo::GetEffectMechanic ( uint8  effIndex) const
2012{
2013 if (Effects[effIndex].IsEffect() && Effects[effIndex].Mechanic)
2014 return Mechanics(Effects[effIndex].Mechanic);
2015 if (Mechanic)
2016 return Mechanics(Mechanic);
2017 return MECHANIC_NONE;
2018}
Mechanics
Definition: SharedDefines.h:1324

References Effects, Mechanic, and MECHANIC_NONE.

Referenced by Unit::GetMechanicResistChance().

◆ GetEffectMechanicMask()

uint32 SpellInfo::GetEffectMechanicMask ( uint8  effIndex) const
1991{
1992 uint32 mask = 0;
1993 if (Mechanic)
1994 mask |= 1 << Mechanic;
1995 if (Effects[effIndex].IsEffect() && Effects[effIndex].Mechanic)
1996 mask |= 1 << Effects[effIndex].Mechanic;
1997 return mask;
1998}

References Effects, and Mechanic.

Referenced by Unit::IsDamageReducedByArmor().

◆ GetEffects()

std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > const & SpellInfo::GetEffects ( ) const
inline
524{ return Effects; }

Referenced by SpellMgr::LoadSpellInfoCorrections().

◆ GetExplicitTargetMask()

◆ GetFirstRankSpell()

SpellInfo const * SpellInfo::GetFirstRankSpell ( ) const

◆ GetLastRankSpell()

SpellInfo const * SpellInfo::GetLastRankSpell ( ) const
2494{
2495 if (!ChainEntry)
2496 return nullptr;
2497 return ChainEntry->last;
2498}
SpellInfo const * last
Definition: SpellMgr.h:558

References ChainEntry, and SpellChainNode::last.

◆ GetMaxDuration()

◆ GetMaxRange()

◆ GetMaxTicks()

uint32 SpellInfo::GetMaxTicks ( ) const
2355{
2356 int32 DotDuration = GetDuration();
2357 if (DotDuration == 0)
2358 return 1;
2359
2360 // 200% limit
2361 if (DotDuration > 30000)
2362 DotDuration = 30000;
2363
2364 for (uint8 x = 0; x < MAX_SPELL_EFFECTS; x++)
2365 {
2366 if (Effects[x].Effect == SPELL_EFFECT_APPLY_AURA)
2367 switch (Effects[x].ApplyAuraName)
2368 {
2373 if (Effects[x].Amplitude != 0)
2374 return DotDuration / Effects[x].Amplitude;
2375 break;
2376 }
2377 }
2378
2379 return 6;
2380}
@ SPELL_AURA_PERIODIC_HEAL
Definition: SpellAuraDefines.h:71
int32 GetDuration() const
Definition: SpellInfo.cpp:2324

References Effects, GetDuration(), MAX_SPELL_EFFECTS, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_PERIODIC_HEAL, SPELL_AURA_PERIODIC_LEECH, SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT, and SPELL_EFFECT_APPLY_AURA.

Referenced by Unit::CalculateDefaultCoefficient(), spell_mage_ignite::HandleProc(), spell_dru_t10_balance_4p_bonus::HandleProc(), spell_pri_glyph_of_prayer_of_healing::HandleProc(), spell_sha_t10_restoration_4p_bonus::HandleProc(), and spell_sha_t8_electrified::HandleProc().

◆ GetMinRange()

float SpellInfo::GetMinRange ( bool  positive = false) const

◆ GetNextRankSpell()

SpellInfo const * SpellInfo::GetNextRankSpell ( ) const
2500{
2501 if (!ChainEntry)
2502 return nullptr;
2503 return ChainEntry->next;
2504}
SpellInfo const * next
Definition: SpellMgr.h:556

References ChainEntry, and SpellChainNode::next.

Referenced by Player::addSpell(), SpellMgr::LoadSpellProcEvents(), SpellMgr::LoadSpellProcs(), and ObjectMgr::LoadSpellScriptNames().

◆ GetPrevRankSpell()

SpellInfo const * SpellInfo::GetPrevRankSpell ( ) const
2506{
2507 if (!ChainEntry)
2508 return nullptr;
2509 return ChainEntry->prev;
2510}
SpellInfo const * prev
Definition: SpellMgr.h:555

References ChainEntry, and SpellChainNode::prev.

Referenced by GetAuraRankForLevel().

◆ GetRank()

◆ GetRecoveryTime()

uint32 SpellInfo::GetRecoveryTime ( ) const

◆ GetSchoolMask()

SpellSchoolMask SpellInfo::GetSchoolMask ( ) const
1975{
1977}
SpellSchoolMask
Definition: SharedDefines.h:295

References SchoolMask.

Referenced by PetAI::_canMeleeAttack(), Unit::CalcArmorReducedDamage(), spell_pal_sacred_shield_base::CalculateAmount(), spell_mage_ice_barrier_aura::CalculateSpellAmount(), spell_mage_ice_barrier::CalculateSpellAmount(), CalculateSpellAmount(), Unit::CalculateSpellDamageTaken(), Creature::CanCastSpell(), Spell::CheckCast(), Spell::CheckCasterAuras(), spell_hun_lock_and_load::CheckTrapProc(), Unit::DealMeleeDamage(), Spell::DoAllEffectOnTarget(), Spell::EffectCastButtons(), Spell::EffectEnvironmentalDMG(), Spell::EffectHeal(), Spell::EffectInterruptCast(), Spell::EffectWeaponDmg(), AuraEffect::HandleAuraModSchoolImmunity(), spell_mage_cold_snap::HandleDummy(), Unit::HandleDummyAuraProc(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_hun_glyph_of_arcane_shot::HandleProc(), spell_hun_lock_and_load::HandleProcs(), Unit::HandleProcTriggerSpell(), Spell::HandleThreatSpells(), Unit::IsImmunedToDamage(), Unit::IsImmunedToSchool(), Unit::IsImmunedToSpell(), Unit::IsImmunedToSpellEffect(), spell_hun_lock_and_load::IsTargetValid(), LoadAuraState(), Unit::MagicSpellHitResult(), SmartScript::ProcessAction(), Player::ProhibitSpellSchool(), Unit::SendPeriodicAuraLog(), Spell::Spell(), Unit::SpellCriticalDamageBonus(), Unit::SpellDamageBonusDone(), Unit::SpellDamageBonusTaken(), Unit::SpellHealingBonusDone(), Unit::SpellHealingBonusTaken(), boss_viscidus::SpellHit(), Unit::SpellHitResult(), Unit::SpellPctDamageModsDone(), and HostileRefMgr::threatAssist().

◆ GetSpellMechanicMaskByEffectMask()

uint32 SpellInfo::GetSpellMechanicMaskByEffectMask ( uint32  effectMask) const
2001{
2002 uint32 mask = 0;
2003 if (Mechanic)
2004 mask |= 1 << Mechanic;
2005 for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
2006 if ((effectMask & (1 << i)) && Effects[i].Mechanic)
2007 mask |= 1 << Effects[i].Mechanic;
2008 return mask;
2009}

References Effects, MAX_SPELL_EFFECTS, and Mechanic.

Referenced by Unit::ModSpellDuration().

◆ GetSpellSpecific()

SpellSpecificType SpellInfo::GetSpellSpecific ( ) const
2124{
2125 return _spellSpecific;
2126}
SpellSpecificType _spellSpecific
Definition: SpellInfo.h:397

References _spellSpecific.

Referenced by IsAuraExclusiveBySpecificPerCasterWith(), IsAuraExclusiveBySpecificWith(), Unit::IsPolymorphed(), Aura::IsSingleTargetWith(), and LoadAuraState().

◆ HasAnyAura()

bool SpellInfo::HasAnyAura ( ) const
889{
890 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
891 if (Effects[i].IsAura())
892 return true;
893 return false;
894}

References Effects, and MAX_SPELL_EFFECTS.

Referenced by Player::_addSpell(), and Player::removeSpell().

◆ HasAnyEffectMechanic()

bool SpellInfo::HasAnyEffectMechanic ( ) const
2021{
2022 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2023 if (Effects[i].Mechanic)
2024 return true;
2025 return false;
2026}

References Effects, MAX_SPELL_EFFECTS, and Mechanic.

◆ HasAreaAuraEffect()

bool SpellInfo::HasAreaAuraEffect ( ) const
897{
898 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
899 if (Effects[i].IsAreaAuraEffect())
900 return true;
901 return false;
902}

References Effects, and MAX_SPELL_EFFECTS.

Referenced by AuraApplication::_HandleEffect(), AuraScript::_Validate(), and Aura::CanBeSentToClient().

◆ HasAttribute() [1/9]

bool SpellInfo::HasAttribute ( SpellAttr0  attribute) const
inline
412{ return (Attributes & attribute) != 0; }

Referenced by Player::_addSpell(), Player::_addTalentAurasAndSpells(), Spell::_cast(), _IsPositiveEffect(), Unit::_IsValidAssistTarget(), Unit::_IsValidAttackTarget(), Pet::_SaveAuras(), Unit::_TryStackingOrRefreshingExistingAura(), Unit::AddAura(), Player::AddSpellAndCategoryCooldowns(), Player::addTalent(), Player::ApplyEquipCooldown(), Unit::ApplySpellDispelImmunity(), Aura::Aura(), AuraApplication::BuildUpdatePacket(), Unit::CalcAbsorbResist(), CalcCastTime(), CalcPowerCost(), AuraEffect::CalculatePeriodic(), boss_mandokir::boss_mandokirAI::CalculateThreat(), SpellEffectInfo::CalcValue(), PetAI::CanAttack(), Aura::CanBeSaved(), CanBeUsedInCombat(), CanDispelAura(), Spell::CanExecuteTriggersOnHit(), Player::canFlyInZone(), Player::CanNoReagentCast(), CanPierceImmuneAura(), Aura::CanStackWith(), Spell::CheckCast(), Spell::CheckCasterAuras(), Spell::CheckEffectTarget(), Spell::CheckItems(), CheckLocation(), spell_dru_omen_of_clarity::CheckProc(), CheckShapeshift(), CheckTarget(), createProcFlags(), Unit::DealDamage(), Spell::DoAllEffectOnTarget(), Spell::DoSpellHitOnUnit(), Spell::EffectCastButtons(), Spell::EffectCharge(), Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectForceDeselect(), Spell::EffectSanctuary(), Spell::EffectSchoolDMG(), Spell::EffectStealBeneficialBuff(), Spell::EffectTriggerSpell(), Spell::EffectWeaponDmg(), UnitAI::FillAISpellInfo(), DynObjAura::FillTargetMap(), Spell::finish(), Creature::FocusTarget(), Unit::GetDispellableAuraList(), Unit::GetMagicHitRedirectTarget(), Spell::GetSearcherTypeMask(), AuraEffect::GetTotalTicks(), Spell::handle_immediate(), WorldSession::HandleCancelAuraOpcode(), WorldSession::HandleCancelChanneling(), AuraEffect::HandleFeignDeath(), Spell::HandleLaunchPhase(), AuraEffect::HandleModStateImmunityMask(), AuraEffect::HandleModTotalPercentStat(), AuraEffect::HandlePeriodicEnergizeAuraTick(), WorldSession::HandlePetAction(), Unit::HandleProcTriggerSpell(), AuraEffect::HandleShapeshiftBoosts(), Spell::HandleThreatSpells(), IsActionAllowedChannel(), Spell::IsAutoActionResetSpell(), IsAutocastable(), IsCooldownStartedOnEvent(), Unit::IsDamageReducedByArmor(), Unit::IsImmunedToDamage(), Unit::IsImmunedToSchool(), Unit::IsImmunedToSpell(), Unit::IsImmunedToSpellEffect(), Player::IsNeedCastPassiveSpellAtLearn(), Spell::IsNextMeleeSwingSpell(), IsPassive(), Aura::IsProcTriggeredOnEvent(), IsRangedWeaponSpell(), Aura::IsRemovedOnShapeLost(), Unit::isSpellBlocked(), Unit::IsTriggeredAtSpellProcEvent(), ThreatCalcHelper::isValidProcess(), Player::LearnTalent(), SpellMgr::LoadEnchantCustomAttr(), LoadLootTemplates_Spell(), SpellMgr::LoadSpellInfoCustomAttributes(), LoadSpellSpecific(), Unit::MagicSpellHitResult(), Unit::MeleeDamageBonusDone(), Unit::MeleeDamageBonusTaken(), Unit::MeleeSpellHitResult(), Unit::MeleeSpellMissChance(), Unit::ModSpellDuration(), Aura::ModStackAmount(), Acore::WorldObjectSpellConeTargetCheck::operator()(), AuraEffect::PeriodicTick(), Player::PrepareCharmAISpells(), Spell::prepareDataForTriggerSystem(), Aura::PrepareProcToTrigger(), Unit::ProcDamageAndSpellFor(), Aura::RefreshDuration(), Aura::RefreshTimersWithMods(), Creature::ReleaseFocus(), Unit::RemoveAllAurasOnDeath(), Unit::RemoveArenaAuras(), Player::RemoveArenaSpellCooldowns(), Unit::RemoveAurasByShapeShift(), Unit::RemoveAurasDueToSpellByDispel(), Unit::RemoveAurasDueToSpellBySteal(), Unit::RemoveEvadeAuras(), Player::removeSpell(), Player::resetTalents(), Player::RestoreBaseRune(), Spell::SearchChainTargets(), Spell::SendResurrectRequest(), Spell::SendSpellGo(), Spell::SendSpellStart(), ArenaSpectator::ShouldSendAura(), Spell::Spell(), Unit::SpellDamageBonusDone(), Unit::SpellDamageBonusTaken(), Unit::SpellDoneCritChance(), Unit::SpellHitResult(), Unit::SpellPctDamageModsDone(), Unit::SpellPctHealingModsDone(), Unit::SpellTakenCritChance(), Acore::Hyperlinks::LinkTags::enchant::StoreTo(), Spell::TriggerGlobalCooldown(), and Spell::UpdateChanneledTargetList().

◆ HasAttribute() [2/9]

bool SpellInfo::HasAttribute ( SpellAttr1  attribute) const
inline
413{ return (AttributesEx & attribute) != 0; }

◆ HasAttribute() [3/9]

bool SpellInfo::HasAttribute ( SpellAttr2  attribute) const
inline
414{ return (AttributesEx2 & attribute) != 0; }

◆ HasAttribute() [4/9]

bool SpellInfo::HasAttribute ( SpellAttr3  attribute) const
inline
415{ return (AttributesEx3 & attribute) != 0; }

◆ HasAttribute() [5/9]

bool SpellInfo::HasAttribute ( SpellAttr4  attribute) const
inline
416{ return (AttributesEx4 & attribute) != 0; }

◆ HasAttribute() [6/9]

bool SpellInfo::HasAttribute ( SpellAttr5  attribute) const
inline
417{ return (AttributesEx5 & attribute) != 0; }

◆ HasAttribute() [7/9]

bool SpellInfo::HasAttribute ( SpellAttr6  attribute) const
inline
418{ return (AttributesEx6 & attribute) != 0; }

◆ HasAttribute() [8/9]

bool SpellInfo::HasAttribute ( SpellAttr7  attribute) const
inline
419{ return (AttributesEx7 & attribute) != 0; }

◆ HasAttribute() [9/9]

bool SpellInfo::HasAttribute ( SpellCustomAttributes  customAttribute) const
inline
420{ return (AttributesCu & customAttribute) != 0; }

◆ HasAura()

◆ HasEffect()

◆ IsAbilityLearnedWithProfession()

bool SpellInfo::IsAbilityLearnedWithProfession ( ) const
976{
977 SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(Id);
978
979 for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
980 {
981 SkillLineAbilityEntry const* pAbility = _spell_idx->second;
982 if (!pAbility || pAbility->AcquireMethod != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE)
983 continue;
984
985 if (pAbility->MinSkillLineRank > 0)
986 return true;
987 }
988
989 return false;
990}
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition: SpellMgr.h:584
@ SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE
Definition: DBCEnums.h:368
Definition: DBCStructure.h:1596
uint32 MinSkillLineRank
Definition: DBCStructure.h:1604
uint32 AcquireMethod
Definition: DBCStructure.h:1606

References SkillLineAbilityEntry::AcquireMethod, Id, SkillLineAbilityEntry::MinSkillLineRank, SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE, and sSpellMgr.

Referenced by ComputeIsStackableWithRanks().

◆ IsAbilityOfSkillType()

bool SpellInfo::IsAbilityOfSkillType ( uint32  skillType) const
993{
994 SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(Id);
995
996 for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
997 if (_spell_idx->second->SkillLine == uint32(skillType))
998 return true;
999
1000 return false;
1001}

References Id, and sSpellMgr.

Referenced by Spell::CanOpenLock(), learn_commandscript::HandleLearnAllGMCommand(), and Item::IsFitToSpellRequirements().

◆ IsActionAllowedChannel()

bool SpellInfo::IsActionAllowedChannel ( ) const
1249{
1251}
@ SPELL_ATTR5_ALLOW_ACTION_DURING_CHANNEL
Definition: SharedDefines.h:567
bool IsChanneled() const
Definition: SpellInfo.cpp:1243

References HasAttribute(), IsChanneled(), and SPELL_ATTR5_ALLOW_ACTION_DURING_CHANNEL.

Referenced by Creature::IsMovementPreventedByCasting(), and Spell::prepare().

◆ IsAffectedBySpellMod()

bool SpellInfo::IsAffectedBySpellMod ( SpellModifier const *  mod) const
1281{
1282 // xinef: dont check duration mod
1283 if (mod->op != SPELLMOD_DURATION)
1284 if (!IsAffectedBySpellMods())
1285 return false;
1286
1287 SpellInfo const* affectSpell = sSpellMgr->GetSpellInfo(mod->spellId);
1288
1289 if (!affectSpell)
1290 {
1291 return false;
1292 }
1293
1294 if (!sScriptMgr->OnIsAffectedBySpellModCheck(affectSpell, this, mod))
1295 {
1296 return true;
1297 }
1298
1299 // False if affect_spell == nullptr or spellFamily not equal
1300 if (affectSpell->SpellFamilyName != SpellFamilyName)
1301 return false;
1302
1303 // true
1304 if (mod->mask & SpellFamilyFlags)
1305 return true;
1306
1307 return false;
1308}
@ SPELLMOD_DURATION
Definition: SpellDefines.h:78
bool IsAffectedBySpellMods() const
Definition: SpellInfo.cpp:1275

References IsAffectedBySpellMods(), SpellModifier::mask, SpellModifier::op, SpellFamilyFlags, SpellFamilyName, SpellModifier::spellId, SPELLMOD_DURATION, sScriptMgr, and sSpellMgr.

Referenced by AuraEffect::ApplySpellMod(), and Player::IsAffectedBySpellmod().

◆ IsAffectedBySpellMods()

bool SpellInfo::IsAffectedBySpellMods ( ) const
1276{
1278}
@ SPELL_ATTR3_IGNORE_CASTER_MODIFIERS
Definition: SharedDefines.h:522

References AttributesEx3, and SPELL_ATTR3_IGNORE_CASTER_MODIFIERS.

Referenced by IsAffectedBySpellMod().

◆ IsAffectingArea()

bool SpellInfo::IsAffectingArea ( ) const
1004{
1005 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1006 if (Effects[i].IsEffect() && (Effects[i].IsTargetingArea() || Effects[i].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA) || Effects[i].IsAreaAuraEffect()))
1007 return true;
1008 return false;
1009}
@ SPELL_EFFECT_PERSISTENT_AREA_AURA
Definition: SharedDefines.h:805
bool IsTargetingArea() const
Definition: SpellInfo.cpp:1012

References Effects, IsTargetingArea(), MAX_SPELL_EFFECTS, and SPELL_EFFECT_PERSISTENT_AREA_AURA.

Referenced by Unit::_IsValidAssistTarget(), Unit::_IsValidAttackTarget(), and Unit::MagicSpellHitResult().

◆ IsAllowingDeadTarget()

bool SpellInfo::IsAllowingDeadTarget ( ) const
1215{
1217}
@ TARGET_FLAG_CORPSE_ALLY
Definition: SpellInfo.h:61
@ TARGET_FLAG_UNIT_DEAD
Definition: SpellInfo.h:56
@ TARGET_FLAG_CORPSE_ENEMY
Definition: SpellInfo.h:55
@ SPELL_ATTR2_ALLOW_DEAD_TARGET
Definition: SharedDefines.h:456

References AttributesEx2, SPELL_ATTR2_ALLOW_DEAD_TARGET, TARGET_FLAG_CORPSE_ALLY, TARGET_FLAG_CORPSE_ENEMY, and TARGET_FLAG_UNIT_DEAD.

Referenced by Unit::_CreateAuraApplication(), Unit::_IsValidAssistTarget(), Unit::_IsValidAttackTarget(), CheckTarget(), and Spell::IsValidDeadOrAliveTarget().

◆ IsAuraEffectEqual()

bool SpellInfo::IsAuraEffectEqual ( SpellInfo const *  otherSpellInfo) const
1686{
1687 uint8 matchCount = 0;
1688 uint8 auraCount = 0;
1689 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
1690 {
1691 // xinef: skip non-aura efects
1692 if (!Effects[i].IsAura())
1693 continue;
1694
1695 bool effectFound = false;
1696 for (uint8 j = EFFECT_0; j < MAX_SPELL_EFFECTS; ++j)
1697 {
1698 if (!otherSpellInfo->Effects[j].IsAura())
1699 continue;
1700
1701 if (Effects[i].ApplyAuraName != otherSpellInfo->Effects[j].ApplyAuraName || Effects[i].MiscValue != otherSpellInfo->Effects[j].MiscValue)
1702 continue;
1703
1704 effectFound = true;
1705 break;
1706 }
1707
1708 if (!effectFound)
1709 return false;
1710 ++matchCount;
1711 }
1712
1713 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
1714 {
1715 if (Effects[i].IsAura())
1716 ++auraCount;
1717 if (otherSpellInfo->Effects[i].IsAura())
1718 ++auraCount;
1719 }
1720
1721 return matchCount * 2 == auraCount;
1722}

References EFFECT_0, Effects, and MAX_SPELL_EFFECTS.

Referenced by IsStrongerAuraActive().

◆ IsAuraExclusiveBySpecificPerCasterWith()

bool SpellInfo::IsAuraExclusiveBySpecificPerCasterWith ( SpellInfo const *  spellInfo) const
1403{
1404 SpellSpecificType spellSpec = GetSpellSpecific();
1405 switch (spellSpec)
1406 {
1415 return spellSpec == spellInfo->GetSpellSpecific();
1416 default:
1417 return false;
1418 }
1419}
SpellSpecificType
Definition: SpellInfo.h:149
@ SPELL_SPECIFIC_STING
Definition: SpellInfo.h:153
@ SPELL_SPECIFIC_ASPECT
Definition: SpellInfo.h:155
@ SPELL_SPECIFIC_WARLOCK_CORRUPTION
Definition: SpellInfo.h:162
@ SPELL_SPECIFIC_CURSE
Definition: SpellInfo.h:154
@ SPELL_SPECIFIC_JUDGEMENT
Definition: SpellInfo.h:161
@ SPELL_SPECIFIC_HAND
Definition: SpellInfo.h:171
@ SPELL_SPECIFIC_AURA
Definition: SpellInfo.h:152
@ SPELL_SPECIFIC_SEAL
Definition: SpellInfo.h:151
SpellSpecificType GetSpellSpecific() const
Definition: SpellInfo.cpp:2123

References GetSpellSpecific(), SPELL_SPECIFIC_ASPECT, SPELL_SPECIFIC_AURA, SPELL_SPECIFIC_CURSE, SPELL_SPECIFIC_HAND, SPELL_SPECIFIC_JUDGEMENT, SPELL_SPECIFIC_SEAL, SPELL_SPECIFIC_STING, and SPELL_SPECIFIC_WARLOCK_CORRUPTION.

Referenced by Aura::CanStackWith().

◆ IsAuraExclusiveBySpecificWith()

bool SpellInfo::IsAuraExclusiveBySpecificWith ( SpellInfo const *  spellInfo) const
1371{
1372 SpellSpecificType spellSpec1 = GetSpellSpecific();
1373 SpellSpecificType spellSpec2 = spellInfo->GetSpellSpecific();
1374 switch (spellSpec1)
1375 {
1386 return spellSpec1 == spellSpec2;
1388 return spellSpec2 == SPELL_SPECIFIC_FOOD
1389 || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK;
1391 return spellSpec2 == SPELL_SPECIFIC_DRINK
1392 || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK;
1394 return spellSpec2 == SPELL_SPECIFIC_FOOD
1395 || spellSpec2 == SPELL_SPECIFIC_DRINK
1396 || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK;
1397 default:
1398 return false;
1399 }
1400}
@ SPELL_SPECIFIC_FOOD
Definition: SpellInfo.h:163
@ SPELL_SPECIFIC_MAGE_ARMOR
Definition: SpellInfo.h:158
@ SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE
Definition: SpellInfo.h:169
@ SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT
Definition: SpellInfo.h:170
@ SPELL_SPECIFIC_ELEMENTAL_SHIELD
Definition: SpellInfo.h:159
@ SPELL_SPECIFIC_PRESENCE
Definition: SpellInfo.h:166
@ SPELL_SPECIFIC_DRINK
Definition: SpellInfo.h:164
@ SPELL_SPECIFIC_WARLOCK_ARMOR
Definition: SpellInfo.h:157
@ SPELL_SPECIFIC_SCROLL
Definition: SpellInfo.h:168
@ SPELL_SPECIFIC_MAGE_POLYMORPH
Definition: SpellInfo.h:160
@ SPELL_SPECIFIC_TRACKER
Definition: SpellInfo.h:156
@ SPELL_SPECIFIC_FOOD_AND_DRINK
Definition: SpellInfo.h:165
@ SPELL_SPECIFIC_CHARM
Definition: SpellInfo.h:167

References GetSpellSpecific(), SPELL_SPECIFIC_CHARM, SPELL_SPECIFIC_DRINK, SPELL_SPECIFIC_ELEMENTAL_SHIELD, SPELL_SPECIFIC_FOOD, SPELL_SPECIFIC_FOOD_AND_DRINK, SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE, SPELL_SPECIFIC_MAGE_ARMOR, SPELL_SPECIFIC_MAGE_POLYMORPH, SPELL_SPECIFIC_PRESENCE, SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT, SPELL_SPECIFIC_SCROLL, SPELL_SPECIFIC_TRACKER, and SPELL_SPECIFIC_WARLOCK_ARMOR.

Referenced by Aura::CanStackWith().

◆ IsAutocastable()

bool SpellInfo::IsAutocastable ( ) const
1091{
1093 return false;
1095 return false;
1096 return true;
1097}
@ SPELL_ATTR1_NO_AUTOCAST_AI
Definition: SharedDefines.h:436
@ SPELL_ATTR0_PASSIVE
Definition: SharedDefines.h:388

References HasAttribute(), SPELL_ATTR0_PASSIVE, and SPELL_ATTR1_NO_AUTOCAST_AI.

Referenced by Pet::addSpell(), CharmInfo::AddSpellToActionBar(), WorldSession::HandlePetSpellAutocastOpcode(), CharmInfo::InitCharmCreateSpells(), CharmInfo::LoadPetActionBar(), and Pet::ToggleAutocast().

◆ IsAutoRepeatRangedSpell()

bool SpellInfo::IsAutoRepeatRangedSpell ( ) const

◆ IsBreakingStealth()

bool SpellInfo::IsBreakingStealth ( ) const
1259{
1261}
@ SPELL_ATTR1_ALLOW_WHILE_STEALTHED
Definition: SharedDefines.h:424

References AttributesEx, and SPELL_ATTR1_ALLOW_WHILE_STEALTHED.

Referenced by Spell::prepare().

◆ IsChannelCategorySpell()

bool SpellInfo::IsChannelCategorySpell ( ) const
1071{
1072 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1073 if (Effects[i].TargetA.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL || Effects[i].TargetB.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL)
1074 return true;
1075 return false;
1076}
@ TARGET_SELECT_CATEGORY_CHANNEL
Definition: SpellInfo.h:79

References Effects, MAX_SPELL_EFFECTS, and TARGET_SELECT_CATEGORY_CHANNEL.

Referenced by AuraEffect::HandlePeriodicTriggerSpellAuraTick().

◆ IsChanneled()

◆ IsCooldownStartedOnEvent()

◆ IsCritCapable()

bool SpellInfo::IsCritCapable ( ) const
1165{
1166 return _isCritCapable;
1167}

References _isCritCapable.

Referenced by Unit::SpellDoneCritChance(), and Unit::SpellTakenCritChance().

◆ IsDeathPersistent()

bool SpellInfo::IsDeathPersistent ( ) const
1205{
1207}
@ SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD
Definition: SharedDefines.h:513

References AttributesEx3, and SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD.

Referenced by Unit::_CreateAuraApplication(), CheckTarget(), and Aura::IsDeathPersistent().

◆ IsDifferentRankOf()

bool SpellInfo::IsDifferentRankOf ( SpellInfo const *  spellInfo) const
2561{
2562 if (Id == spellInfo->Id)
2563 return false;
2564 return IsRankOf(spellInfo);
2565}
bool IsRankOf(SpellInfo const *spellInfo) const
Definition: SpellInfo.cpp:2555

References Id, and IsRankOf().

Referenced by Pet::addSpell(), and Aura::CanStackWith().

◆ IsExplicitDiscovery()

bool SpellInfo::IsExplicitDiscovery ( ) const
905{
906 return ((Effects[0].Effect == SPELL_EFFECT_CREATE_RANDOM_ITEM
907 || Effects[0].Effect == SPELL_EFFECT_CREATE_ITEM_2)
908 && Effects[1].Effect == SPELL_EFFECT_SCRIPT_EFFECT)
909 || Id == 64323;
910}
@ SPELL_EFFECT_SCRIPT_EFFECT
Definition: SharedDefines.h:855
@ SPELL_EFFECT_CREATE_ITEM_2
Definition: SharedDefines.h:935
@ SPELL_EFFECT_CREATE_RANDOM_ITEM
Definition: SharedDefines.h:837

References Effects, Id, SPELL_EFFECT_CREATE_ITEM_2, SPELL_EFFECT_CREATE_RANDOM_ITEM, and SPELL_EFFECT_SCRIPT_EFFECT.

Referenced by LoadSkillDiscoveryTable().

◆ IsHighRankOf()

bool SpellInfo::IsHighRankOf ( SpellInfo const *  spellInfo) const
2568{
2569 if (ChainEntry && spellInfo->ChainEntry)
2570 {
2571 if (ChainEntry->first == spellInfo->ChainEntry->first)
2572 if (ChainEntry->rank > spellInfo->ChainEntry->rank)
2573 return true;
2574 }
2575 return false;
2576}

References ChainEntry, SpellChainNode::first, and SpellChainNode::rank.

Referenced by Pet::addSpell(), and Player::PrepareCharmAISpells().

◆ IsLootCrafting()

bool SpellInfo::IsLootCrafting ( ) const
913{
914 return (Effects[0].Effect == SPELL_EFFECT_CREATE_RANDOM_ITEM ||
915 // different random cards from Inscription (121==Virtuoso Inking Set category) r without explicit item
916 (Effects[0].Effect == SPELL_EFFECT_CREATE_ITEM_2 &&
917 ((TotemCategory[0] != 0 || (Totem[0] != 0 && SpellIconID == 1)) || Effects[0].ItemType == 0)));
918}

References Effects, SPELL_EFFECT_CREATE_ITEM_2, SPELL_EFFECT_CREATE_RANDOM_ITEM, and SpellIconID.

Referenced by SpellMgr::ComputeIsSpellValid(), Spell::EffectCreateItem2(), and LoadLootTemplates_Spell().

◆ IsMultiSlotAura()

bool SpellInfo::IsMultiSlotAura ( ) const
1195{
1196 return IsPassive() || Id == 40075; // No other way to make 40075 have more than 1 copy of aura
1197}

References Id, and IsPassive().

Referenced by Unit::_TryStackingOrRefreshingExistingAura(), and Aura::CanStackWith().

◆ IsPassive()

◆ IsPassiveStackableWithRanks()

bool SpellInfo::IsPassiveStackableWithRanks ( ) const

◆ IsPositive()

bool SpellInfo::IsPositive ( ) const
1225{
1227}
@ SPELL_ATTR0_CU_POSITIVE
Definition: SpellInfo.h:209
@ SPELL_ATTR0_CU_NEGATIVE
Definition: SpellInfo.h:208

References AttributesCu, SPELL_ATTR0_CU_NEGATIVE, and SPELL_ATTR0_CU_POSITIVE.

Referenced by Spell::_cast(), Spell::_handle_finish_phase(), Pet::_SaveAuras(), Unit::CalcAbsorbResist(), Player::CastItemCombatSpell(), Spell::CheckCast(), spell_dk_dancing_rune_weapon::CheckProc(), CheckTarget(), Spell::DoAllEffectOnTarget(), Spell::DoSpellHitOnUnit(), Spell::EffectCharge(), UnitAI::FillAISpellInfo(), GetDiminishingReturnsGroupForSpell(), spell_rog_deadly_poison::HandleAfterHit(), AuraEffect::HandleAuraModSchoolImmunity(), AuraEffect::HandleAuraTransform(), WorldSession::HandleCancelAuraOpcode(), Unit::HandleDummyAuraProc(), WorldSession::HandlePetActionHelper(), Unit::HandleProcTriggerSpell(), ArenaSpectator::HandleResetCommand(), spell_gen_clear_debuffs::HandleScript(), GameObject::IsAtInteractDistance(), Unit::IsImmunedToSpell(), Unit::IsImmunedToSpellEffect(), Totem::IsImmunedToSpellEffect(), Unit::MagicSpellHitResult(), SmartScript::OnInitialize(), Unit::PetSpellFail(), Spell::prepare(), Spell::PrepareTriggersExecutedOnHit(), Spell::SelectExplicitTargets(), Spell::SelectImplicitNearbyTargets(), ArenaSpectator::ShouldSendAura(), Spell::Spell(), Unit::SpellHitResult(), Unit::SpellTakenCritChance(), PetAI::UpdateAI(), and Spell::UpdateChanneledTargetList().

◆ IsPositiveEffect()

bool SpellInfo::IsPositiveEffect ( uint8  effIndex) const
1230{
1231 switch (effIndex)
1232 {
1233 default:
1234 case 0:
1236 case 1:
1238 case 2:
1240 }
1241}
@ SPELL_ATTR0_CU_POSITIVE_EFF2
Definition: SpellInfo.h:203
@ SPELL_ATTR0_CU_NEGATIVE_EFF2
Definition: SpellInfo.h:190
@ SPELL_ATTR0_CU_NEGATIVE_EFF1
Definition: SpellInfo.h:189
@ SPELL_ATTR0_CU_POSITIVE_EFF0
Definition: SpellInfo.h:201
@ SPELL_ATTR0_CU_NEGATIVE_EFF0
Definition: SpellInfo.h:188
@ SPELL_ATTR0_CU_POSITIVE_EFF1
Definition: SpellInfo.h:202

References AttributesCu, SPELL_ATTR0_CU_NEGATIVE_EFF0, SPELL_ATTR0_CU_NEGATIVE_EFF1, SPELL_ATTR0_CU_NEGATIVE_EFF2, SPELL_ATTR0_CU_POSITIVE_EFF0, SPELL_ATTR0_CU_POSITIVE_EFF1, and SPELL_ATTR0_CU_POSITIVE_EFF2.

Referenced by AuraApplication::_InitFlags(), Spell::DoAllEffectOnTarget(), GetAuraRankForLevel(), Unit::IsImmunedToSpellEffect(), and Spell::prepare().

◆ IsPrimaryProfession()

bool SpellInfo::IsPrimaryProfession ( ) const
956{
957 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
958 {
959 if (Effects[i].Effect == SPELL_EFFECT_SKILL)
960 {
961 uint32 skill = Effects[i].MiscValue;
962
963 if (IsPrimaryProfessionSkill(skill))
964 return true;
965 }
966 }
967 return false;
968}
bool IsPrimaryProfessionSkill(uint32 skill)
Definition: SpellMgr.cpp:37
@ SPELL_EFFECT_SKILL
Definition: SharedDefines.h:896

References Effects, IsPrimaryProfessionSkill(), MAX_SPELL_EFFECTS, and SPELL_EFFECT_SKILL.

Referenced by IsPrimaryProfessionFirstRank().

◆ IsPrimaryProfessionFirstRank()

bool SpellInfo::IsPrimaryProfessionFirstRank ( ) const
971{
972 return IsPrimaryProfession() && GetRank() == 1;
973}
uint8 GetRank() const
Definition: SpellInfo.cpp:2480
bool IsPrimaryProfession() const
Definition: SpellInfo.cpp:955

References GetRank(), and IsPrimaryProfession().

Referenced by Player::_addSpell(), Player::GetTrainerSpellState(), Player::removeSpell(), and WorldSession::SendTrainerList().

◆ IsProfession()

bool SpellInfo::IsProfession ( ) const
941{
942 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
943 {
944 if (Effects[i].Effect == SPELL_EFFECT_SKILL)
945 {
946 uint32 skill = Effects[i].MiscValue;
947
948 if (IsProfessionSkill(skill))
949 return true;
950 }
951 }
952 return false;
953}
bool IsProfessionSkill(uint32 skill)
Definition: SpellMgr.h:618

References Effects, IsProfessionSkill(), MAX_SPELL_EFFECTS, and SPELL_EFFECT_SKILL.

Referenced by ObjectMgr::AddSpellToTrainer().

◆ IsProfessionOrRiding()

bool SpellInfo::IsProfessionOrRiding ( ) const
926{
927 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
928 {
929 if (Effects[i].Effect == SPELL_EFFECT_SKILL)
930 {
931 uint32 skill = Effects[i].MiscValue;
932
933 if (IsProfessionOrRidingSkill(skill))
934 return true;
935 }
936 }
937 return false;
938}
bool IsProfessionOrRidingSkill(uint32 skill)
Definition: SpellMgr.h:623

References Effects, IsProfessionOrRidingSkill(), MAX_SPELL_EFFECTS, and SPELL_EFFECT_SKILL.

Referenced by ComputeIsStackableWithRanks().

◆ IsQuestTame()

bool SpellInfo::IsQuestTame ( ) const
921{
922 return Effects[0].Effect == SPELL_EFFECT_THREAT && Effects[1].Effect == SPELL_EFFECT_APPLY_AURA && Effects[1].ApplyAuraName == SPELL_AURA_DUMMY;
923}
@ SPELL_AURA_DUMMY
Definition: SpellAuraDefines.h:67
@ SPELL_EFFECT_THREAT
Definition: SharedDefines.h:841

References Effects, SPELL_AURA_DUMMY, SPELL_EFFECT_APPLY_AURA, and SPELL_EFFECT_THREAT.

◆ IsRangedWeaponSpell()

bool SpellInfo::IsRangedWeaponSpell ( ) const
1264{
1265 return (SpellFamilyName == SPELLFAMILY_HUNTER && !(SpellFamilyFlags[1] & 0x10000000)) // for 53352, cannot find better way
1267 || (HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT)); // Xinef: added
1268}
#define ITEM_SUBCLASS_MASK_WEAPON_RANGED
Definition: ItemTemplate.h:376
@ SPELLFAMILY_HUNTER
Definition: SharedDefines.h:3537

References EquippedItemSubClassMask, HasAttribute(), ITEM_SUBCLASS_MASK_WEAPON_RANGED, SPELL_ATTR0_USES_RANGED_SLOT, SPELLFAMILY_HUNTER, SpellFamilyFlags, and SpellFamilyName.

Referenced by Spell::handle_immediate(), Unit::MeleeSpellHitResult(), Spell::Spell(), Unit::SpellDamageBonusDone(), and Unit::SpellHealingBonusDone().

◆ IsRanked()

bool SpellInfo::IsRanked ( ) const
2476{
2477 return ChainEntry != nullptr;
2478}

References ChainEntry.

Referenced by Pet::addSpell(), Player::addSpell(), and SpellMgr::LoadSpellProcEvents().

◆ IsRankOf()

bool SpellInfo::IsRankOf ( SpellInfo const *  spellInfo) const

◆ IsRequiringDeadTarget()

bool SpellInfo::IsRequiringDeadTarget ( ) const

◆ IsSelfCast()

bool SpellInfo::IsSelfCast ( ) const
1078{
1079 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1080 if (Effects[i].Effect && Effects[i].TargetA.GetTarget() != TARGET_UNIT_CASTER)
1081 return false;
1082 return true;
1083}

References Effects, MAX_SPELL_EFFECTS, and TARGET_UNIT_CASTER.

Referenced by Spell::CheckCast(), and Player::RewardQuest().

◆ IsSingleTarget()

bool SpellInfo::IsSingleTarget ( ) const
1362{
1363 // all other single target spells have if it has AttributesEx5
1365 return true;
1366
1367 return false;
1368}
@ SPELL_ATTR5_LIMIT_N
Definition: SharedDefines.h:572

References AttributesEx5, and SPELL_ATTR5_LIMIT_N.

Referenced by Unit::_AddAura(), and Aura::Create().

◆ IsSpellValid()

bool SpellInfo::IsSpellValid ( ) const
1180{
1181 return _isSpellValid;
1182}

References _isSpellValid.

Referenced by SpellMgr::IsSpellValid().

◆ IsStackableWithRanks()

bool SpellInfo::IsStackableWithRanks ( ) const
1133{
1134 return _isStackableWithRanks;
1135}

References _isStackableWithRanks.

Referenced by Player::addSpell().

◆ IsStrongerAuraActive()

bool SpellInfo::IsStrongerAuraActive ( Unit const *  caster,
Unit const *  target 
) const
1571{
1572 if (!target)
1573 return false;
1574
1575 // xinef: check spell group
1576 uint32 groupId = sSpellMgr->GetSpellGroup(Id);
1577 if (!groupId)
1578 return false;
1579
1580 SpellGroupSpecialFlags sFlag = sSpellMgr->GetSpellGroupSpecialFlags(Id);
1582 return false;
1583
1584 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
1585 {
1586 // xinef: Skip Empty effects
1587 if (!Effects[i].IsEffect())
1588 continue;
1589
1590 // xinef: if non-aura effect is preset - return false
1591 if (!Effects[i].IsAura())
1592 return false;
1593
1594 // xinef: aura is periodic - return false
1595 if (Effects[i].Amplitude)
1596 return false;
1597
1598 // xinef: exclude dummy auras
1599 if (Effects[i].ApplyAuraName == SPELL_AURA_DUMMY)
1600 return false;
1601 }
1602
1603 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
1604 {
1605 // xinef: skip non-aura efects
1606 if (!Effects[i].IsAura())
1607 return false;
1608
1609 Unit::AuraEffectList const& auraList = target->GetAuraEffectsByType((AuraType)Effects[i].ApplyAuraName);
1610 for (Unit::AuraEffectList::const_iterator iter = auraList.begin(); iter != auraList.end(); ++iter)
1611 {
1612 // xinef: aura is not groupped or in different group
1613 uint32 auraGroup = (*iter)->GetAuraGroup();
1614 if (!auraGroup || auraGroup != groupId)
1615 continue;
1616
1617 if (IsRankOf((*iter)->GetSpellInfo()) && (sFlag & SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_SAME_SPELL))
1618 {
1619 continue;
1620 }
1621
1622 // xinef: check priority before effect mask
1624 {
1625 SpellGroupSpecialFlags sFlagCurr = sSpellMgr->GetSpellGroupSpecialFlags((*iter)->GetId());
1626 if (sFlagCurr >= SPELL_GROUP_SPECIAL_FLAG_PRIORITY1 && sFlagCurr <= SPELL_GROUP_SPECIAL_FLAG_PRIORITY4 && sFlagCurr < sFlag)
1627 {
1628 return true;
1629 }
1630 }
1631
1632 // xinef: check aura effect equal auras only, some auras have different effects on different ranks - check rank also
1633 if (!IsAuraEffectEqual((*iter)->GetSpellInfo()) && !IsRankOf((*iter)->GetSpellInfo()))
1634 continue;
1635
1636 // xinef: misc value mismatches
1637 // xinef: commented, checked above
1638 //if (Effects[i].MiscValue != (*iter)->GetMiscValue())
1639 // continue;
1640
1641 // xinef: should not happen, or effect is not active - stronger one is present
1642 AuraApplication* aurApp = (*iter)->GetBase()->GetApplicationOfTarget(target->GetGUID());
1643 if (!aurApp || !aurApp->IsActive((*iter)->GetEffIndex()))
1644 continue;
1645
1646 // xinef: assume that all spells are either positive or negative, otherwise they should not be in one group
1647 // xinef: take custom values into account
1648
1649 int32 basePoints = Effects[i].BasePoints;
1650 int32 duration = GetMaxDuration();
1651
1652 // xinef: should have the same id, can be different if spell is triggered
1653 // xinef: have to fix spell mods for triggered spell, turn off current spellmodtakingspell for preparing and restore after
1654 if (Player const* player = caster->GetSpellModOwner())
1655 if (player->m_spellModTakingSpell && player->m_spellModTakingSpell->m_spellInfo->Id == Id)
1656 basePoints = player->m_spellModTakingSpell->GetSpellValue()->EffectBasePoints[i];
1657
1658 int32 curValue = std::abs(Effects[i].CalcValue(caster, &basePoints));
1660 std::abs((*iter)->GetSpellInfo()->Effects[(*iter)->GetEffIndex()].CalcValue((*iter)->GetCaster())) :
1661 std::abs((*iter)->GetAmount());
1662
1663 // xinef: for same spells, divide amount by stack amount
1664 if (Id == (*iter)->GetId())
1665 auraValue /= (*iter)->GetBase()->GetStackAmount();
1666
1667 if (curValue < auraValue)
1668 return true;
1669
1670 // xinef: little hack, if current spell is the same as aura spell, asume it is not stronger
1671 // xinef: if values are the same, duration mods should be taken into account but they are almost always passive
1672 if (curValue == auraValue)
1673 {
1674 if (Id == (*iter)->GetId())
1675 continue;
1676 if (!(*iter)->GetBase()->IsPassive() && duration < (*iter)->GetBase()->GetDuration())
1677 return true;
1678 }
1679 }
1680 }
1681
1682 return false;
1683}
@ SPELL_GROUP_SPECIAL_FLAG_PRIORITY1
Definition: SpellMgr.h:344
@ SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_CHECK
Definition: SpellMgr.h:342
@ 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
std::list< AuraEffect * > AuraEffectList
Definition: Unit.h:1318
Definition: SpellAuras.h:37
bool IsActive(uint8 effIdx)
Definition: SpellAuras.h:81
Aura * GetBase() const
Definition: SpellAuras.h:62
const AuraApplication * GetApplicationOfTarget(ObjectGuid guid) const
Definition: SpellAuras.h:183
int32 GetMaxDuration() const
Definition: SpellInfo.cpp:2331
bool IsAuraEffectEqual(SpellInfo const *otherSpellInfo) const
Definition: SpellInfo.cpp:1685

References EFFECT_0, Effects, Aura::GetApplicationOfTarget(), Unit::GetAuraEffectsByType(), AuraApplication::GetBase(), Object::GetGUID(), GetMaxDuration(), Unit::GetSpellModOwner(), Id, AuraApplication::IsActive(), IsAuraEffectEqual(), IsRankOf(), MAX_SPELL_EFFECTS, SPELL_AURA_DUMMY, SPELL_GROUP_SPECIAL_FLAG_BASE_AMOUNT_CHECK, SPELL_GROUP_SPECIAL_FLAG_PRIORITY1, SPELL_GROUP_SPECIAL_FLAG_PRIORITY4, SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_CHECK, SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_SAME_SPELL, and sSpellMgr.

Referenced by CheckTarget().

◆ IsTargetingArea()

◆ LoadAuraState()

AuraStateType SpellInfo::LoadAuraState ( ) const
2053{
2054 // Seals
2056 return AURA_STATE_JUDGEMENT;
2057
2058 // Conflagrate aura state on Immolate and Shadowflame
2060 // Immolate
2061 ((SpellFamilyFlags[0] & 4) ||
2062 // Shadowflame
2063 (SpellFamilyFlags[2] & 2)))
2065
2066 // Faerie Fire (druid versions)
2069
2070 // Sting (hunter's pet ability)
2071 if (GetCategory() == 1133)
2073
2074 // Victorious
2075 if (SpellFamilyName == SPELLFAMILY_WARRIOR && SpellFamilyFlags[1] & 0x00040000)
2077
2078 // Swiftmend state on Regrowth & Rejuvenation
2080 return AURA_STATE_SWIFTMEND;
2081
2082 // Deadly poison aura state
2083 if (SpellFamilyName == SPELLFAMILY_ROGUE && SpellFamilyFlags[0] & 0x10000)
2085
2086 // Enrage aura state
2087 if (Dispel == DISPEL_ENRAGE)
2088 return AURA_STATE_ENRAGE;
2089
2090 // Bleeding aura state
2092 return AURA_STATE_BLEEDING;
2093
2095 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2096 if (Effects[i].IsAura() && (Effects[i].ApplyAuraName == SPELL_AURA_MOD_STUN
2097 || Effects[i].ApplyAuraName == SPELL_AURA_MOD_ROOT))
2098 return AURA_STATE_FROZEN;
2099
2100 switch (Id)
2101 {
2102 case 71465: // Divine Surge
2103 case 50241: // Oculus, Drake spell Evasive Maneuvers
2104 return AURA_STATE_UNKNOWN22;
2105 case 9991: // Touch of Zanzil
2106 case 35331: // Black Blood
2107 case 9806: // Phantom Strike
2108 case 35325: // Glowing Blood
2109 case 35328: // Lambent Blood
2110 case 16498: // Faerie Fire
2111 case 6950:
2112 case 20656:
2113 case 25602:
2114 case 32129:
2116 default:
2117 break;
2118 }
2119
2120 return AURA_STATE_NONE;
2121}
@ MECHANIC_BLEED
Definition: SharedDefines.h:1340
@ SPELLFAMILY_WARRIOR
Definition: SharedDefines.h:3532
@ SPELLFAMILY_ROGUE
Definition: SharedDefines.h:3536
@ AURA_STATE_NONE
Definition: SharedDefines.h:1291
@ AURA_STATE_FROZEN
Definition: SharedDefines.h:1295
@ AURA_STATE_DEADLY_POISON
Definition: SharedDefines.h:1308
@ AURA_STATE_BLEEDING
Definition: SharedDefines.h:1310
@ AURA_STATE_FAERIE_FIRE
Definition: SharedDefines.h:1304
@ AURA_STATE_ENRAGE
Definition: SharedDefines.h:1309
@ AURA_STATE_WARRIOR_VICTORY_RUSH
Definition: SharedDefines.h:1302
@ AURA_STATE_UNKNOWN22
Definition: SharedDefines.h:1314
@ AURA_STATE_JUDGEMENT
Definition: SharedDefines.h:1296
@ AURA_STATE_SWIFTMEND
Definition: SharedDefines.h:1307
@ AURA_STATE_CONFLAGRATE
Definition: SharedDefines.h:1306
@ DISPEL_ENRAGE
Definition: SharedDefines.h:1381
@ SPELL_SCHOOL_MASK_FROST
Definition: SharedDefines.h:301
SpellSchoolMask GetSchoolMask() const
Definition: SpellInfo.cpp:1974
uint32 GetAllEffectsMechanicMask() const
Definition: SpellInfo.cpp:1979

References AURA_STATE_BLEEDING, AURA_STATE_CONFLAGRATE, AURA_STATE_DEADLY_POISON, AURA_STATE_ENRAGE, AURA_STATE_FAERIE_FIRE, AURA_STATE_FROZEN, AURA_STATE_JUDGEMENT, AURA_STATE_NONE, AURA_STATE_SWIFTMEND, AURA_STATE_UNKNOWN22, AURA_STATE_WARRIOR_VICTORY_RUSH, Dispel, DISPEL_ENRAGE, Effects, GetAllEffectsMechanicMask(), GetCategory(), GetSchoolMask(), GetSpellSpecific(), Id, MAX_SPELL_EFFECTS, MECHANIC_BLEED, SPELL_AURA_MOD_ROOT, SPELL_AURA_MOD_STUN, SPELL_SCHOOL_MASK_FROST, SPELL_SPECIFIC_SEAL, SPELLFAMILY_DRUID, SPELLFAMILY_ROGUE, SPELLFAMILY_WARLOCK, SPELLFAMILY_WARRIOR, SpellFamilyFlags, and SpellFamilyName.

Referenced by SpellMgr::LoadSpellSpecificAndAuraState().

◆ LoadSpellSpecific()

SpellSpecificType SpellInfo::LoadSpellSpecific ( ) const

@workaround For non-stacking tracking spells (We need generic solution)

Todo:
: Not sure whether the fallthrough was a mistake (forgetting a break) or intended. This should be double-checked.
2129{
2130 switch (SpellFamilyName)
2131 {
2133 {
2134 // Food / Drinks (mostly)
2136 {
2137 bool food = false;
2138 bool drink = false;
2139 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2140 {
2141 if (!Effects[i].IsAura())
2142 continue;
2143 switch (Effects[i].ApplyAuraName)
2144 {
2145 // Food
2148 food = true;
2149 break;
2150 // Drink
2153 drink = true;
2154 break;
2155 default:
2156 break;
2157 }
2158 }
2159
2160 if (food && drink)
2162 else if (food)
2163 return SPELL_SPECIFIC_FOOD;
2164 else if (drink)
2165 return SPELL_SPECIFIC_DRINK;
2166 }
2167 // scrolls effects
2168 else
2169 {
2170 SpellInfo const* firstRankSpellInfo = GetFirstRankSpell();
2171 switch (firstRankSpellInfo->Id)
2172 {
2173 case 8118: // Strength
2174 case 8099: // Stamina
2175 case 8112: // Spirit
2176 case 8096: // Intellect
2177 case 8115: // Agility
2178 case 8091: // Armor
2179 return SPELL_SPECIFIC_SCROLL;
2180 }
2181 }
2182 break;
2183 }
2184 case SPELLFAMILY_MAGE:
2185 {
2186 // family flags 18(Molten), 25(Frost/Ice), 28(Mage)
2187 if (SpellFamilyFlags[0] & 0x12040000)
2189
2190 // Arcane brillance and Arcane intelect (normal check fails because of flags difference)
2191 if (SpellFamilyFlags[0] & 0x400)
2193
2194 if ((SpellFamilyFlags[0] & 0x1000000) && Effects[0].ApplyAuraName == SPELL_AURA_MOD_CONFUSE)
2196
2197 break;
2198 }
2200 {
2201 // only warlock curses have this
2202 if (Dispel == DISPEL_CURSE)
2203 return SPELL_SPECIFIC_CURSE;
2204
2205 // Warlock (Demon Armor | Demon Skin | Fel Armor)
2206 if (SpellFamilyFlags[1] & 0x20000020 || SpellFamilyFlags[2] & 0x00000010)
2208
2209 //seed of corruption and corruption
2210 if (SpellFamilyFlags[1] & 0x10 || SpellFamilyFlags[0] & 0x2)
2212 break;
2213 }
2214 case SPELLFAMILY_PRIEST:
2215 {
2216 // Divine Spirit and Prayer of Spirit
2217 if (SpellFamilyFlags[0] & 0x20)
2219
2220 break;
2221 }
2222 case SPELLFAMILY_HUNTER:
2223 {
2224 // only hunter stings have this
2225 if (Dispel == DISPEL_POISON)
2226 return SPELL_SPECIFIC_STING;
2227
2228 // only hunter aspects have this (but not all aspects in hunter family)
2229 if (SpellFamilyFlags.HasFlag(0x00380000, 0x00440000, 0x00001010))
2230 return SPELL_SPECIFIC_ASPECT;
2231
2232 break;
2233 }
2235 {
2236 // Collection of all the seal family flags. No other paladin spell has any of those.
2237 if (SpellFamilyFlags[1] & 0x26000C00
2238 || SpellFamilyFlags[0] & 0x0A000000)
2239 return SPELL_SPECIFIC_SEAL;
2240
2241 if (SpellFamilyFlags[0] & 0x00002190)
2242 return SPELL_SPECIFIC_HAND;
2243
2244 // Judgement of Wisdom, Judgement of Light, Judgement of Justice
2245 if (Id == 20184 || Id == 20185 || Id == 20186)
2247
2248 // only paladin auras have this (for palaldin class family)
2249 if (SpellFamilyFlags[2] & 0x00000020)
2250 return SPELL_SPECIFIC_AURA;
2251
2252 // Illidari Council Paladin (Gathios the Shatterer)
2253 if (Id == 41459 || Id == 41469)
2254 return SPELL_SPECIFIC_SEAL;
2255
2256 break;
2257 }
2258 case SPELLFAMILY_SHAMAN:
2259 {
2260 // family flags 10 (Lightning), 42 (Earth), 37 (Water), proc shield from T2 8 pieces bonus
2261 if (SpellFamilyFlags[1] & 0x420
2262 || (SpellFamilyFlags[0] & 0x00000400 && HasAttribute(SPELL_ATTR1_NO_THREAT))
2263 || Id == 23552)
2265
2266 break;
2267 }
2269 if (Id == 48266 || Id == 48263 || Id == 48265)
2271 break;
2272 }
2273
2274 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2275 {
2276 if (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA)
2277 {
2278 switch (Effects[i].ApplyAuraName)
2279 {
2284 return SPELL_SPECIFIC_CHARM;
2287 if (Id == 30645) // Gas Cloud Tracking
2288 return SPELL_SPECIFIC_NORMAL;
2289 [[fallthrough]];
2293 }
2294 }
2295 }
2296
2297 return SPELL_SPECIFIC_NORMAL;
2298}
@ SPELL_AURA_TRACK_RESOURCES
Definition: SpellAuraDefines.h:108
@ SPELL_AURA_OBS_MOD_HEALTH
Definition: SpellAuraDefines.h:83
@ SPELL_AURA_MOD_POSSESS_PET
Definition: SpellAuraDefines.h:191
@ SPELL_AURA_MOD_POWER_REGEN
Definition: SpellAuraDefines.h:148
@ SPELL_AURA_OBS_MOD_POWER
Definition: SpellAuraDefines.h:84
@ SPELL_AURA_TRACK_STEALTHED
Definition: SpellAuraDefines.h:214
@ SPELL_AURA_MOD_CHARM
Definition: SpellAuraDefines.h:69
@ SPELL_AURA_AOE_CHARM
Definition: SpellAuraDefines.h:240
@ SPELL_AURA_MOD_CONFUSE
Definition: SpellAuraDefines.h:68
@ SPELL_AURA_TRACK_CREATURES
Definition: SpellAuraDefines.h:107
@ SPELL_AURA_MOD_POSSESS
Definition: SpellAuraDefines.h:65
@ SPELL_AURA_MOD_REGEN
Definition: SpellAuraDefines.h:147
@ AURA_INTERRUPT_FLAG_NOT_SEATED
Definition: SpellDefines.h:62
@ SPELL_SPECIFIC_NORMAL
Definition: SpellInfo.h:150
@ SPELL_ATTR1_NO_THREAT
Definition: SharedDefines.h:429
@ SPELLFAMILY_PRIEST
Definition: SharedDefines.h:3534
@ SPELLFAMILY_MAGE
Definition: SharedDefines.h:3531
@ SPELLFAMILY_GENERIC
Definition: SharedDefines.h:3528
@ SPELLFAMILY_SHAMAN
Definition: SharedDefines.h:3539
@ SPELLFAMILY_DEATHKNIGHT
Definition: SharedDefines.h:3543
@ DISPEL_POISON
Definition: SharedDefines.h:1376
@ DISPEL_CURSE
Definition: SharedDefines.h:1374
bool HasFlag(uint32 p1=0, uint32 p2=0, uint32 p3=0) const
Definition: Util.h:468

References AURA_INTERRUPT_FLAG_NOT_SEATED, AuraInterruptFlags, Dispel, DISPEL_CURSE, DISPEL_POISON, Effects, GetFirstRankSpell(), HasAttribute(), flag96::HasFlag(), Id, MAX_SPELL_EFFECTS, SPELL_ATTR1_NO_THREAT, SPELL_AURA_AOE_CHARM, SPELL_AURA_MOD_CHARM, SPELL_AURA_MOD_CONFUSE, SPELL_AURA_MOD_POSSESS, SPELL_AURA_MOD_POSSESS_PET, SPELL_AURA_MOD_POWER_REGEN, SPELL_AURA_MOD_REGEN, SPELL_AURA_OBS_MOD_HEALTH, SPELL_AURA_OBS_MOD_POWER, SPELL_AURA_TRACK_CREATURES, SPELL_AURA_TRACK_RESOURCES, SPELL_AURA_TRACK_STEALTHED, SPELL_EFFECT_APPLY_AURA, SPELL_SPECIFIC_ASPECT, SPELL_SPECIFIC_AURA, SPELL_SPECIFIC_CHARM, SPELL_SPECIFIC_CURSE, SPELL_SPECIFIC_DRINK, SPELL_SPECIFIC_ELEMENTAL_SHIELD, SPELL_SPECIFIC_FOOD, SPELL_SPECIFIC_FOOD_AND_DRINK, SPELL_SPECIFIC_HAND, SPELL_SPECIFIC_JUDGEMENT, SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE, SPELL_SPECIFIC_MAGE_ARMOR, SPELL_SPECIFIC_MAGE_POLYMORPH, SPELL_SPECIFIC_NORMAL, SPELL_SPECIFIC_PRESENCE, SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT, SPELL_SPECIFIC_SCROLL, SPELL_SPECIFIC_SEAL, SPELL_SPECIFIC_STING, SPELL_SPECIFIC_TRACKER, SPELL_SPECIFIC_WARLOCK_ARMOR, SPELL_SPECIFIC_WARLOCK_CORRUPTION, SPELLFAMILY_DEATHKNIGHT, SPELLFAMILY_GENERIC, SPELLFAMILY_HUNTER, SPELLFAMILY_MAGE, SPELLFAMILY_PALADIN, SPELLFAMILY_PRIEST, SPELLFAMILY_SHAMAN, SPELLFAMILY_WARLOCK, SpellFamilyFlags, and SpellFamilyName.

Referenced by SpellMgr::LoadSpellSpecificAndAuraState().

◆ NeedsComboPoints()

bool SpellInfo::NeedsComboPoints ( ) const
1254{
1256}
@ SPELL_ATTR1_FINISHING_MOVE_DURATION
Definition: SharedDefines.h:441
@ SPELL_ATTR1_FINISHING_MOVE_DAMAGE
Definition: SharedDefines.h:439

References AttributesEx, SPELL_ATTR1_FINISHING_MOVE_DAMAGE, and SPELL_ATTR1_FINISHING_MOVE_DURATION.

Referenced by Player::PrepareCharmAISpells(), and Spell::Spell().

◆ NeedsExplicitUnitTarget()

◆ NeedsToBeTriggeredByCaster()

bool SpellInfo::NeedsToBeTriggeredByCaster ( SpellInfo const *  triggeringSpell,
uint8  effIndex = MAX_SPELL_EFFECTS 
) const
1026{
1028 return true;
1029
1030 // pussywizard:
1031 if (effIndex < MAX_SPELL_EFFECTS && (triggeringSpell->Effects[effIndex].TargetA.GetCheckType() == TARGET_CHECK_ENTRY || triggeringSpell->Effects[effIndex].TargetB.GetCheckType() == TARGET_CHECK_ENTRY))
1032 {
1033 // xinef:
1034 if (Id == 60563)
1035 return true;
1036
1037 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1038 if (Effects[i].IsEffect() && (Effects[i].TargetA.GetCheckType() == TARGET_CHECK_ENTRY || Effects[i].TargetB.GetCheckType() == TARGET_CHECK_ENTRY))
1039 return true;
1040 }
1041
1042 /*
1043 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1044 {
1045 if (Effects[i].IsEffect())
1046 {
1047 if (Effects[i].TargetA.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL
1048 || Effects[i].TargetB.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL)
1049 return true;
1050 }
1051 }
1052 */
1053
1054 if (triggeringSpell->IsChanneled())
1055 {
1056 uint32 mask = 0;
1057 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1058 {
1059 if (Effects[i].TargetA.GetTarget() != TARGET_UNIT_CASTER && Effects[i].TargetA.GetTarget() != TARGET_DEST_CASTER)
1060 mask |= Effects[i].GetProvidedTargetMask();
1061 }
1062
1063 if (mask & TARGET_FLAG_UNIT_MASK)
1064 return true;
1065 }
1066
1067 return false;
1068}
@ TARGET_CHECK_ENTRY
Definition: SpellInfo.h:115
@ TARGET_DEST_CASTER
Definition: SharedDefines.h:1423
bool NeedsExplicitUnitTarget() const
Definition: SpellInfo.cpp:1020

References Effects, Id, IsChanneled(), MAX_SPELL_EFFECTS, NeedsExplicitUnitTarget(), TARGET_CHECK_ENTRY, TARGET_DEST_CASTER, TARGET_FLAG_UNIT_MASK, and TARGET_UNIT_CASTER.

Referenced by Spell::EffectTriggerMissileSpell(), Spell::EffectTriggerSpell(), AuraEffect::HandleAuraLinked(), and AuraEffect::HandlePeriodicTriggerSpellAuraTick().

◆ RequireCooldownInfo()

bool SpellInfo::RequireCooldownInfo ( ) const
1170{
1171 return _requireCooldownInfo;
1172}

References _requireCooldownInfo.

Referenced by Spell::SendSpellCooldown().

◆ SetCritCapable()

void SpellInfo::SetCritCapable ( bool  val)
1175{
1176 _isCritCapable = val;
1177}

References _isCritCapable.

◆ SetSpellValid()

void SpellInfo::SetSpellValid ( bool  val)
1185{
1186 _isSpellValid = val;
1187}

References _isSpellValid.

◆ SetStackableWithRanks()

void SpellInfo::SetStackableWithRanks ( bool  val)
1138{
1140}

References _isStackableWithRanks.

◆ ValidateAttribute6SpellDamageMods()

bool SpellInfo::ValidateAttribute6SpellDamageMods ( Unit const *  caster,
const AuraEffect auraEffect,
bool  isDot 
) const
1725{
1726 // Xinef: no attribute
1728 return true;
1729
1730 // Xinef we have a hook to decide which auras should profit to the spell, by default no profits
1731 // Xinef: Scourge Strike - Trigger
1732 if (Id == 70890 && auraEffect)
1733 {
1734 SpellInfo const* auraInfo = auraEffect->GetSpellInfo();
1735 return auraInfo->SpellIconID == 3086 ||
1736 (auraInfo->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT && (auraInfo->SpellFamilyFlags & flag96(8388608, 64, 16) || auraInfo->SpellIconID == 235 || auraInfo->SpellIconID == 154));
1737 }
1738 // Xinef: Necrosis, no profits for done and taken
1739 else if (Id == 51460)
1740 return false;
1741
1742 // Xinef: Do not affect dots and auras obtained from items, only affected by self casted auras
1743 return !isDot && auraEffect && (auraEffect->GetAmount() < 0 || (auraEffect->GetCasterGUID() == caster->GetGUID() && auraEffect->GetSpellInfo()->SpellFamilyName == SpellFamilyName)) && !auraEffect->GetBase()->GetCastItemGUID();
1744}
@ SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS
Definition: SharedDefines.h:633
Definition: Util.h:451
SpellInfo const * GetSpellInfo() const
Definition: SpellAuraEffects.h:54
Aura * GetBase() const
Definition: SpellAuraEffects.h:49
ObjectGuid GetCasterGUID() const
Definition: SpellAuraEffects.h:48
int32 GetAmount() const
Definition: SpellAuraEffects.h:64
ObjectGuid GetCastItemGUID() const
Definition: SpellAuras.h:103

References AttributesEx6, AuraEffect::GetAmount(), AuraEffect::GetBase(), AuraEffect::GetCasterGUID(), Aura::GetCastItemGUID(), Object::GetGUID(), AuraEffect::GetSpellInfo(), Id, SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS, SPELLFAMILY_DEATHKNIGHT, SpellFamilyFlags, SpellFamilyName, and SpellIconID.

Referenced by Unit::MeleeDamageBonusDone(), Unit::SpellDamageBonusTaken(), and Unit::SpellPctDamageModsDone().

Friends And Related Function Documentation

◆ SpellMgr

friend class SpellMgr
friend

Member Data Documentation

◆ _auraState

AuraStateType SpellInfo::_auraState

◆ _isCritCapable

bool SpellInfo::_isCritCapable

◆ _isSpellValid

bool SpellInfo::_isSpellValid

◆ _isStackableWithRanks

bool SpellInfo::_isStackableWithRanks

◆ _requireCooldownInfo

bool SpellInfo::_requireCooldownInfo

◆ _spellSpecific

◆ ActiveIconID

uint32 SpellInfo::ActiveIconID

◆ AreaGroupId

int32 SpellInfo::AreaGroupId

◆ Attributes

◆ AttributesCu

◆ AttributesEx

◆ AttributesEx2

◆ AttributesEx3

◆ AttributesEx4

uint32 SpellInfo::AttributesEx4

Referenced by CalcPowerCost(), and SpellInfo().

◆ AttributesEx5

uint32 SpellInfo::AttributesEx5

◆ AttributesEx6

◆ AttributesEx7

uint32 SpellInfo::AttributesEx7

Referenced by SpellInfo().

◆ AuraInterruptFlags

◆ BaseLevel

uint32 SpellInfo::BaseLevel

◆ CasterAuraSpell

uint32 SpellInfo::CasterAuraSpell

Referenced by Spell::CheckCast(), and SpellInfo().

◆ CasterAuraState

uint32 SpellInfo::CasterAuraState

◆ CasterAuraStateNot

uint32 SpellInfo::CasterAuraStateNot

Referenced by Spell::CheckCast(), and SpellInfo().

◆ CastTimeEntry

SpellCastTimesEntry const* SpellInfo::CastTimeEntry

Referenced by CalcCastTime(), and SpellInfo().

◆ CategoryEntry

◆ CategoryRecoveryTime

◆ ChainEntry

◆ ChannelInterruptFlags

uint32 SpellInfo::ChannelInterruptFlags

◆ Dispel

◆ DmgClass

◆ DurationEntry

◆ Effects

std::array<SpellEffectInfo, MAX_SPELL_EFFECTS> SpellInfo::Effects

Referenced by Player::_addSpell(), Player::_addTalentAurasAndSpells(), Spell::_handle_immediate_phase(), _InitializeExplicitTargetMask(), _IsPositiveEffect(), Player::_removeTalentAurasAndSpells(), _UnloadImplicitTargetConditionLists(), spell_dk_will_of_the_necropolis::Absorb(), Spell::AddGOTarget(), Spell::AddItemTarget(), ObjectMgr::AddSpellToTrainer(), ConditionMgr::addToSpellImplicitTargetConditions(), Spell::AddUnitTarget(), Player::ApplyEquipSpell(), Aura::BuildEffectMaskForOwner(), Unit::CalcAbsorbResist(), ThreatCalcHelper::calcThreat(), spell_dk_anti_magic_zone::CalculateAmount(), spell_pal_sacred_shield_base::CalculateAmount(), AuraEffect::CalculateAmount(), spell_krystallus_shatter_effect::spell_krystallus_shatter_effect_SpellScript::CalculateDamage(), spell_gruul_shatter_effect::CalculateDamage(), spell_igb_incinerating_blast::spell_igb_incinerating_blast_SpellScript::CalculateDamage(), Spell::CalculateJumpSpeeds(), AuraEffect::CalculatePeriodic(), spell_dru_treant_scaling::CalculateResistanceAmount(), spell_hun_generic_scaling::CalculateResistanceAmount(), spell_mage_pet_scaling::CalculateResistanceAmount(), spell_pri_shadowfiend_scaling::CalculateResistanceAmount(), spell_sha_feral_spirit_scaling::CalculateResistanceAmount(), spell_sha_fire_elemental_scaling::CalculateResistanceAmount(), spell_warl_generic_scaling::CalculateResistanceAmount(), spell_warl_infernal_scaling::CalculateResistanceAmount(), Unit::CalculateSpellDamage(), AuraEffect::CalculateSpellMod(), spell_dk_pet_scaling::CalculateStatAmount(), spell_dru_treant_scaling::CalculateStatAmount(), spell_hun_generic_scaling::CalculateStatAmount(), spell_mage_pet_scaling::CalculateStatAmount(), spell_pri_shadowfiend_scaling::CalculateStatAmount(), spell_sha_feral_spirit_scaling::CalculateStatAmount(), spell_sha_fire_elemental_scaling::CalculateStatAmount(), spell_warl_generic_scaling::CalculateStatAmount(), spell_warl_infernal_scaling::CalculateStatAmount(), Spell::CanAutoCast(), Spell::CanExecuteTriggersOnHit(), Spell::CanOpenLock(), Aura::CanStackWith(), GameObject::CastSpell(), _SpellScript::EffectNameCheck::Check(), _SpellScript::EffectAuraNameCheck::Check(), spell_mage_ice_barrier::CheckCast(), spell_pri_power_word_shield::CheckCast(), Spell::CheckCast(), Spell::CheckCasterAuras(), SpellScript::TargetHook::CheckEffect(), Spell::CheckEffectTarget(), CheckElixirStacking(), Spell::CheckItems(), spell_hun_ascpect_of_the_viper::CheckProc(), CheckShapeshift(), spell_rotface_unstable_ooze_explosion::spell_rotface_unstable_ooze_explosion_SpellScript::CheckTarget(), spell_hun_lock_and_load::CheckTrapProc(), AuraEffect::CleanupTriggeredSpells(), ComputeIsCritCapable(), SpellMgr::ComputeIsSpellValid(), ComputeIsStackableWithRanks(), Spell::DoAllEffectOnLaunchTarget(), Spell::DoAllEffectOnTarget(), Spell::DoSpellHitOnUnit(), Spell::EffectActivateObject(), Spell::EffectActivateRune(), Spell::EffectAddFarsight(), Spell::EffectApplyGlyph(), Spell::EffectBind(), Spell::EffectCastButtons(), Spell::EffectCreateItem(), Spell::EffectCreateItem2(), Spell::EffectCreateTamedPet(), Spell::EffectDiscoverTaxi(), Spell::EffectDispel(), Spell::EffectDispelMechanic(), Spell::EffectDuel(), Spell::EffectDurabilityDamage(), Spell::EffectDurabilityDamagePCT(), Spell::EffectEnchantHeldItem(), Spell::EffectEnchantItemPerm(), Spell::EffectEnchantItemPrismatic(), Spell::EffectEnchantItemTmp(), Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectFeedPet(), Spell::EffectForceCast(), Spell::EffectForceDeselect(), Spell::EffectGameObjectSetDestructionState(), Spell::EffectKillCredit(), Spell::EffectKillCreditPersonal(), Spell::EffectKnockBack(), Spell::EffectLeapBack(), Spell::EffectLearnPetSpell(), Spell::EffectLearnSkill(), Spell::EffectLearnSpell(), Spell::EffectPersistentAA(), Spell::EffectPlayMusic(), Spell::EffectPlaySound(), Spell::EffectPowerBurn(), Spell::EffectPowerDrain(), Spell::EffectPullTowards(), Spell::EffectQuestClear(), Spell::EffectQuestComplete(), Spell::EffectQuestFail(), Spell::EffectQuestStart(), Spell::EffectRechargeManaGem(), Spell::EffectRemoveAura(), Spell::EffectReputation(), Spell::EffectResurrectNew(), Spell::EffectSanctuary(), Spell::EffectSchoolDMG(), Spell::EffectScriptEffect(), Spell::EffectSelfResurrect(), Spell::EffectSendEvent(), Spell::EffectSendTaxi(), Spell::EffectStealBeneficialBuff(), Spell::EffectSummonChangeItem(), Spell::EffectSummonObject(), Spell::EffectSummonObjectWild(), Spell::EffectSummonPet(), Spell::EffectSummonType(), Spell::EffectTransmitted(), Spell::EffectTriggerMissileSpell(), Spell::EffectTriggerRitualOfSummoning(), Spell::EffectTriggerSpell(), Spell::EffectUnlearnSpecialization(), Spell::EffectWeaponDmg(), EquippedOk(), UnitAI::FillAISpellInfo(), ScriptMgr::FillSpellSummary(), UnitAura::FillTargetMap(), DynObjAura::FillTargetMap(), GetAllEffectsMechanicMask(), GetAuraRankForLevel(), AuraEffect::GetAuraType(), Unit::GetCastingTimeForBonus(), GetDiminishingReturnsGroupForSpell(), GetEffectMechanic(), GetEffectMechanicMask(), npc_firework::npc_fireworkAI::GetFireworkGameObjectId(), spell_dk_raise_dead::GetGhoulSpellId(), GetMaxTicks(), Unit::GetMechanicResistChance(), AuraEffect::GetMiscValue(), AuraEffect::GetMiscValueB(), GetSpellMechanicMaskByEffectMask(), go_soulwell::go_soulwellAI::GossipHello(), AuraEffect::HandleAuraLinked(), Unit::HandleAuraProc(), Unit::HandleAuraRaidProcFromCharge(), Unit::HandleAuraRaidProcFromChargeWithValue(), WorldSession::HandleCastSpellOpcode(), spell_dru_lifebloom::HandleDispel(), spell_gen_oracle_wolvar_reputation::HandleDummy(), spell_q13086_last_line_of_defence::HandleDummy(), spell_dk_raise_ally::HandleDummy(), spell_q12683_take_sputum_sample::HandleDummy(), Unit::HandleDummyAuraProc(), spell_warr_execute::HandleEffect(), spell_dk_improved_unholy_presence::HandleEffectApply(), spell_dru_idol_lifebloom::HandleEffectCalcSpellMod(), spell_warr_glyph_of_sunder_armor::HandleEffectCalcSpellMod(), spell_rog_prey_on_the_weak::HandleEffectPeriodic(), Spell::HandleEffects(), AuraEffect::HandleFeignDeath(), Spell::HandleLaunchPhase(), lookup_commandscript::HandleLookupSpellCommand(), lookup_commandscript::HandleLookupSpellIdCommand(), spell_putricide_unbound_plague_dmg::spell_putricide_unbound_plague_dmg_AuraScript::HandlePeriodic(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealAurasTick(), AuraEffect::HandlePeriodicHealthFunnelAuraTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePeriodicPowerBurnAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), AuraEffect::HandlePeriodicTriggerSpellWithValueAuraTick(), WorldSession::HandlePetActionHelper(), spell_item_blood_draining_enchant::HandleProc(), spell_dk_blood_caked_blade::HandleProc(), spell_gen_proc_not_self::HandleProc(), spell_gen_blade_warding::HandleProc(), spell_pal_seal_of_command_aura::HandleProc(), spell_pal_sacred_shield_base::HandleProc(), spell_hun_lock_and_load::HandleProcs(), Unit::HandleProcTriggerSpell(), AuraEffect::HandleProcTriggerSpellAuraProc(), AuraEffect::HandleProcTriggerSpellWithValueAuraProc(), AuraEffect::HandleRaidProcFromChargeAuraProc(), AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(), spell_igb_rocket_pack::spell_igb_rocket_pack_AuraScript::HandleRemove(), Unit::HandleSpellClick(), spell_wintergrasp_create_vehicle::spell_wintergrasp_create_vehicle_SpellScript::HandleSummon(), spell_item_draenic_pale_ale::HandleSummon(), spell_putricide_mutated_plague::spell_putricide_mutated_plague_AuraScript::HandleTriggerSpell(), spell_mage_arcane_blast::HandleTriggerSpell(), Player::Has310Flyer(), HasAnyAura(), HasAnyEffectMechanic(), HasAreaAuraEffect(), HasAura(), Unit::HasAuraWithMechanic(), HasEffect(), AuraEffect::HasSpellClassMask(), ItemTemplate::HasSpellPowerStat(), AuraEffect::IsAffectedOnSpell(), IsAffectingArea(), IsAuraEffectEqual(), IsChannelCategorySpell(), Unit::IsDamageReducedByArmor(), IsExplicitDiscovery(), Unit::IsImmunedToSpell(), Creature::IsImmunedToSpell(), Unit::IsImmunedToSpellEffect(), Creature::IsImmunedToSpellEffect(), Totem::IsImmunedToSpellEffect(), IsLootCrafting(), IsPrimaryProfession(), IsProfession(), IsProfessionOrRiding(), IsQuestTame(), IsSelfCast(), ConditionMgr::isSourceTypeValid(), IsStrongerAuraActive(), IsTargetingArea(), AchievementCriteriaData::IsValid(), Player::learnQuestRewardedSpells(), Player::LearnTalent(), spell_dk_anti_magic_shell_raid::Load(), spell_dk_anti_magic_shell_self::Load(), spell_dk_anti_magic_zone::Load(), spell_dk_spell_deflection::Load(), spell_dk_will_of_the_necropolis::Load(), spell_dru_moonkin_form_passive::Load(), spell_dru_primal_tenacity::Load(), spell_dru_savage_defense::Load(), spell_gen_absorb0_hitlimit1::Load(), spell_pal_ardent_defender::Load(), spell_pal_divine_sacrifice::Load(), spell_pal_divine_storm::Load(), spell_pri_guardian_spirit::Load(), spell_rog_cheat_death::Load(), spell_rog_nerves_of_steel::Load(), spell_sha_astral_shift::Load(), LoadAuraState(), SpellMgr::LoadEnchantCustomAttr(), SpellMgr::LoadPetDefaultSpells(), ObjectMgr::LoadQuests(), SpellMgr::LoadSpellInfoCorrections(), SpellMgr::LoadSpellInfoCustomAttributes(), SpellMgr::LoadSpellLearnSkills(), SpellMgr::LoadSpellPetAuras(), ObjectMgr::LoadSpellScripts(), LoadSpellSpecific(), SpellMgr::LoadSpellTargetPositions(), Unit::MagicSpellHitResult(), Unit::MeleeDamageBonusDone(), spell_gen_random_target32::ModDest(), spell_q12308_escape_from_silverbrook_summon_worgen::ModDest(), NeedsToBeTriggeredByCaster(), spell_kologarn_stone_shout::spell_kologarn_stone_shout_AuraScript::OnPeriodic(), spell_deathwhisper_dark_reckoning::OnPeriodic(), spell_putricide_mutated_plague::spell_putricide_mutated_plague_AuraScript::OnRemove(), spell_blood_queen_pact_of_the_darkfallen_dmg::spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript::PeriodicTick(), spell_broggok_poison_cloud::PeriodicTick(), Spell::prepare(), spell_optic_link::spell_optic_linkAuraScript::PrepareAuraScript(), Player::PrepareCharmAISpells(), Spell::PrepareTriggersExecutedOnHit(), Unit::ProcDamageAndSpellFor(), Creature::reachWithSpellAttack(), Creature::reachWithSpellCure(), spell_wg_reduce_damage_by_distance::spell_wg_reduce_damage_by_distance_SpellScript::RecalculateDamage(), spell_gen_mounted_charge::Register(), spell_gen_defend::Register(), Unit::RemoveMovementImpairingAuras(), Player::removeSpell(), Player::resetTalents(), Spell::SelectEffectImplicitTargets(), Spell::SelectEffectTypeImplicitTargets(), Spell::SelectImplicitAreaTargets(), Spell::SelectImplicitCasterDestTargets(), Spell::SelectImplicitChainTargets(), Spell::SelectImplicitConeTargets(), Spell::SelectImplicitDestDestTargets(), Spell::SelectImplicitNearbyTargets(), Spell::SelectImplicitTargetDestTargets(), Spell::SelectImplicitTrajTargets(), Spell::SelectSpellTargets(), Spell::SendLogExecute(), Spell::SetSpellValue(), Unit::SpellDamageBonusDone(), Unit::SpellHealingBonusDone(), Unit::SpellHitResult(), boss_onyxia::SpellHitTarget(), boss_rotface::boss_rotfaceAI::SpellHitTarget(), SpellInfo(), SpellValue::SpellValue(), Acore::Hyperlinks::LinkTags::trade::StoreTo(), boss_anub_arak::boss_anub_arakAI::SummonHelpers(), go_wind_stone::go_wind_stoneAI::SummonNPC(), Spell::update(), Player::UpdateAttackPowerAndDamage(), Spell::UpdateChanneledTargetList(), spell_deathwhisper_dark_reckoning::Validate(), spell_mage_living_bomb::Validate(), spell_broggok_poison_cloud::Validate(), spell_dru_wild_growth::Validate(), spell_gen_eject_passenger::Validate(), and Spell::WriteCastResultInfo().

◆ EquippedItemClass

◆ EquippedItemInventoryTypeMask

int32 SpellInfo::EquippedItemInventoryTypeMask

◆ EquippedItemSubClassMask

◆ ExcludeCasterAuraSpell

uint32 SpellInfo::ExcludeCasterAuraSpell

◆ ExcludeTargetAuraSpell

◆ ExplicitTargetMask

uint32 SpellInfo::ExplicitTargetMask

◆ FacingCasterFlags

uint32 SpellInfo::FacingCasterFlags

Referenced by Spell::CheckRange(), and SpellInfo().

◆ Id

uint32 SpellInfo::Id

Referenced by Player::_addSpell(), Aura::_ApplyForTarget(), Spell::_cast(), Unit::_CreateAuraApplication(), Spell::_handle_finish_phase(), _IsPositiveEffect(), Unit::_TryStackingOrRefreshingExistingAura(), Aura::_UnapplyForTarget(), Unit::_UpdateAutoRepeatSpell(), _SpellScript::_Validate(), SpellScript::_Validate(), AuraScript::_Validate(), boss_grand_champion::boss_grand_championAI::AddCreatureAddonAuras(), AddItemsSetItem(), Player::addSpell(), Player::AddSpellAndCategoryCooldowns(), Creature::AddSpellCooldown(), CharmInfo::AddSpellToActionBar(), spell_mage_master_of_elements::AfterCheckProc(), Unit::ApplyEffectModifiers(), Player::ApplyEquipSpell(), Unit::ApplySpellDispelImmunity(), Unit::CalcAbsorbResist(), Unit::CalcArmorReducedDamage(), SpellEffectInfo::CalcDamageMultiplier(), CalcPowerCost(), SpellEffectInfo::CalcRadius(), ThreatCalcHelper::calcThreat(), AuraEffect::CalculateAmount(), Unit::CalculateSpellDamageTaken(), SpellEffectInfo::CalcValueMultiplier(), Spell::CanAutoCast(), Spell::cancel(), Spell::CanOpenLock(), Unit::CanRestoreMana(), Aura::CanStackWith(), Player::CastItemCombatSpell(), Player::CastItemUseSpell(), spell_yogg_saron_in_the_maws_of_the_old_god::spell_yogg_saron_in_the_maws_of_the_old_god_SpellScript::CheckCast(), Spell::CheckCast(), Spell::CheckCasterAuras(), Spell::CheckEffectTarget(), CheckElixirStacking(), CheckLocation(), Spell::CheckPetCast(), spell_sindragosa_unchained_magic::spell_sindragosa_unchained_magic_AuraScript::CheckProc(), spell_dk_dancing_rune_weapon::CheckProc(), spell_mage_brain_freeze::CheckProc(), spell_warr_improved_spell_reflection::CheckProc(), Spell::CheckRange(), Spell::CheckRuneCost(), CheckShapeshift(), cast_commandscript::CheckSpellExistsAndIsValid(), SpellMgr::CheckSpellGroupStackRules(), SpellMgr::ComputeIsSpellValid(), Unit::DealDamage(), Unit::DealMeleeDamage(), Spell::Delayed(), Spell::DelayedChannel(), Spell::DoAllEffectOnTarget(), Spell::DoCreateItem(), Spell::DoSpellHitOnUnit(), Spell::DoTriggersOnSpellHit(), Spell::EffectActivateObject(), Spell::EffectActivateRune(), Spell::EffectAddFarsight(), Spell::EffectAddHonor(), Spell::EffectCreateItem2(), Spell::EffectCreateRandomItem(), Spell::EffectCreateTamedPet(), Spell::EffectDisEnchant(), Spell::EffectDispel(), Spell::EffectDuel(), Spell::EffectDummy(), Spell::EffectEnchantHeldItem(), Spell::EffectEnchantItemPerm(), Spell::EffectEnchantItemPrismatic(), Spell::EffectEnchantItemTmp(), Spell::EffectEnergize(), Spell::EffectEnergizePct(), Spell::EffectForceCast(), Spell::EffectForceDeselect(), Spell::EffectHeal(), Spell::EffectInstaKill(), Spell::EffectInterruptCast(), Spell::EffectJumpDest(), Spell::EffectKillCredit(), Spell::EffectLearnPetSpell(), Spell::EffectLearnSpell(), Spell::EffectOpenLock(), Spell::EffectPersistentAA(), Spell::EffectPlayMusic(), Spell::EffectPlaySound(), Spell::EffectPowerBurn(), Spell::EffectPowerDrain(), Spell::EffectSanctuary(), Spell::EffectSchoolDMG(), Spell::EffectScriptEffect(), Spell::EffectSendEvent(), Spell::EffectSendTaxi(), Spell::EffectStealBeneficialBuff(), Spell::EffectSummonObject(), Spell::EffectSummonObjectWild(), Spell::EffectSummonPet(), Spell::EffectSummonType(), Spell::EffectTameCreature(), Spell::EffectTaunt(), Spell::EffectTeleportUnits(), Spell::EffectTransmitted(), Spell::EffectTriggerMissileSpell(), Spell::EffectTriggerRitualOfSummoning(), Spell::EffectTriggerSpell(), Spell::EffectWeaponDmg(), Spell::finish(), Spell::GetDebugInfo(), GetDiminishingReturnsGroupForSpell(), AuraEffect::GetId(), Aura::GetId(), GetMaxRange(), Unit::GetPPMProcChance(), SpellMgr::GetSpellForDifficultyFromSpell(), Spell::handle_immediate(), spell_igb_on_gunship_deck::spell_igb_on_gunship_deck_AuraScript::HandleApply(), misc_commandscript::HandleAuraCommand(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModSchoolImmunity(), Unit::HandleAuraProc(), Unit::HandleAuraRaidProcFromCharge(), Unit::HandleAuraRaidProcFromChargeWithValue(), Aura::HandleAuraSpecificMods(), WorldSession::HandleCancelChanneling(), cast_commandscript::HandleCastBackCommand(), cast_commandscript::HandleCastCommand(), cast_commandscript::HandleCastDestCommand(), cast_commandscript::HandleCastDistCommand(), cast_commandscript::HandleCastSelfCommand(), cast_commandscript::HandleCastTargetCommad(), spell_hun_readiness::HandleDummy(), spell_mage_cold_snap::HandleDummy(), spell_rog_preparation::HandleDummy(), Unit::HandleDummyAuraProc(), Spell::HandleEffects(), learn_commandscript::HandleLearnAllMySpellsCommand(), Acore::PlayerCommand::HandleLearnSpellCommand(), lookup_commandscript::HandleLookupSpellIdCommand(), AuraEffect::HandlePeriodicDummyAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), pet_commandscript::HandlePetLearnCommand(), pet_commandscript::HandlePetUnlearnCommand(), spell_deathbringer_blood_link_aura::spell_deathbringer_blood_link_AuraScript::HandleProc(), spell_item_blood_draining_enchant::HandleProc(), spell_warr_sweeping_strikes::HandleProc(), Unit::HandleProcTriggerSpell(), ArenaSpectator::HandleResetCommand(), spell_dreamwalker_summon_portal::spell_dreamwalker_summon_portal_SpellScript::HandleScript(), spell_gen_profession_research::HandleScript(), spell_gen_dalaran_disguise::HandleScript(), spell_item_book_of_glyph_mastery::HandleScript(), spell_capacitus_polarity_charge::HandleTargets(), spell_thaddius_pos_neg_charge::spell_thaddius_pos_neg_charge_SpellScript::HandleTargets(), Spell::HandleThreatSpells(), Acore::PlayerCommand::HandleUnlearnSpellCommand(), WorldSession::HandleUpdateMissileTrajectory(), Pet::InitLevelupSpellsForLevel(), IsAbilityLearnedWithProfession(), IsAbilityOfSkillType(), IsDifferentRankOf(), IsExplicitDiscovery(), Unit::IsImmunedToSchool(), Unit::IsImmunedToSpell(), Totem::IsImmunedToSpellEffect(), IsMultiSlotAura(), IsStrongerAuraActive(), LinkValidator< LinkTags::enchant >::IsTextValid(), Unit::IsTriggeredAtSpellProcEvent(), LoadAuraState(), ObjectMgr::LoadCreatureAddons(), ObjectMgr::LoadCreatureTemplateAddons(), LoadLootTemplates_Spell(), SpellMgr::LoadPetLevelupSpellMap(), ObjectMgr::LoadQuests(), Aura::LoadScripts(), Spell::LoadScripts(), SpellMgr::LoadSpellInfoCustomAttributes(), SpellMgr::LoadSpellProcEvents(), SpellMgr::LoadSpellProcs(), ObjectMgr::LoadSpellScriptNames(), LoadSpellSpecific(), Unit::MagicSpellHitResult(), Unit::MeleeDamageBonusDone(), Unit::MeleeSpellHitResult(), Unit::ModSpellCastTime(), NeedsToBeTriggeredByCaster(), spell_xt002_gravity_bomb_aura::spell_xt002_gravity_bomb_aura_AuraScript::OnRemove(), Spell::OnSpellLaunch(), Acore::AbsorbAuraOrderPred::operator()(), Unit::PetSpellFail(), Spell::prepare(), Player::PrepareCharmAISpells(), Spell::prepareDataForTriggerSystem(), Spell::PrepareTriggersExecutedOnHit(), Unit::ProcDamageAndSpellFor(), SmartScript::ProcessEvent(), spell_pri_power_word_shield_aura::ReflectDamage(), RemoveItemsSetItem(), Player::RestoreSpellMods(), Spell::SelectEffectImplicitTargets(), Spell::SelectImplicitCasterDestTargets(), Spell::SelectImplicitChainTargets(), Spell::SelectImplicitChannelTargets(), Spell::SelectImplicitNearbyTargets(), Spell::SendChannelStart(), Player::SendCooldownEvent(), Unit::SendHealSpellLog(), Spell::SendInterrupted(), Spell::SendLogExecute(), Spell::SendSpellCooldown(), Spell::SendSpellGo(), Unit::SendSpellNonMeleeDamageLog(), Unit::SendSpellNonMeleeReflectLog(), Spell::SendSpellStart(), AuraEffect::SendTickImmune(), Unit::SetCurrentCastedSpell(), boss_mimiron::boss_mimironAI::SetData(), CharmInfo::SetSpellAutocast(), Player::SetSpellModTakingSpell(), list_commandscript::ShouldListAura(), Unit::SpellCriticalDamageBonus(), Unit::SpellCriticalHealingBonus(), Unit::SpellDamageBonusDone(), Unit::SpellDamageBonusTaken(), Unit::SpellDoneCritChance(), Unit::SpellHealingBonusDone(), Unit::SpellHealingBonusTaken(), npc_kerlonian::npc_kerlonianAI::SpellHit(), npc_ringo::npc_ringoAI::SpellHit(), boss_pyroguard_emberseer::boss_pyroguard_emberseerAI::SpellHit(), npc_netherspite_infernal::SpellHit(), boss_terestian_illhoof::SpellHit(), npc_mograine::npc_mograineAI::SpellHit(), boss_halazzi::boss_halazziAI::SpellHit(), npc_janalai_firebomb::npc_janalai_firebombAI::SpellHit(), npc_janalai_egg::npc_janalai_eggAI::SpellHit(), npc_harrison_jones::npc_harrison_jonesAI::SpellHit(), npc_crate_helper::npc_crate_helperAI::SpellHit(), boss_buru::SpellHit(), boss_ossirian::SpellHit(), npc_omen::npc_omenAI::SpellHit(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::SpellHit(), boss_eadric::boss_eadricAI::SpellHit(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::SpellHit(), boss_grand_champion::boss_grand_championAI::SpellHit(), npc_frost_sphere::npc_frost_sphereAI::SpellHit(), boss_prince_keleseth_icc::boss_prince_kelesethAI::SpellHit(), boss_prince_taldaram_icc::boss_prince_taldaramAI::SpellHit(), boss_prince_valanar_icc::boss_prince_valanarAI::SpellHit(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::SpellHit(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::SpellHit(), npc_saurfang_event::npc_saurfang_eventAI::SpellHit(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), npc_putricide_oozeAI::SpellHit(), boss_the_lich_king::boss_the_lich_kingAI::SpellHit(), npc_tirion_fordring_tft::npc_tirion_fordringAI::SpellHit(), boss_valithria_dreamwalker::boss_valithria_dreamwalkerAI::SpellHit(), npc_argent_captainAI::SpellHit(), boss_malygos::boss_malygosAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), boss_ionar::boss_ionarAI::SpellHit(), npc_ulduar_toasty_fire::npc_ulduar_toasty_fireAI::SpellHit(), npc_ulduar_hodir_priest::npc_ulduar_hodir_priestAI::SpellHit(), npc_ulduar_hodir_druid::npc_ulduar_hodir_druidAI::SpellHit(), npc_ulduar_hodir_shaman::npc_ulduar_hodir_shamanAI::SpellHit(), npc_ulduar_hodir_mage::npc_ulduar_hodir_mageAI::SpellHit(), npc_ulduar_iron_construct::npc_ulduar_iron_constructAI::SpellHit(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::SpellHit(), npc_ulduar_vx001::npc_ulduar_vx001AI::SpellHit(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::SpellHit(), npc_ulduar_flames_spread::npc_ulduar_flames_spreadAI::SpellHit(), npc_ichor_globule::npc_ichor_globuleAI::SpellHit(), npc_wintergarde_gryphon::SpellHit(), npc_frostbrood_skytalon::npc_frostbrood_skytalonAI::SpellHit(), npc_vics_flying_machine::npc_vics_flying_machineAI::SpellHit(), npc_captured_rageclaw::npc_captured_rageclawAI::SpellHit(), npc_infernal_attacker::npc_infernal_attackerAI::SpellHit(), npc_shadowmoon_tuber_node::npc_shadowmoon_tuber_nodeAI::SpellHit(), npc_venomhide_hatchling::npc_venomhide_hatchlingAI::SpellHit(), boss_majordomo::boss_majordomoAI::SpellHit(), boss_attumen::SpellHit(), npc_balance_of_light_and_shadow::npc_balance_of_light_and_shadowAI::SpellHit(), npc_dark_iron_guzzler::SpellHit(), boss_headless_horseman::SpellHit(), boss_headless_horseman_pumpkin::SpellHit(), npc_pilgrims_bounty_chair::SpellHit(), npc_pilgrims_bounty_plate::SpellHit(), boss_veklor::SpellHit(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), npc_isle_of_conquest_turret::npc_isle_of_conquest_turretAI::SpellHit(), boss_gothik::boss_gothikAI::SpellHit(), boss_steelbreaker::boss_steelbreakerAI::SpellHit(), boss_runemaster_molgeim::boss_runemaster_molgeimAI::SpellHit(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::SpellHit(), boss_thorim_pillar::boss_thorim_pillarAI::SpellHit(), boss_thorim_runic_colossus::boss_thorim_runic_colossusAI::SpellHit(), boss_yoggsaron::boss_yoggsaronAI::SpellHit(), npc_overlord_drakuru_betrayal::npc_overlord_drakuru_betrayalAI::SpellHit(), npc_pet_darting_hatchling::SpellHit(), npc_death_knight_initiate::npc_death_knight_initiateAI::SpellHit(), npc_crusade_persuaded::npc_crusade_persuadedAI::SpellHit(), npc_zuljin_vortex::npc_zuljin_vortexAI::SpellHit(), npc_forest_frog::npc_forest_frogAI::SpellHit(), npc_zulian_prowler::npc_zulian_prowlerAI::SpellHit(), npc_midsummer_ribbon_pole_target::SpellHit(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::SpellHit(), npc_troll_volunteer::npc_troll_volunteerAI::SpellHit(), boss_jaraxxus::boss_jaraxxusAI::SpellHit(), boss_sister_svalna::boss_sister_svalnaAI::SpellHit(), boss_faerlina::boss_faerlinaAI::SpellHit(), boss_razuvious::boss_razuviousAI::SpellHit(), npc_living_constellation::npc_living_constellationAI::SpellHit(), boss_ignis::boss_ignisAI::SpellHit(), boss_razorscale::boss_razorscaleAI::SpellHit(), npc_sinkhole_kill_credit::npc_sinkhole_kill_creditAI::SpellHit(), npc_torturer_lecraft::npc_torturer_lecraftAI::SpellHit(), npc_wounded_skirmisher::SpellHit(), npc_venture_co_straggler::npc_venture_co_stragglerAI::SpellHit(), npc_tournament_training_dummy::npc_tournament_training_dummyAI::SpellHit(), npc_brunnhildar_prisoner::npc_brunnhildar_prisonerAI::SpellHit(), npc_drakuru_shackles::npc_drakuru_shacklesAI::SpellHit(), npc_storm_cloud::npc_storm_cloudAI::SpellHit(), npc_deaths_door_fell_cannon_target_bunny::npc_deaths_door_fell_cannon_target_bunnyAI::SpellHit(), npc_nether_drake::npc_nether_drakeAI::SpellHit(), npc_enslaved_netherwing_drake::SpellHit(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::SpellHit(), npc_injured_patient::npc_injured_patientAI::SpellHit(), npc_garments_of_quests::npc_garments_of_questsAI::SpellHit(), npc_greengill_slave::npc_greengill_slaveAI::SpellHit(), npc_dark_iron_attack_generator::SpellHit(), npc_soh_fire_trigger::SpellHit(), npc_hallows_end_train_fire::SpellHit(), boss_headless_horseman_head::SpellHit(), npc_midsummer_torch_target::SpellHit(), npc_cos_stratholme_citizien::npc_cos_stratholme_citizienAI::SpellHit(), boss_viscidus::SpellHit(), boss_magus_telestra::boss_magus_telestraAI::SpellHit(), boss_flame_leviathan::boss_flame_leviathanAI::SpellHit(), boss_thorim::boss_thorimAI::SpellHit(), boss_yoggsaron_immortal_guardian::boss_yoggsaron_immortal_guardianAI::SpellHit(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::SpellHit(), npc_jungle_punch_target::npc_jungle_punch_targetAI::SpellHit(), npc_iron_watcher::npc_iron_watcherAI::SpellHit(), npc_wild_wyrm::npc_wild_wyrmAI::SpellHit(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::SpellHit(), npc_beryl_sorcerer::npc_beryl_sorcererAI::SpellHit(), npc_imprisoned_beryl_sorcerer::npc_imprisoned_beryl_sorcererAI::SpellHit(), boss_black_knight::boss_black_knightAI::SpellHitTarget(), boss_bronjahm::boss_bronjahmAI::SpellHitTarget(), boss_garfrost::boss_garfrostAI::SpellHitTarget(), boss_deathbringer_saurfang::boss_deathbringer_saurfangAI::SpellHitTarget(), npc_vengeful_shade::npc_vengeful_shadeAI::SpellHitTarget(), npc_putricide_oozeAI::SpellHitTarget(), boss_the_lich_king::boss_the_lich_kingAI::SpellHitTarget(), npc_maghar_captive::npc_maghar_captiveAI::SpellHitTarget(), npc_kurenai_captive::npc_kurenai_captiveAI::SpellHitTarget(), boss_quartermaster_zigris::SpellHitTarget(), npc_demonic_vapor_trail::npc_demonic_vapor_trailAI::SpellHitTarget(), boss_headless_horseman_head::SpellHitTarget(), boss_taldaram::SpellHitTarget(), boss_moorabi::boss_moorabiAI::SpellHitTarget(), boss_volkhan::boss_volkhanAI::SpellHitTarget(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::SpellHitTarget(), boss_ymiron::boss_ymironAI::SpellHitTarget(), npc_frostwing_vrykul::npc_frostwing_vrykulAI::SpellHitTarget(), boss_malchezaar::SpellHitTarget(), npc_black_knight_ghoul::npc_black_knight_ghoulAI::SpellHitTarget(), npc_nerubian_burrower::npc_nerubian_burrowerAI::SpellHitTarget(), boss_devourer_of_souls::boss_devourer_of_soulsAI::SpellHitTarget(), npc_hor_lich_king::npc_hor_lich_kingAI::SpellHitTarget(), boss_ick::boss_ickAI::SpellHitTarget(), npc_pos_collapsing_icicle::npc_pos_collapsing_icicleAI::SpellHitTarget(), npc_pos_leader_second::npc_pos_leader_secondAI::SpellHitTarget(), boss_festergut::boss_festergutAI::SpellHitTarget(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::SpellHitTarget(), boss_lord_marrowgar::SpellHitTarget(), boss_rotface::boss_rotfaceAI::SpellHitTarget(), boss_sindragosa::boss_sindragosaAI::SpellHitTarget(), boss_sister_svalna::boss_sister_svalnaAI::SpellHitTarget(), npc_icc_valkyr_herald::npc_icc_valkyr_heraldAI::SpellHitTarget(), npc_oculus_drake::npc_oculus_drakeAI::SpellHitTarget(), boss_flame_leviathan::boss_flame_leviathanAI::SpellHitTarget(), boss_freya::boss_freyaAI::SpellHitTarget(), boss_vezax::boss_vezaxAI::SpellHitTarget(), boss_hodir::boss_hodirAI::SpellHitTarget(), npc_ulduar_hodir_shaman::npc_ulduar_hodir_shamanAI::SpellHitTarget(), npc_ulduar_proximity_mine::npc_ulduar_proximity_mineAI::SpellHitTarget(), npc_ulduar_rocket_strike_trigger::npc_ulduar_rocket_strike_triggerAI::SpellHitTarget(), boss_cyanigosa::boss_cyanigosaAI::SpellHitTarget(), npc_q24545_lich_king::npc_q24545_lich_kingAI::SpellHitTarget(), npc_simon_bunny::npc_simon_bunnyAI::SpellHitTarget(), boss_lethon::boss_lethonAI::SpellHitTarget(), npc_chesspiece::SpellHitTarget(), boss_darkmaster_gandling::boss_darkmaster_gandlingAI::SpellHitTarget(), boss_headless_horseman::SpellHitTarget(), npc_pilgrims_bounty_chair::SpellHitTarget(), boss_epoch::boss_epochAI::SpellHitTarget(), boss_ouro::SpellHitTarget(), npc_anubisath_sentinel::aqsentinelAI::SpellHitTarget(), boss_grobbulus::boss_grobbulusAI::SpellHitTarget(), boss_sapphiron::boss_sapphironAI::SpellHitTarget(), boss_thorim::boss_thorimAI::SpellHitTarget(), npc_xt002_heart::npc_xt002_heartAI::SpellHitTarget(), boss_yoggsaron_sara::boss_yoggsaron_saraAI::SpellHitTarget(), boss_yoggsaron_voice::boss_yoggsaron_voiceAI::SpellHitTarget(), boss_skadi_grauf::boss_skadi_graufAI::SpellHitTarget(), boss_emalon::boss_emalonAI::SpellHitTarget(), npc_overlord_drakuru_betrayal::npc_overlord_drakuru_betrayalAI::SpellHitTarget(), boss_shirrak_the_dead_watcher::SpellHitTarget(), npc_pet_gen_soul_trader_beacon::SpellHitTarget(), npc_pet_gen_fetch_ball::SpellHitTarget(), SpellInfo(), Unit::SpellPctHealingModsDone(), Spell::SummonGuardian(), go_wind_stone::go_wind_stoneAI::SummonNPC(), Spell::TakePower(), Spell::TakeRunePower(), Pet::ToggleAutocast(), CharmInfo::ToggleCreatureAutocast(), Spell::TriggerGlobalCooldown(), Spell::update(), PetAI::UpdateAI(), Spell::UpdateChanneledTargetList(), ValidateAttribute6SpellDamageMods(), ObjectMgr::ValidateSpellScripts(), Spell::WriteCastResultInfo(), Spell::~Spell(), and SpellEvent::~SpellEvent().

◆ InterruptFlags

◆ ManaCost

◆ ManaCostPercentage

◆ ManaCostPerlevel

uint32 SpellInfo::ManaCostPerlevel

◆ ManaPerSecond

◆ ManaPerSecondPerLevel

uint32 SpellInfo::ManaPerSecondPerLevel

◆ MaxAffectedTargets

◆ MaxLevel

◆ MaxTargetLevel

uint32 SpellInfo::MaxTargetLevel

Referenced by SpellInfo().

◆ Mechanic

◆ PowerType

◆ PreventionType

◆ ProcChance

◆ ProcCharges

uint32 SpellInfo::ProcCharges

◆ ProcFlags

◆ RangeEntry

◆ Rank

std::array<char const*, 16> SpellInfo::Rank

Referenced by SpellInfo().

◆ Reagent

◆ ReagentCount

◆ RecoveryTime

◆ RequiresSpellFocus

◆ RuneCostID

◆ SchoolMask

◆ Speed

◆ SpellFamilyFlags

flag96 SpellInfo::SpellFamilyFlags

Referenced by Player::CanNoReagentCast(), SpellMgr::CanSpellTriggerProcOnEvent(), Aura::CanStackWith(), Spell::CheckItems(), spell_dk_dancing_rune_weapon::CheckProc(), spell_gen_black_magic_enchant::CheckProc(), spell_mage_brain_freeze::CheckProc(), spell_pal_seal_of_light::CheckProc(), spell_pri_vampiric_touch::CheckProc(), spell_hun_ascpect_of_the_viper::CheckProc(), Spell::EffectEnchantItemTmp(), Spell::EffectHeal(), Spell::EffectSanctuary(), Spell::EffectSchoolDMG(), Spell::EffectWeaponDmg(), Unit::GetAuraEffect(), GetDiminishingReturnsGroupForSpell(), GetDiminishingReturnsLimitDuration(), spell_rog_deadly_poison::HandleAfterHit(), Unit::HandleAuraProc(), Unit::HandleAuraRaidProcFromChargeWithValue(), Aura::HandleAuraSpecificMods(), spell_rog_preparation::HandleDummy(), Unit::HandleDummyAuraProc(), AuraEffect::HandlePeriodicDummyAuraTick(), AuraEffect::HandlePeriodicManaLeechAuraTick(), spell_pal_sacred_shield_base::HandleProc(), Unit::HandleProcTriggerSpell(), spell_hun_chimera_shot::HandleScriptEffect(), IsAffectedBySpellMod(), AuraEffect::IsAffectedOnSpell(), IsRangedWeaponSpell(), SpellMgr::IsSpellProcEventCanTriggeredBy(), LoadAuraState(), SpellMgr::LoadSpellInfoCorrections(), SpellMgr::LoadSpellInfoCustomAttributes(), LoadSpellSpecific(), Unit::MeleeDamageBonusDone(), Unit::MeleeDamageBonusTaken(), Unit::ModSpellDuration(), Spell::prepareDataForTriggerSystem(), Spell::PrepareTriggersExecutedOnHit(), Unit::ProcDamageAndSpellFor(), spell_dru_enrage::RecalculateBaseArmor(), Unit::RemoveAurasByShapeShift(), Unit::RemoveAurasDueToSpellByDispel(), Unit::RemoveAurasWithFamily(), Player::RestoreSpellMods(), Unit::SpellDamageBonusDone(), Unit::SpellHealingBonusTaken(), SpellInfo(), Unit::SpellPctDamageModsDone(), Unit::SpellTakenCritChance(), and ValidateAttribute6SpellDamageMods().

◆ SpellFamilyName

uint32 SpellInfo::SpellFamilyName

Referenced by Player::AddSpellAndCategoryCooldowns(), SpellMgr::CanSpellTriggerProcOnEvent(), Aura::CanStackWith(), Spell::CheckCast(), Spell::CheckItems(), spell_dru_omen_of_clarity::CheckProc(), spell_gen_allow_proc_from_spells_with_cost::CheckProc(), spell_gen_black_magic_enchant::CheckProc(), spell_item_essence_of_life::CheckProc(), spell_pri_vampiric_touch::CheckProc(), CheckTargetCreatureType(), ComputeIsStackableWithRanks(), Spell::EffectDispel(), Spell::EffectDummy(), Spell::EffectEnchantItemTmp(), Spell::EffectEnergize(), Spell::EffectHeal(), Spell::EffectLeapBack(), Spell::EffectSanctuary(), Spell::EffectSchoolDMG(), Spell::EffectScriptEffect(), Spell::EffectTeleportUnits(), Spell::EffectTriggerSpell(), Spell::EffectWeaponDmg(), Unit::GetAuraEffect(), GetDiminishingReturnsGroupForSpell(), GetDiminishingReturnsLimitDuration(), spell_rog_deadly_poison::HandleAfterHit(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModShapeshift(), Unit::HandleAuraProc(), Unit::HandleAuraRaidProcFromChargeWithValue(), spell_hun_readiness::HandleDummy(), spell_mage_cold_snap::HandleDummy(), spell_rog_preparation::HandleDummy(), Unit::HandleDummyAuraProc(), Spell::HandleLaunchPhase(), learn_commandscript::HandleLearnAllMySpellsCommand(), AuraEffect::HandlePeriodicManaLeechAuraTick(), AuraEffect::HandlePeriodicTriggerSpellAuraTick(), spell_pal_sacred_shield_base::HandleProc(), Unit::HandleProcTriggerSpell(), IsAffectedBySpellMod(), AuraEffect::IsAffectedOnSpell(), IsRangedWeaponSpell(), SpellMgr::IsSpellProcEventCanTriggeredBy(), Unit::IsTriggeredAtSpellProcEvent(), LoadAuraState(), SpellMgr::LoadSpellInfoCorrections(), SpellMgr::LoadSpellInfoCustomAttributes(), LoadSpellSpecific(), Unit::MeleeDamageBonusDone(), Unit::MeleeDamageBonusTaken(), Unit::ModSpellDuration(), Acore::AbsorbAuraOrderPred::operator()(), Player::PrepareCharmAISpells(), Spell::prepareDataForTriggerSystem(), Spell::PrepareTriggersExecutedOnHit(), Unit::ProcDamageAndSpellFor(), spell_dru_enrage::RecalculateBaseArmor(), Unit::RemoveAurasByShapeShift(), Unit::RemoveAurasDueToSpellByDispel(), Unit::RemoveAurasWithFamily(), Player::RemoveSpellMods(), ArenaSpectator::ShouldSendAura(), Unit::SpellDamageBonusDone(), Unit::SpellHealingBonusDone(), Unit::SpellHealingBonusTaken(), Unit::SpellHitResult(), SpellInfo(), Unit::SpellPctDamageModsDone(), Unit::SpellPctHealingModsDone(), Unit::SpellTakenCritChance(), and ValidateAttribute6SpellDamageMods().

◆ SpellIconID

◆ SpellLevel

◆ SpellName

◆ SpellPriority

uint32 SpellInfo::SpellPriority

Referenced by Player::ApplySpellMod(), and SpellInfo().

◆ SpellVisual

◆ StackAmount

◆ Stances

◆ StancesNot

uint32 SpellInfo::StancesNot

Referenced by CheckShapeshift(), and SpellInfo().

◆ StartRecoveryCategory

◆ StartRecoveryTime

◆ TargetAuraSpell

uint32 SpellInfo::TargetAuraSpell

Referenced by CheckTarget(), and SpellInfo().

◆ TargetAuraState

uint32 SpellInfo::TargetAuraState

◆ TargetAuraStateNot

uint32 SpellInfo::TargetAuraStateNot

Referenced by CheckTarget(), and SpellInfo().

◆ TargetCreatureType

uint32 SpellInfo::TargetCreatureType

◆ Targets

◆ Totem

std::array<uint32, 2> SpellInfo::Totem

◆ TotemCategory

std::array<uint32, 2> SpellInfo::TotemCategory