Scripts/Deadmines: more work on Vanessa VanCleef's nightmare phases.

*finished Glubtok and Helix nightmares
This commit is contained in:
Ovahlord
2018-03-25 03:03:48 +02:00
parent f4846bb2d1
commit a88659ac1c
7 changed files with 883 additions and 105 deletions

View File

@@ -901,7 +901,7 @@ class spell_helix_ride_face_timer_aura: public SpellScriptLoader
if (Unit* vehicle = owner->GetVehicleBase())
{
if (owner->GetMap() && owner->GetMap()->IsHeroic())
if (vehicle->GetTypeId() == TYPEID_PLAYER)
if (vehicle->GetTypeId() == TYPEID_PLAYER && owner->GetEntry() == BOSS_HELIX_GEARBREAKER)
{
owner->CastSpell(vehicle, SPELL_CHEST_BOMB, true);
owner->CastSpell(vehicle, SPELL_HELIX_CHEST_BOMB_EMOTE, true);
@@ -909,7 +909,7 @@ class spell_helix_ride_face_timer_aura: public SpellScriptLoader
if (Creature* oaf = instance->GetCreature(DATA_LUMBERING_OAF))
{
if (oaf->IsAlive())
if (oaf->IsAlive() && owner->GetEntry() == BOSS_HELIX_GEARBREAKER)
{
owner->CastSpell(oaf, SPELL_RIDE_VEHICLE_OAF);
if (Creature* creature = owner->ToCreature())

View File

@@ -130,6 +130,8 @@ class boss_vanessa_van_cleef : public CreatureScript
{
switch (eventId)
{
case 0:
break;
default:
break;
}
@@ -231,7 +233,7 @@ class npc_vanessa_vanessa_van_cleef : public CreatureScript
_events.ScheduleEvent(EVENT_MAGMA_TRAP, Milliseconds(800));
break;
case EVENT_MAGMA_TRAP:
_instance->SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_GLUBTOK);
_instance->SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_MAGMA_TRAP);
break;
default:
break;

View File

@@ -272,6 +272,293 @@ class npc_deadmines_steam_valve : public CreatureScript
}
};
enum VanessaVanCleef
{
SAY_GLUBTOK_INTRO_1 = 0,
SAY_GLUBTOK_INTRO_2 = 1,
SAY_ANNOUNCE_GLUBTOKS_NIGHTMARE = 2,
SAY_ANNOUNCE_GET_BACK_TO_THE_SHIP = 3,
SAY_HELIX_INTRO_1 = 4,
SAY_HELIX_INTRO_2 = 5,
SAY_MECHANICAL_INTRO_1 = 6,
SAY_MECHANICAL_INTRO_2 = 7,
SAY_ANNOUNCE_MECHANICAL_NIGHTMARE = 8,
EVENT_TALK_GLUBTOKS_NIGHTMARE_1 = 1,
EVENT_TALK_GLUBTOKS_NIGHTMARE_2,
EVENT_CANCEL_NIGHTMARE_AURA_TRAP,
EVENT_ANNOUNCE_ENTERED_GLUBTOKS_NIGHTMARE,
EVENT_ANNOUNCE_GET_BACK_TO_THE_SHIP,
EVENT_TALK_HELIX_NIGHTMARE_1,
EVENT_TALK_HELIX_NIGHTMARE_2,
EVENT_CANCEL_NIGHTMARE_AURA_GLUBTOK,
EVENT_TALK_MECHANICAL_NIGHTMARE_1,
EVENT_TALK_MECHANICAL_NIGHTMARE_2,
EVENT_CANCEL_NIGHTMARE_AURA_HELIX,
EVENT_ANNOUNCE_ENTERED_MECHANICAL_NIGHTMARE,
SPELL_CANCEL_NIGHTMARE_AURA = 92583,
SPELL_NIGHTMARE_AURA_GLUBTOK = 92565,
SPELL_NIGHTMARE_AURA_HELIX = 92566,
SPELL_NIGHTMARE_AURA_MECHANICAL = 92567,
};
class npc_deadmines_vanessa_van_cleef_nightmare : public CreatureScript
{
public:
npc_deadmines_vanessa_van_cleef_nightmare() : CreatureScript("npc_deadmines_vanessa_van_cleef_nightmare") { }
struct npc_deadmines_vanessa_van_cleef_nightmareAI : public ScriptedAI
{
npc_deadmines_vanessa_van_cleef_nightmareAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
void Reset() override
{
if (_instance->GetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER) == NIGHTMARE_STAGE_GLUBTOK)
_events.ScheduleEvent(EVENT_TALK_GLUBTOKS_NIGHTMARE_1, Seconds(1));
else if (_instance->GetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER) == NIGHTMARE_STAGE_HELIX)
_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));
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_TALK_GLUBTOKS_NIGHTMARE_1:
Talk(SAY_GLUBTOK_INTRO_1);
_events.ScheduleEvent(EVENT_TALK_GLUBTOKS_NIGHTMARE_2, Seconds(8) + Milliseconds(400));
break;
case EVENT_TALK_GLUBTOKS_NIGHTMARE_2:
Talk(SAY_GLUBTOK_INTRO_2);
_events.ScheduleEvent(EVENT_CANCEL_NIGHTMARE_AURA_TRAP, Seconds(4) + Milliseconds(600));
break;
case EVENT_CANCEL_NIGHTMARE_AURA_TRAP:
DoCastAOE(SPELL_CANCEL_NIGHTMARE_AURA, true);
DoCastAOE(SPELL_NIGHTMARE_AURA_GLUBTOK, true);
_events.ScheduleEvent(EVENT_ANNOUNCE_ENTERED_GLUBTOKS_NIGHTMARE, Milliseconds(110));
break;
case EVENT_ANNOUNCE_ENTERED_GLUBTOKS_NIGHTMARE:
Talk(SAY_ANNOUNCE_GLUBTOKS_NIGHTMARE);
_events.ScheduleEvent(EVENT_ANNOUNCE_GET_BACK_TO_THE_SHIP, Seconds(4) + Milliseconds(800));
break;
case EVENT_ANNOUNCE_GET_BACK_TO_THE_SHIP:
Talk(SAY_ANNOUNCE_GET_BACK_TO_THE_SHIP);
if (Creature* glubtok = me->FindNearestCreature(NPC_GLUBTOK_NIGHTMARE, 10.0f, true))
glubtok->DespawnOrUnsummon(Seconds(2) + Milliseconds(500));
me->DespawnOrUnsummon(Seconds(2) + Milliseconds(500));
break;
case EVENT_TALK_HELIX_NIGHTMARE_1:
Talk(SAY_HELIX_INTRO_1);
_events.ScheduleEvent(EVENT_TALK_HELIX_NIGHTMARE_2, Seconds(6));
break;
case EVENT_TALK_HELIX_NIGHTMARE_2:
Talk(SAY_HELIX_INTRO_2);
_events.ScheduleEvent(EVENT_CANCEL_NIGHTMARE_AURA_GLUBTOK, Seconds(4) + Milliseconds(600));
break;
case EVENT_CANCEL_NIGHTMARE_AURA_GLUBTOK:
DoCastAOE(SPELL_CANCEL_NIGHTMARE_AURA, true);
DoCastAOE(SPELL_NIGHTMARE_AURA_HELIX, true);
me->DespawnOrUnsummon(Seconds(3) + Milliseconds(700));
break;
case EVENT_TALK_MECHANICAL_NIGHTMARE_1:
Talk(SAY_MECHANICAL_INTRO_1);
_events.ScheduleEvent(EVENT_TALK_MECHANICAL_NIGHTMARE_2, Seconds(3) + Milliseconds(600));
break;
case EVENT_TALK_MECHANICAL_NIGHTMARE_2:
Talk(SAY_MECHANICAL_INTRO_2);
_events.ScheduleEvent(EVENT_CANCEL_NIGHTMARE_AURA_HELIX, Seconds(3) + Milliseconds(400));
break;
case EVENT_CANCEL_NIGHTMARE_AURA_HELIX:
DoCastAOE(SPELL_CANCEL_NIGHTMARE_AURA, true);
DoCastAOE(SPELL_NIGHTMARE_AURA_MECHANICAL, true);
_events.ScheduleEvent(EVENT_ANNOUNCE_ENTERED_MECHANICAL_NIGHTMARE, Milliseconds(200));
break;
case EVENT_ANNOUNCE_ENTERED_MECHANICAL_NIGHTMARE:
Talk(SAY_ANNOUNCE_MECHANICAL_NIGHTMARE);
if (Creature* reaper = me->FindNearestCreature(NPC_FOE_REAPER_5000_NIGHTMARE, 20.0f, true))
reaper->DespawnOrUnsummon(Seconds(2) + Milliseconds(200));
me->DespawnOrUnsummon(Seconds(2) + Milliseconds(200));
break;
default:
break;
}
}
}
private:
EventMap _events;
InstanceScript* _instance;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetDeadminesAI<npc_deadmines_vanessa_van_cleef_nightmareAI>(creature);
}
};
enum GlubtokNightmare
{
EVENT_SPIRIT_STRIKE = 1,
SPELL_SPIRIT_STRIKE = 59304,
};
class npc_deadmines_glubtok_nightmare : public CreatureScript
{
public:
npc_deadmines_glubtok_nightmare() : CreatureScript("npc_deadmines_glubtok_nightmare") { }
struct npc_deadmines_glubtok_nightmareAI : public ScriptedAI
{
npc_deadmines_glubtok_nightmareAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_SPIRIT_STRIKE, Seconds(4) + Milliseconds(500));
}
void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(Seconds(4));
_instance->SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_HELIX);
}
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(600));
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
EventMap _events;
InstanceScript* _instance;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetDeadminesAI<npc_deadmines_glubtok_nightmareAI>(creature);
}
};
enum HelixNightmare
{
SAY_ANNOUNCE_HELIX_NIGHTMARE = 0,
SAY_ANNOUNCE_NIGHTMAR_SPIDERS = 1,
SPELL_HELIX_RIDE = 88337,
SPELL_RIDE_FACE_TARGETING = 88349,
SPELL_PESTILENCE = 91939,
SPELL_SHADOW_FOG = 92792,
EVENT_TALK_NIGHTMARE = 3,
EVENT_MAKE_ATTACKABLE,
EVENT_RIDE_PLAYER,
EVENT_PESTILENCE,
EVENT_SUMMON_NIGHTMARE_SKITTERLINGS,
EVENT_ANNOUNCE_SPIDERS,
};
class npc_deadmines_helix_nightmare : public CreatureScript
{
public:
npc_deadmines_helix_nightmare() : CreatureScript("npc_deadmines_helix_nightmare") { }
struct npc_deadmines_helix_nightmareAI : public ScriptedAI
{
npc_deadmines_helix_nightmareAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
void Reset() override
{
_events.ScheduleEvent(EVENT_MAKE_ATTACKABLE, Seconds(7) + Milliseconds(700));
_events.ScheduleEvent(EVENT_TALK_NIGHTMARE, Seconds(17) + Milliseconds(800));
}
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_SPIRIT_STRIKE, Seconds(4) + Milliseconds(400));
_events.ScheduleEvent(EVENT_RIDE_PLAYER, Seconds(2) + Milliseconds(500));
}
void JustDied(Unit* /*killer*/) override
{
me->DespawnOrUnsummon(Seconds(5) + Milliseconds(500));
_instance->SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_FOE_REAPER);
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_MAKE_ATTACKABLE:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
break;
case EVENT_SPIRIT_STRIKE:
DoCastVictim(SPELL_SPIRIT_STRIKE);
_events.Repeat(Seconds(3) + Milliseconds(600));
break;
case EVENT_TALK_NIGHTMARE:
Talk(SAY_ANNOUNCE_HELIX_NIGHTMARE);
_events.ScheduleEvent(EVENT_SUMMON_NIGHTMARE_SKITTERLINGS, Milliseconds(600));
break;
case EVENT_RIDE_PLAYER:
DoCastAOE(SPELL_RIDE_FACE_TARGETING, true);
_events.Repeat(Seconds(11));
break;
case EVENT_SUMMON_NIGHTMARE_SKITTERLINGS:
for (uint8 i = 0; i < 100; i++)
me->SummonCreature(NPC_NIGHTMARE_SKITTERLING, nightmareSkitterlingPos[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000);
for (uint8 i = 0; i < 3; i++)
me->SummonCreature(NPC_DARKWEB_DEVOURER, DarkwebDevourerPos[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000);
me->SummonCreature(NPC_CHATTERING_HORROR, ChatteringHorrorPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000);
if (Creature* dummy = me->SummonCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, GeneralPurposeBunnyPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000))
dummy->CastSpell(dummy, SPELL_SHADOW_FOG, true);
_events.ScheduleEvent(EVENT_ANNOUNCE_SPIDERS, Milliseconds(800));
break;
case EVENT_ANNOUNCE_SPIDERS:
Talk(SAY_ANNOUNCE_NIGHTMAR_SPIDERS);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
EventMap _events;
InstanceScript* _instance;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetDeadminesAI<npc_deadmines_helix_nightmareAI>(creature);
}
};
enum DefiasCannon
{
// GroupID 0 and 1 are used by Foe Reaper 5000
@@ -287,7 +574,7 @@ class go_deadmines_defias_cannon : public GameObjectScript
{
go_deadmines_defias_cannonAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
bool OnReportUse(Player* player) override
bool OnReportUse(Player* /*player*/) override
{
if (GameObject* cannon = me->ToGameObject())
{
@@ -374,12 +661,44 @@ class spell_deadmines_ride_magma_vehicle : public SpellScriptLoader
}
};
// We have no dummy npc in sniffs so we use a sniffed coordinate instead
class spell_deadmines_magma_trap_throw_to_location : public SpellScriptLoader
{
public:
spell_deadmines_magma_trap_throw_to_location() : SpellScriptLoader("spell_deadmines_magma_trap_throw_to_location") { }
class spell_deadmines_magma_trap_throw_to_location_SpellScript : public SpellScript
{
PrepareSpellScript(spell_deadmines_magma_trap_throw_to_location_SpellScript);
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (Position const* pos = GetHitDest())
GetHitDest()->Relocate(-225.1973f, -563.7677f, 51.23737f);
}
void Register() override
{
OnEffectLaunch += SpellEffectFn(spell_deadmines_magma_trap_throw_to_location_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_JUMP_DEST);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_deadmines_magma_trap_throw_to_location_SpellScript();
}
};
void AddSC_deadmines()
{
new npc_deadmines_defias_watcher();
new npc_deadmines_vanessas_trap_bunny();
new npc_deadmines_steam_valve();
new npc_deadmines_vanessa_van_cleef_nightmare();
new npc_deadmines_glubtok_nightmare();
new npc_deadmines_helix_nightmare();
new go_deadmines_defias_cannon();
new spell_deadmines_on_fire();
new spell_deadmines_ride_magma_vehicle();
new spell_deadmines_magma_trap_throw_to_location();
}

View File

@@ -46,73 +46,86 @@ enum DMDataTypes
DATA_VANESSAS_TRAP_BUNNY = 17,
DATA_VANESSA_ANCHOR_BUNNY = 18,
DATA_ACTIVATED_VENT = 19,
DATA_FOUNDRY_DOOR = 20,
};
enum DMCreatures
{
// Bosses
BOSS_GLUBTOK = 47162,
BOSS_HELIX_GEARBREAKER = 47296,
BOSS_FOE_REAPER_5000 = 43778,
BOSS_ADMIRAL_RIPSNARL = 47626,
BOSS_CAPTAIN_COOKIE = 47739,
BOSS_VANESSA_VAN_CLEEF = 49541,
BOSS_GLUBTOK = 47162,
BOSS_HELIX_GEARBREAKER = 47296,
BOSS_FOE_REAPER_5000 = 43778,
BOSS_ADMIRAL_RIPSNARL = 47626,
BOSS_CAPTAIN_COOKIE = 47739,
BOSS_VANESSA_VAN_CLEEF = 49541,
// Horde Creatures
NPC_SLINKY_SHARPSHIV = 46906,
NPC_KAGTHA = 46889,
NPC_MISS_MAYHEM = 46902,
NPC_SHATTERED_HAND_ASSASSIN = 46890,
NPC_MAYHEM_REAPER_PROTOTYPE = 46903,
NPC_SLINKY_SHARPSHIV = 46906,
NPC_KAGTHA = 46889,
NPC_MISS_MAYHEM = 46902,
NPC_SHATTERED_HAND_ASSASSIN = 46890,
NPC_MAYHEM_REAPER_PROTOTYPE = 46903,
// Alliance Creatures
NPC_STORMWIND_INVESTIGATOR = 46614,
NPC_CRIME_SCENE_ALARM_O_BOT = 46613,
NPC_STORMWIND_DEFENDER = 50595,
NPC_LIEUTENANT_HORATIO_LAINE = 46612,
NPC_QUARTERMASTER_LEWIS = 491,
NPC_STORMWIND_INVESTIGATOR = 46614,
NPC_CRIME_SCENE_ALARM_O_BOT = 46613,
NPC_STORMWIND_DEFENDER = 50595,
NPC_LIEUTENANT_HORATIO_LAINE = 46612,
NPC_QUARTERMASTER_LEWIS = 491,
// Encounter Related
NPC_GENERAL_PURPOSE_DUMMY_JMF = 45979,
NPC_GLUBTOK_FIREWALL_PLATTER = 48974,
NPC_FIREWALL_PLATTER_1A = 48975,
NPC_FIREWALL_PLATTER_1B = 49039,
NPC_FIREWALL_PLATTER_1C = 49040,
NPC_FIREWALL_PLATTER_2A = 48976,
NPC_FIREWALL_PLATTER_2B = 49041,
NPC_FIREWALL_PLATTER_2C = 49042,
NPC_GENERAL_PURPOSE_BUNNY_L2 = 47242,
NPC_FIRE_BLOSSOM_BUNNY = 47282,
NPC_FROST_BLOSSOM_BUNNY = 47284,
NPC_LUMBERING_OAF = 47297,
NPC_HELIX_CREW = 49139,
NPC_STICKY_BOMB = 47314,
NPC_DEFIAS_REAPER = 47403,
NPC_DEFIAS_WATCHER = 47404,
NPC_FOE_REAPER_TARGETING_BUNNY = 47468,
NPC_PROTOTYPE_REAPER = 49208,
NPC_MOLTEN_SLAG = 49229,
NPC_VAPOR = 47714,
NPC_COOKIES_CAULDRON = 47754,
NPC_CORN = 48006,
NPC_ROTTEN_CORN = 48276,
NPC_MELON = 48294,
NPC_ROTTEN_MELON = 48293,
NPC_STEAK = 48296,
NPC_ROTTEN_STEAK = 48295,
NPC_MYSTERY_MEAT = 48297,
NPC_ROTTEN_MYSTERY_MEAT = 48298,
NPC_LOAF = 48300,
NPC_ROTTEN_LOAF = 48299,
NPC_BUN = 48301,
NPC_ROTTEN_BUN = 48302,
NPC_GENERAL_PURPOSE_DUMMY_JMF = 45979,
NPC_GLUBTOK_FIREWALL_PLATTER = 48974,
NPC_FIREWALL_PLATTER_1A = 48975,
NPC_FIREWALL_PLATTER_1B = 49039,
NPC_FIREWALL_PLATTER_1C = 49040,
NPC_FIREWALL_PLATTER_2A = 48976,
NPC_FIREWALL_PLATTER_2B = 49041,
NPC_FIREWALL_PLATTER_2C = 49042,
NPC_GENERAL_PURPOSE_BUNNY_L2 = 47242,
NPC_FIRE_BLOSSOM_BUNNY = 47282,
NPC_FROST_BLOSSOM_BUNNY = 47284,
NPC_LUMBERING_OAF = 47297,
NPC_HELIX_CREW = 49139,
NPC_STICKY_BOMB = 47314,
NPC_DEFIAS_REAPER = 47403,
NPC_DEFIAS_WATCHER = 47404,
NPC_FOE_REAPER_TARGETING_BUNNY = 47468,
NPC_PROTOTYPE_REAPER = 49208,
NPC_MOLTEN_SLAG = 49229,
NPC_VAPOR = 47714,
NPC_COOKIES_CAULDRON = 47754,
NPC_CORN = 48006,
NPC_ROTTEN_CORN = 48276,
NPC_MELON = 48294,
NPC_ROTTEN_MELON = 48293,
NPC_STEAK = 48296,
NPC_ROTTEN_STEAK = 48295,
NPC_MYSTERY_MEAT = 48297,
NPC_ROTTEN_MYSTERY_MEAT = 48298,
NPC_LOAF = 48300,
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_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,
};
enum DMGameObjects
{
@@ -137,7 +150,6 @@ enum DMSpells
SPELL_FOG = 88768,
// -- Vanessa VanCleef Encounter
// Vanessa's Trap Bunny
SPELL_RIDE_MAGMA_VEHICLE = 92378,
SPELL_MOLTEN_MAGMA = 92424,
SPELL_FORCE_MAGMA_TRAP_THROW = 92489,
@@ -152,10 +164,11 @@ enum DMSpells
enum DMVanessasNightmareStages
{
NIGHTMARE_STATE_PREPARE_TRAP = 2,
NIGHTMARE_STAGE_GLUBTOK = 3,
NIGHTMARE_STATE_HELIX = 4,
NIGHTMARE_STAGE_FOE_REAPER = 5,
NIGHTMARE_STAGE_RIPSNARL = 6
NIGHTMARE_STAGE_MAGMA_TRAP = 3,
NIGHTMARE_STAGE_GLUBTOK = 4,
NIGHTMARE_STAGE_HELIX = 5,
NIGHTMARE_STAGE_FOE_REAPER = 6,
NIGHTMARE_STAGE_RIPSNARL = 7
};
Position const captainCookieSpawnPos = { -88.13194f, -819.3299f, 39.23453f };
@@ -163,6 +176,191 @@ Position const captainCookieSpawnPos = { -88.13194f, -819.3299f, 39.23453f };
Position const noteFromVanessaSpawnPos = { -74.36111f, -820.0139f, 40.37145f, 4.014257f };
Position const vanessaVanCleefSpawnPos = { -75.58507f, -819.9636f, 47.06727f, 6.178465f };
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 },
};
Position const GlubtokNightmareIntroSpawnPos = { -229.3403f, -560.3629f, 51.31293f, 5.742133f };
Position const GlubtokNightmareSpawnPos = { -174.8212f, -579.7552f, 19.39602f, 3.193953f };
Position const HelixNightmareSpawnPos = { -172.6858f, -580.0469f, 19.39752f, 3.176499f };
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 glubtokNightmareFireBunnyPos[] =
{
{ -192.2031f, -595.9636f, 36.37407f, 2.80998f },
{ -220.625f, -577.9618f, 21.06016f, 2.513274f },
{ -205.3056f, -563.6285f, 21.06016f, 5.253441f },
{ -214.8958f, -546.7136f, 19.3898f, 4.712389f },
{ -207.8004f, -570.6441f, 21.06016f, 1.762783f },
{ -221.4653f, -549.9358f, 19.3898f, 3.211406f },
{ -229.9635f, -559.2552f, 19.3898f, 0.0f },
{ -216.8438f, -568.9011f, 21.06016f, 3.909538f },
{ -235.9045f, -563.3906f, 19.3898f, 0.0f },
{ -226.6736f, -580.8316f, 20.43056f, 2.775074f },
{ -227.5226f, -595.1979f, 20.42358f, 4.206244f },
{ -215.0399f, -576.3941f, 21.06016f, 3.735005f },
{ -210.592f, -583.4739f, 21.06016f, 0.0f },
{ -228.592f, -553.1684f, 19.3898f, 5.550147f },
{ -220.4879f, -596.382f, 21.95116f, 0.0f },
{ -190.4774f, -552.2778f, 51.31293f, 5.305801f },
{ -195.6267f, -550.4393f, 51.31293f, 3.752458f },
{ -209.7257f, -557.1042f, 51.31293f, 3.525565f },
{ -187.9531f, -567.0469f, 51.31293f, 5.305801f },
{ -185.2083f, -562.4844f, 19.3898f, 0.9599311f },
{ -183.4236f, -577.2674f, 46.87183f, 3.944444f },
{ -184.6528f, -572.3663f, 49.27317f, 3.159046f },
{ -191.2205f, -581.4965f, 21.06015f, 2.007129f },
{ -201.224f, -570.6788f, 21.06016f, 3.577925f },
{ -198.4653f, -580.757f, 21.06015f, 0.8901179f },
{ -196.8767f, -574.9688f, 21.06016f, 4.29351f },
{ -194.1302f, -548.3055f, 19.3898f, 4.153883f },
{ -187.3333f, -550.8143f, 19.3898f, 3.385939f },
{ -186.9792f, -556.8472f, 19.3898f, 4.153883f },
{ -196.5504f, -587.7031f, 21.06015f, 1.27409f },
{ -241.5938f, -578.6858f, 19.3898f, 2.775074f },
{ -226.1615f, -573.8021f, 20.40991f, 5.218534f }
};
Position const nightmareSkitterlingPos[] =
{
{ -184.9618f, -552.9132f, 19.3898f },
{ -199.1406f, -573.6893f, 21.06016f },
{ -194.5851f, -578.3386f, 21.06015f },
{ -193.3264f, -569.809f, 21.06016f },
{ -185.7622f, -566.6059f, 19.3898f },
{ -181.401f, -561.684f, 19.3898f },
{ -221.2569f, -549.3316f, 19.3898f },
{ -215.125f, -546.0486f, 19.3898f },
{ -210.3854f, -550.6736f, 19.3898f },
{ -206.8715f, -545.3837f, 19.3898f },
{ -208.3247f, -556.5833f, 19.3898f },
{ -203.1233f, -550.8281f, 19.3898f },
{ -198.2465f, -546.9288f, 19.3898f },
{ -178.6389f, -564.4479f, 19.39f },
{ -193.3698f, -581.8663f, 21.06015f },
{ -188.1788f, -578.3715f, 21.06015f },
{ -185.3385f, -562.592f, 19.3898f },
{ -179.6458f, -557.9063f, 19.3898f },
{ -226.5208f, -587.257f, 19.53274f },
{ -199.3351f, -586.7952f, 21.06015f },
{ -207.6545f, -594.809f, 21.06015f },
{ -201.2587f, -593.309f, 21.06016f },
{ -224.2743f, -592.7917f, 20.29579f },
{ -211.9844f, -569.5417f, 21.06016f },
{ -208.9288f, -563.6094f, 21.06016f },
{ -200.8715f, -557.2518f, 19.3898f },
{ -196.2396f, -553.6927f, 19.3898f },
{ -192.1163f, -550.1024f, 19.3898f },
{ -202.4063f, -563.1337f, 21.06016f },
{ -195.9635f, -560.8889f, 20.58139f },
{ -190.1094f, -557.4722f, 19.3898f },
{ -199.3229f, -550.3785f, 19.3898f },
{ -195.2552f, -557.0087f, 19.3898f },
{ -190.1372f, -553.0625f, 19.3898f },
{ -185.2118f, -557.6406f, 19.3898f },
{ -190.6406f, -561.441f, 19.3898f },
{ -197.7413f, -564.3021f, 21.06016f },
{ -215.5365f, -549.8021f, 19.3898f },
{ -212.1719f, -555.0226f, 19.3898f },
{ -213.2344f, -561.8577f, 21.06016f },
{ -208.5451f, -568.1146f, 21.06016f },
{ -202.7257f, -572.5174f, 21.06016f },
{ -205.6354f, -559.1563f, 21.06016f },
{ -206.1615f, -553.3507f, 19.3898f },
{ -202.5451f, -546.118f, 19.3898f },
{ -204.1024f, -596.7518f, 21.06016f },
{ -204.0087f, -590.8386f, 21.06016f },
{ -198.8316f, -591.7239f, 21.06015f },
{ -195.4375f, -586.2934f, 21.06015f },
{ -197.6493f, -582.4653f, 21.06015f },
{ -219.1337f, -559.7899f, 19.3898f },
{ -221.4063f, -553.1406f, 19.3898f },
{ -216.1215f, -564.882f, 21.06016f },
{ -199.3125f, -578.1996f, 21.06016f },
{ -204.684f, -569.3542f, 21.06016f },
{ -197.8576f, -569.3489f, 21.06016f },
{ -191.7656f, -565.8559f, 21.06016f },
{ -213.4635f, -591.625f, 21.06015f },
{ -206.0781f, -588.0712f, 21.06016f },
{ -213.1997f, -585.125f, 21.06015f },
{ -220.5174f, -581.8143f, 21.06016f },
{ -182.8004f, -569.368f, 19.39167f },
{ -189.0191f, -571.2674f, 21.06016f },
{ -193.7674f, -574.7014f, 21.06016f },
{ -226.1285f, -581.059f, 20.79114f },
{ -218.6076f, -581.0746f, 21.06016f },
{ -216.1094f, -576.8264f, 21.06016f },
{ -222.1545f, -555.1077f, 19.3898f },
{ -212.6059f, -567.2239f, 21.06016f },
{ -203.9184f, -551.0608f, 19.3898f },
{ -202.8663f, -590.1371f, 21.06016f },
{ -196.4757f, -573.0833f, 21.06016f },
{ -185.9288f, -558.125f, 19.3898f },
{ -213.8767f, -559.3125f, 20.02806f },
{ -221.8142f, -556.3976f, 19.3898f },
{ -216.5017f, -553.9722f, 19.3898f },
{ -223.7483f, -574.9896f, 21.06015f },
{ -226.1215f, -563.0382f, 19.3898f },
{ -213.8559f, -574.6094f, 21.06016f },
{ -208.3854f, -571.8004f, 21.06016f },
{ -224.5625f, -568.1476f, 19.92673f },
{ -219.7083f, -588.6094f, 21.06015f },
{ -218.8872f, -570.5643f, 21.06016f },
{ -221.8264f, -562.2795f, 19.3898f },
{ -227.9063f, -559.566f, 19.3898f },
{ -230.4948f, -566.0191f, 19.3898f },
{ -227.0243f, -552.6736f, 19.3898f },
{ -231.566f, -572.1979f, 19.3898f },
{ -231.8802f, -578.5677f, 19.3898f },
{ -232.4462f, -562.8837f, 19.3898f },
{ -232.4514f, -586.2518f, 19.3898f },
{ -230.3767f, -592.8577f, 19.3898f },
{ -232.8004f, -591.1805f, 19.3898f },
{ -234.5208f, -559.4809f, 19.3898f },
{ -236.5712f, -565.5573f, 19.3898f },
{ -237.5799f, -571.5903f, 19.3898f },
{ -238.9063f, -578.1528f, 19.3898f },
{ -234.0608f, -598.0f, 19.95063f },
{ -236.5122f, -591.9913f, 19.3898f },
{ -238.8021f, -584.8594f, 19.3898f },
};
Position const DarkwebDevourerPos[] =
{
{ -215.7064f, -553.3212f, 51.29544f, 0.7243207f },
{ -229.285f, -568.6863f, 51.31313f, 0.8218399f },
{ -231.3453f, -584.1043f, 51.31514f, 1.05134f }
};
Position const ChatteringHorrorPos = { -233.625f, -570.5868f, 19.3898f };
Position const LightningPlatterPos[] =
{
{ -120.0434f, -638.3785f, 14.28754f, 0.03183358f }, // -120.9898 Y: -638.3776 Z: 12.34728
{ -134.4479f, -623.0521f, 16.38484f, 0.03133297f }, // -135.3954 Y: -623.0512 Z: 14.44327
{ -119.2101f, -617.6198f, 16.18771f, 6.252115f }, // -120.1581 Y: -617.6207 Z: 14.24549
{ -135.7899f, -604.6667f, 17.47415f, 0.03079747f }, // -136.7385 Y: -604.6659 Z: 15.53128
{ -129.5313f, -586.5018f, 20.52248f, 0.03022512f }, // -130.4809 Y: -586.5009 Z: 18.57832
{ -142.0538f, -574.9202f, 21.08911f, 6.253215f }, // -143.004 Y: -574.9209 Z: 19.1443
};
Position const LightningPlatterCenterPos[] =
{
{ -120.9898f, -638.3776f, 12.34728f },
{ -135.3954f, -623.0512f, 14.44327f },
{ -120.1581f, -617.6207f, 14.24549f },
{ -136.7385f, -604.6659f, 15.53128f },
{ -130.4809f, -586.5009f, 18.57832f },
{ -143.004f, -574.9209f, 19.1443f }
};
template<class AI>
AI* GetDeadminesAI(Creature* creature)
{

View File

@@ -24,14 +24,43 @@
enum EventIds
{
EVENT_SUMMON_CAPTAIN_COOKIE = 1
EVENT_SUMMON_CAPTAIN_COOKIE = 1,
EVENT_CAST_NIGHTMARE_AURA_1,
EVENT_CAST_NIGHTMARE_AURA_2,
EVENT_CAST_NIGHTMARE_AURA_3,
EVENT_ANNOUNCE_NIGHTMARE_ELIXIR_TAKES_HOLD,
EVENT_SETUP_GLUBTOKS_NIGHTMARE,
EVENT_SUMMON_ICICLES,
EVENT_SUMMON_GLUBTOK,
EVENT_ANNOUNCE_NIGHTMARE_SHIFTS,
EVENT_DESPAWN_NIGHTMARE_FIRE,
EVENT_SETUP_HELIX_NIGHTMARE,
EVENT_DESPAWN_NIGHTMARE_SPIDERS,
EVENT_SETUP_MECHANICAL_NIGHTMARE,
EVENT_SUMMON_FOE_REAPER,
};
enum TextsIds
{
// Id's 0 - 1 used by Foe Reaper 5000
// Id 2 used by Defias Cannon
SAY_ANNOUNCE_SHADOWY_FIGURE = 3
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
};
ObjectData const creatureData[] =
@@ -53,6 +82,7 @@ ObjectData const creatureData[] =
ObjectData const gameobjectData[] =
{
{ GO_IRON_CLAD_DOOR, DATA_IRON_CLAD_DOOR },
{ GO_FOUNDRY_DOOR, DATA_FOUNDRY_DOOR },
{ 0, 0 } // END
};
@@ -179,6 +209,20 @@ class instance_deadmines : public InstanceMapScript
case NPC_STEAM_VALVE:
_steamValveGuidSet.insert(creature->GetGUID());
break;
case NPC_GLUBTOK_NIGHTMARE_FIRE_BUNNY:
case NPC_GLUBTOK_NIGHTMARE:
_glubtokNightmareGuidSet.insert(creature->GetGUID());
break;
case NPC_HELIX_GEARBREAKER_NIGHTMARE:
case NPC_NIGHTMARE_SKITTERLING:
case NPC_DARKWEB_DEVOURER:
case NPC_CHATTERING_HORROR:
_helixNightmareGuidSet.insert(creature->GetGUID());
break;
case NPC_GENERAL_PURPOSE_DUMMY_JMF:
if (_vanessaVanCleefEncounterState == NIGHTMARE_STAGE_HELIX)
_helixNightmareGuidSet.insert(creature->GetGUID());
break;
default:
break;
}
@@ -276,12 +320,27 @@ class instance_deadmines : public InstanceMapScript
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_GLUBTOK:
case NIGHTMARE_STAGE_MAGMA_TRAP:
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
trapBunny->CastSpell(trapBunny, SPELL_RIDE_MAGMA_VEHICLE, true);
break;
case NIGHTMARE_STAGE_GLUBTOK:
events.ScheduleEvent(EVENT_CAST_NIGHTMARE_AURA_1, Seconds(4));
events.ScheduleEvent(EVENT_ANNOUNCE_NIGHTMARE_ELIXIR_TAKES_HOLD, Seconds(4) + Milliseconds(200));
break;
case NIGHTMARE_STAGE_HELIX:
events.CancelEvent(EVENT_SUMMON_ICICLES);
events.ScheduleEvent(EVENT_CAST_NIGHTMARE_AURA_2, Seconds(2) + Milliseconds(900));
break;
case NIGHTMARE_STAGE_FOE_REAPER:
events.ScheduleEvent(EVENT_DESPAWN_NIGHTMARE_SPIDERS, Seconds(2));
break;
default:
break;
}
@@ -289,8 +348,15 @@ class instance_deadmines : public InstanceMapScript
case DATA_ACTIVATED_VENT:
_activatedVentCounter++;
if (_activatedVentCounter == 4)
{
for (auto itr = _steamValveGuidSet.begin(); itr != _steamValveGuidSet.end(); itr++)
if (Creature* valve = instance->GetCreature((*itr)))
valve->DespawnOrUnsummon(Seconds(10));
SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, NIGHTMARE_STAGE_GLUBTOK);
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
trapBunny->AI()->DoAction(ACTION_EJECT_PLAYERS);
}
break;
default:
break;
@@ -345,6 +411,118 @@ class instance_deadmines : public InstanceMapScript
_firstCookieSpawn = false;
}
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))
{
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_AURA, true);
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_SLOW, true);
}
break;
case EVENT_ANNOUNCE_NIGHTMARE_ELIXIR_TAKES_HOLD:
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
if (Creature* purposeBunny = trapBunny->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
purposeBunny->AI()->Talk(SAY_ANNOUNCE_NIGHTMARE_ELIXIR_TAKES_HOLD);
events.ScheduleEvent(EVENT_SETUP_GLUBTOKS_NIGHTMARE, Milliseconds(600));
break;
case EVENT_SETUP_GLUBTOKS_NIGHTMARE:
instance->SummonCreature(NPC_VANESSA_VANCLEEF_NIGHTMARE, vanessaVanCleefNightmareSpawnPos[0]);
instance->SummonCreature(NPC_GLUBTOK_NIGHTMARE, GlubtokNightmareIntroSpawnPos);
for (uint8 i = 0; i < 32; i++)
instance->SummonCreature(NPC_GLUBTOK_NIGHTMARE_FIRE_BUNNY, glubtokNightmareFireBunnyPos[i]);
events.ScheduleEvent(EVENT_SUMMON_GLUBTOK, Seconds(14) + Milliseconds(400));
events.ScheduleEvent(EVENT_SUMMON_ICICLES, Seconds(14));
break;
case EVENT_SUMMON_ICICLES:
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
if (Creature* purposeBunny = trapBunny->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
{
std::list<Player*> playerList;
purposeBunny->GetPlayerListInGrid(playerList, 100.0f);
if (!playerList.empty())
if (Player* target = Trinity::Containers::SelectRandomContainerElement(playerList))
purposeBunny->CastSpell(target, SPELL_SUMMON_ICICLE, true);
}
events.Repeat(Seconds(3) - Milliseconds(600));
break;
case EVENT_SUMMON_GLUBTOK:
if (Creature* glubtok = instance->SummonCreature(NPC_GLUBTOK_NIGHTMARE, GlubtokNightmareSpawnPos))
glubtok->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
break;
case EVENT_CAST_NIGHTMARE_AURA_2:
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
if (Creature* purposeBunny = trapBunny->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
{
purposeBunny->CastSpell(purposeBunny, SPELL_CANCEL_NIGHTMARE_AURA_GLUBTOK, true);
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_AURA, true);
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_SLOW, true);
}
events.ScheduleEvent(EVENT_ANNOUNCE_NIGHTMARE_SHIFTS, Milliseconds(200));
events.ScheduleEvent(EVENT_DESPAWN_NIGHTMARE_FIRE, Milliseconds(400));
break;
case EVENT_ANNOUNCE_NIGHTMARE_SHIFTS:
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
if (Creature* purposeBunny = trapBunny->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
purposeBunny->AI()->Talk(SAY_ANNOUNCE_NIGHTMARE_SHIFTS);
break;
case EVENT_DESPAWN_NIGHTMARE_FIRE:
for (auto itr = _glubtokNightmareGuidSet.begin(); itr != _glubtokNightmareGuidSet.end(); itr++)
if (Creature* creature = instance->GetCreature(*itr))
if (creature->GetEntry() == NPC_GLUBTOK_NIGHTMARE_FIRE_BUNNY)
creature->DespawnOrUnsummon();
events.ScheduleEvent(EVENT_SETUP_HELIX_NIGHTMARE, Seconds(2) + Milliseconds(800));
break;
case EVENT_SETUP_HELIX_NIGHTMARE:
instance->SummonCreature(NPC_VANESSA_VANCLEEF_NIGHTMARE, vanessaVanCleefNightmareSpawnPos[1]);
instance->SummonCreature(NPC_HELIX_GEARBREAKER_NIGHTMARE, HelixNightmareSpawnPos);
break;
case EVENT_DESPAWN_NIGHTMARE_SPIDERS:
for (auto itr = _helixNightmareGuidSet.begin(); itr != _helixNightmareGuidSet.end(); itr++)
if (Creature* creature = instance->GetCreature(*itr))
if (creature->GetEntry() != NPC_HELIX_GEARBREAKER_NIGHTMARE)
creature->DespawnOrUnsummon();
events.ScheduleEvent(EVENT_ANNOUNCE_NIGHTMARE_SHIFTS, Milliseconds(100));
events.ScheduleEvent(EVENT_CAST_NIGHTMARE_AURA_3, Milliseconds(200));
break;
case EVENT_CAST_NIGHTMARE_AURA_3:
if (Creature* trapBunny = GetCreature(DATA_VANESSAS_TRAP_BUNNY))
if (Creature* purposeBunny = trapBunny->FindNearestCreature(NPC_GENERAL_PURPOSE_DUMMY_JMF, 50.0f, true))
{
purposeBunny->CastSpell(purposeBunny, SPELL_CANCEL_NIGHTMARE_AURA_HELIX, true);
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_AURA, true);
purposeBunny->CastSpell(purposeBunny, SPELL_NIGHTMARE_SLOW, true);
}
events.ScheduleEvent(EVENT_SETUP_MECHANICAL_NIGHTMARE, Seconds(2) + Milliseconds(400));
break;
case EVENT_SETUP_MECHANICAL_NIGHTMARE:
if (GameObject* door = GetGameObject(DATA_FOUNDRY_DOOR))
door->SetGoState(GO_STATE_ACTIVE);
instance->SummonCreature(NPC_FOE_REAPER_5000_NIGHTMARE, FoeReaperNightmareIntroSpawnPos);
instance->SummonCreature(NPC_VANESSA_VANCLEEF_NIGHTMARE, vanessaVanCleefNightmareSpawnPos[2]);
for (uint8 i = 0; i < 6; i++)
if (Creature* platter = instance->SummonCreature(NPC_VANESSA_LIGHTNING_PLATTER, LightningPlatterPos[i]))
{
Position const pos = LightningPlatterCenterPos[i];
float dist = platter->GetPosition().GetExactDist2d(pos);
bool clockwise = RAND(0, 1) == 1;
platter->SetSpeed(MOVE_RUN, 0.25f);
platter->GetMotionMaster()->MoveCirclePath(pos.GetPositionX(), pos.GetPositionY(), platter->GetPositionZ(), dist, clockwise, 10);
}
events.ScheduleEvent(EVENT_SUMMON_FOE_REAPER, Seconds(9) + Milliseconds(500));
break;
case EVENT_SUMMON_FOE_REAPER:
if (Creature* reaper = instance->SummonCreature(NPC_FOE_REAPER_5000_NIGHTMARE, FoeReaperNightmareSpawnPos))
{
reaper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
reaper->RemoveAurasDueToSpell(SPELL_OFF_LINE);
}
break;
default:
break;
}
@@ -360,6 +538,8 @@ class instance_deadmines : public InstanceMapScript
uint32 _vanessaVanCleefEncounterState;
GuidSet _generalPurposeBunnyJMF2GuidSet;
GuidSet _steamValveGuidSet;
GuidSet _glubtokNightmareGuidSet;
GuidSet _helixNightmareGuidSet;
bool _firstCookieSpawn;
};