Новый плагин HDDbans для CS 1.6 2014, бан по жесткому диску |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Новый плагин HDDbans для CS 1.6 2014, бан по жесткому диску |
wcgua |
6.1.2015, 18:45
Сообщение
|
Вот на днях лазил по интернету и наткнулся на интересный плагин, исходник присутствует, хотел бы спросить у опытных скриптеров, норм он или нет ?
"HDDbans.sma" /* amx_ss <name or #userid> - Make snapshots on user ! amx_ssmsg_type 3 // 1- chat | 2- hud | 3- chat+hud (Def.: 3) amx_ssnumber 3 // Number of snapshots to take (Def.: 3) amx_ssdelay 1.0 // Delay between snapshots (Def.: 1.0) */ #include <amxmodx> #include <amxmisc> #include <fakemeta> #include <regex> #include <geoip> #define PLUGIN_NAME "HDDBANS" #define PLUGIN_VERSION "0.7" #define PLUGIN_AUTHOR "qunzorez" #pragma semicolon 1 // раскомментируйте ниже линии, если вы хотите этот плагин. // Загрузка старые запреты от banned.cfg и listip.cfg файлов //#define KEEP_DEFAULT_BANS // uncomment the line below if you want the history to be in one file //#define HISTORY_ONE_FILE // если вы должны иметь максимальное количество запретов, чтобы быть совместимым с AMXX версиях до 1.8.0 / / Изменить это число в пределах максимальной суммы // если вы предпочитаете есть неограниченное (требуется AMXX 1.8.0 или выше), то установите его в 0 #define MAX_BANS 0 #define REGEX_IP_PATTERN "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" #define REGEX_STEAMID_PATTERN "^^STEAM_0:(0|1):\d+$" new Regex:g_IP_pattern; new Regex:g_SteamID_pattern; new g_regex_return; /*bool:IsValidIP(const ip[]) { return regex_match_c(ip, g_IP_pattern, g_regex_return) > 0; }*/ #define IsValidIP(%1) (regex_match_c(%1, g_IP_pattern, g_regex_return) > 0) /*bool:IsValidAuthid(const authid[]) { return regex_match_c(authid, g_SteamID_pattern, g_regex_return) > 0; }*/ #define IsValidAuthid(%1) (regex_match_c(%1, g_SteamID_pattern, g_regex_return) > 0) enum // for name displaying { ACTIVITY_NONE, // nothing is shown ACTIVITY_HIDE, // admin name is hidden ACTIVITY_SHOW // admin name is shown }; new const g_admin_activity[] = { ACTIVITY_NONE, // amx_show_activity 0 = show nothing to everyone ACTIVITY_HIDE, // amx_show_activity 1 = hide admin name from everyone ACTIVITY_SHOW, // amx_show_activity 2 = show admin name to everyone ACTIVITY_SHOW, // amx_show_activity 3 = show name to admins but hide it from normal users ACTIVITY_SHOW, // amx_show_activity 4 = show name to admins but show nothing to normal users ACTIVITY_HIDE // amx_show_activity 5 = hide name from admins but show nothing to normal users }; new const g_normal_activity[] = { ACTIVITY_NONE, // amx_show_activity 0 = show nothing to everyone ACTIVITY_HIDE, // amx_show_activity 1 = hide admin name from everyone ACTIVITY_SHOW, // amx_show_activity 2 = show admin name to everyone ACTIVITY_HIDE, // amx_show_activity 3 = show name to admins but hide it from normal users ACTIVITY_NONE, // amx_show_activity 4 = show name to admins but show nothing to normal users ACTIVITY_NONE // amx_show_activity 5 = hide name from admins but show nothing to normal users }; #if MAX_BANS <= 0 enum _:BannedData { bd_name[32], bd_steamid[35], bd_banlength, bd_unbantime[32], bd_reason[128], bd_admin_name[64], bd_admin_steamid[35] }; new Trie:g_trie; new Array:g_array; #else new g_names[MAX_BANS][32]; new g_steamids[MAX_BANS][35]; new g_banlengths[MAX_BANS]; new g_unbantimes[MAX_BANS][32]; new g_reasons[MAX_BANS][128]; new g_admin_names[MAX_BANS][64]; new g_admin_steamids[MAX_BANS][35]; #endif new g_total_bans; new g_ban_file[64]; new ab_website; new ab_immunity; new ab_unbancheck; new g_MsgType, g_SnapShot, g_DelaySS; new amx_show_activity; #if MAX_BANS <= 0 new Array:g_maxban_times; new Array:g_maxban_flags; #else #define MAX_BANLIMITS 30 new g_maxban_times[MAX_BANLIMITS]; new g_maxban_flags[MAX_BANLIMITS]; #endif new g_total_maxban_times; new g_unban_entity; new g_max_clients; new g_msgid_SayText; public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); register_cvar("HDDBANS", PLUGIN_VERSION, FCVAR_SPONLY); register_dictionary("HDDBANS.txt"); register_dictionary("common.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"); register_srvcmd("amx_addbanlimit", "CmdAddBanLimit", -1, "<flag> <time in minutes>"); ab_website = register_cvar("ab_website", "SKILL-GAMER.RU"); ab_immunity = register_cvar("ab_immunity", "1"); ab_unbancheck = register_cvar("ab_unbancheck", "5.0"); register_concmd("amx_ss", "ss_menu", ADMIN_KICK, "- Make snapshots on user(menu)"); g_MsgType = register_cvar("amx_ssmsg_type", "3"); // 1- chat | 2- hud | 3- chat+hud (Def.: 3) g_SnapShot = register_cvar("amx_ssnumber", "3"); // Number of snapshots to take (Def.: 3) g_DelaySS = register_cvar("amx_ssdelay", "1.0"); // Delay between snapshots (Def.: 1.0) amx_show_activity = register_cvar("amx_show_activity", "2"); get_datadir(g_ban_file, sizeof(g_ban_file) - 1); add(g_ban_file, sizeof(g_ban_file) - 1, "/HDDBANS.txt"); #if MAX_BANS <= 0 g_trie = TrieCreate(); g_array = ArrayCreate(BannedData); #endif #if !defined MAX_BANLIMITS g_maxban_times = ArrayCreate(1); g_maxban_flags = ArrayCreate(1); #endif LoadBans(); new error[2]; g_IP_pattern = regex_compile(REGEX_IP_PATTERN, g_regex_return, error, sizeof(error) - 1); g_SteamID_pattern = regex_compile(REGEX_STEAMID_PATTERN, g_regex_return, error, sizeof(error) - 1); g_max_clients = get_maxplayers(); g_msgid_SayText = get_user_msgid("SayText"); } public plugin_cfg() { CreateUnbanEntity(); } public CreateUnbanEntity() { static failtimes; g_unban_entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); if( !pev_valid(g_unban_entity) ) { ++failtimes; log_amx("[ERROR] Failed to create unban entity (%i/10)", failtimes); if( failtimes < 10 ) { set_task(1.0, "CreateUnbanEntity"); } else { log_amx("[ERROR] Could not create unban entity!"); } return; } set_pev(g_unban_entity, pev_classname, "unban_entity"); set_pev(g_unban_entity, pev_nextthink, get_gametime() + 1.0); register_forward(FM_Think, "FwdThink"); } public client_authorized(client) { static authid[35]; get_user_authid(client, authid, sizeof(authid) - 1); static ip[35]; get_user_ip(client, ip, sizeof(ip) - 1, 1); new Float:DelayBan = get_pcvar_float(g_DelaySS) * float(get_pcvar_num(g_SnapShot)) + 0.2; #if MAX_BANS > 0 static banned_authid[35], bool:is_ip; for( new i = 0; i < g_total_bans; i++ ) { copy(banned_authid, sizeof(banned_authid) - 1, g_steamids[i]); is_ip = bool:(containi(banned_authid, ".") != -1); if( is_ip && equal(ip, banned_authid) || !is_ip && equal(authid, banned_authid) ) { static name[32], reason[128], unbantime[32], admin_name[32], admin_steamid[64]; copy(name, sizeof(name) - 1, g_names[i]); copy(reason, sizeof(reason) - 1, g_reasons[i]); new banlength = g_banlengths[i]; copy(unbantime, sizeof(unbantime) - 1, g_unbantimes[i]); copy(admin_name, sizeof(admin_name) - 1, g_admin_names[i]); copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids[i]); PrintBanInformation(client, name, banned_authid, reason, banlength, unbantime, admin_name, admin_steamid, true, true); set_task(DelayBan, "TaskDisconnectPlayer", client); break; } } #else static array_pos; if( TrieGetCell(g_trie, authid, array_pos) || TrieGetCell(g_trie, ip, array_pos) ) { static data[BannedData]; ArrayGetArray(g_array, array_pos, data); PrintBanInformation(client, data[bd_name], data[bd_steamid], data[bd_reason], data[bd_banlength], data[bd_unbantime], data[bd_admin_name], data[bd_admin_steamid], true, true); set_task(DelayBan, "TaskDisconnectPlayer", client); } #endif } public CmdBan(client, level, cid) { if( !cmd_access(client, level, cid, 4) ) return PLUGIN_HANDLED; static arg[128]; read_argv(1, arg, sizeof(arg) - 1); new target = cmd_target(client, arg, GetTargetFlags(client)); if( !target ) return PLUGIN_HANDLED; static target_authid[35]; get_user_authid(target, target_authid, sizeof(target_authid) - 1); #if MAX_BANS <= 0 if( TrieKeyExists(g_trie, target_authid) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_ALREADY_BANNED_STEAMID"); return PLUGIN_HANDLED; } #else for( new i = 0; i < g_total_bans; i++ ) { if( !strcmp(target_authid, g_steamids[i], 1) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_ALREADY_BANNED_STEAMID"); return PLUGIN_HANDLED; } } #endif read_argv(2, arg, sizeof(arg) - 1); new length = str_to_num(arg); new maxlength = GetMaxBanTime(client); if( maxlength && (!length || length > maxlength) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_MAX_BAN_TIME", maxlength); return PLUGIN_HANDLED; } static 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); static admin_name[64], target_name[32]; get_user_name(client, admin_name, sizeof(admin_name) - 1); get_user_name(target, target_name, sizeof(target_name) - 1); static admin_ip[35]; new target_ip[35]; get_user_ip(client, admin_ip, sizeof(admin_ip) - 1, 1); get_user_ip(target, target_ip, sizeof(target_ip) - 1, 1); AddBan(target_name, target_authid, arg, length, unban_time, admin_name, admin_ip); AddBan(target_name, target_ip, arg, length, unban_time, admin_name, admin_ip); PrintBanInformation(target, target_name, target_authid, arg, length, unban_time, admin_name, admin_ip, true, true); PrintBanInformation(client, target_name, target_authid, arg, length, unban_time, admin_name, admin_ip, false, false); new Param[2]; Param[0] = client; Param[1] = target; set_task(0.1, "SS_Ban", target, Param,2); new Float:DelayBan = get_pcvar_float(g_DelaySS) * float(get_pcvar_num(g_SnapShot)) + 0.2; set_task(DelayBan, "TaskDisconnectPlayer", target); GetBanTime(length, unban_time, sizeof(unban_time) - 1); PrintActivity(admin_name, "Админ $name: забанил %s. Причина: %s. Продолжительность: %s", target_name, arg, unban_time); Log("%s <%s> banned %s <%s> || Reason: ^"%s^" || Ban Length: %s", admin_name, admin_ip, 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; static arg[128]; read_argv(1, arg, sizeof(arg) - 1); new target = cmd_target(client, arg, GetTargetFlags(client)); if( !target ) return PLUGIN_HANDLED; static target_ip[35]; get_user_ip(target, target_ip, sizeof(target_ip) - 1, 1); #if MAX_BANS <= 0 if( TrieKeyExists(g_trie, target_ip) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_ALREADY_BANNED_IP"); return PLUGIN_HANDLED; } #else for( new i = 0; i < g_total_bans; i++ ) { if( !strcmp(target_ip, g_steamids[i], 1) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_ALREADY_BANNED_IP"); return PLUGIN_HANDLED; } } #endif read_argv(2, arg, sizeof(arg) - 1); new length = str_to_num(arg); new maxlength = GetMaxBanTime(client); if( maxlength && (!length || length > maxlength) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_MAX_BAN_TIME", maxlength); return PLUGIN_HANDLED; } static unban_time[32]; 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); static admin_name[64], target_name[32]; get_user_name(client, admin_name, sizeof(admin_name) - 1); get_user_name(target, target_name, sizeof(target_name) - 1); static admin_ip[35]; get_user_authid(client, admin_ip, sizeof(admin_ip) - 1); AddBan(target_name, target_ip, arg, length, unban_time, admin_name, admin_ip); PrintBanInformation(target, target_name, target_ip, arg, length, unban_time, admin_name, admin_ip, true, true); PrintBanInformation(client, target_name, target_ip, arg, length, unban_time, admin_name, admin_ip, false, false); new Float:DelayBan = get_pcvar_float(g_DelaySS) * float(get_pcvar_num(g_SnapShot)) + 0.2; set_task(DelayBan, "TaskDisconnectPlayer", target); GetBanTime(length, unban_time, sizeof(unban_time) - 1); PrintActivity(admin_name, "Админ $name: забанил %s. Причина: %s. Продолжительность: %s", target_name, arg, unban_time); Log("%s <%s> banned %s <%s> || Reason: ^"%s^" || Ban Length: %s", admin_name, admin_ip, 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; static target_name[32], 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, "[Nk_116_Rus] %L", client, "AB_INVALID_STEAMID"); console_print(client, "[Nk_116_Rus] %L", client, "AB_VALID_STEAMID_FORMAT"); return PLUGIN_HANDLED; } else if( is_ip ) { new pos = contain(target_authid, ":"); if( pos > 0 ) { target_authid[pos] = 0; } if( !IsValidIP(target_authid) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_INVALID_IP"); return PLUGIN_HANDLED; } } #if MAX_BANS <= 0 if( TrieKeyExists(g_trie, target_authid) ) { console_print(client, "[Nk_116_Rus] %L", client, is_ip ? "AB_ALREADY_BANNED_IP" : "AB_ALREADY_BANNED_STEAMID"); return PLUGIN_HANDLED; } #else for( new i = 0; i < g_total_bans; i++ ) { if( !strcmp(target_authid, g_steamids[i], 1) ) { console_print(client, "[Nk_116_Rus] %L", client, is_ip ? "AB_ALREADY_BANNED_IP" : "AB_ALREADY_BANNED_STEAMID"); return PLUGIN_HANDLED; } } #endif new length = str_to_num(bantime); new maxlength = GetMaxBanTime(client); if( maxlength && (!length || length > maxlength) ) { console_print(client, "[Nk_116_Rus] %L", client, "AB_MAX_BAN_TIME", maxlength); return PLUGIN_HANDLED; } if( is_user_connected(find_player(is_ip ? "d" : "c", target_authid)) ) { client_cmd(client, "amx_ban ^"%s^" %i ^"%s^"", target_authid, length, reason); return PLUGIN_HANDLED; } static unban_time[32]; if( length == 0 ) { formatex(unban_time, sizeof(unban_time) - 1, "%L", client, "AB_PERMANENT_BAN"); } else { GenerateUnbanTime(length, unban_time, sizeof(unban_time) - 1); } static admin_name[64], admin_ip[35]; get_user_name(client, admin_name, sizeof(admin_name) - 1); get_user_authid(client, admin_ip, sizeof(admin_ip) - 1); AddBan(target_name, target_authid, reason, length, unban_time, admin_name, admin_ip); PrintBanInformation(client, target_name, target_authid, reason, length, unban_time, "", "", false, false); GetBanTime(length, unban_time, sizeof(unban_time) - 1); PrintActivity(admin_name, "Админ $name: забанил %s. Причина: %s. Ban Length: %s", is_ip ? "IP" : "SteamID", target_authid, reason, unban_time); Log("%s <%s> banned %s <%s> || Reason: ^"%s^" || Ban Length: %s", admin_name, admin_ip, 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; static arg[35]; read_argv(1, arg, sizeof(arg) - 1); #if MAX_BANS > 0 static banned_authid[35]; for( new i = 0; i < g_total_bans; i++ ) { copy(banned_authid, sizeof(banned_authid) - 1, g_steamids[i]); if( equal(arg, banned_authid) ) { static admin_name[64]; get_user_name(client, admin_name, sizeof(admin_name) - 1); static name[32], reason[128]; copy(name, sizeof(name) - 1, g_names[i]); copy(reason, sizeof(reason) - 1, g_reasons[i]); PrintActivity(admin_name, "Админ $name: разбанил %s [%s] [Причина бана: %s]", name, arg, reason); static authid[35]; get_user_authid(client, authid, sizeof(authid) - 1); Log("%s <%s> unbanned %s <%s> || Ban Reason: ^"%s^"", admin_name, authid, name, arg, reason); RemoveBan(i); return PLUGIN_HANDLED; } } #else if( TrieKeyExists(g_trie, arg) ) { static array_pos; TrieGetCell(g_trie, arg, array_pos); static data[BannedData]; ArrayGetArray(g_array, array_pos, data); static unban_name[32]; get_user_name(client, unban_name, sizeof(unban_name) - 1); PrintActivity(unban_name, "Админ $name: разбанил %s [%s] [Причина бана: %s]", data[bd_name], data[bd_steamid], data[bd_reason]); RemoveBan(array_pos, data[bd_steamid]); return PLUGIN_HANDLED; } #endif console_print(client, "[Nk_116_Rus] %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, "[Nk_116_Rus] %L", client, "AB_NO_BANS"); return PLUGIN_HANDLED; } static start; if( read_argc() > 1 ) { static arg[5]; read_argv(1, arg, sizeof(arg) - 1); start = min(str_to_num(arg), g_total_bans) - 1; } else { start = 0; } new last = min(start + 10, g_total_bans); console_print(client, "%L", client, "AB_BAN_LIST_NUM", start + 1, last); for( new i = start; i < last; i++ ) { #if MAX_BANS <= 0 static data[BannedData]; ArrayGetArray(g_array, i, data); PrintBanInformation(client, data[bd_name], data[bd_steamid], data[bd_reason], data[bd_banlength], data[bd_unbantime], data[bd_admin_name], data[bd_admin_steamid], true, false); #else static name[32], steamid[35], reason[128], banlength, unbantime[32], admin_name[32], admin_steamid[35]; copy(name, sizeof(name) - 1, g_names[i]); copy(steamid, sizeof(steamid) - 1, g_steamids[i]); copy(reason, sizeof(reason) - 1, g_reasons[i]); banlength = g_banlengths[i]; copy(unbantime, sizeof(unbantime) - 1, g_unbantimes[i]); copy(admin_name, sizeof(admin_name) - 1, g_admin_names[i]); copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids[i]); PrintBanInformation(client, name, steamid, reason, banlength, unbantime, admin_name, admin_steamid, true, false); #endif } if( ++last < g_total_bans ) { console_print(client, "%L", client, "AB_BAN_LIST_NEXT", last); } return PLUGIN_HANDLED; } public CmdAddBanLimit() { if( read_argc() != 3 ) { log_amx("amx_addbanlimit was used with incorrect parameters!"); log_amx("Usage: amx_addbanlimit <flags> <time in minutes>"); return PLUGIN_HANDLED; } static arg[16]; read_argv(1, arg, sizeof(arg) - 1); new flags = read_flags(arg); read_argv(2, arg, sizeof(arg) - 1); new minutes = str_to_num(arg); #if !defined MAX_BANLIMITS ArrayPushCell(g_maxban_flags, flags); ArrayPushCell(g_maxban_times, minutes); #else if( g_total_maxban_times >= MAX_BANLIMITS ) { log_amx("The amx_addbanlimit has reached its maximum!"); return PLUGIN_HANDLED; } g_maxban_flags[g_total_maxban_times] = flags; g_maxban_times[g_total_maxban_times] = minutes; #endif g_total_maxban_times++; return PLUGIN_HANDLED; } public FwdThink(entity) { if( entity != g_unban_entity ) return; if( g_total_bans > 0 ) { static _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); static unban_time[32]; static u_hours, u_minutes, u_seconds, u_month, u_day, u_year; for( new i = 0; i < g_total_bans; i++ ) { #if MAX_BANS <= 0 static data[BannedData]; ArrayGetArray(g_array, i, data); if( data[bd_banlength] == 0 ) continue; #else if( g_banlengths[i] == 0 ) continue; #endif #if MAX_BANS <= 0 copy(unban_time, sizeof(unban_time) - 1, data[bd_unbantime]); #else copy(unban_time, sizeof(unban_time) - 1, g_unbantimes[i]); #endif 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 ) { #if MAX_BANS <= 0 Log("Ban time is up for: %s [%s]", data[bd_name], data[bd_steamid]); Print("^x04[Nk_116_Rus]^x03 %s^x01[^x04%s^x01]^x03 время бана вышло!^x01 [Причина бана: %s]", data[bd_name], data[bd_steamid], data[bd_reason]); RemoveBan(i, data[bd_steamid]); #else Log("Ban time is up for: %s [%s]", g_names[i], g_steamids[i]); Print("^x04[Nk_116_Rus]^x03 %s^x01[^x04%s^x01]^x03 время бана вышло!^x01 [Причина бана: %s]", g_names[i], g_steamids[i], g_reasons[i]); RemoveBan(i); #endif i--; // current pos was replaced with another ban, so we need to check it again. } } } set_pev(g_unban_entity, pev_nextthink, get_gametime() + get_pcvar_float(ab_unbancheck)); } // SS Menu ============================================================================== public ss_menu(id) { if(!(get_user_flags(id) & ADMIN_KICK)) { client_print(id, print_console, "%L", LANG_PLAYER,"NO_APP_COM"); return PLUGIN_HANDLED; } new temp[128]; format(temp, 127, "[Nk_116_RuS] Screen Menu"); new menu = menu_create(temp, "ss_menu_item"); new Players[32], num, i, player; get_players(Players, num, "h"); for (i = 0; i < num; i++) { player = Players[i]; new Name[32], name_item[63], player_str[10]; get_user_name(player, Name, 31); num_to_str(player, player_str, 9); format(name_item, 63, "%s", Name); if(is_user_admin(player)) format(name_item, 63, "%s \r*", Name); if(is_user_bot(player)) format(name_item, 63, "\d%s", Name); menu_additem(menu, name_item, player_str); } format(temp, 31, "%L", LANG_PLAYER,"EXIT"); menu_setprop(menu, MPROP_EXITNAME, temp); format(temp, 31, "%L", LANG_PLAYER,"BACK"); menu_setprop(menu, MPROP_BACKNAME, temp); format(temp, 31, "%L", LANG_PLAYER,"MORE"); menu_setprop(menu, MPROP_NEXTNAME, temp); menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu, 0); return PLUGIN_HANDLED; } public ss_menu_item(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64], access, callback; menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback); new player = str_to_num(data); if(is_user_bot(player)) menu_display(id, menu, 0); else { new Param[2]; Param[0] = id; Param[1] = player; set_task(0.1, "SS_Task", 0, Param,2); } return PLUGIN_HANDLED; } public SS_Ban(Param[2]) { new id = Param[0]; new client = Param[1]; new timer[32], hostname[64], name[32], name2[32], ip[32], authid2[32], country[33], site[64]; get_user_name(id, name, 31); get_user_name(client, name2, 31); get_user_authid(client, authid2, 31); get_user_ip(client, ip, 31, 1); geoip_country(ip, country); get_time("%d/%m/%Y - %H:%M:%S", timer, 63); get_cvar_string("hostname", hostname, charsmax(hostname)); get_pcvar_string(ab_website, site, charsmax(site)); switch(get_pcvar_num(g_MsgType)) { case 1: { /* Show screen messages in chat */ client_printc(client,"%L", client, "SS_MSG1", name); client_printc(client,"%L", client, "SS_MSG2", timer, hostname); client_printc(client,"%L", client, "SS_MSG3", name2, ip, authid2, country); client_printc(client,"%L", client, "SS_MSG4", site); } case 2: { /* Show screen messages in hud */ set_hudmessage(150, 0, 255, -1.0, 0.1, 0, 0.25, 1.0, 0.0, 0.0, 4); show_hudmessage(client, "%L", client, "SS_MSG_HUD", timer, hostname, name2, ip, authid2, country, site); } case 3: { /* Show screen messages in chat */ client_printc(client,"%L", client, "SS_MSG1", name); client_printc(client,"%L", client, "SS_MSG2", timer, hostname); client_printc(client,"%L", client, "SS_MSG3", name2, ip, authid2, country); client_printc(client,"%L", client, "SS_MSG4", site); /* Show screen messages in hud */ set_hudmessage(150, 0, 255, -1.0, 0.1, 0, 0.25, 1.0, 0.0, 0.0, -1); show_hudmessage(client, "%L", client, "SS_MSG_HUD", timer, hostname, name2, ip, authid2, country, site); } } set_task(Float:get_pcvar_float(g_DelaySS), "SS_DO", 0, Param,2, "a", get_pcvar_num(g_SnapShot)); return PLUGIN_HANDLED; } public SS_Task(Param[2]) { new client = Param[1]; new timer[32], hostname[64], name2[32], ip[32], authid2[32], country[33], site[64]; get_user_name(client, name2, 31); get_user_authid(client, authid2, 31); get_user_ip(client, ip, 31, 1); geoip_country(ip, country); get_time("%d/%m/%Y - %H:%M:%S", timer, 63); get_cvar_string("hostname", hostname, charsmax(hostname)); get_pcvar_string(ab_website, site, charsmax(site)); switch(get_pcvar_num(g_MsgType)) { case 1: { /* Show screen messages in chat */ client_printc(client,"%L", client, "SS_MSG2", timer, hostname); client_printc(client,"%L", client, "SS_MSG3", name2, ip, authid2, country); } case 2: { /* Show screen messages in hud */ set_hudmessage(150, 0, 255, -1.0, 0.1, 0, 0.25, 1.0, 0.0, 0.0, 4); show_hudmessage(client, "%L", client, "SS_MSG_HUD_BAN", timer, hostname, name2, ip, authid2, country); } case 3: { /* Show screen messages in chat */ client_printc(client,"%L", client, "SS_MSG2", timer, hostname); client_printc(client,"%L", client, "SS_MSG3", name2, ip, authid2, country); /* Show screen messages in hud */ set_hudmessage(150, 0, 255, -1.0, -1.0, 0, 0.25, 1.0, 0.0, 0.0, -1); show_hudmessage(client, "%L", client, "SS_MSG_HUD_BAN", timer, hostname, name2, ip, authid2, country); } } set_task(Float:get_pcvar_float(g_DelaySS), "SS_DO", 0, Param,2, "a", get_pcvar_num(g_SnapShot)); return PLUGIN_HANDLED; } public SS_DO(Param[2]) { new client = Param[1]; if(is_user_connected(client)) client_cmd(client, "snapshot"); } /* Stock colors for chat messages */ stock client_printc(const id, const string[], {Float, Sql, Resul,_}:...) { new msg[191], players[32], count = 1; vformat(msg, sizeof msg - 1, string, 3); replace_all(msg,190,"!g","^4"); replace_all(msg,190,"!y","^1"); replace_all(msg,190,"!t","^3"); if(id) players[0] = id; else get_players(players,count,"ch"); for (new i = 0 ; i < count ; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText,_, players[i]); write_byte(players[i]); write_string(msg); message_end(); } } } public TaskDisconnectPlayer(client) { server_cmd("kick #%i ^"BAN! Читайте консоль! 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[]) { #if MAX_BANS > 0 if( g_total_bans == MAX_BANS ) { log_amx("Ban list is full! (%i)", g_total_bans); return; } #endif 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); #if MAX_BANS <= 0 static data[BannedData]; copy(data[bd_name], sizeof(data[bd_name]) - 1, target_name); copy(data[bd_steamid], sizeof(data[bd_steamid]) - 1, target_steamid); data[bd_banlength] = length; copy(data[bd_unbantime], sizeof(data[bd_unbantime]) - 1, unban_time); copy(data[bd_reason], sizeof(data[bd_reason]) - 1, reason); copy(data[bd_admin_name], sizeof(data[bd_admin_name]) - 1, admin_name); copy(data[bd_admin_steamid], sizeof(data[bd_admin_steamid]) - 1, admin_steamid); TrieSetCell(g_trie, target_steamid, g_total_bans); ArrayPushArray(g_array, data); #else copy(g_names[g_total_bans], sizeof(g_names[]) - 1, target_name); copy(g_steamids[g_total_bans], sizeof(g_steamids[]) - 1, target_steamid); g_banlengths[g_total_bans] = length; copy(g_unbantimes[g_total_bans], sizeof(g_unbantimes[]) - 1, unban_time); copy(g_reasons[g_total_bans], sizeof(g_reasons[]) - 1, reason); copy(g_admin_names[g_total_bans], sizeof(g_admin_names[]) - 1, admin_name); copy(g_admin_steamids[g_total_bans], sizeof(g_admin_steamids[]) - 1, admin_steamid); #endif g_total_bans++; #if MAX_BANS > 0 if( g_total_bans == MAX_BANS ) { log_amx("Ban list is full! (%i)", g_total_bans); } #endif } #if MAX_BANS > 0 RemoveBan(remove) { for( new i = remove; i < g_total_bans; i++ ) { if( (i + 1) == g_total_bans ) { copy(g_names[i], sizeof(g_names[]) - 1, ""); copy(g_steamids[i], sizeof(g_steamids[]) - 1, ""); g_banlengths[i] = 0; copy(g_unbantimes[i], sizeof(g_unbantimes[]) - 1, ""); copy(g_reasons[i], sizeof(g_reasons[]) - 1, ""); copy(g_admin_names[i], sizeof(g_admin_names[]) - 1, ""); copy(g_admin_steamids[i], sizeof(g_admin_steamids[]) - 1, ""); } else { copy(g_names[i], sizeof(g_names[]) - 1, g_names[i + 1]); copy(g_steamids[i], sizeof(g_steamids[]) - 1, g_steamids[i + 1]); g_banlengths[i] = g_banlengths[i + 1]; copy(g_unbantimes[i], sizeof(g_unbantimes[]) - 1, g_unbantimes[i + 1]); copy(g_reasons[i], sizeof(g_reasons[]) - 1, g_reasons[i + 1]); copy(g_admin_names[i], sizeof(g_admin_names[]) - 1, g_admin_names[i + 1]); copy(g_admin_steamids[i], sizeof(g_admin_steamids[]) - 1, g_admin_steamids[i + 1]); } } g_total_bans--; new f = fopen(g_ban_file, "wt"); static name[32], steamid[35], banlength, unbantime[32], reason[128], admin_name[32], admin_steamid[35]; for( new i = 0; i < g_total_bans; i++ ) { copy(name, sizeof(name) - 1, g_names[i]); copy(steamid, sizeof(steamid) - 1, g_steamids[i]); banlength = g_banlengths[i]; copy(unbantime, sizeof(unbantime) - 1, g_unbantimes[i]); copy(reason, sizeof(reason) - 1, g_reasons[i]); copy(admin_name, sizeof(admin_name) - 1, g_admin_names[i]); copy(admin_steamid, sizeof(admin_steamid) - 1, g_admin_steamids[i]); fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\ steamid,\ name,\ banlength,\ unbantime,\ reason,\ admin_name,\ admin_steamid ); } fclose(f); } #else RemoveBan(pos, const authid[]) { TrieDeleteKey(g_trie, authid); ArrayDeleteItem(g_array, pos); g_total_bans--; new f = fopen(g_ban_file, "wt"); new data[BannedData]; for( new i = 0; i < g_total_bans; i++ ) { ArrayGetArray(g_array, i, data); TrieSetCell(g_trie, data[bd_steamid], i); fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^" ^"%s^" ^"%s^"^n",\ data[bd_steamid],\ data[bd_name],\ data[bd_banlength],\ data[bd_unbantime],\ data[bd_reason],\ data[bd_admin_name],\ data[bd_admin_steamid] ); } fclose(f); } #endif #if defined KEEP_DEFAULT_BANS LoadOldBans(filename[]) { if( file_exists(filename) ) { new f = fopen(filename, "rt"); static data[96]; static 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); static 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) ) { } } } #endif LoadBans() { if( file_exists(g_ban_file) ) { new f = fopen(g_ban_file, "rt"); static filedata[512], length[10]; #if MAX_BANS <= 0 static data[BannedData]; while( !feof(f) ) #else while( !feof(f) && g_total_bans < MAX_BANS ) #endif { fgets(f, filedata, sizeof(filedata) - 1); if( !filedata[0] ) continue; #if MAX_BANS <= 0 parse(filedata,\ data[bd_steamid], sizeof(data[bd_steamid]) - 1,\ data[bd_name], sizeof(data[bd_name]) - 1,\ length, sizeof(length) - 1,\ data[bd_unbantime], sizeof(data[bd_unbantime]) - 1,\ data[bd_reason], sizeof(data[bd_reason]) - 1,\ data[bd_admin_name], sizeof(data[bd_admin_name]) - 1,\ data[bd_admin_steamid], sizeof(data[bd_admin_steamid]) - 1 ); data[bd_banlength] = str_to_num(length); ArrayPushArray(g_array, data); TrieSetCell(g_trie, data[bd_steamid], g_total_bans); #else static steamid[35], name[32], unbantime[32], reason[128], admin_name[32], admin_steamid[35]; parse(filedata,\ 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 ); copy(g_names[g_total_bans], sizeof(g_names[]) - 1, name); copy(g_steamids[g_total_bans], sizeof(g_steamids[]) - 1, steamid); g_banlengths[g_total_bans] = str_to_num(length); copy(g_unbantimes[g_total_bans], sizeof(g_unbantimes[]) - 1, unbantime); copy(g_reasons[g_total_bans], sizeof(g_reasons[]) - 1, reason); copy(g_admin_names[g_total_bans], sizeof(g_admin_names[]) - 1, admin_name); copy(g_admin_steamids[g_total_bans], sizeof(g_admin_steamids[]) - 1, admin_steamid); #endif g_total_bans++; } fclose(f); } // load these after, so when they are added to the file with AddBan(), they aren't loaded again from above. #if defined KEEP_DEFAULT_BANS LoadOldBans("banned.cfg"); LoadOldBans("listip.cfg"); #endif } 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 минут", minutes, minutes == 1 ? "" : ""); add_before = true; } if( hours ) { if( add_before ) { format(length, len, "%i час%а, %а", hours, hours == 1 ? "" : "а", length); } else { formatex(length, len, "%i час%(а,ов)", hours, hours == 1 ? "" : "(а,ов)"); add_before = true; } } if( days ) { if( add_before ) { format(length, len, "%i ден%ь, %ь", days, days == 1 ? "" : "ь", length); } else { formatex(length, len, "%i дн%(я,ей)", days, days == 1 ? "" : "(я,ей)"); add_before = true; } } if( !add_before ) { // minutes, hours, and days = 0 // assume permanent ban copy(length, len, "Бан навсегда"); } } GenerateUnbanTime(const bantime, unban_time[], len) { static _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; } GetMaxBanTime(client) { if( !g_total_maxban_times ) return 0; new flags = get_user_flags(client); for( new i = 0; i < g_total_maxban_times; i++ ) { #if !defined MAX_BANLIMITS if( flags & ArrayGetCell(g_maxban_flags, i) ) { return ArrayGetCell(g_maxban_times, i); } #else if( flags & g_maxban_flags[i] ) { return g_maxban_times[i]; } #endif } return 0; } PrintBanInformation(client, const target_name[], const target_authid[], const reason[], const length, const unban_time[], const admin_name[], const admin_ip[], bool:show_admin, bool:show_website) { static website[64], ban_length[64]; if( client == 0 ) { server_print("************************************************"); server_print("%L", client, "AB_BAN_INFORMATION"); server_print("%L: %s", client, "AB_NAME", target_name); server_print("%L: %s", client, IsValidAuthid(target_authid) ? "AB_STEAMID" : "AB_IP", target_authid); server_print("%L: %s", client, "AB_REASON", reason); if( length > 0 ) { GetBanTime(length, ban_length, sizeof(ban_length) - 1); server_print("%L: %s", client, "AB_BAN_LENGTH", ban_length); } server_print("%L: %s", client, "AB_UNBAN_TIME", unban_time); if( show_admin ) { server_print("%L: %s", client, "AB_ADMIN_NAME", admin_name); server_print("%L: %s", client, "AB_ADMIN_IP", admin_ip); } if( show_website ) { get_pcvar_string(ab_website, website, sizeof(website) - 1); if( website[0] ) { server_print(""); server_print("%L", client, "AB_WEBSITE"); server_print("%s", website); } } server_print("************************************************"); } else { client_cmd(client, "echo ^"************************************************^""); client_cmd(client, "echo ^"%L^"", client, "AB_BAN_INFORMATION"); client_cmd(client, "echo ^"%L: %s^"", client, "AB_NAME", target_name); client_cmd(client, "echo ^"%L: %s^"", client, IsValidAuthid(target_authid) ? "AB_STEAMID" : "AB_IP", target_authid); client_cmd(client, "echo ^"%L: %s^"", client, "AB_REASON", reason); if( length > 0 ) { GetBanTime(length, ban_length, sizeof(ban_length) - 1); client_cmd(client, "echo ^"%L: %s^"", client, "AB_BAN_LENGTH", ban_length); } client_cmd(client, "echo ^"%L: %s^"", client, "AB_UNBAN_TIME", unban_time); if( show_website ) { get_pcvar_string(ab_website, website, sizeof(website) - 1); if( website[0] ) { client_cmd(client, "echo ^"^""); client_cmd(client, "echo ^"%L^"", client, "AB_WEBSITE"); client_cmd(client, "echo ^"%s^"", website); } } client_cmd(client, "echo ^"************************************************^""); } } PrintActivity(const admin_name[], const message_fmt[], any:...) { if( !get_playersnum() ) return; new activity = get_pcvar_num(amx_show_activity); if( !(0 <= activity <= 5) ) { set_pcvar_num(amx_show_activity, (activity = 2)); } static message[192], temp[192]; vformat(message, sizeof(message) - 1, message_fmt, 3); for( new client = 1; client <= g_max_clients; client++ ) { if( !is_user_connected(client) ) continue; switch( is_user_admin(client) ? g_admin_activity[activity] : g_normal_activity[activity] ) { case ACTIVITY_NONE: { } case ACTIVITY_HIDE: { copy(temp, sizeof(temp) - 1, message); replace(temp, sizeof(temp) - 1, "$name", "ADMIN"); message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client); write_byte(client); write_string(temp); message_end(); } case ACTIVITY_SHOW: { copy(temp, sizeof(temp) - 1, message); replace(temp, sizeof(temp) - 1, "$name", admin_name); message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client); write_byte(client); write_string(temp); message_end(); } } } } Print(const message_fmt[], any:...) { if( !get_playersnum() ) return; static message[192]; vformat(message, sizeof(message) - 1, message_fmt, 2); for( new client = 1; client <= g_max_clients; client++ ) { if( !is_user_connected(client) ) continue; message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, client); write_byte(client); write_string(message); message_end(); } } Log(const message_fmt[], any:...) { static message[256]; vformat(message, sizeof(message) - 1, message_fmt, 2); static filename[96]; #if defined HISTORY_ONE_FILE if( !filename[0] ) { get_basedir(filename, sizeof(filename) - 1); add(filename, sizeof(filename) - 1, "/logs/ban_history.log"); } #else static dir[64]; if( !dir[0] ) { get_basedir(dir, sizeof(dir) - 1); add(dir, sizeof(dir) - 1, "/logs"); } format_time(filename, sizeof(filename) - 1, "%m%d%Y"); format(filename, sizeof(filename) - 1, "%s/BAN_HISTORY_%s.log", dir, filename); #endif log_amx("%s", message); log_to_file(filename, "%s", message); } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
Отредактировал: wcgua, - 6.1.2015, 18:47
|
|
|
|
Nebo |
6.1.2015, 18:50
Сообщение
|
|
Разве это не сказки?
|
|
|
ex3m777 |
6.1.2015, 18:53
Сообщение
|
|
xD Bans
|
|
|
wcgua |
6.1.2015, 18:55
Сообщение
|
читал на том сайте от куда его взял, то его создатели утверждают, что не сказки, а я так подумал, то лучше у вас переспрошу, дабы не напороться на какую нибудь какашку :)))
Отредактировал: wcgua, - 6.1.2015, 18:56
|
|
|
|
voed |
6.1.2015, 19:04
Сообщение
|
Код:
if( is_ip && equal(ip, banned_authid) || !is_ip && equal(authid, banned_authid) ) authid+ip, и плагин явно не новый |
|
|
|
ZENDER |
6.1.2015, 19:07
Сообщение
|
|
Бан по жесткому диску? Или простой бан со скриншотами?
|
|
|
serfreeman1337 |
6.1.2015, 19:09
Сообщение
|
Да этож переделанный Advanced Bans.
|
|
|
|
tyne |
6.1.2015, 19:20
Сообщение
|
|
Из нескольких систем банов слепили одну...
|
|
|
wcgua |
6.1.2015, 19:22
Сообщение
|
Там еще есть дополнения к этому плагину, можно делать скриншоты во время бана.
|
|
|
|
exec1337 |
6.1.2015, 19:23
Сообщение
|
у кого-нибудь есть первоисточник?
|
|
|
|
wcgua |
6.1.2015, 19:27
Сообщение
|
ZENDER, по описанию когда я читал, то банит по жосткому и делает скриншоты.
Отредактировал: wcgua, - 6.1.2015, 19:28
|
|
|
|
se7en2614 |
6.1.2015, 19:28
Сообщение
|
|
Код:
#define REGEX_STEAMID_PATTERN "^^STEAM_0:(0|1):\d+$" уже видно что используют стим ид =) |
|
|
wcgua |
6.1.2015, 19:29
Сообщение
|
походу они решили кого то надурить, и славу себе переписать, "авторы" этого плагина я так понял)
|
|
|
|
fm3at |
6.1.2015, 19:35
Сообщение
|
|
на пиратках steamid и так по железу генерируется, ничего нового
|
|
|
f1nik |
6.1.2015, 20:29
Сообщение
|
|
Вопрос, для чего regex? Модуль конечно мощный и там возможностей поболее чем в орфее, но он не стабильный как курс евро))) я думал его заюзали для чего то такого чтобы банить по какой то метке, а тут фуфлец какой то...
|
|
|
voed |
6.1.2015, 20:46
Сообщение
|
Вопрос, для чего regex? Модуль конечно мощный и там возможностей поболее чем в орфее, но он не стабильный как курс евро))) я думал его заюзали для чего то такого чтобы банить по какой то метке, а тут фуфлец какой то... Regex для определения правильности steamid без индусского кода. У них с орфеем абсолютно разные функции, не понял сравнения) |
|
|
|
Vital |
6.1.2015, 22:01
Сообщение
|
Разработчики плагина правильно сказали, банит по железу. Индивидуальный номер для no steam - steam id, выдается по железу
|
|
Поблагодарили 1 раз
|
|
csnet |
6.1.2015, 22:03
Сообщение
|
а толку от него, steamid ченжеры клали на все это
go v cs:go
|
|
|
|
voed |
6.1.2015, 22:19
Сообщение
|
Поблагодарили 1 раз
|
|
Vital |
6.1.2015, 23:56
Сообщение
|
voed, Разве о полезности у меня шла речь?
|
|
Поблагодарили 1 раз
|
|