RE:NODE

Valheim: kde jsou světy, savedir a soubory serveru

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


Dedikovaný server Valheimu drží vše důležité v jedné složce: světy v podsložce worlds_local a vedle ní soubory adminlist.txt, bannedlist.txt a permittedlist.txt. Ve Windows je to %USERPROFILE%\AppData\LocalLow\IronGate\Valheim, na Linuxu ~/.config/unity3d/IronGate/Valheim a spouštěcí argument -savedir ji nahradí libovolnou cestou, kterou zvolíš. Postavy v ní nikdy nejsou - žijí na počítači každého hráče. Skoro každý problém typu „zmizel mi svět“ nebo „admin nefunguje“ vzniká tak, že někdo upravuje správný soubor ve špatné složce. Tento článek proto mapuje všechna umístění na klientovi i na serveru a ukazuje, jak zjistit, kterou složku tvůj server opravdu používá.

Stručná mapa#

Složka s uloženými daty má na všech platformách stejné rozložení. Mění se jen kořen.

CoKde, vzhledem ke složce s uloženými datyKdo to má
Světy (lokální)worlds_local/Name.db a Name.fwlServer a hráči, kteří hostují
Světy (staré rozložení)worlds/Starší instalace, z doby před cloudovými uloženími
Postavycharacters_local/Name.fchPC každého hráče
Seznam adminůadminlist.txtServer
Seznam banůbannedlist.txtServer
Seznam povolenýchpermittedlist.txtServer

A samotné kořeny:

PlatformaVýchozí složka s uloženými daty
Windows, hra nebo server%USERPROFILE%\AppData\LocalLow\IronGate\Valheim
Linux, hra nebo server~/.config/unity3d/IronGate/Valheim
Jakýkoli server spuštěný s -savedirPřesně zadaná cesta

Složka LocalLow je v Průzkumníku Windows ve výchozím stavu skrytá. Místo proklikávání vlož %USERPROFILE%\AppData\LocalLow\IronGate\Valheim do adresního řádku. Na Linuxu je .config skrytý adresář, takže použij ls -a nebo správce souborů se zobrazením skrytých souborů.

Znak ~ na Linuxu je domovský adresář uživatele, pod kterým server běží, ne tvůj. Pokud jsi podle návodu vytvořil uživatele valheim nebo steam, je složka s uloženými daty /home/valheim/.config/unity3d/IronGate/Valheim a příkaz ls ~/.config spuštěný jako root ti ukáže prázdnou složku uživatele root. To je nejčastější důvod, proč lidé „nemůžou najít“ svět linuxového serveru.

Světy: dvojice .db a .fwl#

Svět tvoří dva soubory se stejným názvem. Name.fwl je drobný - obsahuje název světa, seed a trochu metadat. Name.db je všechno ostatní: změny terénu, stavby, bedny i s obsahem, ochočená zvířata, prozkoumaný stav světa. Potřebné jsou oba; .db bez svého .fwl se nenačte a .fwl bez .db vytvoří nový svět na stejném seedu.

Vedle nich si server drží vlastní záložní kopie:

  • Name.db.old a Name.fwl.old - předchozí uložení, které se přepíše při každém uložení světa.
  • Automatické zálohy s názvy podobnými Name_backup_auto-20261012093000.db a odpovídajícím .fwl, řízené argumenty -backups, -backupshort a -backuplong.

Všechny leží ve stejné složce worlds_local na stejném disku, takže chrání jen před špatným uložením a před ničím jiným. Článek Zálohy Valheim serveru a poškození světa popisuje, co skutečná záloha potřebuje a jak z těchto souborů obnovit svět, když se uložení pokazí.

Název světa, který předáš přes -world, je název souboru bez přípony, porovnávaný přesně, včetně velkých písmen. -world "Midgard" hledá worlds_local/Midgard.db a worlds_local/Midgard.fwl. Pokud některý chybí, server vygeneruje pod tímto názvem nový svět s náhodným seedem, což všem připadá, jako by se svět smazal. Nesmazal - staré soubory leží tam, kde byly, jen je server hledal jinde.

worlds_local versus worlds

Přípona _local přišla s aktualizací cloudových uložení Valheimu na konci roku 2022. Předtím světy ležely ve složce worlds. Po ní hra oddělila lokální uložení (worlds_local, characters_local) od uložení ve službě Steam Cloud a obrazovka Manage Saves ve hře přesouvá svět mezi nimi.

