From 680c219770fb9dc77e372658e866f3be836df63c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=BF?= <18535853+PkllonG@users.noreply.github.com> Date: Fri, 21 Jun 2024 21:45:56 +0800 Subject: [PATCH] fix(Scripts/Midsummer): use GUID storage rather than Player object (#19109) * Update midsummer.cpp * Update midsummer.cpp * Update midsummer.cpp --- src/server/scripts/Events/midsummer.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/server/scripts/Events/midsummer.cpp b/src/server/scripts/Events/midsummer.cpp index 5e8925068b0254..03cf34fb985449 100644 --- a/src/server/scripts/Events/midsummer.cpp +++ b/src/server/scripts/Events/midsummer.cpp @@ -676,10 +676,10 @@ struct npc_midsummer_ribbon_pole_target : public ScriptedAI } // prevent duplicates - if (std::find(_dancerList.begin(), _dancerList.end(), dancer) != _dancerList.end()) + if (std::find(_dancerList.begin(), _dancerList.end(), dancer->GetGUID()) != _dancerList.end()) return; - _dancerList.push_back(dancer); + _dancerList.push_back(dancer->GetGUID()); } void LocateRibbonPole() @@ -707,11 +707,11 @@ struct npc_midsummer_ribbon_pole_target : public ScriptedAI return; // remove non-dancing players from list - std::erase_if(_dancerList, [](Player* dancer) - { - if (dancer) /// @todo: replace with GUID storage rather than Player object - return !dancer->HasAura(SPELL_RIBBON_POLE_PERIODIC_VISUAL); - }); + std::erase_if(_dancerList, [this](ObjectGuid dancerGUID) + { + Player* dancer = ObjectAccessor::GetPlayer(*me, dancerGUID); + return !dancer || !dancer->HasAura(SPELL_RIBBON_POLE_PERIODIC_VISUAL); + }); } void DoFlameCircleChecks() @@ -789,9 +789,7 @@ struct npc_midsummer_ribbon_pole_target : public ScriptedAI for (uint8 i = 0; (i < MAX_COUNT_SPEW_LAVA_TARGETS) && (i < _dancerList.size()); i++) { - Player* dancerTarget = _dancerList[i]; - - if (dancerTarget) + if (Player* dancerTarget = ObjectAccessor::GetPlayer(*me, _dancerList[i])) { Creature* fireSpiralBunny = dancerTarget->SummonCreature(NPC_RIBBON_POLE_FIRE_SPIRAL_BUNNY, dancerTarget->GetPositionX(), dancerTarget->GetPositionY(), dancerTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 10000); if (fireSpiralBunny) @@ -824,7 +822,7 @@ struct npc_midsummer_ribbon_pole_target : public ScriptedAI } private: - std::vector _dancerList; + GuidVector _dancerList; GameObject* _ribbonPole; Creature* _bunny; };