106 return static_cast<float>(
M_PI);
108 return static_cast<float>(-
M_PI/2);
110 return static_cast<float>(
M_PI/2);
112 return static_cast<float>(-
M_PI/4);
114 return static_cast<float>(-3*
M_PI/4);
116 return static_cast<float>(3*
M_PI/4);
118 return static_cast<float>(
M_PI/4);
398 return Effect == effectName;
439 Unit const* casterUnit =
nullptr;
441 casterUnit = caster->
ToUnit();
444 if (casterUnit && basePointsPerLevel != 0.0f)
454 basePoints +=
int32(level * basePointsPerLevel);
458 switch (randomPoints)
461 case 1: basePoints += 1;
break;
464 int32 randvalue = (randomPoints >= 1)
465 ?
irand(1, randomPoints)
466 :
irand(randomPoints, 1);
468 basePoints += randvalue;
472 float value = float(basePoints);
492 bool canEffectScale =
false;
507 canEffectScale =
true;
524 canEffectScale =
true;
534 if (spellScaler && casterScaler)
535 value *= casterScaler->
Data / spellScaler->
Data;
566 return multiplierPercent / 100.0f;
620 return effImplicitTargetMask;
903 if (eff.IsEffect(effect))
912 if (effect.IsAura(aura))
921 if (effect.IsAreaAuraEffect())
931 if (effect.IsEffect())
933 switch (effect.Effect)
974 uint32 skill = effect.MiscValue;
989 uint32 skill = effect.MiscValue;
1004 uint32 skill = effect.MiscValue;
1022 for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
1039 for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx)
1040 if (_spell_idx->second->SkillLine ==
uint32(skillType))
1058 if (effect.IsEffect() && effect.IsTargetingArea())
1093 mask |= effect.GetProvidedTargetMask();
1202 switch (effect.TargetA.GetCheckType())
1423 return spellSpec1 == spellSpec2;
1473 bool actAsShifted =
false;
1480 TC_LOG_ERROR(
"spells",
"GetErrorAtShapeshiftedCast: unknown shapeshift {}", form);
1483 actAsShifted = !(shapeInfo->
Flags & 1);
1503 if (shapeInfo && shapeInfo->
Flags & 0x400)
1522 if (groupEntry->
AreaID[i] == zone_id || groupEntry->
AreaID[i] == area_id)
1559 if (!mapEntry || mapEntry->
IsRaid())
1565 if (saBounds.first != saBounds.second)
1567 for (SpellAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr)
1569 if (itr->second.IsFitToRequirements(player, zone_id, area_id))
1669 if (caster != unitTarget)
1676 if (targetCreature->hasLootRecipient() && !targetCreature->isTappedBy(caster->
ToPlayer()))
1764 if (
Unit const* unitCaster = caster->
ToUnit())
1766 if (!unitCaster->IsVehicle() && !(unitCaster->GetCharmerOrOwner() == target))
1800 if (
Unit const* unitTarget = target->
ToUnit())
1817 if (unitTarget->IsOnVehicle(unitCaster))
1840 if (shapeShiftEntry && (shapeShiftEntry->
Flags & 1) == 0)
1854 && (vehicleSeat->
Flags & checkMask) != checkMask)
1907 if (effect.IsEffect() && effect.Mechanic)
1908 mask |= 1 << effect.Mechanic;
1932 if ((effectMask & (1 << effect.EffectIndex)) && effect.Mechanic)
1933 mask |= 1 << effect.Mechanic;
1960 return uint32(1 << type);
2062 if (!effect.IsAura())
2064 switch (effect.ApplyAuraName)
2092 switch (firstRankSpellInfo->
Id)
2194 if (
Id == 20184 ||
Id == 20185 ||
Id == 20186)
2214 if (
Id == 48266 ||
Id == 48263 ||
Id == 48265)
2223 switch (effect.ApplyAuraName)
2267 else if (
Id == 48400)
2270 else if (
Id == 47481)
2276 else if (
Id == 64155)
2279 else if (
Id == 51750)
2282 else if (
Id == 48179)
2472 auto isGroupDurationLimited = [group]() ->
bool
2496 if (!isGroupDurationLimited())
2547 triggeredInfo.
DiminishGroup = diminishingGroupCompute(
true);
2583 std::unique_ptr<SpellEffectInfo::ImmunityInfo> workBuffer = std::make_unique<SpellEffectInfo::ImmunityInfo>();
2587 uint32 schoolImmunityMask = 0;
2588 uint32 applyHarmfulAuraImmunityMask = 0;
2589 uint32 mechanicImmunityMask = 0;
2590 uint32 dispelImmunity = 0;
2591 uint32 damageImmunityMask = 0;
2592 bool removeEffectsWithMechanic =
false;
2594 int32 miscVal = effect.MiscValue;
2595 int32 amount = effect.CalcValue();
2599 switch (effect.ApplyAuraName)
2739 if (miscVal & (1 << 10))
2741 if (miscVal & (1 << 1))
2745 if (miscVal & (1 << 6))
2747 if (miscVal & (1 << 0))
2749 if (miscVal & (1 << 2))
2751 if (miscVal & (1 << 9))
2753 if (miscVal & (1 << 7))
2766 removeEffectsWithMechanic =
true;
2772 removeEffectsWithMechanic =
true;
2781 mechanicImmunityMask |= 1 << miscVal;
2787 removeEffectsWithMechanic =
true;
2803 schoolImmunityMask |=
uint32(miscVal);
2808 applyHarmfulAuraImmunityMask |=
uint32(miscVal);
2813 damageImmunityMask |=
uint32(miscVal);
2818 dispelImmunity =
uint32(miscVal);
2843 effect._immunityInfo = std::move(workBuffer);
2844 workBuffer = std::make_unique<SpellEffectInfo::ImmunityInfo>();
2903 return ((auraSpellInfo->
GetSchoolMask() & schoolImmunity) != 0 &&
2907 auraSpellInfo->
Id !=
Id);
2915 if (mechanicImmunity & (1 << i))
2924 std::vector<Aura*> aurasToUpdateTargets;
2929 aurasToUpdateTargets.push_back(aura);
2935 for (
Aura* aura : aurasToUpdateTargets)
2936 aura->UpdateTargetMap(aura->GetCaster());
2950 if (spellInfo->
Dispel == dispelImmunity)
2983 if (!effectInfo.IsEffect())
2993 if ((auraSpellInfo->
SchoolMask & schoolImmunity) != 0)
2998 if ((mechanicImmunity & (1 << auraSpellInfo->
Mechanic)) != 0)
3002 if (auraSpellInfo->
Dispel == dispelImmunity)
3005 bool immuneToAllEffects =
true;
3008 if (!auraSpellEffectInfo.IsEffect())
3014 immuneToAllEffects =
false;
3018 if (
uint32 mechanic = auraSpellEffectInfo.Mechanic)
3022 immuneToAllEffects =
false;
3029 if (
AuraType auraName = auraSpellEffectInfo.ApplyAuraName)
3031 bool isImmuneToAuraEffectApply =
false;
3034 isImmuneToAuraEffectApply =
true;
3039 if ((auraSpellInfo->
GetSchoolMask() & applyHarmfulAuraImmunityMask) != 0)
3040 isImmuneToAuraEffectApply =
true;
3043 if (!isImmuneToAuraEffectApply)
3045 immuneToAllEffects =
false;
3052 if (immuneToAllEffects)
3073 uint32 const miscValue =
static_cast<uint32>(effect.MiscValue);
3074 switch (effect.ApplyAuraName)
3114 uint32 mechanicImmunityMask = 0;
3126 return mechanicImmunityMask;
3182 return (castTime > 0) ?
uint32(castTime) : 0;
3194 switch (effect.ApplyAuraName)
3212 if (effect.ApplyAuraPeriod > 0 && DotDuration > 0)
3214 totalTicks =
static_cast<uint32>(DotDuration) / effect.ApplyAuraPeriod;
3275 TC_LOG_DEBUG(
"spells",
"CalculateManaCost: Not implemented yet!");
3285 for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
3287 if (!((*i)->GetMiscValue() & schoolMask))
3289 if (!((*i)->GetMiscValueB() & (1 <<
PowerType)))
3291 powerCost += (*i)->GetAmount();
3298 speed = ss->CombatRoundTime;
3302 powerCost += speed / 100;
3315 if (spellScaler && casterScaler)
3316 powerCost *= casterScaler->
Data / spellScaler->
Data;
3322 for (Unit::AuraEffectList::const_iterator i = aurasPct.begin(); i != aurasPct.end(); ++i)
3324 if (!((*i)->GetMiscValue() & schoolMask))
3326 if (!((*i)->GetMiscValueB() & (1 <<
PowerType)))
3328 powerCost +=
CalculatePct(powerCost, (*i)->GetAmount());
3382 bool needRankSelection =
false;
3390 needRankSelection =
true;
3396 if (!needRankSelection)
3399 for (
SpellInfo const* nextSpellInfo =
this; nextSpellInfo !=
nullptr; nextSpellInfo = nextSpellInfo->
GetPrevRankSpell())
3402 if (
uint32(level + 10) >= nextSpellInfo->SpellLevel)
3403 return nextSpellInfo;
3419 if (
Id == spellInfo->
Id)
3436 bool srcSet =
false;
3437 bool dstSet =
false;
3442 if (!effect.IsEffect())
3445 targetMask |= effect.TargetA.GetExplicitTargetMask(srcSet, dstSet);
3446 targetMask |= effect.TargetB.GetExplicitTargetMask(srcSet, dstSet);
3453 uint32 effectTargetMask = effect.GetMissingTargetMask(srcSet, dstSet, targetMask);
3459 targetMask |= effectTargetMask;
3499 switch (spellInfo->
Id)
3523 if (spellInfo->
Id == 40251)
3549 if (spellInfo->
Id == 34074)
3588 switch (otherEffect.Effect)
3596 if (otherEffect.EffectIndex != effect.
EffectIndex &&
3606 if (otherEffect.IsAura())
3608 switch (otherEffect.ApplyAuraName)
3730 if (bp < 0 || bpScalePerLevel < 0)
3777 for (
SpellEffectInfo const& spellTriggeredEffect : spellTriggeredProto->GetEffects())
3780 if (visited.count({ spellTriggeredProto->Id, spellTriggeredEffect.EffectIndex }) > 0)
3783 if (!spellTriggeredEffect.IsEffect())
3920 for (
SpellEffectInfo const& spellTriggeredEffect : spellTriggeredProto->GetEffects())
3923 if (visited.count({ spellTriggeredProto->Id, spellTriggeredEffect.EffectIndex }) > 0)
3926 if (!spellTriggeredEffect.IsEffect())
3953 switch (effect.ApplyAuraName)
3965 for (
size_t j = effect.EffectIndex + 1; j <
GetEffects().size(); ++j)
3987 for (
size_t j = effect.EffectIndex; j <
GetEffects().size(); ++j)
std::vector< Condition * > ConditionContainer
@ VEHICLE_SEAT_FLAG_CAN_CAST_MOUNT_SPELL
@ VEHICLE_SEAT_FLAG_CAN_CONTROL
@ VEHICLE_SEAT_FLAG_UNCONTROLLED
@ VEHICLE_SEAT_FLAG_CAN_ATTACK
@ SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT
@ SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE
#define MAX_SPELL_EFFECTS
DBCStorage< SpellShapeshiftFormEntry > sSpellShapeshiftFormStore(SpellShapeshiftFormfmt)
DBCStorage< SpellRadiusEntry > sSpellRadiusStore(SpellRadiusfmt)
DBCStorage< SummonPropertiesEntry > sSummonPropertiesStore(SummonPropertiesfmt)
DBCStorage< SpellCategoryEntry > sSpellCategoryStore(SpellCategoryfmt)
DBCStorage< SpellCastTimesEntry > sSpellCastTimesStore(SpellCastTimefmt)
DBCStorage< SpellRangeEntry > sSpellRangeStore(SpellRangefmt)
uint32 GetTalentSpellCost(uint32 spellId)
uint32 GetVirtualMapForMapAndZone(uint32 mapid, uint32 zoneId)
DBCStorage< GtNPCManaCostScalerEntry > sGtNPCManaCostScalerStore(GtNPCManaCostScalerfmt)
DBCStorage< AreaGroupEntry > sAreaGroupStore(AreaGroupEntryfmt)
DBCStorage< SpellDurationEntry > sSpellDurationStore(SpellDurationfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
#define MAX_GROUP_AREA_IDS
#define ITEM_SUBCLASS_MASK_WEAPON_RANGED
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
uint64 MAKE_PAIR64(uint32 l, uint32 h)
int32 irand(int32 min, int32 max)
@ SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_POWER_BURN
@ SPELL_EFFECT_ENERGIZE_PCT
@ SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE
@ SPELL_EFFECT_APPLY_AREA_AURA_PARTY
@ SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
@ SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE
@ SPELL_EFFECT_SELF_RESURRECT
@ SPELL_EFFECT_DURABILITY_DAMAGE
@ SPELL_EFFECT_HEALTH_LEECH
@ SPELL_EFFECT_WEAPON_DAMAGE
@ SPELL_EFFECT_NORMALIZED_WEAPON_DMG
@ SPELL_EFFECT_DISPEL_MECHANIC
@ SPELL_EFFECT_HEAL_MAX_HEALTH
@ SPELL_EFFECT_APPLY_AREA_AURA_PET
@ SPELL_EFFECT_TAMECREATURE
@ SPELL_EFFECT_PICKPOCKET
@ SPELL_EFFECT_HEAL_MECHANICAL
@ SPELL_EFFECT_WEAPON_PERCENT_DAMAGE
@ SPELL_EFFECT_KNOCK_BACK_DEST
@ SPELL_EFFECT_MODIFY_THREAT_PERCENT
@ SPELL_EFFECT_DURABILITY_DAMAGE_PCT
@ SPELL_EFFECT_ENVIRONMENTAL_DAMAGE
@ SPELL_EFFECT_APPLY_AREA_AURA_RAID
@ SPELL_EFFECT_CREATE_ITEM_2
@ SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL
@ SPELL_EFFECT_PERSISTENT_AREA_AURA
@ SPELL_EFFECT_POWER_DRAIN
@ SPELL_EFFECT_KNOCK_BACK
@ SPELL_EFFECT_RESURRECT_NEW
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_GAMEOBJECT_DAMAGE
@ SPELL_EFFECT_LEARN_SPELL
@ SPELL_EFFECT_CREATE_RANDOM_ITEM
@ SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
@ SPELL_EFFECT_INTERRUPT_CAST
@ SPELL_EFFECT_FORCE_CAST_WITH_VALUE
@ SPELL_EFFECT_SKILL_STEP
@ SPELL_EFFECT_STEAL_BENEFICIAL_BUFF
@ SPELL_EFFECT_APPLY_AURA
@ SPELL_EFFECT_APPLY_AREA_AURA_OWNER
@ SPELL_ATTR5_USABLE_WHILE_CONFUSED
@ SPELL_ATTR5_USABLE_WHILE_FEARED
@ SPELL_ATTR5_START_PERIODIC_AT_APPLY
@ SPELL_ATTR5_SINGLE_TARGET_SPELL
@ SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING
@ SPELL_ATTR5_USABLE_WHILE_STUNNED
@ SPELL_SCHOOL_MASK_FROST
@ SPELL_ATTR2_CANT_TARGET_TAPPED
@ SPELL_ATTR2_AUTOREPEAT_FLAG
@ SPELL_ATTR2_CAN_TARGET_DEAD
@ SPELL_ATTR2_NOT_NEED_SHAPESHIFT
@ SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE
@ SPELL_ATTR2_ALLOW_LOW_LEVEL_BUFF
@ SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY
@ SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE
@ SPELL_ATTR1_DRAIN_ALL_POWER
@ SPELL_ATTR1_NOT_BREAK_STEALTH
@ SPELL_ATTR1_UNAUTOCASTABLE_BY_PET
@ SPELL_ATTR1_DONT_REFRESH_DURATION_ON_RECAST
@ SPELL_ATTR1_CHANNELED_1
@ SPELL_ATTR1_CHANNELED_2
@ SPELL_ATTR1_REQ_COMBO_POINTS2
@ SPELL_ATTR1_REQ_COMBO_POINTS1
@ SPELL_ATTR1_CANT_TARGET_SELF
@ SPELL_ATTR1_CANT_TARGET_IN_COMBAT
@ SPELL_ATTR3_STACK_FOR_DIFF_CASTERS
@ SPELL_ATTR3_DEATH_PERSISTENT
@ SPELL_ATTR3_NO_DONE_BONUS
@ SPELL_ATTR3_ONLY_TARGET_PLAYERS
@ SPELL_ATTR3_ONLY_TARGET_GHOSTS
@ SPELL_ATTR3_NO_INITIAL_AGGRO
@ SPELL_ATTR3_REQ_OFFHAND
@ SPELL_ATTR3_IGNORE_HIT_RESULT
@ SPELL_DAMAGE_CLASS_RANGED
@ SPELL_DAMAGE_CLASS_MELEE
@ MECHANIC_INVULNERABILITY
@ SPELLFAMILY_DEATHKNIGHT
@ SPELL_ATTR0_ON_NEXT_SWING
@ SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY
@ SPELL_ATTR0_DISABLED_WHILE_ACTIVE
@ SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION
@ SPELL_ATTR0_ON_NEXT_SWING_2
@ SPELL_ATTR0_NOT_SHAPESHIFT
@ SPELL_ATTR0_CASTABLE_WHILE_MOUNTED
@ SPELL_ATTR0_CANT_USED_IN_COMBAT
uint32 const CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD
@ DIMINISHING_LEVEL_IMMUNE
@ DIMINISHING_LEVEL_TAUNT_IMMUNE
#define IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK
@ DIMINISHING_MIND_CONTROL
@ DIMINISHING_DRAGONS_BREATH
@ DIMINISHING_CONTROLLED_STUN
@ DIMINISHING_CONTROLLED_ROOT
@ DIMINISHING_SCATTER_SHOT
@ DIMINISHING_OPENING_STUN
@ AURA_STATE_DEADLY_POISON
@ AURA_STATE_WARRIOR_VICTORY_RUSH
@ SPELL_FAILED_TARGET_NOT_PLAYER
@ SPELL_FAILED_TARGET_NO_POCKETS
@ SPELL_FAILED_INCORRECT_AREA
@ SPELL_FAILED_TARGET_IS_PLAYER
@ SPELL_FAILED_CANT_CAST_ON_TAPPED
@ SPELL_FAILED_TARGET_AURASTATE
@ SPELL_FAILED_NOT_IN_RAID_INSTANCE
@ SPELL_FAILED_BM_OR_INVISGOD
@ SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW
@ SPELL_FAILED_ONLY_SHAPESHIFT
@ SPELL_FAILED_TARGETS_DEAD
@ SPELL_FAILED_TARGET_NOT_GHOST
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED
@ SPELL_FAILED_NOT_SHAPESHIFT
@ SPELL_FAILED_TARGET_NO_WEAPONS
@ SPELL_FAILED_REQUIRES_AREA
@ SPELL_FAILED_TARGET_AFFECTING_COMBAT
@ SPELL_ATTR4_SPELL_VS_EXTEND_COST
@ SPELL_ATTR4_CAST_ONLY_IN_OUTLAND
@ SPELL_ATTR6_CAN_TARGET_INVISIBLE
@ SPELL_ATTR6_NOT_IN_RAID_INSTANCE
@ SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED
@ SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE
@ SPELL_AURA_PREVENT_RESURRECTION
@ SPELL_AURA_HASTE_RANGED
@ SPELL_AURA_DISPEL_IMMUNITY
@ SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE
@ SPELL_AURA_MOD_ATTACKSPEED
@ SPELL_AURA_MOD_ATTACK_POWER
@ SPELL_AURA_CHANNEL_DEATH_ITEM
@ SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE
@ SPELL_AURA_MOD_DISARM_RANGED
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE
@ SPELL_AURA_TRACK_RESOURCES
@ SPELL_AURA_MOD_PARRY_PERCENT
@ SPELL_AURA_MOD_SHAPESHIFT
@ SPELL_AURA_MOD_SPELL_HIT_CHANCE
@ SPELL_AURA_DAMAGE_SHIELD
@ SPELL_AURA_OBS_MOD_HEALTH
@ SPELL_AURA_PERIODIC_HEALTH_FUNNEL
@ SPELL_AURA_ADD_PCT_MODIFIER
@ SPELL_AURA_PERIODIC_MANA_LEECH
@ SPELL_AURA_MOD_POSSESS_PET
@ SPELL_AURA_MOD_INCREASE_SPEED
@ SPELL_AURA_MOD_RESISTANCE
@ SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_HASTE_SPELLS
@ SPELL_AURA_MOD_INCREASE_HEALTH
@ SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE
@ SPELL_AURA_MOD_POWER_REGEN
@ SPELL_AURA_MOD_HEALING_DONE_PERCENT
@ SPELL_AURA_PREVENTS_FLEEING
@ SPELL_AURA_OBS_MOD_POWER
@ SPELL_AURA_ADD_FLAT_MODIFIER
@ SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE
@ SPELL_AURA_TRACK_STEALTHED
@ SPELL_AURA_MOD_MELEE_HASTE
@ SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS
@ SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE
@ SPELL_AURA_SCHOOL_HEAL_ABSORB
@ SPELL_AURA_MOD_SPELL_CRIT_CHANCE
@ SPELL_AURA_MOD_HIT_CHANCE
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_MOD_HEALTH_REGEN_PERCENT
@ SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
@ SPELL_AURA_MOD_DODGE_PERCENT
@ SPELL_AURA_MOD_INCREASE_SWIM_SPEED
@ SPELL_AURA_MOD_POWER_COST_SCHOOL_PCT
@ SPELL_AURA_MOD_DISARM_OFFHAND
@ SPELL_AURA_ADD_TARGET_TRIGGER
@ SPELL_AURA_MOD_HEALING_DONE
@ SPELL_AURA_MOD_RANGED_ATTACK_POWER
@ SPELL_AURA_MOD_HEALING_PCT
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
@ SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE
@ SPELL_AURA_MOD_RANGED_HASTE
@ SPELL_AURA_SCHOOL_IMMUNITY
@ SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
@ SPELL_AURA_MOD_POWER_COST_SCHOOL
@ SPELL_AURA_MECHANIC_IMMUNITY
@ SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE
@ SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN
@ SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN
@ SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT
@ SPELL_AURA_MOD_DAMAGE_TAKEN
@ SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE
@ SPELL_AURA_MOD_CRIT_PCT
@ SPELL_AURA_MOD_PACIFY_SILENCE
@ SPELL_AURA_MOD_COOLDOWN
@ SPELL_AURA_MOD_SPEED_SLOW_ALL
@ SPELL_AURA_MOD_SPEED_ALWAYS
@ SPELL_AURA_EFFECT_IMMUNITY
@ SPELL_AURA_MOD_DECREASE_SPEED
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_MOD_RESISTANCE_PCT
@ SPELL_AURA_PERIODIC_ENERGIZE
@ SPELL_AURA_MOD_WEAPON_CRIT_PERCENT
@ SPELL_AURA_MOD_DAMAGE_DONE_CREATURE
@ SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL
@ SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR
@ SPELL_AURA_PERIODIC_LEECH
@ SPELL_AURA_MOD_LANGUAGE
@ SPELL_AURA_PROC_TRIGGER_DAMAGE
@ SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE
@ SPELL_AURA_MOD_DAMAGE_FROM_CASTER
@ SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT
@ SPELL_AURA_DAMAGE_IMMUNITY
@ SPELL_AURA_MOD_PERCENT_STAT
@ SPELL_AURA_MOD_DAMAGE_DONE
@ SPELL_AURA_TRACK_CREATURES
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT
@ SPELL_AURA_STATE_IMMUNITY
@ SPELL_AURA_MOD_UNATTACKABLE
@ SPELL_AURA_MOD_DETECT_RANGE
@ SPELL_AURA_OVERRIDE_CLASS_SCRIPTS
@ SPELL_AURA_MOD_MELEE_RANGED_HASTE
@ SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ SPELL_AURA_MOD_ATTACK_POWER_PCT
@ SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED
@ SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT
@ SPELL_AURA_MECHANIC_IMMUNITY_MASK
@ SPELL_AURA_SET_VEHICLE_ID
@ SPELL_INTERRUPT_FLAG_INTERRUPT
@ SPELLMOD_CRITICAL_CHANCE
@ SPELLMOD_SPELL_COST_REFUND_ON_FAIL
@ SPELLMOD_VALUE_MULTIPLIER
@ SPELLMOD_DAMAGE_MULTIPLIER
@ SPELLMOD_GLOBAL_COOLDOWN
@ SPELLMOD_ACTIVATION_TIME
@ TARGET_FLAG_CORPSE_ALLY
@ TARGET_FLAG_UNIT_MINIPET
@ TARGET_FLAG_UNIT_PASSENGER
@ TARGET_FLAG_GAMEOBJECT_ITEM
@ TARGET_FLAG_DEST_LOCATION
@ TARGET_FLAG_SOURCE_LOCATION
@ TARGET_FLAG_CORPSE_ENEMY
@ TARGET_FLAG_CORPSE_MASK
@ TARGET_FLAG_GAMEOBJECT_MASK
@ AURA_INTERRUPT_FLAG_MOVE
@ AURA_INTERRUPT_FLAG_TURNING
@ AURA_INTERRUPT_FLAG_NOT_SEATED
bool _isPositiveTarget(SpellEffectInfo const &effect)
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType)
bool _isPositiveEffectImpl(SpellInfo const *spellInfo, SpellEffectInfo const &effect, std::unordered_set< std::pair< uint32, SpellEffIndex > > &visited)
@ TARGET_CHECK_RAID_CLASS
SpellEffectImplicitTargetTypes
@ EFFECT_IMPLICIT_TARGET_NONE
@ EFFECT_IMPLICIT_TARGET_EXPLICIT
SpellTargetSelectionCategories
@ TARGET_SELECT_CATEGORY_CONE
@ TARGET_SELECT_CATEGORY_AREA
@ TARGET_SELECT_CATEGORY_DEFAULT
@ TARGET_SELECT_CATEGORY_NEARBY
@ TARGET_SELECT_CATEGORY_NYI
@ TARGET_SELECT_CATEGORY_TRAJ
@ TARGET_SELECT_CATEGORY_CHANNEL
SpellTargetDirectionTypes
@ TARGET_OBJECT_TYPE_UNIT
@ TARGET_OBJECT_TYPE_ITEM
@ TARGET_OBJECT_TYPE_CORPSE
@ TARGET_OBJECT_TYPE_UNIT_AND_DEST
@ TARGET_OBJECT_TYPE_NONE
@ TARGET_OBJECT_TYPE_DEST
@ TARGET_OBJECT_TYPE_GOBJ
@ TARGET_OBJECT_TYPE_CORPSE_ALLY
@ TARGET_OBJECT_TYPE_CORPSE_ENEMY
@ TARGET_OBJECT_TYPE_GOBJ_ITEM
@ SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET
@ SPELL_ATTR0_CU_NEGATIVE_EFF2
@ SPELL_ATTR0_CU_NEGATIVE_EFF1
@ SPELL_ATTR0_CU_NEGATIVE
@ SPELL_ATTR0_CU_NEGATIVE_EFF0
@ SPELL_ATTR0_CU_PICKPOCKET
@ SPELL_SPECIFIC_MAGE_ARMOR
@ SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE
@ SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT
@ SPELL_SPECIFIC_ELEMENTAL_SHIELD
@ SPELL_SPECIFIC_WARLOCK_CORRUPTION
@ SPELL_SPECIFIC_PRESENCE
@ SPELL_SPECIFIC_JUDGEMENT
@ SPELL_SPECIFIC_WARRIOR_ENRAGE
@ SPELL_SPECIFIC_WARLOCK_ARMOR
@ SPELL_SPECIFIC_MAGE_POLYMORPH
@ SPELL_SPECIFIC_FOOD_AND_DRINK
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType)
SpellTargetReferenceTypes
@ TARGET_REFERENCE_TYPE_SRC
@ TARGET_REFERENCE_TYPE_TARGET
@ TARGET_REFERENCE_TYPE_LAST
@ TARGET_REFERENCE_TYPE_NONE
@ TARGET_REFERENCE_TYPE_CASTER
@ TARGET_REFERENCE_TYPE_DEST
bool IsPrimaryProfessionSkill(uint32 skill)
bool IsProfessionOrRidingSkill(uint32 skill)
@ SPELLFAMILYFLAG1_HUNTER_EXPLOSIVE_SHOT
bool IsProfessionSkill(uint32 skill)
std::pair< SpellAreaMap::const_iterator, SpellAreaMap::const_iterator > SpellAreaMapBounds
std::pair< SkillLineAbilityMap::const_iterator, SkillLineAbilityMap::const_iterator > SkillLineAbilityMapBounds
@ UNIT_FLAG_PET_IN_COMBAT
T CalculatePct(T base, U pct)
SpellInfo const * GetSpellInfo() const
AuraType GetAuraType() const
SpellEffectInfo const & GetSpellEffectInfo() const
SpellInfo const * GetSpellInfo() const
BattlegroundStatus GetStatus() const
bool IsFitToSpellRequirements(SpellInfo const *spellInfo) const
static Creature * ToCreature(Object *o)
static Unit * ToUnit(Object *o)
static Corpse * ToCorpse(Object *o)
static Player * ToPlayer(Object *o)
bool InBattleground() const
Battleground * GetBattleground() const
bool IsGameMaster() const
bool CanFlyInZone(uint32 mapid, uint32 zone, SpellInfo const *bySpell) const
Item * GetWeaponForAttack(WeaponAttackType attackType, bool useable=false) const
bool IsUseEquipedWeapon(bool mainhand) const
static std::array< StaticData, TOTAL_SPELL_EFFECTS > _data
bool IsUnitOwnedAuraEffect() const
float CalcDamageMultiplier(WorldObject *caster, Spell *spell=nullptr) const
float PointsPerComboPoint
float CalcRadius(WorldObject *caster=nullptr, Spell *=nullptr) const
float CalcValueMultiplier(WorldObject *caster, Spell *spell=nullptr) const
ImmunityInfo const * GetImmunityInfo() const
std::unique_ptr< ImmunityInfo > _immunityInfo
bool IsAreaAuraEffect() const
SpellInfo const * _spellInfo
uint32 GetMissingTargetMask(bool srcSet=false, bool destSet=false, uint32 mask=0) const
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr) const
bool IsTargetingArea() const
SpellEffectImplicitTargetTypes GetImplicitTargetType() const
SpellTargetObjectTypes GetUsedTargetObjectType() const
std::vector< Condition * > * ImplicitTargetConditions
SpellRadiusEntry const * RadiusEntry
SpellEffIndex EffectIndex
uint32 GetProvidedTargetMask() const
SpellImplicitTargetInfo TargetA
int32 CalcBaseValue(int32 value) const
SpellImplicitTargetInfo TargetB
SpellTargetDirectionTypes GetDirectionType() const
SpellTargetCheckTypes GetCheckType() const
static std::array< StaticData, TOTAL_SPELL_TARGETS > _data
SpellTargetReferenceTypes GetReferenceType() const
SpellTargetSelectionCategories GetSelectionCategory() const
SpellImplicitTargetInfo()
SpellTargetObjectTypes GetObjectType() const
float CalcDirectionAngle() const
uint32 GetExplicitTargetMask(bool &srcSet, bool &dstSet) const
Targets GetTarget() const
uint32 ChannelInterruptFlags
bool IsExplicitDiscovery() const
uint32 RequiresSpellFocus
void _LoadSpellDiminishInfo()
bool IsRankOf(SpellInfo const *spellInfo) const
uint32 GetMaxTicks() const
std::array< int32, MAX_SPELL_REAGENTS > Reagent
uint32 ExcludeTargetAuraSpell
bool CanDispelAura(SpellInfo const *auraSpellInfo) const
bool IsProfessionOrRiding() const
Mechanics GetEffectMechanic(SpellEffIndex effIndex) const
SpellInfo const * GetFirstRankSpell() const
bool IsAutocastable() const
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) const
uint32 GetCategory() const
SpellCastResult CheckShapeshift(uint32 form) const
bool IsRequiringDeadTarget() const
bool IsAffected(uint32 familyName, flag96 const &familyFlags) const
SpellEffectInfo & _GetEffect(SpellEffIndex index)
SpellDiminishInfo _diminishInfoNonTriggered
DiminishingLevels GetDiminishingReturnsMaxLevel(bool triggered) const
SpellInfo(SpellEntry const *spellEntry)
bool IsAuraExclusiveBySpecificPerCasterWith(SpellInfo const *spellInfo) const
SpellInfo const * GetPrevRankSpell() const
uint32 ManaPerSecondPerLevel
bool IsDeathPersistent() const
bool IsCooldownStartedOnEvent() const
bool IsAuraExclusiveBySpecificWith(SpellInfo const *spellInfo) const
SpellRangeEntry const * RangeEntry
bool IsLootCrafting() const
bool IsStackableOnOneSlotWithDifferentCasters() const
bool HasOnlyDamageEffects() const
uint32 GetDispelMask() const
bool IsHighRankOf(SpellInfo const *spellInfo) const
uint32 CalcCastTime(Spell *spell=nullptr) const
SpellInfo const * GetAuraRankForLevel(uint8 level) const
bool NeedsToBeTriggeredByCaster(SpellInfo const *triggeringSpell) const
uint32 GetRecoveryTime() const
SpellSpecificType GetSpellSpecific() const
uint32 ExcludeCasterAuraState
bool IsMultiSlotAura() const
void _UnloadImplicitTargetConditionLists()
float GetMinRange(bool positive=false) const
int32 GetMaxDuration() const
bool HasInitialAggro() const
bool IsAbilityOfSkillType(uint32 skillType) const
uint32 _allowedMechanicMask
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > & _GetEffects()
bool IsAffectedBySpellMod(SpellModifier const *mod) const
SpellCastResult CheckTarget(WorldObject const *caster, WorldObject const *target, bool implicit=true) const
std::array< uint32, 2 > SpellVisual
SpellDiminishInfo _diminishInfoTriggered
bool CheckTargetCreatureType(Unit const *target) const
DiminishingGroup GetDiminishingReturnsGroupForSpell(bool triggered) const
bool IsStackableWithRanks() const
bool IsItemFitToSpellRequirements(Item const *item) const
bool CanBeUsedInCombat() const
uint32 CategoryRecoveryTime
uint32 GetSpellMechanicMaskByEffectMask(uint32 effectMask) const
uint32 ExplicitTargetMask
bool IsAbilityLearnedWithProfession() const
bool IsAllowingDeadTarget() const
void _InitializeSpellPositivity()
WeaponAttackType GetAttackType() const
SpellSchoolMask GetSchoolMask() const
bool IsPrimaryProfession() const
std::array< uint32, MAX_SPELL_REAGENTS > ReagentCount
void ApplyAllSpellImmunitiesTo(Unit *target, SpellEffectInfo const &spellEffectInfo, bool apply) const
bool NeedsComboPoints() const
AuraStateType GetAuraState() const
bool HasAttribute(SpellAttr0 attribute) const
SpellDurationEntry const * DurationEntry
bool IsNextMeleeSwingSpell() const
int32 CalcPowerCost(WorldObject const *caster, SpellSchoolMask schoolMask, Spell *spell=nullptr) const
bool CanSpellProvideImmunityAgainstAura(SpellInfo const *auraSpellInfo) const
uint32 GetEffectMechanicMask(SpellEffIndex effIndex) const
bool IsPassiveStackableWithRanks() const
bool SpellCancelsAuraEffect(AuraEffect const *aurEff) const
SpellCategoryEntry const * CategoryEntry
int32 GetDiminishingReturnsLimitDuration(bool triggered) const
uint32 MaxAffectedTargets
int32 GetDuration() const
bool IsAffectedBySpellMods() const
SpellCastResult CheckVehicle(Unit const *caster) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
uint32 ManaCostPercentage
int32 EquippedItemSubClassMask
SpellSpecificType _spellSpecific
uint32 GetExplicitTargetMask() const
SpellCastResult CheckExplicitTarget(WorldObject const *caster, WorldObject const *target, Item const *itemTarget=nullptr) const
bool HasAreaAuraEffect() const
uint32 GetAllowedMechanicMask() const
uint32 GetAllEffectsMechanicMask() const
bool CanPierceImmuneAura(SpellInfo const *auraSpellInfo) const
SpellChainNode const * ChainEntry
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > _effects
void _InitializeExplicitTargetMask()
bool IsDifferentRankOf(SpellInfo const *spellInfo) const
uint32 GetMechanicImmunityMask(Unit *caster) const
SpellInfo const * GetLastRankSpell() const
bool NeedsExplicitUnitTarget() const
SpellInfo const * GetNextRankSpell() const
SpellCastTimesEntry const * CastTimeEntry
DiminishingReturnsType GetDiminishingReturnsGroupType(bool triggered) const
int32 EquippedItemInventoryTypeMask
uint32 ExcludeTargetAuraState
bool IsPrimaryProfessionFirstRank() const
bool HasEffect(SpellEffects effect) const
bool IsAffectingArea() const
bool IsProfession() const
bool IsAutoRepeatRangedSpell() const
SpellCastResult CheckLocation(uint32 map_id, uint32 zone_id, uint32 area_id, Player const *player=nullptr, bool strict=true) const
uint32 TargetCreatureType
bool IsMoveAllowedChannel() const
bool IsRangedWeaponSpell() const
uint32 ExcludeCasterAuraSpell
bool HasAura(AuraType aura) const
bool IsTargetingArea() const
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > const & GetEffects() const
uint32 StartRecoveryCategory
std::array< char const *, 16 > SpellName
uint32 AuraInterruptFlags
void _LoadSpellSpecific()
bool IsBreakingStealth() const
bool IsPositiveEffect(uint8 effIndex) const
std::array< char const *, 16 > Rank
bool IsSingleTarget() const
WorldObject * GetCaster() const
auto find(Key const &value) const
std::pair< iterator, bool > insert(Key const &key)
Vehicle * GetVehicle() const
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
uint32 GetMechanicImmunityMask() const
ShapeshiftForm GetShapeshiftForm() const
bool HasUnitFlag(UnitFlags flags) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
void RemoveAurasWithMechanic(uint32 mechanicMaskToRemove, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, uint32 exceptSpellId=0, bool withEffectMechanics=false)
uint32 GetVirtualItemId(uint32 slot) const
uint32 GetMaxPower(Powers power) const
uint32 GetCreateHealth() const
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=nullptr, Unit const *Caster=nullptr) const
bool HasAuraType(AuraType auraType) const
uint32 GetAttackTime(WeaponAttackType att) const
ObjectGuid GetCritterGUID() const
void RemoveAppliedAuras(std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool HasUnitState(const uint32 f) const
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply)
bool IsInRaidWith(Unit const *unit) const
uint8 GetComboPoints(Unit const *who=nullptr) const
--------—Combo point system----------------—
bool IsControlledByPlayer() const
uint32 GetPower(Powers power) const
uint32 GetCreatureTypeMask() const
std::list< AuraEffect * > AuraEffectList
uint32 GetCreateMana() const
bool IsInPartyWith(Unit const *unit) const
VehicleSeatEntry const * GetSeatForPassenger(Unit const *passenger) const
Returns information on the seat of specified passenger, represented by the format in VehicleSeat....
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
bool CanSeeOrDetect(WorldObject const *obj, bool implicitDetect=false, bool distanceCheck=false, bool checkAlert=false) const
float ApplyEffectModifiers(SpellInfo const *spellInfo, uint8 effIndex, float value) const
Player * GetSpellModOwner() const
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
void ModSpellCastTime(SpellInfo const *spellInfo, int32 &castTime, Spell *spell=nullptr) const
Player * GetAffectingPlayer() const
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
uint32 AreaID[MAX_GROUP_AREA_IDS]
bool IsBattleground() const
bool IsBattleArena() const
int32 DiminishDurationLimit
DiminishingReturnsType DiminishReturnType
DiminishingLevels DiminishMaxLevel
DiminishingGroup DiminishGroup
uint32 ApplyHarmfulAuraImmuneMask
Trinity::Containers::FlatSet< SpellEffects > SpellEffectImmune
ImmunityInfo(ImmunityInfo &&) noexcept=delete
uint32 MechanicImmuneMask
Trinity::Containers::FlatSet< AuraType > AuraTypeImmune
ImmunityInfo(ImmunityInfo const &)=delete
bool RemoveEffectsWithMechanic
uint32 AuraInterruptFlags
std::array< float, MAX_SPELL_EFFECTS > EffectBonusCoefficient
std::array< int32, MAX_SPELL_EFFECTS > EffectMiscValue
std::array< uint32, 2 > ShapeshiftExclude
std::array< flag96, MAX_SPELL_EFFECTS > EffectSpellClassMask
std::array< uint32, MAX_SPELL_EFFECTS > EffectChainTargets
std::array< uint32, 2 > SpellVisualID
uint32 CategoryRecoveryTime
std::array< uint32, MAX_SPELL_EFFECTS > EffectTriggerSpell
std::array< uint32, MAX_SPELL_EFFECTS > EffectMechanic
uint32 TargetCreatureType
std::array< uint32, MAX_SPELL_EFFECTS > EffectAuraPeriod
std::array< uint32, 2 > RequiredTotemCategoryID
std::array< uint32, MAX_SPELL_EFFECTS > EffectImplicitTargetA
std::array< uint32, MAX_SPELL_EFFECTS > EffectRadiusIndex
std::array< uint32, MAX_SPELL_EFFECTS > EffectItemType
std::array< char const *, 16 > Name
uint32 StartRecoveryCategory
std::array< uint32, MAX_SPELL_EFFECTS > EffectAura
int32 EquippedItemSubclass
std::array< int32, MAX_SPELL_EFFECTS > EffectBasePoints
std::array< float, MAX_SPELL_EFFECTS > EffectPointsPerCombo
std::array< uint32, MAX_SPELL_EFFECTS > EffectImplicitTargetB
uint32 ExcludeTargetAuraSpell
uint32 ExcludeCasterAuraState
uint32 ChannelInterruptFlags
std::array< uint32, MAX_SPELL_EFFECTS > Effect
std::array< float, MAX_SPELL_EFFECTS > EffectChainAmplitude
uint32 RequiresSpellFocus
std::array< char const *, 16 > NameSubtext
std::array< float, MAX_SPELL_EFFECTS > EffectAmplitude
std::array< float, MAX_SPELL_EFFECTS > EffectRealPointsPerLevel
uint32 ExcludeCasterAuraSpell
int32 EquippedItemInvTypes
std::array< int32, MAX_SPELL_EFFECTS > EffectMiscValueB
std::array< uint32, 2 > Totem
std::array< uint32, 2 > ShapeshiftMask
std::array< uint32, MAX_SPELL_REAGENTS > ReagentCount
uint32 ManaPerSecondPerLevel
std::array< int32, MAX_SPELL_REAGENTS > Reagent
std::array< int32, MAX_SPELL_EFFECTS > EffectDieSides
uint32 ExcludeTargetAuraState