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 const *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)
772{
773 Id = spellEntry->Id;
774 CategoryEntry = spellEntry->Category ? sSpellCategoryStore.LookupEntry(spellEntry->Category) : nullptr;
775 Dispel = spellEntry->Dispel;
776 Mechanic = spellEntry->Mechanic;
777 Attributes = spellEntry->Attributes;
778 AttributesEx = spellEntry->AttributesEx;
779 AttributesEx2 = spellEntry->AttributesEx2;
780 AttributesEx3 = spellEntry->AttributesEx3;
781 AttributesEx4 = spellEntry->AttributesEx4;
782 AttributesEx5 = spellEntry->AttributesEx5;
783 AttributesEx6 = spellEntry->AttributesEx6;
784 AttributesEx7 = spellEntry->AttributesEx7;
785 AttributesCu = 0;
786 Stances = spellEntry->Stances;
787 StancesNot = spellEntry->StancesNot;
788 Targets = spellEntry->Targets;
789 TargetCreatureType = spellEntry->TargetCreatureType;
790 RequiresSpellFocus = spellEntry->RequiresSpellFocus;
791 FacingCasterFlags = spellEntry->FacingCasterFlags;
792 CasterAuraState = spellEntry->CasterAuraState;
793 TargetAuraState = spellEntry->TargetAuraState;
794 CasterAuraStateNot = spellEntry->CasterAuraStateNot;
795 TargetAuraStateNot = spellEntry->TargetAuraStateNot;
796 CasterAuraSpell = spellEntry->CasterAuraSpell;
797 TargetAuraSpell = spellEntry->TargetAuraSpell;
798 ExcludeCasterAuraSpell = spellEntry->ExcludeCasterAuraSpell;
799 ExcludeTargetAuraSpell = spellEntry->ExcludeTargetAuraSpell;
800 CastTimeEntry = spellEntry->CastingTimeIndex ? sSpellCastTimesStore.LookupEntry(spellEntry->CastingTimeIndex) : nullptr;
801 RecoveryTime = spellEntry->RecoveryTime;
802 CategoryRecoveryTime = spellEntry->CategoryRecoveryTime;
803 StartRecoveryCategory = spellEntry->StartRecoveryCategory;
804 StartRecoveryTime = spellEntry->StartRecoveryTime;
805 InterruptFlags = spellEntry->InterruptFlags;
806 AuraInterruptFlags = spellEntry->AuraInterruptFlags;
807 ChannelInterruptFlags = spellEntry->ChannelInterruptFlags;
808 ProcFlags = spellEntry->ProcFlags;
809 ProcChance = spellEntry->ProcChance;
810 ProcCharges = spellEntry->ProcCharges;
811 MaxLevel = spellEntry->MaxLevel;
812 BaseLevel = spellEntry->BaseLevel;
813 SpellLevel = spellEntry->SpellLevel;
814 DurationEntry = spellEntry->DurationIndex ? sSpellDurationStore.LookupEntry(spellEntry->DurationIndex) : nullptr;
815 PowerType = spellEntry->PowerType;
816 ManaCost = spellEntry->ManaCost;
817 ManaCostPerlevel = spellEntry->ManaCostPerlevel;
818 ManaPerSecond = spellEntry->ManaPerSecond;
819 ManaPerSecondPerLevel = spellEntry->ManaPerSecondPerLevel;
820 ManaCostPercentage = spellEntry->ManaCostPercentage;
821 RuneCostID = spellEntry->RuneCostID;
822 RangeEntry = spellEntry->RangeIndex ? sSpellRangeStore.LookupEntry(spellEntry->RangeIndex) : nullptr;
823 Speed = spellEntry->Speed;
824 StackAmount = spellEntry->StackAmount;
825 Totem = spellEntry->Totem;
826 Reagent = spellEntry->Reagent;
827 ReagentCount = spellEntry->ReagentCount;
828 EquippedItemClass = spellEntry->EquippedItemClass;
829 EquippedItemSubClassMask = spellEntry->EquippedItemSubClassMask;
830 EquippedItemInventoryTypeMask = spellEntry->EquippedItemInventoryTypeMask;
831 TotemCategory = spellEntry->TotemCategory;
832 SpellVisual = spellEntry->SpellVisual;
833 SpellIconID = spellEntry->SpellIconID;
834 ActiveIconID = spellEntry->ActiveIconID;
835 SpellPriority = spellEntry->SpellPriority;
836 SpellName = spellEntry->SpellName;
837 Rank = spellEntry->Rank;
838 MaxTargetLevel = spellEntry->MaxTargetLevel;
839 MaxAffectedTargets = spellEntry->MaxAffectedTargets;
840 SpellFamilyName = spellEntry->SpellFamilyName;
841 SpellFamilyFlags = spellEntry->SpellFamilyFlags;
842 DmgClass = spellEntry->DmgClass;
843 PreventionType = spellEntry->PreventionType;
844 AreaGroupId = spellEntry->AreaGroupId;
845 SchoolMask = spellEntry->SchoolMask;
846 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
847 Effects[i] = SpellEffectInfo(spellEntry, this, i);
848
849 ChainEntry = nullptr;
851
852 // Mine
853 _isStackableWithRanks = false;
854 _isSpellValid = true;
855 _isCritCapable = false;
856 _requireCooldownInfo = false;
857}
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:1381
TotemCategory
Definition: SharedDefines.h:3055
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 ( )
860{
862}
void _UnloadImplicitTargetConditionLists()
Definition: SpellInfo.cpp:2857

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 ( )
2577{
2578 bool srcSet = false;
2579 bool dstSet = false;
2580 uint32 targetMask = Targets;
2581 // prepare target mask using effect target entries
2582 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2583 {
2584 if (!Effects[i].IsEffect())
2585 continue;
2586 targetMask |= Effects[i].TargetA.GetExplicitTargetMask(srcSet, dstSet);
2587 targetMask |= Effects[i].TargetB.GetExplicitTargetMask(srcSet, dstSet);
2588
2589 // add explicit target flags based on spell effects which have EFFECT_IMPLICIT_TARGET_EXPLICIT and no valid target provided
2590 if (Effects[i].GetImplicitTargetType() != EFFECT_IMPLICIT_TARGET_EXPLICIT)
2591 continue;
2592
2593 // extend explicit target mask only if valid targets for effect could not be provided by target types
2594 uint32 effectTargetMask = Effects[i].GetMissingTargetMask(srcSet, dstSet, targetMask);
2595
2596 // don't add explicit object/dest flags when spell has no max range
2597 if (GetMaxRange(true) == 0.0f && GetMaxRange(false) == 0.0f)
2599 targetMask |= effectTargetMask;
2600 }
2601 ExplicitTargetMask = targetMask;
2602}
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:2307
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
2605{
2606 // not found a single positive spell with this attribute
2608 return false;
2609
2610 switch (Mechanic)
2611 {
2613 return true;
2614 default:
2615 break;
2616 }
2617
2618 // Special case: effects which determine positivity of whole spell
2619 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2620 {
2621 if (Effects[i].IsAura() && Effects[i].ApplyAuraName == SPELL_AURA_MOD_STEALTH)
2622 return true;
2623 }
2624
2625 switch (Effects[effIndex].Effect)
2626 {
2627 case SPELL_EFFECT_DUMMY:
2628 // some explicitly required dummy effect sets
2629 switch (Id)
2630 {
2631 case 28441:
2632 return false; // AB Effect 000
2633 default:
2634 break;
2635 }
2636 break;
2637 // always positive effects (check before target checks that provided non-positive result in some case for positive effects)
2638 case SPELL_EFFECT_HEAL:
2643 return true;
2645 return false;
2646
2648 return false;
2649
2651 {
2652 bool only = true;
2653 for (int i = EFFECT_0; i <= EFFECT_2; ++i)
2654 {
2655 if (Effects[effIndex].Effect > 0 && Effects[effIndex].Effect != SPELL_EFFECT_SCHOOL_DAMAGE)
2656 only = false;
2657 if (Effects[effIndex].Effect == SPELL_EFFECT_GAMEOBJECT_DAMAGE)
2658 return false;
2659 }
2660 // effects with school damage only cannot be positive...
2661 if (only)
2662 return false;
2663 break;
2664 }
2667 {
2668 for (int i = EFFECT_0; i <= EFFECT_2; ++i)
2669 if (Effects[effIndex].Effect == SPELL_EFFECT_GAMEOBJECT_DAMAGE)
2670 return false;
2671 break;
2672 }
2673
2674 // non-positive aura use
2677 {
2678 switch (Effects[effIndex].ApplyAuraName)
2679 {
2680 case SPELL_AURA_MOD_DAMAGE_DONE: // dependent from bas point sign (negative -> negative)
2687 if (Effects[effIndex].CalcValue() < 0)
2688 return false;
2689 break;
2690 case SPELL_AURA_MOD_DAMAGE_TAKEN: // dependent from bas point sign (positive -> negative)
2691 if (Effects[effIndex].CalcValue() > 0)
2692 return false;
2693 break;
2696 if (Effects[effIndex].CalcValue() > 0)
2697 return true; // some expected positive spells have SPELL_ATTR1_NEGATIVE
2698 break;
2700 return true;
2704 if (!deep)
2705 {
2706 if (SpellInfo const* spellTriggeredProto = sSpellMgr->GetSpellInfo(Effects[effIndex].TriggerSpell))
2707 {
2708 // negative targets of main spell return early
2709 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2710 {
2711 if (!spellTriggeredProto->Effects[i].Effect)
2712 continue;
2713 // if non-positive trigger cast targeted to positive target this main cast is non-positive
2714 // this will place this spell auras as debuffs
2715 if (_IsPositiveTarget(spellTriggeredProto->Effects[i].TargetA.GetTarget(), spellTriggeredProto->Effects[i].TargetB.GetTarget()) && !spellTriggeredProto->_IsPositiveEffect(i, true))
2716 return false;
2717 }
2718 }
2719 }
2721 // many positive auras have negative triggered spells at damage for example and this not make it negative (it can be canceled for example)
2722 break;
2723 case SPELL_AURA_MOD_STUN: //have positive and negative spells, we can't sort its correctly at this moment.
2724 if (effIndex == 0 && Effects[1].Effect == 0 && Effects[2].Effect == 0)
2725 return false; // but all single stun aura spells is negative
2726 break;
2728 if (Id == 24740) // Wisp Costume
2729 return true;
2730 return false;
2734 case SPELL_AURA_GHOST:
2739 return false;
2740 case SPELL_AURA_PERIODIC_DAMAGE: // used in positive spells also.
2741 // part of negative spell if casted at self (prevent cancel)
2742 if (Effects[effIndex].TargetA.GetTarget() == TARGET_UNIT_CASTER)
2743 return false;
2744 break;
2745 case SPELL_AURA_MOD_DECREASE_SPEED: // used in positive spells also
2746 // part of positive spell if casted at self
2747 if (Effects[effIndex].TargetA.GetTarget() != TARGET_UNIT_CASTER)
2748 return false;
2749 // but not this if this first effect (didn't find better check)
2750 if (HasAttribute(SPELL_ATTR0_AURA_IS_DEBUFF) && effIndex == 0)
2751 return false;
2752 break;
2754 {
2755 // non-positive immunities
2756 switch (Effects[effIndex].MiscValue)
2757 {
2758 case MECHANIC_BANDAGE:
2759 case MECHANIC_SHIELD:
2760 case MECHANIC_MOUNT:
2762 return false;
2763 default:
2764 break;
2765 }
2766 break;
2767 }
2768 case SPELL_AURA_ADD_FLAT_MODIFIER: // mods
2770 {
2771 // non-positive mods
2772 switch (Effects[effIndex].MiscValue)
2773 {
2774 case SPELLMOD_COST: // dependent from bas point sign (negative -> positive)
2775 if (Effects[effIndex].CalcValue() > 0)
2776 {
2777 if (!deep)
2778 {
2779 bool negative = true;
2780 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2781 {
2782 if (i != effIndex)
2783 if (_IsPositiveEffect(i, true))
2784 {
2785 negative = false;
2786 break;
2787 }
2788 }
2789 if (negative)
2790 return false;
2791 }
2792 }
2793 break;
2794 default:
2795 break;
2796 }
2797 break;
2798 }
2799 default:
2800 break;
2801 }
2802 break;
2803 }
2804 default:
2805 break;
2806 }
2807
2808 // non-positive targets
2809 if (!_IsPositiveTarget(Effects[effIndex].TargetA.GetTarget(), Effects[effIndex].TargetB.GetTarget()))
2810 return false;
2811
2812 // negative spell if triggered spell is negative
2813 if (!deep && !Effects[effIndex].ApplyAuraName && Effects[effIndex].TriggerSpell)
2814 {
2815 if (SpellInfo const* spellTriggeredProto = sSpellMgr->GetSpellInfo(Effects[effIndex].TriggerSpell))
2816 if (!spellTriggeredProto->_IsPositiveSpell())
2817 return false;
2818 }
2819
2820 // ok, positive
2821 return true;
2822}
@ 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:30
@ EFFECT_2
Definition: SharedDefines.h:32
@ SPELL_EFFECT_DUMMY
Definition: SharedDefines.h:753
@ SPELL_EFFECT_ENERGIZE_PCT
Definition: SharedDefines.h:887
@ SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
Definition: SharedDefines.h:878
@ SPELL_EFFECT_HEAL
Definition: SharedDefines.h:760
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition: SharedDefines.h:894
@ SPELL_EFFECT_KNOCK_BACK
Definition: SharedDefines.h:848
@ SPELL_EFFECT_SCHOOL_DAMAGE
Definition: SharedDefines.h:752
@ SPELL_EFFECT_GAMEOBJECT_DAMAGE
Definition: SharedDefines.h:837
@ SPELL_EFFECT_LEARN_SPELL
Definition: SharedDefines.h:786
@ SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
Definition: SharedDefines.h:879
@ SPELL_EFFECT_HEAL_PCT
Definition: SharedDefines.h:886
@ SPELL_EFFECT_SKILL_STEP
Definition: SharedDefines.h:794
@ SPELL_EFFECT_APPLY_AURA
Definition: SharedDefines.h:756
@ TARGET_UNIT_CASTER
Definition: SharedDefines.h:1382
@ MECHANIC_MOUNT
Definition: SharedDefines.h:1318
@ MECHANIC_INVULNERABILITY
Definition: SharedDefines.h:1322
@ MECHANIC_BANDAGE
Definition: SharedDefines.h:1313
@ MECHANIC_IMMUNE_SHIELD
Definition: SharedDefines.h:1326
@ MECHANIC_SHIELD
Definition: SharedDefines.h:1316
@ SPELL_ATTR0_AURA_IS_DEBUFF
Definition: SharedDefines.h:380
Definition: SpellInfo.h:314
static bool _IsPositiveTarget(uint32 targetA, uint32 targetB)
Definition: SpellInfo.cpp:2834
bool _IsPositiveEffect(uint8 effIndex, bool deep) const
Definition: SpellInfo.cpp:2604
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
2825{
2826 // spells with at least one negative effect are considered negative
2827 // some self-applied spells have negative effects but in self casting case negative check ignored.
2828 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2829 if (!_IsPositiveEffect(i, true))
2830 return false;
2831 return true;
2832}

