aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp68
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