diff options
author | Keader <keader.android@gmail.com> | 2017-02-04 10:13:22 -0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-06-15 18:41:09 +0200 |
commit | a73713b348c4a60302feb7f1fa7af9f8df00c252 (patch) | |
tree | 0cf5d57a5c4231e3722ccf2ca182de53c7d3d6b6 /src | |
parent | 732f3ce377014cbcba38bd31c177685bd099cdb9 (diff) |
Core/Scripts: Updated Ruby Sanctum instance model
(cherrypicked from ce774918a7959b7780d6af9e095b3b5fcdbccfe2)
Diffstat (limited to 'src')
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 |