#include #include char g_sIPs[MAXPLAYERS+1][32]; ConVar g_hCVar_MaximumConnectionsPerIP; //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnPluginStart() { g_hCVar_MaximumConnectionsPerIP = CreateConVar("sm_max_connections_per_ip", "3", "", FCVAR_PROTECTED, true, 1.0); AutoExecConfig(true); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public EConnect OnClientPreConnectEx(const char[] sName, char sPassword[255], const char[] sIP, const char[] sSteam32ID, char sRejectReason[255]) { int iCount = 1; for(int i = 1; i <= MaxClients; i++) { if (StrEqual(sIP, g_sIPs[i], false)) { iCount++; if (iCount > g_hCVar_MaximumConnectionsPerIP.IntValue) { LogAction(i, -1, "\"%L\" is using too many connections. (IP: %s)", i, sIP); sRejectReason = "Too many connections from your IP"; return k_OnClientPreConnectEx_Reject; } } } return k_OnClientPreConnectEx_Accept; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnClientConnected(int client) { char sIP[32] GetClientIP(client, sIP, sizeof(sIP)); g_sIPs[client] = sIP; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnClientDisconnect(int client) { g_sIPs[client] = ""; }