From 40c2674d490ebfa579b6b22e8aa7d2fd5e9dffd7 Mon Sep 17 00:00:00 2001 From: Asher Baker Date: Sat, 9 Jun 2012 20:00:55 -0400 Subject: [PATCH] Worked around possible admin detection issues on newer engines (bug 5327, r=psychonic). --- core/PlayerManager.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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><>\" 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);