aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.cpp87
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.h1
2 files changed, 38 insertions, 50 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 3c4dc24e973..bdbdb159c36 100755
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -465,48 +465,6 @@ void LFGMgr::AddGuidToNewQueue(uint64 guid)
}
/// <summary>
-/// Creates a QueueInfo and adds it to the queue. Tries to match a group before joining.
-/// </summary>
-/// <param name="uint64">Player or group guid</param>
-/// <param name="LfgRolesMap*">Player roles</param>
-/// <param name="LfgDungeonSet*">Selected dungeons</param>
-void LFGMgr::AddToQueue(uint64 guid, LfgRolesMap* roles, LfgDungeonSet* dungeons)
-{
- if (!roles || !roles->size())
- {
- sLog.outError("LFGMgr::AddToQueue: [" UI64FMTD "] has no roles", guid);
- return;
- }
-
- if (!dungeons || !dungeons->size())
- {
- sLog.outError("LFGMgr::AddToQueue: [" UI64FMTD "] has no dungeons", guid);
- return;
- }
-
- LfgQueueInfo* pqInfo = new LfgQueueInfo();
- pqInfo->joinTime = time_t(time(NULL));
- for (LfgRolesMap::const_iterator it = roles->begin(); it != roles->end(); ++it)
- {
- if (pqInfo->tanks && it->second & ROLE_TANK)
- --pqInfo->tanks;
- else if (pqInfo->healers && it->second & ROLE_HEALER)
- --pqInfo->healers;
- else
- --pqInfo->dps;
- }
- for (LfgRolesMap::const_iterator itRoles = roles->begin(); itRoles != roles->end(); ++itRoles)
- pqInfo->roles[itRoles->first] = itRoles->second;
-
- for (LfgDungeonSet::const_iterator it = dungeons->begin(); it != dungeons->end(); ++it)
- pqInfo->dungeons.insert(*it);
-
- sLog.outDebug("LFGMgr::AddToQueue: [" UI64FMTD "] joining with %u members", guid, uint32(pqInfo->roles.size()));
- m_QueueInfoMap[guid] = pqInfo;
- AddGuidToNewQueue(guid);
-}
-
-/// <summary>
/// Removes the player/group from all queues
/// </summary>
/// <param name="uint64">Player or group guid</param>
@@ -692,23 +650,36 @@ void LFGMgr::Join(Player* plr)
plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_JOIN_PROPOSAL);
}
UpdateRoleCheck(grp, plr);
+ std::string dungeonsstr = ConcatenateDungeons(dungeons);
+ sLog.outDebug("LFGMgr::Join: [" UI64FMTD "] joined with %u members. dungeons: %s", guid, grp ? grp->GetMembersCount() : 1, dungeonsstr.c_str());
+ dungeons = NULL;
}
else
{
plr->GetSession()->SendLfgJoinResult(LFG_JOIN_OK, 0);
plr->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_JOIN_PROPOSAL);
plr->SetLfgState(LFG_STATE_LFG);
- LfgRolesMap roles;
- roles[plr->GetGUIDLow()] = plr->GetLfgRoles();
- AddToQueue(plr->GetGUID(), &roles, dungeons);
- roles.clear();
+ LfgQueueInfo* pqInfo = new LfgQueueInfo();
+ pqInfo->joinTime = time_t(time(NULL));
+ pqInfo->roles[plr->GetGUIDLow()] = plr->GetLfgRoles();
+ uint8 roles = plr->GetLfgRoles();
+ if (roles & ROLE_TANK)
+ --pqInfo->tanks;
+ else if (roles & ROLE_HEALER)
+ --pqInfo->healers;
+ else
+ --pqInfo->dps;
+ for (LfgDungeonSet::const_iterator it = dungeons->begin(); it != dungeons->end(); ++it)
+ pqInfo->dungeons.insert(*it);
+ m_QueueInfoMap[guid] = pqInfo;
+ AddGuidToNewQueue(guid);
+ std::string dungeonsstr = ConcatenateDungeons(dungeons);
+ sLog.outDebug("LFGMgr::Join: [" UI64FMTD "] joined with %u members. dungeons: %s", guid, grp ? grp->GetMembersCount() : 1, dungeonsstr.c_str());
}
}
if (dungeons)
{
- std::string dungeonsstr = ConcatenateDungeons(dungeons);
- sLog.outDebug("LFGMgr::Join: [" UI64FMTD "] joined with %u members. dungeons: %s", guid, grp ? grp->GetMembersCount() : 1, dungeonsstr.c_str());
dungeons->clear();
delete dungeons;
}
@@ -1254,7 +1225,25 @@ void LFGMgr::UpdateRoleCheck(Group* grp, Player* plr /* = NULL*/)
if (pRoleCheck->result == LFG_ROLECHECK_FINISHED && pRoleCheck->dungeons.size())
{
grp->SetLfgQueued(true);
- AddToQueue(grp->GetGUID(), &pRoleCheck->roles, &pRoleCheck->dungeons);
+ LfgQueueInfo* pqInfo = new LfgQueueInfo();
+ pqInfo->joinTime = time_t(time(NULL));
+ for (LfgRolesMap::const_iterator it = check_roles.begin(); it != check_roles.end(); ++it)
+ {
+ if (pqInfo->tanks && it->second & ROLE_TANK)
+ --pqInfo->tanks;
+ else if (pqInfo->healers && it->second & ROLE_HEALER)
+ --pqInfo->healers;
+ else
+ --pqInfo->dps;
+ }
+ for (LfgRolesMap::const_iterator itRoles = pRoleCheck->roles.begin(); itRoles != pRoleCheck->roles.end(); ++itRoles)
+ pqInfo->roles[itRoles->first] = itRoles->second;
+
+ for (LfgDungeonSet::const_iterator it = pRoleCheck->dungeons.begin(); it != pRoleCheck->dungeons.end(); ++it)
+ pqInfo->dungeons.insert(*it);
+
+ m_QueueInfoMap[grp->GetGUID()] = pqInfo;
+ AddGuidToNewQueue(grp->GetGUID());
}
if (pRoleCheck->result != LFG_ROLECHECK_INITIALITING)
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 0be43bc8e8b..b62d56cc85a 100755
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -275,7 +275,6 @@ class LFGMgr
private:
void Cleaner();
void AddGuidToNewQueue(uint64 guid);
- void AddToQueue(uint64 guid, LfgRolesMap* roles, LfgDungeonSet* dungeons);
bool RemoveFromQueue(uint64 guid);
void RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType type);