[1.31] Ping Control

glokk

Постоялец
Регистрация
9 Июн 2017
Сообщения
120
Симпатии
36
Пол
Мужской
#1
Автор: neygomon

Описание:

Ping Control
- плагин, который может кикать игроков как за высокий пинг, так и за нестабильное соединение. Принцип работы подразумевает максимальную производительность при минимальных затратах ресурсов. В обычных кикерах типа high ping kicker игрок проверяется постоянно по несколько раз в минуту, в итоге мы лишний раз нагружаем сервер бессмысленной работой. Ведь если игрок проверен и пинг у него хороший, зачем его проверять снова раз за разом?

Особенности:
  • Широкие возможности по слежению за состоянием игрока. Можно кикать как за высокий пинг, так и за скачки пинга и потерю пакетов. Игрок может иметь низкий пинг, но всё равно двигаться рывками и лагать из-за прерывистого соединения.
  • Иммунитет админам.
  • Минимальная нагрузка на сервер.
Настройки:
PHP:
#define ACCESS_LEVEL_IMMUNITY     (ADMIN_MENU|ADMIN_LEVEL_H)     // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING     100                 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX        30            // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS     20             // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK     5            // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK         10.0             // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define CHECK_COUNT         MAX_WARNING_CHECK + 3     // Количество проверок определенного игрока (снижаем и без того маленькую нагрузку xD)
Установка и настройка:
  • скачиваем исходник плагина.
  • меняем настройки по своему усмотрению.
  • компилируем.
  • ставим на сервер и радуемся игре с только хорошими игроками)
 

Вложения

ade888

Пользователь
Регистрация
9 Июн 2017
Сообщения
49
Симпатии
3
Пол
Мужской
#2
Ребята! Скиньте пожалуйста хорошие настройки пинг контролера , просто дело в том что игрок заходит с большим пингом НО пинг у него пригает начиная с 40 до 270 и так далее 270 38 , 38 160
 

glokk

Постоялец
Регистрация
9 Июн 2017
Сообщения
120
Симпатии
36
Пол
Мужской
#3
ade888, даже если пинг прыгает, его все равно кикнет. Ибо проверки наматываются. Попробуй поюзать стандартные, а потом отталкивайся от них уже, если что-то не устроит.
 

punisher666

Пользователь
Регистрация
13 Июн 2017
Сообщения
75
Симпатии
35
Пол
Мужской
#4
ade888, уменьшай
#define CHECK_COUNT и нет проблем.
 

LimBo

Пользователь
Регистрация
10 Июл 2017
Сообщения
115
Симпатии
2
Пол
Мужской
#5
ade888, уменьшай
#define CHECK_COUNT и нет проблем.
ade888, даже если пинг прыгает, его все равно кикнет. Ибо проверки наматываются. Попробуй поюзать стандартные, а потом отталкивайся от них уже, если что-то не устроит.
Ребята! Скиньте пожалуйста хорошие настройки пинг контролера , просто дело в том что игрок заходит с большим пингом НО пинг у него пригает начиная с 40 до 270 и так далее 270 38 , 38 160
Автор: neygomon

Описание:

Ping Control
- плагин, который может кикать игроков как за высокий пинг, так и за нестабильное соединение. Принцип работы подразумевает максимальную производительность при минимальных затратах ресурсов. В обычных кикерах типа high ping kicker игрок проверяется постоянно по несколько раз в минуту, в итоге мы лишний раз нагружаем сервер бессмысленной работой. Ведь если игрок проверен и пинг у него хороший, зачем его проверять снова раз за разом?

Особенности:
  • Широкие возможности по слежению за состоянием игрока. Можно кикать как за высокий пинг, так и за скачки пинга и потерю пакетов. Игрок может иметь низкий пинг, но всё равно двигаться рывками и лагать из-за прерывистого соединения.
  • Иммунитет админам.
  • Минимальная нагрузка на сервер.
Настройки:
PHP:
#define ACCESS_LEVEL_IMMUNITY     (ADMIN_MENU|ADMIN_LEVEL_H)     // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING     100                 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX        30            // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS     20             // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK     5            // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK         10.0             // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define CHECK_COUNT         MAX_WARNING_CHECK + 3     // Количество проверок определенного игрока (снижаем и без того маленькую нагрузку xD)
Установка и настройка:
  • скачиваем исходник плагина.
  • меняем настройки по своему усмотрению.
  • компилируем.
  • ставим на сервер и радуемся игре с только хорошими игроками)
 

wizardD

