Authum — загрузчик модулей для Metamod-P (HLDS)

Authum — загрузчик модулей для Metamod-P (HLDS) 3.0.0

Версия Дата выпуска Скачивания Рейтинг  
3.0.0 3 0,00 звёзд Оценок: 0 Скачать
2.0.1 26 0,00 звёзд Оценок: 0 Скачать
2.0.0 6 0,00 звёзд Оценок: 0 Скачать
Перед обновлением
  • ABI модулей 1.0.0. Модули, собранные под 2.x, нужно пересобрать.
    Дальше будет проще: новые функции добавляются только в конец таблиц, и модуль 1.x загружается на любом Authum 1.x.
  • Новая раскладка модулей. У каждого модуля своя папка addons/authum/modules/<имя>/: <имя>.so, configs/, lang/, data/, logs/. Перенесите туда модули и их конфиги.
  • Логи переделаны. Файл addons/authum/authum.log больше не пишется — смотрите addons/authum/logs/ и logs/ в папке каждого модуля.

Для администраторов
  • Модуль ставится и удаляется папкой. Обновление модуля заменяет только .so и lang/ — ваши configs/, data/ и logs/ не трогаются. Без modules.list загружаются все папки из modules/, со списком — только перечисленные.
  • Логи по дням. Каждый модуль пишет modules/<имя>/logs/ГГГГ-ММ-ДД.log; строки самого Authum, а также предупреждения и ошибки всех модулей (с пометкой [модуль]) — в addons/authum/logs/.
  • Один конфиг addons/authum/configs/authum.cfg(идёт в архиве с комментариями):
    • log_level — общий уровень, <модуль>.log_level — для отдельного модуля;
    • log_console — что выводить ещё и в консоль сервера / лог HLDS;
    • log_keep_days — сколько дней хранить логи (по умолчанию 30, старые удаляются).
    Конфиг перечитывается при каждой смене карты.
  • Отдельные журналы модулей, например logs/bans/, со своим уровнем (<модуль>.bans.log_level).
  • Логи не тормозят сервер: строки копятся и пишутся раз в кадр, ошибки — сразу.
  • Исправлено: на 32-битных серверах с XFS, btrfs и сетевыми дисками папка modules/ читалась пустой, и модули не загружались.

Для разработчиков модулей
  • Движок без HLSDK — через authum_host_* / authum_engine_*:
    • игроки по индексу: имя, SteamID, IP, info, пинг и потери, жив ли, бот ли, userid;
    • вывод в консоль, центр экрана и чат, цветной чат через SayText;
    • свои серверные cvar модуля, чтение и запись любых cvar, запрос cvar у клиента;
    • user messages (MessageBegin … MessageEnd), precache моделей и звуков (вне окна precache — 0 вместо Host_Error).
  • Сущности без HLSDK: поиск по classname; health, armor, frags, gravity, скорость, флаги, кнопки, оружие, origin, velocity, углы, размеры.
  • Новые события:
    • authum.message.<Имя> — любое игровое сообщение (DeathMsg, SayText, …): прочитать, изменить аргументы или заблокировать;
    • authum.server.log — каждая строка лога HLDS (убийства, раунды, команды — то, на чём строится статистика);
    • authum.client.kill — можно запретить команду kill;
    • authum.server.precache и authum.server.shutdown.
  • Таймеры на кадрах сервера: authum_timer_add(host, delay, interval, fn, user) — переживают смену карты и удаляются вместе с модулем.
  • Логгер в одну строку: authum_logger_init(&log, host) и authum_logger_info(…) — куда и на каком уровне писать, решает Authum.
  • 11 примеров-шаблонов в examples/, по одной теме на модуль: skeleton, hello, welcome, chatfilter, cvarguard, settings, stats (SQLite), scores + scoreboard (два модуля через шину событий), deathnotice, announcer. Все собираются с -Wall -Wextra без предупреждений и проверяются тестом.
  • Что поменять в коде модуля: сохранять хост через authum_host_copy(&g_host, host) вместо g_host = *host; экспорт authum_module_api обязателен; AUTHUM_TRUE / AUTHUM_FALSE заменены на authum_bool_true / authum_bool_false.
  • Учтите: если модуль подписан на игровое сообщение, другие Metamod-плагины, которые тоже перехватывают сообщения, увидят его дважды.

Сборка и исправления
  • Authum собирается и на 32-битном Windows (MSYS2 MinGW); в проекте есть CMake-пресеты linux32 и windows-mingw32.
  • Если компилятор не умеет собирать 32-битный код (-m32), CMake сразу говорит об этом с подсказкой.
  • authum_net_ipv4_internal / _external теперь работают и на Windows (раньше возвращали пустой список).

Полный список изменений — в CHANGELOG.md.
Что нового в 2.0.1 по сравнению с 2.0.0

Обновление совместимое: ABI модулей не изменился (0.3.0), модули, собранные под 2.0.0, работают без пересборки. Достаточно заменить authum_mm.so.

