aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp16
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_illidan.cpp20
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp17
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp32
-rw-r--r--src/server/scripts/Outland/BlackTemple/illidari_council.cpp11
-rw-r--r--src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp15
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