--- title: Lua в интерфейсе X4 summary: Подключение файлов, порядок инициализации, жизненный цикл callbacks и безопасная работа UI. section: ui kind: guide status: reference tags: ["lua","ui.xml","LuaJIT","callbacks","интерфейс"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/"] --- ## Подключение файлов Файлы интерфейса объявляются в `ui.xml`. Поместите общие определения раньше модулей, которые их используют. Если нужен сторонний API, укажите зависимость и сверяйте её версию. ```xml ``` В момент загрузки файла игровой мир и меню могут быть ещё не готовы. Регистрацию callbacks и чтение существующего корабля не нужно считать одной стадией. ## Собственное окно Для панели с текстом и кнопкой используйте [руководство Helper](wiki:create-ui). Для переключателей и простых настроек рассмотрите [готовый API настроек](wiki:ui-settings). Новый интерфейс может быть самостоятельным. Если задача расширяет существующее действие, изучите [callback штатного меню](wiki:extend-ui). ## Не блокируйте отрисовку Обработчик должен быстро завершаться. Долгое ожидание в цикле замораживает UI. Для изменения мира используйте подходящее событие и отдельный результат, а не повторное выполнение действия на каждом обновлении таблицы. ## Жизненный цикл Устанавливайте обработчики один раз на контекст. При загрузке или пересоздании меню заново разрешайте нужные ссылки. Не накапливайте обёртки при повторном открытии окна. Упрощённая защита от старого экземпляра вашего адаптера: ```lua WikiPanel = {} local instance = WikiPanel RegisterEvent("Wiki.Example", function(_, payload) if WikiPanel ~= instance then return end -- Обработка относится к актуальному экземпляру. end) ``` Это проверка актуальности, а не удаление регистрации. Освобождайте frames и временные данные отдельно. ## Следующие материалы [Lua ↔ MD](wiki:md-lua-bridge), [собственное окно](wiki:create-ui), [расширение UI](wiki:extend-ui).