Core/Dungeon Finder: Remove disconnected players from LFG queue

Fix LFG queue issues by removing disconnected players from LFG queue and their party with them.

(cherry picked from commit b7f9836d22)
This commit is contained in:
jackpoz
2015-09-01 22:33:55 +02:00
committed by Carbenium
parent f570a0064c
commit adf6d968ed
4 changed files with 6 additions and 3 deletions

View File

@@ -583,7 +583,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
@param[in] guid Player or group guid
*/
void LFGMgr::LeaveLfg(ObjectGuid guid)
void LFGMgr::LeaveLfg(ObjectGuid guid, bool disconnected)
{
ObjectGuid gguid = guid.IsParty() ? guid : GetGroup(guid);
@@ -644,7 +644,7 @@ void LFGMgr::LeaveLfg(ObjectGuid guid)
break;
case LFG_STATE_DUNGEON:
case LFG_STATE_FINISHED_DUNGEON:
if (guid != gguid) // Player
if (guid != gguid && !disconnected) // Player
SetState(guid, LFG_STATE_NONE);
break;
}

View File

@@ -405,7 +405,7 @@ class LFGMgr
/// Join Lfg with selected roles, dungeons and comment
void JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, std::string const& comment);
/// Leaves lfg
void LeaveLfg(ObjectGuid guid);
void LeaveLfg(ObjectGuid guid, bool disconnected = false);
// LfgQueue
/// Get last lfg state (NONE, DUNGEON or FINISHED_DUNGEON)

View File

@@ -44,6 +44,8 @@ void LFGPlayerScript::OnLogout(Player* player)
player->GetSession()->SendLfgLfrList(false);
sLFGMgr->LeaveLfg(player->GetGUID());
}
else if (player->GetSession()->PlayerDisconnected())
sLFGMgr->LeaveLfg(player->GetGUID(), true);
}
void LFGPlayerScript::OnLogin(Player* player, bool /*loginFirst*/)

View File

@@ -807,6 +807,7 @@ class WorldSession
bool PlayerLogout() const { return m_playerLogout; }
bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; }
bool PlayerDisconnected() const { return !m_Socket; }
void ReadAddonsInfo(ByteBuffer& data);
void SendAddonsInfo();