References _IsPositiveEffect(), and MAX_SPELL_EFFECTS.

Referenced by Spell::HandleThreatSpells().

◆ _IsPositiveTarget()

bool SpellInfo::_IsPositiveTarget ( uint32  targetA,
uint32  targetB 
)
static
2835{
2836 // non-positive targets
2837 switch (targetA)
2838 {
2848 return false;
2849 default:
2850 break;
2851 }
2852 if (targetB)
2853 return _IsPositiveTarget(targetB, 0);
2854 return true;
2855}
@ TARGET_DEST_DYNOBJ_ENEMY
Definition: SharedDefines.h:1404
@ TARGET_UNIT_DEST_AREA_ENEMY
Definition: SharedDefines.h:1393
@ TARGET_UNIT_CONE_ENEMY_104
Definition: SharedDefines.h:1480
@ TARGET_UNIT_SRC_AREA_ENEMY
Definition: SharedDefines.h:1392
@ TARGET_DEST_TARGET_ENEMY
Definition: SharedDefines.h:1429
@ TARGET_UNIT_TARGET_ENEMY
Definition: SharedDefines.h:1387
@ TARGET_UNIT_CONE_ENEMY_54
Definition: SharedDefines.h:1430
@ TARGET_UNIT_CONE_ENEMY_24
Definition: SharedDefines.h:1400
@ TARGET_UNIT_NEARBY_ENEMY
Definition: SharedDefines.h:1383

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 ( )
2858{
2859 // find the same instances of ConditionList and delete them.
2860 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2861 {
2862 ConditionList* cur = Effects[i].ImplicitTargetConditions;
2863 if (!cur)
2864 continue;
2865 for (uint8 j = i; j < MAX_SPELL_EFFECTS; ++j)
2866 {
2867 if (Effects[j].ImplicitTargetConditions == cur)
2868 Effects[j].ImplicitTargetConditions = nullptr;
2869 }
2870 delete cur;
2871 }
2872}
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
2337{
2338 // not all spells have cast time index and this is all is pasiive abilities
2339 if (!CastTimeEntry)
2340 return 0;
2341
2342 int32 castTime = CastTimeEntry->CastTime;
2344 castTime += 500;
2345
2346 if (caster)
2347 caster->ModSpellCastTime(this, castTime, spell);
2348
2349 return (castTime > 0) ? uint32(castTime) : 0;
2350}
std::int32_t int32
Definition: Define.h:104
@ SPELL_ATTR0_USES_RANGED_SLOT
Definition: SharedDefines.h:355
void ModSpellCastTime(SpellInfo const *spellProto, int32 &castTime, Spell *spell=nullptr)
Definition: Unit.cpp:14943
bool IsAutoRepeatRangedSpell() const
Definition: SpellInfo.cpp:1267
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
2386{
2387 // Spell drain all exist power on cast (Only paladin lay of Hands)
2389 {
2390 // If power type - health drain all
2391 if (PowerType == POWER_HEALTH)
2392 return caster->GetHealth();
2393 // Else drain all power
2394 if (PowerType < MAX_POWERS)
2395 return caster->GetPower(Powers(PowerType));
2396 LOG_ERROR("spells", "SpellInfo::CalcPowerCost: Unknown power type '{}' in spell {}", PowerType, Id);
2397 return 0;
2398 }
2399
2400 // Base powerCost
2401 int32 powerCost = ManaCost;
2402 // PCT cost from total amount
2404 {
2405 switch (PowerType)
2406 {
2407 // health as power used
2408 case POWER_HEALTH:
2409 powerCost += int32(CalculatePct(caster->GetCreateHealth(), ManaCostPercentage));
2410 break;
2411 case POWER_MANA:
2412 powerCost += int32(CalculatePct(caster->GetCreateMana(), ManaCostPercentage));
2413 break;
2414 case POWER_RAGE:
2415 case POWER_FOCUS:
2416 case POWER_ENERGY:
2417 case POWER_HAPPINESS:
2418 powerCost += int32(CalculatePct(caster->GetMaxPower(Powers(PowerType)), ManaCostPercentage));
2419 break;
2420 case POWER_RUNE:
2421 case POWER_RUNIC_POWER:
2422 LOG_DEBUG("spells.aura", "CalculateManaCost: Not implemented yet!");
2423 break;
2424 default:
2425 LOG_ERROR("spells", "CalculateManaCost: Unknown power type '{}' in spell {}", PowerType, Id);
2426 return 0;
2427 }
2428 }
2429 SpellSchools school = GetFirstSchoolInMask(schoolMask);
2430 // Flat mod from caster auras by spell school
2431 powerCost += caster->GetInt32Value(static_cast<uint16>(UNIT_FIELD_POWER_COST_MODIFIER) + school);
2432
2433 // Shiv - costs 20 + weaponSpeed*10 energy (apply only to non-triggered spell with energy cost)
2435 {
2436 uint32 speed = 0;
2437 if (SpellShapeshiftEntry const* ss = sSpellShapeshiftStore.LookupEntry(caster->GetShapeshiftForm()))
2438 speed = ss->attackSpeed;
2439 else
2440 {
2443 slot = OFF_ATTACK;
2444
2445 speed = caster->GetAttackTime(slot);
2446 }
2447
2448 powerCost += speed / 100;
2449 }
2450
2451 // Apply cost mod by spell
2452 if (Player* modOwner = caster->GetSpellModOwner())
2453 modOwner->ApplySpellMod(Id, SPELLMOD_COST, powerCost, spell);
2454
2455 if (!caster->IsControlledByPlayer())
2456 {
2458 {
2459 GtNPCManaCostScalerEntry const* spellScaler = sGtNPCManaCostScalerStore.LookupEntry(SpellLevel - 1);
2460 GtNPCManaCostScalerEntry const* casterScaler = sGtNPCManaCostScalerStore.LookupEntry(caster->GetLevel() - 1);
2461 if (spellScaler && casterScaler)
2462 powerCost *= casterScaler->ratio / spellScaler->ratio;
2463 }
2464 }
2465
2466 // PCT mod from user auras by school
2467 powerCost = int32(powerCost * (1.0f + caster->GetFloatValue(static_cast<uint16>(UNIT_FIELD_POWER_COST_MULTIPLIER) + school)));
2468 if (powerCost < 0)
2469 powerCost = 0;
2470 return powerCost;
2471}
std::uint16_t uint16
Definition: Define.h:109
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:171
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:240
@ MAX_POWERS
Definition: SharedDefines.h:248
@ POWER_RAGE
Definition: SharedDefines.h:242
@ POWER_HEALTH
Definition: SharedDefines.h:250
@ POWER_RUNIC_POWER
Definition: SharedDefines.h:247
@ POWER_HAPPINESS
Definition: SharedDefines.h:245
@ POWER_ENERGY
Definition: SharedDefines.h:244
@ POWER_MANA
Definition: SharedDefines.h:241
@ POWER_RUNE
Definition: SharedDefines.h:246
@ POWER_FOCUS
Definition: SharedDefines.h:243
SpellSchools
Definition: SharedDefines.h:254
@ SPELL_ATTR1_USE_ALL_MANA
Definition: SharedDefines.h:392
SpellSchools GetFirstSchoolInMask(SpellSchoolMask mask)
Definition: SharedDefines.h:290
@ SPELL_ATTR3_REQUIRES_OFF_HAND_WEAPON
Definition: SharedDefines.h:489
@ SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL
Definition: SharedDefines.h:373
@ SPELL_ATTR4_WEAPON_SPEED_COST_SCALING
Definition: SharedDefines.h:512
Definition: Player.h:1056
Player * GetSpellModOwner() const
Definition: Unit.cpp:16829
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
1217{
1219}
@ SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL
Definition: SharedDefines.h:382

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
1335{
1336 // Xinef: Passive auras cannot be dispelled
1337 if (aura->IsPassive())
1338 return false;
1339
1340 // These auras (like Divine Shield) can't be dispelled
1341 if (aura->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
1342 return false;
1343
1344 // These spells (like Mass Dispel) can dispell all auras
1346 return true;
1347
1348 // These auras (Cyclone for example) are not dispelable
1349 if ((aura->HasAttribute(SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS) && aura->Mechanic != MECHANIC_NONE)
1350 || aura->HasAttribute(SPELL_ATTR2_NO_SCHOOL_IMMUNITIES))
1351 {
1352 return false;
1353 }
1354
1355 return true;
1356}
@ SPELL_ATTR2_NO_SCHOOL_IMMUNITIES
Definition: SharedDefines.h:454
@ SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS
Definition: SharedDefines.h:407
@ MECHANIC_NONE
Definition: SharedDefines.h:1297
@ SPELL_ATTR0_NO_IMMUNITIES
Definition: SharedDefines.h:383

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
1308{
1309 // aura can't be pierced
1310 if (!aura || aura->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
1311 {
1312 return false;
1313 }
1314
1315 // these spells pierce all avalible spells (Resurrection Sickness for example)
1317 return true;
1318
1319 // these spells (Cyclone for example) can pierce all...
1321 {
1322 if (aura->Mechanic != MECHANIC_IMMUNE_SHIELD &&
1323 aura->Mechanic != MECHANIC_INVULNERABILITY &&
1324 aura->Mechanic != MECHANIC_BANISH)
1325 {
1326 return true;
1327 }
1328
1329 }
1330
1331 return false;
1332}
@ MECHANIC_BANISH
Definition: SharedDefines.h:1315

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
2875{
2876 if (!caster)
2877 {
2878 return true;
2879 }
2880
2881 // xinef: check spell group
2882 uint32 groupId = sSpellMgr->GetSpellGroup(Id);
2884 {
2885 return true;
2886 }
2887
2888 SpellGroupSpecialFlags sFlag = sSpellMgr->GetSpellGroupSpecialFlags(Id);
2889 for (uint8 i = EFFECT_0; i < MAX_SPELL_EFFECTS; ++i)
2890 {
2891 if (!Effects[i].IsAura())
2892 {
2893 continue;
2894 }
2895
2896 Unit::AuraApplicationMap const& Auras = caster->GetAppliedAuras();
2897 for (Unit::AuraApplicationMap::const_iterator itr = Auras.begin(); itr != Auras.end(); ++itr)
2898 {
2899 // xinef: aura is not groupped or in different group
2900 uint32 auraGroup = sSpellMgr->GetSpellGroup(itr->first);
2901 if (auraGroup != groupId)
2902 {
2903 continue;
2904 }
2905
2906 // Cannot apply guardian/battle elixir if flask is present
2908 {
2909 SpellGroupSpecialFlags sAuraFlag = sSpellMgr->GetSpellGroupSpecialFlags(itr->first);
2911 {
2912 return false;
2913 }
2914 }
2915 }
2916 }
2917
2918 return true;
2919}
@ 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
1923{
1924 uint32 neededTargets = GetExplicitTargetMask();
1925 if (!target)
1926 {
1928 if (!(neededTargets & TARGET_FLAG_GAMEOBJECT_ITEM) || !itemTarget)
1930 return SPELL_CAST_OK;
1931 }
1932
1933 if (Unit const* unitTarget = target->ToUnit())
1934 {
1936 {
1937 if (neededTargets & TARGET_FLAG_UNIT_ENEMY)
1938 if (caster->_IsValidAttackTarget(unitTarget, this))
1939 return SPELL_CAST_OK;
1940 if (neededTargets & TARGET_FLAG_UNIT_ALLY
1941 || (neededTargets & TARGET_FLAG_UNIT_PARTY && caster->IsInPartyWith(unitTarget))
1942 || (neededTargets & TARGET_FLAG_UNIT_RAID && caster->IsInRaidWith(unitTarget)))
1943 if (caster->_IsValidAssistTarget(unitTarget, this))
1944 return SPELL_CAST_OK;
1945 if (neededTargets & TARGET_FLAG_UNIT_MINIPET)
1946 if (unitTarget->GetGUID() == caster->GetCritterGUID())
1947 return SPELL_CAST_OK;
1948 if (neededTargets & TARGET_FLAG_UNIT_PASSENGER)
1949 if (unitTarget->IsOnVehicle(caster))
1950 return SPELL_CAST_OK;
1952 }
1953 }
1954 return SPELL_CAST_OK;
1955}
@ 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:933
@ SPELL_CAST_OK
Definition: SharedDefines.h:1110
Unit * ToUnit()
Definition: Object.h:200
Definition: Unit.h:1302
uint32 GetExplicitTargetMask() const
Definition: SpellInfo.cpp:2040

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 const *  player = nullptr,
bool  strict = true 
) const
1474{
1475 // normal case
1476 if (AreaGroupId > 0)
1477 {
1478 bool found = false;
1479 AreaGroupEntry const* groupEntry = sAreaGroupStore.LookupEntry(AreaGroupId);
1480 while (groupEntry)
1481 {
1482 for (uint8 i = 0; i < MAX_GROUP_AREA_IDS; ++i)
1483 if (groupEntry->AreaId[i] == zone_id || groupEntry->AreaId[i] == area_id)
1484 found = true;
1485 if (found || !groupEntry->nextGroup)
1486 break;
1487 // Try search in next group
1488 groupEntry = sAreaGroupStore.LookupEntry(groupEntry->nextGroup);
1489 }
1490
1491 if (!found)
1493 }
1494
1495 // continent limitation (virtual continent)
1496 if (HasAttribute(SPELL_ATTR4_ONLY_FLYING_AREAS) && (area_id || zone_id))
1497 {
1498 AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(area_id);
1499 if (!areaEntry)
1500 {
1501 areaEntry = sAreaTableStore.LookupEntry(zone_id);
1502 }
1503
1504 if (!areaEntry || !areaEntry->IsFlyable() || (strict && (areaEntry->flags & AREA_FLAG_NO_FLY_ZONE) != 0) || !player->canFlyInZone(map_id, zone_id, this))
1505 {
1507 }
1508 }
1509
1510 // raid instance limitation
1512 {
1513 MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
1514 if (!mapEntry || mapEntry->IsRaid())
1516 }
1517
1518 // DB base check (if non empty then must fit at least single for allow)
1519 SpellAreaMapBounds saBounds = sSpellMgr->GetSpellAreaMapBounds(Id);
1520 if (saBounds.first != saBounds.second)
1521 {
1522 for (SpellAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr)
1523 {
1524 if (itr->second.IsFitToRequirements(player, zone_id, area_id))
1525 return SPELL_CAST_OK;
1526 }
1528 }
1529
1530 // bg spell checks
1531 switch (Id)
1532 {
1533 case 23333: // Warsong Flag
1534 case 23335: // Silverwing Flag
1535 return map_id == 489 && player && player->InBattleground() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1536 case 34976: // Netherstorm Flag
1537 return map_id == 566 && player && player->InBattleground() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1538 case 2584: // Waiting to Resurrect
1539 case 22011: // Spirit Heal Channel
1540 case 22012: // Spirit Heal
1541 case 24171: // Resurrection Impact Visual
1542 case 42792: // Recently Dropped Flag
1543 case 43681: // Inactive
1544 case 44535: // Spirit Heal (mana)
1545 {
1546 MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
1547 if (!mapEntry)
1549
1550 return zone_id == 4197 || (mapEntry->IsBattleground() && player && player->InBattleground()) ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1551 }
1552 case 32724: // Gold Team (Alliance)
1553 case 32725: // Green Team (Alliance)
1554 case 35774: // Gold Team (Horde)
1555 case 35775: // Green Team (Horde)
1556 {
1557 MapEntry const* mapEntry = sMapStore.LookupEntry(map_id);
1558 if (!mapEntry)
1560
1561 return mapEntry->IsBattleArena() && player && player->InBattleground() ? SPELL_CAST_OK : SPELL_FAILED_REQUIRES_AREA;
1562 }
1563 }
1564
1565 return SPELL_CAST_OK;
1566}
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:267
#define MAX_GROUP_AREA_IDS
Definition: DBCStructure.h:546
@ SPELL_FAILED_INCORRECT_AREA
Definition: SharedDefines.h:960
@ SPELL_FAILED_NOT_IN_RAID_INSTANCE
Definition: SharedDefines.h:1088
@ SPELL_FAILED_REQUIRES_AREA
Definition: SharedDefines.h:1022
@ SPELL_ATTR4_ONLY_FLYING_AREAS
Definition: SharedDefines.h:528
@ SPELL_ATTR6_NOT_IN_RAID_INSTANCES
Definition: SharedDefines.h:587
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
1419{
1420 // talents that learn spells can have stance requirements that need ignore
1421 // (this requirement only for client-side stance show in talent description)
1422 if (GetTalentSpellCost(Id) > 0 &&
1424 return SPELL_CAST_OK;
1425
1426 uint32 stanceMask = (form ? 1 << (form - 1) : 0);
1427
1428 if (stanceMask & StancesNot) // can explicitly not be casted in this stance
1430
1431 if (stanceMask & Stances) // can explicitly be casted in this stance
1432 return SPELL_CAST_OK;
1433
1434 bool actAsShifted = false;
1435 SpellShapeshiftEntry const* shapeInfo = nullptr;
1436 if (form > 0)
1437 {
1438 shapeInfo = sSpellShapeshiftStore.LookupEntry(form);
1439 if (!shapeInfo)
1440 {
1441 LOG_ERROR("spells", "GetErrorAtShapeshiftedCast: unknown shapeshift {}", form);
1442 return SPELL_CAST_OK;
1443 }
1444 actAsShifted = !(shapeInfo->flags1 & 1); // shapeshift acts as normal form for spells
1445 }
1446
1447 if (actAsShifted)
1448 {
1449 if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFTED)) // not while shapeshifted
1451 else if (Stances != 0) // needs other shapeshift
1453 }
1454 else
1455 {
1456 // needs shapeshift
1459 }
1460
1461 // Check if stance disables cast of not-stance spells
1462 // Example: cannot cast any other spells in zombie or ghoul form
1464 if (shapeInfo && shapeInfo->flags1 & 0x400)
1465 {
1466 if (!(stanceMask & Stances))
1468 }
1469
1470 return SPELL_CAST_OK;
1471}
uint32 GetTalentSpellCost(uint32 spellId)
Definition: DBCStores.cpp:682
@ SPELL_ATTR2_ALLOW_WHILE_NOT_SHAPESHIFTED
Definition: SharedDefines.h:447
@ SPELL_ATTR0_NOT_SHAPESHIFTED
Definition: SharedDefines.h:370
@ SPELL_FAILED_ONLY_SHAPESHIFT
Definition: SharedDefines.h:1015
@ SPELL_FAILED_NOT_SHAPESHIFT
Definition: SharedDefines.h:989
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
1745{
1746 if (AttributesEx & SPELL_ATTR1_EXCLUDE_CASTER && caster == target)
1748
1749 // check visibility - ignore stealth for implicit (area) targets
1750 if (!(AttributesEx6 & SPELL_ATTR6_IGNORE_PHASE_SHIFT) && !caster->CanSeeOrDetect(target, implicit))
1752
1753 Unit const* unitTarget = target->ToUnit();
1754
1755 // creature/player specific target checks
1756 if (unitTarget)
1757 {
1758 // xinef: spells cannot be cast if player is in fake combat also
1759 if (AttributesEx & SPELL_ATTR1_ONLY_PEACEFUL_TARGETS && (unitTarget->IsInCombat() || unitTarget->IsPetInCombat()))
1761
1762 // only spells with SPELL_ATTR3_ONLY_ON_GHOSTS can target ghosts
1764 {
1767 else
1769 }
1770
1771 if (caster != unitTarget)
1772 {
1773 if (caster->GetTypeId() == TYPEID_PLAYER)
1774 {
1775 // Do not allow these spells to target creatures not tapped by us (Banish, Polymorph, many quest spells)
1777 if (Creature const* targetCreature = unitTarget->ToCreature())
1778 if (targetCreature->hasLootRecipient() && !targetCreature->isTappedBy(caster->ToPlayer()))
1780
1782 {
1783 Creature const* targetCreature = unitTarget->ToCreature();
1784 if (!targetCreature)
1786
1789 }
1790
1791 // Not allow disarm unarmed player
1793 {
1794 bool valid = false;
1795 for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i)
1796 {
1797 AuraType disarmAuraType = SPELL_AURA_MOD_DISARM;
1798 switch (i)
1799 {
1800 case OFF_ATTACK:
1801 disarmAuraType = SPELL_AURA_MOD_DISARM_OFFHAND;
1802 break;
1803 case RANGED_ATTACK:
1804 disarmAuraType = SPELL_AURA_MOD_DISARM_RANGED;
1805 break;
1806 }
1807
1808 if (HasAura(disarmAuraType))
1809 {
1810 if (Player const* player = unitTarget->ToPlayer())
1811 {
1812 if (player->GetWeaponForAttack(WeaponAttackType(BASE_ATTACK + i), true))
1813 {
1814 valid = true;
1815 break;
1816 }
1817 }
1818 else if (unitTarget->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + i))
1819 {
1820 valid = true;
1821 break;
1822 }
1823 }
1824 }
1825
1826 if (!valid)
1827 {
1829 }
1830 }
1831 }
1832 }
1833 }
1834 // corpse specific target checks
1835 else if (Corpse const* corpseTarget = target->ToCorpse())
1836 {
1837 // cannot target bare bones
1838 if (corpseTarget->GetType() == CORPSE_BONES)
1840 // we have to use owner for some checks (aura preventing resurrection for example)
1841 if (Player* owner = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()))
1842 unitTarget = owner;
1843 // we're not interested in corpses without owner
1844 else
1846 }
1847 // other types of objects - always valid
1848 else return SPELL_CAST_OK;
1849
1850 // corpseOwner and unit specific target checks
1851 if (AttributesEx3 & SPELL_ATTR3_ONLY_ON_PLAYER && !unitTarget->ToPlayer())
1853
1854 if (!IsAllowingDeadTarget() && !unitTarget->IsAlive())
1856
1857 // check this flag only for implicit targets (chain and area), allow to explicitly target units for spells like Shield of Righteousness
1860
1861 // checked in Unit::IsValidAttack/AssistTarget, shouldn't be checked for ENTRY targets
1862 //if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))
1863 // return SPELL_FAILED_BAD_TARGETS;
1864
1865 //if (!(AttributesEx6 & SPELL_ATTR6_NO_AURA_LOG)
1866
1867 if (!CheckTargetCreatureType(unitTarget))
1868 {
1869 if (target->GetTypeId() == TYPEID_PLAYER)
1871 else
1873 }
1874
1875 // check GM mode and GM invisibility - only for player casts (npc casts are controlled by AI) and negative spells
1876 if (unitTarget != caster && (caster->IsControlledByPlayer() || !IsPositive()) && unitTarget->GetTypeId() == TYPEID_PLAYER)
1877 {
1878 if (!unitTarget->ToPlayer()->IsVisible())
1880
1881 if (unitTarget->ToPlayer()->IsGameMaster())
1883 }
1884
1885 // not allow casting on flying player
1888
1889 /* TARGET_UNIT_MASTER gets blocked here for passengers, because the whole idea of this check is to
1890 not allow passengers to be implicitly hit by spells, however this target type should be an exception,
1891 if this is left it kills spells that award kill credit from vehicle to master (few spells),
1892 the use of these 2 covers passenger target check, logically, if vehicle cast this to master it should always hit
1893 him, because it would be it's passenger, there's no such case where this gets to fail legitimacy, this problem
1894 cannot be solved from within the check in other way since target type cannot be called for the spell currently
1895 Spell examples: [ID - 52864 Devour Water, ID - 52862 Devour Wind, ID - 49370 Wyrmrest Defender: Destabilize Azure Dragonshrine Effect] */
1896 if (!caster->IsVehicle() && caster->GetCharmerOrOwner() != target)
1897 {
1898 if (TargetAuraState && !unitTarget->HasAuraState(AuraStateType(TargetAuraState), this, caster))
1900
1901 if (TargetAuraStateNot && unitTarget->HasAuraState(AuraStateType(TargetAuraStateNot), this, caster))
1903 }
1904
1905 if (TargetAuraSpell && !unitTarget->HasAura(sSpellMgr->GetSpellIdForDifficulty(TargetAuraSpell, caster)))
1907
1908 if (ExcludeTargetAuraSpell && unitTarget->HasAura(sSpellMgr->GetSpellIdForDifficulty(ExcludeTargetAuraSpell, caster)))
1910
1914
1915 // xinef: check if stronger aura is active
1916 if (IsStrongerAuraActive(caster, unitTarget))
1918
1919 return SPELL_CAST_OK;
1920}
@ 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:640
@ SPELL_EFFECT_SELF_RESURRECT
Definition: SharedDefines.h:844
@ SPELL_EFFECT_RESURRECT
Definition: SharedDefines.h:768
@ SPELL_EFFECT_RESURRECT_NEW
Definition: SharedDefines.h:863
@ SPELL_ATTR2_CANNOT_CAST_ON_TAPPED
Definition: SharedDefines.h:434
@ SPELL_ATTR1_EXCLUDE_CASTER
Definition: SharedDefines.h:410
@ SPELL_ATTR1_ONLY_PEACEFUL_TARGETS
Definition: SharedDefines.h:399
@ SPELL_ATTR3_ONLY_ON_GHOSTS
Definition: SharedDefines.h:477
@ SPELL_ATTR3_ONLY_ON_PLAYER
Definition: SharedDefines.h:473
@ MECHANIC_DISARM
Definition: SharedDefines.h:1300
AuraStateType
Definition: SharedDefines.h:1260
@ SPELL_FAILED_TARGET_NOT_PLAYER
Definition: SharedDefines.h:1043
@ SPELL_FAILED_TARGET_NO_POCKETS
Definition: SharedDefines.h:1044
@ SPELL_FAILED_TARGET_IS_PLAYER
Definition: SharedDefines.h:1038
@ SPELL_FAILED_CANT_CAST_ON_TAPPED
Definition: SharedDefines.h:939
@ SPELL_FAILED_TARGET_AURASTATE
Definition: SharedDefines.h:1032
@ SPELL_FAILED_BM_OR_INVISGOD
Definition: SharedDefines.h:1080
@ SPELL_FAILED_TARGETS_DEAD
Definition: SharedDefines.h:1030
@ SPELL_FAILED_AURA_BOUNCED
Definition: SharedDefines.h:930
@ SPELL_FAILED_TARGET_NOT_GHOST
Definition: SharedDefines.h:1064
@ SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED
Definition: SharedDefines.h:1107
@ SPELL_FAILED_TARGET_NO_WEAPONS
Definition: SharedDefines.h:1045
@ SPELL_FAILED_TARGET_AFFECTING_COMBAT
Definition: SharedDefines.h:1031
@ SPELL_ATTR6_DO_NOT_CHAIN_TO_CROWD_CONTROLLED_TARGETS
Definition: SharedDefines.h:584
@ SPELL_ATTR6_IGNORE_PHASE_SHIFT
Definition: SharedDefines.h:589
Player * FindPlayer(ObjectGuid const guid)
Definition: ObjectAccessor.cpp:250
Definition: Corpse.h:49
Definition: Creature.h:46
CreatureTemplate const * GetCreatureTemplate() const
Definition: Creature.h:197
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:1146
bool CanFreeMove() const
Definition: Unit.h:1413
bool IsAlive() const
Definition: Unit.h:1820
bool IsPetInCombat() const
Definition: Unit.h:1703
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5620
bool IsInFlight() const
Definition: Unit.h:1688
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
Definition: Unit.cpp:10538
bool IsVisible() const
Definition: Unit.h:2139
bool HasAuraType(AuraType auraType) const
Definition: Unit.cpp:5627
bool IsInCombat() const
Definition: Unit.h:1700
bool HaveLootFor(uint32 loot_id) const
Definition: LootMgr.h:224
bool IsStrongerAuraActive(Unit const *caster, Unit const *target) const
Definition: SpellInfo.cpp:1568
bool IsRequiringDeadTarget() const
Definition: SpellInfo.cpp:1206
bool IsDeathPersistent() const
Definition: SpellInfo.cpp:1201
bool CheckTargetCreatureType(Unit const *target) const
Definition: SpellInfo.cpp:1957
bool IsAllowingDeadTarget() const
Definition: SpellInfo.cpp:1211
bool HasEffect(SpellEffects effect) const
Definition: SpellInfo.cpp:869
bool IsPositive() const
Definition: SpellInfo.cpp:1221
bool HasAura(AuraType aura) const
Definition: SpellInfo.cpp:877

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
1958{
1959 // Curse of Doom & Exorcism: not find another way to fix spell target check :/
1961 {
1962 // not allow cast at player
1963 if (target->GetTypeId() == TYPEID_PLAYER)
1964 return false;
1965 else
1966 return true;
1967 }
1968 uint32 creatureType = target->GetCreatureTypeMask();
1969 return !TargetCreatureType || !creatureType || (creatureType & TargetCreatureType);
1970}
@ SPELLFAMILY_WARLOCK
Definition: SharedDefines.h:3505
uint32 GetCategory() const
Definition: SpellInfo.cpp:864

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

