C++ module SDK
Native server modules — это опциональные C++ расширения: .dll (Windows) / .so (POSIX), которые кладут в modulesDir. Хост загружает их через версионированный C-ABI varion_module.h, опционально тикает каждый server frame и выгружает при остановке.
Используйте native modules только для того, что действительно требует C++. Обычная геймплей-логика должна жить в C#, JavaScript или Go resources.
Runtime config
modulesDir = "modules"
modules = []modulesDir (по умолчанию modules) — папка, из которой грузятся модули. Загрузчик берёт КАЖДУЮ .dll (Windows) / .so (POSIX) в этой папке. Ключ modules в server.toml парсится, но загрузчик НЕ использует его как фильтр — грузится всё, что лежит в modulesDir.
Модули загружаются последними — после того, как все подсистемы и сеть уже подняты, чтобы varion_module_init мог сразу вызывать host API.
ABI
Версионирование обязательное: VARION_MODULE_ABI_VERSION (сейчас 1). Хост отклоняет любой модуль, у которого varion_module_abi() не совпадает с версией хоста.
Экспортируемые точки входа (резолвятся по имени):
| Symbol | Обязательность | Назначение |
|---|---|---|
varion_module_abi | обязательная | uint32_t — ABI, против которого собран модуль |
varion_module_init | обязательная | int(const VarionModuleApi*) — вернуть ненулевое = успех (0 → модуль отклонён и выгружен) |
varion_module_name | опциональная | const char* — имя (логируется) |
varion_module_version | опциональная | const char* — версия (логируется) |
varion_module_tick | опциональная | вызывается каждый server tick |
varion_module_shutdown | опциональная | вызывается один раз перед выгрузкой |
Host API table
varion_module_init получает указатель на VarionModuleApi — таблицу функций хоста. Первый аргумент каждой функции — host (непрозрачный контекст из таблицы):
log/logWarn/logError— логированиеgetServerTimeMs/getPlayerCount/getTickCount— read-only состояние сервераcallApi(host, fn, argsJson)— вызов host API по тем же именам и JSON-аргументам, что и в JS host, напримерcallApi(host, "world.setTime", "[13,37]"). Требует запущенного JS host (>=1 js resource).
Все функции таблицы можно вызывать ТОЛЬКО из varion_module_init / varion_module_tick / varion_module_shutdown (главный поток сервера).
Минимальный модуль
#include "varion_module.h"
VARION_MODULE_EXPORT uint32_t VARION_MODULE_CALL varion_module_abi(void) {
return VARION_MODULE_ABI_VERSION;
}
VARION_MODULE_EXPORT const char* VARION_MODULE_CALL varion_module_name(void) {
return "my-native-module";
}
static const VarionModuleApi* g_api = 0;
VARION_MODULE_EXPORT int VARION_MODULE_CALL varion_module_init(const VarionModuleApi* api) {
g_api = api;
api->log(api->host, "my-native-module up");
return 1;
}
VARION_MODULE_EXPORT void VARION_MODULE_CALL varion_module_shutdown(void) {}Boundary
C++ modules — server-side extension point. Public runtime не предоставляет client module SDK и не требует от разработчика менять protected client internals.
Source backing
Страница основана на server/src/CModuleLoader.h, server/src/CModuleLoader.cpp, заголовке ABI varion_module.h (server/sdk/varion_module.h), парсинге config в server/src/CServerConfig.cpp и последовательности загрузки в server/src/CServer.cpp.