size_t IsAuthIdConnected(char *authID) { IGamePlayer *player; const char *authString; for (int playerIndex = playerhelpers->GetMaxClients()+1; --playerIndex > 0;) { player = playerhelpers->GetGamePlayer(playerIndex); if (player == NULL || !player->IsAuthorized()) { continue; } if (!strcmp(player->GetAuthString(), authID) || !strcmp(player->GetSteam2Id(), authID) || !strcmp(player->GetSteam3Id(), authID) ) { return playerIndex; } } return 0; }
static cell_t SteamIdToLocal(IPluginContext *pCtx, int index, AuthIdType authType, cell_t local_addr, size_t bytes, bool validate) { pCtx->StringToLocal(local_addr, bytes, "STEAM_ID_STOP_IGNORING_RETVALS"); if ((index < 1) || (index > playerhelpers->GetMaxClients())) { return pCtx->ThrowNativeError("Client index %d is invalid", index); } IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(index); if (!pPlayer->IsConnected()) { return pCtx->ThrowNativeError("Client %d is not connected", index); } const char *authstr; switch (authType) { case AuthIdType::Engine: authstr = pPlayer->GetAuthString(validate); if (!authstr || authstr[0] == '\0') { return 0; } pCtx->StringToLocal(local_addr, bytes, authstr); break; case AuthIdType::Steam2: authstr = pPlayer->GetSteam2Id(validate); if (!authstr || authstr[0] == '\0') { return 0; } pCtx->StringToLocal(local_addr, bytes, authstr); break; case AuthIdType::Steam3: authstr = pPlayer->GetSteam3Id(validate); if (!authstr || authstr[0] == '\0') { return 0; } pCtx->StringToLocal(local_addr, bytes, authstr); break; case AuthIdType::SteamId64: { if (pPlayer->IsFakeClient() || gamehelpers->IsLANServer()) { return 0; } uint64_t steamId = pPlayer->GetSteamId64(validate); if (steamId == 0) { return 0; } char szAuth[64]; snprintf(szAuth, sizeof(szAuth), "%" PRIu64, steamId); pCtx->StringToLocal(local_addr, bytes, szAuth); } break; } return 1; }