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:1610
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:2856

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

References _IsPositiveEffect(), and MAX_SPELL_EFFECTS.

Referenced by Spell::HandleThreatSpells().

◆ _IsPositiveTarget()

bool SpellInfo::_IsPositiveTarget ( uint32  targetA,
uint32  targetB 
)
static
2834{
2835 // non-positive targets
2836 switch (targetA)
2837 {
2847 return false;
2848 default:
2849 break;
2850 }
2851 if (targetB)
2852 return _IsPositiveTarget(targetB, 0);
2853 return true;
2854}
@ 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 ( )
2857{
2858 // find the same instances of ConditionList and delete them.
2859 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2860 {
2861 ConditionList* cur = Effects[i].ImplicitTargetConditions;
2862 if (!cur)
2863 continue;
2864 for (uint8 j = i; j < MAX_SPELL_EFFECTS; ++j)
2865 {
2866 if (Effects[j].ImplicitTargetConditions == cur)
2867 Effects[j].ImplicitTargetConditions = nullptr;
2868 }
2869 delete cur;
2870 }
2871}
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
2336{
2337 // not all spells have cast time index and this is all is pasiive abilities
2338 if (!CastTimeEntry)
2339 return 0;
2340
2341 int32 castTime = CastTimeEntry->CastTime;
2343 castTime += 500;
2344
2345 if (caster)
2346 caster->ModSpellCastTime(this, castTime, spell);
2347
2348 return (castTime > 0) ? uint32(castTime) : 0;
2349}
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:14865
bool IsAutoRepeatRangedSpell() const
Definition: SpellInfo.cpp:1267
int32 CastTime
Definition: DBCStructure.h:1735

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
2385{
2386 // Spell drain all exist power on cast (Only paladin lay of Hands)
2388 {
2389 // If power type - health drain all
2390 if (PowerType == POWER_HEALTH)
2391 return caster->GetHealth();
2392 // Else drain all power
2393 if (PowerType < MAX_POWERS)
2394 return caster->GetPower(Powers(PowerType));
2395 LOG_ERROR("spells", "SpellInfo::CalcPowerCost: Unknown power type '{}' in spell {}", PowerType, Id);
2396 return 0;
2397 }
2398
2399 // Base powerCost
2400 int32 powerCost = ManaCost;
2401 // PCT cost from total amount
2403 {
2404 switch (PowerType)
2405 {
2406 // health as power used
2407 case POWER_HEALTH:
2408 powerCost += int32(CalculatePct(caster->GetCreateHealth(), ManaCostPercentage));
2409 break;
2410 case POWER_MANA:
2411 powerCost += int32(CalculatePct(caster->GetCreateMana(), ManaCostPercentage));
2412 break;
2413 case POWER_RAGE:
2414 case POWER_FOCUS:
2415 case POWER_ENERGY:
2416 case POWER_HAPPINESS:
2417 powerCost += int32(CalculatePct(caster->GetMaxPower(Powers(PowerType)), ManaCostPercentage));
2418 break;
2419 case POWER_RUNE:
2420 case POWER_RUNIC_POWER:
2421 LOG_DEBUG("spells.aura", "CalculateManaCost: Not implemented yet!");
2422 break;
2423 default:
2424 LOG_ERROR("spells", "CalculateManaCost: Unknown power type '{}' in spell {}", PowerType, Id);
2425 return 0;
2426 }
2427 }
2428 SpellSchools school = GetFirstSchoolInMask(schoolMask);
2429 // Flat mod from caster auras by spell school
2430 powerCost += caster->GetInt32Value(static_cast<uint16>(UNIT_FIELD_POWER_COST_MODIFIER) + school);
2431
2432 // Shiv - costs 20 + weaponSpeed*10 energy (apply only to non-triggered spell with energy cost)
2434 {
2435 uint32 speed = 0;
2436 if (SpellShapeshiftEntry const* ss = sSpellShapeshiftStore.LookupEntry(caster->GetShapeshiftForm()))
2437 speed = ss->attackSpeed;
2438 else
2439 {
2442 slot = OFF_ATTACK;
2443
2444 speed = caster->GetAttackTime(slot);
2445 }
2446
2447 powerCost += speed / 100;
2448 }
2449
2450 // Apply cost mod by spell
2451 if (Player* modOwner = caster->GetSpellModOwner())
2452 modOwner->ApplySpellMod(Id, SPELLMOD_COST, powerCost, spell);
2453
2454 if (!caster->IsControlledByPlayer())
2455 {
2457 {
2458 GtNPCManaCostScalerEntry const* spellScaler = sGtNPCManaCostScalerStore.LookupEntry(SpellLevel - 1);
2459 GtNPCManaCostScalerEntry const* casterScaler = sGtNPCManaCostScalerStore.LookupEntry(caster->GetLevel() - 1);
2460 if (spellScaler && casterScaler)
2461 powerCost *= casterScaler->ratio / spellScaler->ratio;
2462 }
2463 }
2464
2465 // PCT mod from user auras by school
2466 powerCost = int32(powerCost * (1.0f + caster->GetFloatValue(static_cast<uint16>(UNIT_FIELD_POWER_COST_MULTIPLIER) + school)));
2467 if (powerCost < 0)
2468 powerCost = 0;
2469 return powerCost;
2470}
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:1046
Player * GetSpellModOwner() const
Definition: Unit.cpp:16751
Definition: DBCStructure.h:1058
float ratio
Definition: DBCStructure.h:1059
Definition: DBCStructure.h:1792

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

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:1290
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:540
@ 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:1308
bool IsBattleground() const
Definition: DBCStructure.h:1338
bool IsRaid() const
Definition: DBCStructure.h:1337
bool IsBattleArena() const
Definition: DBCStructure.h:1339
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:679
@ 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:1797

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:1136
bool CanFreeMove() const
Definition: Unit.h:1401
bool IsAlive() const
Definition: Unit.h:1808
bool IsPetInCombat() const
Definition: Unit.h:1691
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5610
bool IsInFlight() const
Definition: Unit.h:1676
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
Definition: Unit.cpp:10507
bool IsVisible() const
Definition: Unit.h:2127
bool HasAuraType(AuraType auraType) const
Definition: Unit.cpp:5617
bool IsInCombat() const
Definition: Unit.h:1688
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
2510{
2511 // ignore passive spells
2512 //if (IsPassive())
2513 // return this;
2514
2515 bool needRankSelection = false;
2516 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2517 {
2518 if (IsPositiveEffect(i) &&
2519 (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA ||
2522 {
2523 needRankSelection = true;
2524 break;
2525 }
2526 }
2527
2528 // not required
2529 if (!needRankSelection)
2530 return this;
2531
2532 SpellInfo const* nextSpellInfo = nullptr;
2533
2534 sScriptMgr->OnBeforeAuraRankForLevel(this, nextSpellInfo, level);
2535
2536 if (nextSpellInfo != nullptr)
2537 return nextSpellInfo;
2538
2539 for (nextSpellInfo = this; nextSpellInfo != nullptr; nextSpellInfo = nextSpellInfo->GetPrevRankSpell())
2540 {
2541 // if found appropriate level
2542 if (uint32(level + 10) >= nextSpellInfo->SpellLevel)
2543 return nextSpellInfo;
2544
2545 // one rank less then
2546 }
2547
2548 // not found
2549 return nullptr;
2550}
#define sScriptMgr
Definition: ScriptMgr.h:2702
@ SPELL_EFFECT_APPLY_AREA_AURA_PARTY
Definition: SharedDefines.h:785
SpellInfo const * GetPrevRankSpell() const
Definition: SpellInfo.cpp:2502
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
2491{
2492 if (!ChainEntry)
2493 return nullptr;
2494 return ChainEntry->last;
2495}
SpellInfo const * last
Definition: SpellMgr.h:551

References ChainEntry, and SpellChainNode::last.

◆ GetMaxDuration()

◆ GetMaxRange()

◆ GetMaxTicks()

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

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
2497{
2498 if (!ChainEntry)
2499 return nullptr;
2500 return ChainEntry->next;
2501}
SpellInfo const * next
Definition: SpellMgr.h:549

References ChainEntry, and SpellChainNode::next.

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

◆ GetPrevRankSpell()

SpellInfo const * SpellInfo::GetPrevRankSpell ( ) const
2503{
2504 if (!ChainEntry)
2505 return nullptr;
2506 return ChainEntry->prev;
2507}
SpellInfo const * prev
Definition: SpellMgr.h:548

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
2121{
2122 return _spellSpecific;
2123}
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()(), 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:577
@ SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE
Definition: DBCEnums.h:365
Definition: DBCStructure.h:1571
uint32 MinSkillLineRank
Definition: DBCStructure.h:1579
uint32 AcquireMethod
Definition: DBCStructure.h:1581

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

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

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

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:2477
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:611

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

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

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:337
@ SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_CHECK
Definition: SpellMgr.h:335
@ SPELL_GROUP_SPECIAL_FLAG_BASE_AMOUNT_CHECK
Definition: SpellMgr.h:336
@ SPELL_GROUP_SPECIAL_FLAG_SKIP_STRONGER_SAME_SPELL
Definition: SpellMgr.h:342
@ SPELL_GROUP_SPECIAL_FLAG_PRIORITY4
Definition: SpellMgr.h:340
std::list< AuraEffect * > AuraEffectList
Definition: Unit.h:1306
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:2328
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 16498: // Faerie Fire
2108 case 6950:
2109 case 20656:
2110 case 25602:
2111 case 32129:
2113 default:
2114 break;
2115 }
2116
2117 return AURA_STATE_NONE;
2118}
@ 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.
2126{
2127 switch (SpellFamilyName)
2128 {
2130 {
2131 // Food / Drinks (mostly)
2133 {
2134 bool food = false;
2135 bool drink = false;
2136 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2137 {
2138 if (!Effects[i].IsAura())
2139 continue;
2140 switch (Effects[i].ApplyAuraName)
2141 {
2142 // Food
2145 food = true;
2146 break;
2147 // Drink
2150 drink = true;
2151 break;
2152 default:
2153 break;
2154 }
2155 }
2156
2157 if (food && drink)
2159 else if (food)
2160 return SPELL_SPECIFIC_FOOD;
2161 else if (drink)
2162 return SPELL_SPECIFIC_DRINK;
2163 }
2164 // scrolls effects
2165 else
2166 {
2167 SpellInfo const* firstRankSpellInfo = GetFirstRankSpell();
2168 switch (firstRankSpellInfo->Id)
2169 {
2170 case 8118: // Strength
2171 case 8099: // Stamina
2172 case 8112: // Spirit
2173 case 8096: // Intellect
2174 case 8115: // Agility
2175 case 8091: // Armor
2176 return SPELL_SPECIFIC_SCROLL;
2177 }
2178 }
2179 break;
2180 }
2181 case SPELLFAMILY_MAGE:
2182 {
2183 // family flags 18(Molten), 25(Frost/Ice), 28(Mage)
2184 if (SpellFamilyFlags[0] & 0x12040000)
2186
2187 // Arcane brillance and Arcane intelect (normal check fails because of flags difference)
2188 if (SpellFamilyFlags[0] & 0x400)
2190
2191 if ((SpellFamilyFlags[0] & 0x1000000) && Effects[0].ApplyAuraName == SPELL_AURA_MOD_CONFUSE)
2193
2194 break;
2195 }
2197 {
2198 // only warlock curses have this
2199 if (Dispel == DISPEL_CURSE)
2200 return SPELL_SPECIFIC_CURSE;
2201
2202 // Warlock (Demon Armor | Demon Skin | Fel Armor)
2203 if (SpellFamilyFlags[1] & 0x20000020 || SpellFamilyFlags[2] & 0x00000010)
2205
2206 //seed of corruption and corruption
2207 if (SpellFamilyFlags[1] & 0x10 || SpellFamilyFlags[0] & 0x2)
2209 break;
2210 }
2211 case SPELLFAMILY_PRIEST:
2212 {
2213 // Divine Spirit and Prayer of Spirit
2214 if (SpellFamilyFlags[0] & 0x20)
2216
2217 break;
2218 }
2219 case SPELLFAMILY_HUNTER:
2220 {
2221 // only hunter stings have this
2222 if (Dispel == DISPEL_POISON)
2223 return SPELL_SPECIFIC_STING;
2224
2225 // only hunter aspects have this (but not all aspects in hunter family)
2226 if (SpellFamilyFlags.HasFlag(0x00380000, 0x00440000, 0x00001010))
2227 return SPELL_SPECIFIC_ASPECT;
2228
2229 break;
2230 }
2232 {
2233 // Collection of all the seal family flags. No other paladin spell has any of those.
2234 if (SpellFamilyFlags[1] & 0x26000C00
2235 || SpellFamilyFlags[0] & 0x0A000000)
2236 return SPELL_SPECIFIC_SEAL;
2237
2238 if (SpellFamilyFlags[0] & 0x00002190)
2239 return SPELL_SPECIFIC_HAND;
2240
2241 // Judgement of Wisdom, Judgement of Light, Judgement of Justice
2242 if (Id == 20184 || Id == 20185 || Id == 20186)
2244
2245 // only paladin auras have this (for palaldin class family)
2246 if (SpellFamilyFlags[2] & 0x00000020)
2247 return SPELL_SPECIFIC_AURA;
2248
2249 // Illidari Council Paladin (Gathios the Shatterer)
2250 if (Id == 41459 || Id == 41469)
2251 return SPELL_SPECIFIC_SEAL;
2252
2253 break;
2254 }
2255 case SPELLFAMILY_SHAMAN:
2256 {
2257 // family flags 10 (Lightning), 42 (Earth), 37 (Water), proc shield from T2 8 pieces bonus
2258 if (SpellFamilyFlags[1] & 0x420
2259 || (SpellFamilyFlags[0] & 0x00000400 && HasAttribute(SPELL_ATTR1_NO_THREAT))
2260 || Id == 23552)
2262
2263 break;
2264 }
2266 if (Id == 48266 || Id == 48263 || Id == 48265)
2268 break;
2269 }
2270
2271 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2272 {
2273 if (Effects[i].Effect == SPELL_EFFECT_APPLY_AURA)
2274 {
2275 switch (Effects[i].ApplyAuraName)
2276 {
2281 return SPELL_SPECIFIC_CHARM;
2284 if (Id == 30645) // Gas Cloud Tracking
2285 return SPELL_SPECIFIC_NORMAL;
2286 [[fallthrough]];
2290 }
2291 }
2292 }
2293
2294 return SPELL_SPECIFIC_NORMAL;
2295}
@ 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:463

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:446
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::go_soulwellAI(), 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::spell_capacitus_polarity_charge_SpellScript::HandleTargets(), spell_thaddius_pos_neg_charge::spell_thaddius_pos_neg_charge_SpellScript::HandleTargets(), Spell::HandleThreatSpells(), Acore::PlayerCommand::HandleUnlearnSpellCommand(), WorldSession::HandleUpdateMissileTrajectory(), Unit::HealBySpell(), 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(), 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(), 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::boss_attumenAI::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_midsummer_bonfire::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_death_knight_initiate::npc_death_knight_initiateAI::SpellHit(), npc_crusade_persuaded::npc_crusade_persuadedAI::SpellHit(), npc_yenniku::npc_yennikuAI::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(), npc_shay_leafrunner::npc_shay_leafrunnerAI::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_spitelashes::npc_spitelashesAI::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::boss_shirrak_the_dead_watcherAI::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(), 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