Referenced by CheckTarget().

◆ ComputeIsCritCapable()

bool SpellInfo::ComputeIsCritCapable ( ) const
1140{
1141 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1142 {
1143 switch (Effects[i].Effect)
1144 {
1147 case SPELL_EFFECT_HEAL:
1155 return true;
1156 }
1157 }
1158 return false;
1159}
@ SPELL_EFFECT_POWER_BURN
Definition: SharedDefines.h:812
@ SPELL_EFFECT_HEALTH_LEECH
Definition: SharedDefines.h:759
@ SPELL_EFFECT_WEAPON_DAMAGE
Definition: SharedDefines.h:808
@ SPELL_EFFECT_NORMALIZED_WEAPON_DMG
Definition: SharedDefines.h:871
@ SPELL_EFFECT_HEAL_MECHANICAL
Definition: SharedDefines.h:825
@ SPELL_EFFECT_WEAPON_PERCENT_DAMAGE
Definition: SharedDefines.h:781
@ SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL
Definition: SharedDefines.h:767

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
1097{
1098 if (IsPassive())
1099 return false;
1101 return false;
1103 return false;
1104
1106 return false;
1107
1108 // All stance spells. if any better way, change it.
1109 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1110 {
1111 switch (SpellFamilyName)
1112 {
1114 // Paladin aura Spell
1116 return false;
1117 break;
1118 case SPELLFAMILY_DRUID:
1119 // Druid form Spell
1120 if (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA &&
1121 Effects[i].ApplyAuraName == SPELL_AURA_MOD_SHAPESHIFT)
1122 return false;
1123 break;
1124 }
1125 }
1126 return true;
1127}
@ SPELL_AURA_MOD_SHAPESHIFT
Definition: SpellAuraDefines.h:99
@ SPELL_EFFECT_APPLY_AREA_AURA_RAID
Definition: SharedDefines.h:815
@ SPELLFAMILY_PALADIN
Definition: SharedDefines.h:3510
@ SPELLFAMILY_DRUID
Definition: SharedDefines.h:3507
bool IsProfessionOrRiding() const
Definition: SpellInfo.cpp:922
bool IsPassive() const
Definition: SpellInfo.cpp:1082
bool IsAbilityLearnedWithProfession() const
Definition: SpellInfo.cpp:972

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

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
2046{
2047 return _auraState;
2048}
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
2032{
2033 // If dispel all
2034 if (type == DISPEL_ALL)
2035 return DISPEL_ALL_MASK;
2036 else
2037 return uint32(1 << type);
2038}
#define DISPEL_ALL_MASK
Definition: SharedDefines.h:1358
@ DISPEL_ALL
Definition: SharedDefines.h:1351

