RE:NODE

Jotunn pro Valheim: co dělá a proč vyhazuje hráče

Text: Tým RE:NODE
10 min čtení


Jotunn není mód, který by sis instaloval kvůli němu samotnému. Je to knihovna - „the Valheim Library“ - na které jsou postavené jiné módy, a na většině módovaných serverů skončí proto, že ji nějaký obsahový mód uvedl jako závislost. Dělá tři věci, kterých si majitel serveru všimne: registruje nové předměty, stavební prvky a tvory, které tyto módy přidávají; při připojení porovná verze módů mezi serverem a klientem a pokud nesedí, odpojí hráče; a posílá konfigurační hodnoty jen pro adminy ze serveru všem klientům. Když je hráč vyhozen z módovaného serveru s oknem vypisujícím módy a verze, Jotunn je velmi často ten, kdo vyhazuje - a dělá to schválně. Tento článek vysvětluje, co se děje, jak to číst a jak zabránit tomu, aby se neshodou stal sám Jotunn.

Jak BepInEx vůbec načítá módy, popisuje Módy na Valheim serveru s BepInEx. Tento článek na něj navazuje.

Co Jotunn pro módy dělá#

Valheim nemá oficiální modovací API. Bez knihovny by si každý obsahový mód musel sám zjišťovat, jak ve správnou chvíli vložit nový předmět do databáze objektů hry, jak zařídit, aby se recept objevil u správné výrobní stanice, jak přidat překlady a jak registrovat síťové zprávy. Jotunn tuto práci udělá jednou a módy ho volají.

Je rozdělený na manažery, každý zodpovídá za jeden druh věcí:

ManažerCo zajišťuje
ItemManagerNové předměty, recepty, status efekty, přeměny předmětů
PieceManagerStavební prvky a kategorie kladiva, ve kterých jsou
PrefabManagerKlonování a registrace prefabů, základ většiny obsahu
CreatureManagerNoví tvorové a jejich kořist
ZoneManagerVlastní lokace a vegetace při generování světa
LocalizationManagerPřekladové řetězce pro každý jazyk
SynchronizationManagerSynchronizace konfigurace a kontroly adminů mezi serverem a klienty
NetworkManagerVlastní RPC, síťové zprávy módu
CommandManagerKonzolové příkazy, které mód přidává

Většina z toho je pro majitele serveru neviditelná, až na jednu užitečnou výjimku: Jotunn zavedl „mock“ reference, kde mód odkazuje na vanilla asset zástupným jménem s předponou JVLmock_, které se za běhu vymění za skutečný objekt. Pokud se po aktualizaci hry nepodaří assety módu vyřešit, můžeš tuto předponu vidět v chybových řádcích logu a ukazuje na mód, který potřebuje aktualizaci, ne na tvou instalaci.

Jotunn je na Thunderstore publikovaný jako ValheimModding-Jotunn, s dokumentací na valheim-modding.github.io/Jotunn. Závisí na BepInExPack Valheim a na HookGenPatcher (ValheimModding-HookGenPatcher), který při prvním startu generuje pro hru assemblies MMHOOK. Správce módů nainstaluje obojí automaticky. Ručně patří .dll Jotunn do BepInEx/plugins a HookGenPatcher do BepInEx/patchers - když dáš HookGenPatcher do špatné složky, vzniknou chyby, které vypadají, jako by byl rozbitý sám Jotunn.

Kde musí být Jotunn nainstalovaný#

Jotunn musí být na každém počítači, který spouští mód, který na něm závisí. V praxi to znamená server a všichni klienti, protože obsahové módy - hlavní uživatelé Jotunn - samy potřebuje obě strany.

Čistě serverový mód, který Jotunn používá, ho potřebuje jen na serveru. Mód jen pro klienta, který ho používá, například některé módy rozhraní, ho potřebuje jen na klientech. Závislost sleduje mód. Běžné překvapení je parta, která si myslí, že provozuje „jen serverové módy“, dokud někdo nepřidá jeden obsahový mód a s ním nepřijde Jotunn, a od té chvíle se na server nedá připojit bez stejného módu na každém klientovi.

Proto také módy s Jotunn vyřazují hráče na Xboxu a v Game Passu: ti nemohou nic instalovat a kontrola Jotunn je odmítne, pokud mód deklaruje, že ho musí mít všichni. Co smíšená parta může a nemůže provozovat, popisuje Valheim crossplay a hráči na Xboxu.

Kontrola verzí a proč vyhazuje hráče#

Když se klient připojí k serveru, Jotunn na každé straně sestaví seznam načtených módů, které deklarovaly úroveň síťové kompatibility, s jejich verzemi, a oba seznamy se porovnají. Pokud se rozcházejí způsobem, který mód označil za důležitý, klient je odpojen a zobrazí se mu okno s výpisem problémů.

