RE:NODE

Více světů Valheimu na jednom stroji nebo serveru

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


Proces serveru Valheim načte právě jeden svět, takže „několik světů na jednom stroji“ znamená jedno ze dvou. Buď držíš víc světů ve stejné složce savů a přepínáš mezi nimi změnou -world a restartem - levné, jednoduché, živý je vždy jeden svět - nebo spouštíš víc procesů serveru vedle sebe, každý s vlastním -world, vlastním -port aspoň o dva dál a nejlépe vlastním -savedir, takže nesdílejí nic kromě stroje. První varianta vyhovuje skupině, která střídá hlavní svět a kreativní či testovací svět. Druhá vyhovuje skupině, která opravdu hraje dva světy najednou, a stojí zhruba dvojnásobek paměti. Všechno ostatní - soubory seznamů, zálohy, kódy pro crossplay, mody - z výběru plyne.

Základy samotného serveru jsou v průvodci dedicated serverem Valheim; tenhle článek je jen o tom, jak mít víc než jeden svět.

Dva modely: přepínání nebo paralelní běh#

Přepínání světů na jednom serveruNěkolik serverů paralelně
Živé světy najednouJedenJeden na proces
Potřebné portyJedna dvojiceJedna dvojice na server
PaměťNa jeden světKaždý proces přidává svou
Soubory seznamůSdílené, pokud neměníš i -savedirOddělené, pokud má každý vlastní -savedir
Join kód (crossplay)Jeden, mění se při restartuJeden na server
NámahaZměnit jeden argument, restartovatDruhá instalace nebo druhá služba

Nenačtený svět je zmrazený. Nic neroste, nic nemizí, nestane se žádný nájezd a neběží v něm čas. Díky tomu je přepínání naprosto bezpečné pro světy, které lidé navštěvují příležitostně - stavební svět, sezónní svět, starý svět, který jsi archivoval - a špatné pro dva světy, které chtějí různí lidé hrát ten samý večer.

Sloupec s pamětí je ten, který lidé podceňují. Každý proces serveru Valheim drží vlastní kopii všeho, co potřebuje; dva procesy paměť nesdílejí. Zralý svět se středně velkou skupinou chce 3-4 GB, čerstvý testovací svět méně, takže dva servery vedle sebe chtějí součet. Obecné dimenzování je v článku kolik RAM potřebuje server Valheim.

Jak se světy ukládají a proč je přepínání snadné#

Všechny světy, které server umí načíst, leží ve složce worlds_local pod jeho adresářem savů. Na Linuxu je výchozí ~/.config/unity3d/IronGate/Valheim/, na Windows %USERPROFILE%\AppData\LocalLow\IronGate\Valheim\ a -savedir přesune celý strom jinam. Průvodce savedir a umístěním souborů má úplné rozložení.

Argument -world pojmenovává svět, který se má načíst, a ten název je název souboru. Několik světů může ležet ve stejné složce, aniž by se rušily:

code
worlds_local/  Midgard.db        Midgard.fwl         <- the main world  Workshop.db       Workshop.fwl        <- a creative world  Season1.db        Season1.fwl         <- an archived world

Tak to vypadá v buildech před Valheimem 1.0. Od verze 1.0, vydané v září 2026, se svět ukládá jako složka pojmenovaná po něm uvnitř worlds_local, ne jako dvojice .db a .fwl, a starší svět se převede při prvním načtení serverem 1.0. Princip je stejný - jeden název, jeden svět, mnoho světů vedle sebe - ale když světy kopíruješ, archivuješ nebo přesouváš, vezmi celou složku, ne jednotlivé soubory zevnitř. Než budeš následovat jakýkoli návod psaný pro to druhé rozložení, podívej se, co tvůj worlds_local skutečně obsahuje.

Pokud -world pojmenovává něco, co neexistuje, server vytvoří nový svět s tímto názvem a náhodným seedem. Tak vytvoříš druhý svět schválně, a také tak ti překlep potichu dá prázdný svět.

Přepínání světů na jednom serveru#