References DISPEL_ALL, and DISPEL_ALL_MASK.

◆ GetDuration()

◆ GetEffect()

◆ GetEffectMechanic()

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

References Effects, Mechanic, and MECHANIC_NONE.

Referenced by Unit::GetMechanicResistChance().

◆ GetEffectMechanicMask()

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

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
2492{
2493 if (!ChainEntry)
2494 return nullptr;
2495 return ChainEntry->last;
2496}
SpellInfo const * last
Definition: SpellMgr.h:558

References ChainEntry, and SpellChainNode::last.

◆ GetMaxDuration()

◆ GetMaxRange()

◆ GetMaxTicks()

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

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(), and spell_sha_t10_restoration_4p_bonus::HandleProc().

◆ GetMinRange()

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

◆ GetNextRankSpell()

SpellInfo const * SpellInfo::GetNextRankSpell ( ) const
2498{
2499 if (!ChainEntry)
2500 return nullptr;
2501 return ChainEntry->next;
2502}
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
2504{
2505 if (!ChainEntry)
2506 return nullptr;
2507 return ChainEntry->prev;
2508}
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
1973{
1975}
SpellSchoolMask
Definition: SharedDefines.h:267

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(), 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
1999{
2000 uint32 mask = 0;
2001 if (Mechanic)
2002 mask |= 1 << Mechanic;
2003 for (int i = 0; i < MAX_SPELL_EFFECTS; ++i)
2004 if ((effectMask & (1 << i)) && Effects[i].Mechanic)
2005 mask |= 1 << Effects[i].Mechanic;
2006 return mask;
2007}

