<?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%2Fit</id>
	<title>Modding/it - 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%2Fit"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/it&amp;action=history"/>
	<updated>2026-11-07T23:13:36Z</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/it&amp;diff=2172&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/it&amp;diff=2172&amp;oldid=prev"/>
		<updated>2026-11-07T00:35:18Z</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;
Leggi lo stato del menu principale e il nome del personaggio locale selezionato tramite il runtime Lua. Entrambe le query usano gli stessi dati nativi del Modloader e non richiedono accesso al mondo.&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;
== Prerequisiti ==&lt;br /&gt;
&lt;br /&gt;
Abilita la mod e dichiara la capacità &amp;lt;code&amp;gt;runtime&amp;lt;/code&amp;gt; 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;
Per queste query del client, imposta &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; su &amp;lt;code&amp;gt;&amp;amp;#91;&amp;quot;client&amp;quot;&amp;amp;#93;&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;extended.mod.json&amp;lt;/code&amp;gt;. Chiama le funzioni da callback runtime attivi, come &amp;lt;code&amp;gt;on_load&amp;lt;/code&amp;gt; e &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; indica che il runtime della mod è avviato e non conferma l&amp;#039;ingresso in un mondo. Nessuna delle due query richiede un profilo di esecuzione. Le altre operazioni nel mondo mantengono i propri requisiti.&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;
== Rilevare il menu principale ==&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;
! Valore restituito !! Significato&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; || Il menu principale è stato confermato, inclusa la selezione di personaggio, mondo e server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; || È stato convalidato un altro stato originale del gioco.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; || Lo stato è sconosciuto, sta cambiando oppure la query non è disponibile.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controlla esplicitamente &amp;lt;code&amp;gt;in_menu == true&amp;lt;/code&amp;gt; o &amp;lt;code&amp;gt;in_menu == false&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; non è uno stato confermato. Anche &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; da solo non conferma che un mondo sia leggibile. Controlla separatamente l&amp;#039;operazione necessaria, ad esempio &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;
== Leggere il nome del personaggio ==&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; restituisce come stringa UTF-8 il nome del personaggio selezionato nel menu principale del client locale. I caratteri Unicode, come in &amp;lt;code&amp;gt;Ikiju 育樹&amp;lt;/code&amp;gt;, vengono preservati. &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; significa che il nome non è ancora disponibile oppure che l&amp;#039;accesso non è disponibile o consentito.&lt;br /&gt;
&lt;br /&gt;
La mod sceglie il proprio nome di fallback. L&amp;#039;API non inserisce un valore predefinito e non usa la selezione manuale del nome del Modloader. Il valore non identifica un giocatore remoto e non è né uno SteamID né un nome visualizzato da Steam. Un Dedicated Server non ha un nome di personaggio client locale.&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;
== Cache condivisa ==&lt;br /&gt;
&lt;br /&gt;
Lua e il Modloader leggono la stessa cache nativa. Il tick runtime esistente aggiorna lo stato del menu. L&amp;#039;integrazione del menu esistente acquisisce il nome alla prima selezione disponibile e di nuovo quando cambiano la selezione o i metadati del nome. Le query Lua non avviano una ricerca separata e non leggono i log.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;ultimo nome acquisito correttamente resta nella cache dopo l&amp;#039;ingresso in un mondo. Un nome in cache quindi non conferma che il menu sia aperto. &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.is_main_menu&amp;quot;)&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.player.name&amp;quot;)&amp;lt;/code&amp;gt; indicano la disponibilità di ciascuna query. Anche &amp;lt;code&amp;gt;runtime.status(...)&amp;lt;/code&amp;gt; fornisce una spiegazione.&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;
== Esempio per &amp;lt;code&amp;gt;src/mod.lua&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Questo esempio legge la cache al caricamento e poi ogni 500 ms. Sceglie un nome di fallback e registra solo le modifiche:&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>