V praxi to znamená:

  • Dedikovaný server čte worlds_local. O existenci Steam Cloudu neví.
  • Svět, který hráč uložil do cloudu, není v worlds_local na jeho PC. Musí otevřít Manage Saves a přesunout ho do lokálních, teprve pak je co nahrát.
  • Stará instalace může mít stále složku worlds se soubory z doby před rokem 2022. Jsou to plnohodnotné světy; pokud je mezi nimi ten, který chceš, zkopíruj dvojici souborů do worlds_local.

Samotné kopie ve Steam Cloudu leží uvnitř datové složky Steamu, v Steam\userdata\<číslo tvého účtu Steam>\892970\remote. Soubory odtud zkopírovat můžeš, ale bezpečnější cesta je Manage Saves, protože řeší i to, která kopie je novější.

Postup krok za krokem, jak dostat svět z PC hráče na server, je v článku jak nahrát uložený svět Valheimu na dedikovaný server.

Tři soubory se seznamy#

Soubory adminlist.txt, bannedlist.txt a permittedlist.txt leží v kořeni složky s uloženými daty - ne v worlds_local a ne v instalační složce serveru. Server je při prvním startu vytvoří prázdné, pokud chybí, což se hodí: když si nejsi jistý, kterou složku server používá, hledej tyto tři soubory s čerstvým časovým razítkem.

Typical server save folder
Valheim/  adminlist.txt  bannedlist.txt  permittedlist.txt  worlds_local/    Midgard.db    Midgard.fwl    Midgard.db.old    Midgard.fwl.old    Midgard_backup_auto-20261012093000.db    Midgard_backup_auto-20261012093000.fwl

Nejčastější adminský problém má příčinu v umístění: admin přidal své ID do adminlist.txt v instalační složce, ve složce s uloženými daty jiného uživatele nebo ve složce na vlastním PC. Server čte jen ten soubor, který leží v jeho vlastní složce s uloženými daty. Pro každý server existuje právě jeden správný soubor.

Druhá past: i PC hráče má tyto tři soubory, protože hra je používá, když hráč hostuje svět přímo ze hry. Úprava tvého lokálního adminlist.txt nic neudělá pro dedikovaný server kdesi jinde.

Formát - SteamID64 versus ID s předponou platformy na crossplay serverech, komentáře, kdy se změny projeví a jak permittedlist.txt změní server na soukromý - má vlastní článek: Valheim adminlist, bannedlist a permittedlist.

Přesun všeho pomocí -savedir#

-savedir přijímá cestu a udělá z ní složku s uloženými daty. Rozložení uvnitř zůstává stejné: server pod ní zapisuje worlds_local a soubory se seznamy hledá přímo v ní.

bash
$ ./valheim_server.x86_64 -nographics -batchmode \    -name "Longship Crew" -port 2456 -world "Midgard" \    -password "herring-barrel-42" -savedir "/srv/valheim/data"

S tímto příkazem je svět v /srv/valheim/data/worlds_local/Midgard.db a seznam adminů v /srv/valheim/data/adminlist.txt.

Důvody, proč ho nastavit, jsou tři:

  1. Zálohy. Jedna známá cesta mimo skrytý adresář v domovské složce se zálohovacímu nástroji ukazuje mnohem snáz.
  2. Více serverů na jednom stroji. Dva servery se společnou složkou sdílejí seznamy adminů, banů i povolených. S vlastním -savedir jsou zcela oddělené. Potřebují také různé porty - viz porty 2456 a 2457 ve Valheimu vysvětleně.
  3. Kontejnery. V Dockeru nebo pod panelem by složka s uloženými daty měla ležet uvnitř připojeného svazku, jinak ji s sebou vezme přestavění kontejneru.

A tři způsoby, jak to může dopadnout špatně:

  • Změna u rozehraného světa. Přidání -savedir k serveru, který dosud běžel bez něj, nic nepřesune. Server naběhne s prázdnou složkou, vygeneruje nový svět se stejným názvem a ten skutečný zůstane ve staré výchozí složce. Zastav server, zkopíruj celou složku a teprve potom přidej argument.
  • Relativní cesty. Relativní cesta se vyhodnocuje od pracovního adresáře, ve kterém byl server spuštěn, což nemusí být instalační složka. Používej absolutní cestu.
  • Oprávnění. Na Linuxu musí být adresář zapisovatelný pro uživatele, pod kterým server běží. Adresář vlastněný rootem dá server, který naběhne, hraje se na něm, a pak mu selže každé uložení.

