Найдите поверхность расширения#

Сначала определите меню и 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-обработчиком. Кнопка не должна отображать завершение игрового действия до подтверждённого результата.

Поведение и перерисовка#

Обновление таблицы может вызвать callbacks, похожие на пользовательский ввод. Учитывайте источник события, выбранную строку и принадлежность таблицы. Проверьте, что перерисовка не запускает действие второй раз.

Изменяйте только нужные строки. Не отключайте всё меню и не подменяйте проверку доступности для посторонних объектов. Сверяйте внутренние сигнатуры после обновлений игры.