Modding
More actions
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,
}