Ve Windows dej cestu do uvozovek, pokud obsahuje mezery: -savedir "D:\Valheim Server Data".

Instalační složka serveru není složka s uloženými daty#

Lidé hledají svět vedle valheim_server.x86_64 nebo valheim_server.exe, protože tam server sídlí. Nikdy tam není, pokud tam -savedir neukazuje. Instalační složka obsahuje program a dá se bezpečně smazat a nainstalovat znovu; složka s uloženými daty obsahuje svět a smazat se nesmí.

Co najdeš v linuxové instalaci, typicky pod ~/.steam/steamapps/common/Valheim dedicated server nebo tam, kam ji dal +force_install_dir:

Soubor nebo složkaCo to je
valheim_server.x86_64Binárka serveru
start_server.shUkázkový startovací skript od Iron Gate, nastavuje SteamAppId=892970 a cestu ke knihovnám
valheim_server_Data/Herní data, která server načítá
linux64/steamclient.soKnihovna Steamu, kterou server potřebuje ke komunikaci se Steamem
BepInEx/Jen pokud jsi nainstaloval BepInEx
start_server_bepinex.shJen s BepInEx: startovací skript pro modovaný server

Ve Windows jsou ekvivalenty valheim_server.exe a start_headless_server.bat, ve složce steamapps\common\Valheim dedicated server v tvé knihovně Steamu, pokud jsi server nainstaloval z části Tools, nebo ve složce, kterou jsi zadal SteamCMD.

Protože je instalační složka jednorázová, běh s validate ani přeinstalace nemůže uškodit světu ve výchozí složce s uloženými daty. Uškodit může světu, pokud jsi -savedir nastavil na cestu uvnitř instalační složky - což je další důvod držet je od sebe. Samotná instalace je popsaná v článcích instalace Valheim serveru přes SteamCMD na Linuxu a instalace dedikovaného serveru ve Windows.

Soubory modů

S BepInEx server získá druhou sadu umístění, všechna uvnitř instalační složky:

  • BepInEx/plugins - soubory .dll s mody.
  • BepInEx/config - soubor .cfg každého modu, vytvořený při prvním startu. Tento soubor upravuješ, když chceš změnit nastavení modu, a je to ta část modovaného prostředí, kterou stojí za to zálohovat spolu se světem.
  • BepInEx/LogOutput.log - vlastní log BepInEx, který zaznamenává, které pluginy se načetly a které selhaly. Když mod nic nedělá, podívej se nejdřív sem.

Některé mody ukládají data i pro každý svět zvlášť. Kam je ukládají, je na modu; většina používá složku BepInEx/config nebo vlastní složku vedle ní. Než předpokládáš, že soubor světa obsahuje všechno, přečti si stránku modu. Instalaci popisuje článek mody Valheimu s BepInEx na serveru.

Postavy zůstávají u klienta#

Postava ve Valheimu je soubor .fch ve složce characters_local na počítači hráče a vedle něj leží .fch.old z předchozího uložení. Server ho nikdy neukládá. Když se hráč připojí, jeho klient si postavu přináší s sebou; když odejde, klient ji zapíše zpět na vlastní disk.

To má následky, které lidé nečekají:

  • Server postavu obnovit nedokáže. Pokud hráč přijde o inventář kvůli pádu u sebe, žádná záloha serveru ho nevrátí. Potřebuje vlastní .fch.old nebo vlastní zálohu.
  • Hráč může nosit postavu mezi světy a servery. Vybavení z jednoho světa dorazí do dalšího. Na serveru, který chce čistý start, se to vynucuje dohodou nebo modem, ne souborem.
  • Reset světa neresetuje hráče. Nový název v -world dá čistou mapu a všichni si ponechají dovednosti i inventář. Reset světa ve Valheimu bez ztráty postav využívá přesně tohle.
  • Cloudové postavy se řídí stejným pravidlem jako cloudové světy: characters místo characters_local, spravované z obrazovky výběru postavy.

Svět si o hráči pamatuje jeho prozkoumání mapy v tomto světě, jeho místo respawnu (postel) a všechno, co postavil nebo nechal v bedně. To žije v .db. Soubor postavy drží zbytek, včetně její vlastní kopie prozkoumané mapy, a proto mapa hráče přežije přesun serveru, zatímco záznam světa o jeho posteli ne.

Logy a soubory s nastavením#

