diff options
author | SnapperRy <snapperryen@gmail.com> | 2016-10-03 23:47:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-03 23:47:41 +0200 |
commit | 790844e72d40cd2c99a3a235a7186173af575417 (patch) | |
tree | e08dde713229d146400c58840e9577f1b923b8fe /src | |
parent | ea6911517d38aa8ea493dbe88a33c9734d86bb04 (diff) |
Script/Quest: A Cry For Help: (#18026)
- Add missing dialogue from Cowlen.
- Timers and emotes.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp | 72 |
1 files changed, 61 insertions, 11 deletions
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index c47971836ac..fdc9b0c12ff 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -331,7 +331,14 @@ enum Magwin SAY_END1 = 3, SAY_END2 = 4, EMOTE_HUG = 5, - QUEST_A_CRY_FOR_SAY_HELP = 9528, + NPC_COWLEN = 17311, + SAY_COWLEN = 0, + EVENT_ACCEPT_QUEST = 1, + EVENT_START_ESCORT = 2, + EVENT_STAND = 3, + EVENT_TALK_END = 4, + EVENT_COWLEN_TALK = 5, + QUEST_A_CRY_FOR_HELP = 9528, FACTION_QUEST = 113 }; @@ -344,7 +351,10 @@ public: { npc_magwinAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() override { } + void Reset() override + { + _events.Reset(); + } void EnterCombat(Unit* who) override { @@ -353,10 +363,10 @@ public: void sQuestAccept(Player* player, Quest const* quest) override { - if (quest->GetQuestId() == QUEST_A_CRY_FOR_SAY_HELP) + if (quest->GetQuestId() == QUEST_A_CRY_FOR_HELP) { - me->setFaction(FACTION_QUEST); - npc_escortAI::Start(true, false, player->GetGUID()); + _player = player->GetGUID(); + _events.ScheduleEvent(EVENT_ACCEPT_QUEST, Seconds(2)); } } @@ -366,23 +376,63 @@ public: { switch (waypointId) { - case 0: - Talk(SAY_START, player); - break; case 17: Talk(SAY_PROGRESS, player); break; case 28: - Talk(SAY_END1, player); + player->GroupEventHappens(QUEST_A_CRY_FOR_HELP, me); + _events.ScheduleEvent(EVENT_TALK_END, Seconds(2)); + SetRun(true); break; case 29: - Talk(EMOTE_HUG, player); + if (Creature* cowlen = me->FindNearestCreature(NPC_COWLEN, 50.0f, true)) + Talk(EMOTE_HUG, cowlen); Talk(SAY_END2, player); - player->GroupEventHappens(QUEST_A_CRY_FOR_SAY_HELP, me); break; } } } + + void UpdateEscortAI(uint32 diff) override + { + _events.Update(diff); + + if (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_ACCEPT_QUEST: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(SAY_START, player); + me->setFaction(FACTION_QUEST); + _events.ScheduleEvent(EVENT_START_ESCORT, Seconds(1)); + break; + case EVENT_START_ESCORT: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + npc_escortAI::Start(true, false, player->GetGUID()); + _events.ScheduleEvent(EVENT_STAND, Seconds(2)); + break; + case EVENT_STAND: // Remove kneel standstate. Using a separate delayed event because it causes unwanted delay before starting waypoint movement. + me->SetByteValue(UNIT_FIELD_BYTES_1, 0, 0); + break; + case EVENT_TALK_END: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + Talk(SAY_END1, player); + _events.ScheduleEvent(EVENT_COWLEN_TALK, Seconds(2)); + break; + case EVENT_COWLEN_TALK: + if (Creature* cowlen = me->FindNearestCreature(NPC_COWLEN, 50.0f, true)) + cowlen->AI()->Talk(SAY_COWLEN); + break; + } + } + + npc_escortAI::UpdateEscortAI(diff); + } + + private: + EventMap _events; + ObjectGuid _player; }; CreatureAI* GetAI(Creature* creature) const override |