Nejjednodušší nastavení: jeden server, jedna dvojice portů, několik světů, jeden živý.

  1. Zastav server čistě, aby se aktuální svět uložil. Počkej na řádek o uložení v logu.
  2. Změň název světa - na vlastním stroji uprav -world ve startovacím skriptu; na hostingu s panelem pole světa v záložce Startup.
  3. Spusť server a zkontroluj v logu, že se svět načítá pod novým názvem, a negeneruje se.
start_server.sh (excerpt)
# Main world./valheim_server.x86_64 -nographics -batchmode -name "Longship Crew" \    -port 2456 -world "Midgard" -password "herring-barrel-42" -crossplay# Switch to the creative world: change only -world and restart#   -world "Workshop"

Modifikátory světa a klíče světa se ukládají u každého světa zvlášť, takže kreativní svět s -setkey nobuildcost si toto pravidlo drží, jen když ho předáš na řádku, který ho spouští. Modifikátory dej do startovacího řádku pro každý svět - když se přepneš zpět na hlavní svět a necháš nobuildcost na řádku, hlavní svět dostane stavění zdarma, dokud si toho nevšimneš. Levné řešení je malý textový soubor s úplným řádkem pro každý svět.

Co světy v tomto modelu sdílejí: adresář savů, a tedy adminlist.txt, bannedlist.txt a permittedlist.txt. Ban platí pro každý svět. To je obvykle to, co chceš pro jednu skupinu; je to špatně, pokud je druhý svět pro jiné lidi.

Druhá sdílená věc jsou mody. Jedna instalace serveru znamená jednu složku BepInEx, takže každý svět běží se stejnou sadou modů. Mod, který přidává obsah, ukládá svá data do světa, a svět otevřený bez modu může o ten obsah přijít; nepřepínej svět s mody na řádek bez modů, ani naopak, bez zálohy.

Několik serverů vedle sebe#

Aby byly dva světy živé najednou, potřebuješ dva procesy serveru. Na vlastním Linuxovém stroji to znamená buď dvě instalace, nebo jednu instalaci spuštěnou dvakrát s různými argumenty. Každý potřebuje samostatnou dvojici portů a pro čisté oddělení i vlastní adresář savů.

Two servers from one install
# Server one - the main world./valheim_server.x86_64 -nographics -batchmode -name "Longship Crew" \    -port 2456 -world "Midgard" -password "herring-barrel-42" \    -savedir /home/valheim/saves/main -crossplay# Server two - a separate world for a second group./valheim_server.x86_64 -nographics -batchmode -name "Raven Fjord" \    -port 2466 -world "Fjord" -password "salt-cod-and-tar" \    -savedir /home/valheim/saves/fjord -crossplay

Pravidla, díky kterým to funguje:

  • Porty aspoň o dva od sebe. Každý server používá svůj herní port a ten nad ním. 2456 a 2457 jako dva herní porty se srazí, protože herní port druhého serveru je dotazovací port prvního. Rozestup po deseti (2456, 2466, 2476) je zvyk, díky kterému zůstávají pravidla firewallu čitelná. Porty Valheimu 2456-2458 vysvětleně mají podrobnosti.
  • Každý vlastní adresář savů. Se samostatnými cestami -savedir jsou světy, zálohy i soubory seznamů plně oddělené. Dva servery sdílející jeden adresář savů mohou fungovat, pokud se názvy světů liší, ale sdílejí seznamy adminů a banů a jejich automatické zálohy leží ve stejné složce.
  • Různé názvy v prohlížeči. Dva veřejné servery se stejným -name jsou v lepším případě matoucí. Udělej je jasně odlišné.
  • Nikdy dvakrát stejný svět. Dva procesy načítající stejný název světa ze stejné složky budou oba ukládat do něj a vyhraje ten, kdo uloží poslední. To je spolehlivý způsob, jak svět poškodit nebo ztratit.

Argument -instanceid existuje pro rozlišení instancí na jednom stroji. Většina nastavení ho nepotřebuje: různé názvy světů, různé porty a vlastní složky savů už dva servery oddělí. Přehled spouštěcích argumentů ho má v úplném seznamu.

