Jump to content

Our Partners
living the best life..

[Plugin] - Anti-steam Multiple 1.0.0


Recommended Posts

746661430_descrcare.png.43af1ee7c3ea1d8b

  • - Nume plugin: Anti-steam Multiple 1.0.0
  • - Autor: nu se cunoaște autorul
  • - Engine  : 
  • - Versiune: v1.0.0
  • - Informatii: Acest plugin limitează numărul de STEAMID-uri admise pe același ip.
  • - Download: verifică mai jos.
  • - Instalare: 

 

  • 1. Compliati fisierul SIDM.sma 
  • 2. Fisierul steambonus.amxx il puneti in addons/amxmodx/plugins
  • 3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma: SIDM.amxx
#include <amxmodx>
#include <sqlx>

#define PLUGIN "ANTI MULTIPLE STEAMID"
#define VERSION "1.0"
#define AUTHOR "Unknow (edited by Andy)"

#pragma semicolon 1

#define STEAMID_PER_IP 2
#define SAVE_LASTDAYS 1
#define REASON "STEAMID MULTIPLICAT"

//#define WHITELIST 

#if defined WHITELIST
new const g_szWhiteList[][] =
{
	"123.0.0.0/8",      
	"123.123.0.0/24",      
	"123.123.123.123"
};
enum _:WhitelistData
{
	NET_IP,
	NET_MASK
};
new Array:g_aWhitelist;
#endif

new const DATABASE[] = "addons/amxmodx/data/steamidlimiter.db";