References Effects, MAX_SPELL_EFFECTS, and Mechanic.

Referenced by Unit::ModSpellDuration().

◆ GetSpellSpecific()

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

References _spellSpecific.

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

◆ HasAnyAura()

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

References Effects, and MAX_SPELL_EFFECTS.

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

◆ HasAnyEffectMechanic()

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

References Effects, MAX_SPELL_EFFECTS, and Mechanic.

◆ HasAreaAuraEffect()

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

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
973{
974 SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(Id);
975
976 for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
977 {
978 SkillLineAbilityEntry const* pAbility = _spell_idx->second;
979 if (!pAbility || pAbility->AcquireMethod != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE)
980 continue;
981
982 if (pAbility->MinSkillLineRank > 0)
983 return true;
984 }
985
986 return false;
987}
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
Definition: SpellMgr.h:584
@ SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE
Definition: DBCEnums.h:365
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
990{
991 SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(Id);
992
993 for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
994 if (_spell_idx->second->SkillLine == uint32(skillType))
995 return true;
996
997 return false;
998}

References Id, and sSpellMgr.

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

◆ IsActionAllowedChannel()

bool SpellInfo::IsActionAllowedChannel ( ) const
1246{
1248}
@ SPELL_ATTR5_ALLOW_ACTION_DURING_CHANNEL
Definition: SharedDefines.h:539
bool IsChanneled() const
Definition: SpellInfo.cpp:1240

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

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
1273{
1275}
@ SPELL_ATTR3_IGNORE_CASTER_MODIFIERS
Definition: SharedDefines.h:494

