Иконка ресурса

Fix сообщения 255 байт / AI 1.6

Версия Дата выпуска Скачивания Оценка  
1.6 55 5.00 звёзд 1 оценок Скачать
1.4 129 0.00 звёзд 0 оценок Скачать

Описание плагина​


Плагин предназначен для обработки больших пользовательских сообщений, которые превышают лимит в 255 байт. Он автоматически разбивает такие сообщения на более мелкие части и отправляет их по частям, предотвращая ошибку:

C-подобный:
DLL_MessageEnd: Refusing to send user message of 256 bytes to client, user message size limit is 255 bytes

Основные возможности​


  • Конфигурируемость - настройка перехватываемых сообщений через конфиг файл
  • Динамическое управление - добавление новых типов сообщений через команды админа без перезагрузки плагина
  • Умное разбиение - правильный расчет размера сообщения с учетом всех параметров (заголовки, строки, накладные расходы)
  • Гибкая структура - поддержка разных типов структур сообщений (простой текст, SayText2 и др.)
  • Автоматическое создание конфига - плагин создает дефолтный конфиг при первом запуске

Установка​


  1. Скомпилируйте плагин
    C-подобный:
    universal_message_splitter.sp
    в
    C-подобный:
    .smx
    файл
  2. Скопируйте
    C-подобный:
    universal_message_splitter.smx
    в папку
    C-подобный:
    addons/sourcemod/plugins/
  3. Перезагрузите сервер или выполните команду
    C-подобный:
    sm plugins reload universal_message_splitter
  4. Плагин автоматически создаст конфиг файл
    C-подобный:
    addons/sourcemod/configs/universal_message_splitter.cfg
    при первом запуске

Настройка через конфиг файл​


Конфиг файл находится по пути:
C-подобный:
addons/sourcemod/configs/universal_message_splitter.cfg

Структура конфига:​


C-подобный:
"MessageSplitter"
{
	"Messages"
	{
		// SayText2 - структура: entity (1 byte) + chat type (1 byte) + message (string) + name (string)
		"SayText2"
		{
			"structure"		"1"
		}
		
		// TextMsg - простой текст
		"TextMsg"
		{
			"structure"		"0"
		}
		
		// HintText - простой текст
		"HintText"
		{
			"structure"		"0"
		}
	}
}

Типы структур сообщений:​


  • structure "0" - Простой текст. Сообщение содержит только одну строку текста.
    • Примеры: TextMsg, HintText
  • structure "1" - SayText2 структура. Сообщение содержит:
    • entity index (1 byte)
    • chat type (1 byte)
    • message text (string)
    • name parameter (string)

Добавление новых типов сообщений:​


Чтобы добавить новый тип сообщения для перехвата, добавьте в конфиг:

C-подобный:
"YourMessageName"
{
	"structure"		"0"  // или "1" в зависимости от структуры
}

После изменения конфига выполните команду:
C-подобный:
sm_splitter_reload

Команды админа​


sm_splitter_reload​

Перезагружает конфигурацию плагина из файла.
  • Требуемые права:
    C-подобный:
    ADMFLAG_CONFIG
    (флаг 'o')
  • Использование:
    C-подобный:
    sm_splitter_reload

sm_splitter_add​

Добавляет новое сообщение для перехвата без перезагрузки плагина.
  • Требуемые права:
    C-подобный:
    ADMFLAG_CONFIG
    (флаг 'o')
  • Использование:
    C-подобный:
    sm_splitter_add <message_name> [structure_type]
  • Параметры:
    • message_name - имя сообщения для перехвата (например, "SayText2")
    • structure_type - тип структуры (0 или 1, по умолчанию 0)
  • Примеры:
    • C-подобный:
      sm_splitter_add SayText2 1
    • C-подобный:
      sm_splitter_add TextMsg

sm_splitter_list​

Показывает список всех перехватываемых сообщений.
  • Требуемые права:
    C-подобный:
    ADMFLAG_CONFIG
    (флаг 'o')
  • Использование:
    C-подобный:
    sm_splitter_list
  • Вывод: список сообщений с указанием их структуры

Технические детали​


Как работает плагин:​


  1. Плагин перехватывает указанные пользовательские сообщения через
    C-подобный:
    HookUserMessage
  2. При получении сообщения проверяется его размер через
    C-подобный:
    BfGetNumBytesLeft
  3. Если размер превышает 255 байт, сообщение читается полностью с учетом его структуры
  4. Текст разбивается на части с учетом:
    • Заголовков сообщения (entity index, chat type для SayText2)
    • Дополнительных параметров (name для SayText2)
    • Накладных расходов протокола (~5-10 байт)
    • Null-terminators для строк
  5. Каждая часть отправляется как отдельное сообщение
  6. Оригинальное сообщение блокируется (
    C-подобный:
    Plugin_Handled
    )