Každý mód deklaruje svůj požadavek v kódu atributem. Důležité jsou dvě části: kdo mód musí mít a jak přísně se musí shodovat verze.

Úroveň kompatibilityVýznam
NotEnforcedVůbec se nekontroluje
VersionCheckOnlyPorovnává se, jen když ho mají obě strany
EveryoneMustHaveModServer i klient ho musí mít
ClientMustHaveModKlienti ho musí mít; server ne
ServerMustHaveModServer ho musí mít; klienti ne
Přísnost verzeNeshoda je
NoneNikdy problém
MajorJiné první číslo (1.x vs 2.x)
MinorJiné první nebo druhé číslo (1.4 vs 1.5)
PatchJakýkoli rozdíl (1.4.2 vs 1.4.3)

Obsahový mód, který deklaruje EveryoneMustHaveMod s přísností Minor, tedy pustí hráče s 1.4.2 na server s 1.4.3, ale odmítne 1.5.0. Mód s přísností Patch odmítne jakýkoli rozdíl. Mód, který nedeklaruje nic, se do porovnání Jotunn vůbec nezapojuje - což neznamená, že neshoda je bezpečná, jen že ti to Jotunn neřekne.

Okno, které hráč vidí, vypisuje každý problémový mód a co bylo špatně: chybí na klientovi, chybí na serveru, nebo je na obou stranách v nekompatibilních verzích, přičemž jsou zobrazeny obě verze. Toto okno je nejužitečnější věc v celém procesu, protože pojmenuje mód. Požádej hráče o screenshot, ne o popis.

při připojeníneshodaKlientmódy + verzeServermódy + verzePorovnání Jotunnpodle úrovníPřipojeníseznamy sedíOdpojeníokno vypíše módy
Co Jotunn porovnává při připojení

Oprava je vždy stejná: sjednoť seznamy. Nesnaž se kontrolu zmírnit. Autoři přísnost deklarovali, protože neshodná verze rozbije předměty, recepty nebo svět mnohem hůř než odmítnuté připojení. Postup krok za krokem, jak přečíst hlášku a sladit sady, je v článku vyhození kvůli neshodě verzí módů.

Neshodou je sám Jotunn#

Nepříjemný případ nastává, když všechny obsahové módy sedí, ale Jotunn ne. Hráč, který ve správci módů aktualizoval všechno, má teď novější Jotunn než server. Zda ho kvůli tomu samotnému vyhodí, závisí na dotčených verzích Jotunn a mezi vydáními se to lišilo - ale i když ho nevyhodí, obsahový mód postavený na chování novějšího Jotunn se může proti starší verzi na druhé straně chovat špatně.

Bezpečné pravidlo je jednoduché: ber Jotunn jako součást seznamu módů a drž ho ve stejné verzi na serveru i na klientech. Když parta sdílí profil přes správce módů, je Jotunn v profilu jako každý jiný balíček a r2modman pro Valheim party ukazuje, jak profil držet zafixovaný.

Abys viděl, co každá strana doopravdy provozuje, přečti si log BepInEx. Každý plugin je při startu vypsán se svou verzí:

bash
# On the server, from the server root$ grep -o 'Loading \[[^]]*\]' BepInEx/LogOutput.logLoading [Jotunn 2.x.x]Loading [SomeContentMod 1.4.3]

Na klientovi je stejný soubor ve složce BepInEx profilu po jednom módovaném startu. Porovnej oba seznamy řádek po řádku.

Synchronizace konfigurace a nastavení jen pro adminy#

Jotunn dává módům způsob, jak některé konfigurační hodnoty udělat závazné ze serveru. Mód označí nastavení jako určené jen pro adminy a SynchronizationManager v Jotunn pak udělá tři věci:

  • Když se klient připojí, pošle mu hodnoty těchto nastavení ze serveru, které klient pro danou relaci použije místo svých.
  • Po dobu připojení je klient, který není admin, nemůže měnit; hodnoty jsou v herním editoru konfigurace zobrazeny zamčené.
  • Klient, který je admin, je může měnit ve hře a změna se pošle na server, tam se uloží a rozešle všem ostatním připojeným hráčům.

Status admina pochází ze serverového souboru adminlist.txt, stejného, který vanilla používá pro kick a ban - formáty ID vysvětluje článek o třech souborech se seznamy. Pokud admin nemůže ve hře změnit synchronizované nastavení, první, co zkontroluj, je, zda je jeho ID v tomto souboru ve tvaru, který server očekává.

Herní editor, který většina lidí používá, je BepInEx Configuration Manager, otevírá se ve výchozím nastavení klávesou F1. Je to mód jen pro klienta, není součástí Jotunn, ale synchronizace Jotunn se na něj napojuje. Bez něj mohou admini stále upravit soubor serveru v BepInEx/config a restartovat.