References AttributesEx3, and SPELL_ATTR3_IGNORE_CASTER_MODIFIERS.

Referenced by IsAffectedBySpellMod().

◆ IsAffectingArea()

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

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
1212{
1214}
@ 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:428

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

References EFFECT_0, Effects, and MAX_SPELL_EFFECTS.

Referenced by IsStrongerAuraActive().

◆ IsAuraExclusiveBySpecificPerCasterWith()

bool SpellInfo::IsAuraExclusiveBySpecificPerCasterWith ( SpellInfo const *  spellInfo) const
1400{
1401 SpellSpecificType spellSpec = GetSpellSpecific();
1402 switch (spellSpec)
1403 {
1412 return spellSpec == spellInfo->GetSpellSpecific();
1413 default:
1414 return false;
1415 }
1416}
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:2121

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
1368{
1369 SpellSpecificType spellSpec1 = GetSpellSpecific();
1370 SpellSpecificType spellSpec2 = spellInfo->GetSpellSpecific();
1371 switch (spellSpec1)
1372 {
1383 return spellSpec1 == spellSpec2;
1385 return spellSpec2 == SPELL_SPECIFIC_FOOD
1386 || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK;
1388 return spellSpec2 == SPELL_SPECIFIC_DRINK
1389 || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK;
1391 return spellSpec2 == SPELL_SPECIFIC_FOOD
1392 || spellSpec2 == SPELL_SPECIFIC_DRINK
1393 || spellSpec2 == SPELL_SPECIFIC_FOOD_AND_DRINK;
1394 default:
1395 return false;
1396 }
1397}
@ 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
1088{
1090 return false;
1092 return false;
1093 return true;
1094}
@ SPELL_ATTR1_NO_AUTOCAST_AI
Definition: SharedDefines.h:408
@ SPELL_ATTR0_PASSIVE
Definition: SharedDefines.h:360

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
1256{
1258}
@ SPELL_ATTR1_ALLOW_WHILE_STEALTHED
Definition: SharedDefines.h:396

