aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-10-03 23:47:41 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-03-05 01:06:44 +0100
commit30153510e804c6fd05439e8920605185874b3453 (patch)
tree07b5f53e8e1f5c6e13ecc181446d26c0aa456c3c /src
parent8c7b3c8a2bd4cc8ab07213c07d0e9527ed77b4f2 (diff)
Script/Quest: A Cry For Help: (#18026)
- Add missing dialogue from Cowlen. - Timers and emotes. (cherry picked from commit 790844e72d40cd2c99a3a235a7186173af575417) Rename two SQL files. (cherry picked from commit 283aec96560f66a72b4d563eefbccdbee2de10ea)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp72
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 c095bc853ee..244d084f218 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -330,7 +330,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
};
@@ -343,7 +350,10 @@ public:
{
npc_magwinAI(Creature* creature) : npc_escortAI(creature) { }
- void Reset() override { }
+ void Reset() override
+ {
+ _events.Reset();
+ }
void EnterCombat(Unit* who) override
{
@@ -352,10 +362,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));
}
}
@@ -365,23 +375,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