Описание плагина
Плагин предназначен для обработки больших пользовательских сообщений, которые превышают лимит в 255 байт. Он автоматически разбивает такие сообщения на более мелкие части и отправляет их по частям, предотвращая ошибку:
DLL_MessageEnd: Refusing to send user message of 256 bytes to client, user message size limit is 255 bytes
Основные возможности
- Конфигурируемость - настройка перехватываемых сообщений через конфиг файл
- Динамическое управление - добавление новых типов сообщений через команды админа без перезагрузки плагина
- Умное разбиение - правильный расчет размера сообщения с учетом всех параметров (заголовки, строки, накладные расходы)
- Гибкая структура - поддержка разных типов структур сообщений (простой текст, SayText2 и др.)
- Автоматическое создание конфига - плагин создает дефолтный конфиг при первом запуске
Установка
- Скомпилируйте плагин
universal_message_splitter.sp
в
файл
- Скопируйте
universal_message_splitter.smx
в папку
addons/sourcemod/plugins/
- Перезагрузите сервер или выполните команду
sm plugins reload universal_message_splitter
- Плагин автоматически создаст конфиг файл
addons/sourcemod/configs/universal_message_splitter.cfg
при первом запуске
Настройка через конфиг файл
Конфиг файл находится по пути:
addons/sourcemod/configs/universal_message_splitter.cfg
Структура конфига:
"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)
Добавление новых типов сообщений:
Чтобы добавить новый тип сообщения для перехвата, добавьте в конфиг:
"YourMessageName"
{
"structure" "0" // или "1" в зависимости от структуры
}
После изменения конфига выполните команду:
Команды админа
sm_splitter_reload
Перезагружает конфигурацию плагина из файла.
- Требуемые права:
(флаг 'o')
- Использование:
sm_splitter_add
Добавляет новое сообщение для перехвата без перезагрузки плагина.
- Требуемые права:
(флаг 'o')
- Использование:
sm_splitter_add <message_name> [structure_type]
- Параметры:
- message_name - имя сообщения для перехвата (например, "SayText2")
- structure_type - тип структуры (0 или 1, по умолчанию 0)
- Примеры:
-
sm_splitter_add SayText2 1
-
sm_splitter_list
Показывает список всех перехватываемых сообщений.
- Требуемые права:
(флаг 'o')
- Использование:
- Вывод: список сообщений с указанием их структуры
Технические детали
Как работает плагин:
- Плагин перехватывает указанные пользовательские сообщения через
- При получении сообщения проверяется его размер через
- Если размер превышает 255 байт, сообщение читается полностью с учетом его структуры
- Текст разбивается на части с учетом:
- Заголовков сообщения (entity index, chat type для SayText2)
- Дополнительных параметров (name для SayText2)
- Накладных расходов протокола (~5-10 байт)
- Null-terminators для строк
- Каждая часть отправляется как отдельное сообщение
- Оригинальное сообщение блокируется (
)
Расчет размера чанка:
- Для структуры типа 0 (простой текст):
maxTextSize = 255 - 1 (null) - 5 (накладные) = 249 байт
- Для структуры типа 1 (SayText2):
maxTextSize = 255 - 1 (entity) - 1 (chat) - strlen(name) - 1 (null) - 5 (накладные)
Изменения в версии 1.6
Основные изменения:
- Конфигурируемость - добавлена возможность настройки перехватываемых сообщений через конфиг файл
- Динамическое добавление сообщений - можно добавлять новые типы сообщений для перехвата через команды админа
- Улучшенный расчет размера - правильный учет всех параметров сообщения (заголовки, строки, накладные расходы)
- Гибкая структура сообщений - поддержка разных типов структур (простой текст, SayText2 и др.)
- Автоматическое создание конфига - плагин создает дефолтный конфиг при первом запуске
Новые возможности:
- Конфиг файл
addons/sourcemod/configs/universal_message_splitter.cfg
- Три команды админа для управления плагином
- Поддержка разных типов структур сообщений
- Автоматическая валидация игроков перед отправкой
Технические улучшения:
- Исправлена критическая ошибка StartMessage - добавлена валидация массива игроков
- Правильная обработка структуры SayText2 - корректное чтение и сохранение всех параметров
- Улучшен расчет размера сообщения с учетом всех байтов (заголовки, строки, null-terminators)
- Добавлена проверка размера перед отправкой каждого чанка
- Оптимизирован размер чанков с учетом накладных расходов протокола
- Исправлены все предупреждения компилятора
Примеры использования
Пример 1: Добавление нового сообщения через команду
// В консоли сервера или через rcon:
sm_splitter_add HudMsg 0
Это добавит сообщение "HudMsg" с простой структурой (только текст) для перехвата.
Пример 2: Настройка через конфиг
Отредактируйте
addons/sourcemod/configs/universal_message_splitter.cfg
:
"MessageSplitter"
{
"Messages"
{
"SayText2"
{
"structure" "1"
}
"TextMsg"
{
"structure" "0"
}
"HintText"
{
"structure" "0"
}
"YourCustomMessage"
{
"structure" "0"
}
}
}
Затем выполните:
Пример 3: Просмотр списка перехватываемых сообщений
Вывод:
[Message Splitter] Перехватываемые сообщения (3):
- SayText2 (структура: 1)
- TextMsg (структура: 0)
- HintText (структура: 0)
Решение проблем
Плагин не перехватывает сообщения
- Проверьте, что сообщение добавлено в конфиг или через команду
- Убедитесь, что имя сообщения написано правильно (регистр важен!)
- Проверьте логи на наличие ошибок:
addons/sourcemod/logs/error_*.log
- Выполните
для проверки списка перехватываемых сообщений
Сообщения все еще обрезаются
- Убедитесь, что плагин активен:
- Проверьте размер сообщения - плагин разбивает только сообщения больше 255 байт
- Проверьте правильность типа структуры в конфиге
Ошибки в логах
- Если видите ошибку "Не удалось перехватить сообщение" - проверьте правильность имени сообщения
- Если сообщение не найдено, возможно оно не существует в игре или написано неправильно
Техническая информация
- Версия плагина: 1.6
- Автор: DENZEL519 / AI
- Требования: SourceMod 1.10.0+
- Зависимости: Нет
- Конфликты: Плагины, которые также перехватывают те же сообщения
Поддержка
При возникновении проблем:
- Проверьте логи:
addons/sourcemod/logs/error_*.log
- Убедитесь, что конфиг файл корректен
- Проверьте права доступа к командам (флаг 'o' для ADMFLAG_CONFIG)
- Используйте команду
для диагностики
Changelog
v1.6 (текущая версия)
- Полная переработка плагина
- Добавлена конфигурируемость через конфиг файл
- Добавлены команды админа для управления
- Улучшен расчет размера сообщений
- Исправлены все ошибки компиляции
v1.5
- Исправлена критическая ошибка StartMessage
- Правильная обработка структуры SayText2
- Улучшена обработка разных типов сообщений