PHP Code:
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Black List"
#define VERSION "1.0"
#define AUTHOR "Dias"
new const user_file[] = "black_list.ini"
new Array:BlackList
new cvar_blacklist_handle
new cvar_blacklist_bantype, cvar_blacklist_bantime
new filename[256]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
get_configsdir(filename,255)
format(filename,255,"%s/black_list.ini",filename)
cvar_blacklist_handle = register_cvar("bl_handle", "1") // 1 = Kick | 2 = Ban
cvar_blacklist_bantype = register_cvar("bl_ban_type", "2") // 1 = Ban SteamID | 2 = Ban IP
cvar_blacklist_bantime = register_cvar("bl_ban_time", "30") // Minutes
register_clcmd("amx_blacklist", "addblacklist", ADMIN_BAN, "amx_blacklist ^"STEAMID>^"")
}
public plugin_precache()
{
BlackList = ArrayCreate(32, 1)
read_user_from_file()
}
public addblacklist(id){
if ( !access(id, ADMIN_BAN) )
{
console_print(id, "You don't have access to this command.")
return PLUGIN_HANDLED
}
new arg1[32]
read_args(arg1, 31)
remove_quotes(arg1)
if (!arg1[0]){
console_print(id, "Usage: amx_blacklist ^"SteamID^"")
return PLUGIN_HANDLED
}
new writedata[32]
formatex(writedata,31,"%s",arg1)
write_file(filename,writedata)
if(is_user_connected(id))
console_print(id, "[BlackList] %s have been blacklisted", writedata)
new players[32], pnum
get_players(players, pnum, "ch")
for (new i = 0; i < 32; i++){
new szAuthId[34];
get_user_authid( i, szAuthId, charsmax(szAuthId) );
if(equali(szAuthId, writedata)){
server_cmd("kick #%d ^"You have been blacklisted.^"", get_user_userid(i));
}
}
read_user_from_file()
return PLUGIN_HANDLED
}
public read_user_from_file()
{
static user_file_url[64], config_dir[32]
get_configsdir(config_dir, sizeof(config_dir))
format(user_file_url, sizeof(user_file_url), "%s/%s", config_dir, user_file)
if(!file_exists(user_file_url))
return
static file_handle, line_data[64], line_count
file_handle = fopen(user_file_url, "rt")
while(!feof(file_handle))
{
fgets(file_handle, line_data, sizeof(line_data))
replace(line_data, charsmax(line_data), "^n", "")
if(!line_data[0] || line_data[0] == ';')
continue
ArrayPushString(BlackList, line_data)
line_count++
}
fclose(file_handle)
}
public client_connect(id)
{
check_and_handle(id)
}
public client_infochanged(id)
{
check_and_handle(id)
}
public check_and_handle(id)
{
static name[64], steamid[64], Data[32]
get_user_name(id, name, sizeof(name))
get_user_authid(id, steamid, sizeof(steamid))
for(new i = 0; i < ArraySize(BlackList); i++)
{
ArrayGetString(BlackList, i, Data, sizeof(Data))
if(equal(name, Data) || equal(steamid, Data))
{
if(get_pcvar_num(cvar_blacklist_handle) == 1) // Kick
{
server_cmd("amx_kick %s BlackList", name)
client_printcolor(0, "!g[AMX]!y !t%s!y is in Black List. Kick !t%s!y !!!", name, name)
} else if(get_pcvar_num(cvar_blacklist_handle) == 2) { // Ban
if(get_pcvar_num(cvar_blacklist_bantype) == 1) // Ban SteamID
{
server_cmd("amx_ban %s BlackList %i", steamid, get_pcvar_num(cvar_blacklist_bantime))
} else if(get_pcvar_num(cvar_blacklist_bantype) == 2) { // BanIP
server_cmd("amx_banip %s BlackList %i", name, get_pcvar_num(cvar_blacklist_bantime))
}
client_printcolor(0, "!g[AMX]!y !t%s!y is in Black List. Ban !t%s!y | %i minutes !!!", name, name, get_pcvar_num(cvar_blacklist_bantime))
}
}
}
}
stock client_printcolor(const id, const input[], any:...)
{
new iCount = 1, iPlayers[32]
static szMsg[191]
vformat(szMsg, charsmax(szMsg), input, 3)
replace_all(szMsg, 190, "!g", "^4")
replace_all(szMsg, 190, "!y", "^1")
replace_all(szMsg, 190, "!t", "^3")
if(id) iPlayers[0] = id
else get_players(iPlayers, iCount, "ch")
for (new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
write_byte(iPlayers[i])
write_string(szMsg)
message_end()
}
}
}
amx_blacklist "STEAMID" or "Name" should add that name or STEAMID to blacklist. If it's a steamid and the user is connected it will kick the user immediately. I didn't bother to add a kick mechanic for a name block. It will kick the user with that nickname when map changes/they rejoin.