diff options
author | Naddley <64811442+Naddley@users.noreply.github.com> | 2023-10-16 00:56:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-16 00:56:17 +0200 |
commit | 3e71d793b4083bcc7e9e42f78ee94d173d4ec41e (patch) | |
tree | a98e765394e2f403503ba02bd2b60b8f009bc377 /src | |
parent | 71bac3bc2dd5ceacc698f5eaf2a975e0ee95a26a (diff) |
Scripts/Mardum: Implement Quest: "Set Them Free" (#29369)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/BrokenIsles/zone_mardum.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/src/server/scripts/BrokenIsles/zone_mardum.cpp b/src/server/scripts/BrokenIsles/zone_mardum.cpp index 5f13980bde5..d8f1eebdcce 100644 --- a/src/server/scripts/BrokenIsles/zone_mardum.cpp +++ b/src/server/scripts/BrokenIsles/zone_mardum.cpp @@ -1201,6 +1201,196 @@ class spell_mardum_baleful_beaming_gaze_selector : public SpellScript } }; +enum SetThemFreeData +{ + NPC_CYANA_NIGHTGLAIVE_FREED = 94377, + NPC_IZAL_WHITEMOON_FREED = 93117, + NPC_BELATH_DAWNBLADE_FREED = 94400, + NPC_MANNETHREL_DARKSTAR_FREED = 93230, + + SAY_CYANA_NIGHTGLAIVE_FREED = 1, + SAY_IZAL_WHITEMOON_FREED = 1, + SAY_BELATH_DAWNBLADE_FREED = 1, + SAY_MANNETHRE_DARKSTAR_FREED = 1, + + PATH_CYANA_NIGHTGLAIVE_FREED = 9437700, + PATH_IZAL_WHITEMOON_FREED = 9311700, + PATH_BELATH_DAWNBLADE_FREED = 9440000, + PATH_MANNETHREL_DARKSTAR_FREED = 9323000, + + ANIM_DH_WALK_DAZED = 1078 +}; + +// 94377 - Cyana Nightglaive +struct npc_cyana_nightglaive_freed_private : public ScriptedAI +{ + npc_cyana_nightglaive_freed_private(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + me->DespawnOrUnsummon(19s); + + _scheduler.Schedule(2s + 500ms, [this](TaskContext task) + { + Talk(SAY_CYANA_NIGHTGLAIVE_FREED, me); + + task.Schedule(3s, [this](TaskContext /*task*/) + { + me->GetMotionMaster()->MovePath(PATH_CYANA_NIGHTGLAIVE_FREED, false); + }); + }); + } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; +}; + +CreatureAI* CyanaNightglaiveFreedAISelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_cyana_nightglaive_freed_private(creature); + return new NullCreatureAI(creature); +}; + +// 93117 - Izal Whitemoon +struct npc_izal_whitemoon_freed_private : public ScriptedAI +{ + npc_izal_whitemoon_freed_private(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + me->DespawnOrUnsummon(18s); + + _scheduler.Schedule(2s, [this](TaskContext task) + { + Talk(SAY_IZAL_WHITEMOON_FREED, me); + + task.Schedule(3s, [this](TaskContext /*task*/) + { + me->GetMotionMaster()->MovePath(PATH_CYANA_NIGHTGLAIVE_FREED, false); + }); + }); + } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; +}; + +CreatureAI* IzalWhitemoonFreedAISelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_izal_whitemoon_freed_private(creature); + return new NullCreatureAI(creature); +}; + +// 94400 - Belath Dawnblade +struct npc_belath_dawnblade_freed_private : public ScriptedAI +{ + npc_belath_dawnblade_freed_private(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + me->DespawnOrUnsummon(5min); // wtf blizz + + _scheduler.Schedule(3s, [this](TaskContext task) + { + Talk(SAY_BELATH_DAWNBLADE_FREED, me); + + task.Schedule(6s, [this](TaskContext /*task*/) + { + me->GetMotionMaster()->MovePath(PATH_BELATH_DAWNBLADE_FREED, false); + }); + }); + } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; +}; + +CreatureAI* BelathDawnbladeFreedAISelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_belath_dawnblade_freed_private(creature); + return new NullCreatureAI(creature); +}; + +// 93230 - Mannethrel Darkstar +struct npc_mannethrel_darkstar_freed_private : public ScriptedAI +{ + npc_mannethrel_darkstar_freed_private(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + me->DespawnOrUnsummon(28s); + + _scheduler.Schedule(2s, [this](TaskContext task) + { + Talk(SAY_BELATH_DAWNBLADE_FREED, me); + + task.Schedule(6s, [this](TaskContext /*task*/) + { + me->SetAIAnimKitId(ANIM_DH_WALK_DAZED); + me->GetMotionMaster()->MovePath(PATH_MANNETHREL_DARKSTAR_FREED, false); + }); + }); + } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; +}; + +CreatureAI* MannethrelDarkstarFreedAISelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_mannethrel_darkstar_freed_private(creature); + return new NullCreatureAI(creature); +}; + +// 204711 - Set Them Free: Cyana Nightglaive Freed Kill Credit +// 204714 - Set Them Free: Izal Whitemoon Freed Kill Credit +// 204712 - Set Them Free: Belath Dawnblade Freed Kill Credit +// 204715 - Set Them Free: Mannethrel Darkstar Freed Kill Credit +template<uint32 CreatureId> +class spell_freed_killcredit_set_them_free : public SpellScript +{ + void HandleHitTarget(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + { + Creature* staticObject = GetClosestCreatureWithOptions(player, 10.0f, { .CreatureId = CreatureId, .IgnorePhases = true }); + if (!staticObject) + return; + + staticObject->SummonPersonalClone(staticObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_freed_killcredit_set_them_free::HandleHitTarget, EFFECT_1, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_zone_mardum() { // Creature @@ -1218,6 +1408,10 @@ void AddSC_zone_mardum() new FactoryCreatureScript<CreatureAI, &KaynSunfuryNearLegionBannerAISelector>("npc_kayn_sunfury_ashtongue_intro"); new FactoryCreatureScript<CreatureAI, &SevisBrightflameAshtongueGatewayAISelector>("npc_sevis_brightflame_ashtongue_gateway_private"); new FactoryCreatureScript<CreatureAI, &SevisBrightflameCoilskarGatewayAISelector>("npc_sevis_brightflame_coilskar_gateway_private"); + new FactoryCreatureScript<CreatureAI, &CyanaNightglaiveFreedAISelector>("npc_cyana_nightglaive_freed_private"); + new FactoryCreatureScript<CreatureAI, &IzalWhitemoonFreedAISelector>("npc_izal_whitemoon_freed_private"); + new FactoryCreatureScript<CreatureAI, &BelathDawnbladeFreedAISelector>("npc_belath_dawnblade_freed_private"); + new FactoryCreatureScript<CreatureAI, &MannethrelDarkstarFreedAISelector>("npc_mannethrel_darkstar_freed_private"); // AreaTrigger RegisterAreaTriggerAI(at_enter_the_illidari_ashtongue_allari_killcredit); @@ -1236,4 +1430,8 @@ void AddSC_zone_mardum() RegisterSpellScript(spell_mardum_baleful_legion_aegis); RegisterSpellScript(spell_mardum_coloss_infernal_smash_selector); RegisterSpellScript(spell_mardum_baleful_beaming_gaze_selector); + RegisterSpellScriptWithArgs(spell_freed_killcredit_set_them_free<NPC_CYANA_NIGHTGLAIVE_FREED>, "spell_cyana_nightglaive_killcredit_set_them_free"); + RegisterSpellScriptWithArgs(spell_freed_killcredit_set_them_free<NPC_IZAL_WHITEMOON_FREED>, "spell_izal_whitemoon_killcredit_set_them_free"); + RegisterSpellScriptWithArgs(spell_freed_killcredit_set_them_free<NPC_BELATH_DAWNBLADE_FREED>, "spell_belath_dawnblade_killcredit_set_them_free"); + RegisterSpellScriptWithArgs(spell_freed_killcredit_set_them_free<NPC_MANNETHREL_DARKSTAR_FREED>, "spell_mannethrel_darkstar_killcredit_set_them_free"); }; |