diff options
6 files changed, 51 insertions, 60 deletions
diff --git a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp index 3522ae3cbc6..89d6d73a808 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp @@ -64,12 +64,11 @@ public: return GetInstanceAI<boss_gurtogg_bloodboilAI>(creature); } - struct boss_gurtogg_bloodboilAI : public ScriptedAI + struct boss_gurtogg_bloodboilAI : public BossAI { - boss_gurtogg_bloodboilAI(Creature* creature) : ScriptedAI(creature) + boss_gurtogg_bloodboilAI(Creature* creature) : BossAI(creature, DATA_GURTOGG_BLOODBOIL) { Initialize(); - instance = creature->GetInstanceScript(); } void Initialize() @@ -91,8 +90,6 @@ public: Phase1 = true; } - InstanceScript* instance; - ObjectGuid TargetGUID; float TargetThreat; @@ -112,8 +109,7 @@ public: void Reset() override { - instance->SetBossState(DATA_GURTOGG_BLOODBOIL, NOT_STARTED); - + _Reset(); Initialize(); me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false); @@ -122,9 +118,8 @@ public: void EnterCombat(Unit* /*who*/) override { - DoZoneInCombat(); Talk(SAY_AGGRO); - instance->SetBossState(DATA_GURTOGG_BLOODBOIL, IN_PROGRESS); + _EnterCombat(); } void KilledUnit(Unit* /*victim*/) override @@ -134,9 +129,8 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetBossState(DATA_GURTOGG_BLOODBOIL, DONE); - Talk(SAY_DEATH); + _JustDied(); } void RevertThreatOnTarget(ObjectGuid guid) diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 83bb19612a2..2d560ad694e 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -473,12 +473,11 @@ class boss_illidan_stormrage : public CreatureScript public: boss_illidan_stormrage() : CreatureScript("boss_illidan_stormrage") { } - struct boss_illidan_stormrageAI : public ScriptedAI + struct boss_illidan_stormrageAI : public BossAI { - boss_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature), Summons(me) + boss_illidan_stormrageAI(Creature* creature) : BossAI(creature, DATA_ILLIDAN_STORMRAGE) { Initialize(); - instance = creature->GetInstanceScript(); DoCast(me, SPELL_DUAL_WIELD, true); } @@ -519,7 +518,7 @@ public: EnterPhase(PHASE_FLIGHT_SEQUENCE); } } - Summons.Despawn(summon); + summons.Despawn(summon); } void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/) override @@ -562,10 +561,10 @@ public: { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - instance->SetBossState(DATA_ILLIDAN_STORMRAGE, DONE); - for (uint8 i = DATA_GO_ILLIDAN_DOOR_R; i < DATA_GO_ILLIDAN_DOOR_L + 1; ++i) instance->HandleGameObject(instance->GetGuidData(i), true); + + _JustDied(); } void KilledUnit(Unit* victim) override @@ -1129,7 +1128,6 @@ public: uint32 Timer[EVENT_ENRAGE + 1]; PhaseIllidan Phase; private: - InstanceScript* instance; EventIllidan Event; uint32 TalkCount; uint32 TransformCount; @@ -1138,7 +1136,6 @@ public: ObjectGuid MaievGUID; ObjectGuid FlameGUID[2]; ObjectGuid GlaiveGUID[2]; - SummonList Summons; }; CreatureAI* GetAI(Creature* creature) const override @@ -1813,7 +1810,7 @@ public: void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset() { - instance->SetBossState(DATA_ILLIDAN_STORMRAGE, NOT_STARTED); + _Reset(); if (Creature* akama = ObjectAccessor::GetCreature(*me, AkamaGUID)) { @@ -1832,12 +1829,11 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset() SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); me->SetDisableGravity(false); me->setActive(false); - Summons.DespawnAll(); } void boss_illidan_stormrage::boss_illidan_stormrageAI::JustSummoned(Creature* summon) { - Summons.Summon(summon); + summons.Summon(summon); switch (summon->GetEntry()) { case PARASITIC_SHADOWFIEND: @@ -1930,7 +1926,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence() break; case 15: DoCast(me, SPELL_DEATH); // Animate his kneeling + stun him - Summons.DespawnAll(); + summons.DespawnAll(); break; case 17: if (Creature* akama = ObjectAccessor::GetCreature(*me, AkamaGUID)) diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index 55df34c95ed..21e1a80d753 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -135,12 +135,11 @@ public: return GetInstanceAI<boss_reliquary_of_soulsAI>(creature); } - struct boss_reliquary_of_soulsAI : public ScriptedAI + struct boss_reliquary_of_soulsAI : public BossAI { - boss_reliquary_of_soulsAI(Creature* creature) : ScriptedAI(creature) + boss_reliquary_of_soulsAI(Creature* creature) : BossAI(creature, DATA_RELIQUARY_OF_SOULS) { Initialize(); - instance = creature->GetInstanceScript(); Counter = 0; Timer = 0; SoulCount = 0; @@ -152,8 +151,6 @@ public: Phase = 0; } - InstanceScript* instance; - ObjectGuid EssenceGUID; uint32 Phase; @@ -165,7 +162,7 @@ public: void Reset() override { - instance->SetBossState(DATA_RELIQUARY_OF_SOULS, NOT_STARTED); + _Reset(); if (!EssenceGUID.IsEmpty()) { @@ -202,8 +199,7 @@ public: void EnterCombat(Unit* who) override { me->AddThreat(who, 10000.0f); - DoZoneInCombat(); - instance->SetBossState(DATA_RELIQUARY_OF_SOULS, IN_PROGRESS); + _EnterCombat(); Phase = 1; Counter = 0; @@ -246,11 +242,6 @@ public: } } - void JustDied(Unit* /*killer*/) override - { - instance->SetBossState(DATA_RELIQUARY_OF_SOULS, DONE); - } - void UpdateAI(uint32 diff) override { if (!Phase) diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index 3f7e88d045f..aef056eb65b 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -91,7 +91,7 @@ public: void Despawn() { - me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + me->DealDamage(me, me->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); me->RemoveCorpse(); } @@ -218,7 +218,7 @@ public: { Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID)); if (!Teron || !Teron->IsAlive() || Teron->IsInEvadeMode()) - me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + me->DealDamage(me, me->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); CheckTeronTimer = 5000; } else CheckTeronTimer -= diff; @@ -236,9 +236,9 @@ public: return GetInstanceAI<boss_teron_gorefiendAI>(creature); } - struct boss_teron_gorefiendAI : public ScriptedAI + struct boss_teron_gorefiendAI : public BossAI { - boss_teron_gorefiendAI(Creature* creature) : ScriptedAI(creature) + boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND) { Initialize(); instance = creature->GetInstanceScript(); @@ -277,8 +277,7 @@ public: void Reset() override { - instance->SetBossState(DATA_TERON_GOREFIEND, NOT_STARTED); - + _Reset(); Initialize(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -316,9 +315,8 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetBossState(DATA_TERON_GOREFIEND, DONE); - Talk(SAY_DEATH); + _JustDied(); } float CalculateRandomLocation(float Loc, uint32 radius) @@ -363,7 +361,7 @@ public: /** WHAT IS FULLY NECESSARY FOR GOREFIEND TO BE 100% COMPLETE *****/ /************************************************************************/ - Unit* ghost = NULL; + Unit* ghost = nullptr; if (!GhostGUID.IsEmpty()) ghost = ObjectAccessor::GetUnit(*me, GhostGUID); if (ghost && ghost->IsAlive() && ghost->HasAura(SPELL_SHADOW_OF_DEATH)) @@ -379,7 +377,7 @@ public: }*/ for (uint8 i = 0; i < 4; ++i) { - Creature* Construct = NULL; + Creature* Construct = nullptr; float X = CalculateRandomLocation(ghost->GetPositionX(), 10); float Y = CalculateRandomLocation(ghost->GetPositionY(), 10); Construct = me->SummonCreature(CREATURE_SHADOWY_CONSTRUCT, X, Y, ghost->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45000); @@ -435,17 +433,13 @@ public: for (uint8 i = 0; i < 2; ++i) { - Creature* Shadow = NULL; float X = CalculateRandomLocation(me->GetPositionX(), 10); - Shadow = me->SummonCreature(CREATURE_SHADOWY_CONSTRUCT, X, me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 0); - if (Shadow) + if (Creature* shadow = me->SummonCreature(CREATURE_SHADOWY_CONSTRUCT, X, me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 0)) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1); - if (!target) - target = me->GetVictim(); - - if (target) - Shadow->AI()->AttackStart(target); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)) + shadow->AI()->AttackStart(target); + else if (Unit* victim = me->GetVictim()) + shadow->AI()->AttackStart(victim); } } SummonShadowsTimer = 60000; diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index d68bde43cce..98f8be1c726 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -231,6 +231,7 @@ public: { Initialize(); instance = creature->GetInstanceScript(); + SetBoundary(instance->GetBossBoundary(DATA_ILLIDARI_COUNCIL)); } void Initialize() @@ -257,7 +258,7 @@ public: { Initialize(); - Creature* pMember = NULL; + Creature* pMember = nullptr; for (uint8 i = 0; i < 4; ++i) { pMember = ObjectAccessor::GetCreature((*me), Council[i]); @@ -330,16 +331,16 @@ public: if (DeathCount > 3) { if (Creature* VoiceTrigger = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BLOOD_ELF_COUNCIL_VOICE))) - VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); instance->SetBossState(DATA_ILLIDARI_COUNCIL, DONE); //me->SummonCreature(AKAMAID, 746.466980f, 304.394989f, 311.90208f, 6.272870f, TEMPSUMMON_DEAD_DESPAWN, 0); - me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + me->DealDamage(me, me->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); return; } Creature* pMember = (ObjectAccessor::GetCreature(*me, Council[DeathCount])); if (pMember && pMember->IsAlive()) - pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + pMember->DealDamage(pMember, pMember->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); ++DeathCount; EndEventTimer = 1500; } else EndEventTimer -= diff; @@ -922,7 +923,7 @@ public: if (dmgInfo.GetAttacker() == target) return; int32 bp = absorbAmount / 2; - target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_T, &bp, NULL, NULL, true, NULL, aurEff); + target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_T, &bp, nullptr, nullptr, true, nullptr, aurEff); } void Register() override diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp index 0d9a4187301..1db95c31478 100644 --- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp @@ -35,6 +35,20 @@ DoorData const doorData[] = { 0, 0, DOOR_TYPE_ROOM } // END }; +BossBoundaryData const boundaries = +{ + { DATA_HIGH_WARLORD_NAJENTUS, new RectangleBoundary(394.0f, 479.4f, 707.8f, 859.1f) }, + { DATA_SUPREMUS, new RectangleBoundary(556.1f, 850.2f, 542.0f, 1001.0f) }, + { DATA_SHADE_OF_AKAMA, new RectangleBoundary(406.8f, 564.0f, 327.9f, 473.5f) }, + { DATA_TERON_GOREFIEND, new RectangleBoundary(512.5f, 613.3f, 373.2f, 432.0f) }, + { DATA_TERON_GOREFIEND, new ZRangeBoundary(179.5f, 223.6f) }, + { DATA_GURTOGG_BLOODBOIL, new RectangleBoundary(720.5f, 864.5f, 159.3f, 316.0f) }, + { DATA_RELIQUARY_OF_SOULS, new RectangleBoundary(435.9f, 558.8f, 113.3f, 229.6f) }, + { DATA_MOTHER_SHAHRAZ, new RectangleBoundary(903.4f, 982.1f, 92.4f, 476.7f) }, + { DATA_ILLIDARI_COUNCIL, new EllipseBoundary(Position(696.6f, 305.0f), 70.0 , 85.0) }, + { DATA_ILLIDAN_STORMRAGE, new EllipseBoundary(Position(694.8f, 309.0f), 70.0 , 85.0) } +}; + class instance_black_temple : public InstanceMapScript { public: @@ -47,6 +61,7 @@ class instance_black_temple : public InstanceMapScript SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); + LoadBossBoundaries(boundaries); } void OnCreatureCreate(Creature* creature) override |