From b2a810f96cf60b345a49b42218741a182e320725 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 30 Apr 2025 15:46:36 +0200 Subject: [PATCH] =?UTF-8?q?chore(Core/Spells):=20move=20db=20`spell=5Fdbc`?= =?UTF-8?q?=20corrections=20to=20SpellInfoCorre=E2=80=A6=20(#21819)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rev_1743358272289715719.sql | 2 + .../rev_1743363476685228915.sql | 28 +++ src/server/game/Spells/SpellDefines.h | 2 +- .../game/Spells/SpellInfoCorrections.cpp | 176 ++++++++++++++++++ 4 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1743358272289715719.sql create mode 100644 data/sql/updates/pending_db_world/rev_1743363476685228915.sql diff --git a/data/sql/updates/pending_db_world/rev_1743358272289715719.sql b/data/sql/updates/pending_db_world/rev_1743358272289715719.sql new file mode 100644 index 000000000..f896967a5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1743358272289715719.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `spell_dbc` WHERE `ID` IN (75, 1454, 1455, 1456, 11687, 11688, 11689, 27222, 57946, 4074, 4511, 7922, 9457, 10732, 20252, 20253, 20335, 20336, 20337, 22736, 23272, 30298, 33271, 36500, 39183, 47747, 49214, 54469, 58620, 58621, 60474, 64382); diff --git a/data/sql/updates/pending_db_world/rev_1743363476685228915.sql b/data/sql/updates/pending_db_world/rev_1743363476685228915.sql new file mode 100644 index 000000000..5d5040d06 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1743363476685228915.sql @@ -0,0 +1,28 @@ +-- +SET @SPELL_ATTR3_IGNORE_CASTER_AND_TARGET_RESTRICTIONS := 268435456; +SET @SPELL_ATTR5_ALLOW_WHILE_STUNNED := 8; +SET @SPELL_ATTR2_IGNORE_LINE_OF_SIGHT := 4; +-- Update server-side spell 43360 - model after 41295 Fixate +UPDATE `spell_dbc` SET +`AttributesEx2`= `AttributesEx2` & ~(@SPELL_ATTR2_IGNORE_LINE_OF_SIGHT), +`AttributesEx3`= `AttributesEx3` | @SPELL_ATTR3_IGNORE_CASTER_AND_TARGET_RESTRICTIONS, +`AttributesEx5`= `AttributesEx5` | @SPELL_ATTR5_ALLOW_WHILE_STUNNED, +`RangeIndex` = 36, +`Effect_1` = 6, +`EffectRadiusIndex_1` = 27, +`EffectAura_1` = 11, +`SpellIconID` = 1, +`ImplicitTargetA_1` = 7, +`Description_Lang_enUS` = 'The target is fixated upon the caster.', +`Name_Lang_enUS`='Fixate' +WHERE `ID` = 43360; + +DELETE FROM `spell_script_names` WHERE `spell_id` = 43359 AND `ScriptName` = 'spell_call_of_the_beast'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES(43359, 'spell_call_of_the_beast'); + +-- Amani'shi Beast Tamer +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 24059; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 24059); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(24059, 0, 0, 0, 0, 0, 100, 0, 8000, 12000, 10000, 15000, 0, 0, 11, 43359, 0, 0, 0, 0, 0, 5, 100, 1, 0, 43359, 0, 0, 0, 0, 'Amani\'shi Beast Tamer - In Combat - Cast \'Call of the Beast\''), +(24059, 0, 1, 0, 0, 0, 100, 0, 6000, 12000, 9000, 18000, 0, 0, 11, 43361, 0, 0, 0, 0, 0, 5, 100, 1, 0, 0, 0, 0, 0, 0, 'Amani\'shi Beast Tamer - In Combat - Cast \'Domesticate\''); diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 22caee957..89dda8dfe 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -28,7 +28,7 @@ enum SpellInterruptFlags SPELL_INTERRUPT_FLAG_UNK3 = 0x04, // any info? SPELL_INTERRUPT_FLAG_INTERRUPT = 0x08, // interrupt SPELL_INTERRUPT_FLAG_ABORT_ON_DMG = 0x10, // _complete_ interrupt on direct damage - //SPELL_INTERRUPT_UNK = 0x20 // unk, 564 of 727 spells having this spell start with "Glyph" + SPELL_INTERRUPT_UNK = 0x20 // unk, 564 of 727 spells having this spell start with "Glyph" }; // See SpellAuraInterruptFlags for other values definitions diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 4e0b1f0e3..7f219af1e 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4922,6 +4922,182 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->SpellPriority = 100; }); + // Auto Shot + ApplySpellFix({ 75 }, [](SpellInfo* spellInfo) + { + spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(1); // 0s + spellInfo->InterruptFlags &= ~SPELL_INTERRUPT_UNK; + }); + + // Life Tap + ApplySpellFix({ 1454 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 0.0f; + }); + + // Life Tap + ApplySpellFix({ 1455, 1456, 11687, 11688, 11689, 27222, 57946 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RealPointsPerLevel = 0.0f; + spellInfo->MaxLevel = 16; + spellInfo->BaseLevel = 6; + spellInfo->SpellLevel = 6; + }); + + // Explosive Sheep + ApplySpellFix({ 4074 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(25); + }); + + // Phase Shift + ApplySpellFix({ 4511 }, [](SpellInfo* spellInfo) + { + spellInfo->AuraInterruptFlags &= ~AURA_INTERRUPT_FLAG_MELEE_ATTACK; + spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CAST; + }); + + // Charge Stun + ApplySpellFix({ 7922 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes |= SPELL_ATTR0_NO_ACTIVE_DEFENSE; + }); + + // Tharnariun's Heal + ApplySpellFix({ 9457 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx2 &= ~SPELL_ATTR2_IGNORE_LINE_OF_SIGHT; + spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_AND_TARGET_RESTRICTIONS; + spellInfo->Effects[EFFECT_0].DieSides = 0; + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY); + }); + + // Supercharge + ApplySpellFix({ 10732 }, [](SpellInfo* spellInfo) + { + spellInfo->CategoryEntry = sSpellCategoryStore.LookupEntry(0); + spellInfo->Attributes &= ~(SPELL_ATTR0_IS_ABILITY | SPELL_ATTR0_DO_NOT_SHEATH); + spellInfo->Attributes |= SPELL_ATTR0_NOT_SHAPESHIFTED; + spellInfo->AttributesEx |= SPELL_ATTR1_TRACK_TARGET_IN_CHANNEL; + spellInfo->AttributesEx2 |= SPELL_ATTR2_NO_TARGET_PER_SECOND_COST; + spellInfo->AttributesEx3 |= SPELL_ATTR3_CAN_PROC_FROM_PROCS; + spellInfo->FacingCasterFlags |= SPELL_FACING_FLAG_INFRONT; + spellInfo->InterruptFlags |= (SPELL_INTERRUPT_FLAG_MOVEMENT | SPELL_INTERRUPT_FLAG_PUSH_BACK | + SPELL_INTERRUPT_FLAG_UNK3 | SPELL_INTERRUPT_FLAG_INTERRUPT); + spellInfo->ChannelInterruptFlags &= ~AURA_INTERRUPT_FLAG_JUMP; + spellInfo->ChannelInterruptFlags |= AURA_INTERRUPT_FLAG_UNK14; + spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY); + spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY); + spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY); + spellInfo->Effects[EFFECT_0].Amplitude = 3000; + spellInfo->Effects[EFFECT_1].Amplitude = 3000; + spellInfo->Effects[EFFECT_2].Amplitude = 3000; + spellInfo->SpellVisual[0] = 12656; + }); + + // Intercept + ApplySpellFix({ 20252 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes &= ~(SPELL_ATTR0_IS_ABILITY | SPELL_ATTR0_NOT_SHAPESHIFTED | SPELL_ATTR0_DO_NOT_SHEATH); + spellInfo->Attributes |= SPELL_ATTR0_ALLOW_ITEM_SPELL_IN_PVP; + }); + + // Intercept + ApplySpellFix({ 20253 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes &= ~(SPELL_ATTR0_IS_ABILITY | SPELL_ATTR0_NOT_SHAPESHIFTED | SPELL_ATTR0_DO_NOT_SHEATH); + spellInfo->Attributes |= SPELL_ATTR0_ALLOW_ITEM_SPELL_IN_PVP; + spellInfo->AttributesEx7 |= (SPELL_ATTR7_NO_ATTACK_DODGE | SPELL_ATTR7_NO_ATTACK_PARRY); + spellInfo->SpellLevel = 0; + }); + + // Heart of the Crusader + ApplySpellFix({ 20335, 20336, 20337 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_2].Effect = SPELL_EFFECT_APPLY_AURA; + spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY); + spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_DUMMY; + }); + + // Gordok Ogre Suit + ApplySpellFix({ 22736 }, [](SpellInfo* spellInfo) + { + spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_MOUNT; + }); + + // Soul Flame + ApplySpellFix({ 23272 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); + }); + + // Tree Disguise + ApplySpellFix({ 30298 }, [](SpellInfo* spellInfo) + { + spellInfo->InterruptFlags |= (SPELL_INTERRUPT_FLAG_MOVEMENT | SPELL_INTERRUPT_FLAG_PUSH_BACK | + SPELL_INTERRUPT_FLAG_UNK3 | SPELL_INTERRUPT_FLAG_INTERRUPT); + spellInfo->Effects[EFFECT_2].ApplyAuraName = SPELL_AURA_MOD_STUN; + }); + + // Internal Shake Camera w/ rumble sound + ApplySpellFix({ 33271 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes |= SPELL_ATTR0_ALLOW_WHILE_MOUNTED; + }); + + // Glaive + ApplySpellFix({ 36500 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes &= ~SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL; + spellInfo->Effects[EFFECT_0].DieSides = 68; + spellInfo->Effects[EFFECT_0].BasePoints = 201; + }); + + // Create Anchorite Relic + ApplySpellFix({ 39183 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].TargetA = SpellImplicitTargetInfo(0); + }); + + // Charge Rifts + ApplySpellFix({ 47747 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_45_YARDS); + }); + + // New Summon Test + ApplySpellFix({ 49214 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(3); + }); + + // Plague Strike + ApplySpellFix({ 54469 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); + spellInfo->Effects[EFFECT_2].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_5_YARDS); + }); + + // Glyph of Chains of Ice: + ApplySpellFix({ 58620 }, [](SpellInfo* spellInfo) + { + spellInfo->SpellLevel = 0; + }); + + // Exit Portal + ApplySpellFix({ 60474 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx6 |= SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE; + }); + + // Shattering Throw + ApplySpellFix({ 64382 }, [](SpellInfo* spellInfo) + { + spellInfo->Attributes &= ~(SPELL_ATTR0_IS_ABILITY | SPELL_ATTR0_NOT_SHAPESHIFTED | SPELL_ATTR0_DO_NOT_SHEATH); + spellInfo->Attributes |= SPELL_ATTR0_ALLOW_ITEM_SPELL_IN_PVP; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i];