UIX - отдельная зависимость#

UI Extensions and HUD автора kuertee добавляет точки вызова в штатные меню. menu.registerCallback и Helper.registerCallback этого механизма нельзя считать доступными в чистой игре. Версия UIX имеет собственную историю: карточка для 9.x не гарантирует наличие hook в ветке 8.x.

Пример подписки#

Фрагмент выполняется после готовности UIX и MapMenu:

LUA
local menu = Helper.getMenu("MapMenu")
if menu and type(menu.registerCallback) == "function" then
    menu.registerCallback("createPropertyOwned_on_start", function(config)
        DebugError("[WIKI] owned-property list is being built")
    end, "wiki_ui_demo")
end

Когда и что выведет: при достижении этой точки построения списка собственности в меню карты появится диагностическая строка [WIKI] owned-property list is being built. Пример не создаёт кнопку и не меняет состав собственности. Точное устройство config здесь не объявляется; обработчик его не читает.

Для удаления только своей подписки используйте в соответствующем этапе очистки:

LUA
menu.deregisterCallback("createPropertyOwned_on_start", nil, "wiki_ui_demo")

Это отдельный шаг очистки, не продолжение немедленно после регистрации. Перед вызовом также нужна готовая таблица menu с этим методом.

Аргументы и возвращаемое значение#

У callback нужно отдельно читать аргументы и способ использования результата. Событие может игнорировать return; override может выбирать последний ответ, передавать результат следующему обработчику или завершать цепочку. Одинаковое имя registerCallback не означает одинаковый контракт всех hooks. В источнике есть карточки регистрации, владельца, агрегации и доступности по версиям.

Общая строка иконок#

Helper.topLevelMenus используется несколькими полноэкранными меню. По разбору автора, при Helper.maxTableCols == 13 строка вмещает 11 видимых записей: ещё две колонки служебные. Считать надо записи, прошедшие Helper.checkTopLevelConditions, а не только длину списка.

В 8.00/9.00 есть Helper.topLevelConfig.scrolling. Собственная иконка требует обработки переполнения, повторного подсчёта при изменении условий и корректного снятия только своего режима. Не выключайте прокрутку, включённую другим модом. Подробный алгоритм согласования находится в первоисточнике.

Проверка совместимости#

Проверьте точную версию X4 и UIX, момент инициализации, повторное открытие карты, снятие подписки и несколько UI-модов вместе. Локальная проверка синтаксиса не подтверждает игровой вызов. Эти фрагменты в X4 не запускались. Далее: готовые UI API, своё окно, Lua и MD.