diff options
author | Shocker <shocker@freakz.ro> | 2011-09-15 21:28:40 +0300 |
---|---|---|
committer | Shocker <shocker@freakz.ro> | 2011-09-15 21:28:40 +0300 |
commit | 7afb179185340e87762166edc91bb253d5c9796a (patch) | |
tree | 47bcadb956285c41626a17dbe48d80cb431c2917 /src/server/game/Pools/PoolMgr.cpp | |
parent | 8504a0107ea679e8cac7f87cccb05b1d2bedd8b4 (diff) |
Misc/Util: Add a template function for returning a random element from any container
Diffstat (limited to 'src/server/game/Pools/PoolMgr.cpp')
-rwxr-xr-x | src/server/game/Pools/PoolMgr.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 1107762a220..c5d2deef376 100755 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -476,10 +476,9 @@ void PoolGroup<Quest>::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 { do { - ActivePoolObjects::iterator itr = currentQuests.begin(); - std::advance(itr, urand(0, currentQuests.size()-1)); - newQuests.insert(*itr); - currentQuests.erase(*itr); + uint32 questId = SelectRandomContainerElement(currentQuests); + newQuests.insert(questId); + currentQuests.erase(questId); } while (newQuests.size() < limit && !currentQuests.empty()); // failsafe } @@ -489,12 +488,11 @@ void PoolGroup<Quest>::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 // activate <limit> random quests do { - ActivePoolObjects::iterator itr = newQuests.begin(); - std::advance(itr, urand(0, newQuests.size()-1)); - spawns.ActivateObject<Quest>(*itr, poolId); - PoolObject tempObj(*itr, 0.0f); + uint32 questId = SelectRandomContainerElement(newQuests); + spawns.ActivateObject<Quest>(questId, poolId); + PoolObject tempObj(questId, 0.0f); Spawn1Object(&tempObj); - newQuests.erase(itr); + newQuests.erase(questId); --limit; } while (limit && !newQuests.empty()); |