Skip to main content

Сборка модуля

Просто ставишь модуль на сервер? Бинарники уже собраны — бери в релизах, эта страница не нужна. Она — для правок в C++ или сборки текущего main. Зависимости подключены сабмодулями:
Собирается только под x86 — GoldSrc 32-битный. Конфигурация под x64 останавливает cmake с ошибкой.

Windows

Нужны CMake и MSVC с x86-тулчейном. LuaJIT собирается отдельно и один раз, в консоли x86 Native Tools Command Prompt:
Дальше модуль:
Результат — build/Release/lua_mm.dll. LuaJIT слинкован статически, отдельной библиотеки рядом нет.

Linux

Нужен 32-битный тулчейн: gcc-multilib g++-multilib на Debian и Ubuntu, glibc-devel.i686 libstdc++-devel.i686 на Fedora. LuaJIT собирается статически и с PIC, иначе не слинкуется в .so:
Результат — lua_mm_i386.so: metamod ждёт для 32-битного модуля именно такое имя.
Собирай на дистрибутиве не новее целевого сервера. Модуль, слинкованный с современной glibc, требует символы вроде GLIBC_2.38, которых на машинах под CS 1.6 обычно нет, и metamod его не загрузит. CI собирает в Debian 11 (glibc 2.31).

Копирование на тестовый сервер

CSLUA_SERVER_DIR кладёт модуль, core/ и lib/ в <gamedir>/addons/lua/ на этапе сборки:
data/ и plugins/ не трогаются: там лежат права и код плагинов. Самого тестового сервера в репозитории нет — это игровой контент Valve. Что нужно поставить рядом — в Установке.

Тесты

Игра не нужна: core/ и lib/ — обычный Lua, а пространства имён движка подменяются стабами из tests/support/stubs.lua. Проверяется то, что ломается молча: разрешение прав, роутер команд, разбор цвета, подсчёт длины строки и запись данных на диск. Прогон занимает секунду и стоит первым в CI. C++-поверхность так не проверить: регистрацию в пространствах имён, цепочки хуков, объект события, таймеры, базу и жизнь сущностей видно только на живом сервере. Для этого есть tests/selftest/ — обычный плагин:
После lua_reload он прогоняет 104 проверки и печатает итог, а дальше lua_test в консоли повторяет прогон без перезагрузки.

Зависимости

Модуль распространяется под GPLv3 — как metamod-r и ReGameDLL, с которыми он собирается.