From d54ee7a2808e2bc8077b7ed9e6df2eeb22829b7a Mon Sep 17 00:00:00 2001 From: ModoX Date: Tue, 4 Jun 2024 00:53:18 +0200 Subject: Scripts/StormsongValley-ish: Added scripts for old god forces for Kul Tiran unlock questline in Port Fogtide Part 1 / K'thir (#30000) --- src/server/game/Spells/SpellMgr.cpp | 15 +++++ src/server/scripts/World/areatrigger_scripts.cpp | 86 ++++++++++++++++++++++++ 2 files changed, 101 insertions(+) (limited to 'src') diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 6ac6f93cc9e..b133b022b47 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4729,6 +4729,21 @@ void SpellMgr::LoadSpellInfoCorrections() // ENDOF ANTORUS THE BURNING THRONE SPELLS + // + // STORMSONG VALLEY SPELLS + // + + // Void Orb + ApplySpellFix({ 273467 }, [](SpellInfo* spellInfo) + { + ApplySpellEffectFix(spellInfo, EFFECT_0, [](SpellEffectInfo* spellEffectInfo) + { + spellEffectInfo->TargetARadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_0_5_YARDS); + }); + }); + + // ENDOF STORMSONG VALLEY SPELLS + // // SEPULCHER OF THE FIRST ONES // diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index a46c5cc0f3f..94f6bd43ccc 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -23,7 +23,10 @@ #include "GameTime.h" #include "MotionMaster.h" #include "ObjectAccessor.h" +#include "PathGenerator.h" #include "ScriptedCreature.h" +#include "Spell.h" +#include "SpellInfo.h" #include "Player.h" #include "TemporarySummon.h" #include "World.h" @@ -459,6 +462,87 @@ struct areatrigger_action_capture_flag : AreaTriggerAI } }; +// 18235 - Void Orb +struct at_void_orb_harbinger : AreaTriggerAI +{ + at_void_orb_harbinger(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } + + enum Spells + { + SPELL_VOID_ORB_DAMAGE = 273502, + }; + + void OnInitialize() override + { + if (Unit* caster = at->GetCaster()) + { + at->SetOrientation(caster->GetOrientation()); + + Position destPos = caster->GetPosition(); + at->MovePositionToFirstCollision(destPos, 35.0f, 0.0f); + + PathGenerator path(at); + path.CalculatePath(destPos.GetPositionX(), destPos.GetPositionY(), destPos.GetPositionZ(), false); + + float timeToTarget = at->GetDistance(destPos.GetPositionX(), destPos.GetPositionY(), destPos.GetPositionZ()) * 144.5f; + at->InitSplines(path.GetPath(), timeToTarget); + } + } + + void OnDestinationReached() override + { + at->Remove(); + } + + void OnUnitEnter(Unit* unit) override + { + Unit* caster = at->GetCaster(); + if (!caster) + return; + + if (caster->IsFriendlyTo(unit)) + return; + + caster->CastSpell(unit, SPELL_VOID_ORB_DAMAGE); + } +}; + +// 18242 - Abyssal Portal +struct at_abyssal_portal_harbinger : AreaTriggerAI +{ + at_abyssal_portal_harbinger(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger), _remainingSummons(0) { } + + enum Spells + { + SPELL_ABYSSAL_PORTAL_SUMMON = 273587 + }; + + void OnCreate(Spell const* creatingSpell) override + { + if (Unit* caster = at->GetCaster()) + _remainingSummons = creatingSpell->GetSpellInfo()->GetEffect(EFFECT_0).CalcValue(caster); + + _scheduler.Schedule(500ms, [this](TaskContext task) + { + if (Unit* caster = at->GetCaster()) + caster->CastSpell(at->GetRandomNearPosition(3.0f), SPELL_ABYSSAL_PORTAL_SUMMON, true); + + _remainingSummons--; + if (_remainingSummons > 0) + task.Repeat(1s); + }); + } + + void OnUpdate(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; + uint8 _remainingSummons; +}; + void AddSC_areatrigger_scripts() { new AreaTrigger_at_coilfang_waterfall(); @@ -473,4 +557,6 @@ void AddSC_areatrigger_scripts() RegisterAreaTriggerAI(areatrigger_battleground_buffs); new AreaTrigger_at_battleground_buffs(); RegisterAreaTriggerAI(areatrigger_action_capture_flag); + RegisterAreaTriggerAI(at_void_orb_harbinger); + RegisterAreaTriggerAI(at_abyssal_portal_harbinger); } -- cgit v1.2.3