Jump to content
Toggle menu
  • 3 articles
  • 22 files
  • 3 users
  • 2.5K edits
Shroudforge
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

मॉडिंग

From Shroudforge
This page is a translated version of the page Modding and the translation is 100% complete.


Modding



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,
}