/** Checks que main queue to try to form a Lfg group. Returns first match found (if any) @param[in] check List of guids trying to match with other groups @param[in] all List of all other guids in main queue to match against @return LfgCompatibility type of compatibility between groups */ LfgCompatibility LFGQueue::FindNewGroups(LfgGuidList& check, LfgGuidList& all) { std::string strGuids = ConcatenateGuids(check); LfgCompatibility compatibles = GetCompatibles(strGuids); TC_LOG_DEBUG("lfg.queue.match.check", "Guids: (%s): %s - all(%s)", strGuids.c_str(), GetCompatibleString(compatibles), ConcatenateGuids(all).c_str()); if (compatibles == LFG_COMPATIBILITY_PENDING) // Not previously cached, calculate compatibles = CheckCompatibility(check); if (compatibles == LFG_COMPATIBLES_BAD_STATES && sLFGMgr->AllQueued(check)) { TC_LOG_DEBUG("lfg.queue.match.check", "Guids: (%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; // Try to match with queued groups while (!all.empty()) { check.push_back(all.front()); all.pop_front(); LfgCompatibility subcompatibility = FindNewGroups(check, all); if (subcompatibility == LFG_COMPATIBLES_MATCH) return LFG_COMPATIBLES_MATCH; check.pop_back(); } return compatibles; }
/** Checks que main queue to try to form a Lfg group. Returns first match found (if any) @param[in] check List of guids trying to match with other groups @param[in] all List of all other guids in main queue to match against @return LfgCompatibility type of compatibility between groups */ LfgCompatibility LfgQueue::FindNewGroups(LfgGuidList& check, LfgGuidList& all) { std::string strGuids = ConcatenateGuids(check); 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 compatibles = CheckCompatibility(check); if (compatibles != LFG_COMPATIBLES_WITH_LESS_PLAYERS) return compatibles; // Try to match with queued groups while (!all.empty()) { check.push_back(all.front()); all.pop_front(); LfgCompatibility subcompatibility = FindNewGroups(check, all); if (subcompatibility == LFG_COMPATIBLES_MATCH) return LFG_COMPATIBLES_MATCH; check.pop_back(); } return compatibles; }