mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-23 05:36:23 +00:00
* fix(Scripts/ZulGurub: Mandokir's Threatening Gaze. Boss can melee attack while casting. Boss charges after the debuff run out. Guillotine is casted on hit rather than on launch. Properly coded Threatening Gaze Charge (with dot/hot exceptions) Whirlwind is removed during charge. Fixes #11748 * Update * missing * Update * Update. * Update. * Update. * Update. * Update.
4476 lines
154 KiB
C++
4476 lines
154 KiB
C++
/*
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "SpellInfo.h"
|
|
#include "DBCStores.h"
|
|
#include "DBCStructure.h"
|
|
#include "GameGraveyard.h"
|
|
#include "SpellMgr.h"
|
|
|
|
inline void ApplySpellFix(std::initializer_list<uint32> 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*>(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
|
|
64823, // Item - Druid T8 Balance 4P Bonus
|
|
34477, // Misdirection
|
|
44401, // Missile Barrage
|
|
18820 // Insight
|
|
}, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->ProcCharges = 1;
|
|
});
|
|
|
|
// Fireball
|
|
ApplySpellFix({ 57761 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->ProcCharges = 1;
|
|
spellInfo->SpellPriority = 50;
|
|
});
|
|
|
|
// 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;
|
|
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd
|
|
});
|
|
|
|
// 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);
|
|
});
|
|
|
|
// 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;
|
|
});
|
|
|
|
// Frightening Shout
|
|
ApplySpellFix({ 19134 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_DUMMY;
|
|
});
|
|
|
|
// 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;
|
|
});
|
|
|
|
// Riding Jokkum
|
|
ApplySpellFix({ 56606 }, [](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;
|
|
});
|
|
|
|
ApplySpellFix({
|
|
47977, // Magic Broom
|
|
65917 // Magic Rooster
|
|
}, [](SpellInfo* spellInfo)
|
|
{
|
|
// First two effects apply auras, which shouldn't be there
|
|
// due to NO_TARGET applying aura on current caster (core bug)
|
|
// Just wipe effect data, to mimic blizz-behavior
|
|
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;
|
|
});
|
|
|
|
// Nefarius Corruption
|
|
ApplySpellFix({ 23642 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->MaxAffectedTargets = 1;
|
|
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY);
|
|
spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
|
|
});
|
|
|
|
// 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;
|
|
});
|
|
|
|
// Nefarian: Shadowbolt, Shadow Command
|
|
ApplySpellFix({ 22667, 22677 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(152); // 150 yards
|
|
});
|
|
|
|
// Manastorm
|
|
ApplySpellFix({ 21097 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->InterruptFlags &= ~SPELL_INTERRUPT_FLAG_INTERRUPT;
|
|
});
|
|
|
|
// Arcane Vacuum
|
|
ApplySpellFix({ 21147 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(4); // 30 yards
|
|
spellInfo->AttributesEx3 |= SPELL_ATTR3_ONLY_ON_PLAYER;
|
|
});
|
|
|
|
// Reflection
|
|
ApplySpellFix({ 22067 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Dispel = DISPEL_NONE;
|
|
});
|
|
|
|
// Focused Assault
|
|
// Brutal Assault
|
|
ApplySpellFix({ 46392, 46393 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP;
|
|
});
|
|
|
|
// Improved Blessing Protection (Nefarian Class Call)
|
|
ApplySpellFix({ 23415 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_TARGET_ENEMY);
|
|
});
|
|
|
|
// Bestial Wrath
|
|
ApplySpellFix({ 19574 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->AttributesEx4 |= SPELL_ATTR4_AURA_EXPIRES_OFFLINE;
|
|
});
|
|
|
|
// Shadowflame
|
|
ApplySpellFix({ 22539 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->InterruptFlags &= ~SPELL_INTERRUPT_FLAG_INTERRUPT;
|
|
});
|
|
|
|
// PX-238 Winter Wondervolt
|
|
ApplySpellFix({ 26157, 26272, 26273, 26274 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Mechanic = 0;
|
|
});
|
|
|
|
// Calm Dragonkin
|
|
ApplySpellFix({ 19872 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->AttributesEx |= SPELL_ATTR1_EXCLUDE_CASTER;
|
|
});
|
|
|
|
// Cosmetic - Lightning Beam Channel
|
|
ApplySpellFix({ 45537 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
|
|
});
|
|
|
|
// Burning Adrenaline
|
|
ApplySpellFix({ 23478 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Effects[EFFECT_0].BasePoints = 4374;
|
|
spellInfo->Effects[EFFECT_0].DieSides = 1250;
|
|
});
|
|
|
|
// Explosion - Razorgore
|
|
ApplySpellFix({ 20038 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
|
|
spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
|
|
spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
|
|
});
|
|
|
|
// Brood Power : Bronze
|
|
ApplySpellFix({ 22311 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_CASTER_PROCS;
|
|
});
|
|
|
|
// Rapture
|
|
ApplySpellFix({ 63652, 63653, 63654, 63655 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT;
|
|
spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT;
|
|
spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS;
|
|
});
|
|
|
|
// Everlasting Affliction
|
|
ApplySpellFix({ 47422 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->SchoolMask = SPELL_SCHOOL_MASK_SHADOW;
|
|
});
|
|
|
|
// Flametongue Weapon (Passive) (Rank 6)
|
|
ApplySpellFix({ 16312 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Attributes |= SPELL_ATTR0_PASSIVE;
|
|
spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21);
|
|
});
|
|
|
|
// Mana Tide Totem
|
|
// Cleansing Totem Effect
|
|
ApplySpellFix({ 39609, 52025 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd
|
|
});
|
|
|
|
// Increased Totem Radius
|
|
ApplySpellFix({ 21895 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Effects[0].SpellClassMask = flag96(0x0603E000, 0x00200100);
|
|
});
|
|
|
|
// Jokkum Summon
|
|
ApplySpellFix({ 56541 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Effects[EFFECT_0].MiscValueB = 844;
|
|
});
|
|
|
|
// Hakkar Cause Insanity
|
|
ApplySpellFix({ 24327 }, [](SpellInfo* spellInfo)
|
|
{
|
|
spellInfo->Dispel = DISPEL_NONE;
|
|
});
|
|
|
|
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<SpellInfo*>(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<AreaTableEntry*>(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<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(121));
|
|
properties->Type = SUMMON_TYPE_TOTEM;
|
|
properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(647)); // 52893
|
|
properties->Type = SUMMON_TYPE_TOTEM;
|
|
if ((properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(628)))) // Hungry Plaguehound
|
|
{
|
|
properties->Category = SUMMON_CATEGORY_PET;
|
|
properties->Type = SUMMON_TYPE_PET;
|
|
}
|
|
|
|
// Correct Pet Size
|
|
CreatureDisplayInfoEntry* displayEntry = const_cast<CreatureDisplayInfoEntry*>(sCreatureDisplayInfoStore.LookupEntry(17028)); // Kurken
|
|
displayEntry->scale = 2.5f;
|
|
|
|
// Oracles and Frenzyheart faction
|
|
FactionEntry* factionEntry = const_cast<FactionEntry*>(sFactionStore.LookupEntry(1104));
|
|
factionEntry->ReputationFlags[0] = 0;
|
|
factionEntry = const_cast<FactionEntry*>(sFactionStore.LookupEntry(1105));
|
|
factionEntry->ReputationFlags[0] = 0;
|
|
|
|
// Various factions, added 14, 16 to hostile mask
|
|
FactionTemplateEntry* factionTemplateEntry = const_cast<FactionTemplateEntry*>(sFactionTemplateStore.LookupEntry(1978)); // Warsong Offensive
|
|
factionTemplateEntry->hostileMask |= 8;
|
|
factionTemplateEntry = const_cast<FactionTemplateEntry*>(sFactionTemplateStore.LookupEntry(1921)); // The Taunka
|
|
factionTemplateEntry->hostileMask |= 8;
|
|
|
|
// Remove vehicles attr, making accessories selectable
|
|
VehicleSeatEntry* vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(4689)); // Siege Engine, Accessory
|
|
vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(4692)); // Siege Engine, Accessory
|
|
vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(4693)); // Siege Engine, Accessory
|
|
vse->m_flags &= ~VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(3011)); // Salvaged Demolisher, Ulduar - not allow to change seats
|
|
vse->m_flags &= ~VEHICLE_SEAT_FLAG_CAN_SWITCH;
|
|
vse = const_cast<VehicleSeatEntry*>(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<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(6206)); // Marrowgar - Bone Spike
|
|
vse->m_attachmentOffsetZ = 4.0f;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(3806)); // Mimiron - seat on VX-001 for ACU during last phase
|
|
vse->m_attachmentOffsetZ = 15.0f;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(3566)); // Mimiron - Working seat
|
|
vse->m_attachmentOffsetX = -3.5f;
|
|
vse->m_attachmentOffsetY = 0.0f;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(3567)); // Mimiron - Working seat
|
|
vse->m_attachmentOffsetX = 2.3f;
|
|
vse->m_attachmentOffsetY = -2.3f;
|
|
|
|
// Pilgrim's Bounty offsets
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(2841));
|
|
vse->m_attachmentOffsetX += 1.65f;
|
|
vse->m_attachmentOffsetY += 0.75f;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(2842));
|
|
vse->m_attachmentOffsetX += 1.6f;
|
|
vse->m_attachmentOffsetY += -1.0f;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(2843));
|
|
vse->m_attachmentOffsetX += -1.2f;
|
|
vse->m_attachmentOffsetY += 0.2f;
|
|
vse = const_cast<VehicleSeatEntry*>(sVehicleSeatStore.LookupEntry(2844));
|
|
vse->m_attachmentOffsetX += -0.1f;
|
|
vse->m_attachmentOffsetY += -1.6f;
|
|
vse = const_cast<VehicleSeatEntry*>(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<AchievementEntry*>(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<GraveyardStruct*>(entry)->z += 6.0f;
|
|
entry = sGraveyard->GetGraveyard(1365);
|
|
const_cast<GraveyardStruct*>(entry)->z += 6.0f;
|
|
|
|
LockEntry* key = const_cast<LockEntry*>(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", " ");
|
|
}
|