Область справочника#
Каталог описывает известные публичные интерфейсы моддинга X4. Наличие имени не означает полный контракт или проверку каждого вызова в игре. Файлы модов, внутренние документы и полные исходники не распространяются.
Откуда берутся типы#
| Основание | Что устанавливает | Что ещё нужно проверить |
|---|---|---|
| C-объявление | Порядок и C-типы параметров, возвращаемый C-тип | Экспорт, ABI, контекст, владение и срок жизни памяти |
| XSD X4 | Имена атрибутов, типы выражений, обязательность | Тип вычисленного значения, payload события и игровой эффект |
| Lua 5.1 / LuaJIT | Контракты стандартных функций | Наличие функции и расширения текущего окружения X4 |
| Документация конкретного события | Аргументы callback и смысл полей | Версию, момент регистрации и срок жизни объектов |
expression в XSD обозначает выражение MD, а не тип его результата. Параметры фильтра не объявляют тип event.param. Игнорирование результата не доказывает none, void или nil.
Как читать результат#
Lua может вернуть несколько значений. Запятая разделяет позиции, вертикальная черта обозначает варианты типа. unknown означает отсутствие установленного контракта; any означает зависимость от контекста. none и void обозначают отсутствие прямого результата, но допускают побочные эффекты и выходные буферы.
C-тип не всегда совпадает с Lua-представлением. Указатель является cdata; C-строка превращается в Lua string через ffi.string при установленном сроке жизни памяти. ID нельзя преобразовывать с потерей точности. Подробнее: типы и методы, идентификаторы, cdata.
События и подписки#
| Механизм | Как используется |
|---|---|
| Lua-событие | RegisterEvent с точным именем и callback в подходящем UI-контексте |
| UI в MD | event_ui_triggered в conditions нужного cue |
| Событие движка MD | Соответствующее условие event_* с собственными фильтрами |
Это разные маршруты. Имя MD-события нельзя автоматически перенести в RegisterEvent. Подписку регистрируют один раз на контекст; типы и число аргументов проверяют для конкретного отправителя. Учебный мост Lua / MD показывает самостоятельный пример.
Примеры и проверка#
Учебным фрагментам нужны указанные контекст, переменные и жизненный цикл. Они не объявляются исполненными в игре без описанного опыта. У неполных контрактов ограничения указаны явно; для неизвестного вызова нельзя угадывать безопасный размер буфера или форму payload.
Начни с индекса API. Для дополнения приложи версию игры, первичный публичный источник и небольшой самостоятельный пример через предложения.