Allow BossAI::_DespawnAtEvade to work on creatures other than the boss itself (optional argument).

This commit is contained in:
treeston
2016-05-13 22:23:25 +02:00
parent 0d5adf356e
commit 6040e30fa3
2 changed files with 20 additions and 10 deletions

View File

@@ -547,7 +547,7 @@ void BossAI::UpdateAI(uint32 diff)
DoMeleeAttackIfReady();
}
void BossAI::_DespawnAtEvade(uint32 delayToRespawn)
void BossAI::_DespawnAtEvade(uint32 delayToRespawn, Creature* who)
{
if (delayToRespawn < 2)
{
@@ -555,18 +555,28 @@ void BossAI::_DespawnAtEvade(uint32 delayToRespawn)
delayToRespawn = 2;
}
uint32 corpseDelay = me->GetCorpseDelay();
uint32 respawnDelay = me->GetRespawnDelay();
if (!who)
who = me;
me->SetCorpseDelay(1);
me->SetRespawnDelay(delayToRespawn - 1);
if (TempSummon* whoSummon = who->ToTempSummon())
{
TC_LOG_WARN("scripts", "_DespawnAtEvade called on a temporary summon.");
whoSummon->UnSummon();
return;
}
me->DespawnOrUnsummon();
uint32 corpseDelay = who->GetCorpseDelay();
uint32 respawnDelay = who->GetRespawnDelay();
me->SetCorpseDelay(corpseDelay);
me->SetRespawnDelay(respawnDelay);
who->SetCorpseDelay(1);
who->SetRespawnDelay(delayToRespawn - 1);
if (instance)
who->DespawnOrUnsummon();
who->SetCorpseDelay(corpseDelay);
who->SetRespawnDelay(respawnDelay);
if (instance && who == me)
instance->SetBossState(_bossId, FAIL);
}

View File

@@ -367,7 +367,7 @@ class TC_GAME_API BossAI : public ScriptedAI
void _EnterCombat();
void _JustDied();
void _JustReachedHome() { me->setActive(false); }
void _DespawnAtEvade(uint32 delayToRespawn = 30);
void _DespawnAtEvade(uint32 delayToRespawn = 30, Creature* who = nullptr);
void TeleportCheaters();