aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2025_01_01_00_world.sql15
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp75
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);