RE:NODE

Jak najít seed světa Valheim na dedikovaném serveru

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


Seed ve Valheimu je řetězec o deseti znacích, například Fj3kQ9mXa2, uložený v souboru s metadaty světa na serveru. V aktuálních verzích dedikovaného serveru už to není WorldName.fwl vedle souboru .db. Každý svět je teď složka a seed je v souboru _main.<number>.fwl2 uvnitř ní. Stáhni ten nejnovější, otevři ho v jakémkoli prostém textovém prohlížeči a seed je krátký řetězec hned za jménem světa. Pokud hraješ na konzoli a k souborům se vůbec nedostaneš, správce serveru to za tebe udělá za pár minut.

Zbytek článku popisuje, kde ta složka je, jak soubor přečíst, aniž ho poškodíš, které z několika kopií věřit a co dělat, když hledání .fwl nenajde vůbec nic - což je obvyklý způsob, jak lidé zjistí, že se rozložení souborů změnilo.

Proč hledání .fwl nic nenajde#

Po většinu existence Valheimu tvořily svět dva soubory se stejným jménem: Midgard.fwl, několik stovek bajtů se jménem a seedem, a Midgard.db se vším, co se ve světě změnilo. Většina návodů na internetu, včetně našeho staršího článku o umístění uložených her, popisuje právě tuto dvojici a většina odpovědí na otázku „jak najdu svůj seed“ zní „otevři .fwl v Poznámkovém bloku“.

Na serverech, které dnes provozujeme, zapisuje běžící svět něco jiného. Log serveru popisuje každé uložení v pěti krocích:

Server log, one world save
World save (1/5) Cloud & Backup checks done [0ms] => Save number 435World save (2/5) Chunks writing done [223ms]World save (3/5) DB2 writing done [20ms]World save (4/5) FWL writing done [3ms]World save (5/5) done. Total time [289ms]

Tyto kroky odpovídají souborům ve složce pojmenované podle světa a žádný z nich nekončí na .fwl ani .db. Hledání *.fwl, přesně to, co radí většina návodů, proto skončí prázdné, i když server svět uložil už stovkykrát. Nic nechybí. Přípona je .fwl2 a soubor leží o úroveň hlouběji, než kde jsi hledal.

Přesnou verzi, ve které se to změnilo, ti říct neumíme a hádat nechceme. Pokud potřebuješ vědět, jestli konkrétní server používá staré, nebo nové rozložení, podívej se do jeho složky worlds_local: složky znamenají nové rozložení, soubory .fwl a .db to staré.

Nová složka světa, soubor po souboru#

Tady je skutečná složka světa na linuxovém dedikovaném serveru, zkrácená. Svět se jmenuje Midgard a server ho uložil 435krát:

worlds_local
worlds_local/  Dedicated/  Midgard/    _main.435.fwl2    _main.435.db2    _main.435.chunks    _main.435.ok    1e_1e__1_1.chunk    1e_20__1_1.chunk    ...  Midgard_backup_auto-20261019-200416/  Midgard_backup_auto-20261019-111133/

K čemu který druh souboru slouží, v rozsahu, který správce serveru potřebuje znát:

SouborCo obsahujeVelikost
_main.N.fwl2Jméno světa, seed, metadataStovky bajtů
_main.N.db2Stav světa, který není v chuncíchDesítky až stovky KB
_main.N.chunksIndex souborů chunkůMalinký
*.chunkUložený stav oblastí mapyKB až MB každý
_main.N.okZnačka, že uložení N doběhlo4 bajty

N je číslo uložení z logu. S každým uložením stoupne o jedna, takže nejvyšší číslo ve složce patří nejnovějšímu uložení. Stojí za to pochopit soubor .ok: zapisuje se až po zbytku daného uložení, a proto je užitečným znamením, že je sada kompletní. Soubor _main.N.fwl2 bez odpovídajícího _main.N.ok vedle sebe patří k uložení, které možná nedoběhlo.

Soubory chunků jsou pojmenované podle oblastí mapy a vlastní soubor dostanou jen oblasti, které někdo navštívil a změnil. Úplně nový svět jich má hrstku; svět, který parta hraje několik týdnů, jich má desítky. Složka Dedicated ve výpisu je jméno světa, které používá výchozí spouštěcí skript, a obvykle znamená, že server byl jednou spuštěn dřív, než někdo vyplnil jméno světa. Je to samostatný, skoro prázdný svět a můžeš ho klidně ignorovat.