Расчет размера чанка:​


  • Для структуры типа 0 (простой текст):
    C-подобный:
    maxTextSize = 255 - 1 (null) - 5 (накладные) = 249 байт
  • Для структуры типа 1 (SayText2):
    C-подобный:
    maxTextSize = 255 - 1 (entity) - 1 (chat) - strlen(name) - 1 (null) - 5 (накладные)

Изменения в версии 1.6​


Основные изменения:​


  • Конфигурируемость - добавлена возможность настройки перехватываемых сообщений через конфиг файл
  • Динамическое добавление сообщений - можно добавлять новые типы сообщений для перехвата через команды админа
  • Улучшенный расчет размера - правильный учет всех параметров сообщения (заголовки, строки, накладные расходы)
  • Гибкая структура сообщений - поддержка разных типов структур (простой текст, SayText2 и др.)
  • Автоматическое создание конфига - плагин создает дефолтный конфиг при первом запуске

Новые возможности:​


  • Конфиг файл
    C-подобный:
    addons/sourcemod/configs/universal_message_splitter.cfg
  • Три команды админа для управления плагином
  • Поддержка разных типов структур сообщений
  • Автоматическая валидация игроков перед отправкой

Технические улучшения:​


  • Исправлена критическая ошибка StartMessage - добавлена валидация массива игроков
  • Правильная обработка структуры SayText2 - корректное чтение и сохранение всех параметров
  • Улучшен расчет размера сообщения с учетом всех байтов (заголовки, строки, null-terminators)
  • Добавлена проверка размера перед отправкой каждого чанка
  • Оптимизирован размер чанков с учетом накладных расходов протокола
  • Исправлены все предупреждения компилятора

Примеры использования​


Пример 1: Добавление нового сообщения через команду​


C-подобный:
// В консоли сервера или через rcon:
sm_splitter_add HudMsg 0

Это добавит сообщение "HudMsg" с простой структурой (только текст) для перехвата.

Пример 2: Настройка через конфиг​


Отредактируйте
C-подобный:
addons/sourcemod/configs/universal_message_splitter.cfg
:

C-подобный:
"MessageSplitter"
{
	"Messages"
	{
		"SayText2"
		{
			"structure"		"1"
		}
		"TextMsg"
		{
			"structure"		"0"
		}
		"HintText"
		{
			"structure"		"0"
		}
		"YourCustomMessage"
		{
			"structure"		"0"
		}
	}
}

Затем выполните:
C-подобный:
sm_splitter_reload

Пример 3: Просмотр списка перехватываемых сообщений​


C-подобный:
sm_splitter_list

Вывод:
C-подобный:
[Message Splitter] Перехватываемые сообщения (3):
  - SayText2 (структура: 1)
  - TextMsg (структура: 0)
  - HintText (структура: 0)

Решение проблем​


Плагин не перехватывает сообщения​


  • Проверьте, что сообщение добавлено в конфиг или через команду
    C-подобный:
    sm_splitter_add
  • Убедитесь, что имя сообщения написано правильно (регистр важен!)
  • Проверьте логи на наличие ошибок:
    C-подобный:
    addons/sourcemod/logs/error_*.log
  • Выполните
    C-подобный:
    sm_splitter_list
    для проверки списка перехватываемых сообщений

Сообщения все еще обрезаются​


  • Убедитесь, что плагин активен:
    C-подобный:
    sm plugins list
  • Проверьте размер сообщения - плагин разбивает только сообщения больше 255 байт
  • Проверьте правильность типа структуры в конфиге

Ошибки в логах​


  • Если видите ошибку "Не удалось перехватить сообщение" - проверьте правильность имени сообщения
  • Если сообщение не найдено, возможно оно не существует в игре или написано неправильно

Техническая информация​


  • Версия плагина: 1.6
  • Автор: DENZEL519 / AI
  • Требования: SourceMod 1.10.0+
  • Зависимости: Нет
  • Конфликты: Плагины, которые также перехватывают те же сообщения

Поддержка​


При возникновении проблем:
  • Проверьте логи:
    C-подобный:
    addons/sourcemod/logs/error_*.log
  • Убедитесь, что конфиг файл корректен
  • Проверьте права доступа к командам (флаг 'o' для ADMFLAG_CONFIG)
  • Используйте команду
    C-подобный:
    sm_splitter_list
    для диагностики

Changelog​


v1.6 (текущая версия)​

  • Полная переработка плагина
  • Добавлена конфигурируемость через конфиг файл
  • Добавлены команды админа для управления
  • Улучшен расчет размера сообщений
  • Исправлены все ошибки компиляции

v1.5​

  • Исправлена критическая ошибка StartMessage
  • Правильная обработка структуры SayText2
  • Улучшена обработка разных типов сообщений
Сверху Снизу