57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#include <sourcemod>
 | 
						|
#include <connect>
 | 
						|
 | 
						|
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] = "";
 | 
						|
}
 | 
						|
 |