aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_06_15_06_world_creature.sql2
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp171
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp11
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h24
4 files changed, 109 insertions, 99 deletions
diff --git a/sql/updates/world/2013_06_15_06_world_creature.sql b/sql/updates/world/2013_06_15_06_world_creature.sql
new file mode 100644
index 00000000000..a9db8f93583
--- /dev/null
+++ b/sql/updates/world/2013_06_15_06_world_creature.sql
@@ -0,0 +1,2 @@
+-- Update Void Traveler Scriptname
+UPDATE `creature_template` SET `ScriptName`= 'npc_voidtraveler' WHERE `ScriptName`= 'mob_voidtraveler';
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
index a424de35e51..1fa895824e3 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp
@@ -16,12 +16,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Grandmaster_Vorpil
-SD%Complete: 100
-SDComment:
-SDCategory: Auchindoun, Shadow Labyrinth
-EndScriptData */
+/*
+Name: Boss_Grandmaster_Vorpil
+%Complete: 100
+Category: Auchindoun, Shadow Labyrinth
+*/
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
@@ -43,13 +42,13 @@ enum GrandmasterVorpil
SPELL_SHADOWBOLT_VOLLEY = 33841,
SPELL_BANISH = 38791,
- MOB_VOID_TRAVELER = 19226,
+ NPC_VOID_TRAVELER = 19226,
SPELL_SACRIFICE = 33587,
SPELL_SHADOW_NOVA = 33846,
SPELL_EMPOWERING_SHADOWS = 33783,
H_SPELL_EMPOWERING_SHADOWS = 39364,
- MOB_VOID_PORTAL = 19224,
+ NPC_VOID_PORTAL = 19224,
SPELL_VOID_PORTAL_VISUAL = 33569
};
@@ -64,21 +63,22 @@ float VoidPortalCoords[5][3] =
{-261.4533f, -297.3298f, 17.1f}
};
-class mob_voidtraveler : public CreatureScript
+enum Events
{
-public:
- mob_voidtraveler() : CreatureScript("mob_voidtraveler") { }
+ EVENT_SHADOWBOLT_VOLLEY = 1,
+ EVENT_BANISH = 2,
+ EVENT_DRAW_SHADOWS = 3,
+ EVENT_SUMMON_TRAVELER = 4
+};
- CreatureAI* GetAI(Creature* creature) const
- {
- return new mob_voidtravelerAI (creature);
- }
+class npc_voidtraveler : public CreatureScript
+{
+public:
+ npc_voidtraveler() : CreatureScript("npc_voidtraveler") { }
- struct mob_voidtravelerAI : public ScriptedAI
+ struct npc_voidtravelerAI : public ScriptedAI
{
- mob_voidtravelerAI(Creature* creature) : ScriptedAI(creature)
- {
- }
+ npc_voidtravelerAI(Creature* creature) : ScriptedAI(creature) {}
uint64 VorpilGUID;
uint32 move;
@@ -133,6 +133,11 @@ public:
move = 1000;
} else move -= diff;
}
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_voidtravelerAI (creature);
+ }
};
};
@@ -142,35 +147,15 @@ class boss_grandmaster_vorpil : public CreatureScript
public:
boss_grandmaster_vorpil() : CreatureScript("boss_grandmaster_vorpil") { }
- CreatureAI* GetAI(Creature* creature) const
+ struct boss_grandmaster_vorpilAI : public BossAI
{
- return new boss_grandmaster_vorpilAI (creature);
- }
-
- struct boss_grandmaster_vorpilAI : public ScriptedAI
- {
- boss_grandmaster_vorpilAI(Creature* creature) : ScriptedAI(creature)
+ boss_grandmaster_vorpilAI(Creature* creature) : BossAI(creature, DATA_GRANDMASTERVORPIL)
{
- instance = creature->GetInstanceScript();
Intro = false;
}
- InstanceScript* instance;
- bool Intro, HelpYell;
- bool sumportals;
-
- uint32 ShadowBoltVolley_Timer;
- uint32 DrawShadows_Timer;
- uint32 summonTraveler_Timer;
- uint32 banish_Timer;
- uint64 PortalsGuid[5];
-
void Reset()
{
- ShadowBoltVolley_Timer = urand(7000, 14000);
- DrawShadows_Timer = 45000;
- summonTraveler_Timer = 90000;
- banish_Timer = 17000;
HelpYell = false;
sumportals = false;
destroyPortals();
@@ -186,7 +171,7 @@ public:
for (uint8 i = 0; i < 5; ++i)
{
Creature* Portal = NULL;
- Portal = me->SummonCreature(MOB_VOID_PORTAL, VoidPortalCoords[i][0], VoidPortalCoords[i][1], VoidPortalCoords[i][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 3000000);
+ Portal = me->SummonCreature(NPC_VOID_PORTAL, VoidPortalCoords[i][0], VoidPortalCoords[i][1], VoidPortalCoords[i][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 3000000);
if (Portal)
{
PortalsGuid[i] = Portal->GetGUID();
@@ -194,7 +179,7 @@ public:
}
}
sumportals = true;
- summonTraveler_Timer = 5000;
+ events.ScheduleEvent(EVENT_SUMMON_TRAVELER, 5000);
}
}
@@ -216,7 +201,7 @@ public:
void spawnVoidTraveler()
{
int pos = urand(0, 4);
- me->SummonCreature(MOB_VOID_TRAVELER, VoidPortalCoords[pos][0], VoidPortalCoords[pos][1], VoidPortalCoords[pos][2], 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000);
+ me->SummonCreature(NPC_VOID_TRAVELER, VoidPortalCoords[pos][0], VoidPortalCoords[pos][1], VoidPortalCoords[pos][2], 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000);
if (!HelpYell)
{
Talk(SAY_HELP);
@@ -226,8 +211,8 @@ public:
void JustSummoned(Creature* summoned)
{
- if (summoned && summoned->GetEntry() == MOB_VOID_TRAVELER)
- CAST_AI(mob_voidtraveler::mob_voidtravelerAI, summoned->AI())->VorpilGUID = me->GetGUID();
+ if (summoned && summoned->GetEntry() == NPC_VOID_TRAVELER)
+ CAST_AI(npc_voidtraveler::npc_voidtravelerAI, summoned->AI())->VorpilGUID = me->GetGUID();
}
void KilledUnit(Unit* /*victim*/)
@@ -246,11 +231,18 @@ public:
void EnterCombat(Unit* /*who*/)
{
+ events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, urand(7000, 14000));
+ if (IsHeroic())
+ events.ScheduleEvent(EVENT_BANISH, 17000);
+ events.ScheduleEvent(EVENT_DRAW_SHADOWS, 45000);
+ events.ScheduleEvent(EVENT_SUMMON_TRAVELER, 90000);
+
Talk(SAY_AGGRO);
summonPortals();
if (instance)
instance->SetData(DATA_GRANDMASTERVORPILEVENT, IN_PROGRESS);
+ _EnterCombat();
}
void MoveInLineOfSight(Unit* who)
@@ -269,50 +261,59 @@ public:
if (!UpdateVictim())
return;
- if (ShadowBoltVolley_Timer <= diff)
- {
- DoCast(me, SPELL_SHADOWBOLT_VOLLEY);
- ShadowBoltVolley_Timer = urand(15000, 30000);
- } else ShadowBoltVolley_Timer -= diff;
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (IsHeroic() && banish_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30, false);
- if (target)
+ switch (eventId)
{
- DoCast(target, SPELL_BANISH);
- banish_Timer = 16000;
+ case EVENT_SHADOWBOLT_VOLLEY:
+ DoCast(me, SPELL_SHADOWBOLT_VOLLEY);
+ events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, urand(15000, 30000));
+ break;
+ case EVENT_BANISH:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30, false))
+ DoCast(target, SPELL_BANISH);
+ events.ScheduleEvent(EVENT_BANISH, 16000);
+ break;
+ case EVENT_DRAW_SHADOWS:
+ {
+ Map* map = me->GetMap();
+ Map::PlayerList const &PlayerList = map->GetPlayers();
+ for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
+ if (Player* i_pl = i->GetSource())
+ if (i_pl->IsAlive() && !i_pl->HasAura(SPELL_BANISH))
+ i_pl->TeleportTo(me->GetMapId(), VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0, TELE_TO_NOT_LEAVE_COMBAT);
+
+ me->SetPosition(VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0.0f);
+ DoCast(me, SPELL_DRAW_SHADOWS, true);
+ DoCast(me, SPELL_RAIN_OF_FIRE);
+ events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 6000);
+ events.ScheduleEvent(EVENT_DRAW_SHADOWS, 30000);
+ break;
+ }
+ case EVENT_SUMMON_TRAVELER:
+ spawnVoidTraveler();
+ events.ScheduleEvent(EVENT_SUMMON_TRAVELER, 10000);
+ //enrage at 20%
+ if (HealthBelowPct(20))
+ events.ScheduleEvent(EVENT_SUMMON_TRAVELER, 5000);
}
- } else banish_Timer -= diff;
-
- if (DrawShadows_Timer <= diff)
- {
- Map* map = me->GetMap();
- Map::PlayerList const &PlayerList = map->GetPlayers();
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- if (Player* i_pl = i->GetSource())
- if (i_pl->IsAlive() && !i_pl->HasAura(SPELL_BANISH))
- i_pl->TeleportTo(me->GetMapId(), VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0, TELE_TO_NOT_LEAVE_COMBAT);
-
- me->SetPosition(VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0.0f);
- DoCast(me, SPELL_DRAW_SHADOWS, true);
-
- DoCast(me, SPELL_RAIN_OF_FIRE);
+ }
+ DoMeleeAttackIfReady();
+ }
- ShadowBoltVolley_Timer = 6000;
- DrawShadows_Timer = 30000;
- } else DrawShadows_Timer -= diff;
+ private:
+ bool Intro, HelpYell;
+ bool sumportals;
+ uint64 PortalsGuid[5];
- if (summonTraveler_Timer <= diff)
- {
- spawnVoidTraveler();
- summonTraveler_Timer = 10000;
- //enrage at 20%
- if (HealthBelowPct(20))
- summonTraveler_Timer = 5000;
- } else summonTraveler_Timer -=diff;
-
- DoMeleeAttackIfReady();
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_grandmaster_vorpilAI (creature);
}
};
@@ -321,5 +322,5 @@ public:
void AddSC_boss_grandmaster_vorpil()
{
new boss_grandmaster_vorpil();
- new mob_voidtraveler();
+ new npc_voidtraveler();
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
index 970b78a2cea..e3dec9c0a45 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
@@ -27,11 +27,6 @@ EndScriptData */
#include "InstanceScript.h"
#include "shadow_labyrinth.h"
-#define MAX_ENCOUNTER 5
-
-#define REFECTORY_DOOR 183296 //door opened when blackheart the inciter dies
-#define SCREAMING_HALL_DOOR 183295 //door opened when grandmaster vorpil dies
-
/* Shadow Labyrinth encounters:
1 - Ambassador Hellmaw event
2 - Blackheart the Inciter event
@@ -53,7 +48,7 @@ public:
{
instance_shadow_labyrinth_InstanceMapScript(Map* map) : InstanceScript(map) {}
- uint32 m_auiEncounter[MAX_ENCOUNTER];
+ uint32 m_auiEncounter[EncounterCount];
std::string str_data;
uint64 m_uiRefectoryDoorGUID;
@@ -75,7 +70,7 @@ public:
bool IsEncounterInProgress() const
{
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ for (uint8 i = 0; i < EncounterCount; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
return true;
@@ -217,7 +212,7 @@ public:
std::istringstream loadStream(in);
loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3] >> m_auiEncounter[4];
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ for (uint8 i = 0; i < EncounterCount; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
index 9c6ca776dea..8fdb60b32a6 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
@@ -19,11 +19,23 @@
#ifndef DEF_SHADOW_LABYRINTH_H
#define DEF_SHADOW_LABYRINTH_H
-#define TYPE_HELLMAW 1
-#define TYPE_OVERSEER 2
-#define DATA_BLACKHEARTTHEINCITEREVENT 3
-#define DATA_GRANDMASTERVORPILEVENT 4
-#define DATA_MURMUREVENT 5
-#define DATA_GRANDMASTERVORPIL 6
+uint32 const EncounterCount = 5;
+
+enum DataTypes
+{
+ TYPE_HELLMAW = 1,
+ TYPE_OVERSEER = 2,
+ DATA_BLACKHEARTTHEINCITEREVENT = 3,
+ DATA_GRANDMASTERVORPILEVENT = 4,
+ DATA_MURMUREVENT = 5,
+ DATA_GRANDMASTERVORPIL = 6
+};
+
+enum Objects
+{
+ REFECTORY_DOOR = 183296, // door opened when blackheart the inciter dies
+ SCREAMING_HALL_DOOR = 183295 // door opened when grandmaster vorpil dies
+};
+
#endif