| 1392 | } |
| 1393 | |
| 1394 | int PlayerManager::GetClientOfUserId(int userid) |
| 1395 | { |
| 1396 | if (userid < 0 || userid > USHRT_MAX) |
| 1397 | { |
| 1398 | return 0; |
| 1399 | } |
| 1400 | |
| 1401 | int client = m_UserIdLookUp[userid]; |
| 1402 | |
| 1403 | /* Verify the userid. The cache can get messed up with older |
| 1404 | * Valve engines. :TODO: If this gets fixed, do an old engine |
| 1405 | * check before invoking this backwards compat code. |
| 1406 | */ |
| 1407 | if (client) |
| 1408 | { |
| 1409 | CPlayer *player = GetPlayerByIndex(client); |
| 1410 | if (player && player->IsConnected()) |
| 1411 | { |
| 1412 | int realUserId = engine->GetPlayerUserId(player->GetEdict()); |
| 1413 | if (realUserId == userid) |
| 1414 | { |
| 1415 | return client; |
| 1416 | } |
| 1417 | } |
| 1418 | } |
| 1419 | |
| 1420 | /* If we can't verify the userid, we have to do a manual loop */ |
| 1421 | CPlayer *player; |
| 1422 | for (int i = 1; i <= m_maxClients; i++) |
| 1423 | { |
| 1424 | player = GetPlayerByIndex(i); |
| 1425 | if (!player || !player->IsConnected()) |
| 1426 | { |
| 1427 | continue; |
| 1428 | } |
| 1429 | if (engine->GetPlayerUserId(player->GetEdict()) == userid) |
| 1430 | { |
| 1431 | m_UserIdLookUp[userid] = i; |
| 1432 | return i; |
| 1433 | } |
| 1434 | } |
| 1435 | |
| 1436 | return 0; |
| 1437 | } |
| 1438 | |
| 1439 | void PlayerManager::AddClientListener(IClientListener *listener) |
| 1440 | { |
no test coverage detected