aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2015-06-14 16:03:17 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2015-06-14 16:03:17 +0200
commit34a721ba84643cf468f63e5c375949aaa3e15cac (patch)
tree3e12801cf6b485a07969d7eb93df5f51c0348294 /src
parent6af3bc69970d3009a8e193fd2d3041232fbbd3e7 (diff)
Scripts/VioletHold: picked some things from pull request #11399 (thx MitchedD for initial work)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp43
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_erekem.cpp45
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp70
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp56
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_moragg.cpp34
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp75
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp40
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp467
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp190
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.h71
10 files changed, 453 insertions, 638 deletions
diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
index 36d2c5f8ed3..dc923e534b0 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
@@ -23,12 +23,9 @@ enum Spells
{
SPELL_ARCANE_VACUUM = 58694,
SPELL_BLIZZARD = 58693,
- H_SPELL_BLIZZARD = 59369,
SPELL_MANA_DESTRUCTION = 59374,
SPELL_TAIL_SWEEP = 58690,
- H_SPELL_TAIL_SWEEP = 59283,
SPELL_UNCONTROLLABLE_ENERGY = 58688,
- H_SPELL_UNCONTROLLABLE_ENERGY = 59281,
SPELL_TRANSFORM = 58668
};
@@ -48,17 +45,11 @@ class boss_cyanigosa : public CreatureScript
public:
boss_cyanigosa() : CreatureScript("boss_cyanigosa") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_cyanigosaAI>(creature);
- }
-
- struct boss_cyanigosaAI : public ScriptedAI
+ struct boss_cyanigosaAI : public BossAI
{
- boss_cyanigosaAI(Creature* creature) : ScriptedAI(creature)
+ boss_cyanigosaAI(Creature* creature) : BossAI(creature, DATA_CYANIGOSA)
{
Initialize();
- instance = creature->GetInstanceScript();
}
void Initialize()
@@ -76,24 +67,20 @@ public:
uint32 uiTailSweepTimer;
uint32 uiUncontrollableEnergyTimer;
- InstanceScript* instance;
-
void Reset() override
{
Initialize();
- instance->SetData(DATA_CYANIGOSA_EVENT, NOT_STARTED);
+ BossAI::Reset();
}
- void EnterCombat(Unit* /*who*/) override
+ void EnterCombat(Unit* who) override
{
+ BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
-
- instance->SetData(DATA_CYANIGOSA_EVENT, IN_PROGRESS);
}
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_REMOVE_NPC) == 1)
@@ -102,13 +89,12 @@ public:
instance->SetData(DATA_REMOVE_NPC, 0);
}
- //Return since we have no target
if (!UpdateVictim())
return;
if (uiArcaneVacuumTimer <= diff)
{
- DoCast(SPELL_ARCANE_VACUUM);
+ DoCastAOE(SPELL_ARCANE_VACUUM);
uiArcaneVacuumTimer = 10000;
} else uiArcaneVacuumTimer -= diff;
@@ -121,7 +107,7 @@ public:
if (uiTailSweepTimer <= diff)
{
- DoCast(SPELL_TAIL_SWEEP);
+ DoCastVictim(SPELL_TAIL_SWEEP);
uiTailSweepTimer = 20000;
} else uiTailSweepTimer -= diff;
@@ -144,22 +130,23 @@ public:
DoMeleeAttackIfReady();
}
- void JustDied(Unit* /*killer*/) override
+ void JustDied(Unit* killer) override
{
+ BossAI::JustDied(killer);
Talk(SAY_DEATH);
-
- instance->SetData(DATA_CYANIGOSA_EVENT, DONE);
}
void KilledUnit(Unit* victim) override
{
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
-
- Talk(SAY_SLAY);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_cyanigosaAI>(creature);
+ }
};
class achievement_defenseless : public AchievementCriteriaScript
diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
index e990b8796de..5c8d4b8691a 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp
@@ -24,9 +24,7 @@ enum Spells
SPELL_BLOODLUST = 54516,
SPELL_BREAK_BONDS = 59463,
SPELL_CHAIN_HEAL = 54481,
- H_SPELL_CHAIN_HEAL = 59473,
SPELL_EARTH_SHIELD = 54479,
- H_SPELL_EARTH_SHIELD = 59471,
SPELL_EARTH_SHOCK = 54511,
SPELL_LIGHTNING_BOLT = 53044,
SPELL_STORMSTRIKE = 51876
@@ -47,11 +45,6 @@ class boss_erekem : public CreatureScript
public:
boss_erekem() : CreatureScript("boss_erekem") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_erekemAI>(creature);
- }
-
struct boss_erekemAI : public ScriptedAI
{
boss_erekemAI(Creature* creature) : ScriptedAI(creature)
@@ -81,9 +74,9 @@ public:
{
Initialize();
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED);
if (Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EREKEM_GUARD_1)))
{
@@ -129,25 +122,23 @@ public:
Talk(SAY_AGGRO);
DoCast(me, SPELL_EARTH_SHIELD);
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_EREKEM_CELL)))
- if (pDoor->GetGoState() == GO_STATE_READY)
+ if (GameObject* door = instance->GetGameObject(DATA_EREKEM_CELL))
+ if (door->GetGoState() == GO_STATE_READY)
{
EnterEvadeMode();
return;
}
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
@@ -212,22 +203,20 @@ public:
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
- instance->SetData(DATA_1ST_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 7);
}
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
{
- instance->SetData(DATA_2ND_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
void KilledUnit(Unit* victim) override
{
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
-
- Talk(SAY_SLAY);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
ObjectGuid GetChainHealTargetGUID()
@@ -247,6 +236,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_erekemAI>(creature);
+ }
};
enum GuardSpells
@@ -261,11 +254,6 @@ class npc_erekem_guard : public CreatureScript
public:
npc_erekem_guard() : CreatureScript("npc_erekem_guard") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_erekem_guardAI>(creature);
- }
-
struct npc_erekem_guardAI : public ScriptedAI
{
npc_erekem_guardAI(Creature* creature) : ScriptedAI(creature)
@@ -308,7 +296,6 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -336,6 +323,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_erekem_guardAI>(creature);
+ }
};
void AddSC_boss_erekem()
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 48fe8049d19..9be73febd52 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -23,19 +23,16 @@ enum Spells
{
SPELL_DRAINED = 59820,
SPELL_FRENZY = 54312,
- SPELL_FRENZY_H = 59522,
SPELL_PROTECTIVE_BUBBLE = 54306,
SPELL_WATER_BLAST = 54237,
- SPELL_WATER_BLAST_H = 59520,
SPELL_WATER_BOLT_VOLLEY = 54241,
- SPELL_WATER_BOLT_VOLLEY_H = 59521,
SPELL_SPLASH = 59516,
SPELL_WATER_GLOBULE = 54268
};
enum IchoronCreatures
{
- NPC_ICHOR_GLOBULE = 29321,
+ NPC_ICHOR_GLOBULE = 29321
};
enum Yells
@@ -52,18 +49,18 @@ enum Yells
enum Actions
{
ACTION_WATER_ELEMENT_HIT = 1,
- ACTION_WATER_ELEMENT_KILLED = 2,
+ ACTION_WATER_ELEMENT_KILLED = 2
};
/// @todo get those positions from spawn of creature 29326
#define MAX_SPAWN_LOC 5
-static Position SpawnLoc[MAX_SPAWN_LOC]=
+static Position const SpawnLoc[MAX_SPAWN_LOC]=
{
{1840.64f, 795.407f, 44.079f, 1.676f},
{1886.24f, 757.733f, 47.750f, 5.201f},
{1877.91f, 845.915f, 43.417f, 3.560f},
{1918.97f, 850.645f, 47.225f, 4.136f},
- {1935.50f, 796.224f, 52.492f, 4.224f},
+ {1935.50f, 796.224f, 52.492f, 4.224f}
};
enum Misc
@@ -76,11 +73,6 @@ class boss_ichoron : public CreatureScript
public:
boss_ichoron() : CreatureScript("boss_ichoron") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_ichoronAI>(creature);
- }
-
struct boss_ichoronAI : public ScriptedAI
{
boss_ichoronAI(Creature* creature) : ScriptedAI(creature), m_waterElements(creature)
@@ -117,9 +109,9 @@ public:
DespawnWaterElements();
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
@@ -128,16 +120,17 @@ public:
DoCast(me, SPELL_PROTECTIVE_BUBBLE);
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_ICHORON_CELL)))
- if (pDoor->GetGoState() == GO_STATE_READY)
+ if (GameObject* door = instance->GetGameObject(DATA_ICHORON_CELL))
+ if (door->GetGoState() == GO_STATE_READY)
{
EnterEvadeMode();
return;
}
+
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
void AttackStart(Unit* who) override
@@ -208,7 +201,6 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 uiDiff) override
{
if (!UpdateVictim())
@@ -230,7 +222,7 @@ public:
if (!me->HasAura(SPELL_PROTECTIVE_BUBBLE))
{
Talk(SAY_SHATTER);
- DoCast(me, SPELL_WATER_BLAST);
+ DoCast(me, SPELL_WATER_BLAST); // wrong target
DoCast(me, SPELL_DRAINED);
bIsExploded = true;
me->AttackStop();
@@ -291,12 +283,12 @@ public:
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
- instance->SetData(DATA_1ST_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 7);
}
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
{
- instance->SetData(DATA_2ND_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
@@ -323,13 +315,15 @@ public:
void KilledUnit(Unit* victim) override
{
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
-
- Talk(SAY_SLAY);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_ichoronAI>(creature);
+ }
};
class npc_ichor_globule : public CreatureScript
@@ -337,11 +331,6 @@ class npc_ichor_globule : public CreatureScript
public:
npc_ichor_globule() : CreatureScript("npc_ichor_globule") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_ichor_globuleAI>(creature);
- }
-
struct npc_ichor_globuleAI : public ScriptedAI
{
npc_ichor_globuleAI(Creature* creature) : ScriptedAI(creature)
@@ -367,19 +356,18 @@ public:
void AttackStart(Unit* /*who*/) override
{
- return;
}
void UpdateAI(uint32 uiDiff) override
{
if (uiRangeCheck_Timer < uiDiff)
{
- if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ICHORON)))
+ if (Creature* ichoron = instance->GetCreature(DATA_ICHORON))
{
- if (me->IsWithinDist(pIchoron, 2.0f, false))
+ if (me->IsWithinDist(ichoron, 2.0f, false))
{
- if (pIchoron->AI())
- pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_HIT);
+ if (ichoron->AI())
+ ichoron->AI()->DoAction(ACTION_WATER_ELEMENT_HIT);
me->DespawnOrUnsummon();
}
}
@@ -391,12 +379,16 @@ public:
void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SPLASH);
- if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ICHORON)))
- if (pIchoron->AI())
- pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
+ if (Creature* ichoron = instance->GetCreature(DATA_ICHORON))
+ if (ichoron->AI())
+ ichoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_ichor_globuleAI>(creature);
+ }
};
class achievement_dehydration : public AchievementCriteriaScript
diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
index c3df7b71b83..5040dccfa36 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp
@@ -21,13 +21,10 @@
enum Spells
{
- SPELL_CAUTERIZING_FLAMES = 59466, //Only in heroic
- SPELL_FIREBOLT = 54235,
- H_SPELL_FIREBOLT = 59468,
- SPELL_FLAME_BREATH = 54282,
- H_SPELL_FLAME_BREATH = 59469,
- SPELL_LAVA_BURN = 54249,
- H_SPELL_LAVA_BURN = 59594
+ SPELL_CAUTERIZING_FLAMES = 59466, // Only in heroic
+ SPELL_FIREBOLT = 54235,
+ SPELL_FLAME_BREATH = 54282,
+ SPELL_LAVA_BURN = 54249
};
class boss_lavanthor : public CreatureScript
@@ -35,11 +32,6 @@ class boss_lavanthor : public CreatureScript
public:
boss_lavanthor() : CreatureScript("boss_lavanthor") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_lavanthorAI>(creature);
- }
-
struct boss_lavanthorAI : public ScriptedAI
{
boss_lavanthorAI(Creature* creature) : ScriptedAI(creature)
@@ -67,23 +59,24 @@ public:
{
Initialize();
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_LAVANTHOR_CELL)))
- if (pDoor->GetGoState() == GO_STATE_READY)
- {
- EnterEvadeMode();
- return;
- }
- if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
- else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
+ if (GameObject* door = instance->GetGameObject(DATA_LAVANTHOR_CELL))
+ if (door->GetGoState() == GO_STATE_READY)
+ {
+ EnterEvadeMode();
+ return;
+ }
+
+ if (instance->GetData(DATA_WAVE_COUNT) == 6)
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
+ else if (instance->GetData(DATA_WAVE_COUNT) == 12)
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
void AttackStart(Unit* who) override
@@ -102,10 +95,8 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
@@ -123,9 +114,10 @@ public:
if (uiLavaBurnTimer <= diff)
{
- DoCastVictim(SPELL_LAVA_BURN);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
+ DoCast(target, SPELL_LAVA_BURN);
uiLavaBurnTimer = urand(15000, 23000);
- }
+ } else uiLavaBurnTimer -= diff;
if (IsHeroic())
{
@@ -143,17 +135,21 @@ public:
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
- instance->SetData(DATA_1ST_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 7);
}
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
{
- instance->SetData(DATA_2ND_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_lavanthorAI>(creature);
+ }
};
void AddSC_boss_lavanthor()
diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
index 9a6422dec32..1c98806b127 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp
@@ -19,11 +19,12 @@
#include "ScriptedCreature.h"
#include "violet_hold.h"
-//Spells
enum Spells
{
SPELL_CORROSIVE_SALIVA = 54527,
- SPELL_OPTIC_LINK = 54396
+ SPELL_OPTIC_LINK = 54396,
+ SPELL_RAY_OF_PAIN = 54438, // NYI missing spelldifficulty
+ SPELL_RAY_OF_SUFFERING = 54442 // NYI missing spelldifficulty
};
class boss_moragg : public CreatureScript
@@ -31,11 +32,6 @@ class boss_moragg : public CreatureScript
public:
boss_moragg() : CreatureScript("boss_moragg") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_moraggAI>(creature);
- }
-
struct boss_moraggAI : public ScriptedAI
{
boss_moraggAI(Creature* creature) : ScriptedAI(creature)
@@ -60,23 +56,24 @@ public:
Initialize();
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_MORAGG_CELL)))
- if (pDoor->GetGoState() == GO_STATE_READY)
+ if (GameObject* door = instance->GetGameObject(DATA_MORAGG_CELL))
+ if (door->GetGoState() == GO_STATE_READY)
{
EnterEvadeMode();
return;
}
+
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
void AttackStart(Unit* who) override
@@ -95,10 +92,8 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
@@ -117,21 +112,26 @@ public:
DoMeleeAttackIfReady();
}
+
void JustDied(Unit* /*killer*/) override
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
- instance->SetData(DATA_1ST_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 7);
}
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
{
- instance->SetData(DATA_2ND_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_moraggAI>(creature);
+ }
};
void AddSC_boss_moragg()
diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
index 833b06cfbff..d1efcb8ca7a 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp
@@ -23,9 +23,7 @@
enum Spells
{
SPELL_ARCANE_BARRAGE_VOLLEY = 54202,
- SPELL_ARCANE_BARRAGE_VOLLEY_H = 59483,
SPELL_ARCANE_BUFFET = 54226,
- SPELL_ARCANE_BUFFET_H = 59485,
SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102,
SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137,
SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138
@@ -40,7 +38,6 @@ enum NPCs
enum CreatureSpells
{
SPELL_ARCANE_POWER = 54160,
- H_SPELL_ARCANE_POWER = 59474,
SPELL_SUMMON_PLAYERS = 54164,
SPELL_POWER_BALL_VISUAL = 54141
};
@@ -61,11 +58,6 @@ class boss_xevozz : public CreatureScript
public:
boss_xevozz() : CreatureScript("boss_xevozz") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_xevozzAI>(creature);
- }
-
struct boss_xevozzAI : public ScriptedAI
{
boss_xevozzAI(Creature* creature) : ScriptedAI(creature)
@@ -90,9 +82,9 @@ public:
void Reset() override
{
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED);
Initialize();
DespawnSphere();
@@ -139,46 +131,46 @@ public:
void EnterCombat(Unit* /*who*/) override
{
- Talk(SAY_AGGRO);
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_XEVOZZ_CELL)))
- if (pDoor->GetGoState() == GO_STATE_READY)
+ if (GameObject* door = instance->GetGameObject(DATA_XEVOZZ_CELL))
+ if (door->GetGoState() == GO_STATE_READY)
{
EnterEvadeMode();
return;
}
+
+ Talk(SAY_AGGRO);
+
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
void MoveInLineOfSight(Unit* /*who*/) override { }
-
- void UpdateAI(uint32 uiDiff) override
+ void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
- if (uiArcaneBarrageVolley_Timer < uiDiff)
+ if (uiArcaneBarrageVolley_Timer < diff)
{
DoCast(me, SPELL_ARCANE_BARRAGE_VOLLEY);
uiArcaneBarrageVolley_Timer = urand(20000, 22000);
}
- else uiArcaneBarrageVolley_Timer -= uiDiff;
+ else uiArcaneBarrageVolley_Timer -= diff;
if (uiArcaneBuffet_Timer)
{
- if (uiArcaneBuffet_Timer < uiDiff)
+ if (uiArcaneBuffet_Timer < diff)
{
DoCastVictim(SPELL_ARCANE_BUFFET);
uiArcaneBuffet_Timer = 0;
}
- else uiArcaneBuffet_Timer -= uiDiff;
+ else uiArcaneBuffet_Timer -= diff;
}
- if (uiSummonEtherealSphere_Timer < uiDiff)
+ if (uiSummonEtherealSphere_Timer < diff)
{
Talk(SAY_SPAWN);
DoCast(me, SPELL_SUMMON_ETHEREAL_SPHERE_1);
@@ -188,7 +180,7 @@ public:
uiSummonEtherealSphere_Timer = urand(45000, 47000);
uiArcaneBuffet_Timer = urand(5000, 6000);
}
- else uiSummonEtherealSphere_Timer -= uiDiff;
+ else uiSummonEtherealSphere_Timer -= diff;
DoMeleeAttackIfReady();
}
@@ -201,24 +193,27 @@ public:
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
- instance->SetData(DATA_1ST_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 7);
}
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
{
- instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED);
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
+
void KilledUnit(Unit* victim) override
{
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
-
- Talk(SAY_SLAY);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_xevozzAI>(creature);
+ }
};
class npc_ethereal_sphere : public CreatureScript
@@ -226,11 +221,6 @@ class npc_ethereal_sphere : public CreatureScript
public:
npc_ethereal_sphere() : CreatureScript("npc_ethereal_sphere") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_ethereal_sphereAI>(creature);
- }
-
struct npc_ethereal_sphereAI : public ScriptedAI
{
npc_ethereal_sphereAI(Creature* creature) : ScriptedAI(creature)
@@ -255,16 +245,15 @@ public:
Initialize();
}
- void UpdateAI(uint32 uiDiff) override
+ void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
if (!me->HasAura(SPELL_POWER_BALL_VISUAL))
DoCast(me, SPELL_POWER_BALL_VISUAL);
- if (uiRangeCheck_Timer < uiDiff)
+ if (uiRangeCheck_Timer < diff)
{
if (Creature* pXevozz = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_XEVOZZ)))
{
@@ -276,9 +265,9 @@ public:
}
uiRangeCheck_Timer = 1000;
}
- else uiRangeCheck_Timer -= uiDiff;
+ else uiRangeCheck_Timer -= diff;
- if (uiSummonPlayers_Timer < uiDiff)
+ if (uiSummonPlayers_Timer < diff)
{
DoCast(me, SPELL_SUMMON_PLAYERS); // not working right
@@ -295,10 +284,14 @@ public:
uiSummonPlayers_Timer = urand(33000, 35000);
}
- else uiSummonPlayers_Timer -= uiDiff;
+ else uiSummonPlayers_Timer -= diff;
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_ethereal_sphereAI>(creature);
+ }
};
void AddSC_boss_xevozz()
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index 90fd936e853..c29861f08a4 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -22,15 +22,13 @@
enum Spells
{
SPELL_SHROUD_OF_DARKNESS = 54524,
- H_SPELL_SHROUD_OF_DARKNESS = 59745,
SPELL_SUMMON_VOID_SENTRY = 54369,
- SPELL_VOID_SHIFT = 54361,
- H_SPELL_VOID_SHIFT = 59743,
+ SPELL_VOID_SHIFT = 54361
};
enum Creatures
{
- NPC_VOID_SENTRY = 29364
+ NPC_VOID_SENTRY = 29364
};
enum Yells
@@ -53,11 +51,6 @@ class boss_zuramat : public CreatureScript
public:
boss_zuramat() : CreatureScript("boss_zuramat") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_zuramatAI>(creature);
- }
-
struct boss_zuramatAI : public ScriptedAI
{
boss_zuramatAI(Creature* creature) : ScriptedAI(creature)
@@ -107,25 +100,25 @@ public:
void EnterCombat(Unit* /*who*/) override
{
- Talk(SAY_AGGRO);
- if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_ZURAMAT_CELL)))
- if (pDoor->GetGoState() == GO_STATE_READY)
+ if (GameObject* door = instance->GetGameObject(DATA_ZURAMAT_CELL))
+ if (door->GetGoState() == GO_STATE_READY)
{
EnterEvadeMode();
return;
}
+
+ Talk(SAY_AGGRO);
+
if (instance->GetData(DATA_WAVE_COUNT) == 6)
- instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS);
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
- instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS);
}
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
- //Return since we have no target
if (!UpdateVictim())
return;
@@ -171,26 +164,27 @@ public:
if (instance->GetData(DATA_WAVE_COUNT) == 6)
{
- instance->SetData(DATA_1ST_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 7);
}
else if (instance->GetData(DATA_WAVE_COUNT) == 12)
{
- instance->SetData(DATA_2ND_BOSS_EVENT, DONE);
+ instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE);
instance->SetData(DATA_WAVE_COUNT, 13);
}
}
void KilledUnit(Unit* victim) override
{
- if (victim->GetTypeId() != TYPEID_PLAYER)
- return;
-
- Talk(SAY_SLAY);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
}
-
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_zuramatAI>(creature);
+ }
};
class achievement_void_dance : public AchievementCriteriaScript
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index ef9ad806c89..28c56a02255 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -22,8 +22,6 @@
#include "Player.h"
#include "TemporarySummon.h"
-#define MAX_ENCOUNTER 3
-
/* Violet Hold encounters:
0 - First boss
1 - Second boss
@@ -38,21 +36,6 @@
6 - Zuramat
7 - Cyanigosa */
-enum GameObjects
-{
- GO_MAIN_DOOR = 191723,
- GO_XEVOZZ_DOOR = 191556,
- GO_LAVANTHOR_DOOR = 191566,
- GO_ICHORON_DOOR = 191722,
- GO_ZURAMAT_DOOR = 191565,
- GO_EREKEM_DOOR = 191564,
- GO_EREKEM_GUARD_1_DOOR = 191563,
- GO_EREKEM_GUARD_2_DOOR = 191562,
- GO_MORAGG_DOOR = 191606,
- GO_INTRO_ACTIVATION_CRYSTAL = 193615,
- GO_ACTIVATION_CRYSTAL = 193611
-};
-
enum AzureSaboteurSpells
{
SABOTEUR_SHIELD_DISRUPTION = 58291,
@@ -64,7 +47,7 @@ enum CrystalSpells
SPELL_ARCANE_LIGHTNING = 57930
};
-const Position PortalLocation[] =
+Position const PortalLocation[] =
{
{1877.51f, 850.104f, 44.6599f, 4.7822f }, // WP 1
{1918.37f, 853.437f, 47.1624f, 4.12294f}, // WP 2
@@ -74,21 +57,21 @@ const Position PortalLocation[] =
{1908.31f, 809.657f, 38.7037f, 3.08701f} // WP 6
};
-const Position ArcaneSphere = {1887.060059f, 806.151001f, 61.321602f, 0.0f};
-const Position BossStartMove1 = {1894.684448f, 739.390503f, 47.668003f, 0.0f};
-const Position BossStartMove2 = {1875.173950f, 860.832703f, 43.333565f, 0.0f};
-const Position BossStartMove21 = {1858.854614f, 855.071411f, 43.333565f, 0.0f};
-const Position BossStartMove22 = {1891.926636f, 863.388977f, 43.333565f, 0.0f};
-const Position BossStartMove3 = {1916.138062f, 778.152222f, 35.772308f, 0.0f};
-const Position BossStartMove4 = {1853.618286f, 758.557617f, 38.657505f, 0.0f};
-const Position BossStartMove5 = {1906.683960f, 842.348022f, 38.637459f, 0.0f};
-const Position BossStartMove6 = {1928.207031f, 852.864441f, 47.200813f, 0.0f};
-
-const Position CyanigosasSpawnLocation = {1930.281250f, 804.407715f, 52.410946f, 3.139621f};
-const Position MiddleRoomLocation = {1892.291260f, 805.696838f, 38.438862f, 3.139621f};
-const Position MiddleRoomPortalSaboLocation = {1896.622925f, 804.854126f, 38.504772f, 3.139621f};
-
-//Cyanigosa's prefight event data
+Position const ArcaneSphere = {1887.060059f, 806.151001f, 61.321602f, 0.0f};
+Position const BossStartMove1 = {1894.684448f, 739.390503f, 47.668003f, 0.0f};
+Position const BossStartMove2 = {1875.173950f, 860.832703f, 43.333565f, 0.0f};
+Position const BossStartMove21 = {1858.854614f, 855.071411f, 43.333565f, 0.0f};
+Position const BossStartMove22 = {1891.926636f, 863.388977f, 43.333565f, 0.0f};
+Position const BossStartMove3 = {1916.138062f, 778.152222f, 35.772308f, 0.0f};
+Position const BossStartMove4 = {1853.618286f, 758.557617f, 38.657505f, 0.0f};
+Position const BossStartMove5 = {1906.683960f, 842.348022f, 38.637459f, 0.0f};
+Position const BossStartMove6 = {1928.207031f, 852.864441f, 47.200813f, 0.0f};
+
+Position const CyanigosasSpawnLocation = {1930.281250f, 804.407715f, 52.410946f, 3.139621f};
+Position const MiddleRoomLocation = {1892.291260f, 805.696838f, 38.438862f, 3.139621f};
+Position const MiddleRoomPortalSaboLocation = {1896.622925f, 804.854126f, 38.504772f, 3.139621f};
+
+// Cyanigosa's prefight event data
enum Yells
{
CYANIGOSA_SAY_SPAWN = 0
@@ -100,21 +83,45 @@ enum Spells
CYANIGOSA_BLUE_AURA = 47759,
};
+ObjectData const creatureData[] =
+{
+ { NPC_XEVOZZ, DATA_XEVOZZ },
+ { NPC_LAVANTHOR, DATA_LAVANTHOR },
+ { NPC_ICHORON, DATA_ICHORON },
+ { NPC_ZURAMAT, DATA_ZURAMAT },
+ { NPC_EREKEM, DATA_EREKEM },
+ { NPC_MORAGG, DATA_MORAGG },
+ { NPC_CYANIGOSA, DATA_CYANIGOSA },
+ { NPC_SINCLARI, DATA_SINCLARI },
+ { 0, 0 } // END
+};
+
+ObjectData const gameObjectData[] =
+{
+ { GO_EREKEM_GUARD_1_DOOR, DATA_EREKEM_LEFT_GUARD_CELL },
+ { GO_EREKEM_GUARD_2_DOOR, DATA_EREKEM_RIGHT_GUARD_CELL },
+ { GO_EREKEM_DOOR, DATA_EREKEM_CELL },
+ { GO_ZURAMAT_DOOR, DATA_ZURAMAT_CELL },
+ { GO_LAVANTHOR_DOOR, DATA_LAVANTHOR_CELL },
+ { GO_MORAGG_DOOR, DATA_MORAGG_CELL },
+ { GO_ICHORON_DOOR, DATA_ICHORON_CELL },
+ { GO_XEVOZZ_DOOR, DATA_XEVOZZ_CELL },
+ { GO_MAIN_DOOR, DATA_MAIN_DOOR },
+ { 0, 0 } // END
+};
+
class instance_violet_hold : public InstanceMapScript
{
public:
instance_violet_hold() : InstanceMapScript("instance_violet_hold", 608) { }
- InstanceScript* GetInstanceScript(InstanceMap* map) const override
- {
- return new instance_violet_hold_InstanceMapScript(map);
- }
-
struct instance_violet_hold_InstanceMapScript : public InstanceScript
{
instance_violet_hold_InstanceMapScript(Map* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
+ SetBossNumber(EncounterCount);
+ LoadObjectData(creatureData, gameObjectData);
uiRemoveNpc = 0;
@@ -138,29 +145,10 @@ public:
bCrystalActivated = false;
defenseless = true;
uiMainEventPhase = NOT_STARTED;
-
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
- ObjectGuid uiMoragg;
- ObjectGuid uiErekem;
ObjectGuid uiErekemGuard[2];
- ObjectGuid uiIchoron;
- ObjectGuid uiLavanthor;
- ObjectGuid uiXevozz;
- ObjectGuid uiZuramat;
- ObjectGuid uiCyanigosa;
- ObjectGuid uiSinclari;
-
- ObjectGuid uiMoraggCell;
- ObjectGuid uiErekemCell;
- ObjectGuid uiErekemLeftGuardCell;
- ObjectGuid uiErekemRightGuardCell;
- ObjectGuid uiIchoronCell;
- ObjectGuid uiLavanthorCell;
- ObjectGuid uiXevozzCell;
- ObjectGuid uiZuramatCell;
- ObjectGuid uiMainDoor;
+
ObjectGuid uiTeleportationPortal;
ObjectGuid uiSaboteurPortal;
@@ -180,7 +168,6 @@ public:
uint8 uiDoorIntegrity;
- uint16 m_auiEncounter[MAX_ENCOUNTER];
uint8 uiCountErekemGuards;
uint8 uiCountActivationCrystals;
uint8 uiCyanigosaEventPhase;
@@ -194,52 +181,23 @@ public:
std::list<uint8> NpcAtDoorCastingList;
- std::string str_data;
-
- bool IsEncounterInProgress() const override
- {
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- return true;
-
- return false;
- }
-
void OnCreatureCreate(Creature* creature) override
{
+ InstanceScript::OnCreatureCreate(creature);
+
switch (creature->GetEntry())
{
- case CREATURE_XEVOZZ:
- uiXevozz = creature->GetGUID();
- break;
- case CREATURE_LAVANTHOR:
- uiLavanthor = creature->GetGUID();
- break;
- case CREATURE_ICHORON:
- uiIchoron = creature->GetGUID();
- break;
- case CREATURE_ZURAMAT:
- uiZuramat = creature->GetGUID();
- break;
- case CREATURE_EREKEM:
- uiErekem = creature->GetGUID();
- break;
- case CREATURE_EREKEM_GUARD:
+ case NPC_EREKEM_GUARD:
if (uiCountErekemGuards < 2)
{
uiErekemGuard[uiCountErekemGuards++] = creature->GetGUID();
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
}
break;
- case CREATURE_MORAGG:
- uiMoragg = creature->GetGUID();
+ case NPC_CYANIGOSA:
+ creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
break;
- case CREATURE_CYANIGOSA:
- uiCyanigosa = creature->GetGUID();
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
- break;
- case CREATURE_SINCLARI:
- uiSinclari = creature->GetGUID();
+ default:
break;
}
@@ -255,68 +213,53 @@ public:
void OnGameObjectCreate(GameObject* go) override
{
+ InstanceScript::OnGameObjectCreate(go);
+
switch (go->GetEntry())
{
- case GO_EREKEM_GUARD_1_DOOR:
- uiErekemLeftGuardCell = go->GetGUID();
- break;
- case GO_EREKEM_GUARD_2_DOOR:
- uiErekemRightGuardCell = go->GetGUID();
- break;
- case GO_EREKEM_DOOR:
- uiErekemCell = go->GetGUID();
- break;
- case GO_ZURAMAT_DOOR:
- uiZuramatCell = go->GetGUID();
- break;
- case GO_LAVANTHOR_DOOR:
- uiLavanthorCell = go->GetGUID();
- break;
- case GO_MORAGG_DOOR:
- uiMoraggCell = go->GetGUID();
- break;
- case GO_ICHORON_DOOR:
- uiIchoronCell = go->GetGUID();
- break;
- case GO_XEVOZZ_DOOR:
- uiXevozzCell = go->GetGUID();
- break;
- case GO_MAIN_DOOR:
- uiMainDoor = go->GetGUID();
- break;
case GO_ACTIVATION_CRYSTAL:
if (uiCountActivationCrystals < 4)
uiActivationCrystal[uiCountActivationCrystals++] = go->GetGUID();
break;
+ default:
+ break;
}
}
- void SetData(uint32 type, uint32 data) override
+ bool SetBossState(uint32 type, EncounterState state) override
{
+ if (!InstanceScript::SetBossState(type, state))
+ return false;
+
switch (type)
{
case DATA_1ST_BOSS_EVENT:
- UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, CREATURE_EREKEM, NULL);
- m_auiEncounter[0] = data;
- if (data == DONE)
- SaveToDB();
+ if (state == DONE)
+ UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, NPC_EREKEM, nullptr);
break;
case DATA_2ND_BOSS_EVENT:
- UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, CREATURE_MORAGG, NULL);
- m_auiEncounter[1] = data;
- if (data == DONE)
- SaveToDB();
- break;
- case DATA_CYANIGOSA_EVENT:
- m_auiEncounter[2] = data;
- if (data == DONE)
+ if (state == DONE)
+ UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, NPC_MORAGG, nullptr);
+ break;
+ case DATA_CYANIGOSA:
+ if (state == DONE)
{
- SaveToDB();
uiMainEventPhase = DONE;
- if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
- pMainDoor->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR))
+ mainDoor->SetGoState(GO_STATE_ACTIVE);
}
break;
+ default:
+ break;
+ }
+
+ return true;
+ }
+
+ void SetData(uint32 type, uint32 data) override
+ {
+ switch (type)
+ {
case DATA_WAVE_COUNT:
uiWaveCount = data;
bActive = true;
@@ -340,21 +283,8 @@ public:
NpcAtDoorCastingList.pop_back();
break;
case DATA_MAIN_DOOR:
- if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
- {
- switch (data)
- {
- case GO_STATE_ACTIVE:
- pMainDoor->SetGoState(GO_STATE_ACTIVE);
- break;
- case GO_STATE_READY:
- pMainDoor->SetGoState(GO_STATE_READY);
- break;
- case GO_STATE_ACTIVE_ALTERNATIVE:
- pMainDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
- break;
- }
- }
+ if (GameObject* mainDoor = GetGameObject(type))
+ mainDoor->SetGoState(GOState(data));
break;
case DATA_START_BOSS_ENCOUNTER:
switch (uiWaveCount)
@@ -374,7 +304,7 @@ public:
uiMainEventPhase = data;
if (data == IN_PROGRESS) // Start event
{
- if (GameObject* mainDoor = instance->GetGameObject(uiMainDoor))
+ if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR))
mainDoor->SetGoState(GO_STATE_READY);
uiWaveCount = 1;
bActive = true;
@@ -404,9 +334,6 @@ public:
{
switch (type)
{
- case DATA_1ST_BOSS_EVENT: return m_auiEncounter[0];
- case DATA_2ND_BOSS_EVENT: return m_auiEncounter[1];
- case DATA_CYANIGOSA_EVENT: return m_auiEncounter[2];
case DATA_WAVE_COUNT: return uiWaveCount;
case DATA_REMOVE_NPC: return uiRemoveNpc;
case DATA_PORTAL_LOCATION: return uiLocation;
@@ -421,125 +348,107 @@ public:
return 0;
}
- ObjectGuid GetGuidData(uint32 identifier) const override
+ ObjectGuid GetGuidData(uint32 type) const override
{
- switch (identifier)
+ switch (type)
{
- case DATA_MORAGG: return uiMoragg;
- case DATA_EREKEM: return uiErekem;
case DATA_EREKEM_GUARD_1: return uiErekemGuard[0];
case DATA_EREKEM_GUARD_2: return uiErekemGuard[1];
- case DATA_ICHORON: return uiIchoron;
- case DATA_LAVANTHOR: return uiLavanthor;
- case DATA_XEVOZZ: return uiXevozz;
- case DATA_ZURAMAT: return uiZuramat;
- case DATA_CYANIGOSA: return uiCyanigosa;
- case DATA_MORAGG_CELL: return uiMoraggCell;
- case DATA_EREKEM_CELL: return uiErekemCell;
- case DATA_EREKEM_RIGHT_GUARD_CELL: return uiErekemRightGuardCell;
- case DATA_EREKEM_LEFT_GUARD_CELL: return uiErekemLeftGuardCell;
- case DATA_ICHORON_CELL: return uiIchoronCell;
- case DATA_LAVANTHOR_CELL: return uiLavanthorCell;
- case DATA_XEVOZZ_CELL: return uiXevozzCell;
- case DATA_ZURAMAT_CELL: return uiZuramatCell;
- case DATA_MAIN_DOOR: return uiMainDoor;
- case DATA_SINCLARI: return uiSinclari;
case DATA_TELEPORTATION_PORTAL: return uiTeleportationPortal;
case DATA_SABOTEUR_PORTAL: return uiSaboteurPortal;
}
- return ObjectGuid::Empty;
+ return InstanceScript::GetGuidData(type);
}
void SpawnPortal()
{
SetData(DATA_PORTAL_LOCATION, (GetData(DATA_PORTAL_LOCATION) + urand(1, 5))%6);
- if (Creature* pSinclari = instance->GetCreature(uiSinclari))
- if (Creature* portal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL, PortalLocation[GetData(DATA_PORTAL_LOCATION)], TEMPSUMMON_CORPSE_DESPAWN))
+ if (Creature* sinclari = GetCreature(DATA_SINCLARI))
+ if (Creature* portal = sinclari->SummonCreature(NPC_TELEPORTATION_PORTAL, PortalLocation[GetData(DATA_PORTAL_LOCATION)], TEMPSUMMON_CORPSE_DESPAWN))
uiTeleportationPortal = portal->GetGUID();
}
void StartBossEncounter(uint8 uiBoss, bool bForceRespawn = true)
{
- Creature* pBoss = NULL;
+ Creature* boss = nullptr;
switch (uiBoss)
{
case BOSS_MORAGG:
- HandleGameObject(uiMoraggCell, bForceRespawn);
- pBoss = instance->GetCreature(uiMoragg);
- if (pBoss)
- pBoss->GetMotionMaster()->MovePoint(0, BossStartMove1);
+ HandleGameObject(GetObjectGuid(DATA_MORAGG_CELL), bForceRespawn);
+ boss = GetCreature(DATA_MORAGG);
+ if (boss)
+ boss->GetMotionMaster()->MovePoint(0, BossStartMove1);
break;
case BOSS_EREKEM:
- HandleGameObject(uiErekemCell, bForceRespawn);
- HandleGameObject(uiErekemRightGuardCell, bForceRespawn);
- HandleGameObject(uiErekemLeftGuardCell, bForceRespawn);
-
- pBoss = instance->GetCreature(uiErekem);
+ HandleGameObject(GetObjectGuid(DATA_EREKEM_CELL), bForceRespawn);
+ HandleGameObject(GetObjectGuid(DATA_EREKEM_LEFT_GUARD_CELL), bForceRespawn);
+ HandleGameObject(GetObjectGuid(DATA_EREKEM_RIGHT_GUARD_CELL), bForceRespawn);
- if (pBoss)
- pBoss->GetMotionMaster()->MovePoint(0, BossStartMove2);
+ boss = GetCreature(DATA_EREKEM);
+ if (boss)
+ boss->GetMotionMaster()->MovePoint(0, BossStartMove2);
if (Creature* pGuard1 = instance->GetCreature(uiErekemGuard[0]))
{
if (bForceRespawn)
- pGuard1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ pGuard1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
else
- pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
pGuard1->GetMotionMaster()->MovePoint(0, BossStartMove21);
}
if (Creature* pGuard2 = instance->GetCreature(uiErekemGuard[1]))
{
if (bForceRespawn)
- pGuard2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ pGuard2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
else
- pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);
pGuard2->GetMotionMaster()->MovePoint(0, BossStartMove22);
}
break;
case BOSS_ICHORON:
- HandleGameObject(uiIchoronCell, bForceRespawn);
- pBoss = instance->GetCreature(uiIchoron);
- if (pBoss)
- pBoss->GetMotionMaster()->MovePoint(0, BossStartMove3);
+ HandleGameObject(GetObjectGuid(DATA_ICHORON_CELL), bForceRespawn);
+ boss = GetCreature(DATA_ICHORON);
+ if (boss)
+ boss->GetMotionMaster()->MovePoint(0, BossStartMove3);
break;
case BOSS_LAVANTHOR:
- HandleGameObject(uiLavanthorCell, bForceRespawn);
- pBoss = instance->GetCreature(uiLavanthor);
- if (pBoss)
- pBoss->GetMotionMaster()->MovePoint(0, BossStartMove4);
+ HandleGameObject(GetObjectGuid(DATA_LAVANTHOR_CELL), bForceRespawn);
+ boss = GetCreature(DATA_LAVANTHOR);
+ if (boss)
+ boss->GetMotionMaster()->MovePoint(0, BossStartMove4);
break;
case BOSS_XEVOZZ:
- HandleGameObject(uiXevozzCell, bForceRespawn);
- pBoss = instance->GetCreature(uiXevozz);
- if (pBoss)
- pBoss->GetMotionMaster()->MovePoint(0, BossStartMove5);
+ HandleGameObject(GetObjectGuid(DATA_XEVOZZ_CELL), bForceRespawn);
+ boss = GetCreature(DATA_XEVOZZ);
+ if (boss)
+ boss->GetMotionMaster()->MovePoint(0, BossStartMove5);
break;
case BOSS_ZURAMAT:
- HandleGameObject(uiZuramatCell, bForceRespawn);
- pBoss = instance->GetCreature(uiZuramat);
- if (pBoss)
- pBoss->GetMotionMaster()->MovePoint(0, BossStartMove6);
+ HandleGameObject(GetObjectGuid(DATA_ZURAMAT_CELL), bForceRespawn);
+ boss = GetCreature(DATA_ZURAMAT);
+ if (boss)
+ boss->GetMotionMaster()->MovePoint(0, BossStartMove6);
break;
}
// generic boss state changes
- if (pBoss)
+ if (boss)
{
- pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
- pBoss->SetReactState(REACT_AGGRESSIVE);
+ boss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ boss->SetReactState(REACT_AGGRESSIVE);
if (!bForceRespawn)
{
- if (pBoss->isDead())
+ if (boss->isDead())
{
// respawn but avoid to be looted again
- pBoss->Respawn();
- pBoss->RemoveLootMode(1);
+ boss->Respawn();
+ boss->RemoveLootMode(1);
}
- pBoss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ boss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
uiWaveCount = 0;
}
}
@@ -555,12 +464,12 @@ public:
case 6:
if (uiFirstBoss == 0)
uiFirstBoss = urand(1, 6);
- if (Creature* pSinclari = instance->GetCreature(uiSinclari))
+ if (Creature* sinclari = GetCreature(DATA_SINCLARI))
{
- if (Creature* pPortal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN))
- uiSaboteurPortal = pPortal->GetGUID();
- if (Creature* pAzureSaboteur = pSinclari->SummonCreature(CREATURE_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN))
- pAzureSaboteur->CastSpell(pAzureSaboteur, SABOTEUR_SHIELD_EFFECT, false);
+ if (Creature* portal = sinclari->SummonCreature(NPC_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN))
+ uiSaboteurPortal = portal->GetGUID();
+ if (Creature* azureSaboteur = sinclari->SummonCreature(NPC_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN))
+ azureSaboteur->CastSpell(azureSaboteur, SABOTEUR_SHIELD_EFFECT, false);
}
break;
case 12:
@@ -569,25 +478,22 @@ public:
{
uiSecondBoss = urand(1, 6);
} while (uiSecondBoss == uiFirstBoss);
- if (Creature* pSinclari = instance->GetCreature(uiSinclari))
+ if (Creature* sinclari = GetCreature(DATA_SINCLARI))
{
- if (Creature* pPortal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN))
+ if (Creature* pPortal = sinclari->SummonCreature(NPC_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN))
uiSaboteurPortal = pPortal->GetGUID();
- if (Creature* pAzureSaboteur = pSinclari->SummonCreature(CREATURE_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN))
+ if (Creature* pAzureSaboteur = sinclari->SummonCreature(NPC_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN))
pAzureSaboteur->CastSpell(pAzureSaboteur, SABOTEUR_SHIELD_EFFECT, false);
}
break;
case 18:
- {
- Creature* pSinclari = instance->GetCreature(uiSinclari);
- if (pSinclari)
- pSinclari->SummonCreature(CREATURE_CYANIGOSA, CyanigosasSpawnLocation, TEMPSUMMON_DEAD_DESPAWN);
+ if (Creature* sinclari = GetCreature(DATA_SINCLARI))
+ sinclari->SummonCreature(NPC_CYANIGOSA, CyanigosasSpawnLocation, TEMPSUMMON_DEAD_DESPAWN);
break;
- }
case 1:
{
- if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
- pMainDoor->SetGoState(GO_STATE_READY);
+ if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR))
+ mainDoor->SetGoState(GO_STATE_READY);
DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, 100);
// no break
}
@@ -597,54 +503,15 @@ public:
}
}
- std::string GetSaveData() override
+ void WriteSaveDataMore(std::ostringstream& data) override
{
- OUT_SAVE_INST_DATA;
-
- std::ostringstream saveStream;
- saveStream << "V H " << (uint16)m_auiEncounter[0]
- << ' ' << (uint16)m_auiEncounter[1]
- << ' ' << (uint16)m_auiEncounter[2]
- << ' ' << (uint16)uiFirstBoss
- << ' ' << (uint16)uiSecondBoss;
-
- str_data = saveStream.str();
-
- OUT_SAVE_INST_DATA_COMPLETE;
- return str_data;
+ data << uiFirstBoss << ' ' << uiSecondBoss;
}
- void Load(const char* in) override
+ void ReadSaveDataMore(std::istringstream& data) override
{
- if (!in)
- {
- OUT_LOAD_INST_DATA_FAIL;
- return;
- }
-
- OUT_LOAD_INST_DATA(in);
-
- char dataHead1, dataHead2;
- uint16 data0, data1, data2, data3, data4;
-
- std::istringstream loadStream(in);
- loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4;
-
- if (dataHead1 == 'V' && dataHead2 == 'H')
- {
- m_auiEncounter[0] = data0;
- m_auiEncounter[1] = data1;
- m_auiEncounter[2] = data2;
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
- if (m_auiEncounter[i] == IN_PROGRESS)
- m_auiEncounter[i] = NOT_STARTED;
-
- uiFirstBoss = uint8(data3);
- uiSecondBoss = uint8(data4);
- } else OUT_LOAD_INST_DATA_FAIL;
-
- OUT_LOAD_INST_DATA_COMPLETE;
+ data >> uiFirstBoss;
+ data >> uiSecondBoss;
}
bool CheckWipe()
@@ -695,54 +562,51 @@ public:
if (GameObject* crystal = instance->GetGameObject(uiActivationCrystal[i]))
crystal->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- if (Creature* pSinclari = instance->GetCreature(uiSinclari))
+ if (Creature* sinclari = GetCreature(DATA_SINCLARI))
{
- pSinclari->SetVisible(true);
+ sinclari->SetVisible(true);
std::list<Creature*> GuardList;
- pSinclari->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f);
+ sinclari->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f);
if (!GuardList.empty())
{
- for (std::list<Creature*>::const_iterator itr = GuardList.begin(); itr != GuardList.end(); ++itr)
+ for (Creature* guard : GuardList)
{
- if (Creature* pGuard = *itr)
- {
- pGuard->SetVisible(true);
- pGuard->SetReactState(REACT_AGGRESSIVE);
- pGuard->GetMotionMaster()->MovePoint(1, pGuard->GetHomePosition());
- }
+ guard->SetVisible(true);
+ guard->SetReactState(REACT_AGGRESSIVE);
+ guard->GetMotionMaster()->MovePoint(1, guard->GetHomePosition());
}
}
- pSinclari->GetMotionMaster()->MovePoint(1, pSinclari->GetHomePosition());
- pSinclari->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ sinclari->GetMotionMaster()->MovePoint(1, sinclari->GetHomePosition());
+ sinclari->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
}
// Cyanigosa is spawned but not tranformed, prefight event
- Creature* pCyanigosa = instance->GetCreature(uiCyanigosa);
- if (pCyanigosa && !pCyanigosa->HasAura(CYANIGOSA_SPELL_TRANSFORM))
+ Creature* cyanigosa = GetCreature(DATA_CYANIGOSA);
+ if (cyanigosa && !cyanigosa->HasAura(CYANIGOSA_SPELL_TRANSFORM))
{
if (uiCyanigosaEventTimer <= diff)
{
switch (uiCyanigosaEventPhase)
{
case 1:
- pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false);
- pCyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN);
+ cyanigosa->CastSpell(cyanigosa, CYANIGOSA_BLUE_AURA, false);
+ cyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN);
uiCyanigosaEventTimer = 7*IN_MILLISECONDS;
++uiCyanigosaEventPhase;
break;
case 2:
- pCyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f);
- pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false);
+ cyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f);
+ cyanigosa->CastSpell(cyanigosa, CYANIGOSA_BLUE_AURA, false);
uiCyanigosaEventTimer = 7*IN_MILLISECONDS;
++uiCyanigosaEventPhase;
break;
case 3:
- pCyanigosa->RemoveAurasDueToSpell(CYANIGOSA_BLUE_AURA);
- pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_SPELL_TRANSFORM, 0);
- pCyanigosa->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
- pCyanigosa->SetReactState(REACT_AGGRESSIVE);
+ cyanigosa->RemoveAurasDueToSpell(CYANIGOSA_BLUE_AURA);
+ cyanigosa->CastSpell(cyanigosa, CYANIGOSA_SPELL_TRANSFORM, 0);
+ cyanigosa->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE);
+ cyanigosa->SetReactState(REACT_AGGRESSIVE);
uiCyanigosaEventTimer = 2*IN_MILLISECONDS;
++uiCyanigosaEventPhase;
break;
@@ -815,6 +679,11 @@ public:
}
}
};
+
+ InstanceScript* GetInstanceScript(InstanceMap* map) const override
+ {
+ return new instance_violet_hold_InstanceMapScript(map);
+ }
};
void AddSC_instance_violet_hold()
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 645a9da4764..8bcc80b5a84 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -32,18 +32,18 @@
enum PortalCreatures
{
- CREATURE_AZURE_INVADER_1 = 30661,
- CREATURE_AZURE_INVADER_2 = 30961,
- CREATURE_AZURE_SPELLBREAKER_1 = 30662,
- CREATURE_AZURE_SPELLBREAKER_2 = 30962,
- CREATURE_AZURE_BINDER_1 = 30663,
- CREATURE_AZURE_BINDER_2 = 30918,
- CREATURE_AZURE_MAGE_SLAYER_1 = 30664,
- CREATURE_AZURE_MAGE_SLAYER_2 = 30963,
- CREATURE_AZURE_CAPTAIN = 30666,
- CREATURE_AZURE_SORCEROR = 30667,
- CREATURE_AZURE_RAIDER = 30668,
- CREATURE_AZURE_STALKER = 32191
+ NPC_AZURE_INVADER_1 = 30661,
+ NPC_AZURE_INVADER_2 = 30961,
+ NPC_AZURE_SPELLBREAKER_1 = 30662,
+ NPC_AZURE_SPELLBREAKER_2 = 30962,
+ NPC_AZURE_BINDER_1 = 30663,
+ NPC_AZURE_BINDER_2 = 30918,
+ NPC_AZURE_MAGE_SLAYER_1 = 30664,
+ NPC_AZURE_MAGE_SLAYER_2 = 30963,
+ NPC_AZURE_CAPTAIN = 30666,
+ NPC_AZURE_SORCEROR = 30667,
+ NPC_AZURE_RAIDER = 30668,
+ NPC_AZURE_STALKER = 32191
};
enum AzureInvaderSpells
@@ -258,7 +258,7 @@ public:
{
case GOSSIP_ACTION_INFO_DEF+1:
player->CLOSE_GOSSIP_MENU();
- ENSURE_AI(npc_sinclari_vh::npc_sinclariAI, (creature->AI()))->uiPhase = 1;
+ ENSURE_AI(npc_sinclari_vh::npc_sinclariAI, creature->AI())->uiPhase = 1;
if (InstanceScript* instance = creature->GetInstanceScript())
instance->SetData(DATA_MAIN_EVENT_PHASE, SPECIAL);
break;
@@ -296,17 +296,12 @@ public:
return true;
}
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_sinclariAI>(creature);
- }
-
struct npc_sinclariAI : public ScriptedAI
{
npc_sinclariAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
- instance = creature->GetInstanceScript();
+ instance = creature->GetInstanceScript();
}
void Initialize()
@@ -345,8 +340,6 @@ public:
void UpdateAI(uint32 uiDiff) override
{
- ScriptedAI::UpdateAI(uiDiff);
-
if (uiPhase)
{
if (uiTimer <= uiDiff)
@@ -415,6 +408,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_sinclariAI>(creature);
+ }
};
class npc_azure_saboteur : public CreatureScript
@@ -422,14 +419,9 @@ class npc_azure_saboteur : public CreatureScript
public:
npc_azure_saboteur() : CreatureScript("npc_azure_saboteur") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_saboteurAI>(creature);
- }
-
struct npc_azure_saboteurAI : public npc_escortAI
{
- npc_azure_saboteurAI(Creature* creature):npc_escortAI(creature)
+ npc_azure_saboteurAI(Creature* creature) : npc_escortAI(creature)
{
instance = creature->GetInstanceScript();
bHasGotMovingPoints = false;
@@ -532,13 +524,16 @@ public:
{
me->CastSpell(me, SABOTEUR_SHIELD_DISRUPTION, false);
me->DisappearAndDie();
- Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetGuidData(DATA_SABOTEUR_PORTAL));
- if (pSaboPort)
+ if (Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetGuidData(DATA_SABOTEUR_PORTAL)))
pSaboPort->DisappearAndDie();
instance->SetData(DATA_START_BOSS_ENCOUNTER, 1);
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_saboteurAI>(creature);
+ }
};
class npc_teleportation_portal_vh : public CreatureScript
@@ -546,11 +541,6 @@ class npc_teleportation_portal_vh : public CreatureScript
public:
npc_teleportation_portal_vh() : CreatureScript("npc_teleportation_portal_vh") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_teleportation_portalAI>(creature);
- }
-
struct npc_teleportation_portalAI : public ScriptedAI
{
npc_teleportation_portalAI(Creature* creature) : ScriptedAI(creature), listOfMobs(me)
@@ -583,7 +573,6 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_REMOVE_NPC) == 1)
@@ -608,7 +597,7 @@ public:
uint8 k = uiWaveCount < 12 ? 2 : 3;
for (uint8 i = 0; i < k; ++i)
{
- uint32 entry = RAND(CREATURE_AZURE_CAPTAIN, CREATURE_AZURE_RAIDER, CREATURE_AZURE_STALKER, CREATURE_AZURE_SORCEROR);
+ uint32 entry = RAND(NPC_AZURE_CAPTAIN, NPC_AZURE_RAIDER, NPC_AZURE_STALKER, NPC_AZURE_SORCEROR);
DoSummon(entry, me, 2.0f, 20000, TEMPSUMMON_DEAD_DESPAWN);
}
me->SetVisible(false);
@@ -633,14 +622,14 @@ public:
uint8 k = instance->GetData(DATA_WAVE_COUNT) < 12 ? 3 : 4;
for (uint8 i = 0; i < k; ++i)
{
- uint32 entry = RAND(CREATURE_AZURE_INVADER_1, CREATURE_AZURE_INVADER_2, CREATURE_AZURE_SPELLBREAKER_1, CREATURE_AZURE_SPELLBREAKER_2, CREATURE_AZURE_MAGE_SLAYER_1, CREATURE_AZURE_MAGE_SLAYER_2, CREATURE_AZURE_BINDER_1, CREATURE_AZURE_BINDER_2);
+ uint32 entry = RAND(NPC_AZURE_INVADER_1, NPC_AZURE_INVADER_2, NPC_AZURE_SPELLBREAKER_1, NPC_AZURE_SPELLBREAKER_2, NPC_AZURE_MAGE_SLAYER_1, NPC_AZURE_MAGE_SLAYER_2, NPC_AZURE_BINDER_1, NPC_AZURE_BINDER_2);
DoSummon(entry, me, 2.0f, 20000, TEMPSUMMON_DEAD_DESPAWN);
}
}
else
{
bPortalGuardianOrKeeperOrEliteSpawn = true;
- uint32 entry = RAND(CREATURE_PORTAL_GUARDIAN, CREATURE_PORTAL_KEEPER);
+ uint32 entry = RAND(NPC_PORTAL_GUARDIAN, NPC_PORTAL_KEEPER);
if (Creature* pPortalKeeper = DoSummon(entry, me, 2.0f, 0, TEMPSUMMON_DEAD_DESPAWN))
me->CastSpell(pPortalKeeper, SPELL_PORTAL_CHANNEL, false);
}
@@ -674,11 +663,15 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_teleportation_portalAI>(creature);
+ }
};
struct violet_hold_trashAI : public npc_escortAI
{
- violet_hold_trashAI(Creature* creature):npc_escortAI(creature)
+ violet_hold_trashAI(Creature* creature) : npc_escortAI(creature)
{
instance = creature->GetInstanceScript();
bHasGotMovingPoints = false;
@@ -723,7 +716,7 @@ struct violet_hold_trashAI : public npc_escortAI
}
}
- void UpdateAI(uint32) override
+ void UpdateAI(uint32 diff) override
{
if (instance->GetData(DATA_MAIN_EVENT_PHASE) != IN_PROGRESS)
me->CastStop();
@@ -778,6 +771,8 @@ struct violet_hold_trashAI : public npc_escortAI
SetDespawnAtEnd(false);
Start(true, true);
}
+
+ npc_escortAI::UpdateAI(diff);
}
void JustDied(Unit* /*killer*/) override
@@ -791,7 +786,6 @@ struct violet_hold_trashAI : public npc_escortAI
DoCast(SPELL_DESTROY_DOOR_SEAL);
instance->SetData(DATA_NPC_PRESENCE_AT_DOOR_ADD, 1);
}
-
};
class npc_azure_invader : public CreatureScript
@@ -799,11 +793,6 @@ class npc_azure_invader : public CreatureScript
public:
npc_azure_invader() : CreatureScript("npc_azure_invader") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_invaderAI>(creature);
- }
-
struct npc_azure_invaderAI : public violet_hold_trashAI
{
npc_azure_invaderAI(Creature* creature) : violet_hold_trashAI(creature)
@@ -833,12 +822,11 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
- if (me->GetEntry() == CREATURE_AZURE_INVADER_1)
+ if (me->GetEntry() == NPC_AZURE_INVADER_1)
{
if (uiCleaveTimer <= diff)
{
@@ -848,14 +836,13 @@ public:
if (uiImpaleTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_IMPALE);
uiImpaleTimer = 4000;
} else uiImpaleTimer -= diff;
}
- if (me->GetEntry() == CREATURE_AZURE_INVADER_2)
+ if (me->GetEntry() == NPC_AZURE_INVADER_2)
{
if (uiBrutalStrikeTimer <= diff)
{
@@ -876,6 +863,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_invaderAI>(creature);
+ }
};
class npc_azure_binder : public CreatureScript
@@ -883,11 +874,6 @@ class npc_azure_binder : public CreatureScript
public:
npc_azure_binder() : CreatureScript("npc_azure_binder") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_binderAI>(creature);
- }
-
struct npc_azure_binderAI : public violet_hold_trashAI
{
npc_azure_binderAI(Creature* creature) : violet_hold_trashAI(creature)
@@ -917,12 +903,11 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
- if (me->GetEntry() == CREATURE_AZURE_BINDER_1)
+ if (me->GetEntry() == NPC_AZURE_BINDER_1)
{
if (uiArcaneExplosionTimer <= diff)
{
@@ -930,16 +915,15 @@ public:
uiArcaneExplosionTimer = 5000;
} else uiArcaneExplosionTimer -= diff;
- if (uiArcainBarrageTimer <= diff)
+ if (uiArcainBarrageTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
- DoCast(target, SPELL_ARCANE_BARRAGE);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ DoCast(target, SPELL_ARCANE_BARRAGE);
uiArcainBarrageTimer = 6000;
} else uiArcainBarrageTimer -= diff;
}
- if (me->GetEntry() == CREATURE_AZURE_BINDER_2)
+ if (me->GetEntry() == NPC_AZURE_BINDER_2)
{
if (uiFrostNovaTimer <= diff)
{
@@ -949,8 +933,7 @@ public:
if (uiFrostboltTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_FROSTBOLT);
uiFrostboltTimer = 6000;
} else uiFrostboltTimer -= diff;
@@ -960,6 +943,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_binderAI>(creature);
+ }
};
class npc_azure_mage_slayer : public CreatureScript
@@ -967,11 +954,6 @@ class npc_azure_mage_slayer : public CreatureScript
public:
npc_azure_mage_slayer() : CreatureScript("npc_azure_mage_slayer") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_mage_slayerAI>(creature);
- }
-
struct npc_azure_mage_slayerAI : public violet_hold_trashAI
{
npc_azure_mage_slayerAI(Creature* creature) : violet_hold_trashAI(creature)
@@ -997,12 +979,11 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
- if (me->GetEntry() == CREATURE_AZURE_MAGE_SLAYER_1)
+ if (me->GetEntry() == NPC_AZURE_MAGE_SLAYER_1)
{
if (uiArcaneEmpowermentTimer <= diff)
{
@@ -1011,12 +992,11 @@ public:
} else uiArcaneEmpowermentTimer -= diff;
}
- if (me->GetEntry() == CREATURE_AZURE_MAGE_SLAYER_2)
+ if (me->GetEntry() == NPC_AZURE_MAGE_SLAYER_2)
{
if (uiSpellLockTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_SPELL_LOCK);
uiSpellLockTimer = 9000;
} else uiSpellLockTimer -= diff;
@@ -1026,6 +1006,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_mage_slayerAI>(creature);
+ }
};
class npc_azure_raider : public CreatureScript
@@ -1033,11 +1017,6 @@ class npc_azure_raider : public CreatureScript
public:
npc_azure_raider() : CreatureScript("npc_azure_raider") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_raiderAI>(creature);
- }
-
struct npc_azure_raiderAI : public violet_hold_trashAI
{
npc_azure_raiderAI(Creature* creature) : violet_hold_trashAI(creature)
@@ -1063,7 +1042,6 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
@@ -1084,6 +1062,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_raiderAI>(creature);
+ }
};
class npc_azure_stalker : public CreatureScript
@@ -1114,7 +1096,6 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
@@ -1123,8 +1104,7 @@ public:
{
if (_tacticalBlinkTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true))
DoCast(target, SPELL_TACTICAL_BLINK);
_tacticalBlinkTimer = 6000;
_tacticalBlinkCast = true;
@@ -1135,8 +1115,8 @@ public:
{
if (_backstabTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 10, true);
- DoCast(target, SPELL_BACKSTAB);
+ if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 10, true))
+ DoCast(target, SPELL_BACKSTAB);
_tacticalBlinkCast = false;
_backstabTimer =1300;
} else _backstabTimer -= diff;
@@ -1191,36 +1171,32 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
- if (me->GetEntry() == CREATURE_AZURE_SPELLBREAKER_1)
+ if (me->GetEntry() == NPC_AZURE_SPELLBREAKER_1)
{
if (uiArcaneBlastTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_ARCANE_BLAST);
uiArcaneBlastTimer = 6000;
} else uiArcaneBlastTimer -= diff;
if (uiSlowTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_SLOW);
uiSlowTimer = 5000;
} else uiSlowTimer -= diff;
}
- if (me->GetEntry() == CREATURE_AZURE_SPELLBREAKER_2)
+ if (me->GetEntry() == NPC_AZURE_SPELLBREAKER_2)
{
if (uiChainsOfIceTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_CHAINS_OF_ICE);
uiChainsOfIceTimer = 7000;
} else uiChainsOfIceTimer -= diff;
@@ -1247,11 +1223,6 @@ class npc_azure_captain : public CreatureScript
public:
npc_azure_captain() : CreatureScript("npc_azure_captain") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_captainAI>(creature);
- }
-
struct npc_azure_captainAI : public violet_hold_trashAI
{
npc_azure_captainAI(Creature* creature) : violet_hold_trashAI(creature)
@@ -1277,7 +1248,6 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
@@ -1298,6 +1268,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_captainAI>(creature);
+ }
};
class npc_azure_sorceror : public CreatureScript
@@ -1305,11 +1279,6 @@ class npc_azure_sorceror : public CreatureScript
public:
npc_azure_sorceror() : CreatureScript("npc_azure_sorceror") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_azure_sorcerorAI>(creature);
- }
-
struct npc_azure_sorcerorAI : public violet_hold_trashAI
{
npc_azure_sorcerorAI(Creature* creature) : violet_hold_trashAI(creature)
@@ -1337,15 +1306,13 @@ public:
void UpdateAI(uint32 diff) override
{
violet_hold_trashAI::UpdateAI(diff);
- npc_escortAI::UpdateAI(diff);
if (!UpdateVictim())
return;
if (uiArcaneStreamTimer <= diff)
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_ARCANE_STREAM);
uiArcaneStreamTimer = urand(0, 5000)+5000;
uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer;
@@ -1360,6 +1327,11 @@ public:
DoMeleeAttackIfReady();
}
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_azure_sorcerorAI>(creature);
+ }
};
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h
index 404d1f493e6..275a7467d83 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.h
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h
@@ -18,13 +18,18 @@
#ifndef DEF_VIOLET_HOLD_H
#define DEF_VIOLET_HOLD_H
-#define DataHeader "VIO"
+#define DataHeader "VH"
+
+uint32 const EncounterCount = 3;
enum Data
{
+ // Main encounters
DATA_1ST_BOSS_EVENT,
DATA_2ND_BOSS_EVENT,
- DATA_CYANIGOSA_EVENT,
+ DATA_CYANIGOSA,
+
+ // Misc
DATA_WAVE_COUNT,
DATA_REMOVE_NPC,
DATA_PORTAL_LOCATION,
@@ -38,10 +43,8 @@ enum Data
DATA_ACTIVATE_CRYSTAL,
DATA_MAIN_EVENT_PHASE,
DATA_DEFENSELESS,
-};
-enum Data64
-{
+ // Bosses
DATA_MORAGG,
DATA_EREKEM,
DATA_EREKEM_GUARD_1,
@@ -50,7 +53,8 @@ enum Data64
DATA_LAVANTHOR,
DATA_XEVOZZ,
DATA_ZURAMAT,
- DATA_CYANIGOSA,
+
+ // Cells
DATA_MORAGG_CELL,
DATA_EREKEM_CELL,
DATA_EREKEM_LEFT_GUARD_CELL,
@@ -59,6 +63,8 @@ enum Data64
DATA_LAVANTHOR_CELL,
DATA_XEVOZZ_CELL,
DATA_ZURAMAT_CELL,
+
+ // Misc
DATA_MAIN_DOOR,
DATA_SINCLARI,
DATA_TELEPORTATION_PORTAL,
@@ -81,33 +87,48 @@ enum Bosses
enum CreaturesIds
{
- CREATURE_TELEPORTATION_PORTAL = 31011,
- CREATURE_PORTAL_GUARDIAN = 30660,
- CREATURE_PORTAL_KEEPER = 30695,
- CREATURE_XEVOZZ = 29266,
- CREATURE_LAVANTHOR = 29312,
- CREATURE_ICHORON = 29313,
- CREATURE_ZURAMAT = 29314,
- CREATURE_EREKEM = 29315,
- CREATURE_EREKEM_GUARD = 29395,
- CREATURE_MORAGG = 29316,
- CREATURE_CYANIGOSA = 31134,
- CREATURE_SINCLARI = 30658,
- CREATURE_SABOTEOUR = 31079,
- NPC_VIOLET_HOLD_GUARD = 30659,
- NPC_DEFENSE_SYSTEM = 30837
+ NPC_TELEPORTATION_PORTAL = 31011,
+ NPC_PORTAL_GUARDIAN = 30660,
+ NPC_PORTAL_KEEPER = 30695,
+ NPC_XEVOZZ = 29266,
+ NPC_LAVANTHOR = 29312,
+ NPC_ICHORON = 29313,
+ NPC_ZURAMAT = 29314,
+ NPC_EREKEM = 29315,
+ NPC_EREKEM_GUARD = 29395,
+ NPC_MORAGG = 29316,
+ NPC_CYANIGOSA = 31134,
+ NPC_SINCLARI = 30658,
+ NPC_SABOTEOUR = 31079,
+ NPC_VIOLET_HOLD_GUARD = 30659,
+ NPC_DEFENSE_SYSTEM = 30837
+};
+
+enum GameObjectIds
+{
+ GO_MAIN_DOOR = 191723,
+ GO_XEVOZZ_DOOR = 191556,
+ GO_LAVANTHOR_DOOR = 191566,
+ GO_ICHORON_DOOR = 191722,
+ GO_ZURAMAT_DOOR = 191565,
+ GO_EREKEM_DOOR = 191564,
+ GO_EREKEM_GUARD_1_DOOR = 191563,
+ GO_EREKEM_GUARD_2_DOOR = 191562,
+ GO_MORAGG_DOOR = 191606,
+ GO_INTRO_ACTIVATION_CRYSTAL = 193615,
+ GO_ACTIVATION_CRYSTAL = 193611
};
enum WorldStateIds
{
- WORLD_STATE_VH = 3816,
- WORLD_STATE_VH_PRISON_STATE = 3815,
- WORLD_STATE_VH_WAVE_COUNT = 3810,
+ WORLD_STATE_VH = 3816,
+ WORLD_STATE_VH_PRISON_STATE = 3815,
+ WORLD_STATE_VH_WAVE_COUNT = 3810,
};
enum Events
{
- EVENT_ACTIVATE_CRYSTAL = 20001
+ EVENT_ACTIVATE_CRYSTAL = 20001
};
#endif