mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
DB/Quest: Convert & update support for Borean Tundra escort quests to SAI
Closes #25001
(cherry picked from commit 040fda87ef)
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user