<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.shroudforge.net/index.php?action=history&amp;feed=atom&amp;title=Modding%2Fhi</id>
	<title>Modding/hi - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.shroudforge.net/index.php?action=history&amp;feed=atom&amp;title=Modding%2Fhi"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/hi&amp;action=history"/>
	<updated>2026-11-07T23:13:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.shroudforge.net/index.php?title=Modding/hi&amp;diff=2628&amp;oldid=prev</id>
		<title>Bonsaibauer: Importing a new version from external source</title>
		<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/hi&amp;diff=2628&amp;oldid=prev"/>
		<updated>2026-11-07T01:35:20Z</updated>

		<summary type="html">&lt;p&gt;Importing a new version from external source&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ShroudForge Modloader Wiki Post&lt;br /&gt;
title: Modding&lt;br /&gt;
description: Read the main-menu state and selected local character name through the Lua runtime. Both queries use the same native data as the Modloader and require no world access.&lt;br /&gt;
language: en-GB&lt;br /&gt;
picture:ShroudForge-Wiki-modding.svg&lt;br /&gt;
creator: Bonsaibauer&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ShroudForge-Wiki-modding.svg|thumb|left|600px|Modding]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lua रनटाइम से मुख्य मेनू की स्थिति और चुने गए स्थानीय कैरेक्टर नाम को पढ़ें। दोनों प्रश्न Modloader जैसे ही नेटिव डेटा का उपयोग करते हैं और दुनिया तक पहुँच की आवश्यकता नहीं रखते।&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Prerequisites&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== आवश्यकताएँ ==&lt;br /&gt;
&lt;br /&gt;
मॉड सक्षम करें और &amp;lt;code&amp;gt;mod.json&amp;lt;/code&amp;gt; में &amp;lt;code&amp;gt;runtime&amp;lt;/code&amp;gt; क्षमता घोषित करें:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;capabilities&amp;quot;: [&amp;quot;runtime&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
क्लाइंट के इन प्रश्नों के लिए &amp;lt;code&amp;gt;extended.mod.json&amp;lt;/code&amp;gt; में &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; को &amp;lt;code&amp;gt;&amp;amp;#91;&amp;quot;client&amp;quot;&amp;amp;#93;&amp;lt;/code&amp;gt; पर सेट करें। फ़ंक्शन को सक्रिय रनटाइम कॉलबैक, जैसे &amp;lt;code&amp;gt;on_load&amp;lt;/code&amp;gt; और &amp;lt;code&amp;gt;on_update&amp;lt;/code&amp;gt;, से कॉल करें। &amp;lt;code&amp;gt;runtime.phase == &amp;quot;ingame&amp;quot;&amp;lt;/code&amp;gt; शुरू हुए मॉड रनटाइम को बताता है, दुनिया में प्रवेश की पुष्टि नहीं करता। किसी भी प्रश्न को निष्पादन प्रोफ़ाइल की आवश्यकता नहीं है। दुनिया से जुड़ी अन्य कार्रवाइयों की अपनी आवश्यकताएँ बनी रहती हैं।&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Detect_the_main_menu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== मुख्य मेनू का पता लगाएँ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local in_menu, reason = runtime.is_main_menu()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! लौटाया गया मान !! अर्थ&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; || मुख्य मेनू की पुष्टि हुई है, जिसमें कैरेक्टर, दुनिया और सर्वर चयन शामिल हैं।&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; || गेम की किसी अन्य मूल स्थिति की पुष्टि हुई है।&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; || स्थिति अज्ञात है, बदल रही है या प्रश्न उपलब्ध नहीं है।&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; या &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; के लिए &amp;lt;code&amp;gt;in_menu&amp;lt;/code&amp;gt; को स्पष्ट रूप से जाँचें। &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; पुष्टि की गई स्थिति नहीं है। अकेला &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; भी पढ़ने योग्य दुनिया की पुष्टि नहीं करता। आवश्यक कार्रवाई अलग से जाँचें, जैसे &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.ecs.read&amp;quot;)&amp;lt;/code&amp;gt;।&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Read_the_character_name&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== कैरेक्टर का नाम पढ़ें ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local name, reason = runtime.player.name()&lt;br /&gt;
local display_name = name or &amp;quot;Flameborn&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;name, nil&amp;lt;/code&amp;gt; स्थानीय क्लाइंट के मुख्य मेनू में चुने गए कैरेक्टर का नाम UTF-8 स्ट्रिंग के रूप में लौटाता है। &amp;lt;code&amp;gt;Ikiju 育樹&amp;lt;/code&amp;gt; जैसे Unicode अक्षर सुरक्षित रहते हैं। &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; का अर्थ है कि नाम अभी उपलब्ध नहीं है या पहुँच उपलब्ध अथवा अनुमत नहीं है।&lt;br /&gt;
&lt;br /&gt;
मॉड अपना fallback नाम स्वयं चुनता है। API कोई डिफ़ॉल्ट नाम नहीं जोड़ती और Modloader की मैन्युअल नाम पसंद का उपयोग नहीं करती। यह मान किसी दूरस्थ खिलाड़ी की पहचान नहीं बताता और न ही SteamID या Steam पर दिखाई देने वाला नाम है। Dedicated Server में स्थानीय क्लाइंट कैरेक्टर नाम नहीं होता।&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Shared_cache&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== साझा कैश ==&lt;br /&gt;
&lt;br /&gt;
Lua और Modloader एक ही नेटिव कैश पढ़ते हैं। मौजूदा रनटाइम टिक मेनू स्थिति को रीफ़्रेश करता है। मौजूदा मेनू इंटीग्रेशन पहली उपलब्ध पसंद पर नाम दर्ज करता है और पसंद या नाम मेटाडेटा बदलने पर फिर दर्ज करता है। Lua प्रश्न अलग खोज शुरू नहीं करते और लॉग नहीं पढ़ते।&lt;br /&gt;
&lt;br /&gt;
दुनिया में प्रवेश करने के बाद भी आखिरी सफलतापूर्वक दर्ज नाम कैश में रहता है। इसलिए कैश में नाम होना यह पुष्टि नहीं करता कि मेनू खुला है। &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.is_main_menu&amp;quot;)&amp;lt;/code&amp;gt; और &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.player.name&amp;quot;)&amp;lt;/code&amp;gt; हर प्रश्न की उपलब्धता बताते हैं। &amp;lt;code&amp;gt;runtime.status(...)&amp;lt;/code&amp;gt; वजह भी देता है।&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Example_for_src/mod.lua&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;code&amp;gt;src/mod.lua&amp;lt;/code&amp;gt; के लिए उदाहरण ==&lt;br /&gt;
&lt;br /&gt;
यह उदाहरण लोड होने पर और उसके बाद हर 500 ms में कैश पढ़ता है। यह fallback नाम चुनता है और केवल बदलाव लॉग करता है:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
runtime.require(&amp;quot;runtime.lifecycle&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local previous_message = nil&lt;br /&gt;
&lt;br /&gt;
local function refresh()&lt;br /&gt;
    local in_menu = runtime.is_main_menu()&lt;br /&gt;
    local name = runtime.player.name()&lt;br /&gt;
    local state = &amp;quot;unknown&amp;quot;&lt;br /&gt;
    if in_menu == true then&lt;br /&gt;
        state = &amp;quot;menu&amp;quot;&lt;br /&gt;
    elseif in_menu == false then&lt;br /&gt;
        state = &amp;quot;other&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local message = state .. &amp;quot;: &amp;quot; .. (name or &amp;quot;Flameborn&amp;quot;)&lt;br /&gt;
    if message ~= previous_message then&lt;br /&gt;
        previous_message = message&lt;br /&gt;
        shroudforge.log.info(message)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
    on_load = refresh,&lt;br /&gt;
    on_update = function()&lt;br /&gt;
        refresh()&lt;br /&gt;
    end,&lt;br /&gt;
    update_interval_ms = 500,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:guide:Shroudforge]]&lt;/div&gt;</summary>
		<author><name>Bonsaibauer</name></author>
	</entry>
</feed>