From fb9c6c96c73a12f261cfde3743337e83692ea426 Mon Sep 17 00:00:00 2001 From: Spp Date: Wed, 18 Aug 2010 22:50:04 +0200 Subject: Dungeon Finder: Some optimizations to find algorithm * Select first match as valid (Before it was storing all possible and later selecting one) * Add some checks to make sure no unnecessary calcs are done --HG-- branch : trunk --- src/server/game/DungeonFinding/LFGMgr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 01c8d6fe8fe..3c707d275cc 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -632,12 +632,15 @@ bool LFGMgr::RemoveFromQueue(uint64 guid) /// Proposals found. void LFGMgr::FindNewGroups(LfgGuidList &check, LfgGuidList all, LfgProposalList *proposals) { + if (!check.size() || check.size() > MAXGROUPSIZE) + return; + uint8 numPlayers = 0; uint8 numLfgGroups = 0; uint32 groupLowGuid = 0; LfgQueueInfoMap pqInfoMap; LfgQueueInfoMap::iterator itQueue; - for (LfgGuidList::const_iterator it = check.begin(); it != check.end(); ++it) + for (LfgGuidList::const_iterator it = check.begin(); it != check.end() && numLfgGroups < 2 && numPlayers <= MAXGROUPSIZE; ++it) { itQueue = m_QueueInfoMap.find(*it); if (itQueue == m_QueueInfoMap.end()) @@ -670,7 +673,7 @@ void LFGMgr::FindNewGroups(LfgGuidList &check, LfgGuidList all, LfgProposalList if (numPlayers < MAXGROUPSIZE) { - while (!all.empty() && check.size() < MAXGROUPSIZE) + while (!all.empty() && !proposals->size()) { check.push_back(all.front()); all.pop_front(); -- cgit v1.2.3