Při řešení potíží se objeví ještě dvě umístění.

Log klienta. Unity zapisuje log hry do Player.log v kořeni složky s uloženými daty ve Windows (%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\Player.log), předchozí relace je v Player-prev.log. Když se hráč nemůže připojit, má tento soubor důvod podrobněji než vyskakovací okno.

Log serveru. Na Linuxu server vypisuje na standardní výstup, takže log jde tam, kam míří výstup procesu: do terminálu, do žurnálu systemd (journalctl -u valheim) nebo do konzole panelu. Ve Windows otevře start_headless_server.bat okno konzole. V obou případech -logFile /path/to/valheim.log zapíše log místo toho do souboru, což stojí za to udělat, pokud ho má později něco číst.

Log je také nejrychlejší odpověď na otázku „kterou složku tento server používá“. Vyhledej v něm řádek o načtení světa:

bash
$ grep -iE "load world|savedir|world saved" /path/to/valheim.log

Load world: Midgard následované běžným načtením světa znamená, že se soubory našly. Zpráva o generování nového světa znamená, že ne, a server teď pracuje ve složce, kterou jsi nečekal.

Nastavení grafiky a klávesové zkratky na klientovi nejsou ve složce s uloženými daty. Ve Windows je hra drží tam, kde hry na Unity ukládají předvolby, tedy v registru pod HKEY_CURRENT_USER\Software\IronGate\Valheim. Hráč, který „resetoval Valheim“ smazáním složky s uloženými daty, přišel o světy a postavy, ale nastavení mu zůstalo, což je obvykle opak toho, co chtěl.

Hledání složky na hostovaném serveru#

Na hostingu s panelem nevidíš souborový systém stroje, jen složku svého serveru, a otázka zní, která podsložka je složkou s uloženými daty. Odpovědi jsou jen dvě:

  1. Startovací řádek nastavuje `-savedir`. Pak je složkou s uloženými daty tato cesta, vzhledem ke kořeni serveru. Podívej se na startovací příkaz nebo na proměnné zobrazené u něj.
  2. Nenastavuje. Pak server používá linuxový výchozí stav, což uvnitř kontejneru znamená skrytou složku .config/unity3d/IronGate/Valheim v kořenovém adresáři serveru. Zapni zobrazení skrytých souborů, pokud to správce souborů umožňuje, nebo se připoj přes SFTP, které složky s tečkou ukazuje.

Test s čerstvým adminlist.txt funguje tak či onak: správná je složka se třemi soubory se seznamy a vedle nich worlds_local. Na RE:NODE se správce souborů i SFTP dostanou do celé složky serveru a záložka Startup ukazuje proměnné, se kterými server startuje, takže název světa si ověříš dřív, než cokoli nahraješ. Podrobnosti o připojení jsou v článku SFTP a správce souborů.

FAQ#

Kde je můj svět Valheimu uložen ve Windows?

V %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local, jako dvojice .db a .fwl. Pokud tam není, je ve Steam Cloudu; otevři ve hře Manage Saves a přesuň ho do lokálních, abys získal soubor, který jde zkopírovat.

Kde si linuxový server Valheimu drží svět?

V ~/.config/unity3d/IronGate/Valheim/worlds_local uživatele, pod kterým server běží, pokud -savedir neříká jinak. Než začneš hledat v domovské složce roota, ověř si, o kterého uživatele jde.

Mění -savedir místo, kam se ukládají postavy?

Ne. Ovlivňuje jen stroj, na kterém server běží. Postavy ukládá klient každého hráče do characters_local na jeho vlastním počítači a server je nikdy nezapisuje.

Proč se můj adminlist.txt ignoruje?

Skoro vždy proto, že je to jiná kopie. Server čte jen soubor v kořeni své vlastní složky s uloženými daty. Zbloudilé kopie smaž, jednou restartuj server a pokud si nejsi jistý, který je který, uprav soubor, který vytvoří.

Mohou dva servery sdílet jednu složku s uloženými daty?

Běžet mohou, ale sdílejí seznamy adminů, banů i povolených a dva servery načítající stejný název světa si navzájem přepisují uložení. Dej každému serveru vlastní -savedir.

Je bezpečné smazat instalační složku serveru?

Ano, pokud -savedir neukazuje dovnitř ní. Výchozí složka s uloženými daty je jinde, takže přeinstalace světy nechá být. Pokud používáš mody, zkopíruj nejdřív složku BepInEx/config.