Skip to content

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

toml
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 (главный поток сервера).

Минимальный модуль

c
#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.

Varion Multiplayer Platform