Пользователь
Регистрация
1 Июл 2017
Сообщения
70
Симпатии
7
Пол
Мужской
#6
MAX_ALLOWED_LOSS 20 я думаю мало ,30-50 норм мне лично кажется идеальное значение
 

wizardD

Пользователь
Регистрация
1 Июл 2017
Сообщения
70
Симпатии
7
Пол
Мужской
#7
Если я не ошибаюсь сюда можно присобачить уведомление о пинге игрока, будут уведомления игроку идти

ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
}

+ ChatColor(players, "Предупреждение %i/%i: ваш пинг %d, макс. допустимый пинг на сервере %i", g_iWarning[players], MAX_WARNING_CHECK, iPing, MAX_ALLOWED_PING);
}
else if(g_iWarning[players]) g_iWarning[players[players]--;
 
Последнее редактирование:

dazzle

Пользователь
Регистрация
14 Сен 2017
Сообщения
1
Симпатии
0
#8
Если я не ошибаюсь сюда можно присобачить уведомление о пинге игрока, будут уведомления игроку идти

ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
}

+ ChatColor(players, "Предупреждение %i/%i: ваш пинг %d, макс. допустимый пинг на сервере %i", g_iWarning[players], MAX_WARNING_CHECK, iPing, MAX_ALLOWED_PING);
}
else if(g_iWarning[players]) g_iWarning[players[players]--;
Что лучше использовать в этом плагине g_iLastPing или iPing?
ChatColor(players, "Предупреждение %i/%i: ваш пинг %d, макс. допустимый пинг на сервере %i", g_iWarning[players], MAX_WARNING_CHECK, iPing, MAX_ALLOWED_PING);
 

sonyx

Команда форума
Модератор
Регистрация
8 Июн 2017
Сообщения
415
Симпатии
220
Пол
Мужской
#9
dazzle, g_iLastPing выведет пинг прошлого замера
iPing - текущий пинг
 

REVO

Пользователь
Только чтение
Регистрация
9 Июн 2017
Сообщения
172
Симпатии
28
Пол
Мужской
#10
ткните носом что удалить (что-бы не накосячить мне), что-бы в чате не было видно, кого там за пинг выкинуло.
// *************************************************************************************//
// Плагин загружен с www.neugomon.ru //
// Автор: Neygomon [ https://neugomon.ru/members/1/ ] //
// Официальная тема поддержки: ReGameDLL - ReGameDLL_CS - reverse engineered mod CS //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА! //
// *************************************************************************************//

#include <amxmodx>

#define ACCESS_LEVEL_IMMUNITY (ADMIN_MENU|ADMIN_LEVEL_H) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 120 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 30 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 30 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 3 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 30.0 // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define CHECK_COUNT MAX_WARNING_CHECK + 3 // Количество проверок определенного игрока ( снижаем и без того маленькую нагрузку xD )

#define is_immunity(%0) ((get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY) || is_user_bot(%0) || is_user_hltv(%0))

#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))

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)
{
if(is_immunity(id)) return;
set_bit(g_iBitValid, id);
g_iWarning[id] = g_iCountCheck[id] = 0;
}

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)) continue;
if(++g_iCountCheck[players] < CHECK_COUNT)
{
get_user_ping(players, iPing, iLoss)

if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players]) > MAX_FLUX)
{
if(++g_iWarning[players] >= MAX_WARNING_CHECK)
{
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4Ping Control^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
}
}
else if(g_iWarning[players]) g_iWarning[players]--;
g_iLastPing[players] = iPing;
}
}
}

stock ChatColor(const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 2);

if(!IdMsg) IdMsg = get_user_msgid("SayText");

get_players(players, pnum, "ch");

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players);
write_byte(players);
write_string(szMsg);
message_end();
}
}
 

breakt

Команда форума
Администратор
Регистрация
8 Июн 2017
Сообщения
104
Симпатии
26
Пол
Мужской
#11
PHP:
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4Ping Control^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
вот это
 

wizardD

Пользователь
Регистрация
1 Июл 2017
Сообщения
70
Симпатии
7
Пол
Мужской
#12
Чтоб
ткните носом что удалить (что-бы не накосячить мне), что-бы в чате не было видно, кого там за пинг выкинуло.
// *************************************************************************************//
// Плагин загружен с www.neugomon.ru //
// Автор: Neygomon [ https://neugomon.ru/members/1/ ] //
// Официальная тема поддержки: ReGameDLL - ReGameDLL_CS - reverse engineered mod CS //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА! //
// *************************************************************************************//

#include <amxmodx>

