*BT Illidan fixes

-disable Councils summoning Akama (make shure Akama(23089) is spawned in DB)
-Akama will be visible if Counils are dead, even after restart, thanks to BroodWyrm's patch
-Handle wipe in more correct way, all doors open, event can be restarted at Akama, but if wiped, he will skip the door blowup part (already opened)
-fixed infinyt spawning of Illidary Elits

--HG--
branch : trunk
This commit is contained in:
Rat committed 2009-10-17 15:52:12 +02:00
1 parent ac6fe6bd6e
commit 5441f8d5de
2 files changed
+49 -18

No files matched your search

@@ -974,8 +974,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
npc_akama_illidanAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
JustCreated = true;
}
bool JustCreated;
ScriptedInstance* pInstance;
PhaseAkama Phase;
@@ -991,9 +992,11 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
uint32 ChannelCount;
uint32 WalkCount;
uint32 TalkCount;
uint32 Check_Timer;
void Reset()
{
WalkCount = 0;
if (pInstance)
{
pInstance->SetData(DATA_ILLIDANSTORMRAGEEVENT, NOT_STARTED);
@@ -1003,11 +1006,20 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
DoorGUID[0] = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_R);
DoorGUID[1] = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_L);
pInstance->HandleGameObject(GateGUID, false);
for(uint8 i = 0; i < 2; ++i)
pInstance->HandleGameObject(DoorGUID[i], false);
if(JustCreated)//close all doors at create
{
pInstance->HandleGameObject(GateGUID, false);
for(uint8 i = 0; i < 2; ++i)
pInstance->HandleGameObject(DoorGUID[i], false);
//JustCreated = false;
}else
{//open all doors, raid wiped
pInstance->HandleGameObject(GateGUID, true);
WalkCount = 1;//skip first wp
for(uint8 i = 0; i < 2; ++i)
pInstance->HandleGameObject(DoorGUID[i], true);
}
}
else
{
@@ -1024,15 +1036,16 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
Phase = PHASE_AKAMA_NULL;
Timer = 0;
ChannelCount = 0;
WalkCount = 0;
ChannelCount = 0;
TalkCount = 0;
Check_Timer = 5000;
KillAllElites();
m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); // Database sometimes has strange values..
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
m_creature->setActive(false);
m_creature->SetVisibility(VISIBILITY_OFF);
}
// Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit
@@ -1046,7 +1059,11 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
void EnterCombat(Unit *who) {}
void MoveInLineOfSight(Unit* who) {}
void MovementInform(uint32 MovementType, uint32 Data) {Timer = 1;}
void MovementInform(uint32 MovementType, uint32 Data)
{
if(MovementType == POINT_MOTION_TYPE)
Timer = 1;
}
void DamageTaken(Unit *done_by, uint32 &damage)
{
@@ -1075,10 +1092,8 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
return;
pInstance->SetData(DATA_ILLIDANSTORMRAGEEVENT, IN_PROGRESS);
for(uint8 i = 0; i < 2; ++i)
pInstance->HandleGameObject(DoorGUID[i], false);
pInstance->HandleGameObject(DoorGUID[i], false);
if (GETCRE(Illidan, IllidanGUID))
{
Illidan->RemoveAurasDueToSpell(SPELL_KNEEL);
@@ -1094,7 +1109,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
void BeginChannel()
{
m_creature->setActive(true);
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
if(!JustCreated)
return;
float x, y, z;
if (GETGO(Gate, GateGUID))
Gate->GetPosition(x, y, z);
@@ -1104,8 +1121,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
if (Creature* Channel = m_creature->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
{
ChannelGUID = Channel->GetGUID();
Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen.
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen.
DoCast(Channel, SPELL_AKAMA_DOOR_FAIL);
}
@@ -1130,7 +1146,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
return;
switch(NextPhase)
{
case PHASE_CHANNEL:
case PHASE_CHANNEL:
BeginChannel();
Timer = 5000;
ChannelCount = 0;
@@ -1146,6 +1162,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
WalkCount++;
}
JustCreated = false;
BeginWalk();
Timer = 0;
break;
@@ -1300,6 +1317,16 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
if(m_creature->GetVisibility() == VISIBILITY_OFF)
{
if(Check_Timer < diff)
{
if(pInstance && pInstance->GetData(DATA_ILLIDARICOUNCILEVENT) == DONE)
m_creature->SetVisibility(VISIBILITY_ON);
Check_Timer = 5000;
}else Check_Timer -= diff;
}
Event = false;
if (Timer)
{
@@ -1313,7 +1340,11 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
switch(Phase)
{
case PHASE_CHANNEL:
HandleChannelSequence();
if(JustCreated)
HandleChannelSequence();
else{
EnterPhase(PHASE_WALK);
}
break;
case PHASE_TALK:
HandleTalkSequence();
@@ -300,7 +300,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
if (Creature* VoiceTrigger = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE))))
VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
pInstance->SetData(DATA_ILLIDARICOUNCILEVENT, DONE);
m_creature->SummonCreature(AKAMAID,746.466980f,304.394989f,311.90208f,6.272870f,TEMPSUMMON_DEAD_DESPAWN,0);
//m_creature->SummonCreature(AKAMAID,746.466980f,304.394989f,311.90208f,6.272870f,TEMPSUMMON_DEAD_DESPAWN,0);
}
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
return;