|
Стаж: 16 лет
Сообщений: 407
Благодарностей: 20
Полезность: < 0
|
Код /* AMX Mod script. * * (c) 2002-2003, OLO * modified by shadow * This file is provided as is (no warranties). * * Players with immunity won't be checked */
#include <amxmodx> #include <amxmisc>
new g_Ping[33] new g_Samples[33]
public plugin_init() { register_plugin("High Ping Kicker (Steam)","0.16.2","OLO/shadow") register_concmd("amx_hpk","cmdHpk",ADMIN_KICK,"- configures high_ping_kicker plugin") register_cvar("amx_hpk_ping","200") register_cvar("amx_hpk_check","12") register_cvar("amx_hpk_tests","5") register_cvar("amx_hpk_delay","60") if ( get_cvar_num( "amx_hpk_check" ) < 5 ) set_cvar_num( "amx_hpk_check" , 5 ) if ( get_cvar_num( "amx_hpk_tests" ) < 3 ) set_cvar_num( "amx_hpk_tests" , 3 ) }
public client_disconnect(id) remove_task( id )
public client_putinserver(id) { g_Ping[id] = 0 g_Samples[id] = 0
if ( !is_user_bot(id) ) { new param[1] param[0] = id set_task( 10.0 , "showWarn" , id , param , 1 ) if (get_cvar_num("amx_hpk_tests") != 0) { set_task( float(get_cvar_num("amx_hpk_delay")), "taskSetting", id, param , 1) } else { set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , id , param , 1 , "b" ) } } }
public showWarn(param[]) client_print( param[0] ,print_chat,"* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )
public taskSetting(param[]) { new name[32] get_user_name(param[0],name,31) set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , param[0] , param , 1 , "b" ) }
kickPlayer( id ) { new name[32],authid[32] get_user_name(id,name,31) get_user_authid(id,authid,31) client_print(0,print_chat,"** Player %s disconnected due to high ping",name) server_cmd("kick #%d ^"Sorry but you have too high ping, try later...^"",get_user_userid(id)) log_amx("Highpingkick: ^"%s<%d><%s>^" was kicked due highping (Average Ping ^"%d^")", name,get_user_userid(id),authid,(g_Ping[id] / g_Samples[id])) }
public checkPing(param[]) { new id = param[ 0 ]
if ( get_user_flags(id) & ADMIN_IMMUNITY ) return
new p, l
get_user_ping( id , p , l )
g_Ping[ id ] += p ++g_Samples[ id ]
if ( (g_Samples[ id ] > get_cvar_num( "amx_hpk_tests" )) && (g_Ping[id] / g_Samples[id] > get_cvar_num( "amx_hpk_ping" )) ) kickPlayer(id) }
public cmdHpk(id,level,cid){ if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED new ping[5] new check_arr[5] new tests_arr[5] new delay_arr[5] read_argv(1,ping,4) read_argv(2,check_arr,4) read_argv(3,tests_arr,4) read_argv(4,delay_arr,4) new check = str_to_num(check_arr) new tests = str_to_num(tests_arr) new delay = str_to_num(delay_arr) if ( check < 5 ) check = 5 if ( tests < 3 ) tests = 3
if (read_argc() > 1){ set_cvar_string("amx_hpk_ping",ping) } if (read_argc() > 2) { set_cvar_num("amx_hpk_check",check) } if (read_argc() > 3) { set_cvar_num("amx_hpk_tests",tests) } if (read_argc() > 4) { set_cvar_num("amx_hpk_delay",delay) }
console_print(id,"Syntax: amx_hpk <ping to get kicked> <checks before kicks> <time between checks> <delay before first check in sec.>") console_print(id,"Current High_Ping_Kicker Settings:") console_print(id,"Maxping: %d Time between checks: %d Checkcount: %d Delay: %d",get_cvar_num("amx_hpk_ping"),get_cvar_num("amx_hpk_check"),get_cvar_num("amx_hpk_tests"),get_cvar_num("amx_hpk_delay")) return PLUGIN_HANDLED } Хочу чтобы побыстрее кикал при пинге больше 200 но не совсем быстро так как иногда при смане карты вначале раунда пинг прыгает у некоторых игроков. Код /*=============================================================================== = ------------------------------------ -*- Lame Connection Punisher 1.1 -*- ------------------------------------ ~~~~~~~~~~~~~~~ - Description - ~~~~~~~~~~~~~~~ This plugin improves your server's gameplay experience by automatically rejecting clients with "bad" conections, so that you'll never have to deal with players skipping around the map or being hard to hit anymore. It can also detect clients running any background applications that may be affecting their connection, such as P2P programs using up too many bandwidth. ~~~~~~~~~~~~~~~~~~~~ - How Does It Work - ~~~~~~~~~~~~~~~~~~~~ It checks for player's ping fluctuations and packet loss rates, since these seem to be the most trustable factors in determining if there are any issues, in my experience. ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - What Makes It Different - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Other solutions, such as Hing Ping Kickers, usually can't tell apart players with good or bad connections accurately. They may not detect a bad connection if the player's ping is too low, and likewise, they may end up kicking a player who's ping exceeds the limit but has a nice connection nonetheless, thus making you loose potential players. ~~~~~~~~~ - CVARS - ~~~~~~~~~ There are 2 main cvars to control the plugin's behavior (tolerance), though the default values are recommended. Please note that small ping fluctuations and packet loss occur even on the best connections, so DO NOT set these too low, unless you are on for some nasty results! * lcp_flux_limit [100] - Ping fluctuation limit (in ms.) * lcp_loss_limit [10] - Loss limit (% of packets) Additionally, you can specify whether the plugin should kick or ban these players by changing the following settings. * lcp_punishment [0/1/2] - 0 = Kick / 1 = Ban by SteamID / 2 = Ban by IP * lcp_ban_time [5] - Ban time in minutes (use 0 to permanently ban) Lastly, players with the immunity flags will not be checked at all. * lcp_immunity ["a"] - Immunity flags ~~~~~~~~~~~~~ - Changelog - ~~~~~~~~~~~~~ * v1.0: (Jan 05, 2009) - Public release - Added ban support - Added immunity feature * v1.1: (Feb 08, 2009) - Code optimized * v1.1a: (Feb 24, 2009) - Fixed IP ban code retrieving unneeded port number * v1.1b: (Mar 15, 2009) - Immunity flags now checked more efficiently - Extra optimization: CVARs are now cached at round start ================================================================================ =*/
#include <amxmodx>
const TASK_JOINMSG = 100 const TASK_DOCHECKS = 200 #define ID_JOINMSG (taskid-TASK_JOINMSG)
new cvar_flux, cvar_loss, cvar_punishment, cvar_bantime, cvar_immunity new g_maxflux, g_maxloss, g_immunityflags, g_maxplayers, g_connected[33] new g_lastping[33], g_fluxcounter[33], g_losscounter[33], g_immune[33]
// I wouldn't recommend lowering these unless // you wanna pick up a lot of false positives const Float:CHECK_FREQ = 5.0 const FLUX_TESTS = 12 const LOSS_TESTS = 12
public plugin_init() { register_plugin("Lame Connection Punisher", "1.1b", "MeRcyLeZZ") register_dictionary("lame_connection_punisher.txt") register_event("HLTV", "event_round_start", "a", "1=0", "2=0") cvar_flux = register_cvar("lcp_flux_limit", "100") cvar_loss = register_cvar("lcp_loss_limit", "10") cvar_punishment = register_cvar("lcp_punishment", "0") cvar_bantime = register_cvar("lcp_ban_time", "5") cvar_immunity = register_cvar("lcp_immunity", "a") g_maxplayers = get_maxplayers() }
public plugin_cfg() { // Cache CVARs after configs are loaded set_task(0.5, "event_round_start") // Start checking players set_task(CHECK_FREQ, "do_checks", TASK_DOCHECKS, _, _, "b") }
public event_round_start() { // Cache CVARs new flags[6] get_pcvar_string(cvar_immunity, flags, charsmax(flags)) g_immunityflags = read_flags(flags) g_maxflux = get_pcvar_num(cvar_flux) g_maxloss = get_pcvar_num(cvar_loss) // Check flags again for all players for (new id = 1; id <= g_maxplayers; id++) if (g_connected[id]) check_flags(id) }
public client_putinserver(id) { set_task(16.0, "join_message", id+TASK_JOINMSG) g_connected[id] = true }
public client_authorized(id) { check_flags(id) }
public client_infochanged(id) { check_flags(id) }
public client_disconnect(id) { remove_task(id+TASK_JOINMSG) g_fluxcounter[id] = 0 g_losscounter[id] = 0 g_lastping[id] = 0 g_immune[id] = 0 g_connected[id] = false }
public do_checks() { static id, ping, loss, name[32], auth[32], userid, minutes for (id = 1; id <= g_maxplayers; id++) { if (!g_connected[id] || g_immune[id]) continue; get_user_ping(id, ping, loss) if (loss > g_maxloss) g_losscounter[id]++ else if (g_losscounter[id] > 0) g_losscounter[id]-- if (g_losscounter[id] >= LOSS_TESTS) { get_user_name(id, name , sizeof name - 1) userid = get_user_userid(id) switch (get_pcvar_num(cvar_punishment)) { case 1: { get_user_authid(id, auth, sizeof auth - 1) minutes = get_pcvar_num(cvar_bantime) if (minutes > 0) { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes) log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes) server_cmd("kick #%d ^"%L^";wait;banid %d ^"%s^";wait;writeid", userid, id, "MSG_TARGET_LOSS", minutes, auth) } else { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_PBAN", name) log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name) server_cmd("kick #%d ^"%L^";wait;banid 0 ^"%s^";wait;writeid", userid, id, "MSG_TARGET_LOSS", auth) } } case 2: { get_user_ip(id, auth, sizeof auth - 1, 1) minutes = get_pcvar_num(cvar_bantime) if (minutes > 0) { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes) log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes) server_cmd("kick #%d ^"%L^";wait;addip %d ^"%s^";wait;writeip", userid, id, "MSG_TARGET_LOSS", minutes, auth) } else { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_PBAN", name) log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name) server_cmd("kick #%d ^"%L^";wait;addip 0 ^"%s^";wait;writeip", userid, id, "MSG_TARGET_LOSS", auth) } } default: { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_KICK", name) log_amx("%L", LANG_SERVER, "MSG_ALL_KICK", name) server_cmd("kick #%d ^"%L^"", userid, id, "MSG_TARGET_LOSS") } } continue; } if (abs(ping - g_lastping[id]) > g_maxflux) g_fluxcounter[id]++ else if (g_fluxcounter[id] > 0) g_fluxcounter[id]-- if (g_fluxcounter[id] >= FLUX_TESTS) { get_user_name(id, name , sizeof name - 1) userid = get_user_userid(id) switch (get_pcvar_num(cvar_punishment)) { case 1: { get_user_authid(id, auth, sizeof auth - 1) minutes = get_pcvar_num(cvar_bantime) if (minutes > 0) { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes) log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes) server_cmd("kick #%d ^"%L^";wait;banid %d ^"%s^";wait;writeid", userid, id, "MSG_TARGET_FLUX", minutes, auth) } else { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_PBAN", name) log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name) server_cmd("kick #%d ^"%L^";wait;banid 0 ^"%s^";wait;writeid", userid, id, "MSG_TARGET_FLUX", auth) } } case 2: { get_user_ip(id, auth, sizeof auth - 1, 1) minutes = get_pcvar_num(cvar_bantime) if (minutes > 0) { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes) log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes) server_cmd("kick #%d ^"%L^";wait;addip %d ^"%s^";wait;writeip", userid, id, "MSG_TARGET_FLUX", minutes, auth) } else { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_PBAN", name) log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name) server_cmd("kick #%d ^"%L^";wait;addip 0 ^"%s^";wait;writeip", userid, id, "MSG_TARGET_FLUX", auth) } } default: { client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_ALL_KICK", name) log_amx("%L", LANG_SERVER, "MSG_ALL_KICK", name) server_cmd("kick #%d ^"%L^"", userid, id, "MSG_TARGET_FLUX") } } continue; } g_lastping[id] = ping } }
public join_message(taskid) { client_print(ID_JOINMSG, print_chat, "[AMXX] %L", ID_JOINMSG, "JOIN_MSG", g_maxflux, g_maxloss) }
check_flags(id) { g_immune[id] = get_user_flags(id) & g_immunityflags } Здесь тоже ускорить процесс у кого пинг прыгает, непонимаю за что отвечает этот параметр const TASK_DOCHECKS = 200. Что 200 раз чекает игрока на прыжки пинга ? Также неясен параметр const TASK_JOINMSG = 100 Также неясно что за потери пакетов 10 стоит стандарт если я к примеру сделаю 1 что будет ? Также хотелось бы убрать в чате слово AMXX JOIN_MSG = Players with a lame connection will be punished (ping flux limit: 100, loss limit: 10). что нужно убрать в коде чтобы это дело не высвечивалось в чате Админы почините Спойлер. Уже бесит год не работает
|