Для администраторов серверов
  • MySQL стал надёжнее — знак ? внутри кавычек, имён в обратных кавычках и комментариев больше не подменяется параметром. Сняты ограничения в 255 байт на текст и 2048 байт на запрос. Ошибки сервера сохраняются на каждом шаге, соединение работает в utf8mb4 (эмодзи и любые символы в никах).
  • JSON разбирается строго по стандарту — ключ внутри строкового значения больше не принимается за поле, все escape-последовательности (включая \uXXXX) декодируются, дробное число не читается как целое (1.5 раньше становилось 1).
  • SQLite 3.46.1 обновлён и теперь входит в библиотеку lh. Для сервера ничего не меняется.

Для разработчиков модулей
  • Новые события от Authum— модулю по-прежнему не нужны свои хуки Metamod:
    • authum.client.command — любая команда игрока (say, menuselect и т.д.) с аргументами; обработчик может заблокировать команду, и игра её не увидит.
    • authum.client.cvar_value — ответ клиента на запрос значения его cvar (QueryClientCvarValue2).
    • authum.server.activate / deactivate — карта загружена / смена карты; в событии имя карты и maxplayers.
    • authum.server.frame — каждый кадр сервера.
  • Ed25519 — генерация ключей, подпись и проверка подписи (RFC 8032, на основе Monocypher 4.0.2). Подходит для проверки лицензий, токенов и ответов вашего API.
  • Хуки движка — <authum/symbol.h> находит адрес функции или переменной в уже загруженной библиотеке, включая внутренние символы, которые движок 10211 не экспортирует. <authum/detour.h> ставит 5-байтовый jmp-хук на x86 с attach / detach / suspend / resume. Раньше этот код жил внутри qproto, теперь одна копия на все модули.
  • IP сервера — <authum/net.h> отдаёт внешние и внутренние IPv4-адреса машины. Пригодится, когда HLDS запущен без +ip и сам знает только 0.0.0.0. Пока только Linux.
  • 64-битные числа в SQL — authum_sql_stmt_bind_i64 / column_i64 для SteamID64 и id строк.
  • authum_float_t — свой тип для дробных чисел, как остальные базовые типы Authum.

Всё перечисленное для разработчиков реализовано в библиотеке authum_client, которую модуль линкует к себе. Модулю, использующему новые функции, достаточно пересобраться с 2.0.1, а authum_mm на сервере может оставаться любой версии 2.0.x. Исключение — новые события: их публикует сам authum_mm, поэтому для них нужен 2.0.1 на сервере.

Полный список изменений: релиз v2.0.1
Что нового в 2.0.0 по сравнению с 1.0.0

В 1.0.0 Authum умел одно: загрузить модули из modules.list и показать их список. В 2.0.0 он стал полноценной платформой для модулей: модули общаются между собой, получают события игроков, регистрируют свои команды, работают с базой данных и выгружаются без перезапуска сервера.

Для администраторов серверов
  • Управление модулями без рестарта — как в Metamod:
    authum status, authum info <модуль>, authum load, authum unload, authum reload. Модуль можно выключить и включить на живом сервере, его команды и подписки снимаются и возвращаются сами.
  • Одна консольная команда на всё: authum <модуль> <команда> [аргументы]. Есть встроенные authum help и authum version. Модули больше не регистрируют свои серверные команды, поэтому нет конфликтов с AMX Mod X и «висящих» команд после выгрузки модуля.
  • Работает через RCON — вывод команды authum теперь идёт в консоль сервера, а не только в лог.
  • Свой лог у каждого модуля — одним файлом или отдельным файлом на каждый запуск (папка logs/).
  • Готовый архив для Metamod — в релизе лежит zip со структурой addons/authum/ (authum_mm.so, modules.list, инструкция по установке). Распаковал в папку игры, добавил строку в plugins.ini — готово.

Для разработчиков модулей
  • Шина событий — модули общаются только через события, без прямых вызовов друг друга. Authum сам публикует события игроков: authum.client.connect (подключение можно отклонить со своей причиной), put_in_server, info_changed, disconnect. Модулю больше не нужны собственные хуки Metamod.
  • Песочница памяти — у каждого модуля своя память, Authum освобождает её целиком при выгрузке. Утечки после unload исключены. Есть вложенные песочницы, деструкторы и динамический массив.
  • SQL — SQLite встроен, MySQL/MariaDB подключаются через клиентскую библиотеку сервера. Модуль не тянет sqlite3.h / mysql.h.
  • JSON — разбор ответов внешних API.
  • Конфиги — простой формат key = value: значения по умолчанию плюс таблица ключей.
  • Пути — готовые папки игры, addons, моделей, самого модуля.
  • Безопасный кик — authum_host_kick очищает причину от кавычек и ;, поэтому через неё нельзя подсунуть команду.
  • Модуль без lh — модуль подключает один заголовок <authum/client.h> и линкуется с authum_client.
  • Пример модуля examples/hello, тесты, документация в docs/ и HTML-справочник API (Doxygen).

Важно при обновлении
  • Модули, собранные под 1.0.0, нужно пересобрать: ABI модулей изменился (0.3.0). Загрузчик откажется загружать старые модули и напишет об этом в лог.
  • qproto больше не входит в Authum — это отдельный модуль, который кладётся в modules/.

Полный список изменений: CHANGELOG.md
Назад
Верх