new g_iWarning[33], g_iCountCheck[33], g_iLastPing[33], g_iBitValid;
public plugin_init()
{
register_plugin("Ping Control", "1.31", "neygomon");
set_task(INTERVAL_CHECK, "PingCheck", .flags = "b");
}
public client_putinserver(id)
{
set_task(7.0, "print_msg", id);
if(is_immunity(id)) return;
set_bit(g_iBitValid, id);
g_iWarning[id] = g_iCountCheck[id] = 0;
}
public print_msg(id)
{
if(!is_user_connected(id)) return;
client_print_color (id, print_team_red, "^1[^4%d^1] Игроки с пингом выше ^4 %d ^1и потерями выше ^4 %d ^1будут кикнуты с сервера!", PREFIX_CHAT, MAX_ALLOWED_PING, MAX_ALLOWED_LOSS)
}
public client_disconnect(id)
clr_bit(g_iBitValid, id);
public PingCheck()
{
static i, iPing, iLoss, players[32], pcount;
get_players(players, pcount, "ch")
for(i=0; i < pcount; i++)
{
if(!get_bit(g_iBitValid, players[i])) continue;
if(++g_iCountCheck[players[i]] < CHECK_COUNT)
{
get_user_ping(players[i], iPing, iLoss)
if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players[i]]) > MAX_FLUX)
{
if(++g_iWarning[players[i]] >= MAX_WARNING_CHECK)
{
static name[32]; get_user_name(players[i], name, charsmax(name));
client_print_color (0, print_team_red, "^1[^4%d^1] ^4 %d ^1был удален с сервера за плохое соединение!", PREFIX_CHAT, name);
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players[i]));
}
}
else if(g_iWarning[players[i]]) g_iWarning[players[i]]--;
g_iLastPing[players[i]] = iPing;
}
}
}