From d94f8b5970b88b59fe5c66aa161c7869810f15ee Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Thu, 19 May 2022 16:59:48 +0300 Subject: [PATCH] fix(Script/Ulduar): Freya spawning multiple chests (#11794) --- .../Northrend/Ulduar/Ulduar/boss_freya.cpp | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index c6ea86ff9..9b969e8c7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -316,46 +316,49 @@ public: { if (damage >= me->GetHealth()) { - Talk(SAY_DEATH); - damage = 0; - me->SetReactState(REACT_PASSIVE); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetFaction(FACTION_FRIENDLY); - me->RemoveAllAuras(); - me->AttackStop(); - events.Reset(); - - summons.DespawnAll(); - events.Reset(); - - uint8 _elderCount = 0; - for (uint8 i = 0; i < 3; ++i) + if (m_pInstance->GetData(TYPE_FREYA) != DONE) { - if (!_elderGUID[i]) - continue; + Talk(SAY_DEATH); - if (Creature* e = ObjectAccessor::GetCreature(*me, _elderGUID[i])) - e->DespawnOrUnsummon(); + me->SetReactState(REACT_PASSIVE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetFaction(FACTION_FRIENDLY); + me->RemoveAllAuras(); + me->AttackStop(); + events.Reset(); - ++_elderCount; - } + summons.DespawnAll(); + events.Reset(); - uint32 chestId = RAID_MODE(GO_FREYA_CHEST, GO_FREYA_CHEST_HERO); - chestId -= 2 * _elderCount; // offset + uint8 _elderCount = 0; + for (uint8 i = 0; i < 3; ++i) + { + if (!_elderGUID[i]) + continue; - me->DespawnOrUnsummon(5000); - if (GameObject* go = me->SummonGameObject(chestId, 2345.61f, -71.20f, 425.104f, 3.0f, 0, 0, 0, 0, 0)) - { - go->ReplaceAllGameObjectFlags((GameObjectFlags)0); - go->SetLootRecipient(me->GetMap()); - } + if (Creature* e = ObjectAccessor::GetCreature(*me, _elderGUID[i])) + e->DespawnOrUnsummon(); - // Defeat credit - if (m_pInstance) - { - me->CastSpell(me, 65074, true); // credit - m_pInstance->SetData(TYPE_FREYA, DONE); + ++_elderCount; + } + + uint32 chestId = RAID_MODE(GO_FREYA_CHEST, GO_FREYA_CHEST_HERO); + chestId -= 2 * _elderCount; // offset + + me->DespawnOrUnsummon(5000); + if (GameObject* go = me->SummonGameObject(chestId, 2345.61f, -71.20f, 425.104f, 3.0f, 0, 0, 0, 0, 0)) + { + go->ReplaceAllGameObjectFlags((GameObjectFlags)0); + go->SetLootRecipient(me->GetMap()); + } + + // Defeat credit + if (m_pInstance) + { + me->CastSpell(me, 65074, true); // credit + m_pInstance->SetData(TYPE_FREYA, DONE); + } } } }