Подключение файлов#

Файлы интерфейса объявляются в ui.xml. Поместите общие определения раньше модулей, которые их используют. Если нужен сторонний API, укажите зависимость и сверяйте её версию.

XML
<addon name="wiki_example">
  <environment type="menus">
    <file name="ui/wiki_example.lua" />
  </environment>
</addon>

В момент загрузки файла игровой мир и меню могут быть ещё не готовы. Регистрацию callbacks и чтение существующего корабля не нужно считать одной стадией.

Собственное окно#

Для панели с текстом и кнопкой используйте руководство Helper. Для переключателей и простых настроек рассмотрите готовый API настроек.

Новый интерфейс может быть самостоятельным. Если задача расширяет существующее действие, изучите callback штатного меню.

Не блокируйте отрисовку#

Обработчик должен быстро завершаться. Долгое ожидание в цикле замораживает UI. Для изменения мира используйте подходящее событие и отдельный результат, а не повторное выполнение действия на каждом обновлении таблицы.

Жизненный цикл#

Устанавливайте обработчики один раз на контекст. При загрузке или пересоздании меню заново разрешайте нужные ссылки. Не накапливайте обёртки при повторном открытии окна.

Упрощённая защита от старого экземпляра вашего адаптера:

LUA
WikiPanel = {}
local instance = WikiPanel
RegisterEvent("Wiki.Example", function(_, payload)
    if WikiPanel ~= instance then return end
    -- Обработка относится к актуальному экземпляру.
end)

Это проверка актуальности, а не удаление регистрации. Освобождайте frames и временные данные отдельно.

Следующие материалы#

Lua ↔ MD, собственное окно, расширение UI.