DB/Quest: Convert & update support for Borean Tundra escort quests to SAI

Closes #25001

(cherry picked from commit 040fda87ef)
This commit is contained in:
offl
2020-08-22 20:04:35 +03:00
committed by Shauren
parent 5675d62159
commit 192b98e544
2 changed files with 239 additions and 373 deletions

View File

@@ -352,152 +352,6 @@ public:
}
};
/*######
## npc_lurgglbr
######*/
enum Lurgglbr
{
QUEST_ESCAPE_WINTERFIN_CAVERNS = 11570,
GO_CAGE = 187369,
SAY_START_1 = 0,
SAY_START_2 = 1,
SAY_END_1 = 2,
SAY_END_2 = 3
};
class npc_lurgglbr : public CreatureScript
{
public:
npc_lurgglbr() : CreatureScript("npc_lurgglbr") { }
struct npc_lurgglbrAI : public EscortAI
{
npc_lurgglbrAI(Creature* creature) : EscortAI(creature)
{
Initialize();
}
void Initialize()
{
IntroTimer = 0;
IntroPhase = 0;
}
uint32 IntroTimer;
uint32 IntroPhase;
void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
Initialize();
}
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
{
switch (waypointId)
{
case 0:
IntroPhase = 1;
IntroTimer = 2000;
break;
case 41:
SetEscortPaused(true);
IntroPhase = 4;
IntroTimer = 2000;
break;
}
}
void UpdateAI(uint32 diff) override
{
if (IntroPhase)
{
if (IntroTimer <= diff)
{
switch (IntroPhase)
{
case 1:
if (Player* player = GetPlayerForEscort())
Talk(SAY_START_1, player);
IntroPhase = 2;
IntroTimer = 7500;
break;
case 2:
Talk(SAY_START_2);
IntroPhase = 3;
IntroTimer = 7500;
break;
case 3:
me->SetReactState(REACT_DEFENSIVE);
IntroPhase = 0;
IntroTimer = 0;
break;
case 4:
Talk(SAY_END_1);
IntroPhase = 5;
IntroTimer = 8000;
break;
case 5:
if (Player* player = GetPlayerForEscort())
Talk(SAY_END_2, player);
IntroPhase = 6;
IntroTimer = 2500;
break;
case 6:
if (Player* player = GetPlayerForEscort())
player->AreaExploredOrEventHappens(QUEST_ESCAPE_WINTERFIN_CAVERNS);
IntroPhase = 7;
IntroTimer = 2500;
break;
case 7:
me->DespawnOrUnsummon();
IntroPhase = 0;
IntroTimer = 0;
break;
}
} else IntroTimer -= diff;
}
EscortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
}
void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPE_WINTERFIN_CAVERNS)
{
if (GameObject* go = me->FindNearestGameObject(GO_CAGE, 5.0f))
{
go->SetRespawnTime(0);
go->UseDoorOrButton(20000);
}
Start(true, false, player->GetGUID());
switch (player->GetTeam())
{
case ALLIANCE:
me->SetFaction(FACTION_ESCORTEE_A_PASSIVE);
break;
default:
case HORDE:
me->SetFaction(FACTION_ESCORTEE_H_PASSIVE);
break;
}
}
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lurgglbrAI(creature);
}
};
enum red_dragonblood
{
SPELL_DRAKE_HATCHLING_SUBDUED = 46691,
@@ -1412,230 +1266,6 @@ public:
}
};
/*######
## npc_mootoo_the_younger
######*/
enum MootooTheYounger
{
SAY_1 = 0,
SAY_2 = 1,
SAY_3 = 2,
SAY_4 = 3,
SAY_5 = 4,
NPC_MOOTOO_THE_YOUNGER = 25504,
QUEST_ESCAPING_THE_MIST = 11664
};
class npc_mootoo_the_younger : public CreatureScript
{
public:
npc_mootoo_the_younger() : CreatureScript("npc_mootoo_the_younger") { }
struct npc_mootoo_the_youngerAI : public EscortAI
{
npc_mootoo_the_youngerAI(Creature* creature) : EscortAI(creature) { }
void Reset() override
{
SetDespawnAtFar(false);
}
void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_ESCAPING_THE_MIST);
}
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
{
Player* player = GetPlayerForEscort();
if (!player)
return;
switch (waypointId)
{
case 10:
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
Talk(SAY_2);
break;
case 12:
Talk(SAY_3);
me->HandleEmoteCommand(EMOTE_ONESHOT_LOOT);
break;
case 16:
Talk(SAY_4);
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
break;
case 20:
PhasingHandler::RemovePhase(me, 170, true);
Talk(SAY_5);
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
player->GroupEventHappens(QUEST_ESCAPING_THE_MIST, me);
SetRun(true);
break;
}
}
void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ESCAPING_THE_MIST)
{
switch (player->GetTeam())
{
case ALLIANCE:
me->SetFaction(FACTION_ESCORTEE_A_PASSIVE);
break;
case HORDE:
me->SetFaction(FACTION_ESCORTEE_H_PASSIVE);
break;
}
me->SetStandState(UNIT_STAND_STATE_STAND);
Talk(SAY_1, player);
Start(true, false, player->GetGUID());
}
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mootoo_the_youngerAI(creature);
}
};
/*######
## npc_bonker_togglevolt
######*/
enum BonkerTogglevolt
{
NPC_BONKER_TOGGLEVOLT = 25589,
GO_BALL_AND_CHAIN = 182531,
QUEST_GET_ME_OUTA_HERE = 11673,
EVENT_OOC_TALK = 1,
EVENT_TALK_1 = 2,
EVENT_TALK_2 = 3,
SAY_BONKER_0 = 0,
SAY_BONKER_1 = 1,
SAY_BONKER_2 = 2,
SAY_BONKER_3 = 3,
SAY_BONKER_4 = 4,
SAY_BONKER_5 = 5
};
class npc_bonker_togglevolt : public CreatureScript
{
public:
npc_bonker_togglevolt() : CreatureScript("npc_bonker_togglevolt") { }
struct npc_bonker_togglevoltAI : public EscortAI
{
npc_bonker_togglevoltAI(Creature* creature) : EscortAI(creature)
{
Initialize();
}
void Initialize()
{
_events.ScheduleEvent(EVENT_OOC_TALK, 10s, 20s);
}
void Reset() override
{
SetDespawnAtFar(false);
}
void JustDied(Unit* /*killer*/) override
{
if (Player* player = GetPlayerForEscort())
player->FailQuest(QUEST_GET_ME_OUTA_HERE);
}
void JustEngagedWith(Unit* who) override
{
if (who->GetTypeId() != TYPEID_PLAYER)
{
if (roll_chance_i(20))
Talk(SAY_BONKER_5);
}
}
void UpdateEscortAI(uint32 diff) override
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_OOC_TALK:
Talk(SAY_BONKER_0);
_events.ScheduleEvent(EVENT_OOC_TALK, 5min, 10min);
break;
case EVENT_TALK_1:
if (Player* player = ObjectAccessor::GetPlayer(*me, _player))
Talk(SAY_BONKER_1, player);
if (GameObject* go = me->FindNearestGameObject(GO_BALL_AND_CHAIN, 20.0f))
go->SetLootState(GO_JUST_DEACTIVATED);
_events.ScheduleEvent(EVENT_TALK_2, 11s);
break;
case EVENT_TALK_2:
Talk(SAY_BONKER_2);
me->SetReactState(REACT_AGGRESSIVE);
break;
}
}
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
{
Player* player = GetPlayerForEscort();
if (!player)
return;
switch (waypointId)
{
case 1:
Talk(SAY_BONKER_3);
break;
case 29:
player->GroupEventHappens(QUEST_GET_ME_OUTA_HERE, me);
Talk(SAY_BONKER_4, player);
break;
}
}
void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE)
{
_player = player->GetGUID();
me->SetStandState(UNIT_STAND_STATE_STAND);
_events.ScheduleEvent(EVENT_TALK_1, Seconds(2));
_events.CancelEvent(EVENT_OOC_TALK);
Start(true, true, player->GetGUID());
SetPauseTimer(12s);
}
}
private:
EventMap _events;
ObjectGuid _player;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_bonker_togglevoltAI(creature);
}
};
/*######
## Help Those That Cannot Help Themselves, Quest 11876
######*/
@@ -2251,7 +1881,6 @@ void AddSC_borean_tundra()
new npc_nerubar_victim();
RegisterSpellScript(spell_q11865_place_fake_fur);
new npc_nesingwary_trapper();
new npc_lurgglbr();
new spell_red_dragonblood();
new npc_thassarian();
new npc_image_lich_king();
@@ -2260,8 +1889,6 @@ void AddSC_borean_tundra()
new npc_general_arlos();
new npc_beryl_sorcerer();
new npc_imprisoned_beryl_sorcerer();
new npc_mootoo_the_younger();
new npc_bonker_togglevolt();
new npc_trapped_mammoth_calf();
new npc_valiance_keep_cannoneer();
new npc_hidden_cultist();