Scripts/ICC: use script searchers instead of saving list of creature pointers

Closes #21644
This commit is contained in:
ariel-
2018-03-19 14:59:26 -03:00
committed by Aokromes
parent 3303c4551b
commit 18b04b326e

View File

@@ -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