new Handle:g_Tuple, g_szQuery[256];

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	SQLite_Init();
	
	#if defined WHITELIST
	new eNetData[WhitelistData];
	g_aWhitelist = ArrayCreate(WhitelistData);
	
	for( new i; i < sizeof(g_szWhiteList); i++ )
	{
		net_to_long( g_szWhiteList[i], eNetData[NET_IP], eNetData[NET_MASK] );
		ArrayPushArray( g_aWhitelist, eNetData );
	}
	#endif
}
SQLite_Init()
{
	SQL_SetAffinity("sqlite");
	
	if(!file_exists(DATABASE))
	{
		new file = fopen(DATABASE, "w");
		if(!file)
		{
			new szMsg[128]; formatex(szMsg, charsmax(szMsg), "%s file not found and cant be created.", DATABASE);
			set_fail_state(szMsg);
		}
		fclose(file);
	}
	
	g_Tuple = SQL_MakeDbTuple("", "", "", DATABASE, 0);
	
	formatex(g_szQuery, charsmax(g_szQuery), 
	"CREATE TABLE IF NOT EXISTS `players`( \
	id			INTEGER		PRIMARY KEY,\
	ip			TEXT		NOT NULL, \
	steamid		TEXT		NOT NULL,\
	lastseen	INTEGER)");
	SQL_ThreadQuery(g_Tuple, "QueryHandleCreate", g_szQuery);
	
	formatex(g_szQuery, charsmax(g_szQuery), "DELETE FROM `players` WHERE lastseen<%d", get_systime() - SAVE_LASTDAYS * 86400);
	SQL_ThreadQuery(g_Tuple, "QueryHandleCreate", g_szQuery);
}
public QueryHandleCreate(failstate, Handle:query, error[], errnum, data[], size)
{
	if(failstate != TQUERY_SUCCESS)
	{
		log_amx("SQL QueryHandleCreate error: %s", error);
	}
}
public client_authorized(id)
{
	if(is_user_steam(id) || is_user_bot(id) || is_user_hltv(id)) return;
	
	new szPlayerIp[32]; get_user_ip(id, szPlayerIp, charsmax(szPlayerIp), 1);
	new szPlayerSteamid[32]; get_user_authid(id, szPlayerSteamid, charsmax(szPlayerSteamid));
	
	if(containi(szPlayerSteamid, "lan") != -1) return;
	
	#if defined WHITELIST
	new eNetData[WhitelistData];
	for( new i; i < sizeof(g_szWhiteList); i++ )
	{
		ArrayGetArray( g_aWhitelist, i, eNetData );
		if( eNetData[NET_IP] == ip_to_long(szPlayerIp) & eNetData[NET_MASK] ) return;
	}
	#endif
	
	new data[1]; data[0] = id;
	formatex(g_szQuery, charsmax(g_szQuery), "SELECT * FROM `players` WHERE ip='%s' LIMIT %d", szPlayerIp, STEAMID_PER_IP);
	SQL_ThreadQuery(g_Tuple, "QueryHandleCheckPlayer", g_szQuery, data, sizeof(data));
}
public QueryHandleCheckPlayer(failstate, Handle:query, error[], errnum, data[], size)
{
	if(failstate != TQUERY_SUCCESS)
	{
		log_amx("SQL QueryHandleCheckPlayer error: %s", error);
		return;
	}
	
	new id = data[0];
	new szPlayerIp[32]; get_user_ip(id, szPlayerIp, charsmax(szPlayerIp), 1);
	new szPlayerSteamid[32]; get_user_authid(id, szPlayerSteamid, charsmax(szPlayerSteamid));
	
	if(SQL_MoreResults(query))
	{
		new index = SQL_ReadResult(query, 0);
		new szLoadedIp[32]; SQL_ReadResult(query, 1, szLoadedIp, charsmax(szLoadedIp));
		new szLoadedSteamid[32]; SQL_ReadResult(query, 2, szLoadedSteamid, charsmax(szLoadedSteamid));
		
		if(equali(szPlayerSteamid, szLoadedSteamid))
		{
			UpdatePlayer(index);
		}
		else
		{
			#if STEAMID_PER_IP == 1
			server_cmd("kick #%d %s", get_user_userid(id), REASON);
			#else
			new count = 1;
			
			SQL_NextRow(query);
			while(SQL_MoreResults(query))
			{
				count++;
				index = SQL_ReadResult(query, 0);
				SQL_ReadResult(query, 1, szLoadedIp, charsmax(szLoadedIp));
				SQL_ReadResult(query, 2, szLoadedSteamid, charsmax(szLoadedSteamid));
				
				if(equali(szPlayerSteamid, szLoadedSteamid))
				{
					UpdatePlayer(index);
					return;
				}
				else if(count == STEAMID_PER_IP)
				{
					server_cmd("kick #%d %s", get_user_userid(id), REASON);
					return;
				}
				
				SQL_NextRow(query);
			}
			if(count < STEAMID_PER_IP)
			{
				InsertPlayer(szPlayerIp, szPlayerSteamid);
			}
			#endif
		}
	}
	else
	{
		InsertPlayer(szPlayerIp, szPlayerSteamid);
	}
}
InsertPlayer(szPlayerIp[], szPlayerSteamid[])
{
	formatex(g_szQuery, charsmax(g_szQuery), "INSERT INTO `players`(ip, steamid, lastseen) VALUES ('%s', '%s', %d)", szPlayerIp, szPlayerSteamid, get_systime());
	SQL_ThreadQuery(g_Tuple, "QueryHandleInsertPlayer", g_szQuery);
}
public QueryHandleInsertPlayer(failstate, Handle:query, error[], errnum, data[], size)
{
	if(failstate != TQUERY_SUCCESS)
	{
		log_amx("SQL QueryHandleInsertPlayer error: %s", error);
	}
}
UpdatePlayer(index)
{
	formatex(g_szQuery, charsmax(g_szQuery), "UPDATE `players` SET lastseen=%d WHERE id=%d", get_systime(), index);
	SQL_ThreadQuery(g_Tuple, "QueryHandleUpdatePlayer", g_szQuery);
}
public QueryHandleUpdatePlayer(failstate, Handle:query, error[], errnum, data[], size)
{
	if(failstate != TQUERY_SUCCESS)
	{
		log_amx("SQL QueryHandleUpdatePlayer error: %s", error);
	}
}
stock bool:is_user_steam(id)
{
	static dp_pointer;
	if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
	{
		server_cmd("dp_clientinfo %d", id);
		server_exec();
		return (get_pcvar_num(dp_pointer) == 2) ? true : false;
	}
	return false;
}

/*-- Modified and simplified 'IP converter stocks' by Zetex --*/
// Gets net and mask as LONG from subnet.
stock net_to_long( net_string[], &net, &mask ) {
	new i, ip[16];

	i = copyc( ip, charsmax(ip), net_string, '/' );
	mask = i ? cidr_to_long( net_string[i + 1] ) : 0xFFFFFFFF; /* mask /32, IP itself */

	net = ip_to_long(ip) & mask;
}
// Converts mask to LONG. Returns unsigned long.
stock cidr_to_long( mask_string[] ) {
	new mask = str_to_num(mask_string);
	new result = (1 << 31) >> (mask - 1);

	return result;
}
// Converts IP to LONG. Returns unsigned long.
stock ip_to_long( ip_string[] ) {
	new right[16], part[4], octet, ip = 0;
	strtok( ip_string, part, 3, right, 15, '.' );

	for( new i = 0; i < 4; i++ ) {
		octet = str_to_num(part);

		ip += octet;

		if( i == 3 )
			break;

		strtok( right, part, 3, right, 15, '.' );
		ip = ip << 8;
	}

	return ip;
}

 

Detașamentul de Operațiuni Speciale „Azov

____.gif

Romanian Flag on GIFs - 22 Animated Images of Waving Flags

Link to comment
Share on other sites

  • hevvo locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...