References AttributesEx, and SPELL_ATTR1_ALLOW_WHILE_STEALTHED.

Referenced by Spell::prepare().

◆ IsChannelCategorySpell()

bool SpellInfo::IsChannelCategorySpell ( ) const
1068{
1069 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1070 if (Effects[i].TargetA.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL || Effects[i].TargetB.GetSelectionCategory() == TARGET_SELECT_CATEGORY_CHANNEL)
1071 return true;
1072 return false;
1073}
@ 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
1162{
1163 return _isCritCapable;
1164}

References _isCritCapable.

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

◆ IsDeathPersistent()

bool SpellInfo::IsDeathPersistent ( ) const
1202{
1204}
@ SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD
Definition: SharedDefines.h:485

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
2559{
2560 if (Id == spellInfo->Id)
2561 return false;
2562 return IsRankOf(spellInfo);
2563}
bool IsRankOf(SpellInfo const *spellInfo) const
Definition: SpellInfo.cpp:2553

References Id, and IsRankOf().

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

◆ IsExplicitDiscovery()

bool SpellInfo::IsExplicitDiscovery ( ) const
902{
903 return ((Effects[0].Effect == SPELL_EFFECT_CREATE_RANDOM_ITEM
904 || Effects[0].Effect == SPELL_EFFECT_CREATE_ITEM_2)
905 && Effects[1].Effect == SPELL_EFFECT_SCRIPT_EFFECT)
906 || Id == 64323;
907}
@ SPELL_EFFECT_SCRIPT_EFFECT
Definition: SharedDefines.h:827
@ SPELL_EFFECT_CREATE_ITEM_2
Definition: SharedDefines.h:907
@ SPELL_EFFECT_CREATE_RANDOM_ITEM
Definition: SharedDefines.h:809

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
2566{
2567 if (ChainEntry && spellInfo->ChainEntry)
2568 {
2569 if (ChainEntry->first == spellInfo->ChainEntry->first)
2570 if (ChainEntry->rank > spellInfo->ChainEntry->rank)
2571 return true;
2572 }
2573 return false;
2574}

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

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

◆ IsLootCrafting()

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

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
1192{
1193 return IsPassive() || Id == 40075; // No other way to make 40075 have more than 1 copy of aura
1194}

References Id, and IsPassive().

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

◆ IsPassive()

◆ IsPassiveStackableWithRanks()

bool SpellInfo::IsPassiveStackableWithRanks ( ) const

◆ IsPositive()

bool SpellInfo::IsPositive ( ) const
1222{
1224}
@ 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
1227{
1228 switch (effIndex)
1229 {
1230 default:
1231 case 0:
1233 case 1:
1235 case 2:
1237 }
1238}
@ 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
953{
954 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
955 {
956 if (Effects[i].Effect == SPELL_EFFECT_SKILL)
957 {
958 uint32 skill = Effects[i].MiscValue;
959
960 if (IsPrimaryProfessionSkill(skill))
961 return true;
962 }
963 }
964 return false;
965}
bool IsPrimaryProfessionSkill(uint32 skill)
Definition: SpellMgr.cpp:37
@ SPELL_EFFECT_SKILL
Definition: SharedDefines.h:868

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

Referenced by IsPrimaryProfessionFirstRank().

◆ IsPrimaryProfessionFirstRank()

bool SpellInfo::IsPrimaryProfessionFirstRank ( ) const
968{
969 return IsPrimaryProfession() && GetRank() == 1;
970}
uint8 GetRank() const
Definition: SpellInfo.cpp:2478
bool IsPrimaryProfession() const
Definition: SpellInfo.cpp:952

References GetRank(), and IsPrimaryProfession().

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

◆ IsProfession()

bool SpellInfo::IsProfession ( ) const
938{
939 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
940 {
941 if (Effects[i].Effect == SPELL_EFFECT_SKILL)
942 {
943 uint32 skill = Effects[i].MiscValue;
944
945 if (IsProfessionSkill(skill))
946 return true;
947 }
948 }
949 return false;
950}
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
923{
924 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
925 {
926 if (Effects[i].Effect == SPELL_EFFECT_SKILL)
927 {
928 uint32 skill = Effects[i].MiscValue;
929
930 if (IsProfessionOrRidingSkill(skill))
931 return true;
932 }
933 }
934 return false;
935}
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
918{
919 return Effects[0].Effect == SPELL_EFFECT_THREAT && Effects[1].Effect == SPELL_EFFECT_APPLY_AURA && Effects[1].ApplyAuraName == SPELL_AURA_DUMMY;
920}
@ SPELL_AURA_DUMMY
Definition: SpellAuraDefines.h:67
@ SPELL_EFFECT_THREAT
Definition: SharedDefines.h:813

References Effects, SPELL_AURA_DUMMY, SPELL_EFFECT_APPLY_AURA, and SPELL_EFFECT_THREAT.

◆ IsRangedWeaponSpell()

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

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
2474{
2475 return ChainEntry != nullptr;
2476}

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
1075{
1076 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
1077 if (Effects[i].Effect && Effects[i].TargetA.GetTarget() != TARGET_UNIT_CASTER)
1078 return false;
1079 return true;
1080}

References Effects, MAX_SPELL_EFFECTS, and TARGET_UNIT_CASTER.

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

◆ IsSingleTarget()

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

References AttributesEx5, and SPELL_ATTR5_LIMIT_N.

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

◆ IsSpellValid()

bool SpellInfo::IsSpellValid ( ) const
1177{
1178 return _isSpellValid;
1179}

References _isSpellValid.

Referenced by SpellMgr::IsSpellValid().

◆ IsStackableWithRanks()

bool SpellInfo::IsStackableWithRanks ( ) const
1130{
1131 return _isStackableWithRanks;
1132}

References _isStackableWithRanks.

Referenced by Player::addSpell().

