From 0527c17d5f92504bbec8634cfe81321ff441ff2a Mon Sep 17 00:00:00 2001 From: Emir Date: Sat, 22 May 2021 12:53:45 -0700 Subject: [PATCH] fix(Scripts/Quest): A Cry For Help (#5720) --- .../rev_1620469549972464900.sql | 12 +++ .../scripts/Kalimdor/zone_azuremyst_isle.cpp | 83 ++++++++++++++++--- 2 files changed, 82 insertions(+), 13 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1620469549972464900.sql diff --git a/data/sql/updates/pending_db_world/rev_1620469549972464900.sql b/data/sql/updates/pending_db_world/rev_1620469549972464900.sql new file mode 100644 index 000000000..6e8e9b638 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1620469549972464900.sql @@ -0,0 +1,12 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1620469549972464900'); +UPDATE `creature_text` SET `language`=7, `BroadcastTextid`=13770 WHERE `creatureid`=17312 AND `groupid`=1; +UPDATE `creature_text` SET `emote`=5 WHERE `creatureid`=17312 AND `groupid`=2; +UPDATE `creature_text` SET `emote`=22 WHERE `creatureid`=17312 AND `groupid`=3; +UPDATE `creature_text` SET `emote`=5 WHERE `creatureid`=17312 AND `groupid`=4; + +DELETE FROM `creature_text` WHERE `creatureid`=17311; +INSERT INTO `creature_text` (`creatureid`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17311, 0, 0, (SELECT `MaleText` FROM `broadcast_text` WHERE `ID`=13749), 12, 7, 100, 0, 0, 0, 13749, 0, "Cowlen"); + +UPDATE `script_waypoint` SET `waittime`=3000 WHERE `entry`=17312 AND `pointid`=28; +UPDATE `script_waypoint` SET `waittime`=5000 WHERE `entry`=17312 AND `pointid`=29; diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 1ef1f0314..77a6400b8 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -210,7 +210,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 }; @@ -223,7 +230,10 @@ public: { npc_magwinAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() override { } + void Reset() override + { + _events.Reset(); + } void EnterCombat(Unit* who) override { @@ -232,10 +242,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, 2000); } } @@ -245,23 +255,70 @@ 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, 2000); + SetRun(true); break; case 29: - Talk(EMOTE_HUG, player); - Talk(SAY_END2, player); - player->GroupEventHappens(QUEST_A_CRY_FOR_SAY_HELP, me); - break; + if (Creature* cowlen = me->FindNearestCreature(NPC_COWLEN, 50.0f, true)) + { + Talk(EMOTE_HUG, cowlen); + Talk(SAY_END2, player); + 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, 1000); + break; + case EVENT_START_ESCORT: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + { + npc_escortAI::Start(true, false, player->GetGUID()); + } + _events.ScheduleEvent(EVENT_STAND, 2000); + 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, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_STAND); + break; + case EVENT_TALK_END: + if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) + { + Talk(SAY_END1, player); + } + _events.ScheduleEvent(EVENT_COWLEN_TALK, 2000); + 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