From e7621ad8a77ab8704554c9d1863e22551226dd87 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Fri, 30 May 2014 17:27:56 -0400 Subject: [PATCH] Fix inconsistencies with OnClientDisconnected calls (bug 5988) --- core/PlayerManager.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 7ccd7a43..97140f1b 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -746,8 +746,10 @@ void PlayerManager::OnSourceModLevelEnd() { #if SOURCE_ENGINE == SE_DOTA OnClientDisconnect(m_Players[i].GetIndex(), 0); + OnClientDisconnect_Post(m_Players[i].GetIndex(), 0); #else OnClientDisconnect(m_Players[i].GetEdict()); + OnClientDisconnect_Post(m_Players[i].GetEdict()); #endif } } @@ -791,13 +793,6 @@ void PlayerManager::OnClientDisconnect(edict_t *pEntity) pListener = (*iter); pListener->OnClientDisconnecting(client); } - - InvalidatePlayer(pPlayer); - - if (m_ListenClient == client) - { - m_ListenClient = 0; - } } #if SOURCE_ENGINE == SE_DOTA @@ -810,6 +805,19 @@ void PlayerManager::OnClientDisconnect_Post(edict_t *pEntity) { int client = IndexOfEdict(pEntity); #endif + CPlayer *pPlayer = &m_Players[client]; + if (!pPlayer->IsConnected()) + { + /* We don't care, prevent a double call */ + return; + } + + InvalidatePlayer(pPlayer); + + if (m_ListenClient == client) + { + m_ListenClient = 0; + } cell_t res;