diff options
| -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 | 
