Skip to content

Commit 44ddb8c

Browse files
ssj17vegetakillerwife
authored andcommitted
Fix erasing items in loop
Fixes a loop where WorldObjects were removed from a vector while iterating in it, leading to undesired behaviour.
1 parent c16e339 commit 44ddb8c

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

src/game/DBScripts/ScriptMgr.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,9 +1521,10 @@ std::pair<bool, bool> ScriptAction::GetScriptProcessTargets(WorldObject* origina
15211521
buddies.push_back(closest);
15221522
}
15231523
if (m_script->searchRadiusOrGuid > 0)
1524-
for (WorldObject* buddy : buddies)
1525-
if (!buddy->IsWithinDist(origin, m_script->searchRadiusOrGuid))
1526-
buddies.erase(std::remove(buddies.begin(), buddies.end(), buddy), buddies.end());
1524+
buddies.erase(std::remove_if(buddies.begin(), buddies.end(), [&](WorldObject* buddy)
1525+
{
1526+
return !buddy->IsWithinDist(origin, m_script->searchRadiusOrGuid);
1527+
}), buddies.end());
15271528

15281529
if (buddies.empty() && m_script->command != SCRIPT_COMMAND_TERMINATE_SCRIPT)
15291530
{

0 commit comments

Comments
 (0)