aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/DungeonFinding/LFGQueue.cpp
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-10-29 13:58:48 +0100
committerSpp <spp@jorge.gr>2012-10-29 13:58:48 +0100
commit14027262eefa9299298a7b6a532781e48ca60651 (patch)
tree578d598dda0f3eb28e7cf3e4026f5e0491b0f70d /src/server/game/DungeonFinding/LFGQueue.cpp
parentd2ba73d97f12da64b76895b7335500d1fc993a37 (diff)
Core/Dungeon Finder: Add some more debug msgs and restore LFG group structure at server load.
Diffstat (limited to 'src/server/game/DungeonFinding/LFGQueue.cpp')
-rw-r--r--src/server/game/DungeonFinding/LFGQueue.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp
index 131a3e7a992..fadafa4da29 100644
--- a/src/server/game/DungeonFinding/LFGQueue.cpp
+++ b/src/server/game/DungeonFinding/LFGQueue.cpp
@@ -244,9 +244,16 @@ LfgCompatibility LfgQueue::FindNewGroups(LfgGuidList& check, LfgGuidList& all)
LfgCompatibility compatibles = GetCompatibles(strGuids);
sLog->outDebug(LOG_FILTER_LFG, "LFGQueue::FindNewGroup: (%s): %s - all(%s)", strGuids.c_str(), GetCompatibleString(compatibles), ConcatenateGuids(all).c_str());
- if (compatibles == LFG_COMPATIBILITY_PENDING || compatibles == LFG_COMPATIBLES_BAD_STATES) // Not previously cached, calculate
+ if (compatibles == LFG_COMPATIBILITY_PENDING) // Not previously cached, calculate
compatibles = CheckCompatibility(check);
+ if (compatibles == LFG_COMPATIBLES_BAD_STATES && sLFGMgr->AllQueued(check))
+ {
+ sLog->outDebug(LOG_FILTER_LFG, "LFGQueue::FindNewGroup: (%s) compatibles (cached) changed from bad states to match", strGuids.c_str());
+ SetCompatibles(strGuids, LFG_COMPATIBLES_MATCH);
+ return LFG_COMPATIBLES_MATCH;
+ }
+
if (compatibles != LFG_COMPATIBLES_WITH_LESS_PLAYERS)
return compatibles;
@@ -366,7 +373,7 @@ LfgCompatibility LfgQueue::CheckCompatibility(LfgGuidList check)
for (itPlayer = proposalRoles.begin(); itPlayer != proposalRoles.end(); ++itPlayer)
{
if (itRoles->first == itPlayer->first)
- sLog->outDebug(LOG_FILTER_LFG, "LFGQueue::CheckCompatibility: ERROR! Player multiple times in queue! [" UI64FMTD "]", itRoles->first);
+ sLog->outError(LOG_FILTER_LFG, "LFGQueue::CheckCompatibility: ERROR! Player multiple times in queue! [" UI64FMTD "]", itRoles->first);
else if (sLFGMgr->HasIgnore(itRoles->first, itPlayer->first))
break;
}
@@ -559,23 +566,24 @@ std::string LfgQueue::DumpQueueInfo() const
if (IS_GROUP(guid))
{
groups++;
- if (Group const* group = sGroupMgr->GetGroupByGUID(GUID_LOPART(guid)))
- playersInGroup += group->GetMembersCount();
- else
- playersInGroup += 2; // Shouldn't happen but just in case
+ playersInGroup += sLFGMgr->GetPlayerCount(guid);
}
else
players++;
}
}
std::ostringstream o;
- o << "Queued Players: " << players << "(in group: " << playersInGroup << ") Groups: " << groups << "\n";
+ o << "Queued Players: " << players << " (in group: " << playersInGroup << ") Groups: " << groups << "\n";
return o.str();
}
-std::string LfgQueue::DumpCompatibleInfo() const
+std::string LfgQueue::DumpCompatibleInfo(bool full /* = false */) const
{
std::ostringstream o;
o << "Compatible Map size: " << m_CompatibleMap.size() << "\n";
+ if (full)
+ for (LfgCompatibleMap::const_iterator itr = m_CompatibleMap.begin(); itr != m_CompatibleMap.end(); ++itr)
+ o << "(" << itr->first << "): " << GetCompatibleString(itr->second) << "\n";
+
return o.str();
}