Подключение файлов#
Файлы интерфейса объявляются в ui.xml. Поместите общие определения раньше модулей, которые их используют. Если нужен сторонний API, укажите зависимость и сверяйте её версию.
<addon name="wiki_example">
<environment type="menus">
<file name="ui/wiki_example.lua" />
</environment>
</addon>В момент загрузки файла игровой мир и меню могут быть ещё не готовы. Регистрацию callbacks и чтение существующего корабля не нужно считать одной стадией.
Собственное окно#
Для панели с текстом и кнопкой используйте руководство Helper. Для переключателей и простых настроек рассмотрите готовый API настроек.
Новый интерфейс может быть самостоятельным. Если задача расширяет существующее действие, изучите callback штатного меню.
Не блокируйте отрисовку#
Обработчик должен быстро завершаться. Долгое ожидание в цикле замораживает UI. Для изменения мира используйте подходящее событие и отдельный результат, а не повторное выполнение действия на каждом обновлении таблицы.
Жизненный цикл#
Устанавливайте обработчики один раз на контекст. При загрузке или пересоздании меню заново разрешайте нужные ссылки. Не накапливайте обёртки при повторном открытии окна.
Упрощённая защита от старого экземпляра вашего адаптера:
WikiPanel = {}
local instance = WikiPanel
RegisterEvent("Wiki.Example", function(_, payload)
if WikiPanel ~= instance then return end
-- Обработка относится к актуальному экземпляру.
end)Это проверка актуальности, а не удаление регистрации. Освобождайте frames и временные данные отдельно.