fix(Scripts/Quest): A Cry For Help (#5720)

This commit is contained in:
Emir
2021-05-22 12:53:45 -07:00
committed by GitHub
parent a75b84ab2e
commit 0527c17d5f
2 changed files with 82 additions and 13 deletions

View File

@@ -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