mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 02:25:38 +01:00
Scripts/HoR: implement Quel'Delar quest
* support for quest 24480, 24561
* there may be some visual problems but quest should work as intended
Closes https://github.com/TrinityCore/TrinityCore/issues/838
(cherry picked from commit 71b53601a3)
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#include "SpellScript.h"
|
||||
#include "Transport.h"
|
||||
#include "Player.h"
|
||||
#include "MoveSplineInit.h"
|
||||
#include "halls_of_reflection.h"
|
||||
|
||||
enum Text
|
||||
@@ -342,6 +343,20 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
|
||||
public:
|
||||
npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { }
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature) override
|
||||
{
|
||||
// override default gossip
|
||||
if (InstanceScript* instance = creature->GetInstanceScript())
|
||||
if (instance->GetData(DATA_QUEL_DELAR_EVENT) == IN_PROGRESS || instance->GetData(DATA_QUEL_DELAR_EVENT) == SPECIAL)
|
||||
{
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
return true;
|
||||
}
|
||||
|
||||
// load default gossip
|
||||
return false;
|
||||
}
|
||||
|
||||
struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI
|
||||
{
|
||||
npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature)
|
||||
@@ -1998,6 +2013,13 @@ class at_hor_intro_start : public AreaTriggerScript
|
||||
if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED)
|
||||
_instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS);
|
||||
|
||||
if (player->HasAura(SPELL_QUEL_DELAR_COMPULSION) && (player->GetQuestStatus(QUEST_HALLS_OF_REFLECTION_ALLIANCE) == QUEST_STATUS_INCOMPLETE ||
|
||||
player->GetQuestStatus(QUEST_HALLS_OF_REFLECTION_HORDE) == QUEST_STATUS_INCOMPLETE) && _instance->GetData(DATA_QUEL_DELAR_EVENT) == NOT_STARTED)
|
||||
{
|
||||
_instance->SetData(DATA_QUEL_DELAR_EVENT, IN_PROGRESS);
|
||||
_instance->SetGuidData(DATA_QUEL_DELAR_INVOKER, player->GetGUID());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -2330,6 +2352,395 @@ class npc_lumbering_abomination : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
enum QuelDelarUther
|
||||
{
|
||||
ACTION_UTHER_START_SCREAM = 1,
|
||||
ACTION_UTHER_OUTRO = 2,
|
||||
|
||||
EVENT_UTHER_1 = 1,
|
||||
EVENT_UTHER_2 = 2,
|
||||
EVENT_UTHER_3 = 3,
|
||||
EVENT_UTHER_4 = 4,
|
||||
EVENT_UTHER_5 = 5,
|
||||
EVENT_UTHER_6 = 6,
|
||||
EVENT_UTHER_7 = 7,
|
||||
EVENT_UTHER_8 = 8,
|
||||
EVENT_UTHER_9 = 9,
|
||||
EVENT_UTHER_10 = 10,
|
||||
EVENT_UTHER_11 = 11,
|
||||
EVENT_UTHER_FACING = 12,
|
||||
EVENT_UTHER_KNEEL = 13,
|
||||
|
||||
SAY_UTHER_QUEL_DELAR_1 = 16,
|
||||
SAY_UTHER_QUEL_DELAR_2 = 17,
|
||||
SAY_UTHER_QUEL_DELAR_3 = 18,
|
||||
SAY_UTHER_QUEL_DELAR_4 = 19,
|
||||
SAY_UTHER_QUEL_DELAR_5 = 20,
|
||||
SAY_UTHER_QUEL_DELAR_6 = 21,
|
||||
|
||||
SPELL_ESSENCE_OF_CAPTURED_1 = 73036
|
||||
};
|
||||
|
||||
enum QuelDelarSword
|
||||
{
|
||||
SPELL_WHIRLWIND_VISUAL = 70300,
|
||||
SPELL_HEROIC_STRIKE = 29426,
|
||||
SPELL_WHIRLWIND = 67716,
|
||||
SPELL_BLADESTORM = 67541,
|
||||
|
||||
NPC_QUEL_DELAR = 37158,
|
||||
POINT_TAKE_OFF = 1,
|
||||
|
||||
EVENT_QUEL_DELAR_INIT = 1,
|
||||
EVENT_QUEL_DELAR_FLIGHT_INIT = 2,
|
||||
EVENT_QUEL_DELAR_FLIGHT = 3,
|
||||
EVENT_QUEL_DELAR_LAND = 4,
|
||||
EVENT_QUEL_DELAR_FIGHT = 5,
|
||||
EVENT_QUEL_DELAR_BLADESTORM = 6,
|
||||
EVENT_QUEL_DELAR_HEROIC_STRIKE = 7,
|
||||
EVENT_QUEL_DELAR_WHIRLWIND = 8,
|
||||
|
||||
SAY_QUEL_DELAR_SWORD = 0
|
||||
};
|
||||
|
||||
enum QuelDelarMisc
|
||||
{
|
||||
SAY_FROSTMOURNE_BUNNY = 0,
|
||||
SPELL_QUEL_DELAR_WILL = 70698
|
||||
};
|
||||
|
||||
Position const QuelDelarCenterPos = { 5309.259f, 2006.390f, 718.046f, 0.0f };
|
||||
Position const QuelDelarSummonPos = { 5298.473f, 1994.852f, 709.424f, 3.979351f };
|
||||
Position const QuelDelarMovement[] =
|
||||
{
|
||||
{ 5292.870f, 1998.950f, 718.046f, 0.0f },
|
||||
{ 5295.819f, 1991.912f, 707.707f, 0.0f },
|
||||
{ 5295.301f, 1989.782f, 708.696f, 0.0f }
|
||||
};
|
||||
|
||||
Position const UtherQuelDelarMovement[] =
|
||||
{
|
||||
{ 5336.830f, 1981.700f, 709.319f, 0.0f },
|
||||
{ 5314.350f, 1993.440f, 707.726f, 0.0f }
|
||||
};
|
||||
|
||||
class npc_uther_quel_delar : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_uther_quel_delar() : CreatureScript("npc_uther_quel_delar") { }
|
||||
|
||||
struct npc_uther_quel_delarAI : public ScriptedAI
|
||||
{
|
||||
npc_uther_quel_delarAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
_instance = me->GetInstanceScript();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
// Prevent to break Uther in intro event during instance encounter
|
||||
if (_instance->GetData(DATA_QUEL_DELAR_EVENT) != IN_PROGRESS && _instance->GetData(DATA_QUEL_DELAR_EVENT) != SPECIAL)
|
||||
return;
|
||||
|
||||
_events.Reset();
|
||||
_events.ScheduleEvent(EVENT_UTHER_1, 1);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
|
||||
{
|
||||
if (damage >= me->GetHealth())
|
||||
damage = me->GetHealth() - 1;
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_UTHER_START_SCREAM:
|
||||
_instance->SetData(DATA_QUEL_DELAR_EVENT, SPECIAL);
|
||||
_events.ScheduleEvent(EVENT_UTHER_2, 0);
|
||||
break;
|
||||
case ACTION_UTHER_OUTRO:
|
||||
_events.ScheduleEvent(EVENT_UTHER_6, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 /*type*/, uint32 pointId) override
|
||||
{
|
||||
switch (pointId)
|
||||
{
|
||||
case 1:
|
||||
_events.ScheduleEvent(EVENT_UTHER_FACING, 1000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
// Prevent to break Uther in intro event during instance encounter
|
||||
if (_instance->GetData(DATA_QUEL_DELAR_EVENT) != IN_PROGRESS && _instance->GetData(DATA_QUEL_DELAR_EVENT) != SPECIAL)
|
||||
return;
|
||||
|
||||
_events.Update(diff);
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_UTHER_1:
|
||||
Talk(SAY_UTHER_QUEL_DELAR_1);
|
||||
break;
|
||||
case EVENT_UTHER_2:
|
||||
if (Creature* bunny = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FROSTMOURNE_ALTAR_BUNNY)))
|
||||
if (Unit* target = ObjectAccessor::GetPlayer(*me, _instance->GetGuidData(DATA_QUEL_DELAR_INVOKER)))
|
||||
bunny->CastSpell(target, SPELL_QUEL_DELAR_WILL, true);
|
||||
_events.ScheduleEvent(EVENT_UTHER_3, 2000);
|
||||
break;
|
||||
case EVENT_UTHER_3:
|
||||
me->SummonCreature(NPC_QUEL_DELAR, QuelDelarSummonPos);
|
||||
_events.ScheduleEvent(EVENT_UTHER_4, 2000);
|
||||
break;
|
||||
case EVENT_UTHER_4:
|
||||
Talk(SAY_UTHER_QUEL_DELAR_2);
|
||||
_events.ScheduleEvent(EVENT_UTHER_5, 8000);
|
||||
break;
|
||||
case EVENT_UTHER_5:
|
||||
me->GetMotionMaster()->MovePoint(1, UtherQuelDelarMovement[0]);
|
||||
break;
|
||||
case EVENT_UTHER_6:
|
||||
me->SetWalk(true);
|
||||
me->GetMotionMaster()->MovePoint(0, UtherQuelDelarMovement[1]);
|
||||
_events.ScheduleEvent(EVENT_UTHER_7, 5000);
|
||||
break;
|
||||
case EVENT_UTHER_7:
|
||||
Talk(SAY_UTHER_QUEL_DELAR_3);
|
||||
_events.ScheduleEvent(EVENT_UTHER_8, 12000);
|
||||
break;
|
||||
case EVENT_UTHER_8:
|
||||
Talk(SAY_UTHER_QUEL_DELAR_4);
|
||||
_events.ScheduleEvent(EVENT_UTHER_9, 7000);
|
||||
break;
|
||||
case EVENT_UTHER_9:
|
||||
Talk(SAY_UTHER_QUEL_DELAR_5);
|
||||
_events.ScheduleEvent(EVENT_UTHER_10, 10000);
|
||||
break;
|
||||
case EVENT_UTHER_10:
|
||||
Talk(SAY_UTHER_QUEL_DELAR_6);
|
||||
_events.ScheduleEvent(EVENT_UTHER_11, 5000);
|
||||
break;
|
||||
case EVENT_UTHER_11:
|
||||
DoCast(me, SPELL_ESSENCE_OF_CAPTURED_1, true);
|
||||
me->DespawnOrUnsummon(3000);
|
||||
_instance->SetData(DATA_QUEL_DELAR_EVENT, DONE);
|
||||
break;
|
||||
case EVENT_UTHER_FACING:
|
||||
if (Creature* bunny = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FROSTMOURNE_ALTAR_BUNNY)))
|
||||
me->SetFacingToObject(bunny);
|
||||
_events.ScheduleEvent(EVENT_UTHER_KNEEL, 1000);
|
||||
break;
|
||||
case EVENT_UTHER_KNEEL:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_KNEEL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetHallsOfReflectionAI<npc_uther_quel_delarAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_quel_delar_sword : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_quel_delar_sword() : CreatureScript("npc_quel_delar_sword") { }
|
||||
|
||||
struct npc_quel_delar_swordAI : public ScriptedAI
|
||||
{
|
||||
npc_quel_delar_swordAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
_instance = me->GetInstanceScript();
|
||||
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
|
||||
_intro = true;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_events.Reset();
|
||||
me->SetSpeed(MOVE_FLIGHT, 4.5f, true);
|
||||
DoCast(SPELL_WHIRLWIND_VISUAL);
|
||||
if (_intro)
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_INIT, 0);
|
||||
else
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*victim*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_HEROIC_STRIKE, 4000);
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_BLADESTORM, 6000);
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_WHIRLWIND, 6000);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
if (Creature* uther = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_UTHER_QUEL_DELAR)))
|
||||
uther->AI()->DoAction(ACTION_UTHER_OUTRO);
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 pointId) override
|
||||
{
|
||||
if (type != EFFECT_MOTION_TYPE)
|
||||
return;
|
||||
|
||||
switch (pointId)
|
||||
{
|
||||
case POINT_TAKE_OFF:
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_FLIGHT, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
if (!UpdateVictim())
|
||||
{
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_QUEL_DELAR_INIT:
|
||||
if (Creature* bunny = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FROSTMOURNE_ALTAR_BUNNY)))
|
||||
bunny->AI()->Talk(SAY_FROSTMOURNE_BUNNY);
|
||||
_intro = false;
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_FLIGHT_INIT, 2500);
|
||||
break;
|
||||
case EVENT_QUEL_DELAR_FLIGHT_INIT:
|
||||
me->GetMotionMaster()->MoveTakeoff(POINT_TAKE_OFF, QuelDelarMovement[0]);
|
||||
break;
|
||||
case EVENT_QUEL_DELAR_FLIGHT:
|
||||
{
|
||||
Movement::MoveSplineInit init(me);
|
||||
FillCirclePath(QuelDelarCenterPos, 18.0f, 718.046f, init.Path(), true);
|
||||
init.SetFly();
|
||||
init.SetCyclic();
|
||||
init.SetAnimation(Movement::ToFly);
|
||||
init.Launch();
|
||||
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_LAND, 15000);
|
||||
break;
|
||||
}
|
||||
case EVENT_QUEL_DELAR_LAND:
|
||||
me->StopMoving();
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->GetMotionMaster()->MoveLand(0, QuelDelarMovement[1]);
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_FIGHT, 6000);
|
||||
break;
|
||||
case EVENT_QUEL_DELAR_FIGHT:
|
||||
Talk(SAY_QUEL_DELAR_SWORD);
|
||||
me->GetMotionMaster()->MovePoint(0, QuelDelarMovement[2]);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_QUEL_DELAR_BLADESTORM:
|
||||
DoCast(me, SPELL_BLADESTORM);
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_BLADESTORM, 10000);
|
||||
break;
|
||||
case EVENT_QUEL_DELAR_HEROIC_STRIKE:
|
||||
DoCastVictim(SPELL_HEROIC_STRIKE);
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_HEROIC_STRIKE, 6000);
|
||||
break;
|
||||
case EVENT_QUEL_DELAR_WHIRLWIND:
|
||||
DoCastAOE(SPELL_WHIRLWIND);
|
||||
_events.ScheduleEvent(EVENT_QUEL_DELAR_WHIRLWIND, 1000);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise)
|
||||
{
|
||||
float step = clockwise ? -M_PI / 8.0f : M_PI / 8.0f;
|
||||
float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY());
|
||||
|
||||
for (uint8 i = 0; i < 16; angle += step, ++i)
|
||||
{
|
||||
G3D::Vector3 point;
|
||||
point.x = centerPos.GetPositionX() + radius * cosf(angle);
|
||||
point.y = centerPos.GetPositionY() + radius * sinf(angle);
|
||||
point.z = z;
|
||||
path.push_back(point);
|
||||
}
|
||||
}
|
||||
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
bool _intro;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetHallsOfReflectionAI<npc_quel_delar_swordAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
// 5660
|
||||
class at_hor_uther_quel_delar_start : public AreaTriggerScript
|
||||
{
|
||||
public:
|
||||
at_hor_uther_quel_delar_start() : AreaTriggerScript("at_hor_uther_quel_delar_start") { }
|
||||
|
||||
bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
|
||||
{
|
||||
if (player->IsGameMaster())
|
||||
return true;
|
||||
|
||||
InstanceScript* _instance = player->GetInstanceScript();
|
||||
|
||||
if (_instance->GetData(DATA_QUEL_DELAR_EVENT) == IN_PROGRESS)
|
||||
if (Creature* uther = ObjectAccessor::GetCreature(*player, _instance->GetGuidData(DATA_UTHER_QUEL_DELAR)))
|
||||
uther->AI()->DoAction(ACTION_UTHER_START_SCREAM);
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// 72900 - Start Halls of Reflection Quest AE
|
||||
class spell_hor_start_halls_of_reflection_quest_ae : public SpellScriptLoader
|
||||
{
|
||||
@@ -2447,6 +2858,7 @@ void AddSC_halls_of_reflection()
|
||||
new at_hor_waves_restarter();
|
||||
new at_hor_impenetrable_door();
|
||||
new at_hor_shadow_throne();
|
||||
new at_hor_uther_quel_delar_start();
|
||||
new npc_jaina_or_sylvanas_intro_hor();
|
||||
new npc_jaina_or_sylvanas_escape_hor();
|
||||
new npc_the_lich_king_escape_hor();
|
||||
@@ -2461,6 +2873,8 @@ void AddSC_halls_of_reflection()
|
||||
new npc_raging_ghoul();
|
||||
new npc_risen_witch_doctor();
|
||||
new npc_lumbering_abomination();
|
||||
new npc_uther_quel_delar();
|
||||
new npc_quel_delar_sword();
|
||||
new spell_hor_start_halls_of_reflection_quest_ae();
|
||||
new spell_hor_evasion();
|
||||
new spell_hor_gunship_cannon_fire();
|
||||
|
||||
@@ -46,7 +46,13 @@ enum DataTypes
|
||||
DATA_ESCAPE_LEADER = 10,
|
||||
DATA_ICEWALL = 11,
|
||||
DATA_ICEWALL_TARGET = 12,
|
||||
DATA_GUNSHIP = 13
|
||||
DATA_GUNSHIP = 13,
|
||||
|
||||
// Quest stuff
|
||||
DATA_QUEL_DELAR_EVENT = 14,
|
||||
DATA_FROSTMOURNE_ALTAR_BUNNY = 15,
|
||||
DATA_UTHER_QUEL_DELAR = 16,
|
||||
DATA_QUEL_DELAR_INVOKER = 17
|
||||
};
|
||||
|
||||
enum CreatureIds
|
||||
@@ -131,7 +137,8 @@ enum InstanceEvents
|
||||
EVENT_NEXT_WAVE = 2,
|
||||
EVENT_DO_WIPE = 3,
|
||||
EVENT_ADD_WAVE = 4,
|
||||
EVENT_SPAWN_ESCAPE_EVENT = 5
|
||||
EVENT_SPAWN_ESCAPE_EVENT = 5,
|
||||
EVENT_QUEL_DELAR_SUMMON_UTHER = 6
|
||||
};
|
||||
|
||||
enum InstanceEventIds
|
||||
@@ -160,7 +167,17 @@ enum InstanceSpells
|
||||
// Gunship
|
||||
SPELL_GUNSHIP_CANNON_FIRE = 70017,
|
||||
SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021,
|
||||
SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246
|
||||
SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246,
|
||||
|
||||
// Halls of Reflection quest
|
||||
SPELL_QUEL_DELAR_COMPULSION = 70013,
|
||||
SPELL_ESSENCE_OF_CAPTURED = 70720
|
||||
};
|
||||
|
||||
enum InstanceQuests
|
||||
{
|
||||
QUEST_HALLS_OF_REFLECTION_ALLIANCE = 24480,
|
||||
QUEST_HALLS_OF_REFLECTION_HORDE = 24561
|
||||
};
|
||||
|
||||
enum InstanceWorldStates
|
||||
|
||||
@@ -73,6 +73,8 @@ Position const SpawnPos[] =
|
||||
{ 5299.250f, 2035.998f, 707.7781f, 5.026548f }
|
||||
};
|
||||
|
||||
Position const UtherQuelDalarPos = { 5302.001f, 1988.698f, 707.7781f, 3.700098f };
|
||||
|
||||
class instance_halls_of_reflection : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
@@ -89,6 +91,7 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
_waveCount = 0;
|
||||
_introState = NOT_STARTED;
|
||||
_frostswornGeneralState = NOT_STARTED;
|
||||
_quelDelarState = NOT_STARTED;
|
||||
|
||||
events.Reset();
|
||||
}
|
||||
@@ -159,6 +162,9 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
case NPC_ICE_WALL_TARGET:
|
||||
IcewallTargetGUID = creature->GetGUID();
|
||||
break;
|
||||
case NPC_UTHER:
|
||||
UtherGUID = creature->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -439,6 +445,18 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
HandleGameObject(ShadowThroneDoorGUID, true);
|
||||
_frostswornGeneralState = data;
|
||||
break;
|
||||
case DATA_QUEL_DELAR_EVENT:
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
if (_quelDelarState == NOT_STARTED)
|
||||
{
|
||||
if (Creature* bunny = instance->GetCreature(FrostmourneAltarBunnyGUID))
|
||||
bunny->CastSpell((Unit*)NULL, SPELL_ESSENCE_OF_CAPTURED);
|
||||
events.ScheduleEvent(EVENT_QUEL_DELAR_SUMMON_UTHER, 2000);
|
||||
}
|
||||
}
|
||||
_quelDelarState = data;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -446,6 +464,18 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
SaveToDB();
|
||||
}
|
||||
|
||||
void SetGuidData(uint32 type, ObjectGuid data) override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_QUEL_DELAR_INVOKER:
|
||||
QuelDelarInvokerGUID = data;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// wave scheduling, checked when wave npcs die
|
||||
void OnUnitDeath(Unit* unit) override
|
||||
{
|
||||
@@ -491,6 +521,9 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
case EVENT_SPAWN_ESCAPE_EVENT:
|
||||
SpawnEscapeEvent();
|
||||
break;
|
||||
case EVENT_QUEL_DELAR_SUMMON_UTHER:
|
||||
instance->SummonCreature(NPC_UTHER, UtherQuelDalarPos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -649,6 +682,8 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
return _introState;
|
||||
case DATA_FROSTSWORN_GENERAL:
|
||||
return _frostswornGeneralState;
|
||||
case DATA_QUEL_DELAR_EVENT:
|
||||
return _quelDelarState;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -682,6 +717,12 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
return IcewallGUID;
|
||||
case DATA_ICEWALL_TARGET:
|
||||
return IcewallTargetGUID;
|
||||
case DATA_FROSTMOURNE_ALTAR_BUNNY:
|
||||
return FrostmourneAltarBunnyGUID;
|
||||
case DATA_UTHER_QUEL_DELAR:
|
||||
return UtherGUID;
|
||||
case DATA_QUEL_DELAR_INVOKER:
|
||||
return QuelDelarInvokerGUID;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -691,7 +732,7 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
|
||||
void WriteSaveDataMore(std::ostringstream& data) override
|
||||
{
|
||||
data << _introState << ' ' << _frostswornGeneralState;
|
||||
data << _introState << ' ' << _frostswornGeneralState << ' ' << _quelDelarState;
|
||||
}
|
||||
|
||||
void ReadSaveDataMore(std::istringstream& data) override
|
||||
@@ -708,6 +749,12 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
SetData(DATA_FROSTSWORN_GENERAL, DONE);
|
||||
else
|
||||
SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED);
|
||||
|
||||
data >> temp;
|
||||
if (temp == DONE)
|
||||
SetData(DATA_QUEL_DELAR_EVENT, DONE);
|
||||
else
|
||||
SetData(DATA_QUEL_DELAR_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -731,6 +778,7 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
uint32 _waveCount;
|
||||
uint32 _introState;
|
||||
uint32 _frostswornGeneralState;
|
||||
uint32 _quelDelarState;
|
||||
|
||||
EventMap events;
|
||||
GuidSet waveGuidList[8];
|
||||
@@ -740,6 +788,8 @@ class instance_halls_of_reflection : public InstanceMapScript
|
||||
ObjectGuid CaptainGUID;
|
||||
ObjectGuid IcewallGUID;
|
||||
ObjectGuid IcewallTargetGUID;
|
||||
ObjectGuid QuelDelarInvokerGUID;
|
||||
ObjectGuid UtherGUID;
|
||||
|
||||
GuidSet GunshipCannonGUIDs;
|
||||
GuidSet GunshipStairGUIDs;
|
||||
|
||||
Reference in New Issue
Block a user