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

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

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

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

2 страниц V   1 2

Падение сервера при кике рекламного бота

, Подправьте плагин
supergamer
сообщение 30.7.2019, 14:21
Сообщение #1
Стаж: 9 лет 8 месяцев

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

Есть плагин. Он должен кикать игроков, в имени которых содержится адрес:порт.
По типу айпишник:2701Х или айпишник:2702Х.
Если захожу сам под таким именем - то кикает нормально, без нареканий.
Но когда заходит рекламный бот и плагин кикает его - то в половине случаев сервер падает.
Почему так происходит, чего не хватает в плагине?

Код:

#include <amxmodx>
#include <fakemeta>

public plugin_init()
{
register_plugin("BotKicker", "1.0", "User");
}

public client_putinserver(id)
{
new oldname[32];
new ip[25];

get_user_info(id, "name", oldname, charsmax(oldname));
get_user_ip(id, ip, 24);

if(contain(oldname, ":2701") != -1 || contain(oldname, ":2702") != -1)
{
set_pdata_int(id, 205, 0);
log_to_file("players_kick.log", "Player %s [%s] dropped", oldname, ip);
server_cmd("kick #%d", get_user_userid(id));
return PLUGIN_HANDLED;
}

return PLUGIN_HANDLED;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
supergamer
сообщение 3.8.2019, 21:00
Сообщение #2
Стаж: 9 лет 8 месяцев

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

Может не хватает какой-то проверки?
Поскольку падает не всегда и исключительно на фейковых игроках, то есть на софтерах.
Никаких мыслей нет?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя wopox3
сообщение 3.8.2019, 21:04
Сообщение #3


Стаж: 13 лет

Сообщений: 333
Благодарностей: 222
Полезность: 902

убрать 19 строку
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onetwothree
сообщение 3.8.2019, 23:41
Сообщение #4


Стаж: 9 лет 4 месяца
Город: Toronto

Сообщений: 406
Благодарностей: 133
Полезность: 522

Если рехлдс, то проще установить reauthcheck и не париться.


здесь могла бы быть ваша реклама.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 9.8.2019, 10:09
Сообщение #5
Стаж: 9 лет 8 месяцев

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

Цитата(wopox3 @ 3.8.2019, 21:04) *
убрать 19 строку


Фишка в том, что строки изначально не было а падения были!!! Потом начитался в интернете, если кикается игрок у которого на момент кика, открыто игровое меню - то возможны падения сервера и рекомендация добавить set_pdata_int(id, 205, 0); чтобы оно закрыло мею, а потом кикнуло.

Но с этой строкой падения не прекратились!
Какие ещё есть мысли.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 14.8.2019, 19:26
Сообщение #6
Стаж: 9 лет 8 месяцев

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

Цитата(onetwothree @ 3.8.2019, 23:41) *
Если рехлдс, то проще установить reauthcheck и не париться.


Обычный HLDS.
Можно ли server_cmd("kick #%d", get_user_userid(id));
заменить какой-то эквивалентной функцией.
Может баном на 1 минуту?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 21.8.2019, 18:14
Сообщение #7
Стаж: 9 лет 8 месяцев

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

Эти рекламные боты хитрые. Они как-то нестандартно подключаются к серверу, чтобы тупо висеть в таблице счета. Можно ли как-то нестандартно дисконнектить игрока, чтобы у чувака который запускает свой бото-софт та программа тоже падала. Короче нужно заменить стандартный кик нестандартным дисконнектом.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 22.8.2019, 22:50
Сообщение #8


Иконка группы

Стаж: 13 лет

Сообщений: 2457
Благодарностей: 1482
Полезность: 770

HostGame.cf
От рекламных ботов спасает StopServerSpam


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 23.8.2019, 0:16
Сообщение #9


Стаж: 9 лет 9 месяцев

Сообщений: 1255
Благодарностей: 255
Полезность: 79

Цитата(supergamer @ 21.8.2019, 19:14) *
Эти рекламные боты хитрые. Они как-то нестандартно подключаются к серверу, чтобы тупо висеть в таблице счета. Можно ли как-то нестандартно дисконнектить игрока, чтобы у чувака который запускает свой бото-софт та программа тоже падала. Короче нужно заменить стандартный кик нестандартным дисконнектом.

есть определенный ник у него? чем отличается от обычного игрока, помимо таба?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 23.8.2019, 0:29
Сообщение #10
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Код:

public client_putinserver(id)
=>
public client_authorized(id)

Не надо кикать в client_putinserver
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
supergamer
сообщение 24.8.2019, 0:30
Сообщение #11
Стаж: 9 лет 8 месяцев

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

georgeml,

Цитата
Не надо кикать в client_putinserver


Молодец!!!
Гениально! Заменил, за 3 часа полет нормальный.

А ещё, можете подсказать как уменьшить чувствительность антифлуда.

Код:
#include <amxmodx>

new Float:g_Flooding[33] = {0.0, ...}
new g_Flood[33] = {0, ...}

new amx_flood_time;

public plugin_init()
{
register_plugin("Anti Flood", AMXX_VERSION_STR, "AMXX Dev Team")
register_dictionary("antiflood.txt")
register_clcmd("say", "chkFlood")
register_clcmd("say_team", "chkFlood")
amx_flood_time=register_cvar("amx_flood_time", "0.75")
}

public chkFlood(id)
{
new Float:maxChat = get_pcvar_float(amx_flood_time)

if (maxChat)
{
new Float:nexTime = get_gametime()

if (g_Flooding[id] > nexTime)
{
if (g_Flood[id] >= 3) // ЭТА СТРОКА
{
client_print(id, print_notify, "** %L **", id, "STOP_FLOOD")
g_Flooding[id] = nexTime + maxChat + 3.0
return PLUGIN_HANDLED
}
g_Flood[id]++
}
else if (g_Flood[id])
{
g_Flood[id]--
}

g_Flooding[id] = nexTime + maxChat
}

return PLUGIN_CONTINUE
}


Я думал, что количество сообщений ограничено строкой if (g_Flood[id] >= 3) - то есть антифлуд сработает, если игрок отправил 3 или больше сообщений за время 0.75 секунды.

Заменил цифру 3 на 5, перекомпилил плагин, а чувствительность срабатывания не изменилась. Как мне сделать чтобы за 0.75 секунды было разрешено 5 сообщений, а не 3?

Отредактировал: supergamer, - 24.8.2019, 0:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 26.8.2019, 22:29
Сообщение #12
Стаж: 9 лет 8 месяцев

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

Поставил в проверке (g_Flood[id] >= 10) но предупреждение о флуде всё равно выдается после 3-4 сообщения подряд, а не после 10-го. Что не так?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя dehost
сообщение 26.8.2019, 23:39
Сообщение #13


Стаж: 13 лет

Сообщений: 3147
Благодарностей: 1431
Полезность: 486

/

Отредактировал: dehost, - 26.8.2019, 23:40


Золотое правило нравственности:
"Относись к людям так, как хочешь, чтобы относились к тебе."
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 28.8.2019, 12:29
Сообщение #14
Стаж: 9 лет 8 месяцев

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

Кто шарит в программинге помогите плиз.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 30.8.2019, 10:36
Сообщение #15
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Увеличьте значение квара amx_flood_time в конфиге.
g_Flood[id] это не то, что влияет на частоту сообщений
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 30.8.2019, 20:38
Сообщение #16
Стаж: 9 лет 8 месяцев

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

какой смысл сранения переменной g_Flood[id] с цифрой 3, если g_Flood[id] это не порядковый номер сообщения. Тогда что это?

amx_flood_time - чем больше цифра, тем реже проверяется флуд-контроль? Чем больше цифра - тем хуже чувствительность, правильно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 30.8.2019, 21:51
Сообщение #17
Стаж: 9 лет 8 месяцев

Сообщений: 141
Благодарности: выкл.

Цитата(supergamer @ 31.8.2019, 0:38) *
какой смысл сранения переменной g_Flood[id] с цифрой 3, если g_Flood[id] это не порядковый номер сообщения. Тогда что это?

amx_flood_time - чем больше цифра, тем реже проверяется флуд-контроль? Чем больше цифра - тем хуже чувствительность, правильно?

g_Flood[id] - это количество варнингов. Если задержка между сообщениями будет меньше amx_flood_time, то будет варн. Набираешь 3 варна получаешь наказание.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 30.8.2019, 23:40
Сообщение #18
Стаж: 9 лет 8 месяцев

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

denzeroff,

Думаю, вы неправильно поняли этот код. Реально это работает не так.

Провожу эксперимент. Чтобы быстро отправлять сообщения биндим их на любую клавишу. В условии ставлю if (g_Flood[id] >= 6)

Быстро 4 раза нажимаю забинденую клавишу для отправки сообщения. И флуд контроль срабатывает. То есть 6 предупреждений быть не могло, так как собщений отправлялось всего 4, а флуд контроль уже сработал.

Как же это работает этот код?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 31.8.2019, 0:26
Сообщение #19
Стаж: 9 лет 8 месяцев

Сообщений: 141
Благодарности: выкл.

supergamer, зачем вы строите какие-то догадки? Дебажьте, раз хотите понять. Я вам кратко объяснил суть.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
supergamer
сообщение 31.8.2019, 18:48
Сообщение #20
Стаж: 9 лет 8 месяцев

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

Код:
#include <amxmodx>

new Float:g_Flooding[33] = {0.0, ...}
new g_Flood[33] = {0, ...}

new amx_flood_time;

public plugin_init()
{
register_plugin("Anti Flood", AMXX_VERSION_STR, "AMXX Dev Team")
register_dictionary("antiflood.txt")
register_clcmd("say", "chkFlood")
register_clcmd("say_team", "chkFlood")
amx_flood_time=register_cvar("amx_flood_time", "0.75")
}

public chkFlood(id)
{
new Float:maxChat = get_pcvar_float(amx_flood_time)

if (maxChat)
{
new Float:nexTime = get_gametime()

if (g_Flooding[id] > nexTime)
{
if (g_Flood[id] >= 3) // ЭТА СТРОКА
{
client_print(id, print_notify, "** %L **", id, "STOP_FLOOD")
g_Flooding[id] = nexTime + maxChat + 3.0
return PLUGIN_HANDLED
}
g_Flood[id]++
}
else if (g_Flood[id])
{
g_Flood[id]--
}

g_Flooding[id] = nexTime + maxChat
}

return PLUGIN_CONTINUE
}


Нужно в плагин добавить 1 исключение "say /buyhp" , чтобы на него антифлуд никогда не срабатывал.

Как его добавить?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: