एक दृष्टिकोण चुनें#

एक छोटी सी सेटिंग के लिए, एक विचार करें सेटिंग्स मेनू एपीआई. (स)किसी मौजूदा मेनू में कार्ड या एक्शन जोड़ने के लिए, मानक UI का विस्तार. मुक़द्दमाएक कस्टम विंडो एक फ्रेम, तालिका, पंक्तियों और विजेट बनाने के लिए हेल्पर का उपयोग कर सकती है, फिर इसे प्रदर्शित कर सकती है। पायथन और नेटवर्क सेवा की आवश्यकता नहीं है।

रजिस्टर Lua#

अपने विस्तार में Lua फ़ाइल घोषित करें ui.xml, जैसा कि नीचे दिखाया गया है। विंडो खोलने से पहले हेल्पर और गेम UI तैयार होने तक प्रतीक्षा करें। Lua फ़ाइल लोड करने का मतलब दुनिया नहीं है और हर मेनू पहले से ही मौजूद है।

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

खिड़की का निर्माण#

इन ui/wiki_panel.lua उदाहरण एक बार अपना मेनू पंजीकृत करता है। UI की तैयारी के बाद एक अलग घटना पैनल खोलती है। यह परत 3 पर एक फ्रेम बनाता है, एक तालिका और पाठ जोड़ता है, एक बंद बटन बांधता है और फ्रेम प्रदर्शित करता है। वर्तमान खेल UI के खिलाफ आंतरिक कॉलबैक और परत उपयोग की जांच करें.

एमडी raise_lua_event टुकड़ा एक मौजूदा के अंदर से संबंधित है actions ब्लॉक. आपके मॉड में ट्रिगर होता है, जैसे कि काम करने वाला बटन या घटना। उदाहरण में एक हॉटकी स्वचालित रूप से स्थापित नहीं होती है।

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

जीवन चक्र की जांच करें#

दोहराए जाने वाले उद्घाटन में कॉलबैक नहीं जमा होने चाहिए। बंद बटन, भागने/नियंत्रक व्यवहार, मेनू परिवर्तन और लोड सहेजें का परीक्षण करें। अपर्याप्त ऊंचाई वाली टेबल पूरी तरह से गायब हो सकती है। किसी अन्य मेनू के फ्रेम को खाली न करें या पाठ प्रदर्शित करने के लिए ग्लोबल प्लेयर कंट्रोल को न बदलें। इस टेम्पलेट में हेल्पर फॉर्म का चित्रण किया गया है और X4 संस्करणों में खेल में अलग से परीक्षण नहीं किया गया है।

साझा शीर्ष स्तर आइकन या तृतीय-पक्ष UIX हुक जोड़ने से पहले, पढ़ें कॉलबैक और शीर्ष मेनू सीमा. (स)इन तंत्रों में अलग-अलग संगतता प्रतिबंध हैं।