#define ACCESS_LEVEL_IMMUNITY (ADMIN_MENU|ADMIN_LEVEL_H) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 120 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 30 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 30 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 3 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 30.0 // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define CHECK_COUNT MAX_WARNING_CHECK + 3 // Количество проверок определенного игрока ( снижаем и без того маленькую нагрузку xD )

#define is_immunity(%0) ((get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY) || is_user_bot(%0) || is_user_hltv(%0))

#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))

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)
{
if(is_immunity(id)) return;
set_bit(g_iBitValid, id);
g_iWarning[id] = g_iCountCheck[id] = 0;
}

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)) continue;
if(++g_iCountCheck[players] < CHECK_COUNT)
{
get_user_ping(players, iPing, iLoss)

if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players]) > MAX_FLUX)
{
if(++g_iWarning[players] >= MAX_WARNING_CHECK)
{
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4Ping Control^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
}
}
else if(g_iWarning[players]) g_iWarning[players]--;
g_iLastPing[players] = iPing;
}
}
}

stock ChatColor(const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 2);

if(!IdMsg) IdMsg = get_user_msgid("SayText");

get_players(players, pnum, "ch");

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players);
write_byte(players);
write_string(szMsg);
message_end();
}
}
Код:
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));
-                    ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", 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; 
        }
    }
}

-stock ChatColor(const szMessage[], any:...)
-{
-    static pnum, players[32], szMsg[190], IdMsg;
-    vformat(szMsg, charsmax(szMsg), szMessage, 2);
-
-    if(!IdMsg) IdMsg = get_user_msgid("SayText");
-
-    get_players(players, pnum, "ch");
-
-    for(new i; i < pnum; i++)
-    {
-        message_begin(MSG_ONE, IdMsg, .player = players[i]);
-        write_byte(players[i]);
-        write_string(szMsg);
-        message_end();
-    }
-}
 

REVO

Пользователь
Только чтение
Регистрация
9 Июн 2017
Сообщения
172
Симпатии
28
Пол
Мужской
#13
wizardD, ну мне как бы, это удалять не нужно. это же ему клиенту пишет уже при кике.
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
 

wizardD

Пользователь
Регистрация
1 Июл 2017
Сообщения
70
Симпатии
7
Пол
Мужской
#14
wizardD, ну мне как бы, это удалять не нужно. это же ему клиенту пишет уже при кике.
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
А там что - на против этого стоит?
 

REVO

Пользователь
Только чтение
Регистрация
9 Июн 2017
Сообщения
172
Симпатии
28
Пол
Мужской
#15
А там что - на против этого стоит?
в том блоке что ты дал удалить есть это server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
а мне это удалять не надо. именно эту строчку
 

wizardD

Пользователь
Регистрация
1 Июл 2017
Сообщения
70
Симпатии
7
Пол
Мужской
#16
в том блоке что ты дал удалить есть это server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players));
а мне это удалять не надо. именно эту строчку
Короче не пиши мне ..
На против данной строчки "-" не было !!!
Удалив ниже код ,у тебя останется сток, не используемый ,если он не используется на хера он нужен.
Код:
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4Ping Control^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
P.S не умеешь не берись
 

sonyx

Команда форума
Модератор
Регистрация
8 Июн 2017
Сообщения
415
Симпатии
220
Пол
Мужской
#17
wizardD, тут попадаются люди, которые писать правильно даже не могут, а ты им гитовскую разметку скормить пытаешься) Просто поверь - это бестолку, не поймут)
 

wizardD

Пользователь
Регистрация
1 Июл 2017
Сообщения
70
Симпатии
7
Пол
Мужской
#18
wizardD, тут попадаются люди, которые писать правильно даже не могут, а ты им гитовскую разметку скормить пытаешься) Просто поверь - это бестолку, не поймут)
Пусть скажут спасибо что не готовые .diff файлы кидаю от эклипса )) ..
Что руками все "-" и "+" прописываю
 

glokk

Постоялец
Регистрация
9 Июн 2017
Сообщения
120
Симпатии
36
Пол
Мужской
#19
REVO, чтобы не писало в чат о кикнутом игроке удали эту строку. если я так понял.
PHP:
ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
 

REVO

Пользователь
Только чтение
Регистрация
9 Июн 2017
Сообщения
172
Симпатии
28
Пол
Мужской
#20
да мне уже помог друг. спасибо ему огромное. и в отличии от некоторых. он нормальный человек. и не пишет в личку что ты долбаеб сделай так. всем спасибо. вот может кому тоже будет нужно.
p.s ппц и чего так злится то на меня? для того он и форум, мне что уже спросить нормально нельзя? я в скриптинге не понимаю.
 

Вложения