<?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%2Ffr</id>
	<title>Modding/fr - 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%2Ffr"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/fr&amp;action=history"/>
	<updated>2026-11-07T23:13:38Z</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/fr&amp;diff=2569&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/fr&amp;diff=2569&amp;oldid=prev"/>
		<updated>2026-11-07T00:59:19Z</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;
Consultez l’état du menu principal et le nom du personnage local sélectionné avec le runtime Lua. Ces deux requêtes utilisent les mêmes données natives que le Modloader et ne nécessitent aucun accès au monde.&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;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Activez le mod et déclarez la capacité &amp;lt;code&amp;gt;runtime&amp;lt;/code&amp;gt; dans &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;
Pour ces requêtes du client, définissez &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; sur &amp;lt;code&amp;gt;&amp;amp;#91;&amp;quot;client&amp;quot;&amp;amp;#93;&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;extended.mod.json&amp;lt;/code&amp;gt;. Appelez les fonctions depuis des callbacks actifs du runtime, comme &amp;lt;code&amp;gt;on_load&amp;lt;/code&amp;gt; et &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; indique que le runtime du mod a démarré et ne confirme pas l’entrée dans un monde. Ces deux requêtes ne nécessitent aucun profil d’exécution. Les autres opérations du monde conservent leurs propres prérequis.&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;
== Détecter le menu principal ==&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;
! Résultat !! Signification&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; || Le menu principal, y compris la sélection du personnage, du monde et du serveur, a été confirmé.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; || Un autre état d’origine du jeu a été validé.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; || L’état est inconnu, change actuellement ou la requête est indisponible.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vérifiez explicitement &amp;lt;code&amp;gt;in_menu == true&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;in_menu == false&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; ne représente pas un état confirmé. &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; seul ne confirme pas non plus que le monde peut être lu. Vérifiez séparément l’opération nécessaire, par exemple &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;
== Lire le nom du personnage ==&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; renvoie sous forme de chaîne UTF-8 le nom du personnage sélectionné dans le menu principal du client local. Les caractères Unicode, comme dans &amp;lt;code&amp;gt;Ikiju 育樹&amp;lt;/code&amp;gt;, sont préservés. &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; signifie qu’aucun nom n’est encore disponible, que la requête est indisponible ou que l’accès n’est pas autorisé.&lt;br /&gt;
&lt;br /&gt;
Le mod choisit son propre nom de remplacement. L’API n’insère aucune valeur par défaut et n’utilise pas le nom manuel du Modloader. Cette valeur n’identifie aucun joueur distant et n’est ni un SteamID ni un nom affiché sur Steam. Un serveur dédié n’a pas de nom de personnage du client local.&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 partagé ==&lt;br /&gt;
&lt;br /&gt;
Lua et le Modloader lisent le même cache natif. Le tick existant du runtime actualise l’état du menu. L’intégration existante du menu capture le nom à la première sélection disponible, puis lorsque la sélection ou les métadonnées du nom changent. Les requêtes Lua ne lancent aucune recherche supplémentaire et ne lisent aucun journal.&lt;br /&gt;
&lt;br /&gt;
Le dernier nom capturé avec succès reste en cache après l’entrée dans un monde. Un nom en cache ne confirme donc pas que le menu est ouvert. &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.is_main_menu&amp;quot;)&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.player.name&amp;quot;)&amp;lt;/code&amp;gt; indiquent la disponibilité de chaque requête. &amp;lt;code&amp;gt;runtime.status(...)&amp;lt;/code&amp;gt; fournit aussi une explication.&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;
== Exemple pour &amp;lt;code&amp;gt;src/mod.lua&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Cet exemple lit le cache au chargement, puis toutes les 500 ms. Il choisit un nom de remplacement et ne journalise que les changements :&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>