diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-03-19 14:59:26 -0300 | 
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2018-03-19 14:59:26 -0300 | 
| commit | f87da3a3069da920297af7b7855569999cad2671 (patch) | |
| tree | a654283ca5ee165637b2b15e27d7230c45953531 /src | |
| parent | 07e42f7d4121e18f6f61cafe8e6fe389ff8b1beb (diff) | |
Scripts/ICC: use script searchers instead of saving list of creature pointers
Closes #21644
Diffstat (limited to 'src')
| -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 334e3d73775..229893a5c6b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -653,6 +653,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) @@ -663,10 +671,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->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -688,15 +697,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: @@ -780,8 +793,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 @@ -814,7 +829,6 @@ class npc_high_overlord_saurfang_icc : public CreatureScript          private:              EventMap _events;              InstanceScript* _instance; -            std::list<Creature*> _guardList;          };          CreatureAI* GetAI(Creature* creature) const override @@ -850,6 +864,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) @@ -861,10 +883,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->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -881,8 +904,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))) @@ -891,8 +916,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;                  }              } @@ -939,8 +966,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;                      } @@ -950,7 +979,6 @@ class npc_muradin_bronzebeard_icc : public CreatureScript          private:              EventMap _events;              InstanceScript* _instance; -            std::list<Creature*> _guardList;          };          CreatureAI* GetAI(Creature* creature) const override | 
