core/PlayerManager.cpp
changeset 719 f34a4aae1483
parent 717 6f9b8bab7ae8
child 720 893a8c83aee3
     1.1 --- a/core/PlayerManager.cpp	Wed May 02 17:49:23 2007 +0000
     1.2 +++ b/core/PlayerManager.cpp	Wed May 02 19:14:26 2007 +0000
     1.3 @@ -108,6 +108,9 @@
     1.4  	}
     1.5  	m_onActivate->Execute(NULL);
     1.6  	m_onActivate2->Execute(NULL);
     1.7 +
     1.8 +	static int g_userid_test = 1;
     1.9 +	int client = GetClientOfUserId(++g_userid_test);
    1.10  }
    1.11  
    1.12  void PlayerManager::RunAuthChecks()
    1.13 @@ -437,7 +440,46 @@
    1.14  
    1.15  int PlayerManager::GetClientOfUserId(int userid)
    1.16  {
    1.17 -	return (userid < 0 || userid > USHRT_MAX) ? 0 : m_UserIdLookUp[userid];
    1.18 +	if (userid < 0 || userid > USHRT_MAX)
    1.19 +	{
    1.20 +		return 0;
    1.21 +	}
    1.22 +	
    1.23 +	int client = m_UserIdLookUp[userid];
    1.24 +
    1.25 +	/* Verify the userid.  The cache can get messed up with older
    1.26 +	 * Valve engines.  :TODO: If this gets fixed, do an old engine 
    1.27 +	 * check before invoking this backwards compat code.
    1.28 +	 */
    1.29 +	if (client)
    1.30 +	{
    1.31 +		CPlayer *player = GetPlayerByIndex(client);
    1.32 +		if (player && player->IsConnected())
    1.33 +		{
    1.34 +			int realUserId = engine->GetPlayerUserId(player->GetEdict());
    1.35 +			if (realUserId == userid)
    1.36 +			{
    1.37 +				return client;
    1.38 +			}
    1.39 +		}
    1.40 +	}
    1.41 +
    1.42 +	/* If we can't verify the userid, we have to do a manual loop */
    1.43 +	CPlayer *player;
    1.44 +	for (int i = 1; i <= m_maxClients; i++)
    1.45 +	{
    1.46 +		player = GetPlayerByIndex(i);
    1.47 +		if (!player || !player->IsConnected())
    1.48 +		{
    1.49 +			continue;
    1.50 +		}
    1.51 +		if (engine->GetPlayerUserId(player->GetEdict()) == userid)
    1.52 +		{
    1.53 +			return i;
    1.54 +		}
    1.55 +	}
    1.56 +
    1.57 +	return 0;
    1.58  }
    1.59  
    1.60  void PlayerManager::AddClientListener(IClientListener *listener)