mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-18 11:25:42 +00:00
fix(Core/ObjectGuid): prevent creating copies when looping objects (#6852)
This commit is contained in:
@@ -200,7 +200,7 @@ public:
|
||||
}
|
||||
|
||||
uint16 phase = 1;
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
{
|
||||
if (Creature* summon = ObjectAccessor::GetCreature(*me, guid))
|
||||
phase |= summon->GetPhaseMask();
|
||||
|
||||
@@ -420,7 +420,7 @@ public:
|
||||
summons.RemoveNotExisting();
|
||||
if (!summons.empty())
|
||||
{
|
||||
for (ObjectGuid const summonGuid : summons)
|
||||
for (ObjectGuid const& summonGuid : summons)
|
||||
{
|
||||
Creature* summon = ObjectAccessor::GetCreature(*me, summonGuid);
|
||||
if (summon && summon->GetEntry() == NPC_FIRE_CYCLONE)
|
||||
@@ -556,7 +556,7 @@ public:
|
||||
uint8 iter = 0;
|
||||
if (!summons.empty())
|
||||
{
|
||||
for (ObjectGuid const summonGuid : summons)
|
||||
for (ObjectGuid const& summonGuid : summons)
|
||||
{
|
||||
Creature* summon = ObjectAccessor::GetCreature(*me, summonGuid);
|
||||
if (summon && summon->GetEntry() == NPC_FIRE_CYCLONE && iter == rand)
|
||||
@@ -636,7 +636,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
for (ObjectGuid const guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
{
|
||||
Creature* tsunami = ObjectAccessor::GetCreature(*me, guid);
|
||||
if (!tsunami || tsunami->GetEntry() != NPC_FLAME_TSUNAMI)
|
||||
@@ -1129,7 +1129,7 @@ public:
|
||||
{
|
||||
summons.RemoveNotExisting();
|
||||
summons.DespawnEntry(NPC_TWILIGHT_WHELP);
|
||||
for (ObjectGuid const summonGuid : summons)
|
||||
for (ObjectGuid const& summonGuid : summons)
|
||||
{
|
||||
Creature const* summon = ObjectAccessor::GetCreature(*me, summonGuid);
|
||||
if (!summon || !summon->IsAlive() || summon->GetEntry() != NPC_TWILIGHT_EGG)
|
||||
|
||||
@@ -279,7 +279,7 @@ public:
|
||||
case INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_3:
|
||||
// revert to INSTANCE_PROGRESS_INITIAL
|
||||
{
|
||||
for (ObjectGuid const guid : VehicleList)
|
||||
for (ObjectGuid const& guid : VehicleList)
|
||||
if (Creature* veh = instance->GetCreature(guid))
|
||||
{
|
||||
veh->DespawnOrUnsummon();
|
||||
@@ -567,7 +567,7 @@ public:
|
||||
{
|
||||
Counter = 0;
|
||||
InstanceProgress = INSTANCE_PROGRESS_CHAMPIONS_UNMOUNTED;
|
||||
for (ObjectGuid const guid : VehicleList)
|
||||
for (ObjectGuid const& guid : VehicleList)
|
||||
if (Creature* veh = instance->GetCreature(guid))
|
||||
veh->DespawnOrUnsummon();
|
||||
events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOVE_SIDE, 0);
|
||||
|
||||
@@ -200,7 +200,7 @@ public:
|
||||
if( !IsHeroic() )
|
||||
events.RescheduleEvent(EVENT_RESPAWN_SPHERE, 4000);
|
||||
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (pInstance)
|
||||
if (Creature* c = pInstance->instance->GetCreature(guid))
|
||||
{
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
|
||||
// move corpses
|
||||
const ObjectGuid npcs[4] = { NPC_IcehowlGUID, NPC_JaraxxusGUID, NPC_LightbaneGUID, NPC_DarkbaneGUID };
|
||||
for (const ObjectGuid i : npcs)
|
||||
for (ObjectGuid const& i : npcs)
|
||||
{
|
||||
if (Creature* c = instance->GetCreature(i))
|
||||
{
|
||||
@@ -402,7 +402,7 @@ public:
|
||||
InstanceProgress = INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD;
|
||||
events.RescheduleEvent(EVENT_SCENE_FACTION_CHAMPIONS_DEAD, 2500);
|
||||
|
||||
for (ObjectGuid guid : NPC_ChampionGUIDs)
|
||||
for (ObjectGuid const& guid : NPC_ChampionGUIDs)
|
||||
if (Creature* c = instance->GetCreature(guid))
|
||||
c->DespawnOrUnsummon(15000);
|
||||
NPC_ChampionGUIDs.clear();
|
||||
@@ -455,7 +455,7 @@ public:
|
||||
{
|
||||
EncounterStatus = IN_PROGRESS;
|
||||
AchievementTimer = 0;
|
||||
for (ObjectGuid guid : NPC_ChampionGUIDs)
|
||||
for (ObjectGuid const& guid : NPC_ChampionGUIDs)
|
||||
if (Creature* c = instance->GetCreature(guid))
|
||||
if (!c->IsInCombat())
|
||||
if (Unit* target = c->SelectNearestTarget(200.0f))
|
||||
@@ -1093,7 +1093,7 @@ public:
|
||||
}
|
||||
case EVENT_CHAMPIONS_ATTACK:
|
||||
{
|
||||
for (ObjectGuid guid : NPC_ChampionGUIDs)
|
||||
for (ObjectGuid const& guid : NPC_ChampionGUIDs)
|
||||
if (Creature* c = instance->GetCreature(guid))
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
@@ -1493,7 +1493,7 @@ public:
|
||||
case INSTANCE_PROGRESS_JARAXXUS_DEAD:
|
||||
if( Creature* c = instance->GetCreature(NPC_BarrettGUID) )
|
||||
c->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
for (ObjectGuid guid : NPC_ChampionGUIDs)
|
||||
for (ObjectGuid const& guid : NPC_ChampionGUIDs)
|
||||
if (Creature* c = instance->GetCreature(guid))
|
||||
c->DespawnOrUnsummon();
|
||||
NPC_ChampionGUIDs.clear();
|
||||
|
||||
@@ -958,7 +958,7 @@ public:
|
||||
|
||||
TSSpawnPos.GetAngle(&TSMidPos);
|
||||
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* c = pInstance->instance->GetCreature(guid))
|
||||
{
|
||||
float hx, hy, hz, ho;
|
||||
@@ -974,7 +974,7 @@ public:
|
||||
if (pInstance)
|
||||
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_SINDRAGOSA_GUID)))
|
||||
{
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* s = pInstance->instance->GetCreature(guid))
|
||||
if (s->IsAlive())
|
||||
Unit::Kill(c, s);
|
||||
@@ -1026,7 +1026,7 @@ public:
|
||||
me->SetFacingTo(5.26f);
|
||||
me->SetOrientation(5.26f);
|
||||
me->SetHomePosition(*me);
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* c = pInstance->instance->GetCreature(guid))
|
||||
{
|
||||
c->SetFacingTo(5.26f);
|
||||
@@ -1056,7 +1056,7 @@ public:
|
||||
float offset = frand(0.0f, 10.0f);
|
||||
c->GetMotionMaster()->MovePoint(0, 1047.0f + offset, 118.0f + offset, 628.2f);
|
||||
c->SetHomePosition(*me);
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* s = pInstance->instance->GetCreature(guid))
|
||||
{
|
||||
if (s->GetEntry() == NPC_FALLEN_WARRIOR)
|
||||
|
||||
@@ -369,7 +369,7 @@ public:
|
||||
{
|
||||
// shouldn't be casted on any victim of summoned mobs
|
||||
bool valid = true;
|
||||
for (ObjectGuid const guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* c = ObjectAccessor::GetCreature(*me, guid))
|
||||
if (c->IsAlive() && c->GetVictim() && c->GetVictim()->GetGUID() == plr->GetGUID())
|
||||
{
|
||||
|
||||
@@ -191,7 +191,7 @@ public:
|
||||
|
||||
bool IsValidExplosionTarget(WorldObject* target)
|
||||
{
|
||||
for (ObjectGuid const guid : blockList)
|
||||
for (ObjectGuid const& guid : blockList)
|
||||
{
|
||||
if (target->GetGUID() == guid)
|
||||
return false;
|
||||
|
||||
@@ -291,7 +291,7 @@ public:
|
||||
events.RepeatEvent(30000);
|
||||
else
|
||||
{
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* sv = ObjectAccessor::GetCreature(*me, guid))
|
||||
{
|
||||
sv->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
|
||||
@@ -2321,7 +2321,7 @@ public:
|
||||
|
||||
void RemoveAll()
|
||||
{
|
||||
for (ObjectGuid guid : FlameList)
|
||||
for (ObjectGuid const& guid : FlameList)
|
||||
if (Creature* c = ObjectAccessor::GetCreature(*me, guid))
|
||||
c->DespawnOrUnsummon();
|
||||
FlameList.clear();
|
||||
|
||||
@@ -1219,7 +1219,7 @@ void instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounter
|
||||
{
|
||||
if (!_leviathanVehicles.empty())
|
||||
{
|
||||
for (ObjectGuid guid : _leviathanVehicles)
|
||||
for (ObjectGuid const& guid : _leviathanVehicles)
|
||||
if (Creature* cr = instance->GetCreature(guid))
|
||||
if (Vehicle* veh = cr->GetVehicleKit())
|
||||
veh->Dismiss();
|
||||
|
||||
@@ -209,7 +209,7 @@ public:
|
||||
bool bIsWaterElementsAlive = false;
|
||||
if (!globules.empty())
|
||||
{
|
||||
for (ObjectGuid const guid : globules)
|
||||
for (ObjectGuid const& guid : globules)
|
||||
if (Creature* pTemp = ObjectAccessor::GetCreature(*me, guid))
|
||||
if (pTemp->IsAlive())
|
||||
{
|
||||
|
||||
@@ -124,7 +124,7 @@ public:
|
||||
{
|
||||
bool found = false;
|
||||
if (pInstance)
|
||||
for (ObjectGuid guid : spheres)
|
||||
for (ObjectGuid const& guid : spheres)
|
||||
if (Creature* c = pInstance->instance->GetCreature(guid))
|
||||
if (me->GetDistance(c) < 3.0f)
|
||||
{
|
||||
|
||||
@@ -434,7 +434,7 @@ public:
|
||||
DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, (uint32)GateHealth);
|
||||
DoUpdateWorldState(WORLD_STATE_VH_WAVE_COUNT, (uint32)WaveCount);
|
||||
|
||||
for (ObjectGuid guid : GO_ActivationCrystalGUID)
|
||||
for (ObjectGuid const& guid : GO_ActivationCrystalGUID)
|
||||
if (GameObject* go = instance->GetGameObject(guid))
|
||||
{
|
||||
HandleGameObject(ObjectGuid::Empty, false, go); // not used yet
|
||||
@@ -528,7 +528,7 @@ public:
|
||||
CLEANED = true;
|
||||
|
||||
// reset defense crystals
|
||||
for (ObjectGuid guid : GO_ActivationCrystalGUID)
|
||||
for (ObjectGuid const& guid : GO_ActivationCrystalGUID)
|
||||
if (GameObject* go = instance->GetGameObject(guid))
|
||||
{
|
||||
HandleGameObject(ObjectGuid::Empty, false, go); // not used yet
|
||||
@@ -555,7 +555,7 @@ public:
|
||||
NPC_PortalGUID.Clear();
|
||||
|
||||
// remove trash
|
||||
for (ObjectGuid guid : trashMobs)
|
||||
for (ObjectGuid const& guid : trashMobs)
|
||||
if (Creature* c = instance->GetCreature(guid))
|
||||
c->DespawnOrUnsummon();
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ public:
|
||||
void CheckSummons()
|
||||
{
|
||||
bool allow = true;
|
||||
for (ObjectGuid guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
if (Creature* cr = ObjectAccessor::GetCreature(*me, guid))
|
||||
if (cr->IsAlive())
|
||||
allow = false;
|
||||
|
||||
@@ -176,7 +176,7 @@ public:
|
||||
if (action == ACTION_BIND_MINIONS)
|
||||
me->CastSpell(me, SPELL_ARTRUIS_BINDING, true);
|
||||
|
||||
for (ObjectGuid const guid : summons)
|
||||
for (ObjectGuid const& guid : summons)
|
||||
{
|
||||
Creature* minion = ObjectAccessor::GetCreature(*me, guid);
|
||||
if (minion && minion->IsAlive())
|
||||
|
||||
Reference in New Issue
Block a user