diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index c131a8fd6..30f08c361 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -64,14 +64,14 @@ void SummonList::DespawnEntry(uint32 entry) } } -void SummonList::DespawnAll() +void SummonList::DespawnAll(uint32 delay /*= 0*/) { while (!storage_.empty()) { Creature* summon = ObjectAccessor::GetCreature(*me, storage_.front()); storage_.pop_front(); if (summon) - summon->DespawnOrUnsummon(); + summon->DespawnOrUnsummon(delay); } } diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index bf6a86d4d..4f295a889 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -89,7 +89,7 @@ public: void Summon(Creature const* summon) { storage_.push_back(summon->GetGUID()); } void Despawn(Creature const* summon) { storage_.remove(summon->GetGUID()); } void DespawnEntry(uint32 entry); - void DespawnAll(); + void DespawnAll(uint32 delay = 0); bool IsAnyCreatureAlive() const; bool IsAnyCreatureWithEntryAlive(uint32 entry) const; bool IsAnyCreatureInCombat() const; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index 49be214e0..5e5825ede 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -133,6 +133,17 @@ struct boss_viscidus : public BossAI me->RemoveAurasDueToSpell(SPELL_INVIS_SELF); } + void JustDied(Unit* /*killer*/) override + { + events.Reset(); + summons.DespawnAll(10 * IN_MILLISECONDS); + if (instance) + { + instance->SetBossState(DATA_VISCIDUS, DONE); + instance->SaveToDB(); + } + } + void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType effType, SpellSchoolMask spellSchoolMask) override { if (me->HealthBelowPct(5))