<?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%2Fpl</id>
	<title>Modding/pl - 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%2Fpl"/>
	<link rel="alternate" type="text/html" href="https://wiki.shroudforge.net/index.php?title=Modding/pl&amp;action=history"/>
	<updated>2026-11-07T23:13:31Z</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/pl&amp;diff=2630&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/pl&amp;diff=2630&amp;oldid=prev"/>
		<updated>2026-11-07T01:35:23Z</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;
Odczytuj stan menu głównego i nazwę wybranej lokalnej postaci za pomocą runtime&amp;#039;u Lua. Oba zapytania korzystają z tych samych danych natywnych co Modloader i nie wymagają dostępu do świata.&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;
== Wymagania wstępne ==&lt;br /&gt;
&lt;br /&gt;
Włącz mod i zadeklaruj możliwość &amp;lt;code&amp;gt;runtime&amp;lt;/code&amp;gt; w pliku &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;
W przypadku tych zapytań klienta ustaw &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; na &amp;lt;code&amp;gt;&amp;amp;#91;&amp;quot;client&amp;quot;&amp;amp;#93;&amp;lt;/code&amp;gt; w pliku &amp;lt;code&amp;gt;extended.mod.json&amp;lt;/code&amp;gt;. Wywołuj funkcje z aktywnych callbacków runtime&amp;#039;u, takich jak &amp;lt;code&amp;gt;on_load&amp;lt;/code&amp;gt; i &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; oznacza uruchomiony runtime moda, ale nie potwierdza wejścia do świata. Żadne z tych zapytań nie wymaga profilu wykonania. Pozostałe operacje dotyczące świata zachowują własne wymagania.&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;
== Wykrywanie menu głównego ==&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;
! Zwracana wartość !! Znaczenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;true, nil&amp;lt;/code&amp;gt; || Potwierdzono menu główne, w tym wybór postaci, świata i serwera.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;false, nil&amp;lt;/code&amp;gt; || Zweryfikowano inny pierwotny stan gry.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; || Stan jest nieznany, zmienia się lub zapytanie jest niedostępne.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jawnie sprawdzaj &amp;lt;code&amp;gt;in_menu == true&amp;lt;/code&amp;gt; lub &amp;lt;code&amp;gt;in_menu == false&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; nie jest potwierdzonym stanem. Samo &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; również nie potwierdza dostępności świata do odczytu. Osobno sprawdź wymaganą operację, na przykład &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;
== Odczyt nazwy postaci ==&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; zwraca jako ciąg UTF-8 nazwę postaci wybranej w lokalnym menu głównym. Znaki Unicode, na przykład w &amp;lt;code&amp;gt;Ikiju 育樹&amp;lt;/code&amp;gt;, są zachowywane. &amp;lt;code&amp;gt;nil, reason&amp;lt;/code&amp;gt; oznacza, że nazwa nie jest jeszcze dostępna albo dostęp jest niedostępny lub niedozwolony.&lt;br /&gt;
&lt;br /&gt;
Mod sam wybiera nazwę zastępczą. API nie dodaje wartości domyślnej i nie używa ręcznego wyboru nazwy z Modloadera. Ta wartość nie identyfikuje zdalnego gracza i nie jest SteamID ani nazwą wyświetlaną przez Steam. Serwer dedykowany nie ma lokalnej nazwy postaci klienta.&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;
== Wspólna pamięć podręczna ==&lt;br /&gt;
&lt;br /&gt;
Lua i Modloader odczytują tę samą pamięć podręczną natywną. Istniejący tick runtime&amp;#039;u odświeża stan menu. Istniejąca integracja menu zapisuje nazwę przy pierwszym dostępnym wyborze, a następnie ponownie po zmianie wyboru lub metadanych nazwy. Zapytania Lua nie uruchamiają osobnego wykrywania ani nie odczytują logów.&lt;br /&gt;
&lt;br /&gt;
Ostatnia poprawnie odczytana nazwa pozostaje w pamięci podręcznej po wejściu do świata. Dlatego sama obecność nazwy w pamięci nie potwierdza, że menu jest otwarte. &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.is_main_menu&amp;quot;)&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;runtime.has(&amp;quot;runtime.player.name&amp;quot;)&amp;lt;/code&amp;gt; informują o dostępności poszczególnych zapytań. &amp;lt;code&amp;gt;runtime.status(...)&amp;lt;/code&amp;gt; również podaje przyczynę.&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;
== Przykład dla &amp;lt;code&amp;gt;src/mod.lua&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Ten przykład odczytuje pamięć podręczną przy ładowaniu, a następnie co 500 ms. Wybiera nazwę zastępczą i zapisuje w logu tylko zmiany:&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>