*Fix Illidari Council script. Do not evade when other members are still fighting.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-01-10 10:10:57 -06:00
parent 0e2f785028
commit bb7fb087ca
@@ -290,59 +290,59 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
if(!EventBegun) return; if(!EventBegun) return;
if(EndEventTimer) if(EndEventTimer)
{
if(EndEventTimer <= diff)
{ {
if(DeathCount > 3) if(EndEventTimer <= diff)
{ {
if(pInstance) if(DeathCount > 3)
{ {
if(Creature* VoiceTrigger = ((Creature*)Unit::GetUnit(*m_creature, pInstance->GetData64(DATA_BLOOD_ELF_COUNCIL_VOICE)))) if(pInstance)
VoiceTrigger->DealDamage(VoiceTrigger, VoiceTrigger->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); {
pInstance->SetData(DATA_ILLIDARICOUNCILEVENT, DONE); if(Creature* VoiceTrigger = ((Creature*)Unit::GetUnit(*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->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
return;
} }
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
return;
}
Creature* pMember = ((Creature*)Unit::GetUnit(*m_creature, Council[DeathCount])); Creature* pMember = ((Creature*)Unit::GetUnit(*m_creature, Council[DeathCount]));
if(pMember && pMember->isAlive()) if(pMember && pMember->isAlive())
pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
++DeathCount; ++DeathCount;
EndEventTimer = 1500; EndEventTimer = 1500;
}else EndEventTimer -= diff; }else EndEventTimer -= diff;
} }
if(CheckTimer) if(CheckTimer)
{
if(CheckTimer <= diff)
{ {
uint8 EvadeCheck = 0; if(CheckTimer <= diff)
for(uint8 i = 0; i < 4; ++i)
{ {
if(Council[i]) uint8 EvadeCheck = 0;
for(uint8 i = 0; i < 4; ++i)
{ {
if(Creature* Member = ((Creature*)Unit::GetUnit((*m_creature), Council[i]))) if(Council[i])
{ {
// This is the evade/death check. if(Creature* Member = ((Creature*)Unit::GetUnit((*m_creature), Council[i])))
if(Member->isAlive() && !Member->SelectHostilTarget())
++EvadeCheck; //If all members evade, we reset so that players can properly reset the event
else if(!Member->isAlive()) // If even one member dies, kill the rest, set instance data, and kill self.
{ {
EndEventTimer = 1000; // This is the evade/death check.
CheckTimer = 0; if(Member->isAlive() && !Member->SelectHostilTarget())
return; ++EvadeCheck; //If all members evade, we reset so that players can properly reset the event
else if(!Member->isAlive()) // If even one member dies, kill the rest, set instance data, and kill self.
{
EndEventTimer = 1000;
CheckTimer = 0;
return;
}
} }
} }
} }
}
if(EvadeCheck > 3) if(EvadeCheck > 3)
Reset(); Reset();
CheckTimer = 2000; CheckTimer = 2000;
}else CheckTimer -= diff; }else CheckTimer -= diff;
} }
} }
}; };
@@ -385,6 +385,20 @@ struct TRINITY_DLL_DECL boss_illidari_councilAI : public ScriptedAI
LoadGUIDs(); LoadGUIDs();
} }
void EnterEvadeMode()
{
for(uint8 i = 0; i < 4; ++i)
{
if(Unit* pUnit = Unit::GetUnit(*m_creature, Council[i]))
if(pUnit != m_creature && pUnit->getVictim())
{
AttackStart(pUnit->getVictim());
return;
}
}
ScriptedAI::EnterEvadeMode();
}
void DamageTaken(Unit* done_by, uint32 &damage) void DamageTaken(Unit* done_by, uint32 &damage)
{ {
if(done_by == m_creature) if(done_by == m_creature)