diff options
| author | jackpoz <giacomopoz@gmail.com> | 2015-09-01 22:33:55 +0200 |
|---|---|---|
| committer | jackpoz <giacomopoz@gmail.com> | 2015-09-01 22:33:55 +0200 |
| commit | b7f9836d223925802115f45ad2c2c7eeb9bb00a4 (patch) | |
| tree | b91e24848ef0738dc4280f260dca347abc2b5d17 /src | |
| parent | fc17d1a9410d96437151b4139a1757e35a7fb635 (diff) | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.h | 2 | ||||
| -rw-r--r-- | src/server/game/DungeonFinding/LFGScripts.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 1 |
4 files changed, 6 insertions, 3 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 59eedaaffed..1f52623461c 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -585,7 +585,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.IsGroup() ? guid : GetGroup(guid); @@ -646,7 +646,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; } diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index fda9a8b7ce9..90fbc36a114 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -399,7 +399,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) diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 852eb7d8c5f..b1ae61cef11 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -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*/) diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 87a40657e24..3753f796768 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -256,6 +256,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(WorldPacket& data); void SendAddonsInfo(); |
