core/ConVarManager.cpp
changeset 4257 fbe69cd9afdf
parent 4139 de7d1cd00703
     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