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)