diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 1bc61d5d..bb6d7211 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -884,6 +884,20 @@ void PlayerManager::OnClientSettingsChanged(edict_t *pEntity) const char *new_name = info ? info->GetName() : engine->GetClientConVarValue(client, "name"); const char *old_name = pPlayer->m_Name.c_str(); +#if SOURCE_ENGINE >= SE_LEFT4DEAD + const char *networkid_force; + if ((networkid_force = engine->GetClientConVarValue(client, "networkid_force")) && networkid_force[0] != '\0') + { + unsigned long long *steamId = (unsigned long long *)engine->GetClientSteamID(pEntity); + unsigned int accountId = steamId ? (*steamId & 0xFFFFFFFF) : 0; + g_Logger.LogMessage("\"%s<%d><STEAM_1:%d:%d><>\" has bad networkid (id \"%s\") (ip \"%s\")", + new_name, pPlayer->GetUserId(), accountId & 1, accountId >> 1, networkid_force, pPlayer->GetIPAddress()); + + pPlayer->Kick("NetworkID spoofing detected."); + RETURN_META(MRES_IGNORED); + } +#endif + if (strcmp(old_name, new_name) != 0) { AdminId id = g_Admins.FindAdminByIdentity("name", new_name);