--- title: Кнопки и расширение штатного интерфейса summary: Как добавить действие или строку, сохранив обычное поведение игрового меню. section: ui kind: guide status: reference tags: ["ui","button","callbacks","MapMenu","интерфейс","кнопка"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/Breaking%20Changes/"] --- ## Найдите поверхность расширения Сначала определите меню и callback нужного действия в своей версии Lua UI. Предпочитайте доступную точку расширения или подходящий общественный API, когда он покрывает задачу. При обёртке внутренней функции сохраняйте оригинал и обычный путь выполнения. Собственное окно допустимо для новой функции. Не нужно переносить её в существующее меню только потому, что так устроен какой-то другой мод. ## Получите меню Учебный фрагмент поиска, не полная установка перехвата: ```lua local menu = Helper and Helper.getMenu and Helper.getMenu("MapMenu") if not menu then return end ``` Если меню ещё не существует, повторите попытку в подходящий момент. Не создавайте новую обёртку каждый кадр. ## Добавьте кнопку Фрагмент внутри вашей функции построения таблицы. Переменная `t` - уже созданная Helper-таблица: ```lua local row = t:addRow(true, {}) row[1]:createButton({ height = 28 }):setText("My action") row[1].handlers.onClick = function() AddUITriggeredEvent("WikiPanel", "apply", "example") end ``` Свяжите его с вашим [MD-обработчиком](wiki:md-lua-bridge). Кнопка не должна отображать завершение игрового действия до подтверждённого результата. ## Поведение и перерисовка Обновление таблицы может вызвать callbacks, похожие на пользовательский ввод. Учитывайте источник события, выбранную строку и принадлежность таблицы. Проверьте, что перерисовка не запускает действие второй раз. Изменяйте только нужные строки. Не отключайте всё меню и не подменяйте проверку доступности для посторонних объектов. Сверяйте внутренние сигнатуры после обновлений игры.