Elegir un enfoque#

Para un pequeño escenario, considere un menú de configuración API. Para añadir una tarjeta o acción a un menú existente, comience con ampliación de la norma UI. Una ventana personalizada puede usar Helper para crear un marco, una tabla, filas y widgets, luego mostrarlo. Python y un servicio de red no son necesarios.

Registrar Lua#

Declarar el archivo Lua en su extensión ui.xml, Como se muestra a continuación. Espere hasta que Helper y el juego UI están listos antes de abrir la ventana. Cargar un archivo Lua no significa que el mundo y todos los menús ya existen.

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

Construir la ventana#

El ui/wiki_panel.lua un evento separado abre el panel después de la preparación de la UI. Crea un marco en la capa 3, añade una tabla y texto, une un botón Cerrar y muestra el marco. Compruebe las callbacks internas y el uso de la capa contra el juego actual de la UI.

El Director Ejecutivo raise_lua_event fragmento pertenece a un actions bloque. Su mod suministra el disparador, como un botón de trabajo o un evento. El ejemplo no instala una tecla de acceso rápido automáticamente.

LUA
local menu = { name = "WikiExamplePanel" }

menu.onViewCreated = function() end
menu.onRowChanged = function() end
menu.onSelectElement = function() end

function menu.onCloseElement()
    if menu.shown then
        Helper.clearFrame(menu, 3)
        menu.shown = false
    end
end

Menus = Menus or {}
table.insert(Menus, menu)
Helper.registerMenu(menu)

local function showPanel()
    if menu.shown then return end
    local width = Helper.scaleX(480)
    local height = Helper.scaleY(150)
    local frame = Helper.createFrameHandle(menu, {
        layer = 3,
        x = (Helper.viewWidth - width) / 2,
        y = (Helper.viewHeight - height) / 2,
        width = width, height = height,
        standardButtons = {},
        startAnimation = false,
        playerControls = true,
    })
    local t = frame:addTable(1, { tabOrder = 1, width = width })
    local title = t:addRow(false, {})
    title[1]:createText("Hello, X4!", { fontsize = 14 })
    local row = t:addRow(true, {})
    row[1]:createButton({ height = 28 }):setText("Close")
    row[1].handlers.onClick = menu.onCloseElement
    menu.shown = true
    frame:display()
end

RegisterEvent("Wiki.ShowPanel", function()
    showPanel()
end)
XML
<raise_lua_event name="'Wiki.ShowPanel'" />

Verificar el ciclo de vida#

La apertura repetida no debe acumular llamadas. Pruebe el botón Cerrar, el comportamiento del escape/controlador, los cambios de menú y guardar la carga. Una tabla con altura insuficiente puede desaparecer por completo. No limpie el marco de otro menú ni altere el control global del reproductor sólo para mostrar texto. Esta plantilla ilustra los formularios de ayuda y no ha sido probada por separado en las versiones de X4.

Antes de añadir un icono de nivel superior compartido o ganchos UIX de terceros, lea callbacks y el límite superior del menu. Estos mecanismos tienen limitaciones de compatibilidad separadas.