Dva důsledky, které stojí za to znát:

  1. Úprava synchronizované hodnoty v konfiguračním souboru klienta na serveru nic nedělá. Při připojení se přepíše. Hráči občas hlásí, že mód jejich změnu „ignoruje“; tohle je důvod.
  2. Záznamem je konfigurační soubor serveru. Zálohuj ho spolu se světem a když server stěhuješ, vezmi s sebou BepInEx/config, jinak se všechna synchronizovaná nastavení vrátí na výchozí hodnoty módu.

Ne každý mód používá synchronizaci Jotunn. Některé nesou vlastní synchronizaci, nejčastěji knihovnu ServerSync, která se chová podobně, ale odděleně, obvykle s nastavením Lock Configuration v konfiguraci samotného módu. Na stránce módu nebo v komentářích konfigurace je napsáno, kterou používá.

Jak držet Jotunn aktuální#

Jotunn udržuje modovací komunita Valheimu a bývá mezi prvními balíčky aktualizovanými po patchi hry, protože na něm závisí tolik módů. Pořadí v den patche:

  1. Neaktualizuj server hned, jak patch vyjde. Zastav ho, zálohuj svět i celou složku BepInEx.
  2. Počkej na BepInExPack Valheim (pokud patch změnil Unity), pak na HookGenPatcher a Jotunn a pak na obsahové módy. Obsahové módy často mají ve svých závislostech zafixovanou minimální verzi Jotunn, takže je stejně nejde aktualizovat jako první.
  3. Aktualizuj server a jeho módy společně, spusť ho, v logu hledej výjimky a dokončení generování hooků.
  4. Nový profil módů sdílej s partou až poté, co je potvrzeno, že server funguje.

Jotunn se snaží zůstat zpětně kompatibilní v rámci hlavní verze, takže mód napsaný pro starší Jotunn obvykle funguje i s novějším. Změna hlavní verze to může porušit a autoři to uvádějí v changelozích. Co dělat, když aktualizace módu něco rozbije je obecný postup, když ti výše uvedené pořadí nepomůže.

Na RE:NODE jsou backup sloty součástí každého tarifu Valheim, takže si před jakýmkoli zásahem udělej zálohu na požádání - s funkčním Jotunn a sadou módů v ní - a obnova je při nezdařené aktualizaci jedno tlačítko. Zálohu lze také zamknout, aby ji plánované zálohy nevytlačily, dokud ještě testuješ.

Řešení problémů s Jotunn#

`Could not load [SomeMod] because it requires [com.jotunn.jotunn]`. Jotunn chybí nebo se nenačetl. Nainstaluj ho a zkontroluj, že HookGenPatcher je v patchers, ne v plugins.

Jotunn se načte, ale po patchi hry při startu hází chyby. Jotunn zatím nebyl aktualizován pro tuto verzi hry, nebo jsou zastaralé assemblies vygenerované HookGenPatcherem. Aktualizuj obojí; pokud to ještě nejde, běž bez závislých módů, dokud to nepůjde.

Hráč dostane při připojení okno s výpisem módů. To je kontrola verzí. Přečti si jména a verze v okně a uprav jeho profil tak, aby odpovídal serveru.

Změny admina u synchronizovaného nastavení se neuchytí. Server hráče nepoznává jako admina, nebo to není nastavení, které mód označuje jako jen pro adminy. Nejdřív zkontroluj adminlist.txt.

Start trvá několik minut. První start po instalaci nebo aktualizaci HookGenPatcher, nebo po patchi hry, znovu generuje hook assemblies. Další starty jsou rychlejší. Pokud je pomalý každý start, spočítej módy a nevinit Jotunn.

FAQ#

Musí mít hráči Jotunn nainstalovaný?

Pokud na něm závisí jakýkoli mód, který potřebují, ano. Správce módů ho nainstaluje automaticky jako závislost. Zvlášť ho hráči potřebují jen tehdy, když mód na serveru deklaruje, že ho musí mít všichni, a mód Jotunn používá.

Dá se kontrola verzí Jotunn vypnout?

Ne z konfiguračního souboru a ani bys to nechtěl. Každý mód deklaruje svůj požadavek v kódu. Kontrola existuje proto, aby se předměty, recepty a objekty světa na různých počítačích nerozcházely.

Je Jotunn totéž co JotunnLib?

JotunnLib byl dřívější název. Současné balíčky vychází jako Jotunn od ValheimModding a staré módy, které zmiňují JotunnLib, obvykle myslí stejnou knihovnu.

Stojí Jotunn výkon serveru?

Po spuštění velmi málo. Hlavní cena je doba startu kvůli generování v HookGenPatcher a registraci obsahu, což s rostoucím seznamem módů znamená víc.

Proč Jotunn potřebuje HookGenPatcher?

Jotunn a mnoho módů na něm postavených používá hook assemblies, vygenerované z kódu hry, aby se připojily k metodám hry. HookGenPatcher tyto assemblies při startu generuje a při aktualizaci hry je generuje znovu.