mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-24 10:56:38 +01:00
Scripts/ICC: use script searchers instead of saving list of creature pointers
Closes #21644
This commit is contained in:
@@ -649,6 +649,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)
|
||||
@@ -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<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);
|
||||
@@ -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<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:
|
||||
@@ -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<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
|
||||
@@ -810,7 +825,6 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
std::list<Creature*> _guardList;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
@@ -846,6 +860,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)
|
||||
@@ -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<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);
|
||||
@@ -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<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)))
|
||||
@@ -887,8 +912,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;
|
||||
}
|
||||
}
|
||||
@@ -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<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;
|
||||
}
|
||||
@@ -946,7 +975,6 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
|
||||
private:
|
||||
EventMap _events;
|
||||
InstanceScript* _instance;
|
||||
std::list<Creature*> _guardList;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
|
||||
Reference in New Issue
Block a user