aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeader <keader.android@gmail.com>2017-02-04 10:13:22 -0300
committerKeader <keader.android@gmail.com>2017-02-04 10:13:22 -0300
commitce774918a7959b7780d6af9e095b3b5fcdbccfe2 (patch)
tree1518802b1f5d61ac8328a6ae390794959a1c04d5
parentc58dd6c16683a4c84bbc2ec85b7833f946f3e6e3 (diff)
Core/Scripts: Updated Ruby Sanctum instance model
-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 e99fa62f1f5..5f48488eaf2 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
@@ -81,7 +81,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);
}
@@ -126,7 +126,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);
}
@@ -266,7 +266,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 04619af0d20..6a3a185061b 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -200,7 +200,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 15b0a6f098c..439a1b39251 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -229,7 +229,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);
}
@@ -251,7 +251,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);
}
@@ -262,11 +262,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();
}
@@ -282,9 +282,9 @@ class boss_halion : public CreatureScript
me->CastStop();
me->SetFlag(UNIT_FIELD_FLAGS, 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;
}
@@ -295,7 +295,7 @@ class boss_halion : public CreatureScript
if (!me->InSamePhase(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);
}
}
@@ -329,14 +329,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:
{
@@ -393,14 +393,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());
me->SetPhaseMask(0x20, true);
@@ -436,7 +436,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())
@@ -446,7 +446,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();
@@ -463,7 +463,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;
}
@@ -474,7 +474,7 @@ class boss_twilight_halion : public CreatureScript
if (!me->InSamePhase(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);
}
}
@@ -484,7 +484,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:
@@ -518,7 +518,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:
@@ -576,7 +576,7 @@ class npc_halion_controller : public CreatureScript
_events.Reset();
Initialize();
- DoCast(me, SPELL_CLEAR_DEBUFFS);
+ DoCastSelf(SPELL_CLEAR_DEBUFFS);
}
void JustSummoned(Creature* who) override
@@ -589,7 +589,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
@@ -603,13 +603,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);
@@ -644,15 +644,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;
@@ -667,7 +667,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.
@@ -703,40 +703,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))
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;
@@ -864,7 +864,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);
@@ -924,7 +924,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
}
@@ -953,7 +953,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())
@@ -1005,8 +1005,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;
@@ -1020,11 +1020,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()))
{
@@ -1078,7 +1078,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));
}
@@ -1087,7 +1087,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);
}
@@ -1150,7 +1150,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);
}
@@ -1223,7 +1223,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();
@@ -1237,7 +1237,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);
@@ -1280,7 +1280,7 @@ class npc_living_inferno : public CreatureScript
});
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);
@@ -1320,7 +1320,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 ad94c5587ee..c9d68808c12 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp
@@ -26,15 +26,49 @@
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:
@@ -48,7 +82,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
@@ -63,151 +98,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
@@ -218,49 +147,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->RemoveFlag(UNIT_FIELD_FLAGS, 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->RemoveFlag(UNIT_FIELD_FLAGS, 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;
}
@@ -268,6 +168,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->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
+ }
+
void SetData(uint32 type, uint32 data) override
{
if (type != DATA_BALTHARUS_SHARED_HEALTH)
@@ -292,22 +199,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 50154f43847..d298c35dd0a 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp
@@ -160,10 +160,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 22023ebe27d..c04f7d2ba3c 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 DataTypes
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 SharedActions