<?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%2Fsv</id>
	<title>Modding/sv - 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%2Fsv"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/sv&amp;action=history"/>
	<updated>2026-11-07T23:13:46Z</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/sv&amp;diff=2631&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/sv&amp;diff=2631&amp;oldid=prev"/>
		<updated>2026-11-07T01:35:26Z</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;
Läs huvudmenyns status och namnet på den valda lokala karaktären via Lua-runtime. Båda frågorna använder samma inbyggda data som Modloader och kräver ingen åtkomst till världen.&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;
== Förutsättningar ==&lt;br /&gt;
&lt;br /&gt;
Aktivera modden och ange funktionen &amp;lt;code&amp;gt;runtime&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;mod.json&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;
För de här klientfrågorna ställer du in &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; till &amp;lt;code&amp;gt;&amp;amp;#91;&amp;quot;client&amp;quot;&amp;amp;#93;&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;extended.mod.json&amp;lt;/code&amp;gt;. Anropa funktionerna från aktiva runtime-callbacks som &amp;lt;code&amp;gt;on_load&amp;lt;/code&amp;gt; och &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; beskriver att moddens runtime har startat och bekräftar inte att en värld har öppnats. Ingen av frågorna behöver en körprofil. Andra världsåtgärder har sina egna krav.&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;
== Känna av huvudmenyn ==&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;
! Returvärde !! Betydelse&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; || Huvudmenyn har bekräftats, inklusive val av karaktär, värld och server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; || Ett annat ursprungligt spelläge har verifierats.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; || Läget är okänt, håller på att ändras eller frågan är inte tillgänglig.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kontrollera uttryckligen &amp;lt;code&amp;gt;in_menu == true&amp;lt;/code&amp;gt; eller &amp;lt;code&amp;gt;in_menu == false&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; är inte ett bekräftat läge. Enbart &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; bekräftar inte heller att världen går att läsa. Kontrollera den funktion du behöver separat, till exempel &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;
== Läsa karaktärens namn ==&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; returnerar namnet på karaktären som valts i den lokala huvudmenyn som en UTF-8-sträng. Unicode-tecken, som i &amp;lt;code&amp;gt;Ikiju 育樹&amp;lt;/code&amp;gt;, bevaras. &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; betyder att namnet inte är tillgängligt ännu eller att åtkomst saknas eller inte är tillåten.&lt;br /&gt;
&lt;br /&gt;
Modden väljer själv ett reservnamn. API:t lägger inte till något standardvärde och använder inte Modloaders manuella namnval. Värdet identifierar ingen fjärrspelare och är varken ett SteamID eller ett Steam-visningsnamn. En dedikerad server har inget lokalt klientkaraktärsnamn.&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;
== Delad cache ==&lt;br /&gt;
&lt;br /&gt;
Lua och Modloader läser samma inbyggda cache. Den befintliga runtime-ticken uppdaterar menystatusen. Den befintliga menyintegreringen hämtar namnet vid det första tillgängliga valet och igen när valet eller namnets metadata ändras. Lua-frågor startar ingen separat sökning och läser inga loggar.&lt;br /&gt;
&lt;br /&gt;
Det senast hämtade namnet finns kvar i cachen efter att du går in i en värld. Ett cachat namn bekräftar därför inte att menyn är öppen. &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.is_main_menu&amp;quot;)&amp;lt;/code&amp;gt; och &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.player.name&amp;quot;)&amp;lt;/code&amp;gt; visar om respektive fråga är tillgänglig. &amp;lt;code&amp;gt;runtime.status(...)&amp;lt;/code&amp;gt; ger också en orsak.&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;
== Exempel för &amp;lt;code&amp;gt;src/mod.lua&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Exemplet läser cachen vid inläsning och därefter var 500:e ms. Det väljer ett reservnamn och loggar bara ändringar:&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>