diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 70580733a03..c372c16446f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -649,6 +649,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) @@ -659,10 +667,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->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -684,15 +693,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: @@ -776,8 +789,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 @@ -810,7 +825,6 @@ class npc_high_overlord_saurfang_icc : public CreatureScript private: EventMap _events; InstanceScript* _instance; - std::list _guardList; }; CreatureAI* GetAI(Creature* creature) const override @@ -846,6 +860,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) @@ -857,10 +879,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->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -877,8 +900,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))) @@ -887,8 +912,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; } } @@ -935,8 +962,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; } @@ -946,7 +975,6 @@ class npc_muradin_bronzebeard_icc : public CreatureScript private: EventMap _events; InstanceScript* _instance; - std::list _guardList; }; CreatureAI* GetAI(Creature* creature) const override