From 05c9b8c3379c31ae8430410c239f4239a49eb56a Mon Sep 17 00:00:00 2001 From: ariel- Date: Mon, 19 Mar 2018 14:59:26 -0300 Subject: Scripts/ICC: use script searchers instead of saving list of creature pointers Closes #21644 (cherry picked from commit f87da3a3069da920297af7b7855569999cad2671) --- .../IcecrownCitadel/boss_deathbringer_saurfang.cpp | 68 +++++++++++++++------- 1 file changed, 48 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index a5b9f97bd30..082f4dc204b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -652,6 +652,14 @@ class npc_high_overlord_saurfang_icc : public CreatureScript return false; } + void GuardBroadcast(std::function&& action) const + { + std::vector guardList; + GetCreatureListWithEntryInGrid(guardList, me, NPC_SE_KOR_KRON_REAVER, 100.0f); + for (Creature* guard : guardList) + action(guard); + } + void DoAction(int32 action) override { switch (action) @@ -662,10 +670,11 @@ class npc_high_overlord_saurfang_icc : public CreatureScript if (_events.IsInPhase(PHASE_INTRO_A) || _events.IsInPhase(PHASE_INTRO_H)) return; - GetCreatureListWithEntryInGrid(_guardList, me, NPC_SE_KOR_KRON_REAVER, 20.0f); - _guardList.sort(Trinity::ObjectDistanceOrderPred(me)); + std::list guardList; + GetCreatureListWithEntryInGrid(guardList, me, NPC_SE_KOR_KRON_REAVER, 20.0f); + guardList.sort(Trinity::ObjectDistanceOrderPred(me)); uint32 x = 1; - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++x, ++itr) + for (auto itr = guardList.begin(); itr != guardList.end(); ++x, ++itr) (*itr)->AI()->SetData(0, x); me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); @@ -687,15 +696,19 @@ class npc_high_overlord_saurfang_icc : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 30000); // move me->SetDisableGravity(false); me->GetMotionMaster()->MoveFall(); - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) - (*itr)->AI()->DoAction(ACTION_DESPAWN); + GuardBroadcast([](Creature* guard) + { + guard->AI()->DoAction(ACTION_DESPAWN); + }); break; } case ACTION_INTERRUPT_INTRO: { _events.Reset(); - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) - (*itr)->AI()->DoAction(ACTION_DESPAWN); + GuardBroadcast([](Creature* guard) + { + guard->AI()->DoAction(ACTION_DESPAWN); + }); break; } default: @@ -779,8 +792,10 @@ class npc_high_overlord_saurfang_icc : public CreatureScript break; case EVENT_INTRO_HORDE_8: Talk(SAY_INTRO_HORDE_8); - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) - (*itr)->AI()->DoAction(ACTION_CHARGE); + GuardBroadcast([](Creature* guard) + { + guard->AI()->DoAction(ACTION_CHARGE); + }); me->GetMotionMaster()->MoveCharge(chargePos[0].GetPositionX(), chargePos[0].GetPositionY(), chargePos[0].GetPositionZ(), 8.5f, POINT_CHARGE); break; case EVENT_OUTRO_HORDE_2: // say @@ -813,7 +828,6 @@ class npc_high_overlord_saurfang_icc : public CreatureScript private: EventMap _events; InstanceScript* _instance; - std::list _guardList; }; CreatureAI* GetAI(Creature* creature) const override @@ -849,6 +863,14 @@ class npc_muradin_bronzebeard_icc : public CreatureScript return false; } + void GuardBroadcast(std::function&& action) const + { + std::vector guardList; + GetCreatureListWithEntryInGrid(guardList, me, NPC_SE_SKYBREAKER_MARINE, 100.0f); + for (Creature* guard : guardList) + action(guard); + } + void DoAction(int32 action) override { switch (action) @@ -860,10 +882,11 @@ class npc_muradin_bronzebeard_icc : public CreatureScript return; _events.SetPhase(PHASE_INTRO_A); - GetCreatureListWithEntryInGrid(_guardList, me, NPC_SE_SKYBREAKER_MARINE, 20.0f); - _guardList.sort(Trinity::ObjectDistanceOrderPred(me)); + std::list guardList; + GetCreatureListWithEntryInGrid(guardList, me, NPC_SE_SKYBREAKER_MARINE, 20.0f); + guardList.sort(Trinity::ObjectDistanceOrderPred(me)); uint32 x = 1; - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++x, ++itr) + for (auto itr = guardList.begin(); itr != guardList.end(); ++x, ++itr) (*itr)->AI()->SetData(0, x); me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); @@ -880,8 +903,10 @@ class npc_muradin_bronzebeard_icc : public CreatureScript Talk(SAY_OUTRO_ALLIANCE_1); me->SetDisableGravity(false); me->GetMotionMaster()->MoveFall(); - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) - (*itr)->AI()->DoAction(ACTION_DESPAWN); + GuardBroadcast([](Creature* guard) + { + guard->AI()->DoAction(ACTION_DESPAWN); + }); // temp until outro fully done - to put deathbringer on respawn timer (until next reset) if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG))) @@ -890,8 +915,10 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } case ACTION_INTERRUPT_INTRO: _events.Reset(); - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) - (*itr)->AI()->DoAction(ACTION_DESPAWN); + GuardBroadcast([](Creature* guard) + { + guard->AI()->DoAction(ACTION_DESPAWN); + }); break; } } @@ -938,8 +965,10 @@ class npc_muradin_bronzebeard_icc : public CreatureScript break; case EVENT_INTRO_ALLIANCE_5: Talk(SAY_INTRO_ALLIANCE_5); - for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) - (*itr)->AI()->DoAction(ACTION_CHARGE); + GuardBroadcast([](Creature* guard) + { + guard->AI()->DoAction(ACTION_CHARGE); + }); me->GetMotionMaster()->MoveCharge(chargePos[0].GetPositionX(), chargePos[0].GetPositionY(), chargePos[0].GetPositionZ(), 8.5f, POINT_CHARGE); break; } @@ -949,7 +978,6 @@ class npc_muradin_bronzebeard_icc : public CreatureScript private: EventMap _events; InstanceScript* _instance; - std::list _guardList; }; CreatureAI* GetAI(Creature* creature) const override -- cgit v1.2.3