*Fix Illidari Council script. Do not evade when other members are still fighting.
--HG-- branch : trunk
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user