Core/Scripts Added Black Temple Boundaries (#17579)

* Core/Scripts Added Black Temple Boundaries
This commit is contained in:
Keader
2016-07-20 10:28:00 -03:00
committed by Aokromes
parent 03bef35500
commit 2710c655ff
6 changed files with 51 additions and 60 deletions

View File

@@ -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)

View File

@@ -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))

View File

@@ -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)

View File

@@ -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;

View File

@@ -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

View File

@@ -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