diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp
new file mode 100644
index 000000000..cd769c809
--- /dev/null
+++ b/src/server/game/Spells/SpellInfoCorrections.cpp
@@ -0,0 +1,4340 @@
+/*
+ * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by the
+ * Free Software Foundation; either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+
+#include "SpellInfo.h"
+#include "DBCStores.h"
+#include "DBCStructure.h"
+#include "GameGraveyard.h"
+#include "SpellMgr.h"
+
+inline void ApplySpellFix(std::initializer_list spellIds, void(*fix)(SpellInfo*))
+{
+ for (uint32 spellId : spellIds)
+ {
+ SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
+ if (!spellInfo)
+ {
+ LOG_ERROR("sql.sql", "Spell info correction specified for non-existing spell {}", spellId);
+ continue;
+ }
+
+ fix(const_cast(spellInfo));
+ }
+}
+
+void SpellMgr::LoadSpellInfoCorrections()
+{
+ uint32 oldMSTime = getMSTime();
+
+ ApplySpellFix({
+ 467, // Thorns (Rank 1)
+ 782, // Thorns (Rank 2)
+ 1075, // Thorns (Rank 3)
+ 8914, // Thorns (Rank 4)
+ 9756, // Thorns (Rank 5)
+ 9910, // Thorns (Rank 6)
+ 26992, // Thorns (Rank 7)
+ 53307, // Thorns (Rank 8)
+ 53352, // Explosive Shot (trigger)
+ 50783, // Slam (Triggered spell)
+ 20647 // Execute (Triggered spell)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Elixir of Minor Fortitude
+ ApplySpellFix({ 2378 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ManaCost = 0;
+ spellInfo->ManaPerSecond = 0;
+ });
+
+ // Elixir of Detect Undead
+ ApplySpellFix({ 11389 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->PowerType = POWER_MANA;
+ spellInfo->ManaCost = 0;
+ spellInfo->ManaPerSecond = 0;
+ });
+
+ // Evergrove Druid Transform Crow
+ ApplySpellFix({ 38776 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(4); // 120 seconds
+ });
+
+ ApplySpellFix({
+ 63026, // Force Cast (HACK: Target shouldn't be changed)
+ 63137 // Force Cast (HACK: Target shouldn't be changed; summon position should be untied from spell destination)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB);
+ });
+
+ ApplySpellFix({
+ 53096, // Quetz'lun's Judgment
+ 70743, // AoD Special
+ 70614 // AoD Special - Vegard
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Summon Skeletons
+ ApplySpellFix({ 52611, 52612 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValueB = 64;
+ });
+
+ ApplySpellFix({
+ 40244, // Simon Game Visual
+ 40245, // Simon Game Visual
+ 40246, // Simon Game Visual
+ 40247, // Simon Game Visual
+ 42835 // Spout, remove damage effect, only anim is needed
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 63665, // Charge (Argent Tournament emote on riders)
+ 31298, // Sleep (needs target selection script)
+ 2895, // Wrath of Air Totem rank 1 (Aura)
+ 68933, // Wrath of Air Totem rank 2 (Aura)
+ 29200 // Purify Helboar Meat
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(0);
+ });
+
+ // Howl of Azgalor
+ ApplySpellFix({ 31344 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yards instead of 50000?!
+ });
+
+ ApplySpellFix({
+ 42818, // Headless Horseman - Wisp Flight Port
+ 42821 // Headless Horseman - Wisp Flight Missile
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards
+ });
+
+ // Spirit of Kirith
+ ApplySpellFix({ 10853 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(3); // 1min
+ });
+
+ // Headless Horseman - Start Fire
+ ApplySpellFix({ 42132 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards
+ });
+
+ //They Must Burn Bomb Aura (self)
+ ApplySpellFix({ 36350 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 36325; // They Must Burn Bomb Drop (DND)
+ });
+
+ // Mana Shield (rank 2)
+ ApplySpellFix({ 8494 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcChance = 0; // because of bug in dbc
+ });
+
+ ApplySpellFix({
+ 63320, // Glyph of Life Tap
+ 20335, // Heart of the Crusader
+ 20336, // Heart of the Crusader
+ 20337, // Heart of the Crusader
+ 53228, // Rapid Killing (Rank 1)
+ 53232, // Rapid Killing (Rank 2)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_FROM_PROCS; // Entries were not updated after spell effect change, we have to do that manually
+ });
+
+ ApplySpellFix({
+ 31347, // Doom
+ 41635, // Prayer of Mending
+ 39365, // Thundering Storm
+ 52124, // Sky Darkener Assault
+ 42442, // Vengeance Landing Cannonfire
+ 45863, // Cosmetic - Incinerate to Random Target
+ 25425, // Shoot
+ 45761, // Shoot
+ 42611, // Shoot
+ 61588, // Blazing Harpoon
+ 36327 // Shoot Arcane Explosion Arrow
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Skartax Purple Beam
+ ApplySpellFix({ 36384 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 2;
+ });
+
+ ApplySpellFix({
+ 37790, // Spread Shot
+ 54172, // Divine Storm (heal)
+ 66588, // Flaming Spear
+ 54171 // Divine Storm
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 3;
+ });
+
+ // Divine Storm (Damage)
+ ApplySpellFix({ 53385 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 4;
+ });
+
+ // Spitfire Totem
+ ApplySpellFix({ 38296 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 5;
+ });
+
+ ApplySpellFix({
+ 40827, // Sinful Beam
+ 40859, // Sinister Beam
+ 40860, // Vile Beam
+ 40861 // Wicked Beam
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 10;
+ });
+
+ // Unholy Frenzy
+ ApplySpellFix({ 50312 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 15;
+ });
+
+ ApplySpellFix({
+ 17941, // Shadow Trance
+ 22008, // Netherwind Focus
+ 31834, // Light's Grace
+ 34754, // Clearcasting
+ 34936, // Backlash
+ 48108, // Hot Streak
+ 51124, // Killing Machine
+ 54741, // Firestarter
+ 57761, // Fireball!
+ 64823, // Item - Druid T8 Balance 4P Bonus
+ 34477, // Misdirection
+ 44401, // Missile Barrage
+ 18820 // Insight
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 1;
+ });
+
+ // Tidal Wave
+ ApplySpellFix({ 53390 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 2;
+ });
+
+ // Oscillation Field
+ ApplySpellFix({ 37408 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Ascendance (Talisman of Ascendance trinket)
+ ApplySpellFix({ 28200 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 6;
+ });
+
+ // The Eye of Acherus (no spawn in phase 2 in db)
+ ApplySpellFix({ 51852 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValue |= 1;
+ });
+
+ // Crafty's Ultra-Advanced Proto-Typical Shortening Blaster
+ ApplySpellFix({ 51912 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Amplitude = 3000;
+ });
+
+ // Desecration Arm - 36 instead of 37 - typo?
+ ApplySpellFix({ 29809 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_7_YARDS);
+ });
+
+ // Sic'em
+ ApplySpellFix({ 42767 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
+ });
+
+ // Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data
+ // To prevent aura staying on target after talent unlearned
+ ApplySpellFix({ 48420 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Stances = 1 << (FORM_CAT - 1);
+ });
+
+ ApplySpellFix({ 48421 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Stances = 1 << (FORM_MOONKIN - 1);
+ });
+
+ ApplySpellFix({ 48422 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Stances = 1 << (FORM_TREE - 1);
+ });
+
+ // Elemental Oath
+ ApplySpellFix({ 51466, 51470 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
+ spellInfo->Effects[EFFECT_1].MiscValue = SPELLMOD_EFFECT2;
+ spellInfo->Effects[EFFECT_1].SpellClassMask = flag96(0x00000000, 0x00004000, 0x00000000);
+ });
+
+ // Improved Shadowform (Rank 1)
+ ApplySpellFix({ 47569 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFTED; // with this spell atrribute aura can be stacked several times
+ });
+
+ // Nether Portal - Perseverence
+ ApplySpellFix({ 30421 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].BasePoints += 30000;
+ });
+
+ // Natural shapeshifter
+ ApplySpellFix({ 16834, 16835 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
+ });
+
+ // Ebon Plague
+ ApplySpellFix({ 51735, 51734, 51726 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyFlags[2] = 0x10;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Parasitic Shadowfiend Passive
+ ApplySpellFix({ 41013 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY; // proc debuff, and summon infinite fiends
+ });
+
+ ApplySpellFix({
+ 27892, // To Anchor 1
+ 27928, // To Anchor 1
+ 27935, // To Anchor 1
+ 27915, // Anchor to Skulls
+ 27931, // Anchor to Skulls
+ 27937 // Anchor to Skulls
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
+ });
+
+ // Wrath of the Plaguebringer
+ ApplySpellFix({ 29214, 54836 }, [](SpellInfo* spellInfo)
+ {
+ // target allys instead of enemies, target A is src_caster, spells with effect like that have ally target
+ // this is the only known exception, probably just wrong data
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ });
+
+ // Wind Shear
+ ApplySpellFix({ 57994 }, [](SpellInfo* spellInfo)
+ {
+ // improper data for EFFECT_1 in 3.3.5 DBC, but is correct in 4.x
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_MODIFY_THREAT_PERCENT;
+ spellInfo->Effects[EFFECT_1].BasePoints = -6; // -5%
+ });
+
+ // Improved Devouring Plague
+ ApplySpellFix({ 63675 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BonusMultiplier = 0;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ ApplySpellFix({
+ 8145, // Tremor Totem (instant pulse)
+ 6474 // Earthbind Totem (instant pulse)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_EXTRA_INITIAL_PERIOD;
+ });
+
+ // Marked for Death
+ ApplySpellFix({ 53241, 53243, 53244, 53245, 53246 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(423937, 276955137, 2049);
+ });
+
+ ApplySpellFix({
+ 70728, // Exploit Weakness
+ 70840 // Devious Minds
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_PET);
+ });
+
+ // Culling The Herd
+ ApplySpellFix({ 70893 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_MASTER);
+ });
+
+ // Sigil of the Frozen Conscience
+ ApplySpellFix({ 54800 }, [](SpellInfo* spellInfo)
+ {
+ // change class mask to custom extended flags of Icy Touch
+ // this is done because another spell also uses the same SpellFamilyFlags as Icy Touch
+ // SpellFamilyFlags[0] & 0x00000040 in SPELLFAMILY_DEATHKNIGHT is currently unused (3.3.5a)
+ // this needs research on modifier applying rules, does not seem to be in Attributes fields
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00000040, 0x00000000, 0x00000000);
+ });
+
+ // Idol of the Flourishing Life
+ ApplySpellFix({ 64949 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00000000, 0x02000000, 0x00000000);
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
+ });
+
+ ApplySpellFix({
+ 34231, // Libram of the Lightbringer
+ 60792, // Libram of Tolerance
+ 64956 // Libram of the Resolute
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x80000000, 0x00000000, 0x00000000);
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
+ });
+
+ ApplySpellFix({
+ 28851, // Libram of Light
+ 28853, // Libram of Divinity
+ 32403 // Blessed Book of Nagrand
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x40000000, 0x00000000, 0x00000000);
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
+ });
+
+ // Ride Carpet
+ ApplySpellFix({ 45602 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 0; // force seat 0, vehicle doesn't have the required seat flags for "no seat specified (-1)"
+ });
+
+ ApplySpellFix({
+ 64745, // Item - Death Knight T8 Tank 4P Bonus
+ 64936 // Item - Warrior T8 Protection 4P Bonus
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 100; // 100% chance of procc'ing, not -10% (chance calculated in PrepareTriggersExecutedOnHit)
+ });
+
+ // Easter Lay Noblegarden Egg Aura
+ ApplySpellFix({ 61719 }, [](SpellInfo* spellInfo)
+ {
+ // Interrupt flags copied from aura which this aura is linked with
+ spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE;
+ });
+
+ // Bleh, need to change FamilyFlags :/ (have the same as original aura - bad!)
+ ApplySpellFix({ 63510 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyFlags[EFFECT_0] = 0;
+ spellInfo->SpellFamilyFlags[EFFECT_2] = 0x4000000;
+ });
+
+ ApplySpellFix({ 63514 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyFlags[EFFECT_0] = 0;
+ spellInfo->SpellFamilyFlags[EFFECT_2] = 0x2000000;
+ });
+
+ ApplySpellFix({ 63531 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyFlags[EFFECT_0] = 0;
+ spellInfo->SpellFamilyFlags[EFFECT_2] = 0x8000000;
+ });
+
+ // And affecting spells
+ ApplySpellFix({
+ 20138, // Improved Devotion Aura
+ 20139,
+ 20140
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].SpellClassMask[0] = 0;
+ spellInfo->Effects[EFFECT_1].SpellClassMask[2] = 0x2000000;
+ });
+
+ ApplySpellFix({
+ 20254, // Improved concentration aura
+ 20255,
+ 20256
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].SpellClassMask[0] = 0;
+ spellInfo->Effects[EFFECT_1].SpellClassMask[2] = 0x4000000;
+ spellInfo->Effects[EFFECT_2].SpellClassMask[0] = 0;
+ spellInfo->Effects[EFFECT_2].SpellClassMask[2] = 0x4000000;
+ });
+
+ ApplySpellFix({
+ 53379, // Swift Retribution
+ 53484,
+ 53648
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask[0] = 0;
+ spellInfo->Effects[EFFECT_0].SpellClassMask[2] = 0x8000000;
+ });
+
+ // Sanctified Retribution
+ ApplySpellFix({ 31869 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask[0] = 0;
+ spellInfo->Effects[EFFECT_0].SpellClassMask[2] = 0x8000000;
+ });
+
+ // Seal of Light trigger
+ ApplySpellFix({ 20167 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellLevel = 0;
+ spellInfo->BaseLevel = 0;
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ });
+
+ // Light's Beacon, Beacon of Light
+ ApplySpellFix({ 53651 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Hand of Reckoning
+ ApplySpellFix({ 62124 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_REDIRECTION;
+ });
+
+ // Redemption
+ ApplySpellFix({ 7328, 10322, 10324, 20772, 20773, 48949, 48950 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyName = SPELLFAMILY_PALADIN;
+ });
+
+ ApplySpellFix({
+ 20184, // Judgement of Justice
+ 20185, // Judgement of Light
+ 20186, // Judgement of Wisdom
+ 68055 // Judgements of the Just
+ }, [](SpellInfo* spellInfo)
+ {
+ // hack for seal of light and few spells, judgement consists of few single casts and each of them can proc
+ // some spell, base one has disabled proc flag but those dont have this flag
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
+ });
+
+ // Blessing of sanctuary stats
+ ApplySpellFix({ 67480 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValue = -1;
+ spellInfo->SpellFamilyName = SPELLFAMILY_UNK1; // allows stacking
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY; // just a marker
+ });
+
+ // Seal of Command trigger
+ ApplySpellFix({ 20424 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_CASTER_PROCS;
+ });
+
+ ApplySpellFix({
+ 54968, // Glyph of Holy Light, Damage Class should be magic
+ 53652, // Beacon of Light heal, Damage Class should be magic
+ 53654
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ });
+
+ // Wild Hunt
+ ApplySpellFix({ 62758, 62762 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY;
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY;
+ });
+
+ // Intervene
+ ApplySpellFix({ 3411 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Roar of Sacrifice
+ ApplySpellFix({ 53480 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_SPLIT_DAMAGE_PCT;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY);
+ spellInfo->Effects[EFFECT_1].DieSides = 1;
+ spellInfo->Effects[EFFECT_1].BasePoints = 19;
+ spellInfo->Effects[EFFECT_1].BasePoints = 127; // all schools
+ });
+
+ // Silencing Shot
+ ApplySpellFix({ 34490, 41084, 42671 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 0.0f;
+ });
+
+ // Monstrous Bite
+ ApplySpellFix({ 54680, 55495, 55496, 55497, 55498, 55499 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Hunter's Mark
+ ApplySpellFix({ 1130, 14323, 14324, 14325, 53338 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Cobra Strikes
+ ApplySpellFix({ 53257 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 2;
+ spellInfo->StackAmount = 0;
+ });
+
+ // Kill Command
+ ApplySpellFix({ 34027 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 0;
+ });
+
+ // Kindred Spirits, damage aura
+ ApplySpellFix({ 57458 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_ALLOW_ENETRING_ARENA;
+ });
+
+ // Chimera Shot - Serpent trigger
+ ApplySpellFix({ 53353 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ // Entrapment trigger
+ ApplySpellFix({ 19185, 64803, 64804 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENEMY);
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT;
+ });
+
+ // Improved Stings (Rank 2)
+ ApplySpellFix({ 19465 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Heart of the Phoenix (triggered)
+ ApplySpellFix({ 54114 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_DISMISS_PET_FIRST;
+ spellInfo->RecoveryTime = 8 * 60 * IN_MILLISECONDS; // prev 600000
+ });
+
+ // Master of Subtlety
+ ApplySpellFix({ 31221, 31222, 31223 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyName = SPELLFAMILY_ROGUE;
+ });
+
+ ApplySpellFix({
+ 31666, // Master of Subtlety triggers
+ 58428 // Overkill
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_SCRIPT_EFFECT;
+ });
+
+ // Honor Among Thieves
+ ApplySpellFix({ 51698, 51700, 51701 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 51699;
+ });
+
+ ApplySpellFix({
+ 5171, // Slice and Dice
+ 6774, // Slice and Dice
+ 1725 // Distract
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Envenom
+ ApplySpellFix({ 32645, 32684, 57992, 57993 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Dispel = DISPEL_NONE;
+ });
+
+ ApplySpellFix({
+ 64014, // Expedition Base Camp Teleport
+ 64032, // Formation Grounds Teleport
+ 64028, // Colossal Forge Teleport
+ 64031, // Scrapyard Teleport
+ 64030, // Antechamber Teleport
+ 64029, // Shattered Walkway Teleport
+ 64024, // Conservatory Teleport
+ 64025, // Halls of Invention Teleport
+ 65042 // Prison of Yogg-Saron Teleport
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DB);
+ });
+
+ // Killing Spree (teleport)
+ ApplySpellFix({ 57840 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards
+ });
+
+ // Killing Spree
+ ApplySpellFix({ 51690 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_ALLOW_WHILE_STEALTHED;
+ });
+
+ // Blood Tap visual cd reset
+ ApplySpellFix({ 47804 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->RuneCostID = 442;
+ });
+
+ // Chains of Ice
+ ApplySpellFix({ 45524 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Impurity
+ ApplySpellFix({ 49220, 49633, 49635, 49636, 49638 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->SpellFamilyName = SPELLFAMILY_DEATHKNIGHT;
+ });
+
+ // Deadly Aggression (Deadly Gladiator's Death Knight Relic, item: 42620)
+ ApplySpellFix({ 60549 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Magic Suppression
+ ApplySpellFix({ 49224, 49610, 49611 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 0;
+ });
+
+ // Wandering Plague
+ ApplySpellFix({ 50526 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Dancing Rune Weapon
+ ApplySpellFix({ 49028 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ spellInfo->ProcFlags |= PROC_FLAG_DONE_MELEE_AUTO_ATTACK;
+ });
+
+ // Death and Decay
+ ApplySpellFix({ 52212 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
+ });
+
+ // T9 blood plague crit bonus
+ ApplySpellFix({ 67118 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Pestilence
+ ApplySpellFix({ 50842 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TargetA = TARGET_DEST_TARGET_ENEMY;
+ });
+
+ // Horn of Winter, stacking issues
+ ApplySpellFix({ 57330, 57623 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetA = 0;
+ });
+
+ // Scourge Strike trigger
+ ApplySpellFix({ 70890 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
+ });
+
+ // Blood-caked Blade - Blood-caked Strike trigger
+ ApplySpellFix({ 50463 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
+ });
+
+ // Blood Gorged
+ ApplySpellFix({ 61274, 61275, 61276, 61277,61278 }, [](SpellInfo* spellInfo)
+ {
+ // ARP affect Death Strike and Rune Strike
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x1400011, 0x20000000, 0x0);
+ });
+
+ // Death Grip
+ ApplySpellFix({ 49576, 49560 }, [](SpellInfo* spellInfo)
+ {
+ // remove main grip mechanic, leave only effect one
+ // should fix taunt on bosses and not break the pull protection at the same time (no aura provides immunity to grip mechanic)
+ spellInfo->Mechanic = 0;
+ });
+
+ // Death Grip Jump Dest
+ ApplySpellFix({ 57604 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Death Pact
+ ApplySpellFix({ 48743 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_EXCLUDE_CASTER;
+ });
+
+ // Raise Ally (trigger)
+ ApplySpellFix({ 46619 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes &= ~SPELL_ATTR0_NO_AURA_CANCEL;
+ });
+
+ // Frost Strike
+ ApplySpellFix({ 49143, 51416, 51417, 51418, 51419, 55268 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_COMPLETELY_BLOCKED;
+ });
+
+ // Death Knight T10 Tank 2p Bonus
+ ApplySpellFix({ 70650 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER;
+ });
+
+ ApplySpellFix({ 45297, 45284 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->CategoryRecoveryTime = 0;
+ spellInfo->RecoveryTime = 0;
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS;
+ });
+
+ // Improved Earth Shield
+ ApplySpellFix({ 51560, 51561 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].MiscValue = SPELLMOD_DAMAGE;
+ });
+
+ // Tidal Force
+ ApplySpellFix({ 55166, 55198 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(18);
+ spellInfo->ProcCharges = 0;
+ });
+
+ // Healing Stream Totem
+ ApplySpellFix({ 52042 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellLevel = 0;
+ spellInfo->BaseLevel = 0;
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ });
+
+ // Earth Shield
+ ApplySpellFix({ 379 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellLevel = 0;
+ spellInfo->BaseLevel = 0;
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ // Stormstrike
+ ApplySpellFix({ 17364 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Strength of Earth totem effect
+ ApplySpellFix({ 8076, 8162, 8163, 10441, 25362, 25527, 57621, 58646 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
+ spellInfo->Effects[EFFECT_2].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
+ });
+
+ // Flametongue Totem effect
+ ApplySpellFix({ 52109, 52110, 52111, 52112, 52113, 58651, 58654, 58655 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TargetB = spellInfo->Effects[EFFECT_1].TargetB = spellInfo->Effects[EFFECT_0].TargetB = 0;
+ spellInfo->Effects[EFFECT_2].TargetA = spellInfo->Effects[EFFECT_1].TargetA = spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Sentry Totem
+ ApplySpellFix({ 6495 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(0);
+ });
+
+ // Bind Sight (PT)
+ ApplySpellFix({ 6277 }, [](SpellInfo* spellInfo)
+ {
+ // because it is passive, needs this to be properly removed at death in RemoveAllAurasOnDeath()
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELED;
+ spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
+ spellInfo->AttributesEx7 |= SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD;
+ });
+
+ // Ancestral Awakening Heal
+ ApplySpellFix({ 52752 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ // Heroism
+ ApplySpellFix({ 32182 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 57723; // Exhaustion
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Bloodlust
+ ApplySpellFix({ 2825 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 57724; // Sated
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Improved Succubus
+ ApplySpellFix({ 18754, 18755, 18756 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Unstable Affliction
+ ApplySpellFix({ 31117 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->PreventionType = SPELL_PREVENTION_TYPE_NONE;
+ });
+
+ // Shadowflame - trigger
+ ApplySpellFix({
+ 47960, // r1
+ 61291 // r2
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_REDIRECTION;
+ });
+
+ // Curse of Doom
+ ApplySpellFix({ 18662 }, [](SpellInfo* spellInfo)
+ {
+ // summoned doomguard duration fix
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(6);
+ });
+
+ // Glyph of Voidwalker
+ ApplySpellFix({ 56247 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
+ spellInfo->Effects[EFFECT_0].MiscValue = SPELLMOD_EFFECT1;
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x8000000, 0, 0);
+ });
+
+ // Everlasting Affliction
+ ApplySpellFix({ 47201, 47202, 47203, 47204, 47205 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 2; // add corruption to affected spells
+ });
+
+ // Death's Embrace
+ ApplySpellFix({ 47198, 47199, 47200 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 0x4000; // include Drain Soul
+ });
+
+ // Improved Demonic Tactics
+ ApplySpellFix({ 54347, 54348, 54349 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = spellInfo->Effects[EFFECT_0].Effect;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = spellInfo->Effects[EFFECT_0].ApplyAuraName;
+ spellInfo->Effects[EFFECT_1].TargetA = spellInfo->Effects[EFFECT_0].TargetA;
+ spellInfo->Effects[EFFECT_0].MiscValue = SPELLMOD_EFFECT1;
+ spellInfo->Effects[EFFECT_1].MiscValue = SPELLMOD_EFFECT2;
+ });
+
+ // Rain of Fire (Doomguard)
+ ApplySpellFix({ 42227 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 0.0f;
+ });
+
+ // Ritual Enslavement
+ ApplySpellFix({ 22987 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_CHARM;
+ });
+
+ // Combustion, make this passive
+ ApplySpellFix({ 11129 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Dispel = DISPEL_NONE;
+ });
+
+ // Magic Absorption
+ ApplySpellFix({ 29441, 29444 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellLevel = 0;
+ });
+
+ // Living Bomb
+ ApplySpellFix({ 44461, 55361, 55362 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_REACTIVE_DAMAGE_PROC;
+ });
+
+ // Evocation
+ ApplySpellFix({ 12051 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
+ });
+
+ // MI Fireblast, WE Frostbolt, MI Frostbolt
+ ApplySpellFix({ 59637, 31707, 72898 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ });
+
+ // Blazing Speed
+ ApplySpellFix({ 31641, 31642 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 31643;
+ });
+
+ // Summon Water Elemental (permanent)
+ ApplySpellFix({ 70908 }, [](SpellInfo* spellInfo)
+ {
+ // treat it as pet
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_SUMMON_PET;
+ });
+
+ // // Burnout, trigger
+ ApplySpellFix({ 44450 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_POWER_BURN;
+ });
+
+ // Mirror Image - Summon Spells
+ ApplySpellFix({ 58831, 58833, 58834, 65047 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(0);
+ });
+
+ // Initialize Images (Mirror Image)
+ ApplySpellFix({ 58836 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Arcane Blast, can't be dispelled
+ ApplySpellFix({ 36032 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
+ });
+
+ // Chilled (frost armor, ice armor proc)
+ ApplySpellFix({ 6136, 7321 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->PreventionType = SPELL_PREVENTION_TYPE_NONE;
+ });
+
+ // Mirror Image Frostbolt
+ ApplySpellFix({ 59638 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->SpellFamilyName = SPELLFAMILY_MAGE;
+ spellInfo->SpellFamilyFlags = flag96(0x20, 0x0, 0x0);
+ });
+
+ // Fingers of Frost
+ ApplySpellFix({ 44544 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Dispel = DISPEL_NONE;
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_CANNOT_BE_STOLEN;
+ spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(685904631, 1151040, 32);
+ });
+
+ // Fingers of Frost visual buff
+ ApplySpellFix({ 74396 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcCharges = 2;
+ spellInfo->StackAmount = 0;
+ });
+
+ // Glyph of blocking
+ ApplySpellFix({ 58375 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 58374;
+ });
+
+ // Sweeping Strikes stance change
+ ApplySpellFix({ 12328 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_NOT_SHAPESHIFTED;
+ });
+
+ // Damage Shield
+ ApplySpellFix({ 59653 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->SpellLevel = 0;
+ });
+
+ ApplySpellFix({
+ 20230, // Retaliation
+ 871, // Shield Wall
+ 1719 // Recklessness
+ }, [](SpellInfo* spellInfo)
+ {
+ // Strange shared cooldown
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
+ });
+
+ // Vigilance
+ ApplySpellFix({ 50720 }, [](SpellInfo* spellInfo)
+ {
+ // fixes bug with empowered renew, single target aura
+ spellInfo->SpellFamilyName = SPELLFAMILY_WARRIOR;
+ });
+
+ // Sunder Armor - Old Ranks
+ ApplySpellFix({ 7405, 8380, 11596, 11597, 25225, 47467 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 11971;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE;
+ });
+
+ // Improved Spell Reflection
+ ApplySpellFix({ 59725 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER_AREA_PARTY);
+ });
+
+ // Shadow Weaving
+ ApplySpellFix({ 15257, 15331, 15332 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL;
+ });
+
+ // Hymn of Hope
+ ApplySpellFix({ 64904 }, [](SpellInfo* spellInfo)
+ {
+ // rewrite part of aura system or swap effects...
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT;
+ spellInfo->Effects[EFFECT_2].Effect = spellInfo->Effects[EFFECT_0].Effect;
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ spellInfo->Effects[EFFECT_2].DieSides = spellInfo->Effects[EFFECT_0].DieSides;
+ spellInfo->Effects[EFFECT_2].TargetA = spellInfo->Effects[EFFECT_0].TargetB;
+ spellInfo->Effects[EFFECT_2].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
+ spellInfo->Effects[EFFECT_2].BasePoints = spellInfo->Effects[EFFECT_0].BasePoints;
+ });
+
+ // Divine Hymn
+ ApplySpellFix({ 64844 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->SpellLevel = 0;
+ });
+
+ ApplySpellFix({
+ 14898, // Spiritual Healing affects prayer of mending
+ 15349,
+ 15354,
+ 15355,
+ 15356,
+ 47562, // Divine Providence affects prayer of mending
+ 47564,
+ 47565,
+ 47566,
+ 47567,
+ 47586, // Twin Disciplines affects prayer of mending
+ 47587,
+ 47588,
+ 52802,
+ 52803
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask[1] |= 0x20; // prayer of mending
+ });
+
+ // Power Infusion
+ ApplySpellFix({ 10060 }, [](SpellInfo* spellInfo)
+ {
+ // hack to fix stacking with arcane power
+ spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER;
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY);
+ });
+
+ // Lifebloom final bloom
+ ApplySpellFix({ 33778 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->SpellLevel = 0;
+ spellInfo->SpellFamilyFlags = flag96(0, 0x10, 0);
+ });
+
+ // Owlkin Frenzy
+ ApplySpellFix({ 48391 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_NOT_SHAPESHIFTED;
+ });
+
+ // Item T10 Restoration 4P Bonus
+ ApplySpellFix({ 70691 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ ApplySpellFix({
+ 770, // Faerie Fire
+ 16857 // Faerie Fire (Feral)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS;
+ });
+
+ ApplySpellFix({ 49376 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Feral Charge - Cat
+ ApplySpellFix({ 61138, 61132, 50259 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Glyph of Barkskin
+ ApplySpellFix({ 63058 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE;
+ });
+
+ // Resurrection Sickness
+ ApplySpellFix({ 15007 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->SpellFamilyName = SPELLFAMILY_GENERIC;
+ });
+
+ // Luck of the Draw
+ ApplySpellFix({ 72221 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
+ });
+
+ // Bind
+ ApplySpellFix({ 3286 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets = 0; // neutral innkeepers not friendly?
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ });
+
+ // Playback Speech
+ ApplySpellFix({ 74209 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(1);
+ });
+
+ ApplySpellFix({
+ 2641, // Dismiss Pet
+ 23356 // Taming Lesson
+ }, [](SpellInfo* spellInfo)
+ {
+ // remove creaturetargettype
+ spellInfo->TargetCreatureType = 0;
+ });
+
+ // Aspect of the Viper
+ ApplySpellFix({ 34074 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(1);
+ spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_DUMMY;
+ });
+
+ // Strength of Wrynn
+ ApplySpellFix({ 60509 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].BasePoints = 1500;
+ spellInfo->Effects[EFFECT_1].BasePoints = 150;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_PERIODIC_HEAL;
+ });
+
+ // Winterfin First Responder
+ ApplySpellFix({ 48739 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 1;
+ spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 0;
+ spellInfo->Effects[EFFECT_0].DieSides = 0;
+ spellInfo->Effects[EFFECT_0].DamageMultiplier = 0;
+ spellInfo->Effects[EFFECT_0].BonusMultiplier = 0;
+ });
+
+ // Army of the Dead (trigger npc aura)
+ ApplySpellFix({ 49099 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Amplitude = 15000;
+ });
+
+ // Isle of Conquest
+ ApplySpellFix({ 66551 }, [](SpellInfo* spellInfo)
+ {
+ // Teleport in, missing range
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
+ });
+
+ // A'dal's Song of Battle
+ ApplySpellFix({ 39953 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(367); // 2 Hours
+ });
+
+ ApplySpellFix({
+ 57607, // WintergraspCatapult - Spell Plague Barrel - EffectRadiusIndex
+ 57619, // WintergraspDemolisher - Spell Hourl Boulder - EffectRadiusIndex
+ 57610 // Cannon (Siege Turret)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); // SPELL_EFFECT_WMO_DAMAGE
+ });
+
+ // WintergraspCannon - Spell Fire Cannon - EffectRadiusIndex
+ ApplySpellFix({ 51422 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // SPELL_EFFECT_SCHOOL_DAMAGE
+ });
+
+ // WintergraspDemolisher - Spell Ram - EffectRadiusIndex
+ ApplySpellFix({ 54107 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // SPELL_EFFECT_KNOCK_BACK
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // SPELL_EFFECT_SCHOOL_DAMAGE
+ spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // SPELL_EFFECT_WEAPON_DAMAGE
+ });
+
+ // WintergraspSiegeEngine - Spell Ram - EffectRadiusIndex
+ ApplySpellFix({ 51678 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // SPELL_EFFECT_KNOCK_BACK
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // SPELL_EFFECT_SCHOOL_DAMAGE
+ spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // SPELL_EFFECT_WEAPON_DAMAGE
+ });
+
+ // WintergraspCatapult - Spell Plague Barrell - Range
+ ApplySpellFix({ 57606 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(164); // "Catapult Range"
+ });
+
+ // Boulder (Demolisher)
+ ApplySpellFix({ 50999 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
+ });
+
+ // Flame Breath (Catapult)
+ ApplySpellFix({ 50990 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_18_YARDS); // 18yd
+ });
+
+ // Jormungar Bite
+ ApplySpellFix({ 56103 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Throw Proximity Bomb
+ ApplySpellFix({ 34095 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ ApplySpellFix({
+ 53348, // DEATH KNIGHT SCARLET FIRE ARROW
+ 53117 // BALISTA
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 5000;
+ spellInfo->CategoryRecoveryTime = 5000;
+ });
+
+ // Teleport To Molten Core
+ ApplySpellFix({ 25139 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
+ });
+
+ // Landen Stilwell Transform
+ ApplySpellFix({ 31310 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
+ });
+
+ // Shadowstalker Stealth
+ ApplySpellFix({ 5916 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 5.0f;
+ });
+
+ // Sneak
+ ApplySpellFix({ 22766 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 5.0f;
+ });
+
+ // Murmur's Touch
+ ApplySpellFix({ 38794, 33711 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 33760;
+ });
+
+ // Negaton Field
+ ApplySpellFix({
+ 36729, // Normal
+ 38834 // Heroic
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Curse of the Doomsayer NORMAL
+ ApplySpellFix({ 36173 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 36174; // Currently triggers heroic version...
+ });
+
+ // Crystal Channel
+ ApplySpellFix({ 34156 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(35); // 35yd;
+ spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_MOVE;
+ });
+
+ // Debris
+ ApplySpellFix({ 36449 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
+ });
+
+ // Soul Channel
+ ApplySpellFix({ 30531 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Debris Visual
+ ApplySpellFix({ 30632 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_ALLY);
+ });
+
+ // Activate Sunblade Protecto
+ ApplySpellFix({ 46475, 46476 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(14); // 60yd
+ });
+
+ // Break Ice
+ ApplySpellFix({ 46638 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 &= ~SPELL_ATTR3_ONLY_ON_PLAYER; // Obvious fail, it targets gameobject...
+ });
+
+ // Sinister Reflection Clone
+ ApplySpellFix({ 45785 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 0.0f;
+ });
+
+ // Armageddon
+ ApplySpellFix({ 45909 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 8.0f;
+ });
+
+ // Spell Absorption
+ ApplySpellFix({ 41034 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_SCHOOL_ABSORB;
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_2].MiscValue = SPELL_SCHOOL_MASK_MAGIC;
+ });
+
+ // Shared Bonds
+ ApplySpellFix({ 41363 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELED;
+ });
+
+ ApplySpellFix({
+ 41485, // Deadly Poison
+ 41487 // Envenom
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
+ });
+
+ // Parasitic Shadowfiend
+ ApplySpellFix({ 41914 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Teleport Maiev
+ ApplySpellFix({ 41221 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 0-50000yd
+ });
+
+ // Watery Grave Explosion
+ ApplySpellFix({ 37852 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_WHILE_STUNNED;
+ });
+
+ // Amplify Damage
+ ApplySpellFix({ 39095 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Energy Feedback
+ ApplySpellFix({ 44335 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
+ });
+
+ ApplySpellFix({
+ 31984, // Finger of Death
+ 35354 // Hand of Death
+ }, [](SpellInfo* spellInfo)
+ {
+ // Spell doesn't need to ignore invulnerabilities
+ spellInfo->Attributes = SPELL_ATTR0_IS_ABILITY;
+ });
+
+ // Finger of Death
+ ApplySpellFix({ 32111 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(0); // We only need the animation, no damage
+ });
+
+ // Flame Breath, catapult spell
+ ApplySpellFix({ 50989 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes &= ~SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL;
+ });
+
+ // Koralon, Flaming Cinder
+ ApplySpellFix({ 66690 }, [](SpellInfo* spellInfo)
+ {
+ // missing radius index
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Acid Volley
+ ApplySpellFix({ 54714, 29325 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Summon Plagued Warrior
+ ApplySpellFix({ 29237 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
+ spellInfo->Effects[EFFECT_1].Effect = spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Icebolt
+ ApplySpellFix({ 28526 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ });
+
+ // Infected Wound
+ ApplySpellFix({ 29306 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Hopeless
+ ApplySpellFix({ 29125 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ });
+
+ // Jagged Knife
+ ApplySpellFix({ 55550 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_USES_RANGED_SLOT;
+ });
+
+ // Moorabi - Transformation
+ ApplySpellFix({ 55098 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
+ });
+
+ ApplySpellFix({
+ 55521, // Poisoned Spear (Normal)
+ 58967, // Poisoned Spear (Heroic)
+ 55348, // Throw (Normal)
+ 58966 // Throw (Heroic)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_USES_RANGED_SLOT;
+ });
+
+ // Charged Chaotic rift aura, trigger
+ ApplySpellFix({ 47737 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(37); // 50yd
+ });
+
+ // Vanish
+ ApplySpellFix({ 55964 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Trollgore - Summon Drakkari Invader
+ ApplySpellFix({ 49456, 49457, 49458 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB);
+ });
+
+ ApplySpellFix({
+ 48278, // Paralyse
+ 47669 // Awaken subboss
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Flame Breath
+ ApplySpellFix({ 47592 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Amplitude = 200;
+ });
+
+ // Skarvald, Charge
+ ApplySpellFix({ 43651 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 0-50000yd
+ });
+
+ // Ingvar the Plunderer, Woe Strike
+ ApplySpellFix({ 42730 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TriggerSpell = 42739;
+ });
+
+ ApplySpellFix({ 59735 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TriggerSpell = 59736;
+ });
+
+ // Ingvar the Plunderer, Ingvar transform
+ ApplySpellFix({ 42796 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
+ });
+
+ ApplySpellFix({
+ 42772, // Hurl Dagger (Normal)
+ 59685 // Hurl Dagger (Heroic)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_USES_RANGED_SLOT;
+ });
+
+ // Control Crystal Activation
+ ApplySpellFix({ 57804 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Destroy Door Seal
+ ApplySpellFix({ 58040 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ChannelInterruptFlags &= ~(AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE);
+ });
+
+ // Ichoron, Water Blast
+ ApplySpellFix({ 54237, 59520 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Krik'thir - Mind Flay
+ ApplySpellFix({ 52586, 59367 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_MOVE;
+ });
+
+ // Glare of the Tribunal
+ ApplySpellFix({ 50988, 59870 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Static Charge
+ ApplySpellFix({ 50835, 59847 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ });
+
+ // Lava Strike damage
+ ApplySpellFix({ 57697 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Lava Strike trigger
+ ApplySpellFix({ 57578 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Gift of Twilight Shadow/Fire
+ ApplySpellFix({ 57835, 58766 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELED;
+ });
+
+ // Pyrobuffet
+ ApplySpellFix({ 57557 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 56911;
+ });
+
+ // Arcane Barrage
+ ApplySpellFix({ 56397 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
+ });
+
+ ApplySpellFix({
+ 55849, // Power Spark (ground +50% dmg aura)
+ 56438, // Arcane Overload (-50% dmg taken) - this is to prevent apply -> unapply -> apply ... dunno whether it's correct
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Vortex (Control Vehicle)
+ ApplySpellFix({ 56263 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Haste (Nexus Lord, increase run Speed of the disk)
+ ApplySpellFix({ 57060 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_VEHICLE);
+ });
+
+ // Arcane Overload
+ ApplySpellFix({ 56430 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 56429;
+ });
+
+ // Summon Arcane Bomb
+ ApplySpellFix({ 56429 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Destroy Platform Event
+ ApplySpellFix({ 59099 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(22);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(15);
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(22);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(15);
+ });
+
+ // Surge of Power (Phase 3)
+ ApplySpellFix({
+ 57407, // N
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ spellInfo->InterruptFlags = 0;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_ALLOW_CAST_WHILE_CASTING;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Surge of Power (Phase 3)
+ ApplySpellFix({
+ 60936 // H
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 3;
+ spellInfo->InterruptFlags = 0;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Wyrmrest Drake - Life Burst
+ ApplySpellFix({ 57143 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ spellInfo->Effects[EFFECT_1].PointsPerComboPoint = 2500;
+ spellInfo->Effects[EFFECT_1].BasePoints = 2499;
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(1);
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ //Alexstrasza - Gift
+ ApplySpellFix({ 61028 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Vortex (freeze anim)
+ ApplySpellFix({ 55883 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
+ });
+
+ // Hurl Pyrite
+ ApplySpellFix({ 62490 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Ulduar, Mimiron, Magnetic Core (summon)
+ ApplySpellFix({ 64444 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
+ });
+
+ // Ulduar, Mimiron, bomb bot explosion
+ ApplySpellFix({ 63801 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].MiscValue = 17286;
+ });
+
+ // Ulduar, Mimiron, Summon Flames Initial
+ ApplySpellFix({ 64563 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Ulduar, Mimiron, Flames (damage)
+ ApplySpellFix({ 64566 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
+ });
+
+ // Ulduar, Hodir, Starlight
+ ApplySpellFix({ 62807 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_1_YARD); // 1yd
+ });
+
+ // Hodir Shatter Cache
+ ApplySpellFix({ 62502 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ });
+
+ // Ulduar, General Vezax, Mark of the Faceless
+ ApplySpellFix({ 63278 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ });
+
+ // Boom (XT-002)
+ ApplySpellFix({ 62834 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Supercharge
+ ApplySpellFix({ 61920 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Lightning Whirl
+ ApplySpellFix({ 61916 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 3;
+ });
+
+ ApplySpellFix({ 63482 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 8;
+ });
+
+ // Stone Grip, remove absorb aura
+ ApplySpellFix({ 62056, 63985 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Sentinel Blast
+ ApplySpellFix({ 64389, 64678 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Dispel = DISPEL_MAGIC;
+ });
+
+ // Potent Pheromones
+ ApplySpellFix({ 62619 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_IMMUNITY_PURGES_EFFECT;
+ });
+
+ // Healthy spore summon periodic
+ ApplySpellFix({ 62566 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Amplitude = 2000;
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PERIODIC_TRIGGER_SPELL;
+ });
+
+ // Brightleaf Essence trigger
+ ApplySpellFix({ 62968 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0; // duplicate
+ });
+
+ // Potent Pheromones
+ ApplySpellFix({ 64321 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
+ spellInfo->AttributesEx |= SPELL_ATTR1_IMMUNITY_PURGES_EFFECT;
+ });
+
+ // Lightning Orb Charged
+ ApplySpellFix({ 62186 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Amplitude = 5000; // Duration 5 secs, amplitude 8 secs...
+ });
+
+ // Lightning Pillar
+ ApplySpellFix({ 62976 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6);
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds, wrong DBC data?
+ });
+
+ // Sif's Blizzard
+ ApplySpellFix({ 62576, 62602 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_8_YARDS); // 8yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_8_YARDS); // 8yd
+ });
+
+ // Protective Gaze
+ ApplySpellFix({ 64175 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 25000;
+ });
+
+ // Shadow Beacon
+ ApplySpellFix({ 64465 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 64467; // why do they need two script effects :/ (this one has visual effect)
+ });
+
+ // Sanity
+ ApplySpellFix({ 63050 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
+ });
+
+ // Shadow Nova
+ ApplySpellFix({ 62714, 65209 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Cosmic Smash (Algalon the Observer)
+ ApplySpellFix({ 62293 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
+ });
+
+ // Cosmic Smash (Algalon the Observer)
+ ApplySpellFix({ 62311, 64596 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
+ });
+
+ // Constellation Phase Effect
+ ApplySpellFix({ 65509 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Black Hole
+ ApplySpellFix({ 62168, 65250, 62169 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
+ });
+
+ // Ground Slam
+ ApplySpellFix({ 62625 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
+ });
+
+ // Onyxia's Lair, Onyxia, Flame Breath (TriggerSpell = 0 and spamming errors in console)
+ ApplySpellFix({ 18435 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Onyxia's Lair, Onyxia, Create Onyxia Spawner
+ ApplySpellFix({ 17647 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(37);
+ });
+
+ ApplySpellFix({
+ 17646, // Onyxia's Lair, Onyxia, Summon Onyxia Whelp
+ 68968 // Onyxia's Lair, Onyxia, Summon Lair Guard
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(5);
+ });
+
+ // Onyxia's Lair, Onyxia, Eruption
+ ApplySpellFix({ 17731, 69294 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY;
+ spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(3);
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_18_YARDS); // 18yd instead of 13yd to make sure all cracks erupt
+ });
+
+ // Onyxia's Lair, Onyxia, Breath
+ ApplySpellFix({
+ 18576, 18578, 18579, 18580, 18581, 18582, 18583, 18609, 18611, 18612, 18613, 18614, 18615, 18616, 18584,
+ 18585, 18586, 18587, 18588, 18589, 18590, 18591, 18592, 18593, 18594, 18595, 18564, 18565, 18566, 18567,
+ 18568, 18569, 18570, 18571, 18572, 18573, 18574, 18575, 18596, 18597, 18598, 18599, 18600, 18601, 18602,
+ 18603, 18604, 18605, 18606, 18607, 18617, 18619, 18620, 18621, 18622, 18623, 18624, 18625, 18626, 18627,
+ 18628, 18618, 18351, 18352, 18353, 18354, 18355, 18356, 18357, 18358, 18359, 18360, 18361, 17086, 17087,
+ 17088, 17089, 17090, 17091, 17092, 17093, 17094, 17095, 17097, 22267, 22268, 21132, 21133, 21135, 21136,
+ 21137, 21138, 21139
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(328); // 250ms
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(1);
+ if (spellInfo->Effects[EFFECT_1].Effect)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_PERIODIC_TRIGGER_SPELL;
+ spellInfo->Effects[EFFECT_1].Amplitude = ((spellInfo->CastTimeEntry == sSpellCastTimesStore.LookupEntry(170)) ? 50 : 215);
+ }
+ });
+
+ ApplySpellFix({
+ 48760, // Oculus, Teleport to Coldarra DND
+ 49305 // Oculus, Teleport to Boss 1 DND
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(17);
+ });
+
+ // Oculus, Drake spell Stop Time
+ ApplySpellFix({ 49838 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ spellInfo->ExcludeTargetAuraSpell = 51162; // exclude planar shift
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_150_YARDS);
+ });
+
+ // Oculus, Varos Cloudstrider, Energize Cores
+ ApplySpellFix({ 61407, 62136, 56251, 54069 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CONE_ENTRY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Halls of Lightning, Arc Weld
+ ApplySpellFix({ 59086 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
+ });
+
+ // Halls of Lightning, Arcing Burn
+ ApplySpellFix({ 52671, 59834 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Trial of the Champion, Death's Respite
+ ApplySpellFix({ 68306 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(25);
+ });
+
+ // Trial of the Champion, Eadric Achievement (The Faceroller)
+ ApplySpellFix({ 68197 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
+ spellInfo->Attributes |= SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD;
+ });
+
+ // Trial of the Champion, Earth Shield
+ ApplySpellFix({ 67530 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL; // will trigger 67537
+ });
+
+ // Trial of the Champion, Hammer of the Righteous
+ ApplySpellFix({ 66867 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
+ });
+
+ // Trial of the Champion, Summon Risen Jaeren/Arelas
+ ApplySpellFix({ 67705, 67715 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_ALLOW_DEAD_TARGET;
+ });
+
+ // Trial of the Champion, Ghoul Explode
+ ApplySpellFix({ 67751 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
+ });
+
+ // Trial of the Champion, Desecration
+ ApplySpellFix({ 67778, 67877 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 68766;
+ });
+
+ // Killing Spree (Off hand damage)
+ ApplySpellFix({ 57842 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(2); // Melee Range
+ });
+
+ // Trial of the Crusader, Jaraxxus Intro spell
+ ApplySpellFix({ 67888 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Trial of the Crusader, Lich King Intro spell
+ ApplySpellFix({ 68193 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
+ });
+
+ // Trial of the Crusader, Gormok, player vehicle spell, CUSTOM! (default jump to hand, not used)
+ ApplySpellFix({ 66342 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_SET_VEHICLE_ID;
+ spellInfo->Effects[EFFECT_0].MiscValue = 496;
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_CHANGE_MAP;
+ });
+
+ // Trial of the Crusader, Gormok, Fire Bomb
+ ApplySpellFix({ 66313 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ANY);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ANY);
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ ApplySpellFix({ 66317 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ ApplySpellFix({ 66318 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Speed = 14.0f;
+ spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ ApplySpellFix({ 66320, 67472, 67473, 67475 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_2_YARDS);
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_2_YARDS);
+ });
+
+ // Trial of the Crusader, Acidmaw & Dreadscale, Emerge
+ ApplySpellFix({ 66947 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_WHILE_STUNNED;
+ });
+
+ // Trial of the Crusader, Jaraxxus, Curse of the Nether
+ ApplySpellFix({ 66211 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 66209; // exclude Touch of Jaraxxus
+ });
+
+ // Trial of the Crusader, Jaraxxus, Summon Volcano
+ ApplySpellFix({ 66258, 67901 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(85); // summon for 18 seconds, 15 not enough
+ });
+
+ // Trial of the Crusader, Jaraxxus, Spinning Pain Spike
+ ApplySpellFix({ 66281 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_4_YARDS);
+ });
+
+ ApplySpellFix({ 66287 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_TAUNT;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
+ spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_MOD_STUN;
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(35); // 4 secs
+ });
+
+ // Trial of the Crusader, Jaraxxus, Fel Fireball
+ ApplySpellFix({ 66532, 66963, 66964, 66965 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
+ });
+
+ // tempfix, make Nether Power not stealable
+ ApplySpellFix({ 66228, 67106, 67107, 67108 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_CANNOT_BE_STOLEN;
+ });
+
+ // Trial of the Crusader, Faction Champions, Druid - Tranquality
+ ApplySpellFix({ 66086, 67974, 67975, 67976 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AREA_AURA_FRIEND;
+ });
+
+ // Trial of the Crusader, Faction Champions, Shaman - Earth Shield
+ ApplySpellFix({ 66063 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 66064;
+ });
+
+ // Trial of the Crusader, Faction Champions, Priest - Mana Burn
+ ApplySpellFix({ 66100 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 5;
+ spellInfo->Effects[EFFECT_0].DieSides = 0;
+ });
+
+ ApplySpellFix({ 68026 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 8;
+ spellInfo->Effects[EFFECT_0].DieSides = 0;
+ });
+
+ ApplySpellFix({ 68027 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 6;
+ spellInfo->Effects[EFFECT_0].DieSides = 0;
+ });
+
+ ApplySpellFix({ 68028 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 10;
+ spellInfo->Effects[EFFECT_0].DieSides = 0;
+ });
+
+ // Trial of the Crusader, Twin Valkyr, Touch of Light/Darkness, Light/Dark Surge
+ ApplySpellFix({
+ 65950 // light 0
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->EffectApplyAuraName[0] = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 65767 // light surge 0
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 65686;
+ });
+
+ ApplySpellFix({
+ 67296 // light 1
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 67274 // light surge 1
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 67222;
+ });
+
+ ApplySpellFix({
+ 67297 // light 2
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 67275 // light surge 2
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 67223;
+ });
+
+ ApplySpellFix({
+ 67298 // light 3
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 67276 // light surge 3
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 67224;
+ });
+
+ ApplySpellFix({
+ 66001 // dark 0
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 65769 // dark surge 0
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 65684;
+ });
+
+ ApplySpellFix({
+ 67281 // dark 1
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 67265 // dark surge 1
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 67176;
+ });
+
+ ApplySpellFix({
+ 67282 // dark 2
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 67266 // dark surge 2
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 67177;
+ });
+
+ ApplySpellFix({
+ 67283 // dark 3
+ }, [](SpellInfo* spellInfo)
+ {
+ //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 67267 // dark surge 3
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 67178;
+ });
+
+ // Trial of the Crusader, Twin Valkyr, Twin's Pact
+ ApplySpellFix({ 65875, 67303, 67304, 67305, 65876, 67306, 67307, 67308 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Trial of the Crusader, Anub'arak, Emerge
+ ApplySpellFix({ 65982 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_WHILE_STUNNED;
+ });
+
+ // Trial of the Crusader, Anub'arak, Penetrating Cold
+ ApplySpellFix({ 66013, 67700, 68509, 68510 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ });
+
+ // Trial of the Crusader, Anub'arak, Shadow Strike
+ ApplySpellFix({ 66134 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ });
+
+ // Trial of the Crusader, Anub'arak, Pursuing Spikes
+ ApplySpellFix({ 65920, 65922, 65923 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PERIODIC_DUMMY;
+ //spellInfo->EffectTriggerSpell[0] = 0;
+ });
+
+ // Trial of the Crusader, Anub'arak, Summon Scarab
+ ApplySpellFix({ 66339 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(35);
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Trial of the Crusader, Anub'arak, Achievements: The Traitor King
+ ApplySpellFix({
+ 68186, // Anub'arak Scarab Achievement 10
+ 68515 // Anub'arak Scarab Achievement 25
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
+ spellInfo->Attributes |= SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD;
+ });
+
+ // Trial of the Crusader, Anub'arak, Spider Frenzy
+ ApplySpellFix({ 66129 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Soul Sickness
+ ApplySpellFix({ 69131 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PERIODIC_TRIGGER_SPELL;
+ spellInfo->Effects[EFFECT_0].Amplitude = 8000;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 69133;
+ });
+
+ // Phantom Blast
+ ApplySpellFix({ 68982, 70322 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
+ });
+
+ // Empowered Blizzard
+ ApplySpellFix({ 70131 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Ice Lance Volley
+ ApplySpellFix({ 70464 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS);
+ });
+
+ ApplySpellFix({
+ 70513, // Multi-Shot
+ 59514 // Shriek of the Highborne
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CONE_ENTRY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Icicle
+ ApplySpellFix({ 69428, 69426 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->InterruptFlags = 0;
+ spellInfo->AuraInterruptFlags = 0;
+ spellInfo->ChannelInterruptFlags = 0;
+ });
+
+ ApplySpellFix({ 70525, 70639 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_500_YARDS); // 500yd
+ });
+
+ // Frost Nova
+ ApplySpellFix({ 68198 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ });
+
+ // Blight
+ ApplySpellFix({ 69604, 70286 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ spellInfo->AttributesEx3 |= (SPELL_ATTR3_ALWAYS_HIT | SPELL_ATTR3_ONLY_ON_PLAYER);
+ });
+
+ // Chilling Wave
+ ApplySpellFix({ 68778, 70333 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ ApplySpellFix({ 68786, 70336 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= (SPELL_ATTR3_ALWAYS_HIT | SPELL_ATTR3_ONLY_ON_PLAYER);
+ spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_DUMMY;
+ });
+
+ // Pursuit
+ ApplySpellFix({ 68987 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ ApplySpellFix({ 69029, 70850 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Explosive Barrage
+ ApplySpellFix({ 69263 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_STUN;
+ });
+
+ // Overlord's Brand
+ ApplySpellFix({ 69172 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcFlags = DONE_HIT_PROC_FLAG_MASK & ~PROC_FLAG_DONE_PERIODIC;
+ spellInfo->ProcChance = 100;
+ });
+
+ // Icy Blast
+ ApplySpellFix({ 69232 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TriggerSpell = 69238;
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ ApplySpellFix({ 69233, 69646 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ ApplySpellFix({ 69238, 69628 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Hoarfrost
+ ApplySpellFix({ 69246, 69245, 69645 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Devour Humanoid
+ ApplySpellFix({ 69503 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ChannelInterruptFlags |= 0;
+ spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING;
+ });
+
+ // Falric: Defiling Horror
+ ApplySpellFix({ 72435, 72452 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS);
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS);
+ });
+
+ // Frostsworn General - Throw Shield
+ ApplySpellFix({ 69222, 73076 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ });
+
+ // Halls of Reflection Clone
+ ApplySpellFix({ 69828 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Summon Ice Wall
+ ApplySpellFix({ 69768 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_ACTION_DURING_CHANNEL;
+ });
+
+ ApplySpellFix({ 69767 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ANY);
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ });
+
+ // Essence of the Captured
+ ApplySpellFix({ 73035, 70719 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
+ });
+
+ // Achievement Check
+ ApplySpellFix({ 72830 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS);
+ });
+
+ ApplySpellFix({
+ 70781, // Light's Hammer Teleport
+ 70856, // Oratory of the Damned Teleport
+ 70857, // Rampart of Skulls Teleport
+ 70858, // Deathbringer's Rise Teleport
+ 70859, // Upper Spire Teleport
+ 70860, // Frozen Throne Teleport
+ 70861 // Sindragosa's Lair Teleport
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); // this target is for SPELL_EFFECT_TELEPORT_UNITS
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
+ });
+
+ ApplySpellFix({
+ 70960, // Bone Flurry
+ 71258 // Adrenaline Rush (Ymirjar Battle-Maiden)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_SELF_CHANNELED;
+ });
+
+ // Saber Lash (Lord Marrowgar)
+ ApplySpellFix({ 69055, 70814 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); // 5yd
+ });
+
+ // Impaled (Lord Marrowgar)
+ ApplySpellFix({ 69065 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0; // remove stun so Dispersion can be used
+ });
+
+ // Cold Flame (Lord Marrowgar)
+ ApplySpellFix({ 72701, 72702, 72703, 72704 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 secs instead of 12, need him for longer, but will stop his actions after 12 secs
+ });
+
+ ApplySpellFix({ 69138 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 secs instead of 12, need him for longer, but will stop his actions after 12 secs
+ });
+
+ ApplySpellFix({ 69146, 70823, 70824, 70825 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd instead of 5yd
+ spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
+ });
+
+ // Dark Martyrdom (Lady Deathwhisper)
+ ApplySpellFix({ 70897 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_ALLOW_DEAD_TARGET;
+ });
+
+ ApplySpellFix({
+ 69075, // Bone Storm (Lord Marrowgar)
+ 70834, // Bone Storm (Lord Marrowgar)
+ 70835, // Bone Storm (Lord Marrowgar)
+ 70836, // Bone Storm (Lord Marrowgar)
+ 72378, // Blood Nova (Deathbringer Saurfang)
+ 73058, // Blood Nova (Deathbringer Saurfang)
+ 72769, // Scent of Blood (Deathbringer Saurfang)
+ 72385, // Boiling Blood (Deathbringer Saurfang)
+ 72441, // Boiling Blood (Deathbringer Saurfang)
+ 72442, // Boiling Blood (Deathbringer Saurfang)
+ 72443, // Boiling Blood (Deathbringer Saurfang)
+ 71160, // Plague Stench (Stinky)
+ 71161, // Plague Stench (Stinky)
+ 71123, // Decimate (Stinky & Precious)
+ 71464 // Divine Surge (Sister Svalna)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ });
+
+ // Shadow's Fate
+ ApplySpellFix({ 71169 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ // Lock Players and Tap Chest
+ ApplySpellFix({ 72347 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Award Reputation - Boss Kill
+ ApplySpellFix({ 73843, 73844, 73845, 73846 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
+ });
+
+ // Death Plague (Rotting Frost Giant)
+ ApplySpellFix({ 72864 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 0;
+ });
+
+ // Gunship Battle, spell Below Zero
+ ApplySpellFix({ 69705 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Resistant Skin (Deathbringer Saurfang adds)
+ ApplySpellFix({ 72723 }, [](SpellInfo* spellInfo)
+ {
+ // this spell initially granted Shadow damage immunity, however it was removed but the data was left in client
+ spellInfo->Effects[EFFECT_2].Effect = 0;
+ });
+
+ // Mark of the Fallen Champion (Deathbringer Saurfang)
+ ApplySpellFix({ 72255, 72444, 72445, 72446 }, [](SpellInfo* spellInfo)
+ {
+ // Patch 3.3.2 (2010-01-02): Deathbringer Saurfang will no longer gain blood power from Mark of the Fallen Champion.
+ // prevented in script, effect needed for Prayer of Mending
+ spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_CASTER_PROCS;
+ });
+
+ // Coldflame Jets (Traps after Saurfang)
+ ApplySpellFix({ 70460 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(1); // 10 seconds
+ });
+
+ ApplySpellFix({
+ 70461, // Coldflame Jets (Traps after Saurfang)
+ 71289 // Dominate Mind (Lady Deathwhisper)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Severed Essence (Val'kyr Herald)
+ ApplySpellFix({ 71906, 71942 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ ApplySpellFix({
+ 71159, // Awaken Plagued Zombies (Precious)
+ 71302 // Awaken Ymirjar Fallen (Ymirjar Deathbringer)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
+ });
+
+ // Blood Prince Council, Invocation of Blood
+ ApplySpellFix({ 70981, 70982, 70952 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0; // clear share health aura
+ });
+
+ // Ymirjar Frostbinder, Frozen Orb
+ ApplySpellFix({ 71274 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
+ });
+
+ // Ooze Flood (Rotface)
+ ApplySpellFix({ 69783, 69797, 69799, 69802 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_EXCLUDE_CASTER;
+ });
+
+ // Volatile Ooze Beam Protection
+ ApplySpellFix({ 70530 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA; // blizzard typo, 65 instead of 6, aura itself is defined (dummy)
+ });
+
+ // Professor Putricide, Gaseous Bloat (Orange Ooze Channel)
+ ApplySpellFix({ 70672, 72455, 72832, 72833 }, [](SpellInfo* spellInfo)
+ {
+ // copied attributes from Green Ooze Channel
+ spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ ApplySpellFix({
+ 71412, // Green Ooze Summon (Professor Putricide)
+ 71415 // Orange Ooze Summon (Professor Putricide)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ });
+
+ ApplySpellFix({
+ 71621, // Create Concoction (Professor Putricide)
+ 72850,
+ 72851,
+ 72852,
+ 71893, // Guzzle Potions (Professor Putricide)
+ 73120,
+ 73121,
+ 73122
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(15); // 4 sec
+ });
+
+ // Mutated Plague (Professor Putricide)
+ ApplySpellFix({ 72454, 72464, 72506, 72507 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_NO_CAST_LOG;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ // Unbound Plague (Professor Putricide) (needs target selection script)
+ ApplySpellFix({ 70911, 72854, 72855, 72856 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
+ });
+
+ // Mutated Transformation (Professor Putricide)
+ ApplySpellFix({ 70402, 72511, 72512, 72513 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
+ });
+
+ // Empowered Flare (Blood Prince Council)
+ ApplySpellFix({ 71708, 72785, 72786, 72787 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ ApplySpellFix({
+ 71518, // Unholy Infusion Quest Credit (Professor Putricide)
+ 72934, // Blood Infusion Quest Credit (Blood-Queen Lana'thel)
+ 72289 // Frost Infusion Quest Credit (Sindragosa)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // another missing radius
+ });
+
+ // Swarming Shadows
+ ApplySpellFix({ 71266, 72890 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AreaGroupId = 0; // originally, these require area 4522, which is... outside of Icecrown Citadel
+ });
+
+ ApplySpellFix({
+ 71301, // Summon Dream Portal (Valithria Dreamwalker)
+ 71977 // Summon Nightmare Portal (Valithria Dreamwalker)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Column of Frost (visual marker)
+ ApplySpellFix({ 70715 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(32); // 6 seconds (missing)
+ });
+
+ // Mana Void (periodic aura)
+ ApplySpellFix({ 71085 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 seconds (missing)
+ });
+
+ // Summon Suppressor (needs target selection script)
+ ApplySpellFix({ 70936 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Corruption
+ ApplySpellFix({ 70602 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
+ });
+
+ ApplySpellFix({
+ 72706, // Achievement Check (Valithria Dreamwalker)
+ 71357 // Order Whelp
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ });
+
+ // Sindragosa's Fury
+ ApplySpellFix({ 70598 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Tail Smash (Sindragosa)
+ ApplySpellFix({ 71077 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER_BACK);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENEMY);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER_BACK);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENEMY);
+ });
+
+ // Frost Bomb
+ ApplySpellFix({ 69846 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 0.0f; // This spell's summon happens instantly
+ });
+
+ // Mystic Buffet (Sindragosa)
+ ApplySpellFix({ 70127, 72528, 72529, 72530 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0; // remove obsolete spell effect with no targets
+ });
+
+ // Sindragosa, Frost Aura
+ ApplySpellFix({ 70084, 71050, 71051, 71052 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes &= ~SPELL_ATTR0_NO_IMMUNITIES;
+ });
+
+ // Ice Lock
+ ApplySpellFix({ 71614 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Mechanic = MECHANIC_STUN;
+ });
+
+ // Lich King, Infest
+ ApplySpellFix({ 70541, 73779, 73780, 73781 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Lich King, Necrotic Plague
+ ApplySpellFix({ 70337, 73912, 73913, 73914, 70338, 73785, 73786, 73787 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ ApplySpellFix({
+ 69099, // Ice Pulse 10n
+ 73776, // Ice Pulse 25n
+ 73777, // Ice Pulse 10h
+ 73778 // Ice Pulse 25h
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
+ spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
+ });
+
+ // Fury of Frostmourne
+ ApplySpellFix({ 72350 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ ApplySpellFix({
+ 72351, // Fury of Frostmourne
+ 72431, // Jump (removes Fury of Frostmourne debuff)
+ 72429, // Mass Resurrection
+ 73159 // Play Movie
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ // Raise Dead
+ ApplySpellFix({ 72376 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 4;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ // Jump
+ ApplySpellFix({ 71809 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
+ spellInfo->Effects[EFFECT_0].MiscValue = 190;
+ });
+
+ // Broken Frostmourne
+ ApplySpellFix({ 72405 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ });
+
+ // Summon Shadow Trap
+ ApplySpellFix({ 73540 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(3); // 60 seconds
+ });
+
+ // Shadow Trap (visual)
+ ApplySpellFix({ 73530 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds
+ });
+
+ // Shadow Trap
+ ApplySpellFix({ 73529 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
+ });
+
+ // Shadow Trap (searcher)
+ ApplySpellFix({ 74282 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd
+ });
+
+ // Raging Spirit Visual
+ ApplySpellFix({ 69198 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Defile
+ ApplySpellFix({ 72762 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(559); // 53 seconds
+ spellInfo->ExcludeCasterAuraSpell = 0;
+ spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
+ spellInfo->AttributesEx6 |= (SPELL_ATTR6_IGNORE_PHASE_SHIFT | SPELL_ATTR6_CAN_TARGET_UNTARGETABLE);
+ });
+
+ // Defile
+ ApplySpellFix({ 72743 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(22); // 45 seconds
+ });
+
+ ApplySpellFix({ 72754, 73708, 73709, 73710 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ });
+
+ // Val'kyr Target Search
+ ApplySpellFix({ 69030 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
+ });
+
+ // Harvest Souls
+ ApplySpellFix({ 73654, 74295, 74296, 74297 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ // Restore Soul
+ ApplySpellFix({ 72595, 73650 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ });
+
+ // Kill Frostmourne Players
+ ApplySpellFix({ 75127 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ // Harvest Soul
+ ApplySpellFix({ 73655 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
+ });
+
+ // Destroy Soul
+ ApplySpellFix({ 74086 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ });
+
+ // Summon Spirit Bomb
+ ApplySpellFix({ 74302, 74342 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ // Summon Spirit Bomb
+ ApplySpellFix({ 74341, 74343 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
+ spellInfo->MaxAffectedTargets = 3;
+ });
+
+ // Summon Spirit Bomb
+ ApplySpellFix({ 73579 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); // 25yd
+ });
+
+ // Trigger Vile Spirit (Inside, Heroic)
+ ApplySpellFix({ 73582 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
+ });
+
+ // Scale Aura (used during Dominate Mind from Lady Deathwhisper)
+ ApplySpellFix({ 73261 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
+ });
+
+ // Leap to a Random Location
+ ApplySpellFix({ 70485 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS);
+ spellInfo->Effects[EFFECT_0].MiscValue = 100;
+ });
+
+ // Empowered Blood
+ ApplySpellFix({ 70227, 70232 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AreaGroupId = 2452; // Whole icc instead of Crimson Halls only, remove when area calculation is fixed
+ });
+
+ ApplySpellFix({ 74509 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
+ });
+
+ // Rallying Shout
+ ApplySpellFix({ 75414 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
+ });
+
+ // Barrier Channel
+ ApplySpellFix({ 76221 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ChannelInterruptFlags &= ~(AURA_INTERRUPT_FLAG_TURNING | AURA_INTERRUPT_FLAG_MOVE);
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
+ });
+
+ // Intimidating Roar
+ ApplySpellFix({ 74384 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ });
+
+ ApplySpellFix({
+ 74562, // Fiery Combustion
+ 74792 // Soul Consumption
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_REDIRECTION;
+ });
+
+ // Combustion
+ ApplySpellFix({ 75883, 75884 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
+ });
+
+ // Consumption
+ ApplySpellFix({ 75875, 75876 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
+ spellInfo->Effects[EFFECT_0].Mechanic = MECHANIC_NONE;
+ spellInfo->Effects[EFFECT_1].Mechanic = MECHANIC_SNARE;
+ });
+
+ // Soul Consumption
+ ApplySpellFix({ 74799 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_12_YARDS); // 12yd
+ });
+
+ // Twilight Cutter
+ ApplySpellFix({ 74769, 77844, 77845, 77846 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ });
+
+ // Twilight Mending
+ ApplySpellFix({ 75509 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
+ });
+
+ // Meteor Strike
+ ApplySpellFix({ 74637 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 0;
+ });
+
+ //Blazing Aura
+ ApplySpellFix({ 75885, 75886 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
+ });
+
+ ApplySpellFix({
+ 75952, //Meteor Strike
+ 74629 //Combustion Periodic
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
+ });
+
+ // Going Bearback
+ ApplySpellFix({ 54897 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY;
+ spellInfo->Effects[EFFECT_1].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENTRY);
+ });
+
+ // Still At It
+ ApplySpellFix({ 51931, 51932, 51933 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(38);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Rallying the Troops
+ ApplySpellFix({ 47394 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ExcludeTargetAuraSpell = 47394;
+ });
+
+ // A Tangled Skein
+ ApplySpellFix({ 51165, 51173 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ ApplySpellFix({
+ 69563, // A Cloudlet of Classy Cologne
+ 69445, // A Perfect Puff of Perfume
+ 69489 // Bonbon Blitz
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Control
+ ApplySpellFix({ 30790 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].MiscValue = 0;
+ });
+
+ // Reclusive Runemaster
+ ApplySpellFix({ 48028 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
+ });
+
+ // Mastery of
+ ApplySpellFix({ 65147 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->CategoryEntry = sSpellCategoryStore.LookupEntry(1244);
+ spellInfo->CategoryRecoveryTime = 1500;
+ });
+
+ // Weakness to Lightning
+ ApplySpellFix({ 46432 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 &= ~SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
+ });
+
+ // Wrangle Some Aether Rays!
+ ApplySpellFix({ 40856 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(27); // 3000ms
+ });
+
+ // The Black Knight's Orders
+ ApplySpellFix({ 63163 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 52390;
+ });
+
+ // The Warp Rifts
+ ApplySpellFix({ 34888 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(5); // 300 secs
+ });
+
+ // The Smallest Creatures
+ ApplySpellFix({ 38544 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValueB = 427;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Ridding the red rocket
+ ApplySpellFix({ 49177 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 1; // corrects seat id (points - 1 = seatId)
+ });
+
+ // Jormungar Strike
+ ApplySpellFix({ 56513 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 2000;
+ });
+
+ ApplySpellFix({
+ 37851, // Tag Greater Felfire Diemetradon
+ 37918 // Arcano-pince
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 3000;
+ });
+
+ ApplySpellFix({
+ 54997, // Cast Net (tooltip says 10s but sniffs say 6s)
+ 56524 // Acid Breath
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 6000;
+ });
+
+ ApplySpellFix({
+ 47911, // EMP
+ 48620, // Wing Buffet
+ 51752 // Stampy's Stompy-Stomp
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 10000;
+ });
+
+ ApplySpellFix({
+ 37727, // Touch of Darkness
+ 54996 // Ice Slick (tooltip says 20s but sniffs say 12s)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 12000;
+ });
+
+ // Signal Helmet to Attack
+ ApplySpellFix({ 51748 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 15000;
+ });
+
+ ApplySpellFix({
+ 51756, // Charge
+ 37919, //Arcano-dismantle
+ 37917 //Arcano-Cloak
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 20000;
+ });
+
+ // Kaw the Mammoth Destroyer
+ ApplySpellFix({ 46260 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // That's Abominable
+ ApplySpellFix({ 59565 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValueB = 1721; // controlable guardian
+ });
+
+ // Investigate the Blue Recluse (1920)
+ // Investigate the Alchemist Shop (1960)
+ ApplySpellFix({ 9095 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
+ });
+
+ // Dragonmaw Race: All parts
+ ApplySpellFix({
+ 40890 // Oldie's Rotten Pumpkin
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 40905;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Trope's Slime Cannon
+ ApplySpellFix({ 40909 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 40905;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Corlok's Skull Barrage
+ ApplySpellFix({ 40894 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 40900;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Ichman's Blazing Fireball
+ ApplySpellFix({ 40928 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 40929;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Mulverick's Great Balls of Lightning
+ ApplySpellFix({ 40930 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 40931;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Sky Shatter
+ ApplySpellFix({ 40945 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 41064;
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ });
+
+ // Gauging the Resonant Frequency (10594)
+ ApplySpellFix({ 37390 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValueB = 181;
+ });
+
+ // Where in the World is Hemet Nesingwary? (12521)
+ ApplySpellFix({ 50860 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 50860;
+ });
+
+ ApplySpellFix({ 50861 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 0;
+ });
+
+ // Krolmir, Hammer of Storms (13010)
+ ApplySpellFix({ 56606, 56541 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 1;
+ });
+
+ // Blightbeasts be Damned! (12072)
+ ApplySpellFix({ 47424 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags &= ~AURA_INTERRUPT_FLAG_NOT_ABOVEWATER;
+ });
+
+ // Dark Horizon (12664), Reunited (12663)
+ ApplySpellFix({ 52190 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 52391 - 1;
+ });
+
+ // The Sum is Greater than the Parts (13043) - Chained Grip
+ ApplySpellFix({ 60540 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].MiscValue = 300;
+ });
+
+ // Not a Bug (13342)
+ ApplySpellFix({ 60531 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_ALLOW_DEAD_TARGET;
+ });
+
+ // Frankly, It Makes No Sense... (10672)
+ ApplySpellFix({ 37851 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Honor Challenge (12939)
+ ApplySpellFix({ 21855 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Convocation at Zol'Heb (12730)
+ ApplySpellFix({ 52956 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENTRY);
+ });
+
+ // Mangletooth
+ ApplySpellFix({
+ 7764, // Wisdom of Agamaggan
+ 10767, // Rising Spirit
+ 16610, // Razorhide
+ 16612, // Agamaggan's Strength
+ 16618, // Spirit of the Wind
+ 17013 // Agamaggan's Agility
+ }, [](SpellInfo* spellInfo)
+
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ spellInfo->AttributesEx5 |= SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT;
+ });
+
+ //Crushing the Crown
+ ApplySpellFix({ 71024 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
+ });
+
+ // Battle for the Undercity
+ ApplySpellFix({
+ 59892 // Cyclone fall
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AREA_AURA_FRIEND;
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
+ spellInfo->AttributesEx &= ~SPELL_ATTR0_NO_AURA_CANCEL;
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
+ });
+
+ // enchant Lightweave Embroidery
+ ApplySpellFix({ 55637 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].MiscValue = 126;
+ });
+
+ // Magic Broom
+ ApplySpellFix({ 47977 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Titanium Seal of Dalaran, Toss your luck
+ ApplySpellFix({ 60476 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ });
+
+ // Mind Amplification Dish, change charm aura
+ ApplySpellFix({ 26740 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_CHARM;
+ });
+
+ // Persistent Shield
+ ApplySpellFix({ 26467 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE;
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 26470;
+ });
+
+ // Deadly Swiftness
+ ApplySpellFix({ 31255 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TriggerSpell = 22588;
+ });
+
+ // Black Magic enchant
+ ApplySpellFix({ 59630 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
+ });
+
+ // Precious's Ribbon
+ ApplySpellFix({ 72968 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
+ });
+
+ ApplySpellFix({
+ 71646, // Item - Bauble of True Blood 10m
+ 71607, // Item - Bauble of True Blood 25m
+ 71610, // Item - Althor's Abacus trigger 10m
+ 71641 // Item - Althor's Abacus trigger 25m
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
+ spellInfo->SpellLevel = 0;
+ });
+
+ ApplySpellFix({
+ 6789, // Warlock - Death Coil (Rank 1)
+ 17925, // Warlock - Death Coil (Rank 2)
+ 17926, // Warlock - Death Coil (Rank 3)
+ 27223, // Warlock - Death Coil (Rank 4)
+ 47859, // Warlock - Death Coil (Rank 5)
+ 71838, // Drain Life - Bryntroll Normal
+ 71839 // Drain Life - Bryntroll Heroic
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
+ });
+
+ // Alchemist's Stone
+ ApplySpellFix({ 17619 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
+ });
+
+ // Stormchops
+ ApplySpellFix({ 43730 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(1);
+ spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Savory Deviate Delight (transformations), allow to mount while transformed
+ ApplySpellFix({ 8219, 8220, 8221, 8222 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Attributes &= ~SPELL_ATTR0_NO_IMMUNITIES;
+ });
+
+ // Clamlette Magnifique
+ ApplySpellFix({ 72623 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = spellInfo->Effects[EFFECT_1].BasePoints;
+ });
+
+ // Compact Harvest Reaper
+ ApplySpellFix({ 4078 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(6); // 10 minutes
+ });
+
+ // Dragon Kite, Tuskarr Kite - Kite String
+ ApplySpellFix({ 45192 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
+ });
+
+ // Frigid Frostling, Infrigidate
+ ApplySpellFix({ 74960 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
+ });
+
+ // Apple Trap
+ ApplySpellFix({ 43450 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
+ });
+
+ // Dark Iron Attack - spawn mole machine
+ ApplySpellFix({ 43563 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].Effect = 0; // summon GO's manually
+ });
+
+ // Throw Mug visual
+ ApplySpellFix({ 42300 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ });
+
+ // Dark Iron knockback Aura
+ ApplySpellFix({ 42299 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY;
+ spellInfo->Effects[EFFECT_0].MiscValue = 100;
+ spellInfo->Effects[EFFECT_0].BasePoints = 79;
+ });
+
+ // Chug and Chuck!
+ ApplySpellFix({ 42436 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
+ spellInfo->MaxAffectedTargets = 0;
+ spellInfo->ExcludeCasterAuraSpell = 42299;
+ });
+
+ // Catch the Wild Wolpertinger!
+ ApplySpellFix({ 41621 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
+ });
+
+ // Brewfest quests
+ ApplySpellFix({ 47134, 51798 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ });
+
+ // The Heart of The Storms (12998)
+ ApplySpellFix({ 43528 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(18);
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
+ });
+
+ // Water splash
+ ApplySpellFix({ 42348 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].Effect = 0;
+ });
+
+ // Summon Lantersn
+ ApplySpellFix({ 44255, 44231 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Throw Head Back
+ ApplySpellFix({ 42401 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
+ });
+
+ // Food
+ ApplySpellFix({ 65418 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TriggerSpell = 65410;
+ });
+
+ ApplySpellFix({ 65422 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TriggerSpell = 65414;
+ });
+
+ ApplySpellFix({ 65419 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TriggerSpell = 65416;
+ });
+
+ ApplySpellFix({ 65420 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TriggerSpell = 65412;
+ });
+
+ ApplySpellFix({ 65421 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_2].TriggerSpell = 65415;
+ });
+
+ // Stamp Out Bonfire
+ ApplySpellFix({ 45437 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Light Bonfire (DND)
+ ApplySpellFix({ 29831 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
+ });
+
+ // Infernal
+ ApplySpellFix({ 33240 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ });
+
+ ApplySpellFix({
+ 47476, // Deathknight - Strangulate
+ 15487, // Priest - Silence
+ 5211, // Druid - Bash - R1
+ 6798, // Druid - Bash - R2
+ 8983 // Druid - Bash - R3
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx7 |= SPELL_ATTR7_CAN_CAUSE_INTERRUPT;
+ });
+
+ // Ritual of Summoning
+ ApplySpellFix({ 61994 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ManaCostPercentage = 0; // Clicking on Warlock Summoning portal should not require mana
+ });
+
+ // Shadowmeld
+ ApplySpellFix({ 58984 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
+ });
+
+ // Flare activation speed
+ ApplySpellFix({ 1543 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Speed = 0.0f;
+ });
+
+ // Light's Beacon
+ ApplySpellFix({ 53651 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
+ });
+
+ // Shadow Hunter Vosh'gajin - Hex
+ ApplySpellFix({ 16097 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(16);
+ });
+
+ // Sacred Cleansing
+ ApplySpellFix({ 53659 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd
+ });
+
+ // Silithyst
+ ApplySpellFix({ 29519 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_DECREASE_SPEED;
+ spellInfo->Effects[EFFECT_0].BasePoints = -25;
+ });
+
+ // Focused Eyebeam Summon Trigger
+ ApplySpellFix({ 63342 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->MaxAffectedTargets = 1;
+ spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
+ });
+
+ // Luffa
+ ApplySpellFix({ 23595 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].BasePoints = 1; // Remove only 1 bleed effect
+ });
+
+ // Eye of Kilrogg Passive (DND)
+ ApplySpellFix({ 2585 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE;
+ });
+
+ // Conflagration, Horseman's Cleave
+ ApplySpellFix({ 42380, 42587 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
+ });
+
+ // Serverside - Summon Arcane Disruptor
+ ApplySpellFix({ 49591 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcChance = 101;
+ spellInfo->Effects[EFFECT_1].Effect = 24;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(25);
+ spellInfo->Effects[EFFECT_1].ItemType = 37888;
+ });
+
+ // Serverside - Create Rocket Pack
+ ApplySpellFix({ 70055 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->ProcChance = 101;
+ spellInfo->Effects[EFFECT_1].Effect = 24;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(25);
+ spellInfo->Effects[EFFECT_1].ItemType = 49278;
+ });
+
+ // Ashenvale Outrunner Sneak
+ // Stealth
+ ApplySpellFix({ 20540, 32199 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= (AURA_INTERRUPT_FLAG_MELEE_ATTACK | AURA_INTERRUPT_FLAG_CAST);
+ });
+
+ // Arcane Bolt
+ ApplySpellFix({ 15979 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(3); // 20y
+ });
+
+ // Mortal Shots
+ ApplySpellFix({ 19485, 19487, 19488, 19489, 19490 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].SpellClassMask[0] |= 0x00004000;
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Item - Death Knight T9 Melee 4P Bonus
+ // Item - Hunter T9 2P Bonus
+ // Item - Paladin T9 Retribution 2P Bonus (Righteous Vengeance)
+ ApplySpellFix({ 67118, 67150, 67188 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = 0;
+ });
+
+ // Green Beam
+ ApplySpellFix({31628, 31630, 31631}, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
+ spellInfo->MaxAffectedTargets = 1;
+ });
+
+ ApplySpellFix({
+ 20271, 57774, // Judgement of Light
+ 20425, // Judgement of Command
+ 32220, // Judgement of Blood
+ 53407, // Judgement of Justice
+ 53408, // Judgement of Wisdom
+ 53725 // Judgement of the Martyr
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_TARGET_PROCS;
+ });
+
+ // Chaos Bolt Passive
+ ApplySpellFix({ 58284 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
+ spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST;
+ spellInfo->Effects[EFFECT_1].BasePoints = 100;
+ spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ spellInfo->Effects[EFFECT_1].MiscValue = 127;
+ spellInfo->Effects[EFFECT_1].SpellClassMask[1] = 0x00020000;
+ });
+
+ // Focused Assault
+ // Brutal Assault
+ ApplySpellFix({ 46392, 46393 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
+ });
+
+ // Bestial Wrath
+ ApplySpellFix({ 19574 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx4 |= SPELL_ATTR4_AURA_EXPIRES_OFFLINE;
+ });
+
+ // PX-238 Winter Wondervolt
+ ApplySpellFix({ 26157, 26272, 26273, 26274 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->Mechanic = 0;
+ });
+
+ for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
+ {
+ SpellInfo* spellInfo = mSpellInfoMap[i];
+ if (!spellInfo)
+ {
+ continue;
+ }
+
+ for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j)
+ {
+ switch (spellInfo->Effects[j].Effect)
+ {
+ case SPELL_EFFECT_CHARGE:
+ case SPELL_EFFECT_CHARGE_DEST:
+ case SPELL_EFFECT_JUMP:
+ case SPELL_EFFECT_JUMP_DEST:
+ case SPELL_EFFECT_LEAP_BACK:
+ if (!spellInfo->Speed && !spellInfo->SpellFamilyName)
+ {
+ spellInfo->Speed = SPEED_CHARGE;
+ }
+ break;
+ }
+
+ // Xinef: i hope this will fix the problem with not working resurrection
+ if (spellInfo->Effects[j].Effect == SPELL_EFFECT_SELF_RESURRECT)
+ {
+ spellInfo->Effects[j].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
+ }
+ }
+
+ // Fix range for trajectory triggered spell
+ for (SpellEffectInfo const& spellEffectInfo : spellInfo->GetEffects())
+ {
+ if (spellEffectInfo.IsEffect() && (spellEffectInfo.TargetA.GetTarget() == TARGET_DEST_TRAJ || spellEffectInfo.TargetB.GetTarget() == TARGET_DEST_TRAJ))
+ {
+ // Get triggered spell if any
+ if (SpellInfo* spellInfoTrigger = const_cast(GetSpellInfo(spellEffectInfo.TriggerSpell)))
+ {
+ float maxRangeMain = spellInfo->RangeEntry ? spellInfo->RangeEntry->RangeMax[0] : 0.0f;
+ float maxRangeTrigger = spellInfoTrigger->RangeEntry ? spellInfoTrigger->RangeEntry->RangeMax[0] : 0.0f;
+
+ // check if triggered spell has enough max range to cover trajectory
+ if (maxRangeTrigger < maxRangeMain)
+ spellInfoTrigger->RangeEntry = spellInfo->RangeEntry;
+ }
+ }
+ }
+
+ if (spellInfo->ActiveIconID == 2158) // flight
+ {
+ spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
+ }
+
+ switch (spellInfo->SpellFamilyName)
+ {
+ case SPELLFAMILY_PALADIN:
+ // Seals of the Pure should affect Seal of Righteousness
+ if (spellInfo->SpellIconID == 25 && (spellInfo->Attributes & SPELL_ATTR0_PASSIVE))
+ spellInfo->Effects[EFFECT_0].SpellClassMask[1] |= 0x20000000;
+ break;
+ case SPELLFAMILY_DEATHKNIGHT:
+ // Icy Touch - extend FamilyFlags (unused value) for Sigil of the Frozen Conscience to use
+ if (spellInfo->SpellIconID == 2721 && spellInfo->SpellFamilyFlags[0] & 0x2)
+ spellInfo->SpellFamilyFlags[0] |= 0x40;
+ break;
+ case SPELLFAMILY_HUNTER:
+ // Aimed Shot not affected by category cooldown modifiers
+ if (spellInfo->SpellFamilyFlags[0] & 0x00020000)
+ {
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
+ spellInfo->RecoveryTime = 10 * IN_MILLISECONDS;
+ }
+ break;
+ }
+
+ // Recklessness/Shield Wall/Retaliation
+ if (spellInfo->CategoryEntry == sSpellCategoryStore.LookupEntry(132) && spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR)
+ {
+ spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
+ }
+ }
+
+ // Xinef: The Veiled Sea area in outlands (Draenei zone), client blocks casting flying mounts
+ for (uint32 i = 0; i < sAreaTableStore.GetNumRows(); ++i)
+ if (AreaTableEntry* areaEntry = const_cast(sAreaTableStore.LookupEntry(i)))
+ {
+ if (areaEntry->ID == 3479)
+ areaEntry->flags |= AREA_FLAG_NO_FLY_ZONE;
+ // Xinef: Dun Morogh, Kharanos tavern, missing resting flag
+ else if (areaEntry->ID == 2102)
+ areaEntry->flags |= AREA_FLAG_REST_ZONE_ALLIANCE;
+ }
+
+ // Xinef: fix for something?
+ SummonPropertiesEntry* properties = const_cast(sSummonPropertiesStore.LookupEntry(121));
+ properties->Type = SUMMON_TYPE_TOTEM;
+ properties = const_cast(sSummonPropertiesStore.LookupEntry(647)); // 52893
+ properties->Type = SUMMON_TYPE_TOTEM;
+ if ((properties = const_cast(sSummonPropertiesStore.LookupEntry(628)))) // Hungry Plaguehound
+ {
+ properties->Category = SUMMON_CATEGORY_PET;
+ properties->Type = SUMMON_TYPE_PET;
+ }
+
+ // Correct Pet Size
+ CreatureDisplayInfoEntry* displayEntry = const_cast(sCreatureDisplayInfoStore.LookupEntry(17028)); // Kurken
+ displayEntry->scale = 2.5f;
+
+ // Oracles and Frenzyheart faction
+ FactionEntry* factionEntry = const_cast(sFactionStore.LookupEntry(1104));
+ factionEntry->ReputationFlags[0] = 0;
+ factionEntry = const_cast(sFactionStore.LookupEntry(1105));
+ factionEntry->ReputationFlags[0] = 0;
+
+ // Various factions, added 14, 16 to hostile mask
+ FactionTemplateEntry* factionTemplateEntry = const_cast(sFactionTemplateStore.LookupEntry(1978)); // Warsong Offensive
+ factionTemplateEntry->hostileMask |= 8;
+ factionTemplateEntry = const_cast(sFactionTemplateStore.LookupEntry(1921)); // The Taunka
+ factionTemplateEntry->hostileMask |= 8;
+
+ // Remove vehicles attr, making accessories selectable
+ VehicleSeatEntry* vse = const_cast(sVehicleSeatStore.LookupEntry(4689)); // Siege Engine, Accessory
+ vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(4692)); // Siege Engine, Accessory
+ vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(4693)); // Siege Engine, Accessory
+ vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(3011)); // Salvaged Demolisher, Ulduar - not allow to change seats
+ vse->m_flags &= ~VEHICLE_SEAT_FLAG_CAN_SWITCH;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(3077)); // Salvaged Demolisher Seat, Ulduar - not allow to change seats
+ vse->m_flags &= ~VEHICLE_SEAT_FLAG_CAN_SWITCH;
+
+ // pussywizard: fix z offset for some vehicles:
+ vse = const_cast(sVehicleSeatStore.LookupEntry(6206)); // Marrowgar - Bone Spike
+ vse->m_attachmentOffsetZ = 4.0f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(3806)); // Mimiron - seat on VX-001 for ACU during last phase
+ vse->m_attachmentOffsetZ = 15.0f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(3566)); // Mimiron - Working seat
+ vse->m_attachmentOffsetX = -3.5f;
+ vse->m_attachmentOffsetY = 0.0f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(3567)); // Mimiron - Working seat
+ vse->m_attachmentOffsetX = 2.3f;
+ vse->m_attachmentOffsetY = -2.3f;
+
+ // Pilgrim's Bounty offsets
+ vse = const_cast(sVehicleSeatStore.LookupEntry(2841));
+ vse->m_attachmentOffsetX += 1.65f;
+ vse->m_attachmentOffsetY += 0.75f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(2842));
+ vse->m_attachmentOffsetX += 1.6f;
+ vse->m_attachmentOffsetY += -1.0f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(2843));
+ vse->m_attachmentOffsetX += -1.2f;
+ vse->m_attachmentOffsetY += 0.2f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(2844));
+ vse->m_attachmentOffsetX += -0.1f;
+ vse->m_attachmentOffsetY += -1.6f;
+ vse = const_cast(sVehicleSeatStore.LookupEntry(2845));
+ vse->m_attachmentOffsetX += 0.0f;
+ vse->m_attachmentOffsetY += 1.6f;
+
+ // Once Bitten, Twice Shy (10 player) - Icecrown Citadel
+ AchievementEntry* achievement = const_cast(sAchievementStore.LookupEntry(4539));
+ achievement->mapID = 631; // Correct map requirement (currently has Ulduar)
+
+ // Ring of Valor starting Locations
+ GraveyardStruct const* entry = sGraveyard->GetGraveyard(1364);
+ const_cast(entry)->z += 6.0f;
+ entry = sGraveyard->GetGraveyard(1365);
+ const_cast(entry)->z += 6.0f;
+
+ LockEntry* key = const_cast(sLockStore.LookupEntry(36)); // 3366 Opening, allows to open without proper key
+ key->Type[2] = LOCK_KEY_NONE;
+
+ LOG_INFO("server.loading", ">> Loading spell dbc data corrections in {} ms", GetMSTimeDiffToNow(oldMSTime));
+ LOG_INFO("server.loading", " ");
+}
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index f2d672e9f..e7e08cc36 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3458,4321 +3458,3 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
LOG_INFO("server.loading", ">> Loaded SpellInfo custom attributes in {} ms", GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
-
-inline void ApplySpellFix(std::initializer_list spellIds, void(*fix)(SpellInfo*))
-{
- for (uint32 spellId : spellIds)
- {
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- if (!spellInfo)
- {
- LOG_ERROR("sql.sql", "Spell info correction specified for non-existing spell {}", spellId);
- continue;
- }
-
- fix(const_cast(spellInfo));
- }
-}
-
-void SpellMgr::LoadSpellInfoCorrections()
-{
- uint32 oldMSTime = getMSTime();
-
- ApplySpellFix({
- 467, // Thorns (Rank 1)
- 782, // Thorns (Rank 2)
- 1075, // Thorns (Rank 3)
- 8914, // Thorns (Rank 4)
- 9756, // Thorns (Rank 5)
- 9910, // Thorns (Rank 6)
- 26992, // Thorns (Rank 7)
- 53307, // Thorns (Rank 8)
- 53352, // Explosive Shot (trigger)
- 50783, // Slam (Triggered spell)
- 20647 // Execute (Triggered spell)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Elixir of Minor Fortitude
- ApplySpellFix({ 2378 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ManaCost = 0;
- spellInfo->ManaPerSecond = 0;
- });
-
- // Elixir of Detect Undead
- ApplySpellFix({ 11389 }, [](SpellInfo* spellInfo)
- {
- spellInfo->PowerType = POWER_MANA;
- spellInfo->ManaCost = 0;
- spellInfo->ManaPerSecond = 0;
- });
-
- // Evergrove Druid Transform Crow
- ApplySpellFix({ 38776 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(4); // 120 seconds
- });
-
- ApplySpellFix({
- 63026, // Force Cast (HACK: Target shouldn't be changed)
- 63137 // Force Cast (HACK: Target shouldn't be changed; summon position should be untied from spell destination)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB);
- });
-
- ApplySpellFix({
- 53096, // Quetz'lun's Judgment
- 70743, // AoD Special
- 70614 // AoD Special - Vegard
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Summon Skeletons
- ApplySpellFix({ 52611, 52612 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValueB = 64;
- });
-
- ApplySpellFix({
- 40244, // Simon Game Visual
- 40245, // Simon Game Visual
- 40246, // Simon Game Visual
- 40247, // Simon Game Visual
- 42835 // Spout, remove damage effect, only anim is needed
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- });
-
- ApplySpellFix({
- 63665, // Charge (Argent Tournament emote on riders)
- 31298, // Sleep (needs target selection script)
- 2895, // Wrath of Air Totem rank 1 (Aura)
- 68933, // Wrath of Air Totem rank 2 (Aura)
- 29200 // Purify Helboar Meat
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(0);
- });
-
- // Howl of Azgalor
- ApplySpellFix({ 31344 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yards instead of 50000?!
- });
-
- ApplySpellFix({
- 42818, // Headless Horseman - Wisp Flight Port
- 42821 // Headless Horseman - Wisp Flight Missile
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards
- });
-
- // Spirit of Kirith
- ApplySpellFix({ 10853 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(3); // 1min
- });
-
- // Headless Horseman - Start Fire
- ApplySpellFix({ 42132 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards
- });
-
- //They Must Burn Bomb Aura (self)
- ApplySpellFix({ 36350 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 36325; // They Must Burn Bomb Drop (DND)
- });
-
- // Mana Shield (rank 2)
- ApplySpellFix({ 8494 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcChance = 0; // because of bug in dbc
- });
-
- ApplySpellFix({
- 63320, // Glyph of Life Tap
- 20335, // Heart of the Crusader
- 20336, // Heart of the Crusader
- 20337, // Heart of the Crusader
- 53228, // Rapid Killing (Rank 1)
- 53232, // Rapid Killing (Rank 2)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_FROM_PROCS; // Entries were not updated after spell effect change, we have to do that manually
- });
-
- ApplySpellFix({
- 31347, // Doom
- 41635, // Prayer of Mending
- 39365, // Thundering Storm
- 52124, // Sky Darkener Assault
- 42442, // Vengeance Landing Cannonfire
- 45863, // Cosmetic - Incinerate to Random Target
- 25425, // Shoot
- 45761, // Shoot
- 42611, // Shoot
- 61588, // Blazing Harpoon
- 36327 // Shoot Arcane Explosion Arrow
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Skartax Purple Beam
- ApplySpellFix({ 36384 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 2;
- });
-
- ApplySpellFix({
- 37790, // Spread Shot
- 54172, // Divine Storm (heal)
- 66588, // Flaming Spear
- 54171 // Divine Storm
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 3;
- });
-
- // Divine Storm (Damage)
- ApplySpellFix({ 53385 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 4;
- });
-
- // Spitfire Totem
- ApplySpellFix({ 38296 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 5;
- });
-
- ApplySpellFix({
- 40827, // Sinful Beam
- 40859, // Sinister Beam
- 40860, // Vile Beam
- 40861 // Wicked Beam
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 10;
- });
-
- // Unholy Frenzy
- ApplySpellFix({ 50312 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 15;
- });
-
- ApplySpellFix({
- 17941, // Shadow Trance
- 22008, // Netherwind Focus
- 31834, // Light's Grace
- 34754, // Clearcasting
- 34936, // Backlash
- 48108, // Hot Streak
- 51124, // Killing Machine
- 54741, // Firestarter
- 57761, // Fireball!
- 64823, // Item - Druid T8 Balance 4P Bonus
- 34477, // Misdirection
- 44401, // Missile Barrage
- 18820 // Insight
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 1;
- });
-
- // Tidal Wave
- ApplySpellFix({ 53390 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 2;
- });
-
- // Oscillation Field
- ApplySpellFix({ 37408 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Ascendance (Talisman of Ascendance trinket)
- ApplySpellFix({ 28200 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 6;
- });
-
- // The Eye of Acherus (no spawn in phase 2 in db)
- ApplySpellFix({ 51852 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValue |= 1;
- });
-
- // Crafty's Ultra-Advanced Proto-Typical Shortening Blaster
- ApplySpellFix({ 51912 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Amplitude = 3000;
- });
-
- // Desecration Arm - 36 instead of 37 - typo?
- ApplySpellFix({ 29809 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_7_YARDS);
- });
-
- // Sic'em
- ApplySpellFix({ 42767 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
- });
-
- // Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data
- // To prevent aura staying on target after talent unlearned
- ApplySpellFix({ 48420 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Stances = 1 << (FORM_CAT - 1);
- });
-
- ApplySpellFix({ 48421 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Stances = 1 << (FORM_MOONKIN - 1);
- });
-
- ApplySpellFix({ 48422 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Stances = 1 << (FORM_TREE - 1);
- });
-
- // Elemental Oath
- ApplySpellFix({ 51466, 51470 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
- spellInfo->Effects[EFFECT_1].MiscValue = SPELLMOD_EFFECT2;
- spellInfo->Effects[EFFECT_1].SpellClassMask = flag96(0x00000000, 0x00004000, 0x00000000);
- });
-
- // Improved Shadowform (Rank 1)
- ApplySpellFix({ 47569 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFTED; // with this spell atrribute aura can be stacked several times
- });
-
- // Nether Portal - Perseverence
- ApplySpellFix({ 30421 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].BasePoints += 30000;
- });
-
- // Natural shapeshifter
- ApplySpellFix({ 16834, 16835 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
- });
-
- // Ebon Plague
- ApplySpellFix({ 51735, 51734, 51726 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyFlags[2] = 0x10;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Parasitic Shadowfiend Passive
- ApplySpellFix({ 41013 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY; // proc debuff, and summon infinite fiends
- });
-
- ApplySpellFix({
- 27892, // To Anchor 1
- 27928, // To Anchor 1
- 27935, // To Anchor 1
- 27915, // Anchor to Skulls
- 27931, // Anchor to Skulls
- 27937 // Anchor to Skulls
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
- });
-
- // Wrath of the Plaguebringer
- ApplySpellFix({ 29214, 54836 }, [](SpellInfo* spellInfo)
- {
- // target allys instead of enemies, target A is src_caster, spells with effect like that have ally target
- // this is the only known exception, probably just wrong data
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- });
-
- // Wind Shear
- ApplySpellFix({ 57994 }, [](SpellInfo* spellInfo)
- {
- // improper data for EFFECT_1 in 3.3.5 DBC, but is correct in 4.x
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_MODIFY_THREAT_PERCENT;
- spellInfo->Effects[EFFECT_1].BasePoints = -6; // -5%
- });
-
- // Improved Devouring Plague
- ApplySpellFix({ 63675 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BonusMultiplier = 0;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- ApplySpellFix({
- 8145, // Tremor Totem (instant pulse)
- 6474 // Earthbind Totem (instant pulse)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx5 |= SPELL_ATTR5_EXTRA_INITIAL_PERIOD;
- });
-
- // Marked for Death
- ApplySpellFix({ 53241, 53243, 53244, 53245, 53246 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(423937, 276955137, 2049);
- });
-
- ApplySpellFix({
- 70728, // Exploit Weakness
- 70840 // Devious Minds
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_PET);
- });
-
- // Culling The Herd
- ApplySpellFix({ 70893 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_MASTER);
- });
-
- // Sigil of the Frozen Conscience
- ApplySpellFix({ 54800 }, [](SpellInfo* spellInfo)
- {
- // change class mask to custom extended flags of Icy Touch
- // this is done because another spell also uses the same SpellFamilyFlags as Icy Touch
- // SpellFamilyFlags[0] & 0x00000040 in SPELLFAMILY_DEATHKNIGHT is currently unused (3.3.5a)
- // this needs research on modifier applying rules, does not seem to be in Attributes fields
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00000040, 0x00000000, 0x00000000);
- });
-
- // Idol of the Flourishing Life
- ApplySpellFix({ 64949 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00000000, 0x02000000, 0x00000000);
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
- });
-
- ApplySpellFix({
- 34231, // Libram of the Lightbringer
- 60792, // Libram of Tolerance
- 64956 // Libram of the Resolute
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x80000000, 0x00000000, 0x00000000);
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
- });
-
- ApplySpellFix({
- 28851, // Libram of Light
- 28853, // Libram of Divinity
- 32403 // Blessed Book of Nagrand
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x40000000, 0x00000000, 0x00000000);
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
- });
-
- // Ride Carpet
- ApplySpellFix({ 45602 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 0; // force seat 0, vehicle doesn't have the required seat flags for "no seat specified (-1)"
- });
-
- ApplySpellFix({
- 64745, // Item - Death Knight T8 Tank 4P Bonus
- 64936 // Item - Warrior T8 Protection 4P Bonus
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 100; // 100% chance of procc'ing, not -10% (chance calculated in PrepareTriggersExecutedOnHit)
- });
-
- // Easter Lay Noblegarden Egg Aura
- ApplySpellFix({ 61719 }, [](SpellInfo* spellInfo)
- {
- // Interrupt flags copied from aura which this aura is linked with
- spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE;
- });
-
- // Bleh, need to change FamilyFlags :/ (have the same as original aura - bad!)
- ApplySpellFix({ 63510 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyFlags[EFFECT_0] = 0;
- spellInfo->SpellFamilyFlags[EFFECT_2] = 0x4000000;
- });
-
- ApplySpellFix({ 63514 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyFlags[EFFECT_0] = 0;
- spellInfo->SpellFamilyFlags[EFFECT_2] = 0x2000000;
- });
-
- ApplySpellFix({ 63531 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyFlags[EFFECT_0] = 0;
- spellInfo->SpellFamilyFlags[EFFECT_2] = 0x8000000;
- });
-
- // And affecting spells
- ApplySpellFix({
- 20138, // Improved Devotion Aura
- 20139,
- 20140
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].SpellClassMask[0] = 0;
- spellInfo->Effects[EFFECT_1].SpellClassMask[2] = 0x2000000;
- });
-
- ApplySpellFix({
- 20254, // Improved concentration aura
- 20255,
- 20256
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].SpellClassMask[0] = 0;
- spellInfo->Effects[EFFECT_1].SpellClassMask[2] = 0x4000000;
- spellInfo->Effects[EFFECT_2].SpellClassMask[0] = 0;
- spellInfo->Effects[EFFECT_2].SpellClassMask[2] = 0x4000000;
- });
-
- ApplySpellFix({
- 53379, // Swift Retribution
- 53484,
- 53648
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask[0] = 0;
- spellInfo->Effects[EFFECT_0].SpellClassMask[2] = 0x8000000;
- });
-
- // Sanctified Retribution
- ApplySpellFix({ 31869 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask[0] = 0;
- spellInfo->Effects[EFFECT_0].SpellClassMask[2] = 0x8000000;
- });
-
- // Seal of Light trigger
- ApplySpellFix({ 20167 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellLevel = 0;
- spellInfo->BaseLevel = 0;
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- });
-
- // Light's Beacon, Beacon of Light
- ApplySpellFix({ 53651 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Hand of Reckoning
- ApplySpellFix({ 62124 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_REDIRECTION;
- });
-
- // Redemption
- ApplySpellFix({ 7328, 10322, 10324, 20772, 20773, 48949, 48950 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyName = SPELLFAMILY_PALADIN;
- });
-
- ApplySpellFix({
- 20184, // Judgement of Justice
- 20185, // Judgement of Light
- 20186, // Judgement of Wisdom
- 68055 // Judgements of the Just
- }, [](SpellInfo* spellInfo)
- {
- // hack for seal of light and few spells, judgement consists of few single casts and each of them can proc
- // some spell, base one has disabled proc flag but those dont have this flag
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
- });
-
- // Blessing of sanctuary stats
- ApplySpellFix({ 67480 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValue = -1;
- spellInfo->SpellFamilyName = SPELLFAMILY_UNK1; // allows stacking
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY; // just a marker
- });
-
- // Seal of Command trigger
- ApplySpellFix({ 20424 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_CASTER_PROCS;
- });
-
- ApplySpellFix({
- 54968, // Glyph of Holy Light, Damage Class should be magic
- 53652, // Beacon of Light heal, Damage Class should be magic
- 53654
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- });
-
- // Wild Hunt
- ApplySpellFix({ 62758, 62762 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY;
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY;
- });
-
- // Intervene
- ApplySpellFix({ 3411 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Roar of Sacrifice
- ApplySpellFix({ 53480 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_SPLIT_DAMAGE_PCT;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY);
- spellInfo->Effects[EFFECT_1].DieSides = 1;
- spellInfo->Effects[EFFECT_1].BasePoints = 19;
- spellInfo->Effects[EFFECT_1].BasePoints = 127; // all schools
- });
-
- // Silencing Shot
- ApplySpellFix({ 34490, 41084, 42671 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 0.0f;
- });
-
- // Monstrous Bite
- ApplySpellFix({ 54680, 55495, 55496, 55497, 55498, 55499 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Hunter's Mark
- ApplySpellFix({ 1130, 14323, 14324, 14325, 53338 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Cobra Strikes
- ApplySpellFix({ 53257 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 2;
- spellInfo->StackAmount = 0;
- });
-
- // Kill Command
- ApplySpellFix({ 34027 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 0;
- });
-
- // Kindred Spirits, damage aura
- ApplySpellFix({ 57458 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx4 |= SPELL_ATTR4_ALLOW_ENETRING_ARENA;
- });
-
- // Chimera Shot - Serpent trigger
- ApplySpellFix({ 53353 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- // Entrapment trigger
- ApplySpellFix({ 19185, 64803, 64804 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENEMY);
- spellInfo->AttributesEx5 |= SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT;
- });
-
- // Improved Stings (Rank 2)
- ApplySpellFix({ 19465 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Heart of the Phoenix (triggered)
- ApplySpellFix({ 54114 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx &= ~SPELL_ATTR1_DISMISS_PET_FIRST;
- spellInfo->RecoveryTime = 8 * 60 * IN_MILLISECONDS; // prev 600000
- });
-
- // Master of Subtlety
- ApplySpellFix({ 31221, 31222, 31223 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyName = SPELLFAMILY_ROGUE;
- });
-
- ApplySpellFix({
- 31666, // Master of Subtlety triggers
- 58428 // Overkill
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_SCRIPT_EFFECT;
- });
-
- // Honor Among Thieves
- ApplySpellFix({ 51698, 51700, 51701 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 51699;
- });
-
- ApplySpellFix({
- 5171, // Slice and Dice
- 6774, // Slice and Dice
- 1725 // Distract
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Envenom
- ApplySpellFix({ 32645, 32684, 57992, 57993 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Dispel = DISPEL_NONE;
- });
-
- ApplySpellFix({
- 64014, // Expedition Base Camp Teleport
- 64032, // Formation Grounds Teleport
- 64028, // Colossal Forge Teleport
- 64031, // Scrapyard Teleport
- 64030, // Antechamber Teleport
- 64029, // Shattered Walkway Teleport
- 64024, // Conservatory Teleport
- 64025, // Halls of Invention Teleport
- 65042 // Prison of Yogg-Saron Teleport
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DB);
- });
-
- // Killing Spree (teleport)
- ApplySpellFix({ 57840 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards
- });
-
- // Killing Spree
- ApplySpellFix({ 51690 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_ALLOW_WHILE_STEALTHED;
- });
-
- // Blood Tap visual cd reset
- ApplySpellFix({ 47804 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = 0;
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->RuneCostID = 442;
- });
-
- // Chains of Ice
- ApplySpellFix({ 45524 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Impurity
- ApplySpellFix({ 49220, 49633, 49635, 49636, 49638 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->SpellFamilyName = SPELLFAMILY_DEATHKNIGHT;
- });
-
- // Deadly Aggression (Deadly Gladiator's Death Knight Relic, item: 42620)
- ApplySpellFix({ 60549 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Magic Suppression
- ApplySpellFix({ 49224, 49610, 49611 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 0;
- });
-
- // Wandering Plague
- ApplySpellFix({ 50526 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Dancing Rune Weapon
- ApplySpellFix({ 49028 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = 0;
- spellInfo->ProcFlags |= PROC_FLAG_DONE_MELEE_AUTO_ATTACK;
- });
-
- // Death and Decay
- ApplySpellFix({ 52212 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
- });
-
- // T9 blood plague crit bonus
- ApplySpellFix({ 67118 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Pestilence
- ApplySpellFix({ 50842 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TargetA = TARGET_DEST_TARGET_ENEMY;
- });
-
- // Horn of Winter, stacking issues
- ApplySpellFix({ 57330, 57623 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetA = 0;
- });
-
- // Scourge Strike trigger
- ApplySpellFix({ 70890 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
- });
-
- // Blood-caked Blade - Blood-caked Strike trigger
- ApplySpellFix({ 50463 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
- });
-
- // Blood Gorged
- ApplySpellFix({ 61274, 61275, 61276, 61277,61278 }, [](SpellInfo* spellInfo)
- {
- // ARP affect Death Strike and Rune Strike
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x1400011, 0x20000000, 0x0);
- });
-
- // Death Grip
- ApplySpellFix({ 49576, 49560 }, [](SpellInfo* spellInfo)
- {
- // remove main grip mechanic, leave only effect one
- // should fix taunt on bosses and not break the pull protection at the same time (no aura provides immunity to grip mechanic)
- spellInfo->Mechanic = 0;
- });
-
- // Death Grip Jump Dest
- ApplySpellFix({ 57604 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Death Pact
- ApplySpellFix({ 48743 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx &= ~SPELL_ATTR1_EXCLUDE_CASTER;
- });
-
- // Raise Ally (trigger)
- ApplySpellFix({ 46619 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes &= ~SPELL_ATTR0_NO_AURA_CANCEL;
- });
-
- // Frost Strike
- ApplySpellFix({ 49143, 51416, 51417, 51418, 51419, 55268 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_COMPLETELY_BLOCKED;
- });
-
- // Death Knight T10 Tank 2p Bonus
- ApplySpellFix({ 70650 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER;
- });
-
- ApplySpellFix({ 45297, 45284 }, [](SpellInfo* spellInfo)
- {
- spellInfo->CategoryRecoveryTime = 0;
- spellInfo->RecoveryTime = 0;
- spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS;
- });
-
- // Improved Earth Shield
- ApplySpellFix({ 51560, 51561 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].MiscValue = SPELLMOD_DAMAGE;
- });
-
- // Tidal Force
- ApplySpellFix({ 55166, 55198 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(18);
- spellInfo->ProcCharges = 0;
- });
-
- // Healing Stream Totem
- ApplySpellFix({ 52042 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellLevel = 0;
- spellInfo->BaseLevel = 0;
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- });
-
- // Earth Shield
- ApplySpellFix({ 379 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellLevel = 0;
- spellInfo->BaseLevel = 0;
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- // Stormstrike
- ApplySpellFix({ 17364 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Strength of Earth totem effect
- ApplySpellFix({ 8076, 8162, 8163, 10441, 25362, 25527, 57621, 58646 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
- spellInfo->Effects[EFFECT_2].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
- });
-
- // Flametongue Totem effect
- ApplySpellFix({ 52109, 52110, 52111, 52112, 52113, 58651, 58654, 58655 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TargetB = spellInfo->Effects[EFFECT_1].TargetB = spellInfo->Effects[EFFECT_0].TargetB = 0;
- spellInfo->Effects[EFFECT_2].TargetA = spellInfo->Effects[EFFECT_1].TargetA = spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Sentry Totem
- ApplySpellFix({ 6495 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(0);
- });
-
- // Bind Sight (PT)
- ApplySpellFix({ 6277 }, [](SpellInfo* spellInfo)
- {
- // because it is passive, needs this to be properly removed at death in RemoveAllAurasOnDeath()
- spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELED;
- spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
- spellInfo->AttributesEx7 |= SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD;
- });
-
- // Ancestral Awakening Heal
- ApplySpellFix({ 52752 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- // Heroism
- ApplySpellFix({ 32182 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 57723; // Exhaustion
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Bloodlust
- ApplySpellFix({ 2825 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 57724; // Sated
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Improved Succubus
- ApplySpellFix({ 18754, 18755, 18756 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Unstable Affliction
- ApplySpellFix({ 31117 }, [](SpellInfo* spellInfo)
- {
- spellInfo->PreventionType = SPELL_PREVENTION_TYPE_NONE;
- });
-
- // Shadowflame - trigger
- ApplySpellFix({
- 47960, // r1
- 61291 // r2
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_REDIRECTION;
- });
-
- // Curse of Doom
- ApplySpellFix({ 18662 }, [](SpellInfo* spellInfo)
- {
- // summoned doomguard duration fix
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(6);
- });
-
- // Glyph of Voidwalker
- ApplySpellFix({ 56247 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER;
- spellInfo->Effects[EFFECT_0].MiscValue = SPELLMOD_EFFECT1;
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x8000000, 0, 0);
- });
-
- // Everlasting Affliction
- ApplySpellFix({ 47201, 47202, 47203, 47204, 47205 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 2; // add corruption to affected spells
- });
-
- // Death's Embrace
- ApplySpellFix({ 47198, 47199, 47200 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 0x4000; // include Drain Soul
- });
-
- // Improved Demonic Tactics
- ApplySpellFix({ 54347, 54348, 54349 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = spellInfo->Effects[EFFECT_0].Effect;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = spellInfo->Effects[EFFECT_0].ApplyAuraName;
- spellInfo->Effects[EFFECT_1].TargetA = spellInfo->Effects[EFFECT_0].TargetA;
- spellInfo->Effects[EFFECT_0].MiscValue = SPELLMOD_EFFECT1;
- spellInfo->Effects[EFFECT_1].MiscValue = SPELLMOD_EFFECT2;
- });
-
- // Rain of Fire (Doomguard)
- ApplySpellFix({ 42227 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 0.0f;
- });
-
- // Ritual Enslavement
- ApplySpellFix({ 22987 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_CHARM;
- });
-
- // Combustion, make this passive
- ApplySpellFix({ 11129 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Dispel = DISPEL_NONE;
- });
-
- // Magic Absorption
- ApplySpellFix({ 29441, 29444 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellLevel = 0;
- });
-
- // Living Bomb
- ApplySpellFix({ 44461, 55361, 55362 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- spellInfo->AttributesEx4 |= SPELL_ATTR4_REACTIVE_DAMAGE_PROC;
- });
-
- // Evocation
- ApplySpellFix({ 12051 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
- });
-
- // MI Fireblast, WE Frostbolt, MI Frostbolt
- ApplySpellFix({ 59637, 31707, 72898 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- });
-
- // Blazing Speed
- ApplySpellFix({ 31641, 31642 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 31643;
- });
-
- // Summon Water Elemental (permanent)
- ApplySpellFix({ 70908 }, [](SpellInfo* spellInfo)
- {
- // treat it as pet
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_SUMMON_PET;
- });
-
- // // Burnout, trigger
- ApplySpellFix({ 44450 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_POWER_BURN;
- });
-
- // Mirror Image - Summon Spells
- ApplySpellFix({ 58831, 58833, 58834, 65047 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(0);
- });
-
- // Initialize Images (Mirror Image)
- ApplySpellFix({ 58836 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Arcane Blast, can't be dispelled
- ApplySpellFix({ 36032 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
- });
-
- // Chilled (frost armor, ice armor proc)
- ApplySpellFix({ 6136, 7321 }, [](SpellInfo* spellInfo)
- {
- spellInfo->PreventionType = SPELL_PREVENTION_TYPE_NONE;
- });
-
- // Mirror Image Frostbolt
- ApplySpellFix({ 59638 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->SpellFamilyName = SPELLFAMILY_MAGE;
- spellInfo->SpellFamilyFlags = flag96(0x20, 0x0, 0x0);
- });
-
- // Fingers of Frost
- ApplySpellFix({ 44544 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Dispel = DISPEL_NONE;
- spellInfo->AttributesEx4 |= SPELL_ATTR4_CANNOT_BE_STOLEN;
- spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(685904631, 1151040, 32);
- });
-
- // Fingers of Frost visual buff
- ApplySpellFix({ 74396 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcCharges = 2;
- spellInfo->StackAmount = 0;
- });
-
- // Glyph of blocking
- ApplySpellFix({ 58375 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 58374;
- });
-
- // Sweeping Strikes stance change
- ApplySpellFix({ 12328 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_NOT_SHAPESHIFTED;
- });
-
- // Damage Shield
- ApplySpellFix({ 59653 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->SpellLevel = 0;
- });
-
- ApplySpellFix({
- 20230, // Retaliation
- 871, // Shield Wall
- 1719 // Recklessness
- }, [](SpellInfo* spellInfo)
- {
- // Strange shared cooldown
- spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
- });
-
- // Vigilance
- ApplySpellFix({ 50720 }, [](SpellInfo* spellInfo)
- {
- // fixes bug with empowered renew, single target aura
- spellInfo->SpellFamilyName = SPELLFAMILY_WARRIOR;
- });
-
- // Sunder Armor - Old Ranks
- ApplySpellFix({ 7405, 8380, 11596, 11597, 25225, 47467 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 11971;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE;
- });
-
- // Improved Spell Reflection
- ApplySpellFix({ 59725 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER_AREA_PARTY);
- });
-
- // Shadow Weaving
- ApplySpellFix({ 15257, 15331, 15332 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL;
- });
-
- // Hymn of Hope
- ApplySpellFix({ 64904 }, [](SpellInfo* spellInfo)
- {
- // rewrite part of aura system or swap effects...
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT;
- spellInfo->Effects[EFFECT_2].Effect = spellInfo->Effects[EFFECT_0].Effect;
- spellInfo->Effects[EFFECT_0].Effect = 0;
- spellInfo->Effects[EFFECT_2].DieSides = spellInfo->Effects[EFFECT_0].DieSides;
- spellInfo->Effects[EFFECT_2].TargetA = spellInfo->Effects[EFFECT_0].TargetB;
- spellInfo->Effects[EFFECT_2].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
- spellInfo->Effects[EFFECT_2].BasePoints = spellInfo->Effects[EFFECT_0].BasePoints;
- });
-
- // Divine Hymn
- ApplySpellFix({ 64844 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->SpellLevel = 0;
- });
-
- ApplySpellFix({
- 14898, // Spiritual Healing affects prayer of mending
- 15349,
- 15354,
- 15355,
- 15356,
- 47562, // Divine Providence affects prayer of mending
- 47564,
- 47565,
- 47566,
- 47567,
- 47586, // Twin Disciplines affects prayer of mending
- 47587,
- 47588,
- 52802,
- 52803
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask[1] |= 0x20; // prayer of mending
- });
-
- // Power Infusion
- ApplySpellFix({ 10060 }, [](SpellInfo* spellInfo)
- {
- // hack to fix stacking with arcane power
- spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER;
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY);
- });
-
- // Lifebloom final bloom
- ApplySpellFix({ 33778 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->SpellLevel = 0;
- spellInfo->SpellFamilyFlags = flag96(0, 0x10, 0);
- });
-
- // Owlkin Frenzy
- ApplySpellFix({ 48391 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_NOT_SHAPESHIFTED;
- });
-
- // Item T10 Restoration 4P Bonus
- ApplySpellFix({ 70691 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- ApplySpellFix({
- 770, // Faerie Fire
- 16857 // Faerie Fire (Feral)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx &= ~SPELL_ATTR1_IMMUNITY_TO_HOSTILE_AND_FRIENDLY_EFFECTS;
- });
-
- ApplySpellFix({ 49376 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Feral Charge - Cat
- ApplySpellFix({ 61138, 61132, 50259 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Glyph of Barkskin
- ApplySpellFix({ 63058 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE;
- });
-
- // Resurrection Sickness
- ApplySpellFix({ 15007 }, [](SpellInfo* spellInfo)
- {
- spellInfo->SpellFamilyName = SPELLFAMILY_GENERIC;
- });
-
- // Luck of the Draw
- ApplySpellFix({ 72221 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
- });
-
- // Bind
- ApplySpellFix({ 3286 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets = 0; // neutral innkeepers not friendly?
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- });
-
- // Playback Speech
- ApplySpellFix({ 74209 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(1);
- });
-
- ApplySpellFix({
- 2641, // Dismiss Pet
- 23356 // Taming Lesson
- }, [](SpellInfo* spellInfo)
- {
- // remove creaturetargettype
- spellInfo->TargetCreatureType = 0;
- });
-
- // Aspect of the Viper
- ApplySpellFix({ 34074 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(1);
- spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_DUMMY;
- });
-
- // Strength of Wrynn
- ApplySpellFix({ 60509 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].BasePoints = 1500;
- spellInfo->Effects[EFFECT_1].BasePoints = 150;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_PERIODIC_HEAL;
- });
-
- // Winterfin First Responder
- ApplySpellFix({ 48739 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 1;
- spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 0;
- spellInfo->Effects[EFFECT_0].DieSides = 0;
- spellInfo->Effects[EFFECT_0].DamageMultiplier = 0;
- spellInfo->Effects[EFFECT_0].BonusMultiplier = 0;
- });
-
- // Army of the Dead (trigger npc aura)
- ApplySpellFix({ 49099 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Amplitude = 15000;
- });
-
- // Isle of Conquest
- ApplySpellFix({ 66551 }, [](SpellInfo* spellInfo)
- {
- // Teleport in, missing range
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
- });
-
- // A'dal's Song of Battle
- ApplySpellFix({ 39953 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(367); // 2 Hours
- });
-
- ApplySpellFix({
- 57607, // WintergraspCatapult - Spell Plague Barrel - EffectRadiusIndex
- 57619, // WintergraspDemolisher - Spell Hourl Boulder - EffectRadiusIndex
- 57610 // Cannon (Siege Turret)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); // SPELL_EFFECT_WMO_DAMAGE
- });
-
- // WintergraspCannon - Spell Fire Cannon - EffectRadiusIndex
- ApplySpellFix({ 51422 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // SPELL_EFFECT_SCHOOL_DAMAGE
- });
-
- // WintergraspDemolisher - Spell Ram - EffectRadiusIndex
- ApplySpellFix({ 54107 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // SPELL_EFFECT_KNOCK_BACK
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // SPELL_EFFECT_SCHOOL_DAMAGE
- spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // SPELL_EFFECT_WEAPON_DAMAGE
- });
-
- // WintergraspSiegeEngine - Spell Ram - EffectRadiusIndex
- ApplySpellFix({ 51678 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // SPELL_EFFECT_KNOCK_BACK
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // SPELL_EFFECT_SCHOOL_DAMAGE
- spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // SPELL_EFFECT_WEAPON_DAMAGE
- });
-
- // WintergraspCatapult - Spell Plague Barrell - Range
- ApplySpellFix({ 57606 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(164); // "Catapult Range"
- });
-
- // Boulder (Demolisher)
- ApplySpellFix({ 50999 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
- });
-
- // Flame Breath (Catapult)
- ApplySpellFix({ 50990 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_18_YARDS); // 18yd
- });
-
- // Jormungar Bite
- ApplySpellFix({ 56103 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Throw Proximity Bomb
- ApplySpellFix({ 34095 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- ApplySpellFix({
- 53348, // DEATH KNIGHT SCARLET FIRE ARROW
- 53117 // BALISTA
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 5000;
- spellInfo->CategoryRecoveryTime = 5000;
- });
-
- // Teleport To Molten Core
- ApplySpellFix({ 25139 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
- });
-
- // Landen Stilwell Transform
- ApplySpellFix({ 31310 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
- });
-
- // Shadowstalker Stealth
- ApplySpellFix({ 5916 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 5.0f;
- });
-
- // Sneak
- ApplySpellFix({ 22766 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 5.0f;
- });
-
- // Murmur's Touch
- ApplySpellFix({ 38794, 33711 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 33760;
- });
-
- // Negaton Field
- ApplySpellFix({
- 36729, // Normal
- 38834 // Heroic
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Curse of the Doomsayer NORMAL
- ApplySpellFix({ 36173 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 36174; // Currently triggers heroic version...
- });
-
- // Crystal Channel
- ApplySpellFix({ 34156 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(35); // 35yd;
- spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_MOVE;
- });
-
- // Debris
- ApplySpellFix({ 36449 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
- });
-
- // Soul Channel
- ApplySpellFix({ 30531 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Debris Visual
- ApplySpellFix({ 30632 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_ALLY);
- });
-
- // Activate Sunblade Protecto
- ApplySpellFix({ 46475, 46476 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(14); // 60yd
- });
-
- // Break Ice
- ApplySpellFix({ 46638 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 &= ~SPELL_ATTR3_ONLY_ON_PLAYER; // Obvious fail, it targets gameobject...
- });
-
- // Sinister Reflection Clone
- ApplySpellFix({ 45785 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 0.0f;
- });
-
- // Armageddon
- ApplySpellFix({ 45909 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 8.0f;
- });
-
- // Spell Absorption
- ApplySpellFix({ 41034 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_SCHOOL_ABSORB;
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_2].MiscValue = SPELL_SCHOOL_MASK_MAGIC;
- });
-
- // Shared Bonds
- ApplySpellFix({ 41363 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELED;
- });
-
- ApplySpellFix({
- 41485, // Deadly Poison
- 41487 // Envenom
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
- });
-
- // Parasitic Shadowfiend
- ApplySpellFix({ 41914 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Teleport Maiev
- ApplySpellFix({ 41221 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 0-50000yd
- });
-
- // Watery Grave Explosion
- ApplySpellFix({ 37852 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_WHILE_STUNNED;
- });
-
- // Amplify Damage
- ApplySpellFix({ 39095 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Energy Feedback
- ApplySpellFix({ 44335 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
- });
-
- ApplySpellFix({
- 31984, // Finger of Death
- 35354 // Hand of Death
- }, [](SpellInfo* spellInfo)
- {
- // Spell doesn't need to ignore invulnerabilities
- spellInfo->Attributes = SPELL_ATTR0_IS_ABILITY;
- });
-
- // Finger of Death
- ApplySpellFix({ 32111 }, [](SpellInfo* spellInfo)
- {
- spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(0); // We only need the animation, no damage
- });
-
- // Flame Breath, catapult spell
- ApplySpellFix({ 50989 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes &= ~SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL;
- });
-
- // Koralon, Flaming Cinder
- ApplySpellFix({ 66690 }, [](SpellInfo* spellInfo)
- {
- // missing radius index
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Acid Volley
- ApplySpellFix({ 54714, 29325 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Summon Plagued Warrior
- ApplySpellFix({ 29237 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
- spellInfo->Effects[EFFECT_1].Effect = spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Icebolt
- ApplySpellFix({ 28526 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- });
-
- // Infected Wound
- ApplySpellFix({ 29306 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Hopeless
- ApplySpellFix({ 29125 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- });
-
- // Jagged Knife
- ApplySpellFix({ 55550 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_USES_RANGED_SLOT;
- });
-
- // Moorabi - Transformation
- ApplySpellFix({ 55098 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
- });
-
- ApplySpellFix({
- 55521, // Poisoned Spear (Normal)
- 58967, // Poisoned Spear (Heroic)
- 55348, // Throw (Normal)
- 58966 // Throw (Heroic)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_USES_RANGED_SLOT;
- });
-
- // Charged Chaotic rift aura, trigger
- ApplySpellFix({ 47737 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(37); // 50yd
- });
-
- // Vanish
- ApplySpellFix({ 55964 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Trollgore - Summon Drakkari Invader
- ApplySpellFix({ 49456, 49457, 49458 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB);
- });
-
- ApplySpellFix({
- 48278, // Paralyse
- 47669 // Awaken subboss
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Flame Breath
- ApplySpellFix({ 47592 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Amplitude = 200;
- });
-
- // Skarvald, Charge
- ApplySpellFix({ 43651 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 0-50000yd
- });
-
- // Ingvar the Plunderer, Woe Strike
- ApplySpellFix({ 42730 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TriggerSpell = 42739;
- });
-
- ApplySpellFix({ 59735 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TriggerSpell = 59736;
- });
-
- // Ingvar the Plunderer, Ingvar transform
- ApplySpellFix({ 42796 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
- });
-
- ApplySpellFix({
- 42772, // Hurl Dagger (Normal)
- 59685 // Hurl Dagger (Heroic)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_USES_RANGED_SLOT;
- });
-
- // Control Crystal Activation
- ApplySpellFix({ 57804 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Destroy Door Seal
- ApplySpellFix({ 58040 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ChannelInterruptFlags &= ~(AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE);
- });
-
- // Ichoron, Water Blast
- ApplySpellFix({ 54237, 59520 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Krik'thir - Mind Flay
- ApplySpellFix({ 52586, 59367 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_MOVE;
- });
-
- // Glare of the Tribunal
- ApplySpellFix({ 50988, 59870 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Static Charge
- ApplySpellFix({ 50835, 59847 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- });
-
- // Lava Strike damage
- ApplySpellFix({ 57697 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Lava Strike trigger
- ApplySpellFix({ 57578 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Gift of Twilight Shadow/Fire
- ApplySpellFix({ 57835, 58766 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELED;
- });
-
- // Pyrobuffet
- ApplySpellFix({ 57557 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 56911;
- });
-
- // Arcane Barrage
- ApplySpellFix({ 56397 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
- });
-
- ApplySpellFix({
- 55849, // Power Spark (ground +50% dmg aura)
- 56438, // Arcane Overload (-50% dmg taken) - this is to prevent apply -> unapply -> apply ... dunno whether it's correct
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Vortex (Control Vehicle)
- ApplySpellFix({ 56263 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Haste (Nexus Lord, increase run Speed of the disk)
- ApplySpellFix({ 57060 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_VEHICLE);
- });
-
- // Arcane Overload
- ApplySpellFix({ 56430 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 56429;
- });
-
- // Summon Arcane Bomb
- ApplySpellFix({ 56429 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
- });
-
- // Destroy Platform Event
- ApplySpellFix({ 59099 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(22);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(15);
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(22);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(15);
- });
-
- // Surge of Power (Phase 3)
- ApplySpellFix({
- 57407, // N
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- spellInfo->InterruptFlags = 0;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
- spellInfo->AttributesEx4 |= SPELL_ATTR4_ALLOW_CAST_WHILE_CASTING;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Surge of Power (Phase 3)
- ApplySpellFix({
- 60936 // H
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 3;
- spellInfo->InterruptFlags = 0;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Wyrmrest Drake - Life Burst
- ApplySpellFix({ 57143 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- spellInfo->Effects[EFFECT_1].PointsPerComboPoint = 2500;
- spellInfo->Effects[EFFECT_1].BasePoints = 2499;
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(1);
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- //Alexstrasza - Gift
- ApplySpellFix({ 61028 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Vortex (freeze anim)
- ApplySpellFix({ 55883 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
- });
-
- // Hurl Pyrite
- ApplySpellFix({ 62490 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Ulduar, Mimiron, Magnetic Core (summon)
- ApplySpellFix({ 64444 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
- });
-
- // Ulduar, Mimiron, bomb bot explosion
- ApplySpellFix({ 63801 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].MiscValue = 17286;
- });
-
- // Ulduar, Mimiron, Summon Flames Initial
- ApplySpellFix({ 64563 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Ulduar, Mimiron, Flames (damage)
- ApplySpellFix({ 64566 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
- });
-
- // Ulduar, Hodir, Starlight
- ApplySpellFix({ 62807 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_1_YARD); // 1yd
- });
-
- // Hodir Shatter Cache
- ApplySpellFix({ 62502 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- });
-
- // Ulduar, General Vezax, Mark of the Faceless
- ApplySpellFix({ 63278 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- });
-
- // Boom (XT-002)
- ApplySpellFix({ 62834 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Supercharge
- ApplySpellFix({ 61920 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Lightning Whirl
- ApplySpellFix({ 61916 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 3;
- });
-
- ApplySpellFix({ 63482 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 8;
- });
-
- // Stone Grip, remove absorb aura
- ApplySpellFix({ 62056, 63985 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Sentinel Blast
- ApplySpellFix({ 64389, 64678 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Dispel = DISPEL_MAGIC;
- });
-
- // Potent Pheromones
- ApplySpellFix({ 62619 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_IMMUNITY_PURGES_EFFECT;
- });
-
- // Healthy spore summon periodic
- ApplySpellFix({ 62566 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Amplitude = 2000;
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PERIODIC_TRIGGER_SPELL;
- });
-
- // Brightleaf Essence trigger
- ApplySpellFix({ 62968 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0; // duplicate
- });
-
- // Potent Pheromones
- ApplySpellFix({ 64321 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
- spellInfo->AttributesEx |= SPELL_ATTR1_IMMUNITY_PURGES_EFFECT;
- });
-
- // Lightning Orb Charged
- ApplySpellFix({ 62186 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Amplitude = 5000; // Duration 5 secs, amplitude 8 secs...
- });
-
- // Lightning Pillar
- ApplySpellFix({ 62976 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6);
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds, wrong DBC data?
- });
-
- // Sif's Blizzard
- ApplySpellFix({ 62576, 62602 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_8_YARDS); // 8yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_8_YARDS); // 8yd
- });
-
- // Protective Gaze
- ApplySpellFix({ 64175 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 25000;
- });
-
- // Shadow Beacon
- ApplySpellFix({ 64465 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 64467; // why do they need two script effects :/ (this one has visual effect)
- });
-
- // Sanity
- ApplySpellFix({ 63050 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
- });
-
- // Shadow Nova
- ApplySpellFix({ 62714, 65209 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Cosmic Smash (Algalon the Observer)
- ApplySpellFix({ 62293 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_CASTER);
- });
-
- // Cosmic Smash (Algalon the Observer)
- ApplySpellFix({ 62311, 64596 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
- });
-
- // Constellation Phase Effect
- ApplySpellFix({ 65509 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Black Hole
- ApplySpellFix({ 62168, 65250, 62169 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
- });
-
- // Ground Slam
- ApplySpellFix({ 62625 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
- });
-
- // Onyxia's Lair, Onyxia, Flame Breath (TriggerSpell = 0 and spamming errors in console)
- ApplySpellFix({ 18435 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Onyxia's Lair, Onyxia, Create Onyxia Spawner
- ApplySpellFix({ 17647 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(37);
- });
-
- ApplySpellFix({
- 17646, // Onyxia's Lair, Onyxia, Summon Onyxia Whelp
- 68968 // Onyxia's Lair, Onyxia, Summon Lair Guard
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(5);
- });
-
- // Onyxia's Lair, Onyxia, Eruption
- ApplySpellFix({ 17731, 69294 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY;
- spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(3);
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_18_YARDS); // 18yd instead of 13yd to make sure all cracks erupt
- });
-
- // Onyxia's Lair, Onyxia, Breath
- ApplySpellFix({
- 18576, 18578, 18579, 18580, 18581, 18582, 18583, 18609, 18611, 18612, 18613, 18614, 18615, 18616, 18584,
- 18585, 18586, 18587, 18588, 18589, 18590, 18591, 18592, 18593, 18594, 18595, 18564, 18565, 18566, 18567,
- 18568, 18569, 18570, 18571, 18572, 18573, 18574, 18575, 18596, 18597, 18598, 18599, 18600, 18601, 18602,
- 18603, 18604, 18605, 18606, 18607, 18617, 18619, 18620, 18621, 18622, 18623, 18624, 18625, 18626, 18627,
- 18628, 18618, 18351, 18352, 18353, 18354, 18355, 18356, 18357, 18358, 18359, 18360, 18361, 17086, 17087,
- 17088, 17089, 17090, 17091, 17092, 17093, 17094, 17095, 17097, 22267, 22268, 21132, 21133, 21135, 21136,
- 21137, 21138, 21139
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(328); // 250ms
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(1);
- if (spellInfo->Effects[EFFECT_1].Effect)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_PERIODIC_TRIGGER_SPELL;
- spellInfo->Effects[EFFECT_1].Amplitude = ((spellInfo->CastTimeEntry == sSpellCastTimesStore.LookupEntry(170)) ? 50 : 215);
- }
- });
-
- ApplySpellFix({
- 48760, // Oculus, Teleport to Coldarra DND
- 49305 // Oculus, Teleport to Boss 1 DND
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(17);
- });
-
- // Oculus, Drake spell Stop Time
- ApplySpellFix({ 49838 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- spellInfo->ExcludeTargetAuraSpell = 51162; // exclude planar shift
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_150_YARDS);
- });
-
- // Oculus, Varos Cloudstrider, Energize Cores
- ApplySpellFix({ 61407, 62136, 56251, 54069 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CONE_ENTRY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Halls of Lightning, Arc Weld
- ApplySpellFix({ 59086 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
- });
-
- // Halls of Lightning, Arcing Burn
- ApplySpellFix({ 52671, 59834 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Trial of the Champion, Death's Respite
- ApplySpellFix({ 68306 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(25);
- });
-
- // Trial of the Champion, Eadric Achievement (The Faceroller)
- ApplySpellFix({ 68197 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY);
- spellInfo->Attributes |= SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD;
- });
-
- // Trial of the Champion, Earth Shield
- ApplySpellFix({ 67530 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL; // will trigger 67537
- });
-
- // Trial of the Champion, Hammer of the Righteous
- ApplySpellFix({ 66867 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
- });
-
- // Trial of the Champion, Summon Risen Jaeren/Arelas
- ApplySpellFix({ 67705, 67715 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_ALLOW_DEAD_TARGET;
- });
-
- // Trial of the Champion, Ghoul Explode
- ApplySpellFix({ 67751 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
- });
-
- // Trial of the Champion, Desecration
- ApplySpellFix({ 67778, 67877 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 68766;
- });
-
- // Killing Spree (Off hand damage)
- ApplySpellFix({ 57842 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(2); // Melee Range
- });
-
- // Trial of the Crusader, Jaraxxus Intro spell
- ApplySpellFix({ 67888 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Trial of the Crusader, Lich King Intro spell
- ApplySpellFix({ 68193 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
- });
-
- // Trial of the Crusader, Gormok, player vehicle spell, CUSTOM! (default jump to hand, not used)
- ApplySpellFix({ 66342 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_SET_VEHICLE_ID;
- spellInfo->Effects[EFFECT_0].MiscValue = 496;
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_CHANGE_MAP;
- });
-
- // Trial of the Crusader, Gormok, Fire Bomb
- ApplySpellFix({ 66313 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ANY);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ANY);
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- ApplySpellFix({ 66317 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- ApplySpellFix({ 66318 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Speed = 14.0f;
- spellInfo->Attributes |= SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT;
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- ApplySpellFix({ 66320, 67472, 67473, 67475 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_2_YARDS);
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_2_YARDS);
- });
-
- // Trial of the Crusader, Acidmaw & Dreadscale, Emerge
- ApplySpellFix({ 66947 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_WHILE_STUNNED;
- });
-
- // Trial of the Crusader, Jaraxxus, Curse of the Nether
- ApplySpellFix({ 66211 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 66209; // exclude Touch of Jaraxxus
- });
-
- // Trial of the Crusader, Jaraxxus, Summon Volcano
- ApplySpellFix({ 66258, 67901 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(85); // summon for 18 seconds, 15 not enough
- });
-
- // Trial of the Crusader, Jaraxxus, Spinning Pain Spike
- ApplySpellFix({ 66281 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_4_YARDS);
- });
-
- ApplySpellFix({ 66287 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_TAUNT;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
- spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_MOD_STUN;
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(35); // 4 secs
- });
-
- // Trial of the Crusader, Jaraxxus, Fel Fireball
- ApplySpellFix({ 66532, 66963, 66964, 66965 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
- });
-
- // tempfix, make Nether Power not stealable
- ApplySpellFix({ 66228, 67106, 67107, 67108 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx4 |= SPELL_ATTR4_CANNOT_BE_STOLEN;
- });
-
- // Trial of the Crusader, Faction Champions, Druid - Tranquality
- ApplySpellFix({ 66086, 67974, 67975, 67976 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AREA_AURA_FRIEND;
- });
-
- // Trial of the Crusader, Faction Champions, Shaman - Earth Shield
- ApplySpellFix({ 66063 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 66064;
- });
-
- // Trial of the Crusader, Faction Champions, Priest - Mana Burn
- ApplySpellFix({ 66100 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 5;
- spellInfo->Effects[EFFECT_0].DieSides = 0;
- });
-
- ApplySpellFix({ 68026 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 8;
- spellInfo->Effects[EFFECT_0].DieSides = 0;
- });
-
- ApplySpellFix({ 68027 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 6;
- spellInfo->Effects[EFFECT_0].DieSides = 0;
- });
-
- ApplySpellFix({ 68028 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 10;
- spellInfo->Effects[EFFECT_0].DieSides = 0;
- });
-
- // Trial of the Crusader, Twin Valkyr, Touch of Light/Darkness, Light/Dark Surge
- ApplySpellFix({
- 65950 // light 0
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->EffectApplyAuraName[0] = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 65767 // light surge 0
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 65686;
- });
-
- ApplySpellFix({
- 67296 // light 1
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 67274 // light surge 1
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 67222;
- });
-
- ApplySpellFix({
- 67297 // light 2
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 67275 // light surge 2
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 67223;
- });
-
- ApplySpellFix({
- 67298 // light 3
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 67276 // light surge 3
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 67224;
- });
-
- ApplySpellFix({
- 66001 // dark 0
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 65769 // dark surge 0
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 65684;
- });
-
- ApplySpellFix({
- 67281 // dark 1
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 67265 // dark surge 1
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 67176;
- });
-
- ApplySpellFix({
- 67282 // dark 2
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 67266 // dark surge 2
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 67177;
- });
-
- ApplySpellFix({
- 67283 // dark 3
- }, [](SpellInfo* spellInfo)
- {
- //spellInfo->Effects[EFFECT_0].ApplyAuraNames = SPELL_AURA_PERIODIC_DUMMY;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- ApplySpellFix({
- 67267 // dark surge 3
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 67178;
- });
-
- // Trial of the Crusader, Twin Valkyr, Twin's Pact
- ApplySpellFix({ 65875, 67303, 67304, 67305, 65876, 67306, 67307, 67308 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Trial of the Crusader, Anub'arak, Emerge
- ApplySpellFix({ 65982 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_WHILE_STUNNED;
- });
-
- // Trial of the Crusader, Anub'arak, Penetrating Cold
- ApplySpellFix({ 66013, 67700, 68509, 68510 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- });
-
- // Trial of the Crusader, Anub'arak, Shadow Strike
- ApplySpellFix({ 66134 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
- spellInfo->Effects[EFFECT_0].Effect = 0;
- });
-
- // Trial of the Crusader, Anub'arak, Pursuing Spikes
- ApplySpellFix({ 65920, 65922, 65923 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PERIODIC_DUMMY;
- //spellInfo->EffectTriggerSpell[0] = 0;
- });
-
- // Trial of the Crusader, Anub'arak, Summon Scarab
- ApplySpellFix({ 66339 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(35);
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Trial of the Crusader, Anub'arak, Achievements: The Traitor King
- ApplySpellFix({
- 68186, // Anub'arak Scarab Achievement 10
- 68515 // Anub'arak Scarab Achievement 25
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
- spellInfo->Attributes |= SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD;
- });
-
- // Trial of the Crusader, Anub'arak, Spider Frenzy
- ApplySpellFix({ 66129 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Soul Sickness
- ApplySpellFix({ 69131 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PERIODIC_TRIGGER_SPELL;
- spellInfo->Effects[EFFECT_0].Amplitude = 8000;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 69133;
- });
-
- // Phantom Blast
- ApplySpellFix({ 68982, 70322 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags |= SPELL_INTERRUPT_FLAG_INTERRUPT;
- });
-
- // Empowered Blizzard
- ApplySpellFix({ 70131 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Ice Lance Volley
- ApplySpellFix({ 70464 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS);
- });
-
- ApplySpellFix({
- 70513, // Multi-Shot
- 59514 // Shriek of the Highborne
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CONE_ENTRY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Icicle
- ApplySpellFix({ 69428, 69426 }, [](SpellInfo* spellInfo)
- {
- spellInfo->InterruptFlags = 0;
- spellInfo->AuraInterruptFlags = 0;
- spellInfo->ChannelInterruptFlags = 0;
- });
-
- ApplySpellFix({ 70525, 70639 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_500_YARDS); // 500yd
- });
-
- // Frost Nova
- ApplySpellFix({ 68198 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- });
-
- // Blight
- ApplySpellFix({ 69604, 70286 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- spellInfo->AttributesEx3 |= (SPELL_ATTR3_ALWAYS_HIT | SPELL_ATTR3_ONLY_ON_PLAYER);
- });
-
- // Chilling Wave
- ApplySpellFix({ 68778, 70333 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- ApplySpellFix({ 68786, 70336 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= (SPELL_ATTR3_ALWAYS_HIT | SPELL_ATTR3_ONLY_ON_PLAYER);
- spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_DUMMY;
- });
-
- // Pursuit
- ApplySpellFix({ 68987 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- ApplySpellFix({ 69029, 70850 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Explosive Barrage
- ApplySpellFix({ 69263 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_STUN;
- });
-
- // Overlord's Brand
- ApplySpellFix({ 69172 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcFlags = DONE_HIT_PROC_FLAG_MASK & ~PROC_FLAG_DONE_PERIODIC;
- spellInfo->ProcChance = 100;
- });
-
- // Icy Blast
- ApplySpellFix({ 69232 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TriggerSpell = 69238;
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- ApplySpellFix({ 69233, 69646 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- ApplySpellFix({ 69238, 69628 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Hoarfrost
- ApplySpellFix({ 69246, 69245, 69645 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Devour Humanoid
- ApplySpellFix({ 69503 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ChannelInterruptFlags |= 0;
- spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING;
- });
-
- // Falric: Defiling Horror
- ApplySpellFix({ 72435, 72452 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS);
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS);
- });
-
- // Frostsworn General - Throw Shield
- ApplySpellFix({ 69222, 73076 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- });
-
- // Halls of Reflection Clone
- ApplySpellFix({ 69828 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Summon Ice Wall
- ApplySpellFix({ 69768 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_ACTION_DURING_CHANNEL;
- });
-
- ApplySpellFix({ 69767 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ANY);
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- });
-
- // Essence of the Captured
- ApplySpellFix({ 73035, 70719 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13);
- });
-
- // Achievement Check
- ApplySpellFix({ 72830 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS);
- });
-
- ApplySpellFix({
- 70781, // Light's Hammer Teleport
- 70856, // Oratory of the Damned Teleport
- 70857, // Rampart of Skulls Teleport
- 70858, // Deathbringer's Rise Teleport
- 70859, // Upper Spire Teleport
- 70860, // Frozen Throne Teleport
- 70861 // Sindragosa's Lair Teleport
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); // this target is for SPELL_EFFECT_TELEPORT_UNITS
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_2].TargetB = SpellImplicitTargetInfo();
- });
-
- ApplySpellFix({
- 70960, // Bone Flurry
- 71258 // Adrenaline Rush (Ymirjar Battle-Maiden)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_SELF_CHANNELED;
- });
-
- // Saber Lash (Lord Marrowgar)
- ApplySpellFix({ 69055, 70814 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); // 5yd
- });
-
- // Impaled (Lord Marrowgar)
- ApplySpellFix({ 69065 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0; // remove stun so Dispersion can be used
- });
-
- // Cold Flame (Lord Marrowgar)
- ApplySpellFix({ 72701, 72702, 72703, 72704 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 secs instead of 12, need him for longer, but will stop his actions after 12 secs
- });
-
- ApplySpellFix({ 69138 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 secs instead of 12, need him for longer, but will stop his actions after 12 secs
- });
-
- ApplySpellFix({ 69146, 70823, 70824, 70825 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd instead of 5yd
- spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
- });
-
- // Dark Martyrdom (Lady Deathwhisper)
- ApplySpellFix({ 70897 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_ALLOW_DEAD_TARGET;
- });
-
- ApplySpellFix({
- 69075, // Bone Storm (Lord Marrowgar)
- 70834, // Bone Storm (Lord Marrowgar)
- 70835, // Bone Storm (Lord Marrowgar)
- 70836, // Bone Storm (Lord Marrowgar)
- 72378, // Blood Nova (Deathbringer Saurfang)
- 73058, // Blood Nova (Deathbringer Saurfang)
- 72769, // Scent of Blood (Deathbringer Saurfang)
- 72385, // Boiling Blood (Deathbringer Saurfang)
- 72441, // Boiling Blood (Deathbringer Saurfang)
- 72442, // Boiling Blood (Deathbringer Saurfang)
- 72443, // Boiling Blood (Deathbringer Saurfang)
- 71160, // Plague Stench (Stinky)
- 71161, // Plague Stench (Stinky)
- 71123, // Decimate (Stinky & Precious)
- 71464 // Divine Surge (Sister Svalna)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- });
-
- // Shadow's Fate
- ApplySpellFix({ 71169 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- // Lock Players and Tap Chest
- ApplySpellFix({ 72347 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Award Reputation - Boss Kill
- ApplySpellFix({ 73843, 73844, 73845, 73846 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
- });
-
- // Death Plague (Rotting Frost Giant)
- ApplySpellFix({ 72864 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 0;
- });
-
- // Gunship Battle, spell Below Zero
- ApplySpellFix({ 69705 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Resistant Skin (Deathbringer Saurfang adds)
- ApplySpellFix({ 72723 }, [](SpellInfo* spellInfo)
- {
- // this spell initially granted Shadow damage immunity, however it was removed but the data was left in client
- spellInfo->Effects[EFFECT_2].Effect = 0;
- });
-
- // Mark of the Fallen Champion (Deathbringer Saurfang)
- ApplySpellFix({ 72255, 72444, 72445, 72446 }, [](SpellInfo* spellInfo)
- {
- // Patch 3.3.2 (2010-01-02): Deathbringer Saurfang will no longer gain blood power from Mark of the Fallen Champion.
- // prevented in script, effect needed for Prayer of Mending
- spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_CASTER_PROCS;
- });
-
- // Coldflame Jets (Traps after Saurfang)
- ApplySpellFix({ 70460 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(1); // 10 seconds
- });
-
- ApplySpellFix({
- 70461, // Coldflame Jets (Traps after Saurfang)
- 71289 // Dominate Mind (Lady Deathwhisper)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Severed Essence (Val'kyr Herald)
- ApplySpellFix({ 71906, 71942 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- ApplySpellFix({
- 71159, // Awaken Plagued Zombies (Precious)
- 71302 // Awaken Ymirjar Fallen (Ymirjar Deathbringer)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
- });
-
- // Blood Prince Council, Invocation of Blood
- ApplySpellFix({ 70981, 70982, 70952 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0; // clear share health aura
- });
-
- // Ymirjar Frostbinder, Frozen Orb
- ApplySpellFix({ 71274 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(6);
- });
-
- // Ooze Flood (Rotface)
- ApplySpellFix({ 69783, 69797, 69799, 69802 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_EXCLUDE_CASTER;
- });
-
- // Volatile Ooze Beam Protection
- ApplySpellFix({ 70530 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA; // blizzard typo, 65 instead of 6, aura itself is defined (dummy)
- });
-
- // Professor Putricide, Gaseous Bloat (Orange Ooze Channel)
- ApplySpellFix({ 70672, 72455, 72832, 72833 }, [](SpellInfo* spellInfo)
- {
- // copied attributes from Green Ooze Channel
- spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- ApplySpellFix({
- 71412, // Green Ooze Summon (Professor Putricide)
- 71415 // Orange Ooze Summon (Professor Putricide)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- });
-
- ApplySpellFix({
- 71621, // Create Concoction (Professor Putricide)
- 72850,
- 72851,
- 72852,
- 71893, // Guzzle Potions (Professor Putricide)
- 73120,
- 73121,
- 73122
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(15); // 4 sec
- });
-
- // Mutated Plague (Professor Putricide)
- ApplySpellFix({ 72454, 72464, 72506, 72507 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx4 |= SPELL_ATTR4_NO_CAST_LOG;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- // Unbound Plague (Professor Putricide) (needs target selection script)
- ApplySpellFix({ 70911, 72854, 72855, 72856 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
- });
-
- // Mutated Transformation (Professor Putricide)
- ApplySpellFix({ 70402, 72511, 72512, 72513 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
- });
-
- // Empowered Flare (Blood Prince Council)
- ApplySpellFix({ 71708, 72785, 72786, 72787 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- ApplySpellFix({
- 71518, // Unholy Infusion Quest Credit (Professor Putricide)
- 72934, // Blood Infusion Quest Credit (Blood-Queen Lana'thel)
- 72289 // Frost Infusion Quest Credit (Sindragosa)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // another missing radius
- });
-
- // Swarming Shadows
- ApplySpellFix({ 71266, 72890 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AreaGroupId = 0; // originally, these require area 4522, which is... outside of Icecrown Citadel
- });
-
- ApplySpellFix({
- 71301, // Summon Dream Portal (Valithria Dreamwalker)
- 71977 // Summon Nightmare Portal (Valithria Dreamwalker)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Column of Frost (visual marker)
- ApplySpellFix({ 70715 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(32); // 6 seconds (missing)
- });
-
- // Mana Void (periodic aura)
- ApplySpellFix({ 71085 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 seconds (missing)
- });
-
- // Summon Suppressor (needs target selection script)
- ApplySpellFix({ 70936 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Corruption
- ApplySpellFix({ 70602 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE;
- });
-
- ApplySpellFix({
- 72706, // Achievement Check (Valithria Dreamwalker)
- 71357 // Order Whelp
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- });
-
- // Sindragosa's Fury
- ApplySpellFix({ 70598 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Tail Smash (Sindragosa)
- ApplySpellFix({ 71077 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER_BACK);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENEMY);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_DEST_CASTER_BACK);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENEMY);
- });
-
- // Frost Bomb
- ApplySpellFix({ 69846 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 0.0f; // This spell's summon happens instantly
- });
-
- // Mystic Buffet (Sindragosa)
- ApplySpellFix({ 70127, 72528, 72529, 72530 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0; // remove obsolete spell effect with no targets
- });
-
- // Sindragosa, Frost Aura
- ApplySpellFix({ 70084, 71050, 71051, 71052 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes &= ~SPELL_ATTR0_NO_IMMUNITIES;
- });
-
- // Ice Lock
- ApplySpellFix({ 71614 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Mechanic = MECHANIC_STUN;
- });
-
- // Lich King, Infest
- ApplySpellFix({ 70541, 73779, 73780, 73781 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Lich King, Necrotic Plague
- ApplySpellFix({ 70337, 73912, 73913, 73914, 70338, 73785, 73786, 73787 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- ApplySpellFix({
- 69099, // Ice Pulse 10n
- 73776, // Ice Pulse 25n
- 73777, // Ice Pulse 10h
- 73778 // Ice Pulse 25h
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
- spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
- });
-
- // Fury of Frostmourne
- ApplySpellFix({ 72350 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- ApplySpellFix({
- 72351, // Fury of Frostmourne
- 72431, // Jump (removes Fury of Frostmourne debuff)
- 72429, // Mass Resurrection
- 73159 // Play Movie
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- // Raise Dead
- ApplySpellFix({ 72376 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 4;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- // Jump
- ApplySpellFix({ 71809 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
- spellInfo->Effects[EFFECT_0].MiscValue = 190;
- });
-
- // Broken Frostmourne
- ApplySpellFix({ 72405 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- });
-
- // Summon Shadow Trap
- ApplySpellFix({ 73540 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(3); // 60 seconds
- });
-
- // Shadow Trap (visual)
- ApplySpellFix({ 73530 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds
- });
-
- // Shadow Trap
- ApplySpellFix({ 73529 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
- });
-
- // Shadow Trap (searcher)
- ApplySpellFix({ 74282 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_3_YARDS); // 3yd
- });
-
- // Raging Spirit Visual
- ApplySpellFix({ 69198 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Defile
- ApplySpellFix({ 72762 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(559); // 53 seconds
- spellInfo->ExcludeCasterAuraSpell = 0;
- spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
- spellInfo->AttributesEx6 |= (SPELL_ATTR6_IGNORE_PHASE_SHIFT | SPELL_ATTR6_CAN_TARGET_UNTARGETABLE);
- });
-
- // Defile
- ApplySpellFix({ 72743 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(22); // 45 seconds
- });
-
- ApplySpellFix({ 72754, 73708, 73709, 73710 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- });
-
- // Val'kyr Target Search
- ApplySpellFix({ 69030 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
- });
-
- // Harvest Souls
- ApplySpellFix({ 73654, 74295, 74296, 74297 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- // Restore Soul
- ApplySpellFix({ 72595, 73650 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- });
-
- // Kill Frostmourne Players
- ApplySpellFix({ 75127 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- // Harvest Soul
- ApplySpellFix({ 73655 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
- });
-
- // Destroy Soul
- ApplySpellFix({ 74086 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- });
-
- // Summon Spirit Bomb
- ApplySpellFix({ 74302, 74342 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- spellInfo->MaxAffectedTargets = 1;
- });
-
- // Summon Spirit Bomb
- ApplySpellFix({ 74341, 74343 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
- spellInfo->MaxAffectedTargets = 3;
- });
-
- // Summon Spirit Bomb
- ApplySpellFix({ 73579 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); // 25yd
- });
-
- // Trigger Vile Spirit (Inside, Heroic)
- ApplySpellFix({ 73582 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd
- });
-
- // Scale Aura (used during Dominate Mind from Lady Deathwhisper)
- ApplySpellFix({ 73261 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
- });
-
- // Leap to a Random Location
- ApplySpellFix({ 70485 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS);
- spellInfo->Effects[EFFECT_0].MiscValue = 100;
- });
-
- // Empowered Blood
- ApplySpellFix({ 70227, 70232 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AreaGroupId = 2452; // Whole icc instead of Crimson Halls only, remove when area calculation is fixed
- });
-
- ApplySpellFix({ 74509 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
- });
-
- // Rallying Shout
- ApplySpellFix({ 75414 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
- });
-
- // Barrier Channel
- ApplySpellFix({ 76221 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ChannelInterruptFlags &= ~(AURA_INTERRUPT_FLAG_TURNING | AURA_INTERRUPT_FLAG_MOVE);
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
- });
-
- // Intimidating Roar
- ApplySpellFix({ 74384 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- });
-
- ApplySpellFix({
- 74562, // Fiery Combustion
- 74792 // Soul Consumption
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_REDIRECTION;
- });
-
- // Combustion
- ApplySpellFix({ 75883, 75884 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
- });
-
- // Consumption
- ApplySpellFix({ 75875, 75876 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); // 6yd
- spellInfo->Effects[EFFECT_0].Mechanic = MECHANIC_NONE;
- spellInfo->Effects[EFFECT_1].Mechanic = MECHANIC_SNARE;
- });
-
- // Soul Consumption
- ApplySpellFix({ 74799 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_12_YARDS); // 12yd
- });
-
- // Twilight Cutter
- ApplySpellFix({ 74769, 77844, 77845, 77846 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- });
-
- // Twilight Mending
- ApplySpellFix({ 75509 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_PHASE_SHIFT;
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd
- });
-
- // Meteor Strike
- ApplySpellFix({ 74637 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 0;
- });
-
- //Blazing Aura
- ApplySpellFix({ 75885, 75886 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
- });
-
- ApplySpellFix({
- 75952, //Meteor Strike
- 74629 //Combustion Periodic
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx4 &= ~SPELL_ATTR4_NO_CAST_LOG;
- });
-
- // Going Bearback
- ApplySpellFix({ 54897 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY;
- spellInfo->Effects[EFFECT_1].RadiusEntry = spellInfo->Effects[EFFECT_0].RadiusEntry;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENTRY);
- });
-
- // Still At It
- ApplySpellFix({ 51931, 51932, 51933 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(38);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Rallying the Troops
- ApplySpellFix({ 47394 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ExcludeTargetAuraSpell = 47394;
- });
-
- // A Tangled Skein
- ApplySpellFix({ 51165, 51173 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- ApplySpellFix({
- 69563, // A Cloudlet of Classy Cologne
- 69445, // A Perfect Puff of Perfume
- 69489 // Bonbon Blitz
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Control
- ApplySpellFix({ 30790 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].MiscValue = 0;
- });
-
- // Reclusive Runemaster
- ApplySpellFix({ 48028 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
- });
-
- // Mastery of
- ApplySpellFix({ 65147 }, [](SpellInfo* spellInfo)
- {
- spellInfo->CategoryEntry = sSpellCategoryStore.LookupEntry(1244);
- spellInfo->CategoryRecoveryTime = 1500;
- });
-
- // Weakness to Lightning
- ApplySpellFix({ 46432 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 &= ~SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
- });
-
- // Wrangle Some Aether Rays!
- ApplySpellFix({ 40856 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(27); // 3000ms
- });
-
- // The Black Knight's Orders
- ApplySpellFix({ 63163 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 52390;
- });
-
- // The Warp Rifts
- ApplySpellFix({ 34888 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(5); // 300 secs
- });
-
- // The Smallest Creatures
- ApplySpellFix({ 38544 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValueB = 427;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(1);
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Ridding the red rocket
- ApplySpellFix({ 49177 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 1; // corrects seat id (points - 1 = seatId)
- });
-
- // Jormungar Strike
- ApplySpellFix({ 56513 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 2000;
- });
-
- ApplySpellFix({
- 37851, // Tag Greater Felfire Diemetradon
- 37918 // Arcano-pince
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 3000;
- });
-
- ApplySpellFix({
- 54997, // Cast Net (tooltip says 10s but sniffs say 6s)
- 56524 // Acid Breath
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 6000;
- });
-
- ApplySpellFix({
- 47911, // EMP
- 48620, // Wing Buffet
- 51752 // Stampy's Stompy-Stomp
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 10000;
- });
-
- ApplySpellFix({
- 37727, // Touch of Darkness
- 54996 // Ice Slick (tooltip says 20s but sniffs say 12s)
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 12000;
- });
-
- // Signal Helmet to Attack
- ApplySpellFix({ 51748 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 15000;
- });
-
- ApplySpellFix({
- 51756, // Charge
- 37919, //Arcano-dismantle
- 37917 //Arcano-Cloak
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->RecoveryTime = 20000;
- });
-
- // Kaw the Mammoth Destroyer
- ApplySpellFix({ 46260 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // That's Abominable
- ApplySpellFix({ 59565 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValueB = 1721; // controlable guardian
- });
-
- // Investigate the Blue Recluse (1920)
- // Investigate the Alchemist Shop (1960)
- ApplySpellFix({ 9095 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
- });
-
- // Dragonmaw Race: All parts
- ApplySpellFix({
- 40890 // Oldie's Rotten Pumpkin
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 40905;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Trope's Slime Cannon
- ApplySpellFix({ 40909 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 40905;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Corlok's Skull Barrage
- ApplySpellFix({ 40894 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 40900;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Ichman's Blazing Fireball
- ApplySpellFix({ 40928 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 40929;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Mulverick's Great Balls of Lightning
- ApplySpellFix({ 40930 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 40931;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Sky Shatter
- ApplySpellFix({ 40945 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 41064;
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE;
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- });
-
- // Gauging the Resonant Frequency (10594)
- ApplySpellFix({ 37390 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValueB = 181;
- });
-
- // Where in the World is Hemet Nesingwary? (12521)
- ApplySpellFix({ 50860 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 50860;
- });
-
- ApplySpellFix({ 50861 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 0;
- });
-
- // Krolmir, Hammer of Storms (13010)
- ApplySpellFix({ 56606, 56541 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 1;
- });
-
- // Blightbeasts be Damned! (12072)
- ApplySpellFix({ 47424 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags &= ~AURA_INTERRUPT_FLAG_NOT_ABOVEWATER;
- });
-
- // Dark Horizon (12664), Reunited (12663)
- ApplySpellFix({ 52190 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 52391 - 1;
- });
-
- // The Sum is Greater than the Parts (13043) - Chained Grip
- ApplySpellFix({ 60540 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].MiscValue = 300;
- });
-
- // Not a Bug (13342)
- ApplySpellFix({ 60531 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_ALLOW_DEAD_TARGET;
- });
-
- // Frankly, It Makes No Sense... (10672)
- ApplySpellFix({ 37851 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Honor Challenge (12939)
- ApplySpellFix({ 21855 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Convocation at Zol'Heb (12730)
- ApplySpellFix({ 52956 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_DEST_AREA_ENTRY);
- });
-
- // Mangletooth
- ApplySpellFix({
- 7764, // Wisdom of Agamaggan
- 10767, // Rising Spirit
- 16610, // Razorhide
- 16612, // Agamaggan's Strength
- 16618, // Spirit of the Wind
- 17013 // Agamaggan's Agility
- }, [](SpellInfo* spellInfo)
-
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- spellInfo->AttributesEx5 |= SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT;
- });
-
- //Crushing the Crown
- ApplySpellFix({ 71024 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
- });
-
- // Battle for the Undercity
- ApplySpellFix({
- 59892 // Cyclone fall
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AREA_AURA_FRIEND;
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd
- spellInfo->AttributesEx &= ~SPELL_ATTR0_NO_AURA_CANCEL;
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
- });
-
- // enchant Lightweave Embroidery
- ApplySpellFix({ 55637 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].MiscValue = 126;
- });
-
- // Magic Broom
- ApplySpellFix({ 47977 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Titanium Seal of Dalaran, Toss your luck
- ApplySpellFix({ 60476 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- });
-
- // Mind Amplification Dish, change charm aura
- ApplySpellFix({ 26740 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_CHARM;
- });
-
- // Persistent Shield
- ApplySpellFix({ 26467 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE;
- spellInfo->Effects[EFFECT_0].TriggerSpell = 26470;
- });
-
- // Deadly Swiftness
- ApplySpellFix({ 31255 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TriggerSpell = 22588;
- });
-
- // Black Magic enchant
- ApplySpellFix({ 59630 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
- });
-
- // Precious's Ribbon
- ApplySpellFix({ 72968 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
- });
-
- ApplySpellFix({
- 71646, // Item - Bauble of True Blood 10m
- 71607, // Item - Bauble of True Blood 25m
- 71610, // Item - Althor's Abacus trigger 10m
- 71641 // Item - Althor's Abacus trigger 25m
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC;
- spellInfo->SpellLevel = 0;
- });
-
- ApplySpellFix({
- 6789, // Warlock - Death Coil (Rank 1)
- 17925, // Warlock - Death Coil (Rank 2)
- 17926, // Warlock - Death Coil (Rank 3)
- 27223, // Warlock - Death Coil (Rank 4)
- 47859, // Warlock - Death Coil (Rank 5)
- 71838, // Drain Life - Bryntroll Normal
- 71839 // Drain Life - Bryntroll Heroic
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT;
- });
-
- // Alchemist's Stone
- ApplySpellFix({ 17619 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALLOW_AURA_WHILE_DEAD;
- });
-
- // Stormchops
- ApplySpellFix({ 43730 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(1);
- spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo();
- });
-
- // Savory Deviate Delight (transformations), allow to mount while transformed
- ApplySpellFix({ 8219, 8220, 8221, 8222 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Attributes &= ~SPELL_ATTR0_NO_IMMUNITIES;
- });
-
- // Clamlette Magnifique
- ApplySpellFix({ 72623 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = spellInfo->Effects[EFFECT_1].BasePoints;
- });
-
- // Compact Harvest Reaper
- ApplySpellFix({ 4078 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(6); // 10 minutes
- });
-
- // Dragon Kite, Tuskarr Kite - Kite String
- ApplySpellFix({ 45192 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
- });
-
- // Frigid Frostling, Infrigidate
- ApplySpellFix({ 74960 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd
- });
-
- // Apple Trap
- ApplySpellFix({ 43450 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
- });
-
- // Dark Iron Attack - spawn mole machine
- ApplySpellFix({ 43563 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].Effect = 0; // summon GO's manually
- });
-
- // Throw Mug visual
- ApplySpellFix({ 42300 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- });
-
- // Dark Iron knockback Aura
- ApplySpellFix({ 42299 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY;
- spellInfo->Effects[EFFECT_0].MiscValue = 100;
- spellInfo->Effects[EFFECT_0].BasePoints = 79;
- });
-
- // Chug and Chuck!
- ApplySpellFix({ 42436 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_SRC_CASTER);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY);
- spellInfo->MaxAffectedTargets = 0;
- spellInfo->ExcludeCasterAuraSpell = 42299;
- });
-
- // Catch the Wild Wolpertinger!
- ApplySpellFix({ 41621 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
- });
-
- // Brewfest quests
- ApplySpellFix({ 47134, 51798 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- });
-
- // The Heart of The Storms (12998)
- ApplySpellFix({ 43528 }, [](SpellInfo* spellInfo)
- {
- spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(18);
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(25);
- });
-
- // Water splash
- ApplySpellFix({ 42348 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].Effect = 0;
- });
-
- // Summon Lantersn
- ApplySpellFix({ 44255, 44231 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Throw Head Back
- ApplySpellFix({ 42401 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
- });
-
- // Food
- ApplySpellFix({ 65418 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TriggerSpell = 65410;
- });
-
- ApplySpellFix({ 65422 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TriggerSpell = 65414;
- });
-
- ApplySpellFix({ 65419 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TriggerSpell = 65416;
- });
-
- ApplySpellFix({ 65420 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TriggerSpell = 65412;
- });
-
- ApplySpellFix({ 65421 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_2].TriggerSpell = 65415;
- });
-
- // Stamp Out Bonfire
- ApplySpellFix({ 45437 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY);
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Light Bonfire (DND)
- ApplySpellFix({ 29831 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
- });
-
- // Infernal
- ApplySpellFix({ 33240 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- });
-
- ApplySpellFix({
- 47476, // Deathknight - Strangulate
- 15487, // Priest - Silence
- 5211, // Druid - Bash - R1
- 6798, // Druid - Bash - R2
- 8983 // Druid - Bash - R3
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx7 |= SPELL_ATTR7_CAN_CAUSE_INTERRUPT;
- });
-
- // Ritual of Summoning
- ApplySpellFix({ 61994 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ManaCostPercentage = 0; // Clicking on Warlock Summoning portal should not require mana
- });
-
- // Shadowmeld
- ApplySpellFix({ 58984 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
- });
-
- // Flare activation speed
- ApplySpellFix({ 1543 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Speed = 0.0f;
- });
-
- // Light's Beacon
- ApplySpellFix({ 53651 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
- });
-
- // Shadow Hunter Vosh'gajin - Hex
- ApplySpellFix({ 16097 }, [](SpellInfo* spellInfo)
- {
- spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(16);
- });
-
- // Sacred Cleansing
- ApplySpellFix({ 53659 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd
- });
-
- // Silithyst
- ApplySpellFix({ 29519 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_DECREASE_SPEED;
- spellInfo->Effects[EFFECT_0].BasePoints = -25;
- });
-
- // Focused Eyebeam Summon Trigger
- ApplySpellFix({ 63342 }, [](SpellInfo* spellInfo)
- {
- spellInfo->MaxAffectedTargets = 1;
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
- });
-
- // Luffa
- ApplySpellFix({ 23595 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].BasePoints = 1; // Remove only 1 bleed effect
- });
-
- // Eye of Kilrogg Passive (DND)
- ApplySpellFix({ 2585 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE;
- });
-
- // Conflagration, Horseman's Cleave
- ApplySpellFix({ 42380, 42587 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT;
- });
-
- // Serverside - Summon Arcane Disruptor
- ApplySpellFix({ 49591 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcChance = 101;
- spellInfo->Effects[EFFECT_1].Effect = 24;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(25);
- spellInfo->Effects[EFFECT_1].ItemType = 37888;
- });
-
- // Serverside - Create Rocket Pack
- ApplySpellFix({ 70055 }, [](SpellInfo* spellInfo)
- {
- spellInfo->ProcChance = 101;
- spellInfo->Effects[EFFECT_1].Effect = 24;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(25);
- spellInfo->Effects[EFFECT_1].ItemType = 49278;
- });
-
- // Ashenvale Outrunner Sneak
- // Stealth
- ApplySpellFix({ 20540, 32199 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= (AURA_INTERRUPT_FLAG_MELEE_ATTACK | AURA_INTERRUPT_FLAG_CAST);
- });
-
- // Arcane Bolt
- ApplySpellFix({ 15979 }, [](SpellInfo* spellInfo)
- {
- spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(3); // 20y
- });
-
- // Mortal Shots
- ApplySpellFix({ 19485, 19487, 19488, 19489, 19490 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].SpellClassMask[0] |= 0x00004000;
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Item - Death Knight T9 Melee 4P Bonus
- // Item - Hunter T9 2P Bonus
- // Item - Paladin T9 Retribution 2P Bonus (Righteous Vengeance)
- ApplySpellFix({ 67118, 67150, 67188 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = 0;
- });
-
- // Green Beam
- ApplySpellFix({31628, 31630, 31631}, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
- spellInfo->MaxAffectedTargets = 1;
- });
-
- ApplySpellFix({
- 20271, 57774, // Judgement of Light
- 20425, // Judgement of Command
- 32220, // Judgement of Blood
- 53407, // Judgement of Justice
- 53408, // Judgement of Wisdom
- 53725 // Judgement of the Martyr
- }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx3 &= ~SPELL_ATTR3_SUPRESS_TARGET_PROCS;
- });
-
- // Chaos Bolt Passive
- ApplySpellFix({ 58284 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA;
- spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST;
- spellInfo->Effects[EFFECT_1].BasePoints = 100;
- spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->Effects[EFFECT_1].MiscValue = 127;
- spellInfo->Effects[EFFECT_1].SpellClassMask[1] = 0x00020000;
- });
-
- // Focused Assault
- // Brutal Assault
- ApplySpellFix({ 46392, 46393 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
- });
-
- // Bestial Wrath
- ApplySpellFix({ 19574 }, [](SpellInfo* spellInfo)
- {
- spellInfo->AttributesEx4 |= SPELL_ATTR4_AURA_EXPIRES_OFFLINE;
- });
-
- // PX-238 Winter Wondervolt
- ApplySpellFix({ 26157, 26272, 26273, 26274 }, [](SpellInfo* spellInfo)
- {
- spellInfo->Mechanic = 0;
- });
-
- for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
- {
- SpellInfo* spellInfo = mSpellInfoMap[i];
- if (!spellInfo)
- {
- continue;
- }
-
- for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j)
- {
- switch (spellInfo->Effects[j].Effect)
- {
- case SPELL_EFFECT_CHARGE:
- case SPELL_EFFECT_CHARGE_DEST:
- case SPELL_EFFECT_JUMP:
- case SPELL_EFFECT_JUMP_DEST:
- case SPELL_EFFECT_LEAP_BACK:
- if (!spellInfo->Speed && !spellInfo->SpellFamilyName)
- {
- spellInfo->Speed = SPEED_CHARGE;
- }
- break;
- }
-
- // Xinef: i hope this will fix the problem with not working resurrection
- if (spellInfo->Effects[j].Effect == SPELL_EFFECT_SELF_RESURRECT)
- {
- spellInfo->Effects[j].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- }
- }
-
- // Fix range for trajectory triggered spell
- for (SpellEffectInfo const& spellEffectInfo : spellInfo->GetEffects())
- {
- if (spellEffectInfo.IsEffect() && (spellEffectInfo.TargetA.GetTarget() == TARGET_DEST_TRAJ || spellEffectInfo.TargetB.GetTarget() == TARGET_DEST_TRAJ))
- {
- // Get triggered spell if any
- if (SpellInfo* spellInfoTrigger = const_cast(GetSpellInfo(spellEffectInfo.TriggerSpell)))
- {
- float maxRangeMain = spellInfo->RangeEntry ? spellInfo->RangeEntry->RangeMax[0] : 0.0f;
- float maxRangeTrigger = spellInfoTrigger->RangeEntry ? spellInfoTrigger->RangeEntry->RangeMax[0] : 0.0f;
-
- // check if triggered spell has enough max range to cover trajectory
- if (maxRangeTrigger < maxRangeMain)
- spellInfoTrigger->RangeEntry = spellInfo->RangeEntry;
- }
- }
- }
-
- if (spellInfo->ActiveIconID == 2158) // flight
- {
- spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
- }
-
- switch (spellInfo->SpellFamilyName)
- {
- case SPELLFAMILY_PALADIN:
- // Seals of the Pure should affect Seal of Righteousness
- if (spellInfo->SpellIconID == 25 && (spellInfo->Attributes & SPELL_ATTR0_PASSIVE))
- spellInfo->Effects[EFFECT_0].SpellClassMask[1] |= 0x20000000;
- break;
- case SPELLFAMILY_DEATHKNIGHT:
- // Icy Touch - extend FamilyFlags (unused value) for Sigil of the Frozen Conscience to use
- if (spellInfo->SpellIconID == 2721 && spellInfo->SpellFamilyFlags[0] & 0x2)
- spellInfo->SpellFamilyFlags[0] |= 0x40;
- break;
- case SPELLFAMILY_HUNTER:
- // Aimed Shot not affected by category cooldown modifiers
- if (spellInfo->SpellFamilyFlags[0] & 0x00020000)
- {
- spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
- spellInfo->RecoveryTime = 10 * IN_MILLISECONDS;
- }
- break;
- }
-
- // Recklessness/Shield Wall/Retaliation
- if (spellInfo->CategoryEntry == sSpellCategoryStore.LookupEntry(132) && spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR)
- {
- spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS;
- }
- }
-
- // Xinef: The Veiled Sea area in outlands (Draenei zone), client blocks casting flying mounts
- for (uint32 i = 0; i < sAreaTableStore.GetNumRows(); ++i)
- if (AreaTableEntry* areaEntry = const_cast(sAreaTableStore.LookupEntry(i)))
- {
- if (areaEntry->ID == 3479)
- areaEntry->flags |= AREA_FLAG_NO_FLY_ZONE;
- // Xinef: Dun Morogh, Kharanos tavern, missing resting flag
- else if (areaEntry->ID == 2102)
- areaEntry->flags |= AREA_FLAG_REST_ZONE_ALLIANCE;
- }
-
- // Xinef: fix for something?
- SummonPropertiesEntry* properties = const_cast(sSummonPropertiesStore.LookupEntry(121));
- properties->Type = SUMMON_TYPE_TOTEM;
- properties = const_cast(sSummonPropertiesStore.LookupEntry(647)); // 52893
- properties->Type = SUMMON_TYPE_TOTEM;
- if ((properties = const_cast(sSummonPropertiesStore.LookupEntry(628)))) // Hungry Plaguehound
- {
- properties->Category = SUMMON_CATEGORY_PET;
- properties->Type = SUMMON_TYPE_PET;
- }
-
- // Correct Pet Size
- CreatureDisplayInfoEntry* displayEntry = const_cast(sCreatureDisplayInfoStore.LookupEntry(17028)); // Kurken
- displayEntry->scale = 2.5f;
-
- // Oracles and Frenzyheart faction
- FactionEntry* factionEntry = const_cast(sFactionStore.LookupEntry(1104));
- factionEntry->ReputationFlags[0] = 0;
- factionEntry = const_cast(sFactionStore.LookupEntry(1105));
- factionEntry->ReputationFlags[0] = 0;
-
- // Various factions, added 14, 16 to hostile mask
- FactionTemplateEntry* factionTemplateEntry = const_cast(sFactionTemplateStore.LookupEntry(1978)); // Warsong Offensive
- factionTemplateEntry->hostileMask |= 8;
- factionTemplateEntry = const_cast(sFactionTemplateStore.LookupEntry(1921)); // The Taunka
- factionTemplateEntry->hostileMask |= 8;
-
- // Remove vehicles attr, making accessories selectable
- VehicleSeatEntry* vse = const_cast(sVehicleSeatStore.LookupEntry(4689)); // Siege Engine, Accessory
- vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
- vse = const_cast(sVehicleSeatStore.LookupEntry(4692)); // Siege Engine, Accessory
- vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
- vse = const_cast(sVehicleSeatStore.LookupEntry(4693)); // Siege Engine, Accessory
- vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
- vse = const_cast(sVehicleSeatStore.LookupEntry(3011)); // Salvaged Demolisher, Ulduar - not allow to change seats
- vse->m_flags &= ~VEHICLE_SEAT_FLAG_CAN_SWITCH;
- vse = const_cast(sVehicleSeatStore.LookupEntry(3077)); // Salvaged Demolisher Seat, Ulduar - not allow to change seats
- vse->m_flags &= ~VEHICLE_SEAT_FLAG_CAN_SWITCH;
-
- // pussywizard: fix z offset for some vehicles:
- vse = const_cast(sVehicleSeatStore.LookupEntry(6206)); // Marrowgar - Bone Spike
- vse->m_attachmentOffsetZ = 4.0f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(3806)); // Mimiron - seat on VX-001 for ACU during last phase
- vse->m_attachmentOffsetZ = 15.0f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(3566)); // Mimiron - Working seat
- vse->m_attachmentOffsetX = -3.5f;
- vse->m_attachmentOffsetY = 0.0f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(3567)); // Mimiron - Working seat
- vse->m_attachmentOffsetX = 2.3f;
- vse->m_attachmentOffsetY = -2.3f;
-
- // Pilgrim's Bounty offsets
- vse = const_cast(sVehicleSeatStore.LookupEntry(2841));
- vse->m_attachmentOffsetX += 1.65f;
- vse->m_attachmentOffsetY += 0.75f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(2842));
- vse->m_attachmentOffsetX += 1.6f;
- vse->m_attachmentOffsetY += -1.0f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(2843));
- vse->m_attachmentOffsetX += -1.2f;
- vse->m_attachmentOffsetY += 0.2f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(2844));
- vse->m_attachmentOffsetX += -0.1f;
- vse->m_attachmentOffsetY += -1.6f;
- vse = const_cast(sVehicleSeatStore.LookupEntry(2845));
- vse->m_attachmentOffsetX += 0.0f;
- vse->m_attachmentOffsetY += 1.6f;
-
- // Once Bitten, Twice Shy (10 player) - Icecrown Citadel
- AchievementEntry* achievement = const_cast(sAchievementStore.LookupEntry(4539));
- achievement->mapID = 631; // Correct map requirement (currently has Ulduar)
-
- // Ring of Valor starting Locations
- GraveyardStruct const* entry = sGraveyard->GetGraveyard(1364);
- const_cast(entry)->z += 6.0f;
- entry = sGraveyard->GetGraveyard(1365);
- const_cast(entry)->z += 6.0f;
-
- LockEntry* key = const_cast(sLockStore.LookupEntry(36)); // 3366 Opening, allows to open without proper key
- key->Type[2] = LOCK_KEY_NONE;
-
- LOG_INFO("server.loading", ">> Loading spell dbc data corrections in {} ms", GetMSTimeDiffToNow(oldMSTime));
- LOG_INFO("server.loading", " ");
-}