Spouštět oba jako služby je čistší než dvě okna terminálu. Unit systemd pro každý server, každý s vlastním řádkem ExecStart, dává každému vlastní logy, restarty a stop signál. Důležité na každém unitu je, že server zastavuje signálem SIGINT, díky kterému se Valheim před ukončením uloží.

/etc/systemd/system/valheim-fjord.service (excerpt)
[Service]User=valheimWorkingDirectory=/home/valheim/serverExecStart=/home/valheim/server/start_fjord.shKillSignal=SIGINTTimeoutStopSec=120Restart=on-failure

Firewall: otevři každou dvojici UDP. S ufw to je ufw allow 2456:2457/udp a ufw allow 2466:2467/udp.

Crossplay s více než jedním serverem#

Crossplay funguje pro každý server zvlášť. Každý proces spuštěný s -crossplay zaregistruje vlastní relaci a dostane vlastní šestimístný join kód, vypsaný v jeho vlastním logu při startu:

code
Session "Raven Fjord" with join code 715204 and IP 203.0.113.10:2466 is active with 0 player(s)

Tři věci, které je dobré vědět, když je serverů víc:

  • Každý kód patří jednomu serveru. Hráči na Xboxu a ve verzi z Microsoft Store se připojují kódem, takže skupina hrající na druhém serveru potřebuje kód toho serveru, ne prvního. Označ je jasně všude, kde je zveřejňuješ.
  • Kódy se mění při každém restartu. Dva servery restartující se v různou dobu znamenají dva kódy měnící se v různou dobu. Naplánuj oba restarty na stejnou hodinu a oznámení se vejde do jedné zprávy.
  • Hráči ze Steamu se mohou dál připojovat přes IP. Na crossplay serveru 203.0.113.10:2466 pro hráče ze Steamu pořád funguje a je to nejspolehlivější způsob, jak vybrat správný server.

Crossplay také mění ID v souborech seznamů na ID s prefixem platformy, například Steam_76561198012345678 a Xbox_.... Pokud jeden server běží s crossplayem a druhý ne, jejich seznamy adminů potřebují různé formáty - další důvod, proč dát každému vlastní adresář savů. Crossplay a hráči na Xboxu popisuje formáty ID a relay.

Postavy se přesouvají mezi světy, a s nimi i jejich předměty#

Důsledek více světů, který skupiny objeví pozdě: postavy se ukládají na počítači každého hráče, ne na serveru, a fungují v každém světě. Cokoli postava nese v jednom světě, dorazí s ní do jiného.

Pro hlavní svět a archivovaný svět je to neškodné. Neškodné to není, když je jedním ze světů kreativní svět s nobuildcost, nebo svět, kde admin používá devcommandy, nebo svět s štědrými modifikátory zdrojů. Hráč si může naplnit inventář v lehkém světě a odnést ho do těžkého. Vanilla to zabránit neumí.

Běžné odpovědi:

  • Samostatné postavy pro každý svět. Skupina se dohodne, že v kreativním světě použije jinou postavu. Spoléhá se na důvěru, ale mezi přáteli to funguje.
  • Považovat inventáře za špinavé. Kdo navštíví kreativní svět, vyprázdní před odchodem inventář do truhly. Slabší, protože truhla je v kreativním světě a nic to nevynucuje.
  • Smířit se s tím. Pro nenáročnou skupinu je lehký svět jen dovolená a přenesené předměty nestojí za hlídání.

Co se mezi světy nesdílí, je mapa: průzkum se ukládá pro každou postavu a každý svět zvlášť, takže každý svět má pro každého hráče vlastní mapu.

Zálohy, aktualizace a mody s více světy#

Zálohy. Automatické zálohy Valheimu pokrývají jen načtený svět. Svět, který je vypnutý, se nezálohuje, a ani se v něm nic nezměnilo, takže to je v pořádku - ale před přepnutím světa po dlouhé pauze, zvlášť přes aktualizaci hry, udělej kopii. U paralelních serverů zálohuje každý proces svůj svět do svého adresáře savů. Zálohy mimo stroj by měly zahrnovat každý svět, na kterém ti záleží, ne jen živý; zálohy serveru Valheim a poškození světa mají postup obnovy.

