aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMalcrom <malcromdev@gmail.com>2024-01-17 11:55:57 -0400
committerGitHub <noreply@github.com>2024-01-17 16:55:57 +0100
commitac7e718511e1aea7d7e8fa44537a757db079f98d (patch)
tree092cc6d1191e9f0d3ca554480f7669b14b2b71a2 /src
parent160bd20c9ae463ba7f1b9970276f72a90df8a7fe (diff)
Scripts/Durotar: Implemented Vol'jins Visions (#29553)
* on quest More Than Expected rewarded * on quest An Ancient Enemy rewarded
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/zone_durotar.cpp571
1 files changed, 571 insertions, 0 deletions
diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp
index b91b6f7ffda..0a774e75a1e 100644
--- a/src/server/scripts/Kalimdor/zone_durotar.cpp
+++ b/src/server/scripts/Kalimdor/zone_durotar.cpp
@@ -25,6 +25,7 @@
#include "SpellScript.h"
#include "ScriptedGossip.h"
#include "PassiveAI.h"
+#include "ObjectAccessor.h"
/*######
## Quest 37446: Lazy Peons
@@ -643,6 +644,574 @@ public:
}
};
+enum VoljinVisionData
+{
+ EVENT_VOLJIN_VISION_SCRIPT_1 = 1,
+ EVENT_VOLJIN_VISION_SCRIPT_2 = 2,
+ EVENT_VOLJIN_VISION_SCRIPT_3 = 3,
+ EVENT_VOLJIN_VISION_SCRIPT_4 = 4,
+ EVENT_VOLJIN_VISION_SCRIPT_5 = 5,
+ EVENT_VOLJIN_VISION_SCRIPT_6 = 6,
+ EVENT_VOLJIN_VISION_SCRIPT_7 = 7,
+ EVENT_VOLJIN_VISION_SCRIPT_8 = 8,
+ EVENT_VOLJIN_VISION_SCRIPT_9 = 9,
+ EVENT_VOLJIN_VISION_SCRIPT_10 = 10,
+ EVENT_VOLJIN_VISION_SCRIPT_11 = 11,
+ EVENT_VOLJIN_VISION_SCRIPT_12 = 12,
+ EVENT_VOLJIN_VISION_SCRIPT_13 = 13,
+ EVENT_VOLJIN_VISION_SCRIPT_14 = 14,
+ EVENT_VOLJIN_VISION_SCRIPT_15 = 15,
+ EVENT_VOLJIN_VISION_SCRIPT_16 = 16,
+ EVENT_VOLJIN_VISION_SCRIPT_17 = 17,
+ EVENT_VOLJIN_VISION_SCRIPT_18 = 18,
+ EVENT_VOLJIN_VISION_SCRIPT_19 = 19,
+ EVENT_VOLJIN_VISION_SCRIPT_20 = 20,
+ EVENT_VOLJIN_VISION_SCRIPT_21 = 21,
+ EVENT_VOLJIN_VISION_SCRIPT_22 = 22,
+
+ GOSSIP_MENU_GARROSH_VISION = 11112,
+ GOSSIP_MENU_THRALL_VISION = 11127,
+ GOSSIP_MENU_VISION_IN_PROGRESS = 11126,
+
+ QUEST_MORE_THAN_EXPECTED_WARRIOR = 24643,
+ QUEST_MORE_THAN_EXPECTED_MAGE = 24755,
+ QUEST_MORE_THAN_EXPECTED_SHAMAN = 24763,
+ QUEST_MORE_THAN_EXPECTED_ROGUE = 24775,
+ QUEST_MORE_THAN_EXPECTED_HUNTER = 24781,
+ QUEST_MORE_THAN_EXPECTED_PRIEST = 24787,
+ QUEST_MORE_THAN_EXPECTED_DRUID = 24769,
+ QUEST_MORE_THAN_EXPECTED_WARLOCK = 26277,
+ QUEST_MORE_THAN_EXPECTED_MONK = 31163,
+ QUEST_AN_ANCIENT_ENEMY = 24814,
+
+ SAY_GORROSH_VISION_SCRIPT_TEXT_0 = 0,
+ SAY_GORROSH_VISION_SCRIPT_TEXT_1 = 1,
+ SAY_GORROSH_VISION_SCRIPT_TEXT_2 = 2,
+ SAY_GORROSH_VISION_SCRIPT_TEXT_3 = 3,
+ SAY_GORROSH_VISION_SCRIPT_TEXT_4 = 4,
+
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_0 = 0,
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_1 = 1,
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_2 = 2,
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_3 = 3,
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_4 = 4,
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_5 = 5,
+ SAY_VOLJIN_VISION_SCRIPT_TEXT_6 = 6,
+
+ SAY_THRALL_VISION_SCRIPT_TEXT_0 = 0,
+ SAY_THRALL_VISION_SCRIPT_TEXT_1 = 1,
+ SAY_THRALL_VISION_SCRIPT_TEXT_2 = 2,
+ SAY_THRALL_VISION_SCRIPT_TEXT_3 = 3,
+ SAY_THRALL_VISION_SCRIPT_TEXT_4 = 4,
+ SAY_THRALL_VISION_SCRIPT_TEXT_5 = 5,
+ SAY_THRALL_VISION_SCRIPT_TEXT_6 = 6,
+ SAY_THRALL_VISION_SCRIPT_TEXT_7 = 7,
+
+ SAY_VOLJIN_SCRIPT_TEXT_0 = 0,
+ SAY_VOLJIN_SCRIPT_TEXT_1 = 1,
+ SAY_VOLJIN_SCRIPT_TEXT_2 = 2,
+ SAY_VOLJIN_SCRIPT_TEXT_3 = 3,
+ SAY_VOLJIN_SCRIPT_TEXT_4 = 4,
+ SAY_VOLJIN_SCRIPT_TEXT_5 = 5,
+ SAY_VOLJIN_SCRIPT_TEXT_6 = 6,
+ SAY_VOLJIN_SCRIPT_TEXT_7 = 7,
+ SAY_VOLJIN_SCRIPT_TEXT_8 = 8,
+ SAY_VOLJIN_SCRIPT_TEXT_9 = 9,
+ SAY_VOLJIN_SCRIPT_TEXT_10 = 10,
+ SAY_VOLJIN_SCRIPT_TEXT_11 = 11,
+ SAY_VOLJIN_SCRIPT_TEXT_12 = 12,
+ SAY_VOLJIN_SCRIPT_TEXT_13 = 13,
+ SAY_VOLJIN_SCRIPT_TEXT_14 = 14,
+
+ SPELL_RITES_OF_VISION = 73169,
+ SPELL_VOLJINS_VISION_SMOKE = 73158,
+ SPELL_GENERIC_QUEST_INVISIBILITY_1 = 49414,
+ SPELL_GENERIC_QUEST_INVISIBILITY_2 = 49415,
+ SPELL_GENERIC_QUEST_INVISIBILITY_8 = 78718,
+};
+
+// 38966 - Vol'jin (specific script for guid 309032)
+struct npc_voljin_garrosh_vision : public ScriptedAI
+{
+ npc_voljin_garrosh_vision(Creature* creature) : ScriptedAI(creature), _scriptRunning(false) { }
+
+ void JustAppeared() override
+ {
+ me->SetGossipMenuId(GOSSIP_MENU_GARROSH_VISION);
+
+ Creature* garrosh = me->FindNearestCreatureWithOptions(10.0f, { .StringId = "vision_of_garrosh", .IgnorePhases = true });
+ Creature* voljin = me->FindNearestCreatureWithOptions(10.0f, { .StringId = "vision_of_voljin", .IgnorePhases = true });
+ Creature* bunny = me->FindNearestCreatureWithOptions(10.0f, { .StringId = "vision_brazier_bunny_garrosh", .IgnorePhases = true });
+ GameObject* brazier = me->FindNearestGameObjectWithOptions(10.0f, { .StringId = "vision_brazier_garrosh_voljin", .IgnorePhases = true });
+
+ if (!garrosh || !voljin || !bunny || !brazier)
+ return;
+
+ _garroshGUID = garrosh->GetGUID();
+ _voljinGUID = voljin->GetGUID();
+ _bunnyGUID = bunny->GetGUID();
+ _brazierGUID = brazier->GetGUID();
+ }
+
+ void OnQuestReward(Player* /*player*/, Quest const* quest, LootItemType /*type*/, uint32 /*opt*/) override
+ {
+ if (_scriptRunning)
+ return;
+
+ switch (quest->GetQuestId())
+ {
+ case QUEST_MORE_THAN_EXPECTED_WARRIOR:
+ case QUEST_MORE_THAN_EXPECTED_MAGE:
+ case QUEST_MORE_THAN_EXPECTED_SHAMAN:
+ case QUEST_MORE_THAN_EXPECTED_ROGUE:
+ case QUEST_MORE_THAN_EXPECTED_HUNTER:
+ case QUEST_MORE_THAN_EXPECTED_PRIEST:
+ case QUEST_MORE_THAN_EXPECTED_DRUID:
+ case QUEST_MORE_THAN_EXPECTED_WARLOCK:
+ case QUEST_MORE_THAN_EXPECTED_MONK:
+ _scriptRunning = true;
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_1, 0s);
+ break;
+ default:
+ break;
+ }
+ }
+
+ bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ {
+ CloseGossipMenuFor(player);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_1, 0s);
+ _scriptRunning = true;
+ return false;
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!_scriptRunning)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_VOLJIN_VISION_SCRIPT_1:
+ {
+ me->SetGossipMenuId(GOSSIP_MENU_VISION_IN_PROGRESS);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_2, 0s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_2:
+ {
+ me->SetFacingTo(3.97935f);
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_0);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_3, 3s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_3:
+ {
+ DoCastSelf(SPELL_RITES_OF_VISION);
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _bunnyGUID))
+ bunny->AI()->DoCastSelf(SPELL_VOLJINS_VISION_SMOKE);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, _brazierGUID))
+ brazier->SetGoState(GO_STATE_ACTIVE);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_4, 4s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_4:
+ {
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ {
+ garrosh->AI()->DoCastSelf(SPELL_GENERIC_QUEST_INVISIBILITY_1);
+ garrosh->RemoveAura(SPELL_GENERIC_QUEST_INVISIBILITY_8);
+ }
+
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_5, 1s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_5:
+ {
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ garrosh->AI()->Talk(SAY_GORROSH_VISION_SCRIPT_TEXT_0);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_6, 7s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_6:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ {
+ voljin->AI()->DoCastSelf(SPELL_GENERIC_QUEST_INVISIBILITY_1);
+ voljin->RemoveAura(SPELL_GENERIC_QUEST_INVISIBILITY_8);
+ }
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_7, 4s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_7:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_0);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_8, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_8:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_1);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_9, 6s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_9:
+ {
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ garrosh->AI()->Talk(SAY_GORROSH_VISION_SCRIPT_TEXT_1);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_10, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_10:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_2);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_11, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_11:
+ {
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ garrosh->AI()->Talk(SAY_GORROSH_VISION_SCRIPT_TEXT_2);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_12, 16s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_12:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_3);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_13, 16s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_13:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_4);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_14, 15s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_14:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_5);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_15, 17s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_15:
+ {
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ garrosh->AI()->Talk(SAY_GORROSH_VISION_SCRIPT_TEXT_3);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_16, 3s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_16:
+ {
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ garrosh->AI()->Talk(SAY_GORROSH_VISION_SCRIPT_TEXT_4);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_17, 3s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_17:
+ {
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ voljin->AI()->Talk(SAY_VOLJIN_VISION_SCRIPT_TEXT_6);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_18, 9s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_18:
+ {
+ me->RemoveAura(SPELL_RITES_OF_VISION);
+ if (Creature* garrosh = ObjectAccessor::GetCreature(*me, _garroshGUID))
+ {
+ garrosh->AI()->DoCastSelf(SPELL_GENERIC_QUEST_INVISIBILITY_8);
+ garrosh->RemoveAura(SPELL_GENERIC_QUEST_INVISIBILITY_1);
+ }
+
+ if (Creature* voljin = ObjectAccessor::GetCreature(*me, _voljinGUID))
+ {
+ voljin->AI()->DoCastSelf(SPELL_GENERIC_QUEST_INVISIBILITY_8);
+ voljin->RemoveAura(SPELL_GENERIC_QUEST_INVISIBILITY_1);
+ }
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _bunnyGUID))
+ bunny->RemoveAura(SPELL_VOLJINS_VISION_SMOKE);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, _brazierGUID))
+ brazier->SetGoState(GO_STATE_READY);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_19, 2s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_19:
+ {
+ me->SetFacingTo(0.837758f);
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_1);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_20, 9s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_20:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_2);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_21, 16s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_21:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_3);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_22, 8s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_22:
+ {
+ me->SetGossipMenuId(GOSSIP_MENU_GARROSH_VISION);
+ _scriptRunning = false;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+private:
+ EventMap _events;
+ bool _scriptRunning;
+ ObjectGuid _garroshGUID;
+ ObjectGuid _voljinGUID;
+ ObjectGuid _bunnyGUID;
+ ObjectGuid _brazierGUID;
+};
+
+// 38966 - Vol'jin (specific script for guid 3000469)
+struct npc_voljin_thrall_vision : public ScriptedAI
+{
+ npc_voljin_thrall_vision(Creature* creature) : ScriptedAI(creature), _scriptRunning(false) { }
+
+ void JustAppeared() override
+ {
+ me->SetGossipMenuId(GOSSIP_MENU_THRALL_VISION);
+
+ Creature* thrall = me->FindNearestCreatureWithOptions(10.0f, { .StringId = "vision_of_thrall", .IgnorePhases = true });
+ Creature* bunny = me->FindNearestCreatureWithOptions(10.0f, { .StringId = "vision_brazier_bunny_thrall", .IgnorePhases = true });
+ GameObject* brazier = me->FindNearestGameObjectWithOptions(10.0f, { .StringId = "vision_brazier_thrall", .IgnorePhases = true });
+
+ if (!thrall || !bunny || !brazier)
+ return;
+
+ _thrallGUID = thrall->GetGUID();
+ _bunnyGUID = bunny->GetGUID();
+ _brazierGUID = brazier->GetGUID();
+ }
+
+ void OnQuestReward(Player* /*player*/, Quest const* quest, LootItemType /*type*/, uint32 /*opt*/) override
+ {
+ if (_scriptRunning)
+ return;
+
+ if (quest->GetQuestId() == QUEST_AN_ANCIENT_ENEMY)
+ {
+ _scriptRunning = true;
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_1, 0s);
+ }
+ }
+
+ bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ {
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_1, 0s);
+ CloseGossipMenuFor(player);
+ _scriptRunning = true;
+ return false;
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!_scriptRunning)
+ return;
+
+ _events.Update(diff);
+
+ while (uint32 eventId = _events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_VOLJIN_VISION_SCRIPT_1:
+ {
+ me->SetGossipMenuId(GOSSIP_MENU_VISION_IN_PROGRESS);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_2, 0s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_2:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_4);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_3, 9s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_3:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_5);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_4, 8s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_4:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_6);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_5, 7s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_5:
+ {
+ DoCastSelf(SPELL_RITES_OF_VISION);
+ me->SetFacingTo(3.97935f);
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _bunnyGUID))
+ bunny->AI()->DoCastSelf(SPELL_VOLJINS_VISION_SMOKE);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, _brazierGUID))
+ brazier->SetGoState(GO_STATE_ACTIVE);
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ {
+ thrall->AI()->DoCastSelf(SPELL_GENERIC_QUEST_INVISIBILITY_2);
+ thrall->RemoveAura(SPELL_GENERIC_QUEST_INVISIBILITY_8);
+ }
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_6, 5s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_6:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_0);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_7, 4s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_7:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_7);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_8, 6s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_8:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_1);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_9, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_9:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_8);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_10, 18s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_10:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_2);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_11, 6s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_11:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_3);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_12, 12s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_12:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_4);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_13, 18s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_13:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_5);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_14, 17s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_14:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_6);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_15, 9s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_15:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_9);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_16, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_16:
+ {
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ thrall->AI()->Talk(SAY_THRALL_VISION_SCRIPT_TEXT_7);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_17, 6s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_17:
+ {
+ me->RemoveAura(SPELL_RITES_OF_VISION);
+ me->SetFacingTo(0.837758f);
+ if (Creature* thrall = ObjectAccessor::GetCreature(*me, _thrallGUID))
+ {
+ thrall->AI()->DoCastSelf(SPELL_GENERIC_QUEST_INVISIBILITY_8);
+ thrall->RemoveAura(SPELL_GENERIC_QUEST_INVISIBILITY_2);
+ }
+ if (Creature* bunny = ObjectAccessor::GetCreature(*me, _bunnyGUID))
+ bunny->RemoveAura(SPELL_VOLJINS_VISION_SMOKE);
+ if (GameObject* brazier = ObjectAccessor::GetGameObject(*me, _brazierGUID))
+ brazier->SetGoState(GO_STATE_READY);
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_10);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_18, 8s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_18:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_11);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_19, 9s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_19:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_12);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_20, 17s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_20:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_13);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_21, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_21:
+ {
+ Talk(SAY_VOLJIN_SCRIPT_TEXT_14);
+ _events.ScheduleEvent(EVENT_VOLJIN_VISION_SCRIPT_22, 11s);
+ break;
+ }
+ case EVENT_VOLJIN_VISION_SCRIPT_22:
+ {
+ me->SetGossipMenuId(GOSSIP_MENU_THRALL_VISION);
+ _scriptRunning = false;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+private:
+ EventMap _events;
+ bool _scriptRunning;
+ ObjectGuid _thrallGUID;
+ ObjectGuid _bunnyGUID;
+ ObjectGuid _brazierGUID;
+};
+
void AddSC_durotar()
{
new npc_lazy_peon();
@@ -681,4 +1250,6 @@ void AddSC_durotar()
new quest_proving_pit<NPC_TRAINER_ZENTABRA>("quest_proving_pit_druid");
new quest_proving_pit<NPC_TRAINER_VOLDREKA>("quest_proving_pit_warlock");
new quest_proving_pit<NPC_TRAINER_ZABRAX>("quest_proving_pit_monk");
+ RegisterCreatureAI(npc_voljin_garrosh_vision);
+ RegisterCreatureAI(npc_voljin_thrall_vision);
}