diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-04-21 00:55:33 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-04-21 00:55:33 -0300 |
| commit | 34b63019ae977ef29606e8b1e0acc2442a63e295 (patch) | |
| tree | f19a710080bf2d5e63e8dc2fdd07afcca8477bc7 /src | |
| parent | 3028be49296cd2d7efaadd7ab64e3520a934254c (diff) | |
Core/Spells: Refactor setting spell info corrections to report errors about spells that no longer exist
cherry-picked from commit be1a7d36f31fe2722f0a61f1360f9a5c28ff97b2
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 2627 |
1 files changed, 1585 insertions, 1042 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 77f3f44f1e5..1c631b2b511 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2845,14 +2845,1597 @@ void SpellMgr::LoadSpellInfoCustomAttributes() TC_LOG_INFO("server.loading", ">> Loaded SpellInfo custom attributes in %u ms", GetMSTimeDiffToNow(oldMSTime)); } +inline void ApplySpellFix(std::initializer_list<uint32> spellIds, void(*fix)(SpellInfo*)) +{ + for (uint32 spellId : spellIds) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); + if (!spellInfo) + { + TC_LOG_ERROR("server.loading", "Spell info correction specified for non-existing spell %u", spellId); + continue; + } + + fix(const_cast<SpellInfo*>(spellInfo)); + } +} + void SpellMgr::LoadSpellInfoCorrections() { uint32 oldMSTime = getMSTime(); - SpellInfo* spellInfo = NULL; + 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[0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); + }); + + // Drink! (Brewfest) + ApplySpellFix({ 42436 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY); + }); + + // 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) + 51904, // Summon Ghouls On Scarlet Crusade (this should use conditions table, script for this spell needs to be fixed) + 2895, // Wrath of Air Totem rank 1 (Aura) + 68933, // Wrath of Air Totem rank 2 (Aura) + 29200, // Purify Helboar Meat + 10872, // Abolish Disease Effect + 3137 // Abolish Poison Effect + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(); + }); + + ApplySpellFix({ + 56690, // Thrust Spear + 60586, // Mighty Spear Thrust + 60776, // Claw Swipe + 60881, // Fatal Strike + 60864 // Jaws of Death + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx4 |= SPELL_ATTR4_FIXED_DAMAGE; + }); + + // 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 + }); + + // They Must Burn Bomb Aura (self) + ApplySpellFix({ 36350 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TriggerSpell = 36325; // They Must Burn Bomb Drop (DND) + }); + + ApplySpellFix({ + 61407, // Energize Cores + 62136, // Energize Cores + 54069, // Energize Cores + 56251 // Energize Cores + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY); + }); + + ApplySpellFix({ + 50785, // Energize Cores + 59372 // Energize Cores + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY); + }); + + // Mana Shield (rank 2) + ApplySpellFix({ 8494 }, [](SpellInfo* spellInfo) + { + // because of bug in dbc + spellInfo->ProcChance = 0; + }); + + // Maelstrom Weapon + ApplySpellFix({ + 51528, // (Rank 1) + 51529, // (Rank 2) + 51530, // (Rank 3) + 51531, // (Rank 4) + 51532 // (Rank 5) + }, [](SpellInfo* spellInfo) + { + // due to discrepancies between ranks + spellInfo->EquippedItemSubClassMask = 0x0000FC33; + spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED; + }); + + ApplySpellFix({ + 20335, // Heart of the Crusader + 20336, + 20337, + 53228, // Rapid Killing (Rank 1) + 53232, // Rapid Killing (Rank 2) + 63320 // Glyph of Life Tap + }, [](SpellInfo* spellInfo) + { + // Entries were not updated after spell effect change, we have to do that manually :/ + spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED; + }); + + ApplySpellFix({ + 51627, // Turn the Tables (Rank 1) + 51628, // Turn the Tables (Rank 2) + 51629 // Turn the Tables (Rank 3) + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + }); + + ApplySpellFix({ + 52910, // Turn the Tables + 52914, // Turn the Tables + 52915 // Turn the Tables + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + }); + + // Magic Absorption + ApplySpellFix({ + 29441, // (Rank 1) + 29444 // (Rank 2) + }, [](SpellInfo* spellInfo) + { + // Caused off by 1 calculation (ie 79 resistance at level 80) + spellInfo->SpellLevel = 0; + }); + + // Execute + ApplySpellFix({ + 5308, // (Rank 1) + 20658, // (Rank 2) + 20660, // (Rank 3) + 20661, // (Rank 4) + 20662, // (Rank 5) + 25234, // (Rank 6) + 25236, // (Rank 7) + 47470, // (Rank 8) + 47471 // (Rank 9) + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_CANT_TRIGGER_PROC; + }); + + // Improved Spell Reflection - aoe aura + ApplySpellFix({ 59725 }, [](SpellInfo* spellInfo) + { + // Target entry seems to be wrong for this spell :/ + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER_AREA_PARTY); + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); + }); + + ApplySpellFix({ + 44978, // Wild Magic + 45001, // Wild Magic + 45002, // Wild Magic + 45004, // Wild Magic + 45006, // Wild Magic + 45010, // Wild Magic + 31347, // Doom + 41635, // Prayer of Mending + 44869, // Spectral Blast + 45027, // Revitalize + 45976, // Muru Portal Channel + 39365, // Thundering Storm + 41071, // Raise Dead (HACK) + 52124, // Sky Darkener Assault + 42442, // Vengeance Landing Cannonfire + 45863, // Cosmetic - Incinerate to Random Target + 25425, // Shoot + 45761, // Shoot + 42611, // Shoot + 61588, // Blazing Harpoon + 52479, // Gift of the Harvester + 48246, // Ball of Flame + 36327, // Shoot Arcane Explosion Arrow + 55479, // Force Obedience + 28560, // Summon Blizzard (Sapphiron) + 53096, // Quetz'lun's Judgment + 70743, // AoD Special + 70614, // AoD Special - Vegard + 4020, // Safirdrang's Chill + 52438, // Summon Skittering Swarmer (Force Cast) + 52449, // Summon Skittering Infector (Force Cast) + 53609, // Summon Anub'ar Assassin (Force Cast) + 53457 // Summon Impale Trigger (AoE) + }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 1; + }); + + // Skartax Purple Beam + ApplySpellFix({ 36384 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 2; + }); + + ApplySpellFix({ + 41376, // Spite + 39992, // Needle Spine + 29576, // Multi-Shot + 40816, // Saber Lash + 37790, // Spread Shot + 46771, // Flame Sear + 45248, // Shadow Blades + 41303, // Soul Drain + 54172, // Divine Storm (heal) + 29213, // Curse of the Plaguebringer - Noth + 28542, // Life Drain - Sapphiron + 66588, // Flaming Spear + 54171 // Divine Storm + }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 3; + }); + + ApplySpellFix({ + 38310, // Multi-Shot + 53385 // Divine Storm (Damage) + }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 4; + }); + + ApplySpellFix({ + 47977, // Magic Broom + 48025, // Headless Horseman's Mount + 54729, // Winged Steed of the Ebon Blade + 71342, // Big Love Rocket + 72286, // Invincible + 74856, // Blazing Hippogryph + 75614, // Celestial Steed + 75973 // X-53 Touring Rocket + }, [](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; + }); + + // Lock and Load (Rank 1) + ApplySpellFix({ 56342 }, [](SpellInfo* spellInfo) + { + // @workaround: Delete dummy effect from rank 1 + // effect apply aura has NO_TARGET but core still applies it to caster (same as above) + spellInfo->Effects[EFFECT_2].Effect = 0; + }); + + // Roar of Sacrifice + ApplySpellFix({ 53480 }, [](SpellInfo* spellInfo) + { + // missing spell effect 2 data, taken from 4.3.4 + spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA; + spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY; + spellInfo->Effects[EFFECT_1].MiscValue = 127; + spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY); + }); + + ApplySpellFix({ + 42005, // Bloodboil + 38296, // Spitfire Totem + 37676, // Insidious Whisper + 46008, // Negative Energy + 45641, // Fire Bloom + 55665, // Life Drain - Sapphiron (H) + 28796 // Poison Bolt Volly - Faerlina + }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 5; + }); + + + // Curse of the Plaguebringer - Noth (H) + ApplySpellFix({ 54835 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 8; + }); + + ApplySpellFix({ + 40827, // Sinful Beam + 40859, // Sinister Beam + 40860, // Vile Beam + 40861, // Wicked Beam + 54098 // Poison Bolt Volly - Faerlina (H) + }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 10; + }); + + // Unholy Frenzy + ApplySpellFix({ 50312 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 15; + }); + + // Murmur's Touch + ApplySpellFix({ 33711, 38794 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 1; + spellInfo->Effects[EFFECT_0].TriggerSpell = 33760; + }); + + // Fingers of Frost + ApplySpellFix({ 44544 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(685904631, 1151048, 0); + }); + + // Magic Suppression - DK + ApplySpellFix({ 49224, 49610, 49611 }, [](SpellInfo* spellInfo) + { + spellInfo->ProcCharges = 0; + }); + + // Death and Decay + ApplySpellFix({ 52212 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; + }); + + // Oscillation Field + ApplySpellFix({ 37408 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + }); + + // Everlasting Affliction + ApplySpellFix({ 47201, 47202, 47203, 47204, 47205 }, [](SpellInfo* spellInfo) + { + // add corruption to affected spells + spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 2; + }); + + // Renewed Hope + ApplySpellFix({ + 57470, // (Rank 1) + 57472 // (Rank 2) + }, [](SpellInfo* spellInfo) + { + // should also affect Flash Heal + spellInfo->Effects[EFFECT_0].SpellClassMask[0] |= 0x800; + }); + + // 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); + }); + + // 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 = UI64LIT(1) << (FORM_CAT - 1); + }); + + ApplySpellFix({ 48421 }, [](SpellInfo* spellInfo) + { + spellInfo->Stances = UI64LIT(1) << (FORM_MOONKIN - 1); + }); + + ApplySpellFix({ 48422 }, [](SpellInfo* spellInfo) + { + spellInfo->Stances = UI64LIT(1) << (FORM_TREE - 1); + }); + + // Elemental Oath + ApplySpellFix({ + 51466, // (Rank 1) + 51470 // (Rank 2) + }, [](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) + { + // with this spell atrribute aura can be stacked several times + spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFT; + }); + + // Hymn of Hope + ApplySpellFix({ 64904 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT; + }); + + // Improved Stings (Rank 2) + ApplySpellFix({ 19465 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + }); + + // 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({ 65142 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 &= ~SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + }); + + // Ebon Plague + ApplySpellFix({ 51735, 51734, 51726 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + spellInfo->SpellFamilyFlags[2] = 0x10; + spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN; + }); + + // Parasitic Shadowfiend Passive + ApplySpellFix({ 41913 }, [](SpellInfo* spellInfo) + { + // proc debuff, and summon infinite fiends + spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY; + }); + + 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 + 16177, // Ancestral Fortitude (Rank 1) + 16236, // Ancestral Fortitude (Rank 2) + 16237, // Ancestral Fortitude (Rank 3) + 47930, // Grace + 45145, // Snake Trap Effect (Rank 1) + 13812, // Explosive Trap Effect (Rank 1) + 14314, // Explosive Trap Effect (Rank 2) + 14315, // Explosive Trap Effect (Rank 3) + 27026, // Explosive Trap Effect (Rank 4) + 49064, // Explosive Trap Effect (Rank 5) + 49065, // Explosive Trap Effect (Rank 6) + 43446, // Explosive Trap Effect (Hexlord Malacrass) + 50661, // Weakened Resolve + 68979, // Unleashed Souls + 48714, // Compelled + 7853 // The Art of Being a Water Terror: Force Cast on Player + }, [](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% + }); + + ApplySpellFix({ + 50526, // Wandering Plague + 15290 // Vampiric Embrace + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_INITIAL_AGGRO; + }); + + // Improved Devouring Plague + ApplySpellFix({ 63675 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; + }); + + // Deep Wounds + ApplySpellFix({ 12721 }, [](SpellInfo* spellInfo) + { + // shouldnt ignore resillience or damage taken auras because its damage is not based off a spell. + spellInfo->AttributesEx4 &= ~SPELL_ATTR4_FIXED_DAMAGE; + }); + + // Tremor Totem (instant pulse) + ApplySpellFix({ 8145 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; + spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY; + }); + + // Earthbind Totem (instant pulse) + ApplySpellFix({ 6474 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY; + }); + + // Flametongue Totem (Aura) + ApplySpellFix({ + 52109, // rank 1 + 52110, // rank 2 + 52111, // rank 3 + 52112, // rank 4 + 52113, // rank 5 + 58651, // rank 6 + 58654, // rank 7 + 58655 // rank 8 + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(); + spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(); + }); + + // Marked for Death + ApplySpellFix({ + 53241, // (Rank 1) + 53243, // (Rank 2) + 53244, // (Rank 3) + 53245, // (Rank 4) + 53246 // (Rank 5) + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00067801, 0x10820001, 0x00000801); + }); + + ApplySpellFix({ + 70728, // Exploit Weakness (needs target selection script) + 70840 // Devious Minds (needs target selection script) + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_PET); + }); + + // Culling The Herd (needs target selection script) + 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) + { + // force seat 0, vehicle doesn't have the required seat flags for "no seat specified (-1)" + spellInfo->Effects[EFFECT_0].BasePoints = 0; + }); + + ApplySpellFix({ + 64745, // Item - Death Knight T8 Tank 4P Bonus + 64936 // Item - Warrior T8 Protection 4P Bonus + }, [](SpellInfo* spellInfo) + { + // 100% chance of procc'ing, not -10% (chance calculated in PrepareTriggersExecutedOnHit) + spellInfo->Effects[EFFECT_0].BasePoints = 100; + }); + + // Entangling Roots -- Nature's Grasp Proc + ApplySpellFix({ + 19970, // (Rank 6) + 19971, // (Rank 5) + 19972, // (Rank 4) + 19973, // (Rank 3) + 19974, // (Rank 2) + 19975, // (Rank 1) + 27010, // (Rank 7) + 53313 // (Rank 8) + }, [](SpellInfo* spellInfo) + { + spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(1); + }); + + // 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; + }); + + // Death Knight T10 Tank 2P Bonus + ApplySpellFix({ 70650 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER; + }); + + ApplySpellFix({ + 71838, // Drain Life - Bryntroll Normal + 71839 // Drain Life - Bryntroll Heroic + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT; + }); + + ApplySpellFix({ + 56606, // Ride Jokkum + 61791 // Ride Vehicle (Yogg-Saron) + }, [](SpellInfo* spellInfo) + { + /// @todo: remove this when basepoints of all Ride Vehicle auras are calculated correctly + spellInfo->Effects[EFFECT_0].BasePoints = 1; + }); + + // Black Magic + ApplySpellFix({ 59630 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes |= SPELL_ATTR0_PASSIVE; + }); + + ApplySpellFix({ + 17364, // Stormstrike + 48278, // Paralyze + 53651 // Light's Beacon + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + }); + + ApplySpellFix({ + 51798, // Brewfest - Relay Race - Intro - Quest Complete + 47134 // Quest Complete + }, [](SpellInfo* spellInfo) + { + //! HACK: This spell break quest complete for alliance and on retail not used °_O + spellInfo->Effects[EFFECT_0].Effect = 0; + }); + + 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_INTERRUPT_ONLY_NONPLAYER; + }); + + ApplySpellFix({ + 42490, // Energized! + 42492, // Cast Energized + 43115 // Plague Vial + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT; + }); + + ApplySpellFix({ + 46842, // Flame Ring + 46836 // Flame Patch + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(); + }); + + // Test Ribbon Pole Channel + ApplySpellFix({ 29726 }, [](SpellInfo* spellInfo) + { + spellInfo->InterruptFlags &= ~AURA_INTERRUPT_FLAG_CAST; + }); + + ApplySpellFix({ + 42767, // Sic'em + 43092 // Stop the Ascension!: Halfdan's Soul Destruction + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY); + }); + + // Polymorph (Six Demon Bag) + ApplySpellFix({ 14621 }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(4); // Medium Range + }); + + // Concussive Barrage + ApplySpellFix({ 35101 }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(155); // Hunter Range (Long) + }); + + // Desecration + ApplySpellFix({ + 55741, // (Rank 1) + 68766 // (Rank 2) + }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(2); // Melee Range + }); + + // Safeguard + ApplySpellFix({ + 46946, // (Rank 1) + 46947 // (Rank 2) + }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(34); // Twenty-Five yards + }); + + // + // VIOLET HOLD SPELLS + // + // Water Globule (Ichoron) + ApplySpellFix({ 54258, 54264, 54265, 54266, 54267 }, [](SpellInfo* spellInfo) + { + // in 3.3.5 there is only one radius in dbc which is 0 yards in this + // use max radius from 4.3.4 + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); + }); + // ENDOF VIOLET HOLD + + // + // ULDUAR SPELLS + // + // Pursued (Flame Leviathan) + ApplySpellFix({ 62374 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd + }); + + // Focused Eyebeam Summon Trigger (Kologarn) + ApplySpellFix({ 63342 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 1; + }); + + ApplySpellFix({ + 62716, // Growth of Nature (Freya) + 65584, // Growth of Nature (Freya) + 64381 // Strength of the Pack (Auriaya) + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + }); + + ApplySpellFix({ + 63018, // Searing Light (XT-002) + 65121, // Searing Light (25m) (XT-002) + 63024, // Gravity Bomb (XT-002) + 64234 // Gravity Bomb (25m) (XT-002) + }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 1; + }); + + // Boom (XT-002) + ApplySpellFix({ 62834 }, [](SpellInfo* spellInfo) + { + // This hack is here because we suspect our implementation of spell effect execution on targets + // is done in the wrong order. We suspect that EFFECT_0 needs to be applied on all targets, + // then EFFECT_1, etc - instead of applying each effect on target1, then target2, etc. + // The above situation causes the visual for this spell to be bugged, so we remove the instakill + // effect and implement a script hack for that. + spellInfo->Effects[EFFECT_1].Effect = 0; + }); + + ApplySpellFix({ + 64386, // Terrifying Screech (Auriaya) + 64389, // Sentinel Blast (Auriaya) + 64678 // Sentinel Blast (Auriaya) + }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds, wrong DBC data? + }); + + // Potent Pheromones (Freya) + ApplySpellFix({ 64321 }, [](SpellInfo* spellInfo) + { + // spell should dispel area aura, but doesn't have the attribute + // may be db data bug, or blizz may keep reapplying area auras every update with checking immunity + // that will be clear if we get more spells with problem like this + spellInfo->AttributesEx |= SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY; + }); + + // Spinning Up (Mimiron) + ApplySpellFix({ 63414 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + spellInfo->ChannelInterruptFlags = 0; + }); + + // Rocket Strike (Mimiron) + ApplySpellFix({ 63036 }, [](SpellInfo* spellInfo) + { + spellInfo->Speed = 0; + }); + + // Magnetic Field (Mimiron) + ApplySpellFix({ 64668 }, [](SpellInfo* spellInfo) + { + spellInfo->Mechanic = MECHANIC_NONE; + }); + + // Empowering Shadows (Yogg-Saron) + ApplySpellFix({ 64468, 64486 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 3; // same for both modes? + }); + + // Cosmic Smash (Algalon the Observer) + ApplySpellFix({ 62301 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 1; + }); + + // Cosmic Smash (Algalon the Observer) + ApplySpellFix({ 64598 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 3; + }); + + // 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->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd + }); + + ApplySpellFix({ + 64014, // Expedition Base Camp Teleport + 64024, // Conservatory Teleport + 64025, // Halls of Invention Teleport + 64028, // Colossal Forge Teleport + 64029, // Shattered Walkway Teleport + 64030, // Antechamber Teleport + 64031, // Scrapyard Teleport + 64032, // Formation Grounds Teleport + 65042 // Prison of Yogg-Saron Teleport + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); + }); + // ENDOF ULDUAR SPELLS + + // + // TRIAL OF THE CRUSADER SPELLS + // + // Infernal Eruption + ApplySpellFix({ 66258, 67901 }, [](SpellInfo* spellInfo) + { + // increase duration from 15 to 18 seconds because caster is already + // unsummoned when spell missile hits the ground so nothing happen in result + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(85); + }); + // ENDOF TRIAL OF THE CRUSADER SPELLS + + // + // HALLS OF REFLECTION SPELLS + // + ApplySpellFix({ + 72435, // Defiling Horror + 72452 // Defiling Horror + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd + }); + + // Achievement Check + ApplySpellFix({ 72830 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd + }); + + // Start Halls of Reflection Quest AE + ApplySpellFix({ 72900 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd + }); + // ENDOF HALLS OF REFLECTION SPELLS + + // + // ICECROWN CITADEL SPELLS + // + ApplySpellFix({ + // THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK + // THE ONLY REASON ITS HERE IS THAT CURRENT GRID SYSTEM + // DOES NOT ALLOW FAR OBJECT SELECTION (dist > 333) + 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_DEST_DB); + }); + + // Bone Slice (Lord Marrowgar) + ApplySpellFix({ 69055, 70814 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); // 5yd + }); + + ApplySpellFix({ + 69075, // Bone Storm (Lord Marrowgar) + 70834, // Bone Storm (Lord Marrowgar) + 70835, // Bone Storm (Lord Marrowgar) + 70836, // Bone Storm (Lord Marrowgar) + 72864, // Death Plague (Rotting Frost Giant) + 71160, // Plague Stench (Stinky) + 71161, // Plague Stench (Stinky) + 71123 // Decimate (Stinky & Precious) + }, [](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_STACK_FOR_DIFF_CASTERS; + }); + + // Lock Players and Tap Chest + ApplySpellFix({ 72347 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 &= ~SPELL_ATTR3_NO_INITIAL_AGGRO; + }); + + // Award Reputation - Boss Kill + ApplySpellFix({ 73843, 73844, 73845, 73846 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd + }); + + ApplySpellFix({ + 72378, // Blood Nova (Deathbringer Saurfang) + 73058, // Blood Nova (Deathbringer Saurfang) + 72769 // Scent of Blood (Deathbringer Saurfang) + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); + }); + + // Scent of Blood (Deathbringer Saurfang) + ApplySpellFix({ 72771 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); + }); + + // 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; + }); + + // Coldflame Jets (Traps after Saurfang) + ApplySpellFix({ 70460 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(1); // 10 seconds + }); + + 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); + }); + + // Ooze flood + ApplySpellFix({ 69783, 69797, 69799, 69802 }, [](SpellInfo* spellInfo) + { + // Those spells are cast on creatures with same entry as caster while they have TARGET_UNIT_NEARBY_ENTRY. + spellInfo->AttributesEx |= SPELL_ATTR1_CANT_TARGET_SELF; + }); + + // Awaken Plagued Zombies + ApplySpellFix({ 71159 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21); + }); + + // Volatile Ooze Beam Protection (Professor Putricide) + ApplySpellFix({ 70530 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA; // for an unknown reason this was SPELL_EFFECT_APPLY_AREA_AURA_RAID + }); + + // Mutated Strength (Professor Putricide) + ApplySpellFix({ 71604, 72673, 72674, 72675 }, [](SpellInfo* spellInfo) + { + // THIS IS HERE BECAUSE COOLDOWN ON CREATURE PROCS WERE NOT IMPLEMENTED WHEN THE SCRIPT WAS WRITTEN + spellInfo->Effects[EFFECT_1].Effect = 0; + }); + + // Mutated Plague (Professor Putricide) + ApplySpellFix({ 72454, 72464, 72506, 72507 }, [](SpellInfo* spellInfo) + { + 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); + }); + + 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 + }); + + // Empowered Flare (Blood Prince Council) + ApplySpellFix({ 71708, 72785, 72786, 72787 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; + }); + + // Swarming Shadows + ApplySpellFix({ 71266, 72890 }, [](SpellInfo* spellInfo) + { + spellInfo->AreaGroupId = 0; // originally, these require area 4522, which is... outside of Icecrown Citadel + }); + + // Corruption + ApplySpellFix({ 70602 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; + }); + + // 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) + }); + + // Frostbolt Volley (only heroic) + ApplySpellFix({ 72015, 72016 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_40_YARDS); + }); + + // 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(); + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(157); // 90yd + }); + + 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); + }); + + // Frost Bomb + ApplySpellFix({ 69846 }, [](SpellInfo* spellInfo) + { + spellInfo->Speed = 0.0f; // This spell's summon happens instantly + }); + + // Chilled to the Bone + ApplySpellFix({ 70106 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; + spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS; + }); + + // Ice Lock + ApplySpellFix({ 71614 }, [](SpellInfo* spellInfo) + { + spellInfo->Mechanic = MECHANIC_STUN; + }); + + // Defile + ApplySpellFix({ 72762 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(559); // 53 seconds + }); + + // Defile + ApplySpellFix({ 72743 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(22); // 45 seconds + }); + + // Defile + 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_UNAFFECTED_BY_INVULNERABILITY; + }); + + // Raging Spirit Visual + ApplySpellFix({ 69198 }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd + }); + + // 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 + }); + + // Harvest Soul + ApplySpellFix({ 73655 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; + }); + + // Summon Shadow Trap + ApplySpellFix({ 73540 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(23); // 90 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_5_YARDS); // 5yd + }); + + // Restore Soul + ApplySpellFix({ 72595, 73650 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd + }); + + // 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 + }); + + // 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( + { + 75127, // Kill Frostmourne Players + 72351, // Fury of Frostmourne + 72431, // Jump (removes Fury of Frostmourne debuff) + 72429, // Mass Resurrection + 73159, // Play Movie + 73582 // Trigger Vile Spirit (Inside, Heroic) + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd + }); + + // Raise Dead + ApplySpellFix({ 72376 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 3; + 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_20_YARDS); // 20yd + spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT; + }); + // ENDOF ICECROWN CITADEL SPELLS + + // + // RUBY SANCTUM SPELLS + // + // Soul Consumption + ApplySpellFix({ 74799 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_12_YARDS); + }); + + // 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_CAN_TARGET_INVISIBLE; + spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; + }); + + // Combustion and Consumption Heroic versions lacks radius data + ApplySpellFix({ 75875 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].Mechanic = MECHANIC_NONE; + spellInfo->Effects[EFFECT_1].Mechanic = MECHANIC_SNARE; + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); + }); + + ApplySpellFix({ 75884 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); + }); + + ApplySpellFix({ 75883, 75876 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); + }); + // ENDOF RUBY SANCTUM SPELLS + + // + // EYE OF ETERNITY SPELLS + // + ApplySpellFix({ + // All spells below work even without these changes. The LOS attribute is due to problem + // from collision between maps & gos with active destroyed state. + 57473, // Arcane Storm bonus explicit visual spell + 57431, // Summon Static Field + 56091, // Flame Spike (Wyrmrest Skytalon) + 56092, // Engulf in Flames (Wyrmrest Skytalon) + 57090, // Revivify (Wyrmrest Skytalon) + 57143 // Life Burst (Wyrmrest Skytalon) + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; + }); + + // Arcane Barrage (cast by players and NONMELEEDAMAGELOG with caster Scion of Eternity (original caster)). + ApplySpellFix({ 63934 }, [](SpellInfo* spellInfo) + { + // This would never crit on retail and it has attribute for SPELL_ATTR3_NO_DONE_BONUS because is handled from player, + // until someone figures how to make scions not critting without hack and without making them main casters this should stay here. + spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT; + }); + // ENDOF EYE OF ETERNITY SPELLS + + // + // OCULUS SPELLS + // + ApplySpellFix({ + // The spells below are here because their effect 1 is giving warning due to + // triggered spell not found in any dbc and is missing from encounter source* of data. + // Even judged as clientside these spells can't be guessed for* now. + 49462, // Call Ruby Drake + 49461, // Call Amber Drake + 49345 // Call Emerald Drake + }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].Effect = 0; + }); + // ENDOF OCULUS SPELLS + + // Introspection + ApplySpellFix({ 40055, 40165, 40166, 40167 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes |= SPELL_ATTR0_NEGATIVE_1; + }); + + // Chains of Ice + ApplySpellFix({ 45524 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(); + }); + + // Minor Fortitude + ApplySpellFix({ 2378 }, [](SpellInfo* spellInfo) + { + spellInfo->ManaCost = 0; + spellInfo->ManaPerSecond = 0; + }); + + // Threatening Gaze + ApplySpellFix({ 24314 }, [](SpellInfo* spellInfo) + { + spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CAST | AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_JUMP; + }); + + // + // ISLE OF CONQUEST SPELLS + // + // Teleport + ApplySpellFix({ 66551 }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd + }); + // ENDOF ISLE OF CONQUEST SPELLS + + ApplySpellFix({ + 41485, // Deadly Poison - Black Temple + 41487 // Envenom - Black Temple + }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; + }); + + ApplySpellFix({ + // Proc attribute correction + // Remove procflags from test/debug/deprecated spells to avoid DB Errors + 2479, // Honorless Target + 3232, // Gouge Stun Test + 3409, // Crippling Poison + 4312, // Strider Presence + 5707, // Lifestone Regeneration + 5760, // Mind-numbing Poison + 6727, // Poison Mushroom + 6984, // Frost Shot (Rank 2) + 7164, // Defensive Stance + 7288, // Immolate Cumulative (TEST) (Rank 1) + 7291, // Food (TEST) + 7331, // Healing Aura (TEST) (Rank 1) + 7824, // Blacksmithing Skill +10 + 12551, // Frost Shot + 13218, // Wound Poison (Rank 1) + 13222, // Wound Poison II (Rank 2) + 13223, // Wound Poison III (Rank 3) + 13224, // Wound Poison IV (Rank 4) + 14795, // Venomhide Poison + 16610, // Razorhide + 18099, // Chill Nova + 18802, // Frost Shot + 20000, // Alexander's Test Periodic Aura + 21163, // Polished Armor (Rank 1) + 22818, // Mol'dar's Moxie + 22820, // Slip'kik's Savvy + 23333, // Warsong Flag + 23335, // Silverwing Flag + 25160, // Sand Storm + 27189, // Wound Poison V (Rank 5) + 28726, // Nightmare Seed + 28754, // Fury of the Ashbringer + 30802, // Unleashed Rage (Rank 1) + 31481, // Lung Burst + 32430, // Battle Standard + 32431, // Battle Standard + 32447, // Travel Form + 33370, // Spell Haste + 33807, // Abacus of Violent Odds + 34132, // Gladiator's Totem of the Third Wind + 34135, // Libram of Justice + 34666, // Tamed Pet Passive 08 (DND) + 34667, // Tamed Pet Passive 09 (DND) + 34775, // Dragonspine Flurry + 34889, // Fire Breath (Rank 1) + 34976, // Netherstorm Flag + 35131, // Bladestorm + 35323, // Fire Breath (Rank 2) + 35336, // Energizing Spores + 36148, // Chill Nova + 36613, // Aspect of the Spirit Hunter + 36786, // Soul Chill + 37174, // Perceived Weakness + 37482, // Exploited Weakness + 37526, // Battle Rush + 37588, // Dive + 37985, // Fire Breath + 38317, // Forgotten Knowledge + 38843, // Soul Chill + 39015, // Atrophic Blow + 40396, // Fel Infusion + 40603, // Taunt Gurtogg + 40803, // Ron's Test Buff + 41435, // The Twin Blades of Azzinoth + 42369, // Merciless Libram of Justice + 42371, // Merciless Gladiator's Totem of the Third Wind + 42636, // Birmingham Tools Test 3 + 43727, // Vengeful Libram of Justice + 43729, // Vengeful Gladiator's Totem of the Third Wind + 43817, // Focused Assault + 44305, // You're a ...! (Effects2) + 45384, // Birmingham Tools Test 4 + 45433, // Birmingham Tools Test 5 + 46093, // Brutal Libram of Justice + 46099, // Brutal Gladiator's Totem of the Third Wind + 46705, // Honorless Target + 49883, // Flames + 50365, // Improved Blood Presence (Rank 1) + 50371, // Improved Blood Presence (Rank 2) + 50655, // Frost Cut + 50995, // Empowered Blood Presence (Rank 1) + 55482, // Fire Breath (Rank 3) + 55483, // Fire Breath (Rank 4) + 55484, // Fire Breath (Rank 5) + 55485, // Fire Breath (Rank 6) + 57974, // Wound Poison VI (Rank 6) + 57975, // Wound Poison VII (Rank 7) + 60062, // Essence of Life + 60302, // Meteorite Whetstone + 60437, // Grim Toll + 60492, // Embrace of the Spider + 63024, // Gravity Bomb + 64772, // Comet's Trail + 65004, // Alacrity of the Elements + 65019, // Mjolnir Runestone + 65024, // Implosion + 71003, // Vegard's Touch + 72559, // Birmingham Tools Test 3 + 72560, // Birmingham Tools Test 3 + 72561, // Birmingham Tools Test 5 + 72980 // Shadow Resonance + }, [](SpellInfo* spellInfo) + { + spellInfo->ProcFlags = 0; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { - spellInfo = mSpellInfoMap[i]; + SpellInfo* spellInfo = mSpellInfoMap[i]; if (!spellInfo) continue; @@ -2905,1046 +4488,6 @@ void SpellMgr::LoadSpellInfoCorrections() if (spellInfo->ActiveIconID == 2158) // flight spellInfo->Attributes |= SPELL_ATTR0_PASSIVE; - switch (spellInfo->Id) - { - case 63026: // Force Cast (HACK: Target shouldn't be changed) - case 63137: // Force Cast (HACK: Target shouldn't be changed; summon position should be untied from spell destination) - spellInfo->Effects[0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); - break; - case 42436: // Drink! (Brewfest) - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY); - break; - case 52611: // Summon Skeletons - case 52612: // Summon Skeletons - spellInfo->Effects[EFFECT_0].MiscValueB = 64; - break; - case 40244: // Simon Game Visual - case 40245: // Simon Game Visual - case 40246: // Simon Game Visual - case 40247: // Simon Game Visual - case 42835: // Spout, remove damage effect, only anim is needed - spellInfo->Effects[EFFECT_0].Effect = 0; - break; - case 63665: // Charge (Argent Tournament emote on riders) - case 31298: // Sleep (needs target selection script) - case 51904: // Summon Ghouls On Scarlet Crusade (this should use conditions table, script for this spell needs to be fixed) - case 2895: // Wrath of Air Totem rank 1 (Aura) - case 68933: // Wrath of Air Totem rank 2 (Aura) - case 29200: // Purify Helboar Meat - case 10872: // Abolish Disease Effect - case 3137: // Abolish Poison Effect - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(); - break; - case 56690: // Thrust Spear - case 60586: // Mighty Spear Thrust - case 60776: // Claw Swipe - case 60881: // Fatal Strike - case 60864: // Jaws of Death - spellInfo->AttributesEx4 |= SPELL_ATTR4_FIXED_DAMAGE; - break; - case 31344: // Howl of Azgalor - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yards instead of 50000?! - break; - case 42818: // Headless Horseman - Wisp Flight Port - case 42821: // Headless Horseman - Wisp Flight Missile - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards - break; - case 36350: // They Must Burn Bomb Aura (self) - spellInfo->Effects[EFFECT_0].TriggerSpell = 36325; // They Must Burn Bomb Drop (DND) - break; - case 61407: // Energize Cores - case 62136: // Energize Cores - case 54069: // Energize Cores - case 56251: // Energize Cores - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENTRY); - break; - case 50785: // Energize Cores - case 59372: // Energize Cores - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ENEMY); - break; - case 8494: // Mana Shield (rank 2) - // because of bug in dbc - spellInfo->ProcChance = 0; - break; - case 51528: // Maelstrom Weapon (Rank 1) - case 51529: // Maelstrom Weapon (Rank 2) - case 51530: // Maelstrom Weapon (Rank 3) - case 51531: // Maelstrom Weapon (Rank 4) - case 51532: // Maelstrom Weapon (Rank 5) - // due to discrepancies between ranks - spellInfo->EquippedItemSubClassMask = 0x0000FC33; - spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED; - break; - case 20335: // Heart of the Crusader - case 20336: - case 20337: - case 53228: // Rapid Killing (Rank 1) - case 53232: // Rapid Killing (Rank 2) - case 63320: // Glyph of Life Tap - // Entries were not updated after spell effect change, we have to do that manually :/ - spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED; - break; - case 51627: // Turn the Tables (Rank 1) - case 51628: // Turn the Tables (Rank 2) - case 51629: // Turn the Tables (Rank 3) - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 52910: // Turn the Tables - case 52914: // Turn the Tables - case 52915: // Turn the Tables - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - break; - case 29441: // Magic Absorption (Rank 1) - case 29444: // Magic Absorption (Rank 2) - // Caused off by 1 calculation (ie 79 resistance at level 80) - spellInfo->SpellLevel = 0; - break; - case 5308: // Execute (Rank 1) - case 20658: // Execute (Rank 2) - case 20660: // Execute (Rank 3) - case 20661: // Execute (Rank 4) - case 20662: // Execute (Rank 5) - case 25234: // Execute (Rank 6) - case 25236: // Execute (Rank 7) - case 47470: // Execute (Rank 8) - case 47471: // Execute (Rank 9) - spellInfo->AttributesEx3 |= SPELL_ATTR3_CANT_TRIGGER_PROC; - break; - case 59725: // Improved Spell Reflection - aoe aura - // Target entry seems to be wrong for this spell :/ - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER_AREA_PARTY); - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); - break; - case 44978: // Wild Magic - case 45001: - case 45002: - case 45004: - case 45006: - case 45010: - case 31347: // Doom - case 41635: // Prayer of Mending - case 44869: // Spectral Blast - case 45027: // Revitalize - case 45976: // Muru Portal Channel - case 39365: // Thundering Storm - case 41071: // Raise Dead (HACK) - case 52124: // Sky Darkener Assault - case 42442: // Vengeance Landing Cannonfire - case 45863: // Cosmetic - Incinerate to Random Target - case 25425: // Shoot - case 45761: // Shoot - case 42611: // Shoot - case 61588: // Blazing Harpoon - case 52479: // Gift of the Harvester - case 48246: // Ball of Flame - case 36327: // Shoot Arcane Explosion Arrow - case 55479: // Force Obedience - case 28560: // Summon Blizzard (Sapphiron) - case 53096: // Quetz'lun's Judgment - case 70743: // AoD Special - case 70614: // AoD Special - Vegard - case 4020: // Safirdrang's Chill - case 52438: // Summon Skittering Swarmer (Force Cast) - case 52449: // Summon Skittering Infector (Force Cast) - case 53609: // Summon Anub'ar Assassin (Force Cast) - case 53457: // Summon Impale Trigger (AoE) - spellInfo->MaxAffectedTargets = 1; - break; - case 36384: // Skartax Purple Beam - spellInfo->MaxAffectedTargets = 2; - break; - case 41376: // Spite - case 39992: // Needle Spine - case 29576: // Multi-Shot - case 40816: // Saber Lash - case 37790: // Spread Shot - case 46771: // Flame Sear - case 45248: // Shadow Blades - case 41303: // Soul Drain - case 54172: // Divine Storm (heal) - case 29213: // Curse of the Plaguebringer - Noth - case 28542: // Life Drain - Sapphiron - case 66588: // Flaming Spear - case 54171: // Divine Storm - spellInfo->MaxAffectedTargets = 3; - break; - case 38310: // Multi-Shot - case 53385: // Divine Storm (Damage) - spellInfo->MaxAffectedTargets = 4; - break; - case 47977: // Magic Broom - case 48025: // Headless Horseman's Mount - case 54729: // Winged Steed of the Ebon Blade - case 71342: // Big Love Rocket - case 72286: // Invincible - case 74856: // Blazing Hippogryph - case 75614: // Celestial Steed - case 75973: // X-53 Touring Rocket - // 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; - break; - case 56342: // Lock and Load (Rank 1) - // @workaround: Delete dummy effect from rank 1 - // effect apply aura has NO_TARGET but core still applies it to caster (same as above) - spellInfo->Effects[EFFECT_2].Effect = 0; - break; - case 53480: // Roar of Sacrifice - // missing spell effect 2 data, taken from 4.3.4 - spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_APPLY_AURA; - spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_DUMMY; - spellInfo->Effects[EFFECT_1].MiscValue = 127; - spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY); - break; - case 42005: // Bloodboil - case 38296: // Spitfire Totem - case 37676: // Insidious Whisper - case 46008: // Negative Energy - case 45641: // Fire Bloom - case 55665: // Life Drain - Sapphiron (H) - case 28796: // Poison Bolt Volly - Faerlina - spellInfo->MaxAffectedTargets = 5; - break; - case 54835: // Curse of the Plaguebringer - Noth (H) - spellInfo->MaxAffectedTargets = 8; - break; - case 40827: // Sinful Beam - case 40859: // Sinister Beam - case 40860: // Vile Beam - case 40861: // Wicked Beam - case 54098: // Poison Bolt Volly - Faerlina (H) - spellInfo->MaxAffectedTargets = 10; - break; - case 50312: // Unholy Frenzy - spellInfo->MaxAffectedTargets = 15; - break; - case 33711: // Murmur's Touch - case 38794: - spellInfo->MaxAffectedTargets = 1; - spellInfo->Effects[EFFECT_0].TriggerSpell = 33760; - break; - case 44544: // Fingers of Frost - spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(685904631, 1151048, 0); - break; - case 49224: // Magic Suppression - DK - case 49610: // Magic Suppression - DK - case 49611: // Magic Suppression - DK - spellInfo->ProcCharges = 0; - break; - case 52212: // Death and Decay - spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; - break; - case 37408: // Oscillation Field - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 47201: // Everlasting Affliction - case 47202: - case 47203: - case 47204: - case 47205: - // add corruption to affected spells - spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 2; - break; - case 57470: // Renewed Hope (Rank 1) - case 57472: // Renewed Hope (Rank 2) - // should also affect Flash Heal - spellInfo->Effects[EFFECT_0].SpellClassMask[0] |= 0x800; - break; - case 51852: // The Eye of Acherus (no spawn in phase 2 in db) - spellInfo->Effects[EFFECT_0].MiscValue |= 1; - break; - case 51912: // Crafty's Ultra-Advanced Proto-Typical Shortening Blaster - spellInfo->Effects[EFFECT_0].Amplitude = 3000; - break; - case 29809: // Desecration Arm - 36 instead of 37 - typo? :/ - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_7_YARDS); - break; - // Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data - // To prevent aura staying on target after talent unlearned - case 48420: - spellInfo->Stances = UI64LIT(1) << (FORM_CAT - 1); - break; - case 48421: - spellInfo->Stances = UI64LIT(1) << (FORM_MOONKIN - 1); - break; - case 48422: - spellInfo->Stances = UI64LIT(1) << (FORM_TREE - 1); - break; - case 51466: // Elemental Oath (Rank 1) - case 51470: // Elemental Oath (Rank 2) - 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); - break; - case 47569: // Improved Shadowform (Rank 1) - // with this spell atrribute aura can be stacked several times - spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFT; - break; - case 64904: // Hymn of Hope - spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT; - break; - case 19465: // Improved Stings (Rank 2) - spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - break; - case 30421: // Nether Portal - Perseverence - spellInfo->Effects[EFFECT_2].BasePoints += 30000; - break; - case 16834: // Natural shapeshifter - case 16835: - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21); - break; - case 65142: // Ebon Plague - spellInfo->AttributesEx3 &= ~SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 51735: // Ebon Plague - case 51734: - case 51726: - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - spellInfo->SpellFamilyFlags[2] = 0x10; - spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN; - break; - case 41913: // Parasitic Shadowfiend Passive - spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY; // proc debuff, and summon infinite fiends - break; - case 27892: // To Anchor 1 - case 27928: // To Anchor 1 - case 27935: // To Anchor 1 - case 27915: // Anchor to Skulls - case 27931: // Anchor to Skulls - case 27937: // Anchor to Skulls - case 16177: // Ancestral Fortitude (Rank 1) - case 16236: // Ancestral Fortitude (Rank 2) - case 16237: // Ancestral Fortitude (Rank 3) - case 47930: // Grace - case 45145: // Snake Trap Effect (Rank 1) - case 13812: // Explosive Trap Effect (Rank 1) - case 14314: // Explosive Trap Effect (Rank 2) - case 14315: // Explosive Trap Effect (Rank 3) - case 27026: // Explosive Trap Effect (Rank 4) - case 49064: // Explosive Trap Effect (Rank 5) - case 49065: // Explosive Trap Effect (Rank 6) - case 43446: // Explosive Trap Effect (Hexlord Malacrass) - case 50661: // Weakened Resolve - case 68979: // Unleashed Souls - case 48714: // Compelled - case 7853: // The Art of Being a Water Terror: Force Cast on Player - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); - break; - // 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 - case 29214: // Wrath of the Plaguebringer - case 54836: // Wrath of the Plaguebringer - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY); - spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_SRC_AREA_ALLY); - break; - case 57994: // Wind Shear - 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% - break; - case 50526: // Wandering Plague - case 15290: // Vampiric Embrace - spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_INITIAL_AGGRO; - break; - case 63675: // Improved Devouring Plague - spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; - break; - case 12721: // Deep Wounds shouldnt ignore resillience or damage taken auras because its damage is not based off a spell. - spellInfo->AttributesEx4 = 0; - break; - case 8145: // Tremor Totem (instant pulse) - spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; - /*no break*/ - case 6474: // Earthbind Totem (instant pulse) - spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY; - break; - case 52109: // Flametongue Totem rank 1 (Aura) - case 52110: // Flametongue Totem rank 2 (Aura) - case 52111: // Flametongue Totem rank 3 (Aura) - case 52112: // Flametongue Totem rank 4 (Aura) - case 52113: // Flametongue Totem rank 5 (Aura) - case 58651: // Flametongue Totem rank 6 (Aura) - case 58654: // Flametongue Totem rank 7 (Aura) - case 58655: // Flametongue Totem rank 8 (Aura) - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(); - spellInfo->Effects[EFFECT_1].TargetB = SpellImplicitTargetInfo(); - break; - case 53241: // Marked for Death (Rank 1) - case 53243: // Marked for Death (Rank 2) - case 53244: // Marked for Death (Rank 3) - case 53245: // Marked for Death (Rank 4) - case 53246: // Marked for Death (Rank 5) - spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00067801, 0x10820001, 0x00000801); - break; - case 70728: // Exploit Weakness (needs target selection script) - case 70840: // Devious Minds (needs target selection script) - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_PET); - break; - case 70893: // Culling The Herd (needs target selection script) - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_MASTER); - break; - case 54800: // Sigil of the Frozen Conscience - 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); - break; - case 64949: // Idol of the Flourishing Life - spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x00000000, 0x02000000, 0x00000000); - spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER; - break; - case 34231: // Libram of the Lightbringer - case 60792: // Libram of Tolerance - case 64956: // Libram of the Resolute - spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x80000000, 0x00000000, 0x00000000); - spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER; - break; - case 28851: // Libram of Light - case 28853: // Libram of Divinity - case 32403: // Blessed Book of Nagrand - spellInfo->Effects[EFFECT_0].SpellClassMask = flag96(0x40000000, 0x00000000, 0x00000000); - spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_FLAT_MODIFIER; - break; - case 45602: // Ride Carpet - spellInfo->Effects[EFFECT_0].BasePoints = 0; // force seat 0, vehicle doesn't have the required seat flags for "no seat specified (-1)" - break; - case 64745: // Item - Death Knight T8 Tank 4P Bonus - case 64936: // Item - Warrior T8 Protection 4P Bonus - spellInfo->Effects[EFFECT_0].BasePoints = 100; // 100% chance of procc'ing, not -10% (chance calculated in PrepareTriggersExecutedOnHit) - break; - case 19970: // Entangling Roots (Rank 6) -- Nature's Grasp Proc - case 19971: // Entangling Roots (Rank 5) -- Nature's Grasp Proc - case 19972: // Entangling Roots (Rank 4) -- Nature's Grasp Proc - case 19973: // Entangling Roots (Rank 3) -- Nature's Grasp Proc - case 19974: // Entangling Roots (Rank 2) -- Nature's Grasp Proc - case 19975: // Entangling Roots (Rank 1) -- Nature's Grasp Proc - case 27010: // Entangling Roots (Rank 7) -- Nature's Grasp Proc - case 53313: // Entangling Roots (Rank 8) -- Nature's Grasp Proc - spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(1); - break; - case 61719: // Easter Lay Noblegarden Egg Aura - Interrupt flags copied from aura which this aura is linked with - spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE; - break; - case 70650: // Death Knight T10 Tank 2P Bonus - spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER; - break; - case 71838: // Drain Life - Bryntroll Normal - case 71839: // Drain Life - Bryntroll Heroic - spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT; - break; - case 56606: // Ride Jokkum - case 61791: // Ride Vehicle (Yogg-Saron) - /// @todo: remove this when basepoints of all Ride Vehicle auras are calculated correctly - spellInfo->Effects[EFFECT_0].BasePoints = 1; - break; - case 59630: // Black Magic - spellInfo->Attributes |= SPELL_ATTR0_PASSIVE; - break; - case 17364: // Stormstrike - case 48278: // Paralyze - case 53651: // Light's Beacon - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 51798: // Brewfest - Relay Race - Intro - Quest Complete - case 47134: // Quest Complete - //! HACK: This spell break quest complete for alliance and on retail not used °_O - spellInfo->Effects[EFFECT_0].Effect = 0; - break; - case 47476: // Deathknight - Strangulate - case 15487: // Priest - Silence - case 5211: // Druid - Bash - R1 - case 6798: // Druid - Bash - R2 - case 8983: // Druid - Bash - R3 - spellInfo->AttributesEx7 |= SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER; - break; - case 42490: // Energized! - case 42492: // Cast Energized - case 43115: // Plague Vial - spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT; - break; - case 46842: // Flame Ring - case 46836: // Flame Patch - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(); - break; - case 29726: // Test Ribbon Pole Channel - spellInfo->InterruptFlags &= ~AURA_INTERRUPT_FLAG_CAST; - break; - case 42767: // Sic'em - case 43092: // Stop the Ascension!: Halfdan's Soul Destruction - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_NEARBY_ENTRY); - break; - case 14621: // Polymorph (Six Demon Bag) - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(4); // Medium Range - break; - case 35101: // Concussive Barrage - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(155); // Hunter Range (Long) - break; - case 55741: // Desecration (Rank 1) - case 68766: // Desecration (Rank 2) - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(2); // Melee Range - break; - case 46946: // Safeguard (Rank 1) - case 46947: // Safeguard (Rank 2) - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(34); // Twenty-Five yards - break; - // VIOLET HOLD SPELLS - // - case 54258: // Water Globule (Ichoron) - case 54264: // Water Globule (Ichoron) - case 54265: // Water Globule (Ichoron) - case 54266: // Water Globule (Ichoron) - case 54267: // Water Globule (Ichoron) - // in 3.3.5 there is only one radius in dbc which is 0 yards in this case - // use max radius from 4.3.4 - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); - break; - // ENDOF VIOLET HOLD - // - // ULDUAR SPELLS - // - case 62374: // Pursued (Flame Leviathan) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 63342: // Focused Eyebeam Summon Trigger (Kologarn) - spellInfo->MaxAffectedTargets = 1; - break; - case 62716: // Growth of Nature (Freya) - case 65584: // Growth of Nature (Freya) - case 64381: // Strength of the Pack (Auriaya) - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 63018: // Searing Light (XT-002) - case 65121: // Searing Light (25m) (XT-002) - case 63024: // Gravity Bomb (XT-002) - case 64234: // Gravity Bomb (25m) (XT-002) - spellInfo->MaxAffectedTargets = 1; - break; - case 62834: // Boom (XT-002) - // This hack is here because we suspect our implementation of spell effect execution on targets - // is done in the wrong order. We suspect that EFFECT_0 needs to be applied on all targets, - // then EFFECT_1, etc - instead of applying each effect on target1, then target2, etc. - // The above situation causes the visual for this spell to be bugged, so we remove the instakill - // effect and implement a script hack for that. - spellInfo->Effects[EFFECT_1].Effect = 0; - break; - case 64386: // Terrifying Screech (Auriaya) - case 64389: // Sentinel Blast (Auriaya) - case 64678: // Sentinel Blast (Auriaya) - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds, wrong DBC data? - break; - case 64321: // Potent Pheromones (Freya) - // spell should dispel area aura, but doesn't have the attribute - // may be db data bug, or blizz may keep reapplying area auras every update with checking immunity - // that will be clear if we get more spells with problem like this - spellInfo->AttributesEx |= SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY; - break; - case 63414: // Spinning Up (Mimiron) - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); - spellInfo->ChannelInterruptFlags = 0; - break; - case 63036: // Rocket Strike (Mimiron) - spellInfo->Speed = 0; - break; - case 64668: // Magnetic Field (Mimiron) - spellInfo->Mechanic = MECHANIC_NONE; - break; - case 64468: // Empowering Shadows (Yogg-Saron) - case 64486: // Empowering Shadows (Yogg-Saron) - spellInfo->MaxAffectedTargets = 3; // same for both modes? - break; - case 62301: // Cosmic Smash (Algalon the Observer) - spellInfo->MaxAffectedTargets = 1; - break; - case 64598: // Cosmic Smash (Algalon the Observer) - spellInfo->MaxAffectedTargets = 3; - break; - case 62293: // Cosmic Smash (Algalon the Observer) - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_CASTER); - break; - case 62311: // Cosmic Smash (Algalon the Observer) - case 64596: // Cosmic Smash (Algalon the Observer) - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd - break; - case 64014: // Expedition Base Camp Teleport - case 64024: // Conservatory Teleport - case 64025: // Halls of Invention Teleport - case 64028: // Colossal Forge Teleport - case 64029: // Shattered Walkway Teleport - case 64030: // Antechamber Teleport - case 64031: // Scrapyard Teleport - case 64032: // Formation Grounds Teleport - case 65042: // Prison of Yogg-Saron Teleport - spellInfo->Effects[0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); - break; - // ENDOF ULDUAR SPELLS - // - // TRIAL OF THE CRUSADER SPELLS - // - case 66258: // Infernal Eruption (10N) - case 67901: // Infernal Eruption (25N) - // increase duration from 15 to 18 seconds because caster is already - // unsummoned when spell missile hits the ground so nothing happen in result - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(85); - break; - // ENDOF TRIAL OF THE CRUSADER SPELLS - // - // HALLS OF REFLECTION SPELLS - // - case 72435: // Defiling Horror - case 72452: // Defiling Horror - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd - break; - case 72830: // Achievement Check - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 72900: // Start Halls of Reflection Quest AE - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - break; - // ENDOF HALLS OF REFLECTION SPELLS - // - // ICECROWN CITADEL SPELLS - // - // THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK - // THE ONLY REASON ITS HERE IS THAT CURRENT GRID SYSTEM - // DOES NOT ALLOW FAR OBJECT SELECTION (dist > 333) - case 70781: // Light's Hammer Teleport - case 70856: // Oratory of the Damned Teleport - case 70857: // Rampart of Skulls Teleport - case 70858: // Deathbringer's Rise Teleport - case 70859: // Upper Spire Teleport - case 70860: // Frozen Throne Teleport - case 70861: // Sindragosa's Lair Teleport - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); - break; - case 69055: // Bone Slice (Lord Marrowgar) - case 70814: // Bone Slice (Lord Marrowgar) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); // 5yd - break; - case 69075: // Bone Storm (Lord Marrowgar) - case 70834: // Bone Storm (Lord Marrowgar) - case 70835: // Bone Storm (Lord Marrowgar) - case 70836: // Bone Storm (Lord Marrowgar) - case 72864: // Death Plague (Rotting Frost Giant) - case 71160: // Plague Stench (Stinky) - case 71161: // Plague Stench (Stinky) - case 71123: // Decimate (Stinky & Precious) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd - break; - case 71169: // Shadow's Fate - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 72347: // Lock Players and Tap Chest - spellInfo->AttributesEx3 &= ~SPELL_ATTR3_NO_INITIAL_AGGRO; - break; - case 73843: // Award Reputation - Boss Kill - case 73844: // Award Reputation - Boss Kill - case 73845: // Award Reputation - Boss Kill - case 73846: // Award Reputation - Boss Kill - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 72378: // Blood Nova (Deathbringer Saurfang) - case 73058: // Blood Nova (Deathbringer Saurfang) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); - break; - case 72769: // Scent of Blood (Deathbringer Saurfang) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); - // no break - case 72771: // Scent of Blood (Deathbringer Saurfang) - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); - break; - case 72723: // Resistant Skin (Deathbringer Saurfang adds) - // this spell initially granted Shadow damage immunity, however it was removed but the data was left in client - spellInfo->Effects[EFFECT_2].Effect = 0; - break; - case 70460: // Coldflame Jets (Traps after Saurfang) - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(1); // 10 seconds - break; - case 71412: // Green Ooze Summon (Professor Putricide) - case 71415: // Orange Ooze Summon (Professor Putricide) - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY); - break; - case 69783: // Ooze flood - case 69797: // Ooze flood - case 69799: // Ooze flood - case 69802: // Ooze flood - // Those spells are cast on creatures with same entry as caster while they have TARGET_UNIT_NEARBY_ENTRY. - spellInfo->AttributesEx |= SPELL_ATTR1_CANT_TARGET_SELF; - break; - case 71159: // Awaken Plagued Zombies - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21); - break; - case 70530: // Volatile Ooze Beam Protection (Professor Putricide) - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA; // for an unknown reason this was SPELL_EFFECT_APPLY_AREA_AURA_RAID - break; - // THIS IS HERE BECAUSE COOLDOWN ON CREATURE PROCS IS NOT IMPLEMENTED - case 71604: // Mutated Strength (Professor Putricide) - case 72673: // Mutated Strength (Professor Putricide) - case 72674: // Mutated Strength (Professor Putricide) - case 72675: // Mutated Strength (Professor Putricide) - spellInfo->Effects[EFFECT_1].Effect = 0; - break; - case 72454: // Mutated Plague (Professor Putricide) - case 72464: // Mutated Plague (Professor Putricide) - case 72506: // Mutated Plague (Professor Putricide) - case 72507: // Mutated Plague (Professor Putricide) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 70911: // Unbound Plague (Professor Putricide) (needs target selection script) - case 72854: // Unbound Plague (Professor Putricide) (needs target selection script) - case 72855: // Unbound Plague (Professor Putricide) (needs target selection script) - case 72856: // Unbound Plague (Professor Putricide) (needs target selection script) - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY); - break; - case 71518: // Unholy Infusion Quest Credit (Professor Putricide) - case 72934: // Blood Infusion Quest Credit (Blood-Queen Lana'thel) - case 72289: // Frost Infusion Quest Credit (Sindragosa) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // another missing radius - break; - case 71708: // Empowered Flare (Blood Prince Council) - case 72785: // Empowered Flare (Blood Prince Council) - case 72786: // Empowered Flare (Blood Prince Council) - case 72787: // Empowered Flare (Blood Prince Council) - spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; - break; - case 71266: // Swarming Shadows - case 72890: // Swarming Shadows - spellInfo->AreaGroupId = 0; // originally, these require area 4522, which is... outside of Icecrown Citadel - break; - case 70602: // Corruption - spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; - break; - case 70715: // Column of Frost (visual marker) - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(32); // 6 seconds (missing) - break; - case 71085: // Mana Void (periodic aura) - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(9); // 30 seconds (missing) - break; - case 72015: // Frostbolt Volley (only heroic) - case 72016: // Frostbolt Volley (only heroic) - spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_40_YARDS); - break; - case 70936: // Summon Suppressor (needs target selection script) - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY); - spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(); - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(157); // 90yd - break; - case 72706: // Achievement Check (Valithria Dreamwalker) - case 71357: // Order Whelp - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - break; - case 70598: // Sindragosa's Fury - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - break; - case 69846: // Frost Bomb - spellInfo->Speed = 0.0f; // This spell's summon happens instantly - break; - case 70106: // Chilled to the Bone - spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; - spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS; - break; - case 71614: // Ice Lock - spellInfo->Mechanic = MECHANIC_STUN; - break; - case 72762: // Defile - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(559); // 53 seconds - break; - case 72743: // Defile - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(22); // 45 seconds - break; - case 72754: // Defile - case 73708: // Defile - case 73709: // Defile - case 73710: // Defile - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - break; - case 69030: // Val'kyr Target Search - 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_UNAFFECTED_BY_INVULNERABILITY; - break; - case 69198: // Raging Spirit Visual - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd - break; - case 73654: // Harvest Souls - case 74295: // Harvest Souls - case 74296: // Harvest Souls - case 74297: // Harvest Souls - 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 - break; - case 73655: // Harvest Soul - spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; - break; - case 73540: // Summon Shadow Trap - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(23); // 90 seconds - break; - case 73530: // Shadow Trap (visual) - spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(28); // 5 seconds - break; - case 73529: // Shadow Trap - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd - break; - case 74282: // Shadow Trap (searcher) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); // 5yd - break; - case 72595: // Restore Soul - case 73650: // Restore Soul - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - break; - case 74086: // Destroy Soul - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - break; - case 74302: // Summon Spirit Bomb - case 74342: // Summon Spirit Bomb - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - spellInfo->MaxAffectedTargets = 1; - break; - case 74341: // Summon Spirit Bomb - case 74343: // Summon Spirit Bomb - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd - spellInfo->MaxAffectedTargets = 3; - break; - case 73579: // Summon Spirit Bomb - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_25_YARDS); // 25yd - break; - case 72350: // Fury of Frostmourne - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 75127: // Kill Frostmourne Players - case 72351: // Fury of Frostmourne - case 72431: // Jump (removes Fury of Frostmourne debuff) - case 72429: // Mass Resurrection - case 73159: // Play Movie - case 73582: // Trigger Vile Spirit (Inside, Heroic) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 72376: // Raise Dead - spellInfo->MaxAffectedTargets = 3; - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd - break; - case 71809: // Jump - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(5); // 40yd - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd - spellInfo->Effects[EFFECT_0].MiscValue = 190; - break; - case 72405: // Broken Frostmourne - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_20_YARDS); // 20yd - spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT; - break; - // ENDOF ICECROWN CITADEL SPELLS - // - // RUBY SANCTUM SPELLS - // - case 74799: // Soul Consumption - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_12_YARDS); - break; - case 74769: // Twilight Cutter - case 77844: // Twilight Cutter - case 77845: // Twilight Cutter - case 77846: // Twilight Cutter - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS); // 100yd - break; - case 75509: // Twilight Mending - spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; - spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; - break; - case 75875: // Combustion and Consumption Heroic versions lacks radius data - spellInfo->Effects[EFFECT_0].Mechanic = MECHANIC_NONE; - spellInfo->Effects[EFFECT_1].Mechanic = MECHANIC_SNARE; - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); - break; - case 75884: - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); - // No break - case 75883: - case 75876: - spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_6_YARDS); - break; - // ENDOF RUBY SANCTUM SPELLS - // - // EYE OF ETERNITY SPELLS - // All spells below work even without these changes. The LOS attribute is due to problem - // from collision between maps & gos with active destroyed state. - case 57473: // Arcane Storm bonus explicit visual spell - case 57431: // Summon Static Field - case 56091: // Flame Spike (Wyrmrest Skytalon) - case 56092: // Engulf in Flames (Wyrmrest Skytalon) - case 57090: // Revivify (Wyrmrest Skytalon) - case 57143: // Life Burst (Wyrmrest Skytalon) - spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; - break; - // This would never crit on retail and it has attribute for SPELL_ATTR3_NO_DONE_BONUS because is handled from player, - // until someone figures how to make scions not critting without hack and without making them main casters this should stay here. - case 63934: // Arcane Barrage (cast by players and NONMELEEDAMAGELOG with caster Scion of Eternity (original caster)). - spellInfo->AttributesEx2 |= SPELL_ATTR2_CANT_CRIT; - break; - // ENDOF EYE OF ETERNITY SPELLS - // - // OCULUS SPELLS - // The spells below are here because their effect 1 is giving warning due to - // triggered spell not found in any dbc and is missing from encounter source* of data. - // Even judged as clientside these spells can't be guessed for* now. - case 49462: // Call Ruby Drake - case 49461: // Call Amber Drake - case 49345: // Call Emerald Drake - spellInfo->Effects[EFFECT_1].Effect = 0; - break; - // ENDOF OCULUS SPELLS - // - case 40055: // Introspection - case 40165: // Introspection - case 40166: // Introspection - case 40167: // Introspection - spellInfo->Attributes |= SPELL_ATTR0_NEGATIVE_1; - break; - case 45524: // Chains of Ice - spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(); - break; - case 2378: // Minor Fortitude - spellInfo->ManaCost = 0; - spellInfo->ManaPerSecond = 0; - break; - case 24314: // Threatening Gaze - spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CAST | AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_JUMP; - break; - // ISLE OF CONQUEST SPELLS - // - case 66551: // Teleport - spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd - break; - // ENDOF ISLE OF CONQUEST SPELLS - // - case 41485: // Deadly Poison - Black Temple - case 41487: // Envenom - Black Temple - spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; - break; - default: - break; - } - - switch (spellInfo->Id) - { - // Proc attribute correction - // Remove procflags from test/debug/deprecated spells to avoid DB Errors - case 2479: // Honorless Target - case 3232: // Gouge Stun Test - case 3409: // Crippling Poison - case 4312: // Strider Presence - case 5707: // Lifestone Regeneration - case 5760: // Mind-numbing Poison - case 6727: // Poison Mushroom - case 6984: // Frost Shot (Rank 2) - case 7164: // Defensive Stance - case 7288: // Immolate Cumulative (TEST) (Rank 1) - case 7291: // Food (TEST) - case 7331: // Healing Aura (TEST) (Rank 1) - case 7824: // Blacksmithing Skill +10 - case 12551: // Frost Shot - case 13218: // Wound Poison (Rank 1) - case 13222: // Wound Poison II (Rank 2) - case 13223: // Wound Poison III (Rank 3) - case 13224: // Wound Poison IV (Rank 4) - case 14795: // Venomhide Poison - case 16610: // Razorhide - case 18099: // Chill Nova - case 18802: // Frost Shot - case 20000: // Alexander's Test Periodic Aura - case 21163: // Polished Armor (Rank 1) - case 22818: // Mol'dar's Moxie - case 22820: // Slip'kik's Savvy - case 23333: // Warsong Flag - case 23335: // Silverwing Flag - case 25160: // Sand Storm - case 27189: // Wound Poison V (Rank 5) - case 28726: // Nightmare Seed - case 28754: // Fury of the Ashbringer - case 30802: // Unleashed Rage (Rank 1) - case 31481: // Lung Burst - case 32430: // Battle Standard - case 32431: // Battle Standard - case 32447: // Travel Form - case 33370: // Spell Haste - case 33807: // Abacus of Violent Odds - case 34132: // Gladiator's Totem of the Third Wind - case 34135: // Libram of Justice - case 34666: // Tamed Pet Passive 08 (DND) - case 34667: // Tamed Pet Passive 09 (DND) - case 34775: // Dragonspine Flurry - case 34889: // Fire Breath (Rank 1) - case 34976: // Netherstorm Flag - case 35131: // Bladestorm - case 35323: // Fire Breath (Rank 2) - case 35336: // Energizing Spores - case 36148: // Chill Nova - case 36613: // Aspect of the Spirit Hunter - case 36786: // Soul Chill - case 37174: // Perceived Weakness - case 37482: // Exploited Weakness - case 37526: // Battle Rush - case 37588: // Dive - case 37985: // Fire Breath - case 38317: // Forgotten Knowledge - case 38843: // Soul Chill - case 39015: // Atrophic Blow - case 40396: // Fel Infusion - case 40603: // Taunt Gurtogg - case 40803: // Ron's Test Buff - case 41435: // The Twin Blades of Azzinoth - case 42369: // Merciless Libram of Justice - case 42371: // Merciless Gladiator's Totem of the Third Wind - case 42636: // Birmingham Tools Test 3 - case 43727: // Vengeful Libram of Justice - case 43729: // Vengeful Gladiator's Totem of the Third Wind - case 43817: // Focused Assault - case 44305: // You're a ...! (Effects2) - case 45384: // Birmingham Tools Test 4 - case 45433: // Birmingham Tools Test 5 - case 46093: // Brutal Libram of Justice - case 46099: // Brutal Gladiator's Totem of the Third Wind - case 46705: // Honorless Target - case 49883: // Flames - case 50365: // Improved Blood Presence (Rank 1) - case 50371: // Improved Blood Presence (Rank 2) - case 50655: // Frost Cut - case 50995: // Empowered Blood Presence (Rank 1) - case 55482: // Fire Breath (Rank 3) - case 55483: // Fire Breath (Rank 4) - case 55484: // Fire Breath (Rank 5) - case 55485: // Fire Breath (Rank 6) - case 57974: // Wound Poison VI (Rank 6) - case 57975: // Wound Poison VII (Rank 7) - case 60062: // Essence of Life - case 60302: // Meteorite Whetstone - case 60437: // Grim Toll - case 60492: // Embrace of the Spider - case 63024: // Gravity Bomb - case 64772: // Comet's Trail - case 65004: // Alacrity of the Elements - case 65019: // Mjolnir Runestone - case 65024: // Implosion - case 71003: // Vegard's Touch - case 72559: // Birmingham Tools Test 3 - case 72560: // Birmingham Tools Test 3 - case 72561: // Birmingham Tools Test 5 - case 72980: // Shadow Resonance - spellInfo->ProcFlags = 0; - break; - default: - break; - } - switch (spellInfo->SpellFamilyName) { case SPELLFAMILY_PALADIN: |
