मॉडिंग
More actions
Lua रनटाइम से मुख्य मेनू की स्थिति और चुने गए स्थानीय कैरेक्टर नाम को पढ़ें। दोनों प्रश्न Modloader जैसे ही नेटिव डेटा का उपयोग करते हैं और दुनिया तक पहुँच की आवश्यकता नहीं रखते।
आवश्यकताएँ
मॉड सक्षम करें और mod.json में runtime क्षमता घोषित करें:
{
"capabilities": ["runtime"]
}
क्लाइंट के इन प्रश्नों के लिए extended.mod.json में targets को ["client"] पर सेट करें। फ़ंक्शन को सक्रिय रनटाइम कॉलबैक, जैसे on_load और on_update, से कॉल करें। runtime.phase == "ingame" शुरू हुए मॉड रनटाइम को बताता है, दुनिया में प्रवेश की पुष्टि नहीं करता। किसी भी प्रश्न को निष्पादन प्रोफ़ाइल की आवश्यकता नहीं है। दुनिया से जुड़ी अन्य कार्रवाइयों की अपनी आवश्यकताएँ बनी रहती हैं।
मुख्य मेनू का पता लगाएँ
local in_menu, reason = runtime.is_main_menu()
| लौटाया गया मान | अर्थ |
|---|---|
true, nil |
मुख्य मेनू की पुष्टि हुई है, जिसमें कैरेक्टर, दुनिया और सर्वर चयन शामिल हैं। |
false, nil |
गेम की किसी अन्य मूल स्थिति की पुष्टि हुई है। |
nil, reason |
स्थिति अज्ञात है, बदल रही है या प्रश्न उपलब्ध नहीं है। |
true, nil या false, nil के लिए in_menu को स्पष्ट रूप से जाँचें। nil पुष्टि की गई स्थिति नहीं है। अकेला false भी पढ़ने योग्य दुनिया की पुष्टि नहीं करता। आवश्यक कार्रवाई अलग से जाँचें, जैसे runtime.has("runtime.ecs.read")।
कैरेक्टर का नाम पढ़ें
local name, reason = runtime.player.name() local display_name = name or "Flameborn"
name, nil स्थानीय क्लाइंट के मुख्य मेनू में चुने गए कैरेक्टर का नाम UTF-8 स्ट्रिंग के रूप में लौटाता है। Ikiju 育樹 जैसे Unicode अक्षर सुरक्षित रहते हैं। nil, reason का अर्थ है कि नाम अभी उपलब्ध नहीं है या पहुँच उपलब्ध अथवा अनुमत नहीं है।
मॉड अपना fallback नाम स्वयं चुनता है। API कोई डिफ़ॉल्ट नाम नहीं जोड़ती और Modloader की मैन्युअल नाम पसंद का उपयोग नहीं करती। यह मान किसी दूरस्थ खिलाड़ी की पहचान नहीं बताता और न ही SteamID या Steam पर दिखाई देने वाला नाम है। Dedicated Server में स्थानीय क्लाइंट कैरेक्टर नाम नहीं होता।
साझा कैश
Lua और Modloader एक ही नेटिव कैश पढ़ते हैं। मौजूदा रनटाइम टिक मेनू स्थिति को रीफ़्रेश करता है। मौजूदा मेनू इंटीग्रेशन पहली उपलब्ध पसंद पर नाम दर्ज करता है और पसंद या नाम मेटाडेटा बदलने पर फिर दर्ज करता है। Lua प्रश्न अलग खोज शुरू नहीं करते और लॉग नहीं पढ़ते।
दुनिया में प्रवेश करने के बाद भी आखिरी सफलतापूर्वक दर्ज नाम कैश में रहता है। इसलिए कैश में नाम होना यह पुष्टि नहीं करता कि मेनू खुला है। runtime.has("runtime.is_main_menu") और runtime.has("runtime.player.name") हर प्रश्न की उपलब्धता बताते हैं। runtime.status(...) वजह भी देता है।
src/mod.lua के लिए उदाहरण
यह उदाहरण लोड होने पर और उसके बाद हर 500 ms में कैश पढ़ता है। यह fallback नाम चुनता है और केवल बदलाव लॉग करता है:
runtime.require("runtime.lifecycle")
local previous_message = nil
local function refresh()
local in_menu = runtime.is_main_menu()
local name = runtime.player.name()
local state = "unknown"
if in_menu == true then
state = "menu"
elseif in_menu == false then
state = "other"
end
local message = state .. ": " .. (name or "Flameborn")
if message ~= previous_message then
previous_message = message
shroudforge.log.info(message)
end
end
return {
on_load = refresh,
on_update = function()
refresh()
end,
update_interval_ms = 500,
}