Форум Pawn.Wiki - Воплоти мечту в реальность!: Антифлуд SendClientMessage - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Антифлуд SendClientMessage Оценка: ***** 1 Голосов

#1
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
Данный скрипт не позволяет отправлять с сервера игроку повторяющиеся сообщение. Подключать необходимо после стандартных библиотек.

#include <AntiFloodSCM>

Особенности:

    ■   Работает только для последнего полученного сообщения.
    ■   В open.mp без использования макросов NO_TAGS и MIXED_SPELLINGS скрипт работать не будет.

Скачать: AntiFloodSCM.inc [1,43К]

Сообщение отредактировал M I S T E V: 05 мая 2025 - 14:27

0

#2
Пользователь офлайн   Saibot 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Почему ты не выкладиваешь подобные работы на GitHub?
0

#3
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSaibot (04 мая 2025 - 11:09) писал:

Почему ты не выкладиваешь подобные работы на GitHub?

:wpml_unsure:
0

#4
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
MAX_CHATBUBBLE_LENGTH - это, если что, не чат :) Уж лучше отдельную константу свою добавь.

Ну и в текущем виде достаточно регистр одной буквы сменить, чтоб обойти твою систему. Правда, чтоб это исправить, придётся ещё и баг параметра ignorecase в strcmp исправлять, который с кириллицей не дружит :wpml_unsure:

Плюс твоя система так же и сообщения от сервера будет браковать, даже если между ними прошло много времени. Уж лучше OnPlayerText перехватывать, если ты хочешь именно от игроков сообщения проверять.

Сообщение отредактировал DeimoS: 04 мая 2025 - 16:54

0

#5
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (04 мая 2025 - 16:53) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Данный скрипт не для игроков, а для серверной части. Например, когда игрок выполняет одно и то же действие и ему постоянно что-то спамит в чат (серверное сообщение) :blush: Поэтому и использую MAX_CHATBUBBLE_LENGTH



Поправил описание

Сообщение отредактировал M I S T E V: 04 мая 2025 - 18:41

0

#6
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (04 мая 2025 - 18:34) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


MAX_CHATBUBBLE_LENGTH - это макрос с максимальной длиной SetPlayerChatBubble. К SendClientMessage он никакого прямого отношения не имеет.
0

#7
Пользователь офлайн   Nexius 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Идея для библиотеки: распространить её функционал на все базовые функции вывода текста (SendClientMessage, SendClientMessageToAll, print и т.п.) и добавить опцию не тупо блокировать одинаковые сообщения, идущие подряд, а выводить второе и последующие нафлуженные сообщения как одно единственное, но с указанием количества раз, сколько оно продублировалось. Пример живой реализации есть в МТАшке из коробки, например (можно подсмотреть там для себя).

Вот как оно выглядит:
Скрытый текст [Показать]


Равносильный код, который для этого использовал бы на павн:
public OnGameModeInit()
{
	for(new i; i < 10; i++) print("Я люблю отправлять одинаковые сообщения в консоль сервера");
	return 1;
}

Сообщение отредактировал Nexius: 16 мая 2025 - 17:43

1

#8
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияNexius (16 мая 2025 - 17:10) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Я изначально думал сделать доп параметр, чтобы можно было включать/отключать блокировку повторяющихся сообщений. Может в ближайшее время сделаю такое для сообщений в игровой чат.

Не совсем понимаю, как реализовать подобное, чтобы выводить только последнее сообщение с количеством повтора, ведь перехватив функцию, я не знаю сколько ещё будет повторений :huh: Или тут нужно использовать таймер на несколько мс, и если вызывается снова функция и текст одинаковый - убиваем таймер и прибавляем к счётчику?

Сообщение отредактировал M I S T E V: 16 мая 2025 - 17:50

0

#9
Пользователь офлайн   Nexius 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (16 мая 2025 - 17:49) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

В той реализации есть две задержки: первая - это минимальный интервал между двумя одинаковыми сообщениями, попав в который второе сообщение уже считается началом флуда.

Как только включается флаг того, что конкретно этим сообщением начался флуд, то вместо его отправки (начиная со 2 раза, которое только что попало под минимальный интервал между вызовами) будет идти прибавление счетчика дапов и обновляться/продлеваться вторая задержка, по истечению которой будет выведено конечное сообщение + счетчик всех этих дапов.

Выводить конечное сообщение после окончания флуда можно было бы в каком-нибудь едином глобальном таймере, который бы просто отрыгивал всё то, что уже позволяет истёкшая вторая задержка для конкретного сообщения.

Сообщение отредактировал Nexius: 16 мая 2025 - 18:28

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика