aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp56
1 files changed, 24 insertions, 32 deletions
diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
index 73c3f6121db..04d548901d8 100644
--- a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
+++ b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
@@ -360,9 +360,10 @@ static Animation DemonTransformation[]=
/************************************** Illidan's AI ***************************************/
struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
{
- boss_illidan_stormrageAI(Creature* c) : ScriptedAI(c)
+ boss_illidan_stormrageAI(Creature* c) : ScriptedAI(c), Summons(m_creature)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);
Reset();
SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_SHADOWFIEND_PASSIVE);
@@ -387,6 +388,8 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
uint64 FlameGUID[2];
uint64 GlaiveGUID[2];
+ SummonList Summons;
+
void Reset();
void JustSummoned(Creature* summon);
@@ -399,12 +402,13 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
if(summon->GetGUID() == FlameGUID[i])
FlameGUID[i] = 0;
- if(!FlameGUID[0] && !FlameGUID[1])
+ if(!FlameGUID[0] && !FlameGUID[1] && Phase != PHASE_NULL)
{
m_creature->InterruptNonMeleeSpells(true);
EnterPhase(PHASE_FLIGHT_SEQUENCE);
}
}
+ Summons.Despawn(summon);
}
void MovementInform(uint32 MovementType, uint32 Data)
@@ -896,7 +900,7 @@ struct TRINITY_DLL_DECL flame_of_azzinothAI : public ScriptedAI
GlaiveGUID = 0;
}
- void Aggro(Unit *who) {}
+ void Aggro(Unit *who) {DoZoneInCombat();}
void ChargeCheck()
{
@@ -1802,23 +1806,6 @@ void boss_illidan_stormrageAI::Reset()
if(pInstance)
pInstance->SetData(DATA_ILLIDANSTORMRAGEEVENT, NOT_STARTED);
- for(uint8 i = 0; i < 2; i++)
- {
- if(FlameGUID[i])
- {
- if(GETUNIT(Flame, FlameGUID[i]))
- Flame->setDeathState(JUST_DIED);
- FlameGUID[i] = 0;
- }
-
- if(GlaiveGUID[i])
- {
- if(GETUNIT(Glaive, GlaiveGUID[i]))
- Glaive->setDeathState(JUST_DIED);
- GlaiveGUID[i] = 0;
- }
- }
-
if(AkamaGUID)
{
if(GETCRE(Akama, AkamaGUID))
@@ -1835,15 +1822,11 @@ void boss_illidan_stormrageAI::Reset()
AkamaGUID = 0;
}
- if(MaievGUID)
+ MaievGUID = 0;
+ for(int i = 0; i < 2; ++i)
{
- GETUNIT(Maiev, MaievGUID);
- if(Maiev && Maiev->isAlive())
- {
- Maiev->CastSpell(Maiev, SPELL_TELEPORT_VISUAL, true);
- Maiev->setDeathState(JUST_DIED);
- }
- MaievGUID = 0;
+ FlameGUID[i] = 0;
+ GlaiveGUID[i] = 0;
}
Phase = PHASE_NULL;
@@ -1862,17 +1845,23 @@ void boss_illidan_stormrageAI::Reset()
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0);
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
-
- m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);
m_creature->setActive(false);
+ Summons.DespawnAll();
}
void boss_illidan_stormrageAI::JustSummoned(Creature* summon)
{
+ Summons.Summon(summon);
switch(summon->GetEntry())
{
case PARASITIC_SHADOWFIEND:
{
+ if(Phase == PHASE_TALK_SEQUENCE)
+ {
+ summon->SetVisibility(VISIBILITY_OFF);
+ summon->setDeathState(JUST_DIED);
+ return;
+ }
Unit *target = SelectUnit(SELECT_TARGET_TOPAGGRO, 0, 999, true);
if(!target || target->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0)
|| target->HasAura(SPELL_PARASITIC_SHADOWFIEND2, 0))
@@ -1894,6 +1883,10 @@ void boss_illidan_stormrageAI::JustSummoned(Creature* summon)
((boss_maievAI*)summon->AI())->GetIllidanGUID(m_creature->GetGUID());
((boss_maievAI*)summon->AI())->EnterPhase(PHASE_TALK_SEQUENCE);
}break;
+ case FLAME_OF_AZZINOTH:
+ {
+ summon->AI()->AttackStart(summon->SelectNearestTarget(999));
+ }break;
default:
break;
}
@@ -1945,6 +1938,7 @@ void boss_illidan_stormrageAI::HandleTalkSequence()
}break;
case 15:
DoCast(m_creature, SPELL_DEATH); // Animate his kneeling + stun him
+ Summons.DespawnAll();
break;
case 17:
if(GETUNIT(Akama, AkamaGUID))
@@ -2034,10 +2028,8 @@ void boss_illidan_stormrageAI::SummonFlamesOfAzzinoth()
{
Flame->setFaction(m_creature->getFaction()); // Just in case the database has it as a different faction
Flame->SetMeleeDamageSchool(SPELL_SCHOOL_FIRE);
- Flame->AI()->AttackStart(m_creature->getVictim()); // Attack our target!
FlameGUID[i] = Flame->GetGUID(); // Record GUID in order to check if they're dead later on to move to the next phase
((flame_of_azzinothAI*)Flame->AI())->SetGlaiveGUID(GlaiveGUID[i]);
- DoZoneInCombat(Flame);
Glaive->CastSpell(Flame, SPELL_AZZINOTH_CHANNEL, false); // Glaives do some random Beam type channel on it.
}
}