diff options
Diffstat (limited to 'src/server/game/DungeonFinding/LFGMgr.cpp')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 1aef979c51f..3bf2eb25b95 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -286,7 +286,7 @@ void LFGMgr::Update(uint32 diff) RestoreState(guid, "Remove Obsolete RoleCheck"); SendLfgRoleCheckUpdate(guid, roleCheck); if (guid == roleCheck.leader) - SendLfgJoinResult(guid, LfgJoinResultData(LFG_JOIN_FAILED, LFG_ROLECHECK_MISSING_ROLE)); + SendLfgJoinResult(guid, LfgJoinResultData(LFG_JOIN_ROLE_CHECK_FAILED, LFG_ROLECHECK_MISSING_ROLE)); } RestoreState(itRoleCheck->first, "Remove Obsolete RoleCheck"); @@ -343,10 +343,10 @@ void LFGMgr::Update(uint32 diff) if (uint64 gguid = GetGroup(guid)) { SetState(gguid, LFG_STATE_PROPOSAL); - SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid))); + SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)), true); } else - SendLfgUpdatePlayer(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid))); + SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)), false); SendLfgUpdateProposal(guid, proposal); } @@ -495,7 +495,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const if (Player* plrg = itr->GetSource()) { if (!plrg->GetSession()->HasPermission(RBAC_PERM_JOIN_DUNGEON_FINDER)) - joinData.result = LFG_JOIN_PARTY_NOT_MEET_REQS; + joinData.result = LFG_JOIN_INTERNAL_ERROR; if (plrg->HasAura(LFG_SPELL_DUNGEON_DESERTER)) joinData.result = LFG_JOIN_PARTY_DESERTER; else if (plrg->HasAura(LFG_SPELL_DUNGEON_COOLDOWN)) @@ -558,7 +558,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const // if we have lockmap then there are no compatible dungeons GetCompatibleDungeons(dungeons, players, joinData.lockmap); if (dungeons.empty()) - joinData.result = grp ? LFG_JOIN_PARTY_NOT_MEET_REQS : LFG_JOIN_NOT_MEET_REQS; + joinData.result = grp ? LFG_JOIN_INTERNAL_ERROR : LFG_JOIN_NOT_MEET_REQS; } } @@ -605,7 +605,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const if (Player* plrg = itr->GetSource()) { uint64 pguid = plrg->GetGUID(); - plrg->GetSession()->SendLfgUpdateParty(updateData); + plrg->GetSession()->SendLfgUpdateStatus(updateData, true); SetState(pguid, LFG_STATE_ROLECHECK); if (!isContinue) SetSelectedDungeons(pguid, dungeons); @@ -636,7 +636,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const } // Send update to player player->GetSession()->SendLfgJoinResult(joinData); - player->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_JOIN_QUEUE, dungeons, comment)); + player->GetSession()->SendLfgUpdateStatus(LfgUpdateData(LFG_UPDATETYPE_JOIN_QUEUE, dungeons, comment), false); SetState(gguid, LFG_STATE_QUEUED); SetRoles(guid, roles); debugNames.append(player->GetName()); @@ -675,14 +675,14 @@ void LFGMgr::LeaveLfg(uint64 guid) for (LfgGuidSet::const_iterator it = players.begin(); it != players.end(); ++it) { SetState(*it, LFG_STATE_NONE); - SendLfgUpdateParty(*it, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE)); + SendLfgUpdateStatus(*it, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), true); } } else { LFGQueue& queue = GetQueue(guid); queue.RemoveFromQueue(guid); - SendLfgUpdatePlayer(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE)); + SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), false); SetState(guid, LFG_STATE_NONE); } break; @@ -771,6 +771,10 @@ void LFGMgr::UpdateRoleCheck(uint64 gguid, uint64 guid /* = 0 */, uint8 roles /* else dungeons = roleCheck.dungeons; + LfgJoinResult joinResult = LFG_JOIN_FAILED; + if (roleCheck.state == LFG_ROLECHECK_MISSING_ROLE || roleCheck.state == LFG_ROLECHECK_WRONG_ROLES) + joinResult = LFG_JOIN_ROLE_CHECK_FAILED; + LfgJoinResultData joinData = LfgJoinResultData(LFG_JOIN_FAILED, roleCheck.state); for (LfgRolesMap::const_iterator it = roleCheck.roles.begin(); it != roleCheck.roles.end(); ++it) { @@ -787,12 +791,12 @@ void LFGMgr::UpdateRoleCheck(uint64 gguid, uint64 guid /* = 0 */, uint8 roles /* case LFG_ROLECHECK_FINISHED: SetState(pguid, LFG_STATE_QUEUED); SetRoles(pguid, it->second); - SendLfgUpdateParty(pguid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, GetComment(pguid))); + SendLfgUpdateStatus(pguid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, GetComment(pguid)), true); break; default: if (roleCheck.leader == pguid) SendLfgJoinResult(pguid, joinData); - SendLfgUpdateParty(pguid, LfgUpdateData(LFG_UPDATETYPE_ROLECHECK_FAILED)); + SendLfgUpdateStatus(pguid, LfgUpdateData(LFG_UPDATETYPE_ROLECHECK_FAILED), true); RestoreState(pguid, "Rolecheck Failed"); break; } @@ -1056,16 +1060,16 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept) if (gguid) { waitTime = int32((joinTime - queue.GetJoinTime(gguid)) / IN_MILLISECONDS); - SendLfgUpdateParty(pguid, updateData); + SendLfgUpdateStatus(pguid, updateData, false); } else { waitTime = int32((joinTime - queue.GetJoinTime(pguid)) / IN_MILLISECONDS); - SendLfgUpdatePlayer(pguid, updateData); + SendLfgUpdateStatus(pguid, updateData, false); } updateData.updateType = LFG_UPDATETYPE_REMOVED_FROM_QUEUE; - SendLfgUpdatePlayer(pguid, updateData); - SendLfgUpdateParty(pguid, updateData); + SendLfgUpdateStatus(pguid, updateData, true); + SendLfgUpdateStatus(pguid, updateData, false); // Update timers uint8 role = GetRoles(pguid); @@ -1157,10 +1161,10 @@ void LFGMgr::RemoveProposal(LfgProposalContainer::iterator itProposal, LfgUpdate if (gguid != guid) { RestoreState(it->second.group, "Proposal Fail (someone in group didn't accepted)"); - SendLfgUpdateParty(guid, updateData); + SendLfgUpdateStatus(guid, updateData, true); } else - SendLfgUpdatePlayer(guid, updateData); + SendLfgUpdateStatus(guid, updateData, false); } else { @@ -1169,10 +1173,10 @@ void LFGMgr::RemoveProposal(LfgProposalContainer::iterator itProposal, LfgUpdate if (gguid != guid) { SetState(gguid, LFG_STATE_QUEUED); - SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid))); + SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)), true); } else - SendLfgUpdatePlayer(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid))); + SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)), false); } } @@ -1733,7 +1737,7 @@ void LFGMgr::RemoveGroupData(uint64 guid) if (state != LFG_STATE_PROPOSAL) { SetState(*it, LFG_STATE_NONE); - SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE)); + SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), true); } } GroupsStore.erase(it); @@ -1813,16 +1817,10 @@ void LFGMgr::SendLfgRoleCheckUpdate(uint64 guid, LfgRoleCheck const& roleCheck) player->GetSession()->SendLfgRoleCheckUpdate(roleCheck); } -void LFGMgr::SendLfgUpdatePlayer(uint64 guid, LfgUpdateData const& data) -{ - if (Player* player = ObjectAccessor::FindPlayer(guid)) - player->GetSession()->SendLfgUpdatePlayer(data); -} - -void LFGMgr::SendLfgUpdateParty(uint64 guid, LfgUpdateData const& data) +void LFGMgr::SendLfgUpdateStatus(uint64 guid, LfgUpdateData const& data, bool party) { if (Player* player = ObjectAccessor::FindPlayer(guid)) - player->GetSession()->SendLfgUpdateParty(data); + player->GetSession()->SendLfgUpdateStatus(data, party); } void LFGMgr::SendLfgJoinResult(uint64 guid, LfgJoinResultData const& data) @@ -1854,18 +1852,22 @@ bool LFGMgr::IsLfgGroup(uint64 guid) return guid && IS_GROUP_GUID(guid) && GroupsStore[guid].IsLfgGroup(); } -LFGQueue& LFGMgr::GetQueue(uint64 guid) +uint8 LFGMgr::GetQueueId(uint64 guid) { - uint8 queueId = 0; if (IS_GROUP_GUID(guid)) { LfgGuidSet const& players = GetPlayers(guid); uint64 pguid = players.empty() ? 0 : (*players.begin()); if (pguid) - queueId = GetTeam(pguid); + return GetTeam(pguid); } - else - queueId = GetTeam(guid); + + return GetTeam(guid); +} + +LFGQueue& LFGMgr::GetQueue(uint64 guid) +{ + uint8 queueId = GetQueueId(guid); return QueuesStore[queueId]; } @@ -1880,6 +1882,12 @@ bool LFGMgr::AllQueued(LfgGuidList const& check) return true; } +time_t LFGMgr::GetQueueJoinTime(uint64 guid) +{ + LFGQueue& queue = GetQueue(guid); + return queue.GetJoinTime(guid); +} + // Only for debugging purposes void LFGMgr::Clean() { |