Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Большое обновление по сравнению с 3.0.0.
Модули старых версий с ним не работают — их нужно обновить вместе с Authum.
Главное
- Metamod больше не нужен. Authum сам загружается как игровая библиотека: в liblist.gam вместо игры указывается gamedll_linux "addons/authum/authum.so", а настоящая библиотека игры задаётся в addons/authum/gamedll.txt. Отдельного authum_mm.so больше нет — один файл authum.so.
- Linux и Windows собираются из одних исходников.
- Каждый модуль — своя папка-песочница: addons/authum/modules/<имя>/ с <имя>.so, configs/, lang/, data/ и logs/. Установить или удалить модуль — положить или убрать папку. Обновление заменяет только сам модуль и lang/, ваши configs/, data/ и logs/ не трогаются. Без modules.list загружаются все папки модулей.
Логи
- Единый формат, как у HLDS: L MM/DD/YYYY - HH:MM:SS:, затем уровень и текст.
- У каждого модуля свой журнал logs/<модуль>/ГГГГ-ММ-ДД.log; предупреждения и ошибки дублируются в logs/authum/.
- Уровни задаются в authum.cfg (log_level, log_console, <модуль>.log_level) или в configs/<модуль>.cfg.
- log_level=off выключает всё, log_file=off — только файл модуля. Логи хранятся 10 дней по умолчанию и чистятся сами.
- Всё, что модуль пишет игроку, в чат, в консоль или в причину кика, помечено его тегом: [WELCOME] Welcome, Vega!. Если модуль не пустил игрока, в логе видно, какой именно: client <ник> refused by <тег>.
Встроенный HTTP-сервер (для FastDL и других модулей)
- Обслуживает много соединений сразу: медленный клиент больше не задерживает остальных.
- Пути проверяются до обращения к диску: отказ для выхода за корень, закодированного .. и коротких имён Windows вида NAME~1.
- Ограничение незаконченных запросов с одного адреса и вытеснение «медленных» клиентов (защита от slowloris).
- Доверенные прокси: адрес клиента берётся из X-Forwarded-For только от них.
- У журнала доступа три уровня: выключен; строка на запрос плюс сводка отказов раз в секунду; подробный.
- При выгрузке сервер ждёт зависший поток (например, источник на сетевом диске) не больше 1 секунды, а не вешает игру.
Фоновые задачи и SQL
- Фоновые задачи модулей переведены на новый движок исполнения: у каждого модуля свой поток и очередь не больше 64 задач, результаты приходят в кадре игры.
- Асинхронный SQL держит одно подключение на поток, а не открывает новое на каждый запрос. При выгрузке модуля подключение закрывается.
- MySQL: если сервер БД разорвал простаивающее подключение (wait_timeout, по умолчанию 8 часов), запрос переподключается и выполняется заново. Раньше все запросы падали с «Server has gone away» до перезапуска HLDS.
Исправлено
- Снова работают события authum.message.* и authum.server.log (без Metamod они не срабатывали).
Задержанное сообщение теперь доходит до движка один раз, а не дважды.- Бюджет времени обработчиков хуков считался неверно: каждый обработчик выглядел превысившим лимит, срабатывал один раз и выкидывался из цепочки.
- Строки, которые Authum выводит в консоль сервера, заканчиваются переводом строки.
- На Windows определяются сетевые интерфейсы (раньше список был пуст).
Как обновиться
- Удалите плагин authum_mm из plugins.ini Metamod, если он был.
- Положите addons/authum/authum.so и пропишите его в liblist.gam (gamedll_linux "addons/authum/authum.so"); имя настоящей игровой библиотеки — в addons/authum/gamedll.txt.
- Разложите модули по папкам addons/authum/modules/<имя>/ и перенесите свои конфиги в их configs/.
- Настройки логов модулей (logging_mode, logging_split) перенесите в authum.cfg.
- Обновите модули до версий под Authum 4.0.0.
- Модульный ABI теперь 3.x: модули версий 1.x и 2.x не загружаются, их нужно пересобрать. Дальше ABI заморожен: существующее не меняется, новое только добавляется; модулю нужен хост той же старшей и не меньшей младшей версии.
- Имена API говорят, что возвращают: get_ / is_ / has_, copy_ для записи в буфер вызывающего, try_get_, join_ (переименовано 99 функций).
- Поле logtag теперь tag. События клиента больше не несут решения (allow, reject_reason убраны): отказ — это хук. Свои события модуль публикует через authum_host_forward под своим префиксом, чужие запрашивает через authum_host_query.
- Новое: хуки модулей в цепочке вызовов игры, файлы через <authum/file.h>, строки и форматирование без libc (authum_cstr_*), сервис потоков, общий HTTP-сервис, подстановки путей ({game}, {module}, {data} …), сообщения движка, свои cvar, цветной чат, поиск символов движка и detour, Ed25519, адреса сетевых интерфейсов.
- authum_tasks_at_exit — вызов на потоке задач модуля при выгрузке (для того, что модуль держит на потоке, например подключения к БД).
Перед обновлением
- 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