Kde je složka na dedikovaném serveru#

Složka světa leží v uživatelském profilu toho, pod kým běží proces serveru, v adresáři nastavení Unity:

SystémVýchozí cesta
Linux~/.config/unity3d/IronGate/Valheim/worlds_local/
Windows%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local\
Pterodactyl egg/home/container/.config/unity3d/IronGate/Valheim/worlds_local/

Na starších instalacích může být poslední složka worlds místo worlds_local; pokud je první prázdná, zkontroluj obě. Když server startuje s -savedir, všechno se přesune pod tento adresář, a právě tento argument je první věc, kterou je třeba zkontrolovat, když je očekávaná složka prázdná. Přehled argumentů spuštění ho uvádí spolu s ostatními.

Na linuxovém serveru, který spravuješ, si rozložení ověříš jedním příkazem:

bash
$ ls -la ~/.config/unity3d/IronGate/Valheim/worlds_local/$ ls -t ~/.config/unity3d/IronGate/Valheim/worlds_local/Midgard/*.fwl2 | head -1

Druhý řádek vypíše nejnovější soubor s metadaty, tedy ten, který chceš. Midgard nahraď přesným jménem svého světa včetně velkých písmen - jméno složky je hodnota -world.

Na hostovaném serveru s webovým správcem souborů je cesta stejná jako v řádku Pterodactyl, jen bez /home/container. Složka .config začíná tečkou, takže ji některé správce souborů skrývají. Na RE:NODE ji file manager zobrazuje a ke stejným souborům se dostaneš i přes SFTP s přihlašovacími údaji ze stránky nastavení serveru.

Jak přečíst seed ze souboru .fwl2#

Seed je prostý text uvnitř malého binárního souboru, takže přečíst ho je snadné a upravovat ho je špatný nápad.

  1. Najdi složku světa a vyber _main.N.fwl2 s nejvyšším N, ke kterému existuje i _main.N.ok.
  2. Stáhni ho. Neotvírej ho v editoru v prohlížeči, ani jen na prohlédnutí - viz varování níže.
  3. Staženou kopii otevři v prostém textovém editoru, například v Poznámkovém bloku, TextEditu nebo VS Code.
  4. Blízko začátku uvidíš jméno světa a potom krátkou řadu písmen a číslic. Ta řada je seed.

Většina souboru bude vypadat jako náhodné symboly, protože je binární. Hledáš dvě čitelná slova blízko u sebe na začátku: Midgard a téměř hned za ním Fj3kQ9mXa2. Seed má obvykle deset znaků, míchá velká a malá písmena a záleží v něm na velikosti písmen: fj3kq9mxa2 je jiný svět.

Pokud ti terminál nevadí, nemusíš nic stahovat. strings vypíše čitelné části binárního souboru a první dvě z nich jsou jméno a seed:

bash
$ strings -n 3 _main.435.fwl2 | head -2MidgardFj3kQ9mXa2

Co doopravdy znamenají první bajty

Pokud ho chceš číst skriptem nebo ověřit, že soubor není poškozený, má začátek souboru jednoduchý, pevný tvar. Všechna čísla jsou little-endian.

BajtyVýznamPříklad
4Délka zbytku souboru6b 01 00 00 (363)
4Verze formátu metadat2a 00 00 00 (42)
1 + nJméno světa, nejdřív délka07 a pak Midgard
1 + nText seedu, nejdřív délka0a a pak Fj3kQ9mXa2

Textová pole jsou řetězce ve stylu .NET: délka a pak tolik bajtů UTF-8. U něčeho tak krátkého jako jméno světa nebo seed je délka jediný bajt. První číslo stojí za kontrolu: u zdravého souboru se rovná velikosti souboru mínus čtyři, takže useknuté stažení nebo soubor zmrzačený editorem se prozradí okamžitě. Za seedem následuje číslo, které z něj hra odvozuje, a další pole, na která se nespoléháme. Číslo verze je na našich serverech dnes 42; ber ho jako něco, co se mezi verzemi hry mění, ne jako konstantu.

Krátký skript v Pythonu ho přečte spolehlivě a funguje i na starých souborech .fwl, protože začínají stejně:

valheim_seed.py
import struct, sysdata = open(sys.argv[1], "rb").read()length, version = struct.unpack_from("<ii", data, 0)pos = 8def read_string(pos):    size = shift = 0    while True:        byte = data[pos]; pos += 1        size |= (byte & 0x7F) << shift; shift += 7        if byte < 0x80:            break    return data[pos:pos + size].decode("utf-8"), pos + sizename, pos = read_string(pos)seed, pos = read_string(pos)print(f"world={name} seed={seed} version={version} intact={length == len(data) - 4}")
bash
$ python valheim_seed.py _main.435.fwl2world=Midgard seed=Fj3kQ9mXa2 version=42 intact=True

Které kopii věřit: uložení a backupy#

Rušná složka světa obsahuje jednu aktuální sadu souborů a server vedle ní neustále vytváří složky s backupy. Ty se jmenují WorldName_backup_auto-YYYYMMDD-HHMMSS a kolik jich existuje a jak často vznikají, řídí argumenty spuštění -backups, -backupshort a -backuplong. Každá z nich je kompletní složka světa ve stejném rozložení s vlastním _main.N.fwl2.

Pro nalezení seedu poslouží kterákoli: seed se po celý život světa nemění, takže nejstarší backup i nejnovější uložení nesou stejný řetězec. To se hodí, když je aktuální složka ve špatném stavu. Pokud nejnovější .fwl2 neprojde kontrolou délky, přečti místo něj ten z poslední složky s backupem.

Při obnově záleží na pořadí víc:

  • Použij aktuální složku, pokud má její nejnovější _main.N.fwl2 odpovídající .ok.
  • Jinak vezmi nejnovější složku _backup_auto-, která byla v době vzniku dokončeným uložením.
  • Před výměnou složek zastav server, jinak svým dalším uložením přepíše cokoli, co jsi vrátil.

Jak často probíhá hlavní uložení, určuje -saveinterval v sekundách, výchozí hodnota je 1800 - každou půlhodinu. Pád tedy připraví nanejvýš o tolik hraní. Náš průvodce backupy a poškozením světa popisuje obnovu podrobně. Jediné pravidlo, které si z něj vezmi sem: backup na stejném disku jako svět chrání před špatným uložením, ne před ztrátou disku.

Jak získat seed, když hraješ na PlayStationu nebo Xboxu#

Od příchodu crossplaye se hráči na konzolích mohou připojit na stejné servery jako hráči na PC a obvyklá rada - „vyber svět v seznamu světů, seed je tam vidět“ nebo „otevři .fwl v Poznámkovém bloku“ - pro ně neplatí. Hráč na konzoli, který se připojuje na cizí dedikovaný server, soubory světa vůbec nemá. Svět existuje jen na serveru a konzolový klient ho nijak procházet nemůže.

Odpověď pro hráče na konzoli tedy zní: zeptej se toho, kdo server provozuje. Pokud jsi to ty a ptá se někdo z PlayStationu, zabere to minutu:

  1. Otevři file manager serveru nebo se připoj přes SFTP.
  2. Přejdi do .config/unity3d/IronGate/Valheim/worlds_local/ a otevři složku se jménem svého světa.
  3. Stáhni nejnovější _main.N.fwl2, nebo na něj spusť strings, pokud máš shell.
  4. Pošli mu těch deset znaků přesně tak, jak jsou.

Pomůže k tomu přidat odkaz na prohlížeč map. Weby jako valheim-map.world vezmou seed a vykreslí celý svět včetně biomů, bossů a obchodníků a fungují i v prohlížeči na telefonu, což je důležité pro někoho, kdo nemá PC. Připomeň mu, že mapa ukazuje svět tak, jak byl vygenerován, ne to, co se od té doby postavilo nebo vykopalo. Náš průvodce seedy popisuje, co v prohlížeči map stojí za kontrolu, jakmile seed máš.

Pokud jsi hráč na konzoli na serveru, který neprovozuješ, zeptej se majitele, nebo u pronajatého serveru podpory hostingu. Dej jim jméno serveru tak, jak se zobrazuje v seznamu serverů, a pokud ho znáš, i jméno světa. Obojí je v nastavení serveru, takže najdou správnou složku, i když hosting provozuje stovky světů.

Změna nebo nastavení seedu#

Seed existujícího světa změnit nejde a dedikovaný server nemá žádný argument pro seed. Každá volba serveru je argument spuštění a žádný z nich seed nebere. Pokud -world odkazuje na složku, která neexistuje, server pod tím jménem vytvoří nový svět s náhodným seedem a zapíše to do logu - a proto také špatné jméno světa vypadá přesně jako smazaný svět.

Chceš-li provozovat server na konkrétním seedu, vytvoř svět s tímto seedem na vlastním PC, jednou ho spusť, aby se zapsaly soubory, a výsledek nahraj do složky worlds_local na serveru. Postup prochází návod na nahrání. Dva body specifické pro nové rozložení:

  • Nahraj celou složku pojmenovanou přesně podle hodnoty -world na serveru.
  • Zkontroluj, jaké rozložení zapsala tvoje lokální hra. Pokud tvoje PC vytvořilo soubory .fwl a .db a server očekává složky, nebo naopak, zastav se a před nahráním aktualizuj obojí na stejnou verzi hry, místo abys míchal soubory.

Úprava textu seedu uvnitř .fwl2, kterou bys seed „změnil“, nefunguje a je to nejrychlejší způsob, jak svět poškodit. Pole s délkou i uložený stav světa závisí na původní hodnotě. Ber soubor jako jen pro čtení.

Řešení problémů#

Hledání `.fwl` nic nenajde. Server používá rozložení se složkami. Hledej *.fwl2, nebo otevři worlds_local a podívej se do složky pojmenované podle svého světa.

Je tam složka `Dedicated` a žádný jiný svět. Server běží bez nastaveného jména světa, takže hraje svět jménem Dedicated. Pokud na něm tvoje parta hrála, je to tvůj svět a jeho seed je v Dedicated/_main.N.fwl2. Pokud ne, zkontroluj jméno světa v nastavení spuštění a cestu -savedir.

Složka světa existuje, ale není v ní žádný `.fwl2`. Buď server ještě nikdy nedokončil uložení, nebo je výpis, na který se díváš, useknutý. Počkej na další uložení - log vypíše World save (5/5) done - a podívej se znovu. Pokud log ukazuje uložení a složka zůstává prázdná, server zapisuje jinam, což téměř vždy znamená -savedir.

Seed vypadá jako nesmysl nebo obsahuje divné znaky. Nejspíš čteš číselné pole za seedem, nebo byl soubor otevřen v podivném kódování. Použij strings nebo skript výše, které čtou přesné bajty.

Kontrola délky selže. Stahování se přerušilo nebo byl soubor uložen přes editor. Stáhni ho znovu; pokud selže i kopie na serveru, přečti seed z poslední složky _backup_auto- a před dalším restartem si projdi návod na pád při startu.

Prohlížeč map ukazuje svět, který nesedí. Nejdřív zkontroluj velikost každého písmena, potom se ujisti, že seed pochází ze světa, který hraješ - server může mít několik složek světů a načte ten, který určuje -world.

FAQ#

Můžu najít seed Valheimu příkazem v konzoli?

Ne na dedikovaném serveru, ke kterému se připojuješ jen jako hráč. Spolehlivým zdrojem je soubor s metadaty světa na serveru. Pokud máš svět lokálně, seznam světů ve hře ukáže seed, když svět vybereš.

Je seed v každém backupu stejný?

Ano. Seed se určí při vytvoření světa a nikdy se nemění, takže každá složka s backupem i každé číslo uložení nese stejný řetězec. Díky tomu je backup bezpečné místo, odkud ho přečíst, když aktuální soubory vypadají poškozeně.

Potřebuju ke čtení seedu soubory .db2 a chunky?

Ne. Seed je jen v .fwl2, souboru o několika stovkách bajtů, takže stáhnout potřebuješ jen ten. Všechny ostatní soubory jsou důležité jen při přesunu nebo obnově světa.

Potřebuje hráč na PlayStationu něco ze souborů serveru?

Ne. Hráči na konzolích potřebují jen text seedu, který mohou vložit do prohlížeče map v prohlížeči. Soubory světa jsou na konzoli k ničemu, takže pošli řetězec, ne soubor.

Načte se moje stará dvojice .fwl a .db na novém serveru?

Nemůžeme to slíbit pro každou verzi, takže to nezkoušej na své jediné kopii. Původní dvojici si ulož na bezpečné místo, kopii nahraj na zastavený server, spusť ho a zkontroluj log dřív, než cokoli smažeš.

Pomohlo vám to?