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:
Ovahlord
2018-03-26 01:14:03 +02:00
parent b60589fa9f
commit d473c1f0b8
6 changed files with 522 additions and 86 deletions

View File

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

View File

@@ -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));
}

View File

@@ -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();

View File

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

View File

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