Wählen Sie einen Ansatz#

Für eine kleine Einstellung, betrachten Sie a Einstellungen Menü API. Um eine Karte oder Aktion in ein vorhandenes Menü hinzuzufügen, beginnen Sie mit Erweiterung der Standard-UI. Ein benutzerdefiniertes Fenster kann Hilfer verwenden, um einen Rahmen, eine Tabelle, Zeilen und Widgets zu erstellen und anschließend anzuzeigen. Python und ein Netzwerkdienst sind nicht erforderlich.

Register Lua#

Erklären Sie die Lua-Datei in Ihrer Erweiterung ui.xml, Wie unten gezeigt. Warten Sie, bis Helper und das Spiel UI bereit sind, bevor Sie das Fenster öffnen. Laden einer Lua-Datei bedeutet nicht die Welt und jedes Menü bereits vorhanden.

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

Das Fenster erstellen#

Das ui/wiki_panel.lua Beispiel registriert sein Menü einmal. Ein separates Ereignis öffnet das Panel nach der UI-Präsenz. Es erzeugt einen Rahmen auf Ebene 3, fügt eine Tabelle und Text hinzu, bindet einen Schließen-Button und zeigt den Rahmen an. Prüfen Sie interne Rückrufe und Ebenennutzung gegen die aktuelle Spieloberfläche.

Der MD raise_lua_event Fragment gehört in eine bestehende actions Block. Ihr Mod liefert den Trigger, wie z.B. einen Arbeitsknopf oder ein Ereignis. Das Beispiel installiert keinen Hotkey automatisch.

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'" />

Überprüfung des Lebenszyklus#

Wiederholtes Öffnen darf keine Rückrufe ansammeln. Testen Sie die Schaltfläche Schließen, Escape/Controller Verhalten, Menüänderungen und Speichern des Ladens. Eine Tabelle mit unzureichender Höhe kann vollständig verschwinden. Löschen Sie nicht den Rahmen eines anderen Menüs oder ändern Sie die globale Player-Steuerung nur, um Text anzuzeigen. Diese Vorlage zeigt Hilfeformulare und wurde nicht separat im Spiel über X4 Versionen getestet.

Bevor Sie ein Shared Top-Level-Symbol oder UIX-Hooks von Drittanbietern hinzufügen, lesen Sie Rückrufe und das Top-Menü-Grenze. Diese Mechanismen haben unterschiedliche Kompatibilitätsbeschränkungen.