1.1 --- a/core/ConVarManager.cpp Thu Feb 27 20:22:01 2014 -0500
1.2 +++ b/core/ConVarManager.cpp Thu Feb 27 19:55:13 2014 -0700
1.3 @@ -123,6 +123,8 @@
1.4 }
1.5 #endif
1.6
1.7 + g_Players.AddClientListener(this);
1.8 +
1.9 #if SOURCE_ENGINE >= SE_ORANGEBOX
1.10 SH_ADD_HOOK(ICvar, CallGlobalChangeCallbacks, icvar, SH_STATIC(OnConVarChanged), false);
1.11 #else
1.12 @@ -194,6 +196,8 @@
1.13 }
1.14 #endif
1.15
1.16 + g_Players.RemoveClientListener(this);
1.17 +
1.18 #if SOURCE_ENGINE >= SE_ORANGEBOX
1.19 SH_REMOVE_HOOK(ICvar, CallGlobalChangeCallbacks, icvar, SH_STATIC(OnConVarChanged), false);
1.20 #else
1.21 @@ -310,6 +314,22 @@
1.22 }
1.23 }
1.24
1.25 +void ConVarManager::OnClientDisconnected(int client)
1.26 +{
1.27 + /* Remove convar queries for this client that haven't returned results yet */
1.28 + for (List<ConVarQuery>::iterator iter = m_ConVarQueries.begin(); iter != m_ConVarQueries.end();)
1.29 + {
1.30 + ConVarQuery &query = (*iter);
1.31 + if (query.client == client)
1.32 + {
1.33 + iter = m_ConVarQueries.erase(iter);
1.34 + continue;
1.35 + }
1.36 +
1.37 + ++iter;
1.38 + }
1.39 +}
1.40 +
1.41 void ConVarManager::OnHandleDestroy(HandleType_t type, void *object)
1.42 {
1.43 }
1.44 @@ -628,7 +648,7 @@
1.45 return InvalidQueryCvarCookie;
1.46 }
1.47
1.48 - ConVarQuery query = {cookie, pCallback, (cell_t)hndl};
1.49 + ConVarQuery query = {cookie, pCallback, (cell_t)hndl, IndexOfEdict(pPlayer)};
1.50 m_ConVarQueries.push_back(query);
1.51 #endif
1.52