diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/BrokenIsles/zone_mardum.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/server/scripts/BrokenIsles/zone_mardum.cpp b/src/server/scripts/BrokenIsles/zone_mardum.cpp index dbbb5e7f088..d7ae8bdf32d 100644 --- a/src/server/scripts/BrokenIsles/zone_mardum.cpp +++ b/src/server/scripts/BrokenIsles/zone_mardum.cpp @@ -854,6 +854,82 @@ struct at_enter_the_illidari_ashtongue_allari_killcredit : AreaTriggerAI } }; +enum ETICoilskarIntroData +{ + NPC_SEVIS_BRIGHTFLAME_COILSKAR = 99917, + SAY_SEVIS_SAY_MEET_AT_LAST_GATEWAY = 2, + + PATH_SEVIS_BRIGHTFLAME_COILSKAR = 9991700 +}; + +// 1077 - Enter the Illidari: Coilskar +class scene_enter_the_illidari_coilskar : public SceneScript +{ +public: + scene_enter_the_illidari_coilskar() : SceneScript("scene_enter_the_illidari_coilskar") { } + + void OnSceneStart(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) override + { + PhasingHandler::OnConditionChange(player); + Creature* sevisObject = GetClosestCreatureWithOptions(player, 30.0f, { .CreatureId = NPC_SEVIS_BRIGHTFLAME_COILSKAR, .IgnorePhases = true }); + if (!sevisObject) + return; + + sevisObject->SummonPersonalClone(sevisObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, player); + } +}; + +// 99917 - Sevis Brightflame (Coilskar Gateway) +struct npc_sevis_brightflame_coilskar_gateway_private : public ScriptedAI +{ + npc_sevis_brightflame_coilskar_gateway_private(Creature* creature) : ScriptedAI(creature) { } + + void JustAppeared() override + { + TempSummon* summon = me->ToTempSummon(); + if (!summon) + return; + + Unit* summoner = summon->GetSummonerUnit(); + if (!summoner) + return; + + me->SetFacingToObject(summoner); + me->DespawnOrUnsummon(14s); + + _scheduler.Schedule(1s, [this](TaskContext task) + { + Talk(SAY_SEVIS_SAY_MEET_AT_LAST_GATEWAY, me); + + task.Schedule(2s, [this](TaskContext task) + { + me->SendPlaySpellVisualKit(SPELL_VISUAL_KIT_SEVIS_MOUNT, 0, 0); + me->SetMountDisplayId(DISPLAY_ID_SEVIS_MOUNT); + + task.Schedule(3s, [this](TaskContext /*task*/) + { + me->GetMotionMaster()->MovePath(PATH_SEVIS_BRIGHTFLAME_COILSKAR, false); + }); + }); + }); + } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + +private: + TaskScheduler _scheduler; +}; + +CreatureAI* SevisBrightflameCoilskarGatewayAISelector(Creature* creature) +{ + if (creature->IsPrivateObject()) + return new npc_sevis_brightflame_coilskar_gateway_private(creature); + return new NullCreatureAI(creature); +}; + void AddSC_zone_mardum() { // Creature @@ -868,6 +944,7 @@ void AddSC_zone_mardum() // AISelector 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"); // AreaTrigger RegisterAreaTriggerAI(at_enter_the_illidari_ashtongue_allari_killcredit); @@ -878,6 +955,7 @@ void AddSC_zone_mardum() // Scene new scene_demonhunter_intro(); new scene_enter_the_illidari_ashtongue(); + new scene_enter_the_illidari_coilskar(); // Spells RegisterSpellScript(spell_demon_hunter_intro_aura); |