22 struct ShapeshiftBoostSpellInfo
29 struct RaceGenderDisplayInfo
36 struct TransformDisplayInfo
39 bool RequiresPlayerRace;
40 RaceGenderDisplayInfo
const* RaceDisplays;
41 uint8 RaceDisplayCount;
46 enum AuraImmunityAmountCondition
48 AURA_IMMUNITY_AMOUNT_ANY,
49 AURA_IMMUNITY_AMOUNT_NONZERO,
50 AURA_IMMUNITY_AMOUNT_ZERO,
51 AURA_IMMUNITY_AMOUNT_ONE
54 struct AuraStateImmunityRuleInfo
57 AuraImmunityAmountCondition AmountCondition;
60 struct GenderedAuraSpellInfo
67 struct AuraRemoveTriggerSpellInfo
74 struct LichKingIntroVoiceoverInfo
84 SHAPESHIFT_FORM_CAT = 0x01,
85 SHAPESHIFT_FORM_TRAVEL = 0x03,
86 SHAPESHIFT_FORM_AQUA = 0x04,
87 SHAPESHIFT_FORM_BEAR = 0x05,
88 SHAPESHIFT_FORM_BATTLE_STANCE = 0x11,
89 SHAPESHIFT_FORM_DEFENSIVE_STANCE = 0x12,
90 SHAPESHIFT_FORM_BERSERKER_STANCE = 0x13,
91 SHAPESHIFT_FORM_METAMORPHOSIS = 0x16,
92 SHAPESHIFT_FORM_FLIGHT_EPIC = 0x1B,
93 SHAPESHIFT_FORM_SHADOW = 0x1C,
94 SHAPESHIFT_FORM_FLIGHT = 0x1D,
95 SHAPESHIFT_FORM_MOONKIN = 0x1F,
96 SHAPESHIFT_FORM_SPIRIT_OF_REDEMPTION = 0x20
99 uint32 const SPELL_SHADOW_FOCUS_DUMMY_TALENT = 108209;
100 uint32 const SPELL_SHADOW_FOCUS_AURA = 112942;
101 uint8 const RACE_HUMAN_ID = 1;
102 uint8 const RACE_ORC_ID = 2;
103 uint8 const RACE_DWARF_ID = 3;
104 uint8 const RACE_NIGHTELF_ID = 4;
105 uint8 const RACE_UNDEAD_PLAYER_ID = 5;
106 uint8 const RACE_TAUREN_ID = 6;
107 uint8 const RACE_GNOME_ID = 7;
108 uint8 const RACE_TROLL_ID = 8;
109 uint8 const RACE_BLOODELF_ID = 10;
110 uint8 const RACE_DRAENEI_ID = 11;
111 uint8 const GENDER_MALE_ID = 0;
112 uint8 const GENDER_FEMALE_ID = 1;
113 uint32 const DISPLAY_UNKNOWN_TRANSFORM_FALLBACK = 16358;
114 uint32 const SPELL_GLYPH_OF_THE_PENGUIN = 52648;
115 uint32 const DISPLAY_GLYPH_OF_THE_PENGUIN = 26452;
116 uint32 const SPELL_DRAGONMAW_ILLUSION = 42016;
117 uint32 const DISPLAY_DRAGONMAW_ILLUSION_MOUNT = 16314;
118 uint32 const SPELL_LEADER_OF_THE_PACK = 17007;
119 uint32 const SPELL_LEADER_OF_THE_PACK_TRIGGERED = 24932;
121 uint32 const SPELL_NET_O_MATIC_SELF_ROOT = 13138;
122 uint32 const SPELL_KILL_COMMAND_OWNER_AURA = 34027;
123 uint32 const SPELL_KILL_COMMAND_PET_AURA = 58914;
124 uint32 const SPELL_PERIODIC_FRENZIED_REGENERATION_HEAL = 22845;
125 uint32 const SPELL_PERIODIC_EXPLOSIVE_SHOT_TRIGGER = 53352;
126 uint32 const SPELL_PERIODIC_DEATH_AND_DECAY_TRIGGER = 52212;
127 uint32 const SPELL_PERIODIC_HYSTERIA = 49016;
128 uint32 const SPELL_PERIODIC_RESTORATION_ENERGIZE = 23493;
129 uint32 const SPELL_PERIODIC_FROST_BLAST_TRIGGER = 29879;
130 uint32 const SPELL_PERIODIC_DOOM_TRIGGER = 31350;
131 uint32 const NPC_SPELLCLOTH_ELEMENTAL = 17870;
132 uint32 const SPELL_EYE_OF_GRILLOK = 38495;
133 uint32 const SPELL_TOTEMIC_MASTERY_AURA = 38443;
134 uint32 const SPELL_TOTEMIC_MASTERY_TRIGGER = 38437;
135 uint32 const SPELL_DRAIN_SOUL_SHARD = 95810;
137 uint32 const SPELL_WILD_GROWTH_T10_RESTORATION = 70658;
138 uint32 const SPELL_MANA_FEED_TRIGGER = 32554;
139 uint32 const SPELL_HEROIC_FURY_COOLDOWN = 20252;
140 uint32 const SPELL_DRUID_T8_RESTORATION = 64760;
141 uint32 const SPELL_DRUID_T8_RESTORATION_TRIGGER = 64801;
142 uint32 const SPELL_DRUID_CAT_FORM = 768;
144 uint32 const SPELL_POLYMORPH_SHEEP_SOUND = 61634;
145 uint32 const SPELL_POLYMORPH_PENGUIN_SOUND = 61635;
146 uint32 const SPELL_IMPROVED_DEVOURING_PLAGUE_DAMAGE = 63675;
147 uint32 const SPELL_IMPROVED_DEVOURING_PLAGUE_HEAL = 75999;
148 uint32 const SPELL_GLYPH_OF_POWER_WORD_SHIELD = 55672;
149 uint32 const SPELL_GLYPH_OF_POWER_WORD_SHIELD_HEAL = 56160;
150 uint32 const SPELL_GLYPH_OF_BLURRED_SPEED = 58039;
151 uint32 const SPELL_GLYPH_OF_BLURRED_SPEED_SPRINT = 61922;
154 uint32 const SPELL_AVENGING_WRATH_MARKER = 61988;
155 uint32 const SPELL_SHARED_SUFFERING_TRIGGER = 72373;
156 uint32 const SPELL_INVISIBILITY_FADE = 32612;
157 uint32 const SPELL_RAPTURE_RANK = 47535;
158 uint32 const SPELL_RAPTURE_ENERGIZE = 47755;
159 uint32 const SPELL_GLYPH_OF_FREEZING_TRAP = 56845;
160 uint32 const SPELL_GLYPH_OF_FREEZING_TRAP_TRIGGER = 61394;
161 uint32 const SPELL_PROWL = 5215;
163 uint32 const SPELL_DRUID_T10_FERAL = 70726;
164 uint32 const SPELL_DRUID_T10_FERAL_TRIGGER = 70725;
165 uint32 const SPELL_BESTIAL_WRATH = 19574;
166 uint32 const SPELL_THE_BEAST_WITHIN_TALENT = 34692;
167 uint32 const SPELL_THE_BEAST_WITHIN_TRIGGER = 34471;
168 uint32 const SPELL_DIVINE_FAVOR = 31842;
169 uint32 const SPELL_PALADIN_T10_HOLY = 70755;
170 uint32 const SPELL_PALADIN_T10_HOLY_TRIGGER = 71166;
171 uint32 const SPELL_DRAIN_SOUL_EXECUTE_AURA = 100001;
172 uint32 const NPC_TAGGED_BLACKSILT_SCOUT = 17654;
173 uint32 const NPC_UNTAGGED_BLACKSILT_SCOUT = 17326;
174 uint32 const NPC_FESTIVE_HOLIDAY_MOUNT_FLYING = 24906;
175 uint32 const NPC_FESTIVE_HOLIDAY_MOUNT_GROUND = 15665;
177 uint32 const CrowdControlMechanics[] =
193 uint32 const StunMechanics[] =
198 uint32 const LightControlMechanics[] =
206 uint32 const MovementLossControlAppliedMechanics[] =
226 uint32 const CrowdControlAuraTypes[] =
236 uint32 const StunAuraTypes[] =
241 uint32 const TauntAuraTypes[] =
246 uint32 const LightControlAuraTypes[] =
252 uint32 const AttackMeEffects[] =
257 uint32 const KnockbackEffects[] =
263 uint8 const CrowdControlMechanicCount =
sizeof(CrowdControlMechanics) /
sizeof(
uint32);
264 uint8 const StunMechanicCount =
sizeof(StunMechanics) /
sizeof(
uint32);
265 uint8 const LightControlMechanicCount =
sizeof(LightControlMechanics) /
sizeof(
uint32);
266 uint8 const MovementLossControlAppliedMechanicCount =
sizeof(MovementLossControlAppliedMechanics) /
sizeof(
uint32);
267 uint8 const CrowdControlAuraTypeCount =
sizeof(CrowdControlAuraTypes) /
sizeof(
uint32);
268 uint8 const StunAuraTypeCount =
sizeof(StunAuraTypes) /
sizeof(
uint32);
269 uint8 const TauntAuraTypeCount =
sizeof(TauntAuraTypes) /
sizeof(
uint32);
270 uint8 const LightControlAuraTypeCount =
sizeof(LightControlAuraTypes) /
sizeof(
uint32);
271 uint8 const AttackMeEffectCount =
sizeof(AttackMeEffects) /
sizeof(
uint32);
272 uint8 const KnockbackEffectCount =
sizeof(KnockbackEffects) /
sizeof(
uint32);
274 SpellIdPair
const QuestTameFinalSpells[] =
324 ShapeshiftBoostSpellInfo
const ShapeshiftBoostSpells[] =
326 { SHAPESHIFT_FORM_CAT, { 3025, 48629, 106840, 113636 }, 4 },
327 { SHAPESHIFT_FORM_TRAVEL, { 5419, 0, 0, 0 }, 1 },
328 { SHAPESHIFT_FORM_AQUA, { 5421, 0, 0, 0 }, 1 },
329 { SHAPESHIFT_FORM_BEAR, { 1178, 21178, 106829, 106899 }, 4 },
330 { SHAPESHIFT_FORM_BATTLE_STANCE, { 21156, 0, 0, 0 }, 1 },
331 { SHAPESHIFT_FORM_DEFENSIVE_STANCE, { 7376, 0, 0, 0 }, 1 },
332 { SHAPESHIFT_FORM_BERSERKER_STANCE, { 7381, 0, 0, 0 }, 1 },
333 { SHAPESHIFT_FORM_MOONKIN, { 24905, 24907, 0, 0 }, 2 },
334 { SHAPESHIFT_FORM_FLIGHT, { 33948, 34764, 0, 0 }, 2 },
335 { SHAPESHIFT_FORM_FLIGHT_EPIC, { 40122, 40121, 0, 0 }, 2 },
336 { SHAPESHIFT_FORM_METAMORPHOSIS, { 54817, 54879, 0, 0 }, 2 },
337 { SHAPESHIFT_FORM_SPIRIT_OF_REDEMPTION, { 27792, 27795, 0, 0 }, 2 },
338 { SHAPESHIFT_FORM_SHADOW, { 49868, 0, 0, 0 }, 1 }
341 SpellIdPair
const NurturingInstinctTriggeredSpells[] =
346 SpellIdPair
const RaidProcChargeTriggeredSpells[] =
353 GenderedAuraSpellInfo
const BloodElfIllusionDisguises[] =
355 { 37096, 37095, 37093 },
356 { 46354, 46356, 46355 }
359 SpellIdPair
const AuraDummyTriggeredSpells[] =
366 AuraRemoveTriggerSpellInfo
const AuraRemoveTriggeredSpells[] =
369 { 44191, 44190, 46163 },
374 uint32 const DespawnOnRemoveAuras[] =
388 SpellIdPair
const StackingAuraTriggeredSpells[] =
394 LichKingIntroVoiceoverInfo
const LichKingIntroVoiceovers[] =
396 { 58204, 14970, 0, 58205 },
397 { 58205, 14971, 14972, 0 }
402 { 66149, 66152, 66153, 6 },
403 { 68396, 66152, 66153, 6 }
406 SpellIdPair
const PeriodicTriggerOverrideSpells[] =
412 { SPELL_EYE_OF_GRILLOK, 38530 },
417 uint32 const PeriodicRestorationAuras[] =
423 uint32 const ReagentConsumingPeriodicTriggerAuras[] =
442 uint32 const FullHealthRemovePeriodicDamageAuras[] =
452 uint32 const UnboundPlaguePeriodicDamageAuras[] =
460 uint32 const UnsavableSpecialAuras[] =
467 uint32 const UnsavableDruidEclipseAuras[] =
475 SpellIdPair
const StonedAuraTriggeredSpells[] =
481 SpellIdPair
const ArcanePotencyTriggeredSpells[] =
487 SpellIdPair
const ImprovedFearTriggeredSpells[] =
493 RaceGenderDisplayInfo
const OrbOfDeceptionDisplays[] =
495 { RACE_BLOODELF_ID, 17829, 17830 },
496 { RACE_ORC_ID, 10139, 10140 },
497 { RACE_TROLL_ID, 10135, 10134 },
498 { RACE_TAUREN_ID, 10136, 10147 },
499 { RACE_UNDEAD_PLAYER_ID, 10146, 10145 },
500 { RACE_DRAENEI_ID, 17827, 17828 },
501 { RACE_DWARF_ID, 10141, 10142 },
502 { RACE_GNOME_ID, 10148, 10149 },
503 { RACE_HUMAN_ID, 10137, 10138 },
504 { RACE_NIGHTELF_ID, 10143, 10144 }
507 RaceGenderDisplayInfo
const CorsairDisplays[] =
509 { RACE_BLOODELF_ID, 25032, 25043 },
510 { RACE_ORC_ID, 25039, 25050 },
511 { RACE_TROLL_ID, 25041, 25052 },
512 { RACE_TAUREN_ID, 25040, 25051 },
513 { RACE_UNDEAD_PLAYER_ID, 25042, 25053 },
514 { RACE_DRAENEI_ID, 25033, 25044 },
515 { RACE_DWARF_ID, 25034, 25045 },
516 { RACE_GNOME_ID, 25035, 25046 },
517 { RACE_HUMAN_ID, 25037, 25048 },
518 { RACE_NIGHTELF_ID, 25038, 25049 }
521 TransformDisplayInfo
const TransformDisplays[] =
523 { 16739,
true, OrbOfDeceptionDisplays, 10, 0, 0 },
524 { 42365,
false, NULL, 0, 21723, 21723 },
525 { 50517,
true, CorsairDisplays, 10, 0, 0 },
526 { 51926,
true, CorsairDisplays, 10, 0, 0 },
527 { 53806,
false, NULL, 0, 22512, 22512 },
528 { 65386,
false, NULL, 0, 29203, 29204 },
529 { 65495,
false, NULL, 0, 29203, 29204 },
530 { 75532,
false, NULL, 0, 31737, 31738 },
531 { 75531,
false, NULL, 0, 31654, 31655 }
534 TransformDisplayInfo
const* GetTransformDisplayInfo(
uint32 auraSpellId)
536 for (TransformDisplayInfo
const& transformDisplay : TransformDisplays)
537 if (transformDisplay.AuraSpellId == auraSpellId)
538 return &transformDisplay;
543 bool MatchesAuraImmunityAmount(AuraImmunityAmountCondition amountCondition,
int32 amount)
545 switch (amountCondition)
547 case AURA_IMMUNITY_AMOUNT_ANY:
549 case AURA_IMMUNITY_AMOUNT_NONZERO:
551 case AURA_IMMUNITY_AMOUNT_ZERO:
553 case AURA_IMMUNITY_AMOUNT_ONE:
562 AuraStateImmunityRuleInfo
const AuraStateImmunityRules[] =
564 { { 96, 0,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, NULL, 0 }, AURA_IMMUNITY_AMOUNT_NONZERO },
565 { { 1615, 0,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, NULL, 0 }, AURA_IMMUNITY_AMOUNT_NONZERO },
566 { { 679, 57742,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, NULL, 0 }, AURA_IMMUNITY_AMOUNT_ANY },
567 { { 1557, 64187,
AURA_IMMUNITY_MECHANIC_MASK_STUN, StunMechanics, StunMechanicCount, StunAuraTypes, StunAuraTypeCount, NULL, 0 }, AURA_IMMUNITY_AMOUNT_ANY },
568 { { 1557, 0,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, NULL, 0 }, AURA_IMMUNITY_AMOUNT_ANY },
569 { { 1614, 0,
AURA_IMMUNITY_MECHANIC_MASK_NONE, NULL, 0, TauntAuraTypes, TauntAuraTypeCount, AttackMeEffects, AttackMeEffectCount }, AURA_IMMUNITY_AMOUNT_ANY },
570 { { 1694, 0,
AURA_IMMUNITY_MECHANIC_MASK_NONE, NULL, 0, TauntAuraTypes, TauntAuraTypeCount, AttackMeEffects, AttackMeEffectCount }, AURA_IMMUNITY_AMOUNT_ANY },
571 { { 1630, 0,
AURA_IMMUNITY_MECHANIC_MASK_NONE, NULL, 0, TauntAuraTypes, TauntAuraTypeCount, AttackMeEffects, AttackMeEffectCount }, AURA_IMMUNITY_AMOUNT_ZERO },
572 { { 1630, 0,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, NULL, 0 }, AURA_IMMUNITY_AMOUNT_NONZERO },
573 { { 477, 0,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, KnockbackEffects, KnockbackEffectCount }, AURA_IMMUNITY_AMOUNT_ZERO },
574 { { 1733, 0,
AURA_IMMUNITY_MECHANIC_MASK_CROWD_CONTROL, CrowdControlMechanics, CrowdControlMechanicCount, CrowdControlAuraTypes, CrowdControlAuraTypeCount, KnockbackEffects, KnockbackEffectCount }, AURA_IMMUNITY_AMOUNT_ZERO },
589 for (
uint8 i = 0; i < mechanicCount; ++i)
597 for (
uint8 i = 0; i < spellCount; ++i)
598 if (spellIds[i] == spellId)
607 for (SpellIdPair
const& questTameSpell : QuestTameFinalSpells)
608 if (questTameSpell.AuraSpellId == auraSpellId)
609 return questTameSpell.TriggerSpellId;
617 if (championingAura.AuraSpellId == auraSpellId)
618 return &championingAura;
628 for (ShapeshiftBoostSpellInfo
const& shapeshiftBoost : ShapeshiftBoostSpells)
630 if (shapeshiftBoost.ShapeshiftForm != shapeshiftForm)
633 uint8 spellCount = shapeshiftBoost.SpellCount < maxSpellIds ? shapeshiftBoost.SpellCount : maxSpellIds;
634 for (
uint8 i = 0; i < spellCount; ++i)
635 spellIds[i] = shapeshiftBoost.SpellIds[i];
645 return SPELL_SHADOW_FOCUS_DUMMY_TALENT;
650 return SPELL_SHADOW_FOCUS_AURA;
655 for (SpellIdPair
const& nurturingInstinctSpell : NurturingInstinctTriggeredSpells)
656 if (nurturingInstinctSpell.AuraSpellId == auraSpellId)
657 return nurturingInstinctSpell.TriggerSpellId;
664 if (TransformDisplayInfo
const* transformDisplay = GetTransformDisplayInfo(auraSpellId))
665 return transformDisplay->RequiresPlayerRace;
672 TransformDisplayInfo
const* transformDisplay = GetTransformDisplayInfo(auraSpellId);
673 if (!transformDisplay)
676 if (!transformDisplay->RequiresPlayerRace)
677 return gender == GENDER_MALE_ID ? transformDisplay->MaleDisplayId : transformDisplay->FemaleDisplayId;
679 for (
uint8 i = 0; i < transformDisplay->RaceDisplayCount; ++i)
681 RaceGenderDisplayInfo
const& raceDisplay = transformDisplay->RaceDisplays[i];
682 if (raceDisplay.Race == race)
683 return gender == GENDER_MALE_ID ? raceDisplay.MaleDisplayId : raceDisplay.FemaleDisplayId;
691 return DISPLAY_UNKNOWN_TRANSFORM_FALLBACK;
696 return SPELL_GLYPH_OF_THE_PENGUIN;
701 return DISPLAY_GLYPH_OF_THE_PENGUIN;
706 return SPELL_DRAGONMAW_ILLUSION;
711 return DISPLAY_DRAGONMAW_ILLUSION_MOUNT;
716 return SPELL_LEADER_OF_THE_PACK;
721 return SPELL_LEADER_OF_THE_PACK_TRIGGERED;
731 for (SpellIdPair
const& triggeredSpell : RaidProcChargeTriggeredSpells)
732 if (triggeredSpell.AuraSpellId == auraSpellId)
733 return triggeredSpell.TriggerSpellId;
739 bool casterIsSummon,
bool ownerIsSummon)
741 if (!canStackWithDifferentCasters)
744 return !casterIsCreature || casterIsSummon || ownerIsSummon;
749 return SPELL_NET_O_MATIC_SELF_ROOT;
754 return SPELL_KILL_COMMAND_OWNER_AURA;
759 return SPELL_KILL_COMMAND_PET_AURA;
764 for (GenderedAuraSpellInfo
const& disguise : BloodElfIllusionDisguises)
766 if (disguise.AuraSpellId != auraSpellId)
769 if (gender == GENDER_MALE_ID)
770 return disguise.MaleSpellId;
771 if (gender == GENDER_FEMALE_ID)
772 return disguise.FemaleSpellId;
782 for (SpellIdPair
const& triggeredSpell : AuraDummyTriggeredSpells)
783 if (triggeredSpell.AuraSpellId == auraSpellId)
784 return triggeredSpell.TriggerSpellId;
791 for (AuraRemoveTriggerSpellInfo
const& triggeredSpell : AuraRemoveTriggeredSpells)
793 if (triggeredSpell.AuraSpellId != auraSpellId)
796 if (heroic && triggeredSpell.HeroicSpellId)
797 return triggeredSpell.HeroicSpellId;
799 return triggeredSpell.NormalSpellId;
807 return ContainsSpellId(DespawnOnRemoveAuras,
sizeof(DespawnOnRemoveAuras) /
sizeof(
uint32), auraSpellId);
812 for (SpellIdPair
const& triggeredSpell : StackingAuraTriggeredSpells)
813 if (triggeredSpell.AuraSpellId == auraSpellId)
814 return triggeredSpell.TriggerSpellId;
821 return apply ? NPC_TAGGED_BLACKSILT_SCOUT : NPC_UNTAGGED_BLACKSILT_SCOUT;
826 for (LichKingIntroVoiceoverInfo
const& voiceover : LichKingIntroVoiceovers)
827 if (voiceover.AuraSpellId == auraSpellId)
828 return voiceover.ApplySoundId;
835 for (LichKingIntroVoiceoverInfo
const& voiceover : LichKingIntroVoiceovers)
836 if (voiceover.AuraSpellId == auraSpellId)
837 return voiceover.RemoveSoundId;
844 for (LichKingIntroVoiceoverInfo
const& voiceover : LichKingIntroVoiceovers)
845 if (voiceover.AuraSpellId == auraSpellId)
846 return voiceover.ContinueSpellId;
853 return flying ? NPC_FESTIVE_HOLIDAY_MOUNT_FLYING : NPC_FESTIVE_HOLIDAY_MOUNT_GROUND;
859 if (rule.AuraSpellId == auraSpellId)
867 return auraSpellId == 62399 ? 62475 : 0;
872 return auraSpellId == 64821 ? 64774 : 0;
877 return SPELL_PERIODIC_FRENZIED_REGENERATION_HEAL;
882 uint32 const spellIds[] = { 57840, 57841 };
883 return index < 2 ? spellIds[index] : 0;
888 return SPELL_PERIODIC_EXPLOSIVE_SHOT_TRIGGER;
893 return SPELL_PERIODIC_DEATH_AND_DECAY_TRIGGER;
898 return SPELL_PERIODIC_HYSTERIA;
903 for (SpellIdPair
const& triggeredSpell : PeriodicTriggerOverrideSpells)
904 if (triggeredSpell.AuraSpellId == auraSpellId)
905 return triggeredSpell.TriggerSpellId;
912 return ContainsSpellId(PeriodicRestorationAuras,
sizeof(PeriodicRestorationAuras) /
sizeof(
uint32), auraSpellId);
917 return SPELL_PERIODIC_RESTORATION_ENERGIZE;
922 return SPELL_PERIODIC_FROST_BLAST_TRIGGER;
927 return SPELL_PERIODIC_DOOM_TRIGGER;
932 return NPC_SPELLCLOTH_ELEMENTAL;
937 return SPELL_EYE_OF_GRILLOK;
942 return SPELL_TOTEMIC_MASTERY_AURA;
947 return SPELL_TOTEMIC_MASTERY_TRIGGER;
952 return ContainsSpellId(ReagentConsumingPeriodicTriggerAuras,
953 sizeof(ReagentConsumingPeriodicTriggerAuras) /
sizeof(
uint32), auraSpellId);
958 return ContainsSpellId(FullHealthRemovePeriodicDamageAuras,
959 sizeof(FullHealthRemovePeriodicDamageAuras) /
sizeof(
uint32), auraSpellId);
964 return auraSpellId == 38772;
969 return ContainsSpellId(UnboundPlaguePeriodicDamageAuras,
970 sizeof(UnboundPlaguePeriodicDamageAuras) /
sizeof(
uint32), auraSpellId);
975 return SPELL_DRAIN_SOUL_SHARD;
985 return SPELL_WILD_GROWTH_T10_RESTORATION;
990 return SPELL_MANA_FEED_TRIGGER;
995 return ContainsSpellId(UnsavableSpecialAuras,
sizeof(UnsavableSpecialAuras) /
sizeof(
uint32), auraSpellId);
1000 return ContainsSpellId(UnsavableDruidEclipseAuras,
sizeof(UnsavableDruidEclipseAuras) /
sizeof(
uint32), auraSpellId);
1005 for (SpellIdPair
const& triggeredSpell : StonedAuraTriggeredSpells)
1006 if (triggeredSpell.AuraSpellId == auraSpellId)
1007 return triggeredSpell.TriggerSpellId;
1014 return SPELL_HEROIC_FURY_COOLDOWN;
1019 return SPELL_DRUID_T8_RESTORATION;
1024 return SPELL_DRUID_T8_RESTORATION_TRIGGER;
1029 return SPELL_DRUID_CAT_FORM;
1039 return SPELL_POLYMORPH_SHEEP_SOUND;
1044 return SPELL_POLYMORPH_PENGUIN_SOUND;
1049 for (SpellIdPair
const& triggeredSpell : ArcanePotencyTriggeredSpells)
1050 if (triggeredSpell.AuraSpellId == auraSpellId)
1051 return triggeredSpell.TriggerSpellId;
1058 return SPELL_IMPROVED_DEVOURING_PLAGUE_DAMAGE;
1063 return SPELL_IMPROVED_DEVOURING_PLAGUE_HEAL;
1068 return SPELL_GLYPH_OF_POWER_WORD_SHIELD;
1073 return SPELL_GLYPH_OF_POWER_WORD_SHIELD_HEAL;
1078 return SPELL_GLYPH_OF_BLURRED_SPEED;
1083 return SPELL_GLYPH_OF_BLURRED_SPEED_SPRINT;
1098 return SPELL_AVENGING_WRATH_MARKER;
1103 return SPELL_SHARED_SUFFERING_TRIGGER;
1108 return SPELL_INVISIBILITY_FADE;
1113 for (SpellIdPair
const& triggeredSpell : ImprovedFearTriggeredSpells)
1114 if (triggeredSpell.AuraSpellId == auraSpellId)
1115 return triggeredSpell.TriggerSpellId;
1122 return SPELL_RAPTURE_RANK;
1127 return SPELL_RAPTURE_ENERGIZE;
1132 return SPELL_GLYPH_OF_FREEZING_TRAP;
1137 return SPELL_GLYPH_OF_FREEZING_TRAP_TRIGGER;
1152 return SPELL_DRUID_T10_FERAL;
1157 return SPELL_DRUID_T10_FERAL_TRIGGER;
1162 return SPELL_BESTIAL_WRATH;
1167 return SPELL_THE_BEAST_WITHIN_TALENT;
1172 return SPELL_THE_BEAST_WITHIN_TRIGGER;
1177 return SPELL_DIVINE_FAVOR;
1182 return SPELL_PALADIN_T10_HOLY;
1187 return SPELL_PALADIN_T10_HOLY_TRIGGER;
1192 return SPELL_DRAIN_SOUL_EXECUTE_AURA;
1197 for (AuraStateImmunityRuleInfo
const& ruleInfo : AuraStateImmunityRules)
1206 if (!MatchesAuraImmunityAmount(ruleInfo.AmountCondition, amount))
1220 uint8 auraTypeCount = 0;
1222 if ((miscValue & (1 << 10)) && auraTypeCount < maxAuraTypes)
1224 if ((miscValue & (1 << 1)) && auraTypeCount < maxAuraTypes)
1226 if ((miscValue & (1 << 6)) && auraTypeCount < maxAuraTypes)
1228 if ((miscValue & (1 << 0)) && auraTypeCount < maxAuraTypes)
1230 if ((miscValue & (1 << 2)) && auraTypeCount < maxAuraTypes)
1232 if (miscValue & (1 << 9))
1234 if (auraTypeCount < maxAuraTypes)
1236 if (auraTypeCount < maxAuraTypes)
1239 if ((miscValue & (1 << 7)) && auraTypeCount < maxAuraTypes)
1242 return auraTypeCount;
1248 if (rule.AuraSpellId == auraSpellId)
1256 switch (mechanicMask)
1259 return BuildMechanicMaskFromArray(CrowdControlMechanics, CrowdControlMechanicCount);
1261 return BuildMechanicMaskFromArray(StunMechanics, StunMechanicCount);
1263 return BuildMechanicMaskFromArray(LightControlMechanics, LightControlMechanicCount);