diff options
-rw-r--r-- | sql/updates/world/master/2025_01_01_00_world.sql | 15 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 75 |
2 files changed, 90 insertions, 0 deletions
diff --git a/sql/updates/world/master/2025_01_01_00_world.sql b/sql/updates/world/master/2025_01_01_00_world.sql new file mode 100644 index 00000000000..90307e92803 --- /dev/null +++ b/sql/updates/world/master/2025_01_01_00_world.sql @@ -0,0 +1,15 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` = 267211; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(267211, 'spell_warl_bilescourge_bombers'); + +DELETE FROM `areatrigger_create_properties` WHERE (`IsCustom`=0 AND `Id` IN (13045,15141)); +INSERT INTO `areatrigger_create_properties` (`Id`, `IsCustom`, `AreaTriggerId`, `IsAreatriggerCustom`, `Flags`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `SpellForVisuals`, `TimeToTarget`, `TimeToTargetScale`, `Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`, `ShapeData4`, `ShapeData5`, `ShapeData6`, `ShapeData7`, `VerifiedBuild`) VALUES +(13045, 0, 17676, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 0, 5760, 4, 8, 8, 10, 10, 0.300000011920928955, 0.300000011920928955, 0, 0, 58238), -- Spell: 267211 (Bilescourge Bombers) +(15141, 0, 19764, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 0, 5760, 0, 1, 1, 0, 0, 0, 0, 0, 0, 58238); -- Spell: 282248 (Bilescourge Bombers) + +DELETE FROM `areatrigger_template` WHERE (`IsCustom`=0 AND `Id` IN (17676, 19764)); +INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `VerifiedBuild`) VALUES +(17676, 0, 0, 58238), +(19764, 0, 0, 58238); + +UPDATE `areatrigger_create_properties` SET `ScriptName`='at_warl_bilescourge_bombers' WHERE `Id`=15141 AND `IsCustom`=0; diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index aab9c3b6d37..b15a3d4db3c 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -23,6 +23,7 @@ #include "ScriptMgr.h" #include "AreaTrigger.h" +#include "AreaTriggerAI.h" #include "Containers.h" #include "Creature.h" #include "GameObject.h" @@ -43,6 +44,9 @@ enum WarlockSpells SPELL_WARLOCK_AGONY = 980, SPELL_WARLOCK_BACKDRAFT = 196406, SPELL_WARLOCK_BACKDRAFT_PROC = 117828, + SPELL_WARLOCK_BILESCOURGE_BOMBERS = 267211, + SPELL_WARLOCK_BILESCOURGE_BOMBERS_MISSILE = 267212, + SPELL_WARLOCK_BILESCOURGE_BOMBERS_AREATRIGGER = 282248, SPELL_WARLOCK_CONFLAGRATE_DEBUFF = 265931, SPELL_WARLOCK_CONFLAGRATE_ENERGIZE = 245330, SPELL_WARLOCK_CORRUPTION_DAMAGE = 146739, @@ -101,6 +105,11 @@ enum MiscSpells SPELL_PRIEST_SHADOW_WORD_DEATH = 32409 }; +enum WarlockSpellVisuals +{ + SPELL_VISUAL_WARLOCK_BILESCOURGE_BOMBERS_CRASH = 75806 +}; + // 146739 - Corruption // 445474 - Wither class spell_warl_absolute_corruption : public SpellScript @@ -188,6 +197,70 @@ private: } }; +// 267211 - Bilescourge Bombers +class spell_warl_bilescourge_bombers : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARLOCK_BILESCOURGE_BOMBERS_AREATRIGGER }); + } + + void HandleHit(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster()->GetPosition(), SPELL_WARLOCK_BILESCOURGE_BOMBERS_AREATRIGGER, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_warl_bilescourge_bombers::HandleHit, EFFECT_0, SPELL_EFFECT_CREATE_AREATRIGGER); + } +}; + +class BilescourgeBombersEvent : public BasicEvent +{ +public: + explicit BilescourgeBombersEvent(Unit* caster, Position srcPos, Position destPos) : _caster(caster), _srcPos(srcPos), _destPos(destPos) { } + + bool Execute(uint64 /*time*/, uint32 /*diff*/) override + { + _caster->SendPlayOrphanSpellVisual(_srcPos, _destPos, SPELL_VISUAL_WARLOCK_BILESCOURGE_BOMBERS_CRASH, 0.5f, true); + _caster->CastSpell(_destPos, SPELL_WARLOCK_BILESCOURGE_BOMBERS_MISSILE); + return true; + } + +private: + Unit* _caster; + Position _srcPos; + Position _destPos; +}; + +// 15141 - Bilescourge Bombers +struct at_warl_bilescourge_bombers : AreaTriggerAI +{ + static constexpr uint8 MAX_TICKS = 12; + + at_warl_bilescourge_bombers(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + void OnCreate(Spell const* /*creatingSpell*/) override + { + Unit* caster = at->GetCaster(); + if (!caster) + return; + + AreaTrigger* targetAt = caster->GetAreaTrigger(SPELL_WARLOCK_BILESCOURGE_BOMBERS); + if (!targetAt) + return; + + int32 tickRate = at->GetTotalDuration() / MAX_TICKS; + + for (uint8 i = 1; i <= 12; i++) + caster->m_Events.AddEventAtOffset(new BilescourgeBombersEvent(caster, at->GetPosition(), targetAt->GetPosition()), Milliseconds(tickRate * i)); + } +}; + // 111400 - Burning Rush class spell_warl_burning_rush : public SpellScript { @@ -1495,6 +1568,8 @@ void AddSC_warlock_spell_scripts() RegisterSpellScript(spell_warl_absolute_corruption); RegisterSpellScript(spell_warl_backdraft); RegisterSpellScript(spell_warl_banish); + RegisterSpellScript(spell_warl_bilescourge_bombers); + RegisterAreaTriggerAI(at_warl_bilescourge_bombers); RegisterSpellAndAuraScriptPair(spell_warl_burning_rush, spell_warl_burning_rush_aura); RegisterSpellScript(spell_warl_cataclysm); RegisterSpellScript(spell_warl_chaos_bolt); |