diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-03-19 14:59:26 -0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-09-19 22:21:35 +0200 |
| commit | 05c9b8c3379c31ae8430410c239f4239a49eb56a (patch) | |
| tree | b6d19958bfb20ab462dccfa12aa69aa92b871849 | |
| parent | a8226a1d6779724541c09265898a646c2b35d5d7 (diff) | |
Scripts/ICC: use script searchers instead of saving list of creature pointers
Closes #21644
(cherry picked from commit f87da3a3069da920297af7b7855569999cad2671)
| -rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp | 68 |
1 files changed, 48 insertions, 20 deletions
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<void(Creature*)>&& action) const + { + std::vector<Creature*> 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<Creature*> guardList; + GetCreatureListWithEntryInGrid(guardList, me, NPC_SE_KOR_KRON_REAVER, 20.0f); + guardList.sort(Trinity::ObjectDistanceOrderPred(me)); uint32 x = 1; - for (std::list<Creature*>::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<Creature*>::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<Creature*>::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<Creature*>::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<Creature*> _guardList; }; CreatureAI* GetAI(Creature* creature) const override @@ -849,6 +863,14 @@ class npc_muradin_bronzebeard_icc : public CreatureScript return false; } + void GuardBroadcast(std::function<void(Creature*)>&& action) const + { + std::vector<Creature*> 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<Creature*> guardList; + GetCreatureListWithEntryInGrid(guardList, me, NPC_SE_SKYBREAKER_MARINE, 20.0f); + guardList.sort(Trinity::ObjectDistanceOrderPred(me)); uint32 x = 1; - for (std::list<Creature*>::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<Creature*>::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<Creature*>::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<Creature*>::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<Creature*> _guardList; }; CreatureAI* GetAI(Creature* creature) const override |
