--- title: UIX callbacks и предел верхнего меню summary: Как подписаться на событие стороннего UIX и учесть общую строку иконок X4. section: ui kind: guide status: reference updated: 2026-10-27 tags: ["UIX","callback","Helper","topLevelMenus","интерфейс"] sources: ["https://chemodun.github.io/x4/modding-support/ui-modding/uix-callbacks/","https://chemodun.github.io/x4/modding-support/ui-modding/top-menu-entries/","https://github.com/kuertee/x4-mod-ui-extensions"] --- ## 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](wiki:ui-settings), [своё окно](wiki:create-ui), [Lua и MD](wiki:md-lua-bridge).