<?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%2Fnl</id>
	<title>Modding/nl - 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%2Fnl"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/nl&amp;action=history"/>
	<updated>2026-11-07T23:13:40Z</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/nl&amp;diff=2629&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/nl&amp;diff=2629&amp;oldid=prev"/>
		<updated>2026-11-07T01:35:22Z</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;
Lees de status van het hoofdmenu en de geselecteerde lokale personagenaam via de Lua-runtime. Beide query&amp;#039;s gebruiken dezelfde native gegevens als Modloader en hebben geen toegang tot de wereld nodig.&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;
== Vereisten ==&lt;br /&gt;
&lt;br /&gt;
Schakel de mod in en geef de &amp;lt;code&amp;gt;runtime&amp;lt;/code&amp;gt;-mogelijkheid op in &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;
Stel voor deze clientquery&amp;#039;s &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;extended.mod.json&amp;lt;/code&amp;gt; in op &amp;lt;code&amp;gt;&amp;amp;#91;&amp;quot;client&amp;quot;&amp;amp;#93;&amp;lt;/code&amp;gt;. Roep de functies aan vanuit actieve runtime-callbacks zoals &amp;lt;code&amp;gt;on_load&amp;lt;/code&amp;gt; en &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; geeft aan dat de modruntime is gestart en bevestigt niet dat de gamewereld is betreden. Geen van beide query&amp;#039;s vereist een uitvoeringsprofiel. Andere wereldbewerkingen hebben hun eigen vereisten.&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;
== Het hoofdmenu detecteren ==&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;
! Retourwaarde !! Betekenis&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; || Het hoofdmenu is bevestigd, inclusief de selectie van personage, wereld en server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; || Een andere oorspronkelijke gamestatus is gevalideerd.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; || De status is onbekend, verandert of de query is niet beschikbaar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controleer expliciet of &amp;lt;code&amp;gt;in_menu == true&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;in_menu == false&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; is geen bevestigde status. Alleen &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; bevestigt ook niet dat een wereld leesbaar is. Controleer de benodigde bewerking afzonderlijk, bijvoorbeeld &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;
== De personagenaam lezen ==&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; retourneert de naam van het personage dat in het lokale hoofdmenu is geselecteerd als UTF-8-tekenreeks. Unicode-tekens, zoals in &amp;lt;code&amp;gt;Ikiju 育樹&amp;lt;/code&amp;gt;, blijven behouden. &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; betekent dat er nog geen naam beschikbaar is, of dat toegang niet beschikbaar of niet toegestaan is.&lt;br /&gt;
&lt;br /&gt;
De mod kiest zelf een terugvalnaam. De API voegt geen standaardwaarde toe en gebruikt niet de handmatige naamselectie van Modloader. De waarde identificeert geen externe speler en is geen SteamID of Steam-weergavenaam. Een dedicated server heeft geen lokale clientpersonagenaam.&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;
== Gedeelde cache ==&lt;br /&gt;
&lt;br /&gt;
Lua en Modloader lezen dezelfde native cache. De bestaande runtimetick vernieuwt de menustatus. De bestaande menu-integratie legt de naam vast zodra de eerste selectie beschikbaar is en opnieuw wanneer de selectie of naammetadata verandert. Lua-query&amp;#039;s starten geen aparte detectie en lezen geen logboeken.&lt;br /&gt;
&lt;br /&gt;
De laatst succesvol vastgelegde naam blijft in de cache nadat je een wereld bent binnengegaan. Een naam in de cache bevestigt dus niet dat het menu open is. &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.is_main_menu&amp;quot;)&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.player.name&amp;quot;)&amp;lt;/code&amp;gt; geven de beschikbaarheid van elke query aan. &amp;lt;code&amp;gt;runtime.status(...)&amp;lt;/code&amp;gt; geeft ook een reden.&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;
== Voorbeeld voor &amp;lt;code&amp;gt;src/mod.lua&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Dit voorbeeld leest de cache bij het laden en daarna elke 500 ms. Het kiest een terugvalnaam en registreert alleen wijzigingen:&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>