aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeader <keader.android@gmail.com>2017-02-04 10:13:22 -0300
committerShauren <shauren.trinity@gmail.com>2019-06-15 18:41:09 +0200
commita73713b348c4a60302feb7f1fa7af9f8df00c252 (patch)
tree0cf5d57a5c4231e3722ccf2ca182de53c7d3d6b6 /src
parent732f3ce377014cbcba38bd31c177685bd099cdb9 (diff)
Core/Scripts: Updated Ruby Sanctum instance model
(cherrypicked from ce774918a7959b7780d6af9e095b3b5fcdbccfe2)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp6
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp102
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp228
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h3
6 files changed, 119 insertions, 226 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 7e313fe4671..90664c18bda 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
@@ -83,7 +83,7 @@ class boss_baltharus_the_warborn : public CreatureScript
_Reset();
events.SetPhase(PHASE_INTRO);
instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetMaxHealth());
- if (Creature* channelTarget = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CRYSTAL_CHANNEL_TARGET)))
+ if (Creature* channelTarget = instance->GetCreature(DATA_CRYSTAL_CHANNEL_TARGET))
DoCast(channelTarget, SPELL_BARRIER_CHANNEL);
}
@@ -128,7 +128,7 @@ class boss_baltharus_the_warborn : public CreatureScript
{
_JustDied();
Talk(SAY_DEATH);
- if (Creature* xerestrasza = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_XERESTRASZA)))
+ if (Creature* xerestrasza = instance->GetCreature(DATA_XERESTRASZA))
xerestrasza->AI()->DoAction(ACTION_BALTHARUS_DEATH);
}
@@ -268,7 +268,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript
void JustDied(Unit* killer) override
{
// This is here because DamageTaken wont trigger if the damage is deadly.
- if (Creature* baltharus = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BALTHARUS_THE_WARBORN)))
+ if (Creature* baltharus = instance->GetCreature(DATA_BALTHARUS_THE_WARBORN))
killer->Kill(baltharus);
}
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 066c97fd6e0..29a935fc3a6 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -201,7 +201,7 @@ class npc_onyx_flamecaller : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/) override
{
// Let Zarithrian count as summoner.
- if (Creature* zarithrian = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_GENERAL_ZARITHRIAN)))
+ if (Creature* zarithrian = _instance->GetCreature(DATA_GENERAL_ZARITHRIAN))
zarithrian->AI()->JustSummoned(me);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index d9bb5f4f359..9ee81f17b30 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -235,7 +235,7 @@ class boss_halion : public CreatureScript
void EnterEvadeMode(EvadeReason why) override
{
if (why == EVADE_REASON_BOUNDARY || events.IsInPhase(PHASE_ONE))
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->EnterEvadeMode(why);
}
@@ -257,7 +257,7 @@ class boss_halion : public CreatureScript
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->SetData(DATA_FIGHT_PHASE, PHASE_ONE);
}
@@ -268,11 +268,11 @@ class boss_halion : public CreatureScript
Talk(SAY_DEATH);
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
- if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TWILIGHT_HALION)))
+ if (Creature* twilightHalion = instance->GetCreature(DATA_TWILIGHT_HALION))
if (twilightHalion->IsAlive())
twilightHalion->KillSelf();
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
if (controller->IsAlive())
controller->KillSelf();
}
@@ -288,9 +288,9 @@ class boss_halion : public CreatureScript
me->CastStop();
me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- DoCast(me, SPELL_TWILIGHT_PHASING);
+ DoCastSelf(SPELL_TWILIGHT_PHASING);
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->SetData(DATA_FIGHT_PHASE, PHASE_TWO);
return;
}
@@ -301,7 +301,7 @@ class boss_halion : public CreatureScript
if (!me->IsInPhase(attacker))
return;
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->SetData(DATA_MATERIAL_DAMAGE_TAKEN, damage);
}
}
@@ -335,14 +335,14 @@ class boss_halion : public CreatureScript
events.ScheduleEvent(EVENT_TAIL_LASH, randtime(Seconds(11), Seconds(16)));
break;
case EVENT_BREATH:
- DoCast(me, SPELL_FLAME_BREATH);
+ DoCastSelf(SPELL_FLAME_BREATH);
events.ScheduleEvent(EVENT_BREATH, randtime(Seconds(16), Seconds(25)));
break;
case EVENT_ACTIVATE_FIREWALL:
// Flame ring is activated 5 seconds after starting encounter, DOOR_TYPE_ROOM is only instant.
for (uint8 i = DATA_FLAME_RING; i <= DATA_TWILIGHT_FLAME_RING; ++i)
- if (GameObject* flameRing = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(i)))
- instance->HandleGameObject(instance->GetGuidData(DATA_FLAME_RING), false, flameRing);
+ if (GameObject* flameRing = instance->GetGameObject(i))
+ instance->HandleGameObject(ObjectGuid::Empty, false, flameRing);
break;
case EVENT_METEOR_STRIKE:
{
@@ -399,14 +399,14 @@ class boss_twilight_halion : public CreatureScript
{
boss_twilight_halionAI(Creature* creature) : BossAI(creature, DATA_TWILIGHT_HALION)
{
- Creature* halion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION));
+ Creature* halion = instance->GetCreature(DATA_HALION);
if (!halion)
return;
// Using AddAura because no spell cast packet in sniffs.
halion->AddAura(SPELL_COPY_DAMAGE, me); // We use explicit targeting here to avoid conditions + SPELL_ATTR6_CANT_TARGET_SELF.
me->AddAura(SPELL_COPY_DAMAGE, halion);
- DoCast(me, SPELL_DUSK_SHROUD, true);
+ DoCastSelf(SPELL_DUSK_SHROUD, true);
me->SetHealth(halion->GetHealth());
PhasingHandler::AddPhase(me, 174, false);
@@ -442,7 +442,7 @@ class boss_twilight_halion : public CreatureScript
void JustDied(Unit* killer) override
{
- if (Creature* halion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION)))
+ if (Creature* halion = instance->GetCreature(DATA_HALION))
{
// Ensure looting
if (me->IsDamageEnoughForLootingAndReward())
@@ -452,7 +452,7 @@ class boss_twilight_halion : public CreatureScript
killer->Kill(halion);
}
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
if (controller->IsAlive())
controller->KillSelf();
@@ -469,7 +469,7 @@ class boss_twilight_halion : public CreatureScript
{
events.SetPhase(PHASE_THREE);
me->CastStop();
- DoCast(me, SPELL_TWILIGHT_DIVISION);
+ DoCastSelf(SPELL_TWILIGHT_DIVISION);
Talk(SAY_PHASE_THREE);
return;
}
@@ -480,7 +480,7 @@ class boss_twilight_halion : public CreatureScript
if (!me->IsInPhase(attacker))
return;
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->SetData(DATA_TWILIGHT_DAMAGE_TAKEN, damage);
}
}
@@ -490,7 +490,7 @@ class boss_twilight_halion : public CreatureScript
switch (spell->Id)
{
case SPELL_TWILIGHT_DIVISION:
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->DoAction(ACTION_MONITOR_CORPOREALITY);
break;
case SPELL_TWILIGHT_MENDING:
@@ -524,7 +524,7 @@ class boss_twilight_halion : public CreatureScript
events.ScheduleEvent(EVENT_TAIL_LASH, randtime(Seconds(12), Seconds(16)));
break;
case EVENT_BREATH:
- DoCast(me, SPELL_DARK_BREATH);
+ DoCastSelf(SPELL_DARK_BREATH);
events.ScheduleEvent(EVENT_BREATH, randtime(Seconds(10), Seconds(14)));
break;
case EVENT_SOUL_CONSUMPTION:
@@ -582,7 +582,7 @@ class npc_halion_controller : public CreatureScript
_events.Reset();
Initialize();
- DoCast(me, SPELL_CLEAR_DEBUFFS);
+ DoCastSelf(SPELL_CLEAR_DEBUFFS);
}
void JustSummoned(Creature* who) override
@@ -595,7 +595,7 @@ class npc_halion_controller : public CreatureScript
_events.Reset();
_summons.DespawnAll();
- DoCast(me, SPELL_CLEAR_DEBUFFS);
+ DoCastSelf(SPELL_CLEAR_DEBUFFS);
}
void EnterCombat(Unit* /*who*/) override
@@ -609,13 +609,13 @@ class npc_halion_controller : public CreatureScript
void EnterEvadeMode(EvadeReason /*why*/) override
{
- if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_TWILIGHT_HALION)))
+ if (Creature* twilightHalion = _instance->GetCreature(DATA_TWILIGHT_HALION))
{
twilightHalion->DespawnOrUnsummon();
_instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, twilightHalion);
}
- if (Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION)))
+ if (Creature* halion = _instance->GetCreature(DATA_HALION))
{
halion->DespawnOrUnsummon();
_instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, halion);
@@ -650,15 +650,15 @@ class npc_halion_controller : public CreatureScript
return;
for (uint8 i = DATA_BURNING_TREE_1; i <= DATA_BURNING_TREE_4; ++i)
- if (GameObject* tree = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(i)))
- _instance->HandleGameObject(_instance->GetGuidData(i), true, tree);
+ if (GameObject* tree = _instance->GetGameObject(i))
+ _instance->HandleGameObject(ObjectGuid::Empty, true, tree);
me->GetMap()->SummonCreature(NPC_HALION, HalionRespawnPos);
break;
case ACTION_MONITOR_CORPOREALITY:
{
for (uint8 itr = DATA_HALION; itr <= DATA_TWILIGHT_HALION; itr++)
{
- Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(itr));
+ Creature* halion = _instance->GetCreature(itr);
if (!halion)
continue;
@@ -673,7 +673,7 @@ class npc_halion_controller : public CreatureScript
}
// Summon Twilight portals
- DoCast(me, SPELL_SUMMON_EXIT_PORTALS);
+ DoCastSelf(SPELL_SUMMON_EXIT_PORTALS);
_instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TOGGLE, 1);
// Hardcoding doesn't really matter here.
@@ -709,40 +709,40 @@ class npc_halion_controller : public CreatureScript
switch (eventId)
{
case EVENT_START_INTRO:
- DoCast(me, SPELL_COSMETIC_FIRE_PILLAR, true);
+ DoCastSelf(SPELL_COSMETIC_FIRE_PILLAR, true);
_events.ScheduleEvent(EVENT_INTRO_PROGRESS_1, Seconds(4));
break;
case EVENT_INTRO_PROGRESS_1:
for (uint8 i = DATA_BURNING_TREE_3; i <= DATA_BURNING_TREE_4; ++i)
- if (GameObject* tree = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(i)))
- _instance->HandleGameObject(_instance->GetGuidData(i), true, tree);
+ if (GameObject* tree = _instance->GetGameObject(i))
+ _instance->HandleGameObject(ObjectGuid::Empty, true, tree);
_events.ScheduleEvent(EVENT_INTRO_PROGRESS_2, Seconds(4));
break;
case EVENT_INTRO_PROGRESS_2:
for (uint8 i = DATA_BURNING_TREE_1; i <= DATA_BURNING_TREE_2; ++i)
- if (GameObject* tree = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(i)))
- _instance->HandleGameObject(_instance->GetGuidData(i), true, tree);
+ if (GameObject* tree = _instance->GetGameObject(i))
+ _instance->HandleGameObject(ObjectGuid::Empty, true, tree);
_events.ScheduleEvent(EVENT_INTRO_PROGRESS_3, Seconds(4));
break;
case EVENT_INTRO_PROGRESS_3:
- DoCast(me, SPELL_FIERY_EXPLOSION);
+ DoCastSelf(SPELL_FIERY_EXPLOSION);
if (!_instance->GetGuidData(DATA_HALION).IsEmpty())
return;
if (Creature* halion = me->GetMap()->SummonCreature(NPC_HALION, HalionSpawnPos))
halion->AI()->Talk(SAY_INTRO);
break;
case EVENT_TWILIGHT_MENDING:
- if (ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION))) // Just check if physical Halion is spawned
- if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_TWILIGHT_HALION)))
+ if (_instance->GetCreature(DATA_HALION)) // Just check if physical Halion is spawned
+ if (Creature* twilightHalion = _instance->GetCreature(DATA_TWILIGHT_HALION))
twilightHalion->CastSpell((Unit*)nullptr, SPELL_TWILIGHT_MENDING, true);
break;
case EVENT_TRIGGER_BERSERK:
for (uint8 i = DATA_HALION; i <= DATA_TWILIGHT_HALION; i++)
- if (Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(i)))
+ if (Creature* halion = _instance->GetCreature(i))
halion->CastSpell(halion, SPELL_BERSERK, true);
break;
case EVENT_SHADOW_PULSARS_SHOOT:
- if (Creature* orbCarrier = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ORB_CARRIER)))
+ if (Creature* orbCarrier = _instance->GetCreature(DATA_ORB_CARRIER))
orbCarrier->AI()->DoAction(ACTION_WARNING_SHOOT);
_events.ScheduleEvent(EVENT_SHADOW_PULSARS_SHOOT, Seconds(30));
break;
@@ -870,7 +870,7 @@ class npc_halion_controller : public CreatureScript
for (uint8 itr = DATA_HALION; itr <= DATA_TWILIGHT_HALION; itr++)
{
- if (Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(itr)))
+ if (Creature* halion = _instance->GetCreature(itr))
{
halion->CastSpell(halion, GetSpell(_materialCorporealityValue, itr == DATA_TWILIGHT_HALION), true);
@@ -930,7 +930,7 @@ class npc_orb_carrier : public CreatureScript
/// we are having two creatures involded here. This attribute is handled clientside, meaning the client
/// sends orientation update itself. Here, no packet is sent, and the creature does not rotate. By
/// forcing the carrier to always be facing the rotation focus, we ensure everything works as it should.
- if (Creature* rotationFocus = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ORB_ROTATION_FOCUS)))
+ if (Creature* rotationFocus = _instance->GetCreature(DATA_ORB_ROTATION_FOCUS))
me->SetFacingToObject(rotationFocus); // setInFront
}
@@ -959,7 +959,7 @@ class npc_orb_carrier : public CreatureScript
if (southOrb && northOrb)
TriggerCutter(northOrb, southOrb);
- if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_TWILIGHT_HALION)))
+ if (Creature* twilightHalion = _instance->GetCreature(DATA_TWILIGHT_HALION))
twilightHalion->AI()->Talk(SAY_SPHERE_PULSE);
if (!IsHeroic())
@@ -1011,8 +1011,8 @@ class npc_meteor_strike_initial : public CreatureScript
switch (action)
{
case ACTION_METEOR_STRIKE_AOE:
- DoCast(me, SPELL_METEOR_STRIKE_AOE_DAMAGE, true);
- DoCast(me, SPELL_METEOR_STRIKE_FIRE_AURA_1, true);
+ DoCastSelf(SPELL_METEOR_STRIKE_AOE_DAMAGE, true);
+ DoCastSelf(SPELL_METEOR_STRIKE_FIRE_AURA_1, true);
for (std::list<Creature*>::iterator itr = _meteorList.begin(); itr != _meteorList.end(); ++itr)
(*itr)->AI()->DoAction(ACTION_METEOR_STRIKE_BURN);
break;
@@ -1026,11 +1026,11 @@ class npc_meteor_strike_initial : public CreatureScript
return;
// Let Controller count as summoner
- if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->JustSummoned(me);
- DoCast(me, SPELL_METEOR_STRIKE_COUNTDOWN);
- DoCast(me, SPELL_BIRTH_NO_VISUAL);
+ DoCastSelf(SPELL_METEOR_STRIKE_COUNTDOWN);
+ DoCastSelf(SPELL_BIRTH_NO_VISUAL);
if (HalionAI* halionAI = CAST_AI(HalionAI, owner->AI()))
{
@@ -1084,7 +1084,7 @@ class npc_meteor_strike : public CreatureScript
{
if (action == ACTION_METEOR_STRIKE_BURN)
{
- DoCast(me, SPELL_METEOR_STRIKE_FIRE_AURA_2, true);
+ DoCastSelf(SPELL_METEOR_STRIKE_FIRE_AURA_2, true);
me->setActive(true);
_events.ScheduleEvent(EVENT_SPAWN_METEOR_FLAME, Milliseconds(500));
}
@@ -1093,7 +1093,7 @@ class npc_meteor_strike : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/) override
{
// Let Halion Controller count as summoner.
- if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->JustSummoned(me);
}
@@ -1156,7 +1156,7 @@ class npc_meteor_strike_flame : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/) override
{
// Let Halion Controller count as summoner.
- if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->JustSummoned(me);
}
@@ -1233,7 +1233,7 @@ class npc_combustion_consumption : public CreatureScript
void IsSummonedBy(Unit* summoner) override
{
// Let Halion Controller count as summoner
- if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->JustSummoned(me);
_summonerGuid = summoner->GetGUID();
@@ -1247,7 +1247,7 @@ class npc_combustion_consumption : public CreatureScript
return;
me->CastCustomSpell(SPELL_SCALE_AURA, SPELLVALUE_AURA_STACK, stackAmount + 1, me);
- DoCast(me, _damageSpell);
+ DoCastSelf(_damageSpell);
int32 damage = 1200 + (stackAmount * 1290); // Needs more research.
summoner->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, summoner);
@@ -1289,7 +1289,7 @@ class npc_living_inferno : public CreatureScript
me->CastSpell(me, SPELL_SPAWN_LIVING_EMBERS, true);
});
if (InstanceScript* instance = me->GetInstanceScript())
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
{
controller->AI()->DoAction(ACTION_ACTIVATE_EMBERS);
controller->AI()->JustSummoned(me);
@@ -1329,7 +1329,7 @@ class npc_living_ember : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/) override
{
if (InstanceScript* instance = me->GetInstanceScript())
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
controller->AI()->JustSummoned(me);
}
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 ea7dfe87068..9813d75f947 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -30,15 +30,49 @@ Position const HalionControllerSpawnPos = { 3156.037f, 533.2656f, 72.97205f, 0.0
BossBoundaryData const boundaries =
{
{ DATA_GENERAL_ZARITHRIAN, new EllipseBoundary(Position(3013.409f, 529.492f), 45.0, 100.0) },
- { DATA_HALION, new CircleBoundary(Position(3156.037f, 533.2656f), 48.5) }
+ { DATA_HALION, new CircleBoundary(Position(3156.037f, 533.2656f), 48.5) }
};
DoorData const doorData[] =
{
- {GO_FIRE_FIELD, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE },
- {0, 0, DOOR_TYPE_ROOM },
+ { GO_FIRE_FIELD, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE },
+ { GO_FLAME_WALLS, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE },
+ { GO_FLAME_WALLS, DATA_SAVIANA_RAGEFIRE, DOOR_TYPE_PASSAGE },
+ { GO_FLAME_WALLS, DATA_GENERAL_ZARITHRIAN, DOOR_TYPE_ROOM },
+ { GO_FLAME_RING, DATA_HALION, DOOR_TYPE_ROOM },
+ { GO_TWILIGHT_FLAME_RING, DATA_HALION, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM } // END
};
+ObjectData const creatureData[] =
+{
+ { NPC_BALTHARUS_THE_WARBORN, DATA_BALTHARUS_THE_WARBORN },
+ { NPC_BALTHARUS_THE_WARBORN_CLONE, DATA_BALTHARUS_CLONE },
+ { NPC_BALTHARUS_TARGET, DATA_CRYSTAL_CHANNEL_TARGET },
+ { NPC_GENERAL_ZARITHRIAN, DATA_GENERAL_ZARITHRIAN },
+ { NPC_SAVIANA_RAGEFIRE, DATA_SAVIANA_RAGEFIRE },
+ { NPC_HALION, DATA_HALION },
+ { NPC_TWILIGHT_HALION, DATA_TWILIGHT_HALION },
+ { NPC_HALION_CONTROLLER, DATA_HALION_CONTROLLER },
+ { NPC_ORB_CARRIER, DATA_ORB_CARRIER },
+ { NPC_ORB_ROTATION_FOCUS, DATA_ORB_ROTATION_FOCUS },
+ { NPC_XERESTRASZA, DATA_XERESTRASZA },
+ { 0, 0 } // END
+};
+
+ObjectData const gameObjectData[] =
+{
+ { GO_FLAME_WALLS, DATA_FLAME_WALLS },
+ { GO_BURNING_TREE_1, DATA_BURNING_TREE_1 },
+ { GO_BURNING_TREE_2, DATA_BURNING_TREE_2 },
+ { GO_BURNING_TREE_3, DATA_BURNING_TREE_3 },
+ { GO_BURNING_TREE_4, DATA_BURNING_TREE_4 },
+ { GO_FLAME_RING, DATA_FLAME_RING },
+ { GO_TWILIGHT_FLAME_RING, DATA_TWILIGHT_FLAME_RING },
+ { 0, 0 } //END
+};
+
+
class instance_ruby_sanctum : public InstanceMapScript
{
public:
@@ -52,7 +86,8 @@ class instance_ruby_sanctum : public InstanceMapScript
SetBossNumber(EncounterCount);
LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
- BaltharusSharedHealth = 0;
+ LoadObjectData(creatureData, gameObjectData);
+ BaltharusSharedHealth = 0;
}
void OnPlayerEnter(Player* /*player*/) override
@@ -67,151 +102,45 @@ class instance_ruby_sanctum : public InstanceMapScript
void OnCreatureCreate(Creature* creature) override
{
- switch (creature->GetEntry())
+ InstanceScript::OnCreatureCreate(creature);
+
+ if (creature->GetEntry() == NPC_ZARITHRIAN_SPAWN_STALKER)
{
- case NPC_BALTHARUS_THE_WARBORN:
- BaltharusTheWarbornGUID = creature->GetGUID();
- break;
- case NPC_GENERAL_ZARITHRIAN:
- GeneralZarithrianGUID = creature->GetGUID();
- break;
- case NPC_SAVIANA_RAGEFIRE:
- SavianaRagefireGUID = creature->GetGUID();
- break;
- case NPC_HALION:
- HalionGUID = creature->GetGUID();
- break;
- case NPC_TWILIGHT_HALION:
- TwilightHalionGUID = creature->GetGUID();
- break;
- case NPC_HALION_CONTROLLER:
- HalionControllerGUID = creature->GetGUID();
- break;
- case NPC_ORB_CARRIER:
- OrbCarrierGUID = creature->GetGUID();
- break;
- case NPC_ORB_ROTATION_FOCUS:
- OrbRotationFocusGUID = creature->GetGUID();
- break;
- case NPC_BALTHARUS_TARGET:
- CrystalChannelTargetGUID = creature->GetGUID();
- break;
- case NPC_XERESTRASZA:
- XerestraszaGUID = creature->GetGUID();
- break;
- case NPC_ZARITHRIAN_SPAWN_STALKER:
- if (!ZarithrianSpawnStalkerGUID[0])
- ZarithrianSpawnStalkerGUID[0] = creature->GetGUID();
- else
- ZarithrianSpawnStalkerGUID[1] = creature->GetGUID();
- break;
- default:
- break;
+ if (!ZarithrianSpawnStalkerGUID[0])
+ ZarithrianSpawnStalkerGUID[0] = creature->GetGUID();
+ else
+ ZarithrianSpawnStalkerGUID[1] = creature->GetGUID();
}
}
void OnGameObjectCreate(GameObject* go) override
{
+ InstanceScript::OnGameObjectCreate(go);
+
switch (go->GetEntry())
{
- case GO_FIRE_FIELD:
- AddDoor(go, true);
- 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_TWILIGHT_FLAME_RING:
- TwilightFlameRingGUID = 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;
- }
- }
-
- void OnGameObjectRemove(GameObject* go) override
- {
- switch (go->GetEntry())
- {
- case GO_FIRE_FIELD:
- AddDoor(go, false);
+ HandleGameObject(ObjectGuid::Empty, true, go);
break;
default:
break;
}
}
- void OnCreatureRemove(Creature* creature) override
- {
- if (creature->GetEntry() == NPC_HALION)
- HalionGUID = ObjectGuid::Empty;
- }
-
ObjectGuid GetGuidData(uint32 type) const override
{
switch (type)
{
- case DATA_BALTHARUS_THE_WARBORN:
- return BaltharusTheWarbornGUID;
- 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_ZARITHRIAN_SPAWN_STALKER_1:
case DATA_ZARITHRIAN_SPAWN_STALKER_2:
return ZarithrianSpawnStalkerGUID[type - DATA_ZARITHRIAN_SPAWN_STALKER_1];
- case DATA_HALION:
- return HalionGUID;
- case DATA_TWILIGHT_HALION:
- return TwilightHalionGUID;
- case DATA_ORB_CARRIER:
- return OrbCarrierGUID;
- case DATA_ORB_ROTATION_FOCUS:
- return OrbRotationFocusGUID;
- case DATA_HALION_CONTROLLER:
- return HalionControllerGUID;
- case DATA_BURNING_TREE_1:
- case DATA_BURNING_TREE_2:
- case DATA_BURNING_TREE_3:
- case DATA_BURNING_TREE_4:
- return BurningTreeGUID[type - DATA_BURNING_TREE_1];
- case DATA_FLAME_RING:
- return FlameRingGUID;
- case DATA_TWILIGHT_FLAME_RING:
- return TwilightFlameRingGUID;
default:
- break;
+ return InstanceScript::GetGuidData(type);
}
-
- return ObjectGuid::Empty;
}
bool SetBossState(uint32 type, EncounterState state) override
@@ -222,49 +151,20 @@ class instance_ruby_sanctum : public InstanceMapScript
switch (type)
{
case DATA_BALTHARUS_THE_WARBORN:
- {
- if (state == DONE && GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE)
- {
- HandleGameObject(FlameWallsGUID, true);
- if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
- zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
- }
- break;
- }
case DATA_SAVIANA_RAGEFIRE:
- {
- if (state == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
- {
- HandleGameObject(FlameWallsGUID, true);
- if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
- zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
- }
+ if (state == DONE)
+ CheckGeneral();
break;
- }
case DATA_GENERAL_ZARITHRIAN:
- {
- if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
- HandleGameObject(FlameWallsGUID, state != IN_PROGRESS);
-
if (state == DONE && GetBossState(DATA_HALION) != DONE)
- if (Creature* halionController = instance->GetCreature(GetGuidData(DATA_HALION_CONTROLLER)))
+ if (Creature* halionController = GetCreature(DATA_HALION_CONTROLLER))
halionController->AI()->DoAction(ACTION_INTRO_HALION);
break;
- }
case DATA_HALION:
- {
DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TOGGLE, 0);
DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TWILIGHT, 0);
DoUpdateWorldState(WORLDSTATE_CORPOREALITY_MATERIAL, 0);
-
- // Reopen rings on wipe or success
- if (state == DONE || state == FAIL)
- {
- HandleGameObject(FlameRingGUID, true);
- HandleGameObject(TwilightFlameRingGUID, true);
- }
break;
- }
default:
break;
}
@@ -272,6 +172,13 @@ class instance_ruby_sanctum : public InstanceMapScript
return true;
}
+ void CheckGeneral()
+ {
+ if (GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE)
+ if (Creature* zarithrian = GetCreature(DATA_GENERAL_ZARITHRIAN))
+ zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
+ }
+
void SetData(uint32 type, uint32 data) override
{
if (type != DATA_BALTHARUS_SHARED_HEALTH)
@@ -296,22 +203,7 @@ class instance_ruby_sanctum : public InstanceMapScript
}
protected:
- ObjectGuid BaltharusTheWarbornGUID;
- ObjectGuid GeneralZarithrianGUID;
- ObjectGuid SavianaRagefireGUID;
- ObjectGuid HalionGUID;
- ObjectGuid TwilightHalionGUID;
- ObjectGuid HalionControllerGUID;
- ObjectGuid OrbCarrierGUID;
- ObjectGuid OrbRotationFocusGUID;
- ObjectGuid CrystalChannelTargetGUID;
- ObjectGuid XerestraszaGUID;
- ObjectGuid FlameWallsGUID;
ObjectGuid ZarithrianSpawnStalkerGUID[2];
- ObjectGuid BurningTreeGUID[4];
- ObjectGuid FlameRingGUID;
- ObjectGuid TwilightFlameRingGUID;
-
uint32 BaltharusSharedHealth;
};
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
index 532845155bf..6750742359c 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -163,10 +163,10 @@ class at_baltharus_plateau : public AreaTriggerScript
// Only trigger once
if (InstanceScript* instance = player->GetInstanceScript())
{
- if (Creature* xerestrasza = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_XERESTRASZA)))
+ if (Creature* xerestrasza = instance->GetCreature(DATA_XERESTRASZA))
xerestrasza->AI()->DoAction(ACTION_INTRO_BALTHARUS);
- if (Creature* baltharus = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_BALTHARUS_THE_WARBORN)))
+ if (Creature* baltharus = instance->GetCreature(DATA_BALTHARUS_THE_WARBORN))
baltharus->AI()->DoAction(ACTION_INTRO_BALTHARUS);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
index 7ac05c23336..54c06b2a1cf 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h
@@ -49,7 +49,8 @@ enum RSDataTypes
DATA_BURNING_TREE_4 = 16,
DATA_FLAME_RING = 17,
DATA_TWILIGHT_FLAME_RING = 18,
- DATA_BALTHARUS_CLONE = 19
+ DATA_BALTHARUS_CLONE = 19,
+ DATA_FLAME_WALLS = 20
};
enum RSSharedActions