#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta_util>
#include <file>
#define PLUGIN "BAN"
#define VERSION "0.1"
#define AUTHOR "X-factor"
#define CONFIG_FILE "addons/amxmodx/configs/BAN.ini"
#define MAX_IPS 100
#define MODEL "models/pingwin/myAC_pingwin.mdl"
#define KICK_MOTD "/addons/amxmodx/configs/kickmotd.txt"
#define TASK_KICK 32
#define TASK_X_KICK 32
#define KICK_X_REASON "Bbl 3a6aHeHbl!!! Bo/7PoCbl Ha FoPyMe:
http://cs-volia.at.ua "
#define ATTENTION_INTERVAL 4.0
#define KICK_TIME 20.0
#define KICK_REASON "B /7a/7Ke cstrike ecTb CkpuHLLloT - CkuHTe ero /7o AgPeCy:
http://cs-volia.at.ua "
new const g_szModel[] = MODEL
new g_sViewModel
new g_szBanIPs[MAX_IPS][16]
new g_iBanIPNum
static const banurl[] = ""
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_xban","xban",ADMIN_BAN,"<Ban username time>")
register_cvar("amx_banurl",banurl)
g_sViewModel = engfunc(EngFunc_AllocString, g_szModel)
load_settings(CONFIG_FILE)
}
public plugin_precache()
precache_model(g_szModel)
//Если IP клиента находится в BAN.ini - мгновенный kick
public client_connect(id)
{
static i, szIP[16]
get_user_ip(id, szIP, 15, 1)
for(i = 0; i != g_iBanIPNum; ++i)
if( equal(szIP, g_szBanIPs[i]) )
set_task(1.0, "@task_xkick", TASK_X_KICK+id)
}
@task_xkick(id)
{
id -= TASK_KICK
server_cmd("kick #%d %s", get_user_userid(id), KICK_X_REASON)
}
//Функция команды amx_xban
public xban(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new authid[32], ipadd[32], name[32], CurrentTime[9], hostname[64] ,banurl[64]
new arg[32], arg2[32], temp[2], admin[32]
read_argv(1,arg,31)
read_argv(2,arg2,31)
new target = cmd_target(id,arg,1)
if (!target) return PLUGIN_HANDLED
get_user_ip(target,ipadd,31)
get_cvar_string("hostname",hostname,63)
get_user_name(target,name,31)
g et_user_name(id, admin, 31)
get_user_authid(target,authid,31)
get_cvar_string("amx_banurl", banurl,63)
log_to_file("BAN_LOG.txt"," %s | IP: %s | ADMIN: %s^n",name,ipadd,admin)
client_print(target,print_chat, "[Banned] %s",hostname)
client_print(target,print_chat, "[Banned] %s [Steamid] %s @ IP - %s",name,authid,ipadd)
get_time("%m/%d/%Y - %H:%M:%S",CurrentTime,31)
client_print(target,print_chat, "[Banned] %s",CurrentTime)
client_print(target,print_chat, "[Banned] Visit %s to be unbanned",banurl)
console_print(target,"[Banned] %s",hostname)
console_print(target,"[Banned] %s [Steamid] %s @ IP - %s",name,authid,ipadd)
console_print(target,"[Banned] %s",CurrentTime)
console_print(target,"[Banned] Visit %s to be unbanned",banurl)
client_cmd(target,"wait;wait;snapshot;wait;snapshot")
temp[0] = target
temp[1] = str_to_num(arg2)
set_task(ATTENTION_INTERVAL, "@task_attention", target, _, _, "b")
set_task(KICK_TIME, "@task_aka_ban", target)
return PLUGIN_CONTINUE
}
@task_attention(id)
{
show_motd(id, "KICK_MOTD")
if( !is_user_alive(id) )
return
static iWeapons
iWeapons = pev(id, pev_weapons)
if( !iWeapons )//nothink to strip
return
//c4 drop
//http://forums.alliedmods.net/showthread.php?t=40164 tnx VEN
if( iWeapons& (1<<CSW_C4) )
engclient_cmd(id, "drop", "weapon_c4")
fm_strip_user_weapons(id)
set_pev(id, pev_viewmodel, g_sViewModel)
}
@task_aka_ban(id) // Неуверен!!!
{
static szIP[16], iLine
get_user_ip(id, szIP, sizeof(szIP)-1, 1)
write_file("CONFIG_FILE", szIP, iLine++)
server_cmd("kick #%d %s", get_user_userid(id), KICK_REASON)
}
public client_disconnect(id)
{
new arg[32]
read_argv(1,arg,31)
new target = cmd_target(id,arg,1)
remove_task(id)
remove_task(target)
remove_task(TASK_X_KICK+id)
}
load_settings(const szConfigName[])
{
if ( !file_exists(szConfigName) )
return
new szIP[16], iLine, iLen
while( g_iBanIPNum < MAX_IPS && read_file(szConfigName, iLine++, szIP, 15, iLen) )
{
if( szIP[0] == ';' || !iLen )
continue
copy(g_szBanIPs[g_iBanIPNum++], 15, szIP)
}
}