◆ IsStrongerAuraActive()

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

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
2051{
2052 // Seals
2054 return AURA_STATE_JUDGEMENT;
2055
2056 // Conflagrate aura state on Immolate and Shadowflame
2058 // Immolate
2059 ((SpellFamilyFlags[0] & 4) ||
2060 // Shadowflame
2061 (SpellFamilyFlags[2] & 2)))
2063
2064 // Faerie Fire (druid versions)
2067
2068 // Sting (hunter's pet ability)
2069 if (GetCategory() == 1133)
2071
2072 // Victorious
2073 if (SpellFamilyName == SPELLFAMILY_WARRIOR && SpellFamilyFlags[1] & 0x00040000)
2075
2076 // Swiftmend state on Regrowth & Rejuvenation
2078 return AURA_STATE_SWIFTMEND;
2079
2080 // Deadly poison aura state
2081 if (SpellFamilyName == SPELLFAMILY_ROGUE && SpellFamilyFlags[0] & 0x10000)
2083
2084 // Enrage aura state
2085 if (Dispel == DISPEL_ENRAGE)
2086 return AURA_STATE_ENRAGE;
2087
2088 // Bleeding aura state
2090 return AURA_STATE_BLEEDING;
2091
2093 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2094 if (Effects[i].IsAura() && (Effects[i].ApplyAuraName == SPELL_AURA_MOD_STUN
2095 || Effects[i].ApplyAuraName == SPELL_AURA_MOD_ROOT))
2096 return AURA_STATE_FROZEN;
2097
2098 switch (Id)
2099 {
2100 case 71465: // Divine Surge
2101 case 50241: // Oculus, Drake spell Evasive Maneuvers
2102 return AURA_STATE_UNKNOWN22;
2103 case 9991: // Touch of Zanzil
2104 case 35331: // Black Blood
2105 case 9806: // Phantom Strike
2106 case 35325: // Glowing Blood
2107 case 35328: // Lambent Blood
2108 case 16498: // Faerie Fire
2109 case 6950:
2110 case 20656:
2111 case 25602:
2112 case 32129:
2114 default:
2115 break;
2116 }
2117
2118 return AURA_STATE_NONE;
2119}
@ MECHANIC_BLEED
Definition: SharedDefines.h:1312
@ SPELLFAMILY_WARRIOR
Definition: SharedDefines.h:3504
@ SPELLFAMILY_ROGUE
Definition: SharedDefines.h:3508
@ AURA_STATE_NONE
Definition: SharedDefines.h:1263
@ AURA_STATE_FROZEN
Definition: SharedDefines.h:1267
@ AURA_STATE_DEADLY_POISON
Definition: SharedDefines.h:1280
@ AURA_STATE_BLEEDING
Definition: SharedDefines.h:1282
@ AURA_STATE_FAERIE_FIRE
Definition: SharedDefines.h:1276
@ AURA_STATE_ENRAGE
Definition: SharedDefines.h:1281
@ AURA_STATE_WARRIOR_VICTORY_RUSH
Definition: SharedDefines.h:1274
@ AURA_STATE_UNKNOWN22
Definition: SharedDefines.h:1286
@ AURA_STATE_JUDGEMENT
Definition: SharedDefines.h:1268
@ AURA_STATE_SWIFTMEND
Definition: SharedDefines.h:1279
@ AURA_STATE_CONFLAGRATE
Definition: SharedDefines.h:1278
@ DISPEL_ENRAGE
Definition: SharedDefines.h:1353
@ SPELL_SCHOOL_MASK_FROST
Definition: SharedDefines.h:273
SpellSchoolMask GetSchoolMask() const
Definition: SpellInfo.cpp:1972
uint32 GetAllEffectsMechanicMask() const
Definition: SpellInfo.cpp:1977

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.
2127{
2128 switch (SpellFamilyName)
2129 {
2131 {
2132 // Food / Drinks (mostly)
2134 {
2135 bool food = false;
2136 bool drink = false;
2137 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2138 {
2139 if (!Effects[i].IsAura())
2140 continue;
2141 switch (Effects[i].ApplyAuraName)
2142 {
2143 // Food
2146 food = true;
2147 break;
2148 // Drink
2151 drink = true;
2152 break;
2153 default:
2154 break;
2155 }
2156 }
2157
2158 if (food && drink)
2160 else if (food)
2161 return SPELL_SPECIFIC_FOOD;
2162 else if (drink)
2163 return SPELL_SPECIFIC_DRINK;
2164 }
2165 // scrolls effects
2166 else
2167 {
2168 SpellInfo const* firstRankSpellInfo = GetFirstRankSpell();
2169 switch (firstRankSpellInfo->Id)
2170 {
2171 case 8118: // Strength
2172 case 8099: // Stamina
2173 case 8112: // Spirit
2174 case 8096: // Intellect
2175 case 8115: // Agility
2176 case 8091: // Armor
2177 return SPELL_SPECIFIC_SCROLL;
2178 }
2179 }
2180 break;
2181 }
2182 case SPELLFAMILY_MAGE:
2183 {
2184 // family flags 18(Molten), 25(Frost/Ice), 28(Mage)
2185 if (SpellFamilyFlags[0] & 0x12040000)
2187
2188 // Arcane brillance and Arcane intelect (normal check fails because of flags difference)
2189 if (SpellFamilyFlags[0] & 0x400)
2191
2192 if ((SpellFamilyFlags[0] & 0x1000000) && Effects[0].ApplyAuraName == SPELL_AURA_MOD_CONFUSE)
2194
2195 break;
2196 }
2198 {
2199 // only warlock curses have this
2200 if (Dispel == DISPEL_CURSE)
2201 return SPELL_SPECIFIC_CURSE;
2202
2203 // Warlock (Demon Armor | Demon Skin | Fel Armor)
2204 if (SpellFamilyFlags[1] & 0x20000020 || SpellFamilyFlags[2] & 0x00000010)
2206
2207 //seed of corruption and corruption
2208 if (SpellFamilyFlags[1] & 0x10 || SpellFamilyFlags[0] & 0x2)
2210 break;
2211 }
2212 case SPELLFAMILY_PRIEST:
2213 {
2214 // Divine Spirit and Prayer of Spirit
2215 if (SpellFamilyFlags[0] & 0x20)
2217
2218 break;
2219 }
2220 case SPELLFAMILY_HUNTER:
2221 {
2222 // only hunter stings have this
2223 if (Dispel == DISPEL_POISON)
2224 return SPELL_SPECIFIC_STING;
2225
2226 // only hunter aspects have this (but not all aspects in hunter family)
2227 if (SpellFamilyFlags.HasFlag(0x00380000, 0x00440000, 0x00001010))
2228 return SPELL_SPECIFIC_ASPECT;
2229
2230 break;
2231 }
2233 {
2234 // Collection of all the seal family flags. No other paladin spell has any of those.
2235 if (SpellFamilyFlags[1] & 0x26000C00
2236 || SpellFamilyFlags[0] & 0x0A000000)
2237 return SPELL_SPECIFIC_SEAL;
2238
2239 if (SpellFamilyFlags[0] & 0x00002190)
2240 return SPELL_SPECIFIC_HAND;
2241
2242 // Judgement of Wisdom, Judgement of Light, Judgement of Justice
2243 if (Id == 20184 || Id == 20185 || Id == 20186)
2245
2246 // only paladin auras have this (for palaldin class family)
2247 if (SpellFamilyFlags[2] & 0x00000020)
2248 return SPELL_SPECIFIC_AURA;
2249
2250 // Illidari Council Paladin (Gathios the Shatterer)
2251 if (Id == 41459 || Id == 41469)
2252 return SPELL_SPECIFIC_SEAL;
2253
2254 break;
2255 }
2256 case SPELLFAMILY_SHAMAN:
2257 {
2258 // family flags 10 (Lightning), 42 (Earth), 37 (Water), proc shield from T2 8 pieces bonus
2259 if (SpellFamilyFlags[1] & 0x420
2260 || (SpellFamilyFlags[0] & 0x00000400 && HasAttribute(SPELL_ATTR1_NO_THREAT))
2261 || Id == 23552)
2263
2264 break;
2265 }
2267 if (Id == 48266 || Id == 48263 || Id == 48265)
2269 break;
2270 }
2271
2272 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2273 {
2274 if (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA)
2275 {
2276 switch (Effects[i].ApplyAuraName)
2277 {
2282 return SPELL_SPECIFIC_CHARM;
2285 if (Id == 30645) // Gas Cloud Tracking
2286 return SPELL_SPECIFIC_NORMAL;
2287 [[fallthrough]];
2291 }
2292 }
2293 }
2294
2295 return SPELL_SPECIFIC_NORMAL;
2296}
@ 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:401
@ SPELLFAMILY_PRIEST
Definition: SharedDefines.h:3506
@ SPELLFAMILY_MAGE
Definition: SharedDefines.h:3503
@ SPELLFAMILY_GENERIC
Definition: SharedDefines.h:3500
@ SPELLFAMILY_SHAMAN
Definition: SharedDefines.h:3511
@ SPELLFAMILY_DEATHKNIGHT
Definition: SharedDefines.h:3515
@ DISPEL_POISON
Definition: SharedDefines.h:1348
@ DISPEL_CURSE
Definition: SharedDefines.h:1346
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
1251{
1253}
@ SPELL_ATTR1_FINISHING_MOVE_DURATION
Definition: SharedDefines.h:413
@ SPELL_ATTR1_FINISHING_MOVE_DAMAGE
Definition: SharedDefines.h:411

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

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
1167{
1168 return _requireCooldownInfo;
1169}

References _requireCooldownInfo.

Referenced by Spell::SendSpellCooldown().

◆ SetCritCapable()

void SpellInfo::SetCritCapable ( bool  val)
1172{
1173 _isCritCapable = val;
1174}

References _isCritCapable.

◆ SetSpellValid()

void SpellInfo::SetSpellValid ( bool  val)
1182{
1183 _isSpellValid = val;
1184}

References _isSpellValid.

◆ SetStackableWithRanks()

void SpellInfo::SetStackableWithRanks ( bool  val)
1135{
1137}

References _isStackableWithRanks.

◆ ValidateAttribute6SpellDamageMods()

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