Aktualizace. Všechny servery z jedné instalace se aktualizují společně a každý svět pak musí načíst nová verze. Světy, které se od staré záplaty nenačetly, se upgradují při prvním načtení. Velké aktualizace občas změnily způsob ukládání světů - změna ve verzi 1.0 na složku pro každý svět je zřejmý případ - takže archivované světy si před prvním načtením v nové verzi zaslouží kopii. Aktualizace serveru a neshoda verzí pokrývá načasování záplat.

Mody. Paralelní servery mohou běžet s různými sadami modů, jen když jsou to samostatné instalace, každá s vlastní složkou BepInEx. Jedna instalace spuštěná dvakrát spouští pro oba stejné pluginy. Pokud je jeden svět s mody a druhý vanilla, dej každému vlastní instalační adresář.

Na hostingu s panelem#

V panelu jako Pterodactyl je server jeden kontejner s jedním procesem, takže oba modely vypadají takto:

  • Přepínání je záložka Startup: změň název světa, restartuj. Každý svět ve worlds_local zůstává na disku serveru, viditelný ve správci souborů, a můžeš je tam nahrávat či stahovat.
  • Paralelní běh znamená druhý server: vlastní kontejner, vlastní limit paměti, vlastní alokace portů, vlastní konzoli a vlastní zálohy.

Na RE:NODE se to mapuje přímo. Každý plán Valheim přichází se dvěma přidělenými porty, což je dvojice herního a dotazovacího portu pro jeden server, a název světa je pole v záložce Startup, takže přepnutí je úprava a restart. Dva živé světy najednou znamenají dva servery, každý dimenzovaný pro svůj svět - malý testovací svět se vejde do plánu s 2 GB, zatímco hlavní svět sedí na větším. Před přepnutím světa udělej zálohu z panelu; zálohy jsou uložené mimo stroj a obnovují se tlačítkem, ale obnova vrátí celou složku serveru, včetně každého světa v ní.

Řešení potíží#

Server spustil čerstvý svět místo toho, na který jsem se přepnul. Název na řádku neodpovídá světu ve worlds_local, včetně velikosti písmen. Čerstvý svět leží vedle starého; nic se nepřepsalo. Oprav název a restartuj.

Druhý server se nespustí, nebo se neukáže ani jeden v seznamu. Srážka portů. Zkontroluj, že herní porty jsou aspoň o dva od sebe a že na nich nic jiného neposlouchá.

Ban na jednom serveru platil i na druhém. Sdílejí adresář savů, a tedy bannedlist.txt. Dej každému vlastní -savedir.

Stavění zdarma z kreativního světa uniklo do hlavního světa. -setkey nobuildcost zůstal na startovacím řádku při přepnutí. Odstraň ho, restartuj a drž pro každý svět samostatný řádek.

Hráči na Xboxu druhý server nenajdou. Používají join kód prvního serveru nebo starý z doby před posledním restartem. Aktuální kód přečti z logu druhého serveru.

FAQ#

Může jeden proces serveru Valheim spustit dva světy najednou?

Ne. Proces načte jeden svět. Dva živé světy potřebují dva procesy, každý s vlastní dvojicí portů, a na hostingu s panelem to znamená dva servery.

Mění se světy, které zrovna nehraju?

Ne. Nenačtený svět je zmrazený - neběží čas, plodiny nerostou, nedějí se nájezdy. Při dalším načtení pokračuje přesně tam, kde skončil.

Mohou dva servery sdílet stejný soubor světa?

Nesmí. Oba by do něj ukládaly a přepisovaly si navzájem změny. Pokud chceš duplikát, který se bude hrát zvlášť, zkopíruj svět pod novým názvem.

Potřebují hráči pro různé světy různé postavy?

Technicky ne - jakákoli postava funguje v jakémkoli světě - ale předměty se přenášejí, takže skupiny, které provozují kreativní nebo lehký svět, se často dohodnou na samostatných postavách.

Je druhý server levnější než větší?

Z hlediska paměti obvykle ne, protože každý proces potřebuje vlastní. Druhý malý server dává smysl, když je druhý svět malý nebo příležitostný; u dvou rušných světů počítej s rozpočtem na oba.