aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp18
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp78
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp6
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h25
5 files changed, 102 insertions, 27 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
index 52277ee420d..4ee8affda74 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp
@@ -91,7 +91,7 @@ class boss_baltharus_the_warborn : public CreatureScript
{
switch(action)
{
- case ACTION_INTRO_TRIGGER:
+ case ACTION_INTRO_BALTHARUS:
if (_introDone)
return;
_introDone = true;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index f594087aefb..107aed734e1 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -93,10 +93,18 @@ class boss_general_zarithrian : public CreatureScript
{
}
+ void Reset()
+ {
+ _Reset();
+ if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ }
+
void EnterCombat(Unit* /*who*/)
{
_EnterCombat();
Talk(SAY_AGGRO);
+ events.Reset();
events.ScheduleEvent(EVENT_CLEAVE, 15000);
events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 42000);
events.ScheduleEvent(EVENT_SUMMON_ADDS, 40000);
@@ -128,10 +136,16 @@ class boss_general_zarithrian : public CreatureScript
void UpdateAI(uint32 const diff)
{
- // Cant use room boundary, the gameobject is spawned on same position as the boss.
- if (!UpdateVictim() || me->GetPositionX() > 3060.0f)
+ if (!UpdateVictim())
return;
+ // Can't use room boundary here, the gameobject is spawned at the same position as the boss. This is just as good anyway.
+ if (me->GetPositionX() > 3060.0f)
+ {
+ EnterEvadeMode();
+ return;
+ }
+
events.Update(diff);
if (me->HasUnitState(UNIT_STAT_CASTING))
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
index 0c7b47e703f..ca6509060c3 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -40,11 +40,14 @@ class instance_ruby_sanctum : public InstanceMapScript
GeneralZarithrianGUID = 0;
SavianaRagefireGUID = 0;
HalionGUID = 0;
+ HalionControllerGUID = 0;
CrystalChannelTargetGUID = 0;
XerestraszaGUID = 0;
BaltharusSharedHealth = 0;
FlameWallsGUID = 0;
+ FlameRingGUID = 0;
memset(ZarithianSpawnStalkerGUID, 0, 2*sizeof(uint64));
+ memset(BurningTreeGUID, 0, 4*sizeof(uint64));
}
void OnCreatureCreate(Creature* creature)
@@ -63,6 +66,8 @@ class instance_ruby_sanctum : public InstanceMapScript
case NPC_HALION:
HalionGUID = creature->GetGUID();
break;
+ case NPC_HALION_CONTROLLER:
+ HalionControllerGUID = creature->GetGUID();
case NPC_BALTHARUS_TARGET:
CrystalChannelTargetGUID = creature->GetGUID();
break;
@@ -89,6 +94,31 @@ class instance_ruby_sanctum : public InstanceMapScript
break;
case GO_FLAME_WALLS:
FlameWallsGUID = go->GetGUID();
+ if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
+ HandleGameObject(FlameWallsGUID, true, go);
+ break;
+ case GO_FLAME_RING:
+ FlameRingGUID = go->GetGUID();
+ break;
+ case GO_BURNING_TREE_1:
+ BurningTreeGUID[0] = go->GetGUID();
+ if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
+ HandleGameObject(BurningTreeGUID[0], true);
+ break;
+ case GO_BURNING_TREE_2:
+ BurningTreeGUID[1] = go->GetGUID();
+ if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
+ HandleGameObject(BurningTreeGUID[1], true);
+ break;
+ case GO_BURNING_TREE_3:
+ BurningTreeGUID[2] = go->GetGUID();
+ if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
+ HandleGameObject(BurningTreeGUID[2], true);
+ break;
+ case GO_BURNING_TREE_4:
+ BurningTreeGUID[3] = go->GetGUID();
+ if (GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE)
+ HandleGameObject(BurningTreeGUID[3], true);
break;
default:
break;
@@ -113,20 +143,32 @@ class instance_ruby_sanctum : public InstanceMapScript
{
case DATA_BALTHARUS_THE_WARBORN:
return BaltharusTheWarbornGUID;
- case DATA_GENERAL_ZARITHRIAN:
- return GeneralZarithrianGUID;
- case DATA_SAVIANA_RAGEFIRE:
- return SavianaRagefireGUID;
- case DATA_HALION:
- return HalionGUID;
case DATA_CRYSTAL_CHANNEL_TARGET:
return CrystalChannelTargetGUID;
case DATA_XERESTRASZA:
return XerestraszaGUID;
+ case DATA_SAVIANA_RAGEFIRE:
+ return SavianaRagefireGUID;
+ case DATA_GENERAL_ZARITHRIAN:
+ return GeneralZarithrianGUID;
case DATA_ZARITHIAN_SPAWN_STALKER_1:
return ZarithianSpawnStalkerGUID[0];
case DATA_ZARITHIAN_SPAWN_STALKER_2:
return ZarithianSpawnStalkerGUID[1];
+ case DATA_HALION:
+ return HalionGUID;
+ case DATA_HALION_CONTROLLER:
+ return HalionControllerGUID;
+ case DATA_BURNING_TREE_1:
+ return BurningTreeGUID[0];
+ case DATA_BURNING_TREE_2:
+ return BurningTreeGUID[1];
+ case DATA_BURNING_TREE_3:
+ return BurningTreeGUID[2];
+ case DATA_BURNING_TREE_4:
+ return BurningTreeGUID[3];
+ case DATA_FLAME_RING:
+ return FlameRingGUID;
default:
break;
}
@@ -145,11 +187,9 @@ class instance_ruby_sanctum : public InstanceMapScript
{
if (state == DONE && GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE)
{
- if (GameObject* flameWalls = instance->GetGameObject(FlameWallsGUID))
- HandleGameObject(FlameWallsGUID, true, flameWalls);
-
+ HandleGameObject(FlameWallsGUID, true);
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
- zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
break;
}
@@ -157,17 +197,18 @@ class instance_ruby_sanctum : public InstanceMapScript
{
if (state == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
{
- if (GameObject* flameWalls = instance->GetGameObject(FlameWallsGUID))
- HandleGameObject(FlameWallsGUID, true, flameWalls);
-
+ HandleGameObject(FlameWallsGUID, true);
if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
- zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
break;
}
case DATA_GENERAL_ZARITHRIAN:
- if (GameObject* flameWalls = instance->GetGameObject(FlameWallsGUID))
- HandleGameObject(FlameWallsGUID, state != IN_PROGRESS, flameWalls);
+ if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
+ HandleGameObject(FlameWallsGUID, state != IN_PROGRESS);
+ if (state == DONE)
+ if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
+ halionController->AI()->DoAction(ACTION_INTRO_HALION);
break;
default:
break;
@@ -248,11 +289,14 @@ class instance_ruby_sanctum : public InstanceMapScript
uint64 GeneralZarithrianGUID;
uint64 SavianaRagefireGUID;
uint64 HalionGUID;
+ uint64 HalionControllerGUID;
uint64 CrystalChannelTargetGUID;
uint64 XerestraszaGUID;
uint64 FlameWallsGUID;
- uint32 BaltharusSharedHealth;
uint64 ZarithianSpawnStalkerGUID[2];
+ uint64 BurningTreeGUID[4];
+ uint64 FlameRingGUID;
+ uint32 BaltharusSharedHealth;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
index 9432a77e1d5..5819d543313 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -82,7 +82,7 @@ class npc_xerestrasza : public CreatureScript
_events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_6, 61000);
_events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_7, 69000);
}
- else if (action == ACTION_INTRO_TRIGGER && !_introDone)
+ else if (action == ACTION_INTRO_BALTHARUS && !_introDone)
{
_introDone = true;
Talk(SAY_XERESTRASZA_INTRO);
@@ -152,10 +152,10 @@ class at_baltharus_plateau : public AreaTriggerScript
if (InstanceScript* instance = player->GetInstanceScript())
{
if (Creature* xerestrasza = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_XERESTRASZA)))
- xerestrasza->AI()->DoAction(ACTION_INTRO_TRIGGER);
+ xerestrasza->AI()->DoAction(ACTION_INTRO_BALTHARUS);
if (Creature* baltharus = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_BALTHARUS_THE_WARBORN)))
- baltharus->AI()->DoAction(ACTION_INTRO_TRIGGER);
+ baltharus->AI()->DoAction(ACTION_INTRO_BALTHARUS);
}
return true;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
index 60c13002935..a7ecc8c78d5 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
@@ -25,6 +25,8 @@
#define RSScriptName "instance_ruby_sanctum"
uint32 const EncounterCount = 4;
+Position const HalionControllerSpawnPos = {3156.037f, 533.2656f, 72.97205f, 0.0f};
+
enum DataTypes
{
// Encounter States/Boss GUIDs
@@ -39,12 +41,18 @@ enum DataTypes
DATA_BALTHARUS_SHARED_HEALTH = 6,
DATA_ZARITHIAN_SPAWN_STALKER_1 = 7,
DATA_ZARITHIAN_SPAWN_STALKER_2 = 8,
+ DATA_HALION_CONTROLLER = 9,
+ DATA_BURNING_TREE_1 = 10,
+ DATA_BURNING_TREE_2 = 11,
+ DATA_BURNING_TREE_3 = 12,
+ DATA_BURNING_TREE_4 = 13,
};
enum SharedActions
{
- ACTION_INTRO_TRIGGER = -3975101,
+ ACTION_INTRO_BALTHARUS = -3975101,
ACTION_BALTHARUS_DEATH = -3975102,
+ ACTION_INTRO_HALION = -4014601,
};
enum CreaturesIds
@@ -72,6 +80,11 @@ enum CreaturesIds
NPC_ORB_ROTATION_FOCUS = 40091,
NPC_SHADOW_ORB_N = 40083,
NPC_SHADOW_ORB_S = 40100,
+ NPC_METEOR_STRIKE_NORTH = 40041,
+ NPC_METEOR_STRIKE_EAST = 40042,
+ NPC_METEOR_STRIKE_WEST = 40043,
+ NPC_METEOR_STRIKE_SOUTH = 40044,
+ NPC_METEOR_STRIKE_FLAME = 40055,
// Xerestrasza
NPC_XERESTRASZA = 40429,
@@ -85,13 +98,17 @@ enum GameObjectsIds
GO_FIRE_FIELD = 203005,
GO_FLAME_WALLS = 203006,
GO_FLAME_RING = 203007,
+ GO_BURNING_TREE_1 = 203034,
+ GO_BURNING_TREE_2 = 203035,
+ GO_BURNING_TREE_3 = 203036,
+ GO_BURNING_TREE_4 = 203037,
};
enum WorldStatesRS
{
- WORLDSTATE_UNK_1 = 5049, // Halion corporeality amount - normal phase
- WORLDSTATE_UNK_2 = 5050, // Halion corporeality amount - twilight phase
- WORLDSTATE_UNK_3 = 5051, // Halion corporeality toggle show
+ WORLDSTATE_CORPOREALITY_MATERIAL = 5049,
+ WORLDSTATE_CORPOREALITY_TWILIGHT = 5050,
+ WORLDSTATE_CORPOREALITY_TOGGLE = 5051,
};
template<class AI>