mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Scripts Added Black Temple Boundaries (#17579)
* Core/Scripts Added Black Temple Boundaries
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user