diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-09-02 02:36:22 -0700 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-09-02 02:36:22 -0700 |
commit | 62b68f5a6cfe2ba57fdf27e3c0e89ef369e75347 (patch) | |
tree | 79ced610242e5b6776d4afe9a7630ade2299ffee /src | |
parent | ce003baea9bf3f7b85158fe25c72691b94b8cb69 (diff) | |
parent | 46852a3808955ab3fb5d3044c9f0c85d8223c986 (diff) |
Merge pull request #7613 from Elron103/pull-requests
Core/Scripting: Fix DoAction function of SummonList incorrectly removing entries in SummonList
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/ScriptedAI/ScriptedCreature.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index ba0a94d2590..aa46d555b7d 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -41,8 +41,10 @@ class SummonList : public std::list<uint64> template <class Predicate> void DoAction(int32 info, Predicate& predicate, uint16 max = 0) { - Trinity::Containers::RandomResizeList<uint64, Predicate>(*this, predicate, max); - for (iterator i = begin(); i != end(); ) + // We need to use a copy of SummonList here, otherwise original SummonList would be modified + std::list<uint64> listCopy = *this; + Trinity::Containers::RandomResizeList<uint64, Predicate>(listCopy, predicate, max); + for (iterator i = listCopy.begin(); i != listCopy.end(); ) { Creature* summon = Unit::GetCreature(*me, *i++); if (summon && summon->IsAIEnabled) |