Найдите поверхность расширения#
Сначала определите меню и callback нужного действия в своей версии Lua UI. Предпочитайте доступную точку расширения или подходящий общественный API, когда он покрывает задачу. При обёртке внутренней функции сохраняйте оригинал и обычный путь выполнения.
Собственное окно допустимо для новой функции. Не нужно переносить её в существующее меню только потому, что так устроен какой-то другой мод.
Получите меню#
Учебный фрагмент поиска, не полная установка перехвата:
local menu = Helper and Helper.getMenu
and Helper.getMenu("MapMenu")
if not menu then
return
endЕсли меню ещё не существует, повторите попытку в подходящий момент. Не создавайте новую обёртку каждый кадр.
Добавьте кнопку#
Фрагмент внутри вашей функции построения таблицы. Переменная t — уже созданная Helper-таблица:
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, похожие на пользовательский ввод. Учитывайте источник события, выбранную строку и принадлежность таблицы. Проверьте, что перерисовка не запускает действие второй раз.
Изменяйте только нужные строки. Не отключайте всё меню и не подменяйте проверку доступности для посторонних объектов. Сверяйте внутренние сигнатуры после обновлений игры.