Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила раздела

Перед созданием новой темы убедитесь, не искал ли кто-нибудь подобный плагин до вас, для этого следует воспользоваться поиском.

Все вновь созданные темы, с названием типа "Помогите найти", "А что это за плагин", "Ищу плагин", "Нужен плагин", "Подскажите пожалуйста название плагина" - будут удалены.
При создании темы постарайтесь максимально понятно сформулировать её заголовок так, чтобы он соответствовал функциям плагина который Вы ищите. В том случае, если Вам не удается сформулировать мысль и правильно расписать всё в теме, воспользуйтесь графическим редактором, к примеру Paint, что бы примерно изобразить функции нужного Вам плагина.

Исправить плагин Ping Kicker

Статус пользователя Dreandy
сообщение 12.3.2017, 14:02
Сообщение #1
Стаж: 12 лет

Сообщений: 1394
Благодарностей: 231
Полезность: 37

Доброго времени суток.
Как пофиксить этот плагин, чтобы банило на 5 минут.
У меня стоит FreshBans.

pingcontrol.sma
Код:
#include <amxmodx>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define ACCESS_LEVEL_IMMUNITY (ADMIN_MENU|ADMIN_LEVEL_H) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 85 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 5 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 10 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 4 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 10.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", "0.3", "Freedo.m | 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[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, 0, "^1[^4PING^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;
}
}
}


Отредактировал: Dreandy, - 12.3.2017, 14:03


критика - это лучший способ изменить человека
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя default1k
сообщение 12.3.2017, 14:05
Сообщение #2
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Код:
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players[i]));
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dreandy
сообщение 13.3.2017, 7:35
Сообщение #3
Стаж: 12 лет

Сообщений: 1394
Благодарностей: 231
Полезность: 37

default1k, а как сделать чтобы он банил на 5 минут?
я так понимаю за место kick написать ban, но как правильно указать время бана?


критика - это лучший способ изменить человека
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя default1k
сообщение 13.3.2017, 7:43
Сообщение #4
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Dreandy, Попробуй так
Cкрытый текст

Код:

server_cmd("amx_ban 5 #%d ^"Вы были забанены на чуть-чуть из-за плохого соединения^"", get_user_userid(players[i]));



Отредактировал: default1k, - 13.3.2017, 7:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
register
сообщение 13.3.2017, 8:08
Сообщение #5
Стаж: 9 лет 2 месяца

Сообщений: 14
Благодарностей: 1
Полезность: 0

Цитата(Dreandy @ 13.3.2017, 7:35) *
default1k, а как сделать чтобы он банил на 5 минут?
я так понимаю за место kick написать ban, но как правильно указать время бана?

или вот так еще
Код:
server_cmd("fb_ban 5 #%d ^"Вы были забанены на чуть-чуть из-за плохого соединения^"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dreandy
сообщение 13.3.2017, 11:08
Сообщение #6
Стаж: 12 лет

Сообщений: 1394
Благодарностей: 231
Полезность: 37

нашел проблему ещё одну.

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


выкидывает игроков у которых пинг до 80.
может быть 20-30 и все-равно выкидывает.


критика - это лучший способ изменить человека
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 13.3.2017, 14:40
Сообщение #7


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Может у них потери пакетов более 50
Код
MAX_ALLOWED_LOSS     50


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dreandy
сообщение 13.3.2017, 15:16
Сообщение #8
Стаж: 12 лет

Сообщений: 1394
Благодарностей: 231
Полезность: 37

ssx, хм.
такое вообще реально при пинге в 20-30?


критика - это лучший способ изменить человека
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 13.3.2017, 16:20
Сообщение #9


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Цитата(Dreandy @ 13.3.2017, 15:16) *
ssx, хм.
такое вообще реально при пинге в 20-30?

Реально.

Пинг = время
Loss = потеря пакетов

Какая разница какой пинг у игрока если на его пути половина пакетов теряется ?

Может где-то буферы переполнены и пакеты отбрасываются (дропаются) или еще какая-то проблема.

Это же UDP трафик .

Отредактировал: ssx, - 13.3.2017, 16:24


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: