chore(Core/Spells): move db spell_dbc corrections to SpellInfoCorre… (#21819)

This commit is contained in:
Jelle Meeus
2025-04-30 15:46:36 +02:00
committed by GitHub
parent f1751c0c18
commit b2a810f96c
4 changed files with 207 additions and 1 deletions

View File

@@ -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);

View File

@@ -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\'');

View File

@@ -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

View File

@@ -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];