mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-05 08:28:57 +01:00
Script/DM: finished initial work on Nightmare phases
*todo: fix calissas resque and nightmare offwearing message and reset nightmare when vanessa evades
This commit is contained in:
@@ -46,7 +46,6 @@ enum Spells
|
||||
// Foe Reaper 5000
|
||||
SPELL_ENERGIZE = 89132,
|
||||
SPELL_ON_LINE = 89198,
|
||||
SPELL_OFF_LINE = 88348,
|
||||
SPELL_RED_EYES = 24263,
|
||||
SPELL_ON_LINE_2 = 89121,
|
||||
SPELL_REAPER_STRIKE = 88490,
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
enum Texts
|
||||
{
|
||||
// Vanessa VanCleef
|
||||
SAY_AGGRO = 0,
|
||||
|
||||
// Vanessa VanCleef Intro
|
||||
SAY_ANNOUNCE_NOISE_FROM_ABOVE = 0,
|
||||
SAY_INTRO_1 = 1,
|
||||
SAY_INTRO_2 = 2,
|
||||
@@ -90,16 +93,14 @@ class boss_vanessa_van_cleef : public CreatureScript
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
}
|
||||
|
||||
void IsSummonedBy(Unit* /*summoner*/) override
|
||||
{
|
||||
|
||||
instance->SetBossState(DATA_VANESSA_VAN_CLEEF, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
_JustEngagedWith();
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
@@ -157,6 +158,7 @@ class npc_vanessa_vanessa_van_cleef : public CreatureScript
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_instance->SetBossState(DATA_VANESSA_VAN_CLEEF, IN_PROGRESS);
|
||||
_events.ScheduleEvent(EVENT_ANNOUNCE_NOISE_FROM_ABOVE, Seconds(2) + Milliseconds(500));
|
||||
}
|
||||
|
||||
|
||||
@@ -283,6 +283,9 @@ enum VanessaVanCleef
|
||||
SAY_MECHANICAL_INTRO_1 = 6,
|
||||
SAY_MECHANICAL_INTRO_2 = 7,
|
||||
SAY_ANNOUNCE_MECHANICAL_NIGHTMARE = 8,
|
||||
SAY_RIPSNARL_INTRO_1 = 9,
|
||||
SAY_RIPSNARL_INTRO_2 = 10,
|
||||
SAY_ANNOUNCE_RIPSNARL_NIGHTMARE = 11,
|
||||
|
||||
EVENT_TALK_GLUBTOKS_NIGHTMARE_1 = 1,
|
||||
EVENT_TALK_GLUBTOKS_NIGHTMARE_2,
|
||||
@@ -296,11 +299,17 @@ enum VanessaVanCleef
|
||||
EVENT_TALK_MECHANICAL_NIGHTMARE_2,
|
||||
EVENT_CANCEL_NIGHTMARE_AURA_HELIX,
|
||||
EVENT_ANNOUNCE_ENTERED_MECHANICAL_NIGHTMARE,
|
||||
EVENT_TALK_RIPSNARL_NIGHTMARE_1,
|
||||
EVENT_TALK_RIPSNARL_NIGHTMARE_2,
|
||||
EVENT_CANCEL_NIGHTMARE_AURA_MECHANICAL,
|
||||
EVENT_ANNOUNCE_ENTERED_RIPSNARL_NIGHTMARE,
|
||||
EVENT_ADRENALINE,
|
||||
|
||||
SPELL_CANCEL_NIGHTMARE_AURA = 92583,
|
||||
SPELL_NIGHTMARE_AURA_GLUBTOK = 92565,
|
||||
SPELL_NIGHTMARE_AURA_HELIX = 92566,
|
||||
SPELL_NIGHTMARE_AURA_MECHANICAL = 92567,
|
||||
SPELL_NIGHTMARE_AURA_RIPSNARL = 92568,
|
||||
};
|
||||
|
||||
class npc_deadmines_vanessa_van_cleef_nightmare : public CreatureScript
|
||||
@@ -320,7 +329,8 @@ class npc_deadmines_vanessa_van_cleef_nightmare : public CreatureScript
|
||||
_events.ScheduleEvent(EVENT_TALK_HELIX_NIGHTMARE_1, Seconds(1));
|
||||
else if (_instance->GetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER) == NIGHTMARE_STAGE_FOE_REAPER)
|
||||
_events.ScheduleEvent(EVENT_TALK_MECHANICAL_NIGHTMARE_1, Seconds(1));
|
||||
|
||||
else if (_instance->GetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER) == NIGHTMARE_STAGE_RIPSNARL)
|
||||
_events.ScheduleEvent(EVENT_TALK_RIPSNARL_NIGHTMARE_1, Seconds(2) + Milliseconds(200));
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -386,6 +396,29 @@ class npc_deadmines_vanessa_van_cleef_nightmare : public CreatureScript
|
||||
reaper->DespawnOrUnsummon(Seconds(2) + Milliseconds(200));
|
||||
me->DespawnOrUnsummon(Seconds(2) + Milliseconds(200));
|
||||
break;
|
||||
case EVENT_TALK_RIPSNARL_NIGHTMARE_1:
|
||||
Talk(SAY_RIPSNARL_INTRO_1);
|
||||
_events.ScheduleEvent(EVENT_TALK_RIPSNARL_NIGHTMARE_2, Seconds(7) + Milliseconds(150));
|
||||
break;
|
||||
case EVENT_TALK_RIPSNARL_NIGHTMARE_2:
|
||||
Talk(SAY_RIPSNARL_INTRO_2);
|
||||
_events.ScheduleEvent(EVENT_CANCEL_NIGHTMARE_AURA_MECHANICAL, Seconds(4) + Milliseconds(600));
|
||||
break;
|
||||
case EVENT_CANCEL_NIGHTMARE_AURA_MECHANICAL:
|
||||
DoCastAOE(SPELL_CANCEL_NIGHTMARE_AURA, true);
|
||||
DoCastAOE(SPELL_NIGHTMARE_AURA_RIPSNARL, true);
|
||||
_events.ScheduleEvent(EVENT_ANNOUNCE_ENTERED_RIPSNARL_NIGHTMARE, Milliseconds(200));
|
||||
break;
|
||||
case EVENT_ANNOUNCE_ENTERED_RIPSNARL_NIGHTMARE:
|
||||
Talk(SAY_ANNOUNCE_RIPSNARL_NIGHTMARE);
|
||||
_events.ScheduleEvent(EVENT_ADRENALINE, Seconds(2));
|
||||
break;
|
||||
case EVENT_ADRENALINE:
|
||||
DoCastAOE(SPELL_ADRENALINE, true);
|
||||
if (Creature* reaper = me->FindNearestCreature(NPC_RIPSNARL_NIGHTMARE, 20.0f, true))
|
||||
reaper->DespawnOrUnsummon(Milliseconds(300));
|
||||
me->DespawnOrUnsummon(Milliseconds(300));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -559,6 +592,60 @@ class npc_deadmines_helix_nightmare : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class npc_deadmines_foe_reaper_5000_nightmare : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_deadmines_foe_reaper_5000_nightmare() : CreatureScript("npc_deadmines_foe_reaper_5000_nightmare") { }
|
||||
|
||||
struct npc_deadmines_foe_reaper_5000_nightmareAI : public ScriptedAI
|
||||
{
|
||||
npc_deadmines_foe_reaper_5000_nightmareAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
_events.ScheduleEvent(EVENT_SPIRIT_STRIKE, Seconds(2) + Milliseconds(800));
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
me->DespawnOrUnsummon(Seconds(3) + Milliseconds(600));
|
||||
_instance->SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_RIPSNARL);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
_events.Update(diff);
|
||||
|
||||
while (uint32 eventId = _events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_SPIRIT_STRIKE:
|
||||
DoCastVictim(SPELL_SPIRIT_STRIKE);
|
||||
_events.Repeat(Seconds(3) + Milliseconds(100));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetDeadminesAI<npc_deadmines_foe_reaper_5000_nightmareAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
enum RipsnarlNightmare
|
||||
{
|
||||
SPELL_GROUP_TAUNT = 92308,
|
||||
};
|
||||
|
||||
enum DefiasCannon
|
||||
{
|
||||
// GroupID 0 and 1 are used by Foe Reaper 5000
|
||||
@@ -697,6 +784,7 @@ void AddSC_deadmines()
|
||||
new npc_deadmines_vanessa_van_cleef_nightmare();
|
||||
new npc_deadmines_glubtok_nightmare();
|
||||
new npc_deadmines_helix_nightmare();
|
||||
new npc_deadmines_foe_reaper_5000_nightmare();
|
||||
new go_deadmines_defias_cannon();
|
||||
new spell_deadmines_on_fire();
|
||||
new spell_deadmines_ride_magma_vehicle();
|
||||
|
||||
@@ -47,6 +47,10 @@ enum DMDataTypes
|
||||
DATA_VANESSA_ANCHOR_BUNNY = 18,
|
||||
DATA_ACTIVATED_VENT = 19,
|
||||
DATA_FOUNDRY_DOOR = 20,
|
||||
DATA_VANESSA_VAN_CLEEF_NIGHTMARE = 21,
|
||||
DATA_EMME_HARRINGTON = 22,
|
||||
DATA_ERIK_HARRINGTON = 23,
|
||||
DATA_CALISSA_HARRINGTON = 24
|
||||
};
|
||||
|
||||
enum DMCreatures
|
||||
@@ -107,24 +111,27 @@ enum DMCreatures
|
||||
NPC_ROTTEN_LOAF = 48299,
|
||||
NPC_BUN = 48301,
|
||||
NPC_ROTTEN_BUN = 48302,
|
||||
|
||||
NPC_A_NOTE_FROM_VANESSA = 49564,
|
||||
NPC_VANESSA_VAN_CLEEF_INTRO = 49429,
|
||||
NPC_VANESSAS_TRAP_BUNNY = 49454,
|
||||
NPC_VANESSA_ANCHOR_BUNNY_JMF = 51624,
|
||||
NPC_STEAM_VALVE = 49457,
|
||||
|
||||
NPC_VANESSA_VANCLEEF_NIGHTMARE = 49671,
|
||||
NPC_GLUBTOK_NIGHTMARE_FIRE_BUNNY = 51594,
|
||||
NPC_GLUBTOK_NIGHTMARE = 49670,
|
||||
|
||||
NPC_HELIX_GEARBREAKER_NIGHTMARE = 49674,
|
||||
NPC_NIGHTMARE_SKITTERLING = 49493,
|
||||
NPC_DARKWEB_DEVOURER = 49494,
|
||||
NPC_CHATTERING_HORROR = 49495,
|
||||
|
||||
NPC_FOE_REAPER_5000_NIGHTMARE = 49681,
|
||||
NPC_VANESSA_LIGHTNING_PLATTER = 49520,
|
||||
NPC_RIPSNARL_NIGHTMARE = 49682,
|
||||
NPC_EMME_HARRINGTON = 49534,
|
||||
NPC_ERIK_HARRINGTON = 49535,
|
||||
NPC_ENRAGED_WORGEN = 49532,
|
||||
NPC_JAMES_HARRINGTON = 49539,
|
||||
NPC_CALISSA_HARRINGTON = 49536,
|
||||
|
||||
};
|
||||
|
||||
enum DMGameObjects
|
||||
@@ -147,18 +154,25 @@ enum DMActions
|
||||
enum DMSpells
|
||||
{
|
||||
// -- Admiral Ripsnarl Encounter
|
||||
SPELL_FOG = 88768,
|
||||
SPELL_FOG = 88768,
|
||||
|
||||
// -- Vanessa VanCleef Encounter
|
||||
SPELL_RIDE_MAGMA_VEHICLE = 92378,
|
||||
SPELL_MOLTEN_MAGMA = 92424,
|
||||
SPELL_FORCE_MAGMA_TRAP_THROW = 92489,
|
||||
|
||||
// Vanessas Anchor Bunny JMF
|
||||
SPELL_ROPE_BEAM = 43785,
|
||||
|
||||
// Steam Valve
|
||||
SPELL_STEAM_VENT = 92399,
|
||||
SPELL_RIDE_MAGMA_VEHICLE = 92378,
|
||||
SPELL_MOLTEN_MAGMA = 92424,
|
||||
SPELL_FORCE_MAGMA_TRAP_THROW = 92489,
|
||||
SPELL_ROPE_BEAM = 43785,
|
||||
SPELL_STEAM_VENT = 92399,
|
||||
SPELL_ADRENALINE = 92604,
|
||||
SPELL_NIGHTMARE_SLOW = 92559,
|
||||
SPELL_NIGHTMARE_AURA = 92563,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_GLUBTOK = 92584,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_HELIX = 92585,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_MECHANICAL = 92586,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_RIPSNARL = 92587,
|
||||
SPELL_SUMMON_ICICLE = 92189,
|
||||
SPELL_OFF_LINE = 88348,
|
||||
SPELL_NIGHTMARES_END = 92603,
|
||||
SPELL_CANCEL_NIGHTMARE_ELIXIR = 92609,
|
||||
};
|
||||
|
||||
enum DMVanessasNightmareStages
|
||||
@@ -168,10 +182,12 @@ enum DMVanessasNightmareStages
|
||||
NIGHTMARE_STAGE_GLUBTOK = 4,
|
||||
NIGHTMARE_STAGE_HELIX = 5,
|
||||
NIGHTMARE_STAGE_FOE_REAPER = 6,
|
||||
NIGHTMARE_STAGE_RIPSNARL = 7
|
||||
NIGHTMARE_STAGE_RIPSNARL = 7,
|
||||
NIGHTMARE_STAGE_DONE = 8
|
||||
};
|
||||
|
||||
Position const captainCookieSpawnPos = { -88.13194f, -819.3299f, 39.23453f };
|
||||
Position const bossVanessaVanCleefSpawnPos = { -79.44965f, -819.8351f, 39.89838f, 0.01745329f };
|
||||
|
||||
Position const noteFromVanessaSpawnPos = { -74.36111f, -820.0139f, 40.37145f, 4.014257f };
|
||||
Position const vanessaVanCleefSpawnPos = { -75.58507f, -819.9636f, 47.06727f, 6.178465f };
|
||||
@@ -181,6 +197,7 @@ Position const vanessaVanCleefNightmareSpawnPos[] =
|
||||
{ -230.717f, -563.0139f, 51.31293f, 1.047198f },
|
||||
{ -172.809f, -576.9114f, 19.39756f, 4.817109f },
|
||||
{ -159.3924f, -580.5174f, 19.39817f, 6.195919f },
|
||||
{ -98.5816f, -662.6632f, 7.498006f, 3.490659f }
|
||||
};
|
||||
|
||||
Position const GlubtokNightmareIntroSpawnPos = { -229.3403f, -560.3629f, 51.31293f, 5.742133f };
|
||||
@@ -192,6 +209,27 @@ Position const GeneralPurposeBunnyPos = { -205.4688f, -567.2049f, 21.06016f };
|
||||
Position const FoeReaperNightmareIntroSpawnPos = { -155.4705f, -580.6945f, 19.39779f };
|
||||
Position const FoeReaperNightmareSpawnPos = { -101.4549f, -663.6493f, 7.505813f, 1.850049f };
|
||||
|
||||
Position const RipsnarlNightmareIntroSpawnPos = { -101.2135f, -663.4531f, 7.504823f, 1.867502f };
|
||||
Position const EmmeHarringtonSpawnPos = { -98.63194f, -721.6268f, 8.547067f, 1.53589f };
|
||||
Position const EnragedWorgenEmmeSpawnPos[] =
|
||||
{
|
||||
{-97.79166f, -717.8542f, 8.668088f, 4.520403f },
|
||||
{ -94.40278f, -719.7274f, 8.598646f, 3.560472f },
|
||||
{ -101.9167f, -718.7552f, 8.726379f, 5.51524f },
|
||||
};
|
||||
|
||||
Position const ErikHarringtonSpawnPos = { 5.239583f, -763.0868f, 9.800426f, 2.007129f };
|
||||
|
||||
Position const EnragedWorgenErikSpawnPos[] =
|
||||
{
|
||||
{ 3.326038f, -760.3063f, 9.713999f, 5.31516f },
|
||||
{ 8.798013f, -762.2252f, 9.625132f, 3.379143f },
|
||||
{ 4.232807f, -766.6125f, 9.804724f, 1.292649f }
|
||||
};
|
||||
|
||||
Position const CalissaHarringtonSpawnPos = { -83.86406f, -775.2837f, 28.37906f, 1.710423f };
|
||||
Position const JamesHarringtonSpawnPos = { -83.16319f, -774.9636f, 26.90351f, 1.710423f };
|
||||
|
||||
Position const glubtokNightmareFireBunnyPos[] =
|
||||
{
|
||||
{ -192.2031f, -595.9636f, 36.37407f, 2.80998f },
|
||||
|
||||
@@ -25,9 +25,11 @@
|
||||
enum EventIds
|
||||
{
|
||||
EVENT_SUMMON_CAPTAIN_COOKIE = 1,
|
||||
EVENT_SUMMON_NOTE_FROM_VANESSA,
|
||||
EVENT_CAST_NIGHTMARE_AURA_1,
|
||||
EVENT_CAST_NIGHTMARE_AURA_2,
|
||||
EVENT_CAST_NIGHTMARE_AURA_3,
|
||||
EVENT_CAST_NIGHTMARE_AURA_4,
|
||||
EVENT_ANNOUNCE_NIGHTMARE_ELIXIR_TAKES_HOLD,
|
||||
EVENT_SETUP_GLUBTOKS_NIGHTMARE,
|
||||
EVENT_SUMMON_ICICLES,
|
||||
@@ -38,6 +40,17 @@ enum EventIds
|
||||
EVENT_DESPAWN_NIGHTMARE_SPIDERS,
|
||||
EVENT_SETUP_MECHANICAL_NIGHTMARE,
|
||||
EVENT_SUMMON_FOE_REAPER,
|
||||
EVENT_DESPAWN_LIGHTNING_PLATTERS,
|
||||
EVENT_SETUP_RIPSNARL_NIGHTMARE,
|
||||
EVENT_NIGHTMARE_SHIFTS_2,
|
||||
EVENT_OPEN_IRON_CLAD_DOOR,
|
||||
EVENT_SUMMON_ERIK_HARRINGTON,
|
||||
EVENT_SUMMON_JAMES_HARRINGTON,
|
||||
EVENT_ANNOUNCE_SAVE_EMME_HARRINGTON,
|
||||
EVENT_ANNOUNCE_SAVE_ERIK_HARRINGTON,
|
||||
EVENT_ANNOUNCE_SAVE_CALISSA_HARRINGTON,
|
||||
EVENT_ANNOUNCE_ELIXIR_WEARS_OFF,
|
||||
EVENT_SUMMON_VANESSA_VANCLEEF_BOSS,
|
||||
};
|
||||
|
||||
enum TextsIds
|
||||
@@ -47,36 +60,30 @@ enum TextsIds
|
||||
SAY_ANNOUNCE_SHADOWY_FIGURE = 3,
|
||||
SAY_ANNOUNCE_NIGHTMARE_ELIXIR_TAKES_HOLD = 4,
|
||||
SAY_ANNOUNCE_NIGHTMARE_SHIFTS = 5,
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_NIGHTMARE_SLOW = 92559,
|
||||
SPELL_NIGHTMARE_AURA = 92563,
|
||||
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_GLUBTOK = 92584,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_HELIX = 92585,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_MECHANICAL = 92586,
|
||||
SPELL_CANCEL_NIGHTMARE_AURA_RIPSNARL = 92587,
|
||||
|
||||
SPELL_SUMMON_ICICLE = 92189,
|
||||
SPELL_OFF_LINE = 88348
|
||||
SAY_ANNOUNCE_SAVE_EMME_HARRINGTON = 6,
|
||||
SAY_ANNOUNCE_SAVE_ERIK_HARRINGTON = 7,
|
||||
SAY_ANNOUNCE_SAVE_CALISSA_HARRINGTON = 8,
|
||||
SAY_ANNOUNCE_NIGHTMARE_ELIXIR_WEARS_OFF = 9,
|
||||
};
|
||||
|
||||
ObjectData const creatureData[] =
|
||||
{
|
||||
{ BOSS_GLUBTOK, DATA_GLUBTOK },
|
||||
{ BOSS_HELIX_GEARBREAKER, DATA_HELIX_GEARBREAKER },
|
||||
{ BOSS_FOE_REAPER_5000, DATA_FOE_REAPER_5000 },
|
||||
{ BOSS_ADMIRAL_RIPSNARL, DATA_ADMIRAL_RIPSNARL },
|
||||
{ BOSS_CAPTAIN_COOKIE, DATA_CAPTAIN_COOKIE },
|
||||
{ BOSS_VANESSA_VAN_CLEEF, DATA_VANESSA_VAN_CLEEF },
|
||||
{ NPC_LUMBERING_OAF, DATA_LUMBERING_OAF },
|
||||
{ NPC_FOE_REAPER_TARGETING_BUNNY, DATA_FOE_REAPER_BUNNY },
|
||||
{ NPC_PROTOTYPE_REAPER, DATA_PROTOTYPE_REAPER },
|
||||
{ NPC_VANESSAS_TRAP_BUNNY, DATA_VANESSAS_TRAP_BUNNY },
|
||||
{ NPC_VANESSA_ANCHOR_BUNNY_JMF, DATA_VANESSA_ANCHOR_BUNNY },
|
||||
{ 0, 0 } // END
|
||||
{ BOSS_GLUBTOK, DATA_GLUBTOK },
|
||||
{ BOSS_HELIX_GEARBREAKER, DATA_HELIX_GEARBREAKER },
|
||||
{ BOSS_FOE_REAPER_5000, DATA_FOE_REAPER_5000 },
|
||||
{ BOSS_ADMIRAL_RIPSNARL, DATA_ADMIRAL_RIPSNARL },
|
||||
{ BOSS_CAPTAIN_COOKIE, DATA_CAPTAIN_COOKIE },
|
||||
{ BOSS_VANESSA_VAN_CLEEF, DATA_VANESSA_VAN_CLEEF },
|
||||
{ NPC_LUMBERING_OAF, DATA_LUMBERING_OAF },
|
||||
{ NPC_FOE_REAPER_TARGETING_BUNNY, DATA_FOE_REAPER_BUNNY },
|
||||
{ NPC_PROTOTYPE_REAPER, DATA_PROTOTYPE_REAPER },
|
||||
{ NPC_VANESSAS_TRAP_BUNNY, DATA_VANESSAS_TRAP_BUNNY },
|
||||
{ NPC_VANESSA_ANCHOR_BUNNY_JMF, DATA_VANESSA_ANCHOR_BUNNY },
|
||||
{ NPC_VANESSA_VANCLEEF_NIGHTMARE, DATA_VANESSA_VAN_CLEEF_NIGHTMARE },
|
||||
{ NPC_EMME_HARRINGTON, DATA_EMME_HARRINGTON },
|
||||
{ NPC_ERIK_HARRINGTON, DATA_ERIK_HARRINGTON },
|
||||
{ NPC_CALISSA_HARRINGTON, DATA_CALISSA_HARRINGTON },
|
||||
{ 0, 0 } // END
|
||||
};
|
||||
|
||||
ObjectData const gameobjectData[] =
|
||||
@@ -112,7 +119,9 @@ class instance_deadmines : public InstanceMapScript
|
||||
_foeReaper5000Intro = 0;
|
||||
_ironCladDoorState = 0;
|
||||
_vanessaVanCleefEncounterState = 0;
|
||||
_deadPlayers = 0;
|
||||
_activatedVentCounter = 0;
|
||||
_deadEnragedWorgen = 0;
|
||||
_firstCookieSpawn = true;
|
||||
}
|
||||
|
||||
@@ -222,6 +231,20 @@ class instance_deadmines : public InstanceMapScript
|
||||
case NPC_GENERAL_PURPOSE_DUMMY_JMF:
|
||||
if (_vanessaVanCleefEncounterState == NIGHTMARE_STAGE_HELIX)
|
||||
_helixNightmareGuidSet.insert(creature->GetGUID());
|
||||
else
|
||||
_generalPurposeBunnyJMFGuidSet.insert(creature->GetGUID());
|
||||
break;
|
||||
case NPC_FOE_REAPER_5000_NIGHTMARE:
|
||||
case NPC_VANESSA_LIGHTNING_PLATTER:
|
||||
_mechanicalNightmareGuidSet.insert(creature->GetGUID());
|
||||
break;
|
||||
case NPC_RIPSNARL_NIGHTMARE:
|
||||
case NPC_EMME_HARRINGTON:
|
||||
case NPC_ERIK_HARRINGTON:
|
||||
case NPC_CALISSA_HARRINGTON:
|
||||
case NPC_JAMES_HARRINGTON:
|
||||
case NPC_ENRAGED_WORGEN:
|
||||
_ripsnarlNightareGuidSet.insert(creature->GetGUID());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -261,6 +284,10 @@ class instance_deadmines : public InstanceMapScript
|
||||
if (instance->IsHeroic())
|
||||
instance->SummonCreature(NPC_A_NOTE_FROM_VANESSA, noteFromVanessaSpawnPos);
|
||||
break;
|
||||
case DATA_VANESSA_VAN_CLEEF:
|
||||
if (state == FAIL)
|
||||
ResetVanessasNightmare();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -269,7 +296,112 @@ class instance_deadmines : public InstanceMapScript
|
||||
|
||||
void OnUnitDeath(Unit* unit) override
|
||||
{
|
||||
if (unit->GetTypeId() == TYPEID_PLAYER && _vanessaVanCleefEncounterState != NOT_STARTED && _vanessaVanCleefEncounterState != NIGHTMARE_STAGE_DONE)
|
||||
{
|
||||
_deadPlayers++;
|
||||
if (_deadPlayers == instance->GetPlayersCountExceptGMs())
|
||||
ResetVanessasNightmare();
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (unit->GetEntry())
|
||||
{
|
||||
case NPC_ENRAGED_WORGEN:
|
||||
_deadEnragedWorgen++;
|
||||
unit->ToCreature()->DespawnOrUnsummon(Seconds(5));
|
||||
if (_deadEnragedWorgen == 3)
|
||||
{
|
||||
if (Creature* emme = GetCreature(DATA_EMME_HARRINGTON))
|
||||
{
|
||||
emme->CastSpell(emme, SPELL_ADRENALINE, true);
|
||||
emme->DespawnOrUnsummon();
|
||||
_deadEnragedWorgen = 0;
|
||||
events.ScheduleEvent(EVENT_ANNOUNCE_SAVE_ERIK_HARRINGTON, Seconds(4));
|
||||
}
|
||||
else if (Creature* erik = GetCreature(DATA_ERIK_HARRINGTON))
|
||||
{
|
||||
erik->CastSpell(emme, SPELL_ADRENALINE, true);
|
||||
erik->DespawnOrUnsummon();
|
||||
events.ScheduleEvent(EVENT_SUMMON_JAMES_HARRINGTON, Milliseconds(200));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NPC_JAMES_HARRINGTON:
|
||||
if (Creature* dummy = unit->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
|
||||
{
|
||||
dummy->CastSpell(dummy, SPELL_CANCEL_NIGHTMARE_AURA_RIPSNARL, true);
|
||||
dummy->CastSpell(dummy, SPELL_CANCEL_NIGHTMARE_ELIXIR, true);
|
||||
}
|
||||
unit->ToCreature()->DespawnOrUnsummon(Seconds(2) + Milliseconds(300));
|
||||
SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_DONE);
|
||||
events.ScheduleEvent(EVENT_ANNOUNCE_ELIXIR_WEARS_OFF, Milliseconds(250));
|
||||
break;
|
||||
case NPC_EMME_HARRINGTON:
|
||||
case NPC_ERIK_HARRINGTON:
|
||||
case NPC_CALISSA_HARRINGTON:
|
||||
unit->CastSpell(unit, SPELL_NIGHTMARES_END, true);
|
||||
ResetVanessasNightmare();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResetVanessasNightmare()
|
||||
{
|
||||
SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NOT_STARTED);
|
||||
events.Reset();
|
||||
events.ScheduleEvent(EVENT_SUMMON_NOTE_FROM_VANESSA, Seconds(30));
|
||||
_deadPlayers = 0;
|
||||
_activatedVentCounter = 0;
|
||||
_deadEnragedWorgen = 0;
|
||||
|
||||
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
|
||||
trapBunny->DespawnOrUnsummon(0, Seconds(30));
|
||||
|
||||
if (Creature* anchorBunny = GetCreature(DATA_VANESSA_ANCHOR_BUNNY))
|
||||
anchorBunny->DespawnOrUnsummon(0, Seconds(30));
|
||||
|
||||
if (!_steamValveGuidSet.empty())
|
||||
for (auto itr = _steamValveGuidSet.begin(); itr != _steamValveGuidSet.end(); itr++)
|
||||
if (Creature* creature = instance->GetCreature(*itr))
|
||||
creature->DespawnOrUnsummon();
|
||||
|
||||
if (!_glubtokNightmareGuidSet.empty())
|
||||
for (auto itr = _glubtokNightmareGuidSet.begin(); itr != _glubtokNightmareGuidSet.end(); itr++)
|
||||
if (Creature* creature = instance->GetCreature(*itr))
|
||||
creature->DespawnOrUnsummon();
|
||||
|
||||
if (!_helixNightmareGuidSet.empty())
|
||||
for (auto itr = _helixNightmareGuidSet.begin(); itr != _helixNightmareGuidSet.end(); itr++)
|
||||
if (Creature* creature = instance->GetCreature(*itr))
|
||||
creature->DespawnOrUnsummon();
|
||||
|
||||
if (!_mechanicalNightmareGuidSet.empty())
|
||||
for (auto itr = _mechanicalNightmareGuidSet.begin(); itr != _mechanicalNightmareGuidSet.end(); itr++)
|
||||
if (Creature* creature = instance->GetCreature(*itr))
|
||||
creature->DespawnOrUnsummon();
|
||||
|
||||
if (!_ripsnarlNightareGuidSet.empty())
|
||||
for (auto itr = _ripsnarlNightareGuidSet.begin(); itr != _ripsnarlNightareGuidSet.end(); itr++)
|
||||
if (Creature* creature = instance->GetCreature(*itr))
|
||||
creature->DespawnOrUnsummon();
|
||||
|
||||
if (Creature* vanessa = GetCreature(DATA_VANESSA_VAN_CLEEF_NIGHTMARE))
|
||||
vanessa->DespawnOrUnsummon();
|
||||
|
||||
_steamValveGuidSet.clear();
|
||||
_glubtokNightmareGuidSet.clear();
|
||||
_helixNightmareGuidSet.clear();
|
||||
_mechanicalNightmareGuidSet.clear();
|
||||
_ripsnarlNightareGuidSet.clear();
|
||||
|
||||
if (GameObject* foundryDoor = GetGameObject(DATA_FOUNDRY_DOOR))
|
||||
foundryDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
if (GameObject* foundryDoor = GetGameObject(DATA_IRON_CLAD_DOOR))
|
||||
foundryDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data) override
|
||||
@@ -316,15 +448,17 @@ class instance_deadmines : public InstanceMapScript
|
||||
{
|
||||
case IN_PROGRESS:
|
||||
instance->SummonCreature(NPC_VANESSA_VAN_CLEEF_INTRO, vanessaVanCleefSpawnPos);
|
||||
if (GameObject* foundryDoor = GetGameObject(DATA_FOUNDRY_DOOR))
|
||||
foundryDoor->SetGoState(GO_STATE_READY);
|
||||
|
||||
if (GameObject* foundryDoor = GetGameObject(DATA_IRON_CLAD_DOOR))
|
||||
foundryDoor->SetGoState(GO_STATE_READY);
|
||||
|
||||
break;
|
||||
case NIGHTMARE_STATE_PREPARE_TRAP:
|
||||
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
|
||||
if (Creature* anchorBunny = GetCreature(DATA_VANESSA_ANCHOR_BUNNY))
|
||||
{
|
||||
trapBunny->Respawn();
|
||||
anchorBunny->Respawn();
|
||||
anchorBunny->CastSpell(trapBunny, SPELL_ROPE_BEAM, true);
|
||||
}
|
||||
break;
|
||||
case NIGHTMARE_STAGE_MAGMA_TRAP:
|
||||
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
|
||||
@@ -341,6 +475,9 @@ class instance_deadmines : public InstanceMapScript
|
||||
case NIGHTMARE_STAGE_FOE_REAPER:
|
||||
events.ScheduleEvent(EVENT_DESPAWN_NIGHTMARE_SPIDERS, Seconds(2));
|
||||
break;
|
||||
case NIGHTMARE_STAGE_RIPSNARL:
|
||||
events.ScheduleEvent(EVENT_CAST_NIGHTMARE_AURA_4, Seconds(2) + Milliseconds(500));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -411,6 +548,9 @@ class instance_deadmines : public InstanceMapScript
|
||||
_firstCookieSpawn = false;
|
||||
}
|
||||
break;
|
||||
case EVENT_SUMMON_NOTE_FROM_VANESSA:
|
||||
instance->SummonCreature(NPC_A_NOTE_FROM_VANESSA, noteFromVanessaSpawnPos);
|
||||
break;
|
||||
case EVENT_CAST_NIGHTMARE_AURA_1:
|
||||
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
|
||||
if (Creature* purposeBunny = trapBunny->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
|
||||
@@ -523,6 +663,95 @@ class instance_deadmines : public InstanceMapScript
|
||||
reaper->RemoveAurasDueToSpell(SPELL_OFF_LINE);
|
||||
}
|
||||
break;
|
||||
case EVENT_CAST_NIGHTMARE_AURA_4:
|
||||
if (GameObject* door = GetGameObject(DATA_IRON_CLAD_DOOR))
|
||||
if (Creature* purposeBunny = door->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
|
||||
{
|
||||
purposeBunny->CastSpell(purposeBunny, SPELL_CANCEL_NIGHTMARE_AURA_MECHANICAL, true);
|
||||
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_AURA, true);
|
||||
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_SLOW, true);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_DESPAWN_LIGHTNING_PLATTERS, Milliseconds(50));
|
||||
break;
|
||||
case EVENT_DESPAWN_LIGHTNING_PLATTERS:
|
||||
for (auto itr = _mechanicalNightmareGuidSet.begin(); itr != _mechanicalNightmareGuidSet.end(); itr++)
|
||||
if (Creature* creature = instance->GetCreature(*itr))
|
||||
if (creature->GetEntry() != NPC_FOE_REAPER_5000_NIGHTMARE)
|
||||
creature->DespawnOrUnsummon();
|
||||
events.ScheduleEvent(EVENT_NIGHTMARE_SHIFTS_2, Milliseconds(150));
|
||||
events.ScheduleEvent(EVENT_SETUP_RIPSNARL_NIGHTMARE, Seconds(2) + Milliseconds(600));
|
||||
break;
|
||||
case EVENT_SETUP_RIPSNARL_NIGHTMARE:
|
||||
instance->SummonCreature(NPC_RIPSNARL_NIGHTMARE, RipsnarlNightmareIntroSpawnPos);
|
||||
instance->SummonCreature(NPC_VANESSA_VANCLEEF_NIGHTMARE, vanessaVanCleefNightmareSpawnPos[3]);
|
||||
events.ScheduleEvent(EVENT_OPEN_IRON_CLAD_DOOR, Seconds(14) + Milliseconds(400));
|
||||
break;
|
||||
case EVENT_NIGHTMARE_SHIFTS_2:
|
||||
if (GameObject* door = GetGameObject(DATA_IRON_CLAD_DOOR))
|
||||
if (Creature* purposeBunny = door->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
|
||||
purposeBunny->AI()->Talk(SAY_ANNOUNCE_NIGHTMARE_SHIFTS);
|
||||
break;
|
||||
case EVENT_OPEN_IRON_CLAD_DOOR:
|
||||
if (GameObject* door = GetGameObject(DATA_IRON_CLAD_DOOR))
|
||||
door->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
instance->SummonCreature(NPC_EMME_HARRINGTON, EmmeHarringtonSpawnPos);
|
||||
for (uint8 i = 0; i < 3; i++)
|
||||
instance->SummonCreature(NPC_ENRAGED_WORGEN, EnragedWorgenEmmeSpawnPos[i]);
|
||||
|
||||
events.ScheduleEvent(EVENT_ANNOUNCE_SAVE_EMME_HARRINGTON, Seconds(3) + Milliseconds(500));
|
||||
break;
|
||||
case EVENT_ANNOUNCE_SAVE_EMME_HARRINGTON:
|
||||
if (GameObject* door = GetGameObject(DATA_IRON_CLAD_DOOR))
|
||||
if (Creature* purposeBunny = door->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 20.0f, true))
|
||||
purposeBunny->AI()->Talk(SAY_ANNOUNCE_SAVE_EMME_HARRINGTON);
|
||||
break;
|
||||
case EVENT_ANNOUNCE_SAVE_ERIK_HARRINGTON:
|
||||
for (auto itr = _generalPurposeBunnyJMFGuidSet.begin(); itr != _generalPurposeBunnyJMFGuidSet.end(); itr++)
|
||||
if (Creature* purposeBunny = instance->GetCreature(*itr))
|
||||
if (purposeBunny->GetDistance(EmmeHarringtonSpawnPos) <= 40.0f)
|
||||
{
|
||||
purposeBunny->AI()->Talk(SAY_ANNOUNCE_SAVE_ERIK_HARRINGTON);
|
||||
events.ScheduleEvent(EVENT_SUMMON_ERIK_HARRINGTON, Seconds(1) + Milliseconds(800));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EVENT_SUMMON_ERIK_HARRINGTON:
|
||||
instance->SummonCreature(NPC_ERIK_HARRINGTON, ErikHarringtonSpawnPos);
|
||||
for (uint8 i = 0; i < 3; i++)
|
||||
instance->SummonCreature(NPC_ENRAGED_WORGEN, EnragedWorgenErikSpawnPos[i]);
|
||||
break;
|
||||
case EVENT_SUMMON_JAMES_HARRINGTON:
|
||||
if (Creature* james = instance->SummonCreature(NPC_JAMES_HARRINGTON, JamesHarringtonSpawnPos))
|
||||
if (Creature* calissa = instance->SummonCreature(NPC_CALISSA_HARRINGTON, CalissaHarringtonSpawnPos))
|
||||
{
|
||||
james->SetReactState(REACT_PASSIVE);
|
||||
calissa->CastSpell(james, VEHICLE_SPELL_RIDE_HARDCODED, true);
|
||||
calissa->SetInCombatWith(james);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_ANNOUNCE_SAVE_CALISSA_HARRINGTON, Seconds(3) + Milliseconds(400));
|
||||
break;
|
||||
case EVENT_ANNOUNCE_SAVE_CALISSA_HARRINGTON:
|
||||
for (auto itr = _generalPurposeBunnyJMFGuidSet.begin(); itr != _generalPurposeBunnyJMFGuidSet.end(); itr++)
|
||||
if (Creature* purposeBunny = instance->GetCreature(*itr))
|
||||
if (purposeBunny->GetDistance(CalissaHarringtonSpawnPos) <= 100.0f)
|
||||
{
|
||||
purposeBunny->AI()->Talk(SAY_ANNOUNCE_SAVE_CALISSA_HARRINGTON);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EVENT_ANNOUNCE_ELIXIR_WEARS_OFF:
|
||||
if (Creature* calissa = GetCreature(DATA_ADMIRAL_RIPSNARL))
|
||||
if (Creature* purposeBunny = calissa->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 100.0f, true))
|
||||
{
|
||||
purposeBunny->AI()->Talk(SAY_ANNOUNCE_NIGHTMARE_ELIXIR_WEARS_OFF);
|
||||
calissa->DespawnOrUnsummon(Seconds(2) + Milliseconds(200));
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SUMMON_VANESSA_VANCLEEF_BOSS, Seconds(2));
|
||||
break;
|
||||
case EVENT_SUMMON_VANESSA_VANCLEEF_BOSS:
|
||||
instance->SummonCreature(BOSS_VANESSA_VAN_CLEEF, bossVanessaVanCleefSpawnPos);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -532,14 +761,19 @@ class instance_deadmines : public InstanceMapScript
|
||||
protected:
|
||||
EventMap events;
|
||||
uint8 _activatedVentCounter;
|
||||
uint8 _deadPlayers;
|
||||
uint8 _deadEnragedWorgen;
|
||||
uint32 _teamInInstance;
|
||||
uint32 _foeReaper5000Intro;
|
||||
uint32 _ironCladDoorState;
|
||||
uint32 _vanessaVanCleefEncounterState;
|
||||
GuidSet _generalPurposeBunnyJMF2GuidSet;
|
||||
GuidSet _generalPurposeBunnyJMFGuidSet;
|
||||
GuidSet _steamValveGuidSet;
|
||||
GuidSet _glubtokNightmareGuidSet;
|
||||
GuidSet _helixNightmareGuidSet;
|
||||
GuidSet _mechanicalNightmareGuidSet;
|
||||
GuidSet _ripsnarlNightareGuidSet;
|
||||
bool _firstCookieSpawn;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user