diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp | 84 |
1 files changed, 30 insertions, 54 deletions
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 2091b82e20c..762277ec4fa 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -70,15 +70,13 @@ enum Events EVENT_TRIGGER, EVENT_PHASE, - EVENT_MORTAL_WOUND, + EVENT_MORTAL_WOUND }; enum Spells { SPELL_FROST_BOLT = 28478, - H_SPELL_FROST_BOLT = 55802, SPELL_FROST_BOLT_AOE = 28479, - H_SPELL_FROST_BOLT_AOE = 55807, SPELL_SHADOW_FISURE = 27810, SPELL_VOID_BLAST = 27812, SPELL_MANA_DETONATION = 27819, @@ -122,7 +120,7 @@ enum Spells // Abomination spells SPELL_FRENZY = 28468, - SPELL_MORTAL_WOUND = 28467, + SPELL_MORTAL_WOUND = 28467 }; enum Creatures @@ -133,7 +131,7 @@ enum Creatures NPC_ICECROWN = 16441 // Guardians of Icecrown }; -const Position Pos[12] = +Position const Pos[12] = { {3783.272705f, -5062.697266f, 143.711203f, 3.617599f}, //LEFT_FAR {3730.291260f, -5027.239258f, 143.956909f, 4.461900f}, //LEFT_MIDDLE @@ -146,13 +144,13 @@ const Position Pos[12] = {3732.02f, -5028.53f, 143.92f, 4.49f}, //WINDOW_PORTAL02 {3687.571777f, -5126.831055f, 142.017807f, 0.604023f}, //RIGHT_FAR {3707.990733f, -5151.450195f, 142.032562f, 1.376855f}, //RIGHT_MIDDLE - {3782.76f, -5062.97f, 143.79f, 3.82f}, //WINDOW_PORTAL03 + {3782.76f, -5062.97f, 143.79f, 3.82f} //WINDOW_PORTAL03 }; //creatures in corners //Unstoppable Abominations #define MAX_ABOMINATIONS 21 -const Position PosAbominations[MAX_ABOMINATIONS] = +Position const PosAbominations[MAX_ABOMINATIONS] = { {3755.52f, -5155.22f, 143.480f, 2.0f}, {3744.35f, -5164.03f, 143.590f, 2.00f}, @@ -174,12 +172,12 @@ const Position PosAbominations[MAX_ABOMINATIONS] = {3669.74f, -5149.63f, 143.678f, 0.528643f}, {3695.53f, -5169.53f, 143.671f, 2.11908f}, {3701.98f, -5166.51f, 143.395f, 1.24257f}, - {3709.62f, -5169.15f, 143.576f, 5.97695f}, + {3709.62f, -5169.15f, 143.576f, 5.97695f} }; //Soldiers of the Frozen Wastes #define MAX_WASTES 49 -const Position PosWastes[MAX_WASTES] = +Position const PosWastes[MAX_WASTES] = { {3754.41f, -5147.24f, 143.204f, 2.0f}, {3754.68f, -5156.17f, 143.418f, 2.0f}, @@ -229,12 +227,12 @@ const Position PosWastes[MAX_WASTES] = {3708.53f, -5172.19f, 143.573f, 3.26575f}, {3712.49f, -5167.62f, 143.657f, 5.63295f}, {3704.89f, -5161.84f, 143.239f, 5.63295f}, - {3695.66f, -5164.63f, 143.674f, 1.54416f}, + {3695.66f, -5164.63f, 143.674f, 1.54416f} }; //Soul Weavers #define MAX_WEAVERS 7 -const Position PosWeavers[MAX_WEAVERS] = +Position const PosWeavers[MAX_WEAVERS] = { {3752.45f, -5168.35f, 143.562f, 1.6094f}, {3772.2f, -5070.04f, 143.329f, 1.93686f}, @@ -242,7 +240,7 @@ const Position PosWeavers[MAX_WEAVERS] = {3689.05f, -5055.7f, 143.172f, 6.09554f}, {3649.45f, -5093.17f, 143.299f, 2.51805f}, {3659.7f, -5144.49f, 143.363f, 4.08806f}, - {3704.71f, -5175.96f, 143.597f, 3.36549f}, + {3704.71f, -5175.96f, 143.597f, 3.36549f} }; // predicate function to select not charmed target @@ -278,9 +276,6 @@ public: std::map<uint64, float> chained; - uint64 PortalsGUID[4]; - uint64 KTTriggerGUID; - SummonList spawns; // adds spawn by the trigger. kept in separated list (i.e. not in summons) void ResetPlayerScale() @@ -299,36 +294,29 @@ public: { _Reset(); - PortalsGUID[0] = PortalsGUID[1] = PortalsGUID[2] = PortalsGUID[3] = 0; - KTTriggerGUID = 0; - me->setFaction(35); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE); ResetPlayerScale(); spawns.DespawnAll(); - FindGameObjects(); - instance->SetData(DATA_ABOMINATION_KILLED, 0); - if (GameObject* pKTTrigger = me->GetMap()->GetGameObject(KTTriggerGUID)) + if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) { - pKTTrigger->ResetDoorOrButton(); - pKTTrigger->SetPhaseMask(1, true); + trigger->ResetDoorOrButton(); + trigger->SetPhaseMask(1, true); } for (uint8 i = 0; i <= 3; ++i) { - if (GameObject* pPortal = me->GetMap()->GetGameObject(PortalsGUID[i])) - { - if (!((pPortal->getLootState() == GO_READY) || (pPortal->getLootState() == GO_NOT_READY))) - pPortal->ResetDoorOrButton(); - } + if (GameObject* portal = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_PORTAL01 + i))) + if (!((portal->getLootState() == GO_READY) || (portal->getLootState() == GO_NOT_READY))) + portal->ResetDoorOrButton(); } nGuardiansOfIcecrownCount = 0; - uiGuardiansOfIcecrownTimer = 5000; //5 seconds for summoning each Guardian of Icecrown in phase 3 + uiGuardiansOfIcecrownTimer = 5000; // 5 seconds for summoning each Guardian of Icecrown in phase 3 Phase = 0; nAbomination = 0; @@ -353,11 +341,10 @@ public: me->setFaction(uiFaction); _EnterCombat(); - FindGameObjects(); for (uint8 i = 0; i <= 3; ++i) { - if (GameObject* pPortal = me->GetMap()->GetGameObject(PortalsGUID[i])) - pPortal->ResetDoorOrButton(); + if (GameObject* portal = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_PORTAL01 + i))) + portal->ResetDoorOrButton(); } DoCast(me, SPELL_KELTHUZAD_CHANNEL, false); Talk(SAY_SUMMON_MINIONS); @@ -372,15 +359,6 @@ public: events.ScheduleEvent(EVENT_PHASE, 228000); } - void FindGameObjects() - { - PortalsGUID[0] = instance->GetData64(DATA_KELTHUZAD_PORTAL01); - PortalsGUID[1] = instance->GetData64(DATA_KELTHUZAD_PORTAL02); - PortalsGUID[2] = instance->GetData64(DATA_KELTHUZAD_PORTAL03); - PortalsGUID[3] = instance->GetData64(DATA_KELTHUZAD_PORTAL04); - KTTriggerGUID = instance->GetData64(DATA_KELTHUZAD_TRIGGER); - } - void UpdateAI(uint32 diff) OVERRIDE { if (!UpdateVictim()) @@ -419,8 +397,8 @@ public: events.PopEvent(); break; case EVENT_TRIGGER: - if (GameObject* pKTTrigger = me->GetMap()->GetGameObject(KTTriggerGUID)) - pKTTrigger->SetPhaseMask(2, true); + if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) + trigger->SetPhaseMask(2, true); events.PopEvent(); break; case EVENT_PHASE: @@ -461,11 +439,9 @@ public: for (uint8 i = 0; i <= 3; ++i) { - if (GameObject* pPortal = me->GetMap()->GetGameObject(PortalsGUID[i])) - { - if (pPortal->getLootState() == GO_READY) - pPortal->UseDoorOrButton(); - } + if (GameObject* portal = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_PORTAL01 + i))) + if (portal->getLootState() == GO_READY) + portal->UseDoorOrButton(); } } } @@ -474,8 +450,8 @@ public: if (uiGuardiansOfIcecrownTimer <= diff) { /// @todo Add missing text - if (Creature* pGuardian = DoSummon(NPC_ICECROWN, Pos[RAND(2, 5, 8, 11)])) - pGuardian->SetFloatValue(UNIT_FIELD_COMBATREACH, 2); + if (Creature* guardian = DoSummon(NPC_ICECROWN, Pos[RAND(2, 5, 8, 11)])) + guardian->SetFloatValue(UNIT_FIELD_COMBATREACH, 2); ++nGuardiansOfIcecrownCount; uiGuardiansOfIcecrownTimer = 5000; } @@ -490,11 +466,11 @@ public: switch (eventId) { case EVENT_BOLT: - DoCastVictim(RAID_MODE(SPELL_FROST_BOLT, H_SPELL_FROST_BOLT)); + DoCastVictim(SPELL_FROST_BOLT); events.RepeatEvent(urand(5000, 10000)); break; case EVENT_NOVA: - DoCastAOE(RAID_MODE(SPELL_FROST_BOLT_AOE, H_SPELL_FROST_BOLT_AOE)); + DoCastAOE(SPELL_FROST_BOLT_AOE); events.RepeatEvent(urand(15000, 30000)); break; case EVENT_CHAIN: @@ -666,7 +642,7 @@ public: if (!instance || instance->IsEncounterInProgress() || instance->GetBossState(BOSS_KELTHUZAD) == DONE) return false; - Creature* pKelthuzad = Unit::GetCreature(*player, instance->GetData64(DATA_KELTHUZAD)); + Creature* pKelthuzad = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_KELTHUZAD)); if (!pKelthuzad) return false; @@ -675,7 +651,7 @@ public: return false; pKelthuzadAI->AttackStart(player); - if (GameObject* trigger = instance->instance->GetGameObject(instance->GetData64(DATA_KELTHUZAD_TRIGGER))) + if (GameObject* trigger = ObjectAccessor::GetGameObject(*player, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) { if (trigger->getLootState() == GO_READY) trigger->UseDoorOrButton(); |