Jump to content
Toggle menu
  • 3 articles
  • 22 files
  • 3 users
  • 2.5K edits
Shroudforge
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Modding

From Shroudforge
Revision as of 01:35, 7 November 2026 by Bonsaibauer (talk | contribs) (Importing a new version from external source)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


Modding



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.

Förutsättningar

Aktivera modden och ange funktionen runtime i mod.json:

{
  "capabilities": ["runtime"]
}

För de här klientfrågorna ställer du in targets till ["client"] i extended.mod.json. Anropa funktionerna från aktiva runtime-callbacks som on_load och on_update. runtime.phase == "ingame" 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.

Känna av huvudmenyn

local in_menu, reason = runtime.is_main_menu()
Returvärde Betydelse
true, nil Huvudmenyn har bekräftats, inklusive val av karaktär, värld och server.
false, nil Ett annat ursprungligt spelläge har verifierats.
nil, reason Läget är okänt, håller på att ändras eller frågan är inte tillgänglig.

Kontrollera uttryckligen in_menu == true eller in_menu == false. nil är inte ett bekräftat läge. Enbart false bekräftar inte heller att världen går att läsa. Kontrollera den funktion du behöver separat, till exempel runtime.has("runtime.ecs.read").

Läsa karaktärens namn

local name, reason = runtime.player.name()
local display_name = name or "Flameborn"

name, nil returnerar namnet på karaktären som valts i den lokala huvudmenyn som en UTF-8-sträng. Unicode-tecken, som i Ikiju 育樹, bevaras. nil, reason betyder att namnet inte är tillgängligt ännu eller att åtkomst saknas eller inte är tillåten.

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.

Delad cache

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.

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. runtime.has("runtime.is_main_menu") och runtime.has("runtime.player.name") visar om respektive fråga är tillgänglig. runtime.status(...) ger också en orsak.

Exempel för src/mod.lua

Exemplet läser cachen vid inläsning och därefter var 500:e ms. Det väljer ett reservnamn och loggar bara ändringar:

runtime.require("runtime.lifecycle")

local previous_message = nil

local function refresh()
    local in_menu = runtime.is_main_menu()
    local name = runtime.player.name()
    local state = "unknown"
    if in_menu == true then
        state = "menu"
    elseif in_menu == false then
        state = "other"
    end

    local message = state .. ": " .. (name or "Flameborn")
    if message ~= previous_message then
        previous_message = message
        shroudforge.log.info(message)
    end
end

return {
    on_load = refresh,
    on_update = function()
        refresh()
    end,
    update_interval_ms = 500,
}