Kod php:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define PLUGIN_NAME "Advanced Bans"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "Exolent"
#pragma semicolon 1
#define BANLIST_INTERVAL 10
#define UNBAN_INTERVAL 5.0
new Array:g_names;
new Array:g_steamids;
new Array:g_banlengths;
new Array:g_unbantimes;
new Array:g_reasons;
new Array:g_admin_names;
new Array:g_admin_steamids;
new g_total_bans;
new g_ban_file[64];
new ab_website;
new ab_immunity;
new g_unban_ent;
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_cvar("advanced_bans", PLUGIN_VERSION, FCVAR_SPONLY);
register_dictionary("advanced_bans.txt");
register_concmd("amx_ban", "CmdBan", ADMIN_BAN, "<nick, #userid, authid> <time in minutes> <reason>");
register_concmd("amx_banip", "CmdBanIp", ADMIN_BAN, "<nick, #userid, authid> <time in minutes> <reason>");
register_concmd("amx_addban", "CmdAddBan", ADMIN_BAN, "<name> <authid or ip> <time in minutes> <reason>");
register_concmd("amx_unban", "CmdUnban", ADMIN_BAN, "<authid or ip>");
register_concmd("amx_banlist", "CmdBanList", ADMIN_BAN, "[start] -- shows everyone who is banned");
ab_website = register_cvar("ab_website", "");
ab_immunity = register_cvar("ab_immunity", "1");
get_datadir(g_ban_file, sizeof(g_ban_file) - 1);
add(g_ban_file, sizeof(g_ban_file) - 1, "/advanced_bans.txt");
g_names = ArrayCreate(64);
g_steamids = ArrayCreate(64);
g_banlengths = ArrayCreate(1);
g_unbantimes = ArrayCreate(32);
g_reasons = ArrayCreate(128);
g_admin_names = ArrayCreate(64);
g_admin_steamids = ArrayCreate(35);
LoadBans();
new info_target = engfunc(EngFunc_AllocString, "info_target");
do
{
g_unban_ent = engfunc(EngFunc_CreateNamedEntity, info_target);
}
while( !pev_valid(g_unban_ent) );
register_forward(FM_Think, "FwdThink");
set_pev(g_unban_ent, pev_nextthink, get_gametime() + UNBAN_INTERVAL);
}
public client_authorized(client)
{
new authid[35];
get_user_authid(client, authid, sizeof(authid) - 1);
new ip[64];
get_user_ip(client, ip, sizeof(ip) - 1, 1);
new banned_authid[64], bool:is_ip;
for( new i = 0; i < g_total_bans; i++ )
{
ArrayGetString(g_steamids, i, banned_authid, sizeof(banned_authid) - 1);
is_ip = bool:(containi(banned_authid, ".") != -1);
if( is_ip && equal(ip, banned_authid) || !is_ip && equal(authid, banned_authid) )
{
new website[64];
get_pcvar_string(ab_website, website, sizeof(website) - 1);
new name[32], reason[128], unbantime[32], admin_name[32], admin_steamid[64];
ArrayGetString(g_names, i, name, sizeof(name) - 1);
ArrayGetString(g_reasons, i, reason, sizeof(reason) - 1);
new banlength = ArrayGetCell(g_banlengths, i);
ArrayGetString(g_unbantimes, i, unbantime, sizeof(unbantime) - 1);
ArrayGetString(g_admin_names, i, admin_name, sizeof(admin_name) - 1);
ArrayGetString(g_admin_steamids, i, admin_steamid, sizeof(admin_steamid) - 1);
console_print(client, "************************************************");
console_print(client, "%L:", client, "AB_BAN_INFORMATION");
console_print(client, "%L: %s", client, "AB_NAME", name);
console_print(client, "%L: %s", client, is_ip ? "AB_IP" : "AB_STEAMID", banned_authid);
console_print(client, "%L: %s", client, "AB_REASON", reason);
if( banlength > 0 )
{
new length[64];
GetBanTime(banlength, length, sizeof(length) - 1);
console_print(client, "%L: %s", client, "AB_BAN_LENGTH", length);
}
console_print(client, "%L: %s", client, "AB_UNBAN_TIME", unbantime);
console_print(client, "%L: %s", client, "AB_ADMIN_NAME", admin_name);
console_print(client, "%L: %s", client, "AB_ADMIN_STEAMID", admin_steamid);
if( website[0] )
{
console_print(client, "");
console_print(client, "%L", client, "AB_WEBSITE");
console_print(client, "%s", website);
}
console_print(client, "************************************************");
set_task(1.0, "TaskDisconnectPlayer", client);
break;
}
}
}
public CmdBan(client, level, cid)
{
if( !cmd_access(client, level, cid, 4) ) return PLUGIN_HANDLED;
new arg[128];
read_argv(1, arg, sizeof(arg) - 1);
new target = cmd_target(client, arg, GetTargetFlags(client));
if( !target ) return PLUGIN_HANDLED;
new target_authid[35];
get_user_authid(target, target_authid, sizeof(target_authid) - 1);
if( !IsValidAuthid(target_authid) )
{
console_print(client, "[AdvancedBans] %L", client, "AB_NOT_AUTHORIZED");
return PLUGIN_HANDLED;
}
new banned_authid[64];
for( new i = 0; i < g_total_bans; i++ )
{
ArrayGetString(g_steamids, i, banned_authid, sizeof(banned_authid) - 1);
if( equal(target_authid, banned_authid) )
{
console_print(client, "[AdvancedBans] %L", client, "AB_ALREADY_BANNED_STEAMID");
return PLUGIN_HANDLED;
}
}
read_argv(2, arg, sizeof(arg) - 1);
new length = str_to_num(arg);
new unban_time[64];
if( length == 0 )
{
formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN");
}
else
{
GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
}
read_argv(3, arg, sizeof(arg) - 1);
new admin_name[64], target_name[64];
get_user_name(client, admin_name, sizeof(admin_name) - 1);
get_user_name(target, target_name, sizeof(target_name) - 1);
new admin_authid[35];
get_user_authid(client, admin_authid, sizeof(admin_authid) - 1);
AddBan(target_name, target_authid, arg, length, unban_time, admin_name, admin_authid);
new website[64];
get_pcvar_string(ab_website, website, sizeof(website) - 1);
new banlength[64];
if( length > 0 )
{
GetBanTime(length, banlength, sizeof(banlength) - 1);
}
console_print(target, "************************************************");
console_print(target, "%L:", target, "AB_BAN_INFORMATION");
console_print(target, "%L: %s", target, "AB_NAME", target_name);
console_print(target, "%L: %s", target, "AB_STEAMID", target_authid);
console_print(target, "%L: %s", target, "AB_REASON", arg);
if( length > 0 )
{
console_print(target, "%L: %s", target, "AB_BAN_LENGTH", banlength);
}
console_print(target, "%L: %s", target, "AB_UNBAN_TIME", unban_time);
console_print(target, "%L: %s", target, "AB_ADMIN_NAME", admin_name);
console_print(target, "%L: %s", target, "AB_ADMIN_STEAMID", admin_authid);
if( website[0] )
{
console_print(target, "");
console_print(target, "%L", target, "AB_WEBSITE");
console_print(target, "%s", website);
}
console_print(target, "************************************************");
set_task(1.0, "TaskDisconnectPlayer", target);
console_print(client, "************************************************");
console_print(client, "%L:", client, "AB_BAN_INFORMATION");
console_print(client, "%L: %s", client, "AB_NAME", target_name);
console_print(client, "%L: %s", client, "AB_STEAMID", target_authid);
console_print(client, "%L: %s", client, "AB_REASON", arg);
if( length > 0 )
{
console_print(client, "%L: %s", client, "AB_BAN_LENGTH", banlength);
}
console_print(client, "%L: %s", client, "AB_UNBAN_TIME", unban_time);
console_print(client, "************************************************");
Print("^x04[AdvancedBans] %s^x01 :^x03 banned %s. Reason: %s. UnBan Time: %s", admin_name, target_name, arg, unban_time);
log_amx("%s <%s> banned %s <%s> || Reason: ^"%s^" || UnBan Time: %s", admin_name, admin_authid, target_name, target_authid, arg, unban_time);
return PLUGIN_HANDLED;
}
public CmdBanIp(client, level, cid)
{
if( !cmd_access(client, level, cid, 4) ) return PLUGIN_HANDLED;
new arg[128];
read_argv(1, arg, sizeof(arg) - 1);
new target = cmd_target(client, arg, GetTargetFlags(client));
if( !target ) return PLUGIN_HANDLED;
new target_ip[35];
get_user_ip(target, target_ip, sizeof(target_ip) - 1, 1);
new banned_authid[64];
for( new i = 0; i < g_total_bans; i++ )
{
ArrayGetString(g_steamids, i, banned_authid, sizeof(banned_authid) - 1);
if( containi(banned_authid, ".") != -1 && equal(target_ip, banned_authid) )
{
console_print(client, "[AdvancedBans] %L", client, "AB_ALREADY_BANNED_IP");
return PLUGIN_HANDLED;
}
}
read_argv(2, arg, sizeof(arg) - 1);
new length = str_to_num(arg);
new unban_time[64];
if( length == 0 )
{
formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN");
}
else
{
GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
}
read_argv(3, arg, sizeof(arg) - 1);
new admin_name[64], target_name[64];
get_user_name(client, admin_name, sizeof(admin_name) - 1);
get_user_name(target, target_name, sizeof(target_name) - 1);
new admin_authid[35];
get_user_authid(client, admin_authid, sizeof(admin_authid) - 1);
AddBan(target_name, target_ip, arg, length, unban_time, admin_name, admin_authid);
new website[64];
get_pcvar_string(ab_website, website, sizeof(website) - 1);
new banlength[64];
if( length > 0 )
{
GetBanTime(length, banlength, sizeof(banlength) - 1);
}
console_print(target, "************************************************");
console_print(target, "%L:", target, "AB_BAN_INFORMATION");
console_print(target, "%L: %s", target, "AB_NAME", target_name);
console_print(target, "%L: %s", target, "AB_IP", target_ip);
console_print(target, "%L: %s", target, "AB_REASON", arg);
if( length > 0 )
{
console_print(target, "%L: %s", target, "AB_BAN_LENGTH", banlength);
}
console_print(target, "%L: %s", target, "AB_UNBAN_TIME", unban_time);
console_print(target, "%L: %s", target, "AB_ADMIN_NAME", admin_name);
console_print(target, "%L: %s", target, "AB_ADMIN_STEAMID", admin_authid);
if( website[0] )
{
console_print(target, "");
console_print(target, "%L", target, "AB_WEBSITE");
console_print(target, "%s", website);
}
console_print(target, "************************************************");
set_task(1.0, "TaskDisconnectPlayer", target);
console_print(client, "************************************************");
console_print(client, "%L:", client, "AB_BAN_INFORMATION");
console_print(client, "%L: %s", client, "AB_NAME", target_name);
console_print(client, "%L: %s", client, "AB_IP", target_ip);
console_print(client, "%L: %s", client, "AB_REASON", arg);
if( length > 0 )
{
console_print(client, "%L: %s", client, "AB_BAN_LENGTH", banlength);
}
console_print(client, "%L: %s", client, "AB_UNBAN_TIME", unban_time);
console_print(client, "************************************************");
Print("^x04[AdvancedBans] %s^x01 :^x03 banned %s. Reason: %s. UnBan Time: %s", admin_name, target_name, arg, unban_time);
log_amx("%s <%s> banned %s <%s> || Reason: ^"%s^" || UnBan Time: %s", admin_name, admin_authid, target_name, target_ip, arg, unban_time);
return PLUGIN_HANDLED;
}
public CmdAddBan(client, level, cid)
{
if( !cmd_access(client, level, cid, 5) ) return PLUGIN_HANDLED;
new target_name[64], target_authid[35], bantime[10], reason[128];
read_argv(1, target_name, sizeof(target_name) - 1);
read_argv(2, target_authid, sizeof(target_authid) - 1);
read_argv(3, bantime, sizeof(bantime) - 1);
read_argv(4, reason, sizeof(reason) - 1);
new bool:is_ip = bool:(containi(target_authid, ".") != -1);
if( !is_ip && !IsValidAuthid(target_authid) )
{
console_print(client, "[AdvancedBans] %L", client, "AB_INVALID_STEAMID");
console_print(client, "[AdvancedBans] %L", client, "AB_VALID_STEAMID_FORMAT");
return PLUGIN_HANDLED;
}
new length = str_to_num(bantime);
new target = cmd_target(client, target_authid, 0);
if( !target ) target = find_player(is_ip ? "d" : "c", target_authid);
if( is_user_connected(target) )
{
client_cmd(client, "amx_ban ^"%s^" %i ^"%s^"", target_authid, length, reason);
return PLUGIN_HANDLED;
}
new unban_time[64];
if( length == 0 )
{
formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN");
}
else
{
GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
}
new admin_name[64], admin_authid[35];
get_user_name(client, admin_name, sizeof(admin_name) - 1);
get_user_name(client, admin_authid, sizeof(admin_authid) - 1);
AddBan(target_name, target_authid, reason, length, unban_time, admin_name, admin_authid);
console_print(client, "************************************************");
console_print(client, "%L:", client, "AB_BAN_INFORMATION");
console_print(client, "%L: %s", client, "AB_NAME", target_name);
console_print(client, "%L: %s", client, is_ip ? "AB_IP" : "AB_STEAMID", target_authid);
console_print(client, "%L: %s", client, "AB_REASON", reason);
if( length > 0 )
{
new banlength[64];
GetBanTime(length, banlength, sizeof(banlength) - 1);
console_print(client, "%L: %s", client, "AB_BAN_LENGTH", banlength);
}
console_print(client, "%L: %s", client, "AB_UNBAN_TIME", unban_time);
console_print(client, "************************************************");
Print("^x04[AdvancedBans] %s^x01 :^x03 banned %s %s. Reason: %s. UnBan Time: %s", admin_name, is_ip ? "IP" : "SteamID", target_authid, reason, unban_time);
log_amx("%s <%s> banned %s <%s> || Reason: ^"%s^" || UnBan Time: %s", admin_name, admin_authid, target_name, target_authid, reason, unban_time);
return PLUGIN_HANDLED;
}
public CmdUnban(client, level, cid)
{
if( !cmd_access(client, level, cid, 2) ) return PLUGIN_HANDLED;
new arg[35];
read_argv(1, arg, sizeof(arg) - 1);
new banned_authid[64];
for( new i = 0; i < g_total_bans; i++ )
{
ArrayGetString(g_steamids, i, banned_authid, sizeof(banned_authid) - 1);
if( equal(arg, banned_authid) )
{
new admin_name[64];
get_user_name(client, admin_name, sizeof(admin_name) - 1);
new name[32], reason[128];
ArrayGetString(g_names, i, name, sizeof(name) - 1);
ArrayGetString(g_reasons, i, reason, sizeof(reason) - 1);
Print("^x04[AdvancedBans] %s^x01 :^x03 unbanned %s^x01 [%s] [Ban Reason: %s]", admin_name, name, arg, reason);
new authid[35];
get_user_authid(client, authid, sizeof(authid) - 1);
log_amx("%s <%s> unbanned %s <%s> || Ban Reason: ^"%s^"", admin_name, authid, name, arg, reason);
RemoveBan(i);
return PLUGIN_HANDLED;
}
}
console_print(client, "[AdvancedBans] %L", client, "AB_NOT_IN_BAN_LIST", arg);
return PLUGIN_HANDLED;
}
public CmdBanList(client, level, cid)
{
if( !cmd_access(client, level, cid, 1) ) return PLUGIN_HANDLED;
if( !g_total_bans )
{
console_print(client, "[AdvancedBans] %L", client, "AB_NO_BANS");
return PLUGIN_HANDLED;
}
new start;
if( read_argc() > 1 )
{
new arg[5];
read_argv(1, arg, sizeof(arg) - 1);
start = str_to_num(arg) - 1;
if( start >= g_total_bans )
{
start = g_total_bans - 1;
}
}
else
{
start = 0;
}
new last = min(start + BANLIST_INTERVAL, g_total_bans);
console_print(client, "%L", client, "AB_BAN_LIST_NUM", start + 1, last);
new lname[64], lsteamid[64], lip[64], lreason[64], lbanlength[64], lunbantime[64], ladminname[64], ladminsteamid[64];
formatex(lname, sizeof(lname) - 1, "%L", client, "AB_NAME");
formatex(lsteamid, sizeof(lsteamid) - 1, "%L", client, "AB_STEAMID");
formatex(lip, sizeof(lip) - 1, "%L", client, "AB_IP");
formatex(lreason, sizeof(lreason) - 1, "%L", client, "AB_REASON");
formatex(lbanlength, sizeof(lbanlength) - 1, "%L", client, "AB_BAN_LENGTH");
formatex(lunbantime, sizeof(lunbantime) - 1, "%L", client, "AB_UNBAN_TIME");
formatex(ladminname, sizeof(ladminname) - 1, "%L", client, "AB_ADMIN_NAME");
formatex(ladminsteamid, sizeof(ladminsteamid) - 1, "%L", client, "AB_ADMIN_STEAMID");
new name[32], steamid[64], reason[128], banlength, length[64], unbantime[32], admin_name[32], admin_steamid[35];
for( new i = start; i < last; i++ )
{
ArrayGetString(g_names, i, name, sizeof(name) - 1);
ArrayGetString(g_steamids, i, steamid, sizeof(steamid) - 1);
ArrayGetString(g_reasons, i, reason, sizeof(reason) - 1);
banlength = ArrayGetCell(g_banlengths, i);
ArrayGetString(g_unbantimes, i, unbantime, sizeof(unbantime) - 1);
ArrayGetString(g_admin_names, i, admin_name, sizeof(admin_name) - 1);
ArrayGetString(g_admin_steamids, i, admin_steamid, sizeof(admin_steamid) - 1);
console_print(client, "************************************************");
console_print(client, "%s: %s", lname, name);
console_print(client, "%s: %s", containi(steamid, ".") != -1 ? lip : lsteamid, steamid);
console_print(client, "%s: %s", lreason, reason);
if( banlength > 0 )
{
GetBanTime(banlength, length, sizeof(length) - 1);
console_print(client, "%s: %s", lbanlength, length);
}
console_print(client, "%s: %s", lunbantime, unbantime);
console_print(client, "%s: %s", ladminname, admin_name);
console_print(client, "%s: %s", ladminsteamid, admin_steamid);
}
console_print(client, "************************************************");
if( ++last < g_total_bans )
{
console_print(client, "%L", client, "AB_BAN_LIST_NEXT", last);
}
return PLUGIN_HANDLED;
}
public FwdThink(ent)
{
if( ent != g_unban_ent
|| !g_total_bans )
{
return;
}
new _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7];
format_time(_hours, sizeof(_hours) - 1, "%H");
format_time(_minutes, sizeof(_minutes) - 1, "%M");
format_time(_seconds, sizeof(_seconds) - 1, "%S");
format_time(_month, sizeof(_month) - 1, "%m");
format_time(_day, sizeof(_day) - 1, "%d");
format_time(_year, sizeof(_year) - 1, "%Y");
// c = current
// u = unban
new c_hours = str_to_num(_hours);
new c_minutes = str_to_num(_minutes);
new c_seconds = str_to_num(_seconds);
new c_month = str_to_num(_month);
new c_day = str_to_num(_day);
new c_year = str_to_num(_year);
new unban_time[64];
new u_hours, u_minutes, u_seconds, u_month, u_day, u_year;
new name[32], steamid[64], reason[128];
for( new i = 0; i < g_total_bans; i++ )
{
if( ArrayGetCell(g_banlengths, i) == 0 ) continue;
ArrayGetString(g_unbantimes, i, unban_time, sizeof(unban_time) - 1);
replace_all(unban_time, sizeof(unban_time) - 1, ":", " ");
replace_all(unban_time, sizeof(unban_time) - 1, "/", " ");
parse(unban_time,
_hours, sizeof(_hours) - 1,
_minutes, sizeof(_minutes) - 1,
_seconds, sizeof(_seconds) - 1,
_month, sizeof(_month) - 1,
_day, sizeof(_day) - 1,
_year, sizeof(_year) - 1
);
u_hours = str_to_num(_hours);
u_minutes = str_to_num(_minutes);
u_seconds = str_to_num(_seconds);
u_month = str_to_num(_month);
u_day = str_to_num(_day);
u_year = str_to_num(_year);
if( u_year < c_year
|| u_year == c_year && u_month < c_month
|| u_year == c_year && u_month == c_month && u_day < c_day
|| u_year == c_year && u_month == c_month && u_day == c_day && u_hours < c_hours
|| u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes < c_minutes
|| u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes == c_minutes && u_seconds <= c_seconds )
{
ArrayGetString(g_names, i, name, sizeof(name) - 1);
ArrayGetString(g_steamids, i, steamid, sizeof(steamid) - 1);
ArrayGetString(g_reasons, i, reason, sizeof(reason) - 1);
log_amx("Ban time is up for: %s [%s]", name, steamid);
Print("^x04[AdvancedBans]^x03 %s^x01[^x04%s^x01]^x03 ban time is up!^x01 [Ban Reason: %s]", name, steamid, reason);
RemoveBan(i);
i--; // current pos was replaced with another ban, so we need to check it again.
}
}
if( g_total_bans )
{
set_pev(g_unban_ent, pev_nextthink, get_gametime() + UNBAN_INTERVAL);
}
}
public TaskDisconnectPlayer(client)
{
server_cmd("kick #%i ^"You are banned from this server. Check your console^"", get_user_userid(client));
}
AddBan(const target_name[], const target_steamid[], const reason[], const length, const unban_time[], const admin_name[], const admin_steamid[])
{
new f = fopen(g_ban_file, "a+");
fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",
target_steamid,
target_name,
length,
unban_time,
reason,
admin_name,
admin_steamid
);
fclose(f);
ArrayPushString(g_names, target_name);
ArrayPushString(g_steamids, target_steamid);
ArrayPushCell(g_banlengths, length);
ArrayPushString(g_unbantimes, unban_time);
ArrayPushString(g_reasons, reason);
ArrayPushString(g_admin_names, admin_name);
ArrayPushString(g_admin_steamids, admin_steamid);
g_total_bans++;
}
RemoveBan(remove)
{
ArrayDeleteItem(g_names, remove);
ArrayDeleteItem(g_steamids, remove);
ArrayDeleteItem(g_banlengths, remove);
ArrayDeleteItem(g_unbantimes, remove);
ArrayDeleteItem(g_reasons, remove);
ArrayDeleteItem(g_admin_names, remove);
ArrayDeleteItem(g_admin_steamids, remove);
g_total_bans--;
// file will be deleted upon fopen with flags "wt"
//delete_file(g_ban_file);
new f = fopen(g_ban_file, "wt");
new name[32], steamid[64], banlength, unbantime[32], reason[128], admin_name[32], admin_steamid[35];
for( new i = 0; i < g_total_bans; i++ )
{
ArrayGetString(g_names, i, name, sizeof(name) - 1);
ArrayGetString(g_steamids, i, steamid, sizeof(steamid) - 1);
banlength = ArrayGetCell(g_banlengths, i);
ArrayGetString(g_unbantimes, i, unbantime, sizeof(unbantime) - 1);
ArrayGetString(g_reasons, i, reason, sizeof(reason) - 1);
ArrayGetString(g_admin_names, i, admin_name, sizeof(admin_name) - 1);
ArrayGetString(g_admin_steamids, i, admin_steamid, sizeof(admin_steamid) - 1);
fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",
steamid,
name,
banlength,
unbantime,
reason,
admin_name,
admin_steamid
);
}
fclose(f);
}
LoadOldBans(filename[])
{
if( file_exists(filename) )
{
new f = fopen(filename, "rt");
new data[96];
new command[10], minutes[10], steamid[35], length, unban_time[32];
while( !feof(f) )
{
fgets(f, data, sizeof(data) - 1);
if( !data[0] ) continue;
parse(data, command, sizeof(command) - 1, minutes, sizeof(minutes) - 1, steamid, sizeof(steamid) - 1);
if( filename[0] == 'b' && !equali(command, "banid") || filename[0] == 'l' && !equali(command, "addip") ) continue;
length = str_to_num(minutes);
GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1);
AddBan("", steamid, "", length, unban_time, "", "");
}
fclose(f);
new filename2[32];
// copy current
copy(filename2, sizeof(filename2) - 1, filename);
// cut off at the .
// banned.cfg = banned
// listip.cfg = listip
filename2[containi(filename2, ".")] = 0;
// add 2.cfg
// banned = banned2.cfg
// listip = listip2.cfg
add(filename2, sizeof(filename2) - 1, "2.cfg");
// rename file so that it isnt loaded again
while( !rename_file(filename, filename2, 1) ) { }
}
}
LoadBans()
{
if( file_exists(g_ban_file) )
{
new f = fopen(g_ban_file, "rt");
new data[512], name[32], steamid[64], length[10], unbantime[32], reason[128], admin_name[32], admin_steamid[35];
while( !feof(f) )
{
fgets(f, data, sizeof(data) - 1);
if( !data[0] ) continue;
parse(data,
steamid, sizeof(steamid) - 1,
name, sizeof(name) - 1,
length, sizeof(length) - 1,
unbantime, sizeof(unbantime) - 1,
reason, sizeof(reason) - 1,
admin_name, sizeof(admin_name) - 1,
admin_steamid, sizeof(admin_steamid) - 1
);
ArrayPushString(g_names, name);
ArrayPushString(g_steamids, steamid);
ArrayPushCell(g_banlengths, str_to_num(length));
ArrayPushString(g_unbantimes, unbantime);
ArrayPushString(g_reasons, reason);
ArrayPushString(g_admin_names, admin_name);
ArrayPushString(g_admin_steamids, admin_steamid);
g_total_bans++;
}
fclose(f);
}
else
{
fclose(fopen(g_ban_file, "wt"));
}
// load these after, so when they are added to the file with AddBan(), they aren't loaded again from above.
LoadOldBans("banned.cfg");
LoadOldBans("listip.cfg");
}
GetBanTime(const bantime, length[], len)
{
new minutes = bantime;
new hours = 0;
new days = 0;
while( minutes >= 60 )
{
minutes -= 60;
hours++;
}
while( hours >= 24 )
{
hours -= 24;
days++;
}
new bool:add_before;
if( minutes )
{
formatex(length, len, "%i minute%s", minutes, minutes == 1 ? "" : "s");
add_before = true;
}
if( hours )
{
if( add_before )
{
format(length, len, "%i hour%s, %s", hours, hours == 1 ? "" : "s", length);
}
else
{
formatex(length, len, "%i hour%s", hours, hours == 1 ? "" : "s");
add_before = true;
}
}
if( days )
{
if( add_before )
{
format(length, len, "%i day%s, %s", days, days == 1 ? "" : "s", length);
}
else
{
formatex(length, len, "%i day%s", days, days == 1 ? "" : "s");
add_before = true;
}
}
if( !add_before )
{
// minutes, hours, and days = 0
// assume permanent ban
copy(length, len, "Permanent Ban");
}
}
GenerateUnbanTime(const bantime, unban_time[], len)
{
new _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7];
format_time(_hours, sizeof(_hours) - 1, "%H");
format_time(_minutes, sizeof(_minutes) - 1, "%M");
format_time(_seconds, sizeof(_seconds) - 1, "%S");
format_time(_month, sizeof(_month) - 1, "%m");
format_time(_day, sizeof(_day) - 1, "%d");
format_time(_year, sizeof(_year) - 1, "%Y");
new hours = str_to_num(_hours);
new minutes = str_to_num(_minutes);
new seconds = str_to_num(_seconds);
new month = str_to_num(_month);
new day = str_to_num(_day);
new year = str_to_num(_year);
minutes += bantime;
while( minutes >= 60 )
{
minutes -= 60;
hours++;
}
while( hours >= 24 )
{
hours -= 24;
day++;
}
new max_days = GetDaysInMonth(month, year);
while( day > max_days )
{
day -= max_days;
month++;
}
while( month > 12 )
{
month -= 12;
year++;
}
formatex(unban_time, len, "%i:%02i:%02i %i/%i/%i", hours, minutes, seconds, month, day, year);
}
GetDaysInMonth(month, year=0)
{
switch( month )
{
case 1: return 31; // january
case 2: return ((year % 4) == 0) ? 29 : 28; // february
case 3: return 31; // march
case 4: return 30; // april
case 5: return 31; // may
case 6: return 30; // june
case 7: return 31; // july
case 8: return 31; // august
case 9: return 30; // september
case 10: return 31; // october
case 11: return 30; // november
case 12: return 31; // december
}
return 30;
}
GetTargetFlags(client)
{
static const flags_no_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS);
static const flags_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS|CMDTARGET_OBEY_IMMUNITY);
switch( get_pcvar_num(ab_immunity) )
{
case 1: return flags_immunity;
case 2: return access(client, ADMIN_IMMUNITY) ? flags_no_immunity : flags_immunity;
}
return flags_no_immunity;
}
bool:IsValidAuthid(const authid[])
{
// invalid steamids:
// STEAM_ID_PENDING
// STEAM_ID_LAN
// VALVE_ID_LAN
// VALVE_ID_PENDING
// HLTV
// 4294967295 -- taken from admincmd.sma
return (authid[0] && equal(authid, "STEAM_0:", 8));
}
Print(const message_fmt[], any:...)
{
if( !get_playersnum() ) return;
static message[192];
vformat(message, sizeof(message) - 1, message_fmt, 2);
static msgid_SayText;
if( !msgid_SayText )
{
msgid_SayText = get_user_msgid("SayText");
}
static max_clients;
if( !max_clients )
{
max_clients = get_maxplayers();
}
for( new client = 1; client <= max_clients; client++ )
{
if( !is_user_connected(client) ) continue;
message_begin(MSG_ONE_UNRELIABLE, msgid_SayText, _, client);
write_byte(client);
write_string(message);
message_end();
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
To jest kod .sma pliku advanced bans.