RE:NODE

RimWorld Multiplayer: čekání na přijetí hostem a desyncy

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


Pokud tvůj kamarád v modu RimWorld Multiplayer visí na „Waiting for host to accept“, host ho zatím nepustil dál. Připojení přes Steam není automatické: host dostane vyskakovací okno se jménem kamaráda a tlačítkem Accept, případně seznam pod „Accept Steam players“ v okně chatu, a dokud na to nekliknete, nestane se nic. Pokud žádná žádost nepřijde, host nehostuje se zaškrtnutou volbou Steam. Desyncy jsou jiný problém s jiným řešením: skoro vždy pocházejí z modů, nastavení modů nebo herních souborů, které se mezi počítači liší, z modu, který tým Multiplayeru neopatchoval, nebo z toho, že jeden počítač zaostal příliš. Tento návod provede všemi fázemi připojení, obrazovkou s neshodou, desync reportem, který mod zapisuje, a návyky, díky nimž zůstane dlouhá kolonie synchronizovaná.

Všechno tady se týká modu Multiplayer (původně od Zetritha, dnes ho udržuje tým rwmt): jedna sdílená kolonie, na každém počítači běží stejná simulace v lockstepu. Co ten mod je, v čem se liší od RimWorld Together a který z nich může běžet na serveru, najdeš v článku RimWorld multiplayer: mods, desyncs, hosting. Tento příspěvek navazuje tam, kde ten končí - když je mod nainstalovaný a něco se pokazilo.

Co se děje při připojení#

Připojení do hry s Multiplayerem není jediný krok. Klient projde posloupností fází a popisek na načítacím okně ti přesně řekne, na které se zasekl. Když znáš pořadí, změní se „nefunguje to“ na konkrétní závadu.

ConnectingWaiting for host to acceptJoiningDownloadingWaiting for game dataPřipojující se hráčMultiplayer buttonSteam P2Psession requestHostitelská hraAccept / RejectKontrola modůData mismatch screenHerní datasave and join-pointSimulacedohánění hosta
Připojení přes Steam krok za krokem
Popisek, který vidíšCo znamenáKam se podívat
Connecting to a game hosted by...Steam otevírá session k hostoviSteam online, stejný build RimWorldu
Waiting for host to acceptHost má čekající žádost o připojeníObrazovka hosta
JoiningPorovnávají se verze a seznamy modůObrazovka s neshodou, pokud se otevře
DownloadingPřenáší se save a konfiguraceFirewall, kvalita připojení
Waiting for game dataHost připravuje data k odesláníVýkon hosta, velké savy
SimulatingDohání host tickTvůj CPU, nastavení join-pointu

Přímá (Direct) a LAN spojení krok s přijetím úplně přeskakují. Jdou rovnou z připojování do joiningu a když selžou, bývá to obvykle hláškou „Connection failed“ nebo „Connection timed out“, ne čekáním.

„Waiting for host to accept“#

Tato zpráva se objevuje jen u spojení přes Steam a znamená, že připojující se hráč udělal všechno správně. Steam peer-to-peer síť potřebuje, aby přijímající strana přijala session od někoho, s kým dosud nekomunikovala, a mod Multiplayer toto rozhodnutí předává hostovi, místo aby ho udělal potichu.

V aktuálních verzích vidí host malé okno, které vyjede z pravého okraje, se Steam jménem a avatarem hráče, řádkem „wants to join your game“ a dvěma tlačítky: Accept a Reject. Stejné čekající žádosti jsou vypsané i v okně chatu (vpravo nahoře na obrazovce ve hře) pod nadpisem „Accept Steam players“ - klikni tam na jméno a hráče pustíš dovnitř. Po přijetí dostane host zprávu „Player has been accepted“ a připojující se hráč přejde na kontrolu modů.

Kontrolní seznam, když někdo čeká donekonečna:

  1. Host musí sledovat hru. Žádost se objeví v okně RimWorldu na straně hosta. Pokud je host přepnutý přes alt-tab do Discordu, žádost tam leží nezodpovězená.
  2. Host musí hostovat se zapnutým Steamem. Mod zařazuje žádosti ze Steamu do fronty jen tehdy, když byl lokální server spuštěn se zaškrtnutou volbou Steam v dialogu hostování. Hra hostovaná jen přes Direct nebo LAN žádosti ze Steamu úplně ignoruje, takže připojující se hráč čeká a na straně hosta se nikdy nic neobjeví. Zavři server a hostuj znovu se zaškrtnutým Steamem.
  3. Obě strany potřebují spuštěný a přihlášený Steam. Cesta přes Steam funguje jen se steamovými kopiemi RimWorldu. Kopie z GOG a Epicu musí používat Direct nebo LAN.
  4. Připojuj se přes Steam, ne vložením ID. Klikni pravým tlačítkem na hosta v seznamu přátel na Steamu a použij Join Game, nebo použij záložku Steam v menu Multiplayeru. Pozvánku ze Steamu nejde přijmout, když jsi uvnitř hry - mod ti řekne, ať nejdřív odejdeš do menu.
  5. Zamítnutá žádost je pro daný pokus konečná. Pokud host omylem klikl na Reject, nebo připojení vypršelo s „Connection timed out“, musí připojující se hráč začít nové spojení z menu.

Pokud hostuješ pro pevnou skupinu a nebaví tě pořád klikat, nastavení modu (Options, Mod Settings, Multiplayer) obsahuje volbu Auto-accept Steam, ve výchozím stavu vypnutou, která automaticky přijme každou příchozí žádost o spojení přes Steam. Nech ji vypnutou, pokud je tvoje hra vidět lidem, které dobře neznáš - heslo ke hře, které se nastavuje v dialogu hostování, je druhá polovina ochrany před cizími lidmi.

Zaseknuté na Connecting, Downloading nebo Simulating#

Přímá spojení (Direct) používají ve výchozím stavu UDP port 30502. Host zadá do pole Direct 0.0.0.0:30502 (nebo nechá výchozí hodnotu), aby hra poslouchala na všech rozhraních, přesměruje na routeru UDP 30502 na svůj počítač a dá kamarádům svoji veřejnou IP adresu. Kamarád pak do záložky Direct napíše 203.0.113.10 nebo 203.0.113.10:30502. Pokud to selže, obvyklými podezřelými jsou přesměrování nastavené na TCP místo UDP, přesměrování mířící na starou lokální IP adresu, Windows Firewall blokující RimWorld nebo internetové připojení za carrier-grade NAT, kde žádné přesměrování nikdy nezabere. NAT a CGNAT pro hostitele her vysvětluje, jak to poznat, a port forwarding vs hostované servery popisuje, co s tím dělat. Virtuální LAN jako Hamachi nebo Radmin VPN, kde oba hráči použijí volbu LAN, je řešení, které navrhuje i FAQ samotného modu.

MetodaCo potřebujeTypická chyba
SteamSteamové kopie, spuštěný SteamŽádost nikdy nebyla přijata
DirectUDP 30502 dostupný na hostoviChybějící přesměrování nebo špatný protokol
LANStejná síť nebo virtuální LANJiná podsíť, firewall

Zaseknutí na Downloading je podle FAQ modu téměř vždy firewall. Rychlý test je vypnout firewall na obou počítačích na jeden pokus; pokud se připojení dokončí, přidej RimWorld (a u připojení přes Steam i Steam) jako povolenou aplikaci a firewall zase zapni.

Zaseknutí na Simulating znamená, že save dorazil a připojující se počítač přehrává ticky, aby dohnal hosta. Jak dlouho to trvá, závisí na stáří join-pointu. Nastavení hosta Auto join-points vytváří join-point - čerstvý snímek, od kterého noví hráči začínají - ve výchozím stavu při připojení a při desyncu, volitelně i při každém autosavu. Host může také napsat do chatu /joinpoint a vytvořit ho okamžitě, což je nejrychlejší oprava, když kamarád simuluje už několik minut.

Neshody seznamu modů a verzí#

Když klient dosáhne fáze Joining, porovná se s hostem. Pokud se cokoli liší, otevře se obrazovka Data mismatch se záložkami General, Mod list, Files a Configs, která vedle sebe ukazuje „Server“ a „Your client“. Přečti si ji, nezavírej ji; problém pojmenuje.

  • Verze RimWorldu nebo verze Multiplayeru se liší. Obě se zobrazí. Jiný build Multiplayeru se může projevit i jako „Wrong protocol version“ nebo chyba paketu „You are probably using a different Multiplayer version than the host!“. Aktualizuj mod na obou stranách - na Steamu se odhlas z odběru a přihlas znovu, pokud se odmítá aktualizovat - a ujisti se, že všichni mají stejný build RimWorldu. Mod sleduje jen aktuální hlavní verzi (v době psaní 1.6) a těsně po patchi RimWorldu může být mezera, než vyjde odpovídající verze Multiplayeru.
  • „Mod lists differ. The game needs to be restarted.“ Použij Apply server's mod list, což přepíše tvůj aktivní seznam seznamem hosta, a pak Restart; hra tě po načtení znovu připojí. Pokud nějaké mody chybí, Subscribe to missing přihlásí k odběru všechno, co je na Workshopu, a stáhne to na pozadí. Cokoli, co na Workshopu není, je potřeba nainstalovat ručně.
  • „Mods match but their order doesn't.“ Stejná oprava: použij seznam modů ze serveru a restartuj. Pořadí načítání je součástí simulace.
  • Files ukazuje soubory modů označené jako Missing, Added nebo Modified. Ty je třeba opravit ručně a obvykle jde o pozůstatky po aktualizaci modu nebo o dva hráče s různými verzemi stejného modu. Přeinstaluj nebo znovu přihlas k odběru dotčený mod. Pokud jde o Core nebo DLC, smaž tu složku a ověř herní soubory ve Steamu - tvoje savy jsou jinde a nic se jim nestane. Rozdíl může být i na straně hosta.

Samotný Multiplayer má v seznamu své pevné místo: Harmony a Prepatcher (tvrdá závislost) nad ním, pak Core a DLC, pak Multiplayer hned pod nimi a Multiplayer Compatibility těsně za ním. Multiplayer i jeho kompatibilitní mod deklarují, že se načítají před HugsLib a Vanilla Expanded Framework, takže pokud jsou ty nad nimi, něco je ve špatném pořadí.

code
HarmonyCoreRoyalty / Ideology / Biotech / Anomaly / Odyssey (the ones you own)PrepatcherMultiplayerMultiplayer CompatibilityHugsLibVanilla Expanded Framework and everything else

Každé DLC zapnuté na hostovi musí být zapnuté u každého hráče. FAQ modu je v tom jednoznačné a hráč s navíc aktivním DLC je hráč s jiným seznamem modů.

Synchronizace konfigurace a záložka Configs#

Nastavení modů je součástí simulace stejně jako samotné mody. Mod, který hází na nájezd s nastavením 20 % na jednom počítači a 25 % na druhém, vytvoří během pár minut dvě různé kolonie.

Dialog hostování má volbu Sync configs, ve výchozím stavu zapnutou, která připojujícím se hráčům umožní stáhnout konfigurační soubory modů od hosta. Na obrazovce s neshodou se zobrazuje jako Apply server's configs a je dočasná: konfigurace hosta se používají, dokud nerestartuješ RimWorld, a žádné tvoje vlastní soubory se nepřepíšou. Dokud běžíš na cizích konfiguracích, tlačítko Active configs ti připomíná, z jaké hry pocházejí. Pokud host synchronizaci vypnul, záložka Configs hlásí „Config sync disabled by the host“ a všichni hráči musí nastavení sladit ručně.

Nech ji zapnutou, pokud nemáš důvod ji vypnout. Jediný skutečný důvod je v tooltipu samotného modu: některé konfigurační soubory obsahují citlivá data, například API tokeny používané mody pro integraci se streamováním, a synchronizace je pošle každému, kdo se připojí.

Proč vznikají desyncy#

Mod Multiplayer neposílá po síti stav hry. Posílá příkazy - odvelej tohoto pawna, změň tamten bill - označené ticky, ve kterých se mají provést, a každý počítač spouští celou simulaci. Desync je okamžik, kdy mod zjistí, že se dva počítače už neshodují. V pravidelných intervalech porovnává kontrolní součty stavu hry a když se liší, hra se zastaví a zobrazí „The game state has desynced.“

K rozchodu téměř vždy došlo dřív, než byl zjištěn. Boj, nájezdy a mentální zhroucení jsou místa, kde se to obvykle projeví, protože spotřebují nejvíc náhodných čísel, ne proto, že by to způsobovaly. Příčiny zhruba v pořadí, v jakém na ně narazíš:

  1. Neshodné mody, soubory nebo konfigurace. Popsáno výše. Pokud kontrola při připojení prošla, jsou tyto příčiny při připojení vyloučené, ale mod aktualizovaný později na jednom počítači je vrátí.
  2. Mody, které tým Multiplayeru neopatchoval. Mod, který používá vlastní náhodu, reálný čas nebo mění hru ze svého vlastního UI mimo synchronizovaný příkaz, způsobí desync, i když mají všichni identickou kopii. Mod Multiplayer Compatibility obsahuje patche pro dlouhý seznam oblíbených modů; ostatní mají hodnocení od komunity od 0 do 4, zobrazené ve hře (nastavení Show crowd-sourced compat info) a v komunitní tabulce. Cílem je 4; trojku ber jako přijatelnou, jen když poznámky říkají, že patch existuje.
  3. Počítač, který zaostává. Okno chatu ukazuje ping každého hráče a o kolik ticků zaostává. Hráč, jehož PC to nestíhá, uvidí „You are N ticks behind. Consider lowering the game speed.“ Provozovat velkou kolonii na superfast na počítači, který to neutáhne, je pokušení osudu.
  4. Nesprávně použitý dev mode. Vytváření předmětů pomocí ladicích nástrojů mimo vlastní nastavení Dev Mode v modu způsobí desync. Použij volbu Dev Mode v dialogu hostování (Host Only nebo Everyone), aby ladicí akce šly synchronizovanou cestou. FAQ modu zvlášť zmiňuje, že úprava ideologie v dev módu je zaručený desync.
  5. Obsah, který je podporován jen částečně. Některé systémy DLC a hra více frakcí se stále dopracovávají. FAQ uvádělo Anomaly jako částečně funkční a multifaction jako rozpracované; zkontroluj aktuální poznámky pro svou verzi.

Jak číst desync report#

Když se otevře okno desyncu, má pět tlačítek: Try resync, Save, Chat, Open info folder a Quit. Try resync tě znovu připojí do hry ze stavu hosta a když šlo o jednorázovou příčinu, rychle všechny vrátí do hry. Open info folder je na několik sekund šedé s textem „Waiting for data from the host“, než se report zapíše - dej tomu chvíli, než ukončíš hru.

Report je zip pojmenovaný Desync-01.zip, Desync-02.zip a tak dále ve složce MpDesyncs uvnitř datové složky RimWorldu, vedle Saves a Config. Mod drží deset nejnovějších a starší maže, takže si report zkopíruj někam do bezpečí, pokud ho chceš zachovat.

PlatformaDatová složka RimWorldu
Windows%USERPROFILE%\AppData\LocalLow\Ludeon Studios\RimWorld by Ludeon Studios
Linux~/.config/unity3d/Ludeon Studios/RimWorld by Ludeon Studios
macOS~/Library/Application Support/RimWorld

Uvnitř zipu, v aktuálních buildech:

code
desync_info                summary: tick data, versions, debug options, hardwarelocal_traces.txt           stack traces from your machine around the divergencehost_traces.txt            the same from the host, if it arrived in timelocal_jitted_methods.txt   methods compiled on your sidehost_jitted_methods.txt    the same from the hostlocal_logs.txt             your log, when availablelocal_metadata.txt         mod list and environmentreplay.rwmts               a replay, only when that setting is on

desync_info je část, kterou člověk přečte. Zaznamenává, zda byl připojený arbiter, poslední tick, na kterém se ještě všichni shodovali, verze Multiplayeru a RimWorldu, zda byl zapnutý dev mode nebo debug build, počet hráčů, zda byl aktivní async time a multifaction, a CPU, GPU, paměť a operační systém. Než ho někomu pošleš, porovnej řádky s verzemi a ladicí volby s reporty ostatních hráčů - neshoda tam je odpověď a nikdo nemusí číst stack trace.

Soubory s trasami jsou zajímavou částí pro toho, kdo chybu opravuje. Ukazují, který kód na každé straně generoval náhodná čísla kolem ticku, kde se oba počítače rozešly, takže první odlišná trasa obvykle pojmenuje zodpovědný mod. Pokud v prvních odlišných řádcích vidíš jmenný prostor nějakého modu, před nahlášením hledej na Discordu Multiplayeru nebo na stránce toho modu známý problém. Trasy se zaznamenávají jen tehdy, když má host zapnuté Desync traces (ve výchozím stavu zapnuto) a mod uvádí, že trasování nefunguje na 32bitových ani ARM procesorech, což zahrnuje i Macy s Apple Silicon.

Arbiter a jak napsat užitečný report#

Volba Run Arbiter v dialogu hostování spustí na počítači hosta druhou, na pozadí běžící instanci RimWorldu, která hraje s ostatními jako další neutrální klient. Když dojde k desyncu, funguje jako rozhodčí: se třemi počítači místo dvou je jasné, čí stav je špatně. Hostovi to stojí skutečnou paměť a CPU, protože jde o další kopii hry, takže ho zapni, když lovíš opakující se desync, ne pro každou session.

Report, se kterým mohou správci něco udělat, má čtyři věci: zipy z obou stran (od hosta i od hráče, který se rozsynchronizoval), seznam modů, co se v tu chvíli ve hře dělo a zda jde chyba zopakovat. Diskuse modu na Workshopu žádá, aby lidé před nahlášením testovali s arbiterem i bez něj, aby se vyloučil poškozený save. Pokud k desyncu dojde pokaždé ve stejném okamžiku při načtení konkrétního savu, napiš to - je to nejcennější věc, kterou může hlášení chyby obsahovat.

Návyky, díky nimž je kolonie hratelná#

Většina skupin, které hrají dlouhé kampaně v Multiplayeru, dojde ke stejným pravidlům:

  1. Zmraz seznam modů před začátkem kolonie. Domluvte se na něm, publikujte kolekci na Steamu a nech všechny odebírat přesně ji. Přidat mod uprostřed kampaně jde; odebrat ho obvykle rozbije save.
  2. Nenech se překvapit aktualizacemi z Workshopu. Mod, který se přes noc aktualizuje jednomu hráči, je další večer neshoda. Nech hosta před session zkontrolovat aktualizace a všechny restartovat Steam, aby se shodovali. Co dělat, když aktualizace modu něco rozbije popisuje návrat k předchozí verzi.
  3. Zkontroluj kompatibilitu, než něco přidáš. Nejdřív si vyhledej hodnocení modu. Hodnocení 1 nebo 2 znamená, že způsobí desync; žádné sladění souborů to nespraví.
  4. Přizpůsob hru nejpomalejšímu počítači. Použij časové ovládání Lowest wins, aby tempo udával nejpomalejší hráč, nebo drž rychlost dole ve velkých bojích.
  5. Pauza při připojení a při desyncu. Obojí je ve výchozím stavu zapnuté. Nech to zapnuté, aby desync neběžel několik herních hodin, než si ho někdo všimne.
  6. Drž autosavy blízko sebe. Interval autosavu hosta lze nastavit v herních dnech nebo reálných minutách; každých 10-15 reálných minut znamená, že desync, který poškodí stav, tě stojí jen málo. Nastavení Autosave slots (výchozí 5) určuje, kolik se jich uchovává.
  7. Používej chatové příkazy. Host má /joinpoint, /kick <username> a /stop. Vyhodit hráče, jehož hra stále zaostává, a nechat ho znovu se připojit z čerstvého join-pointu je často rychlejší než plný resync.

Existuje dedikovaný server?#

Většinu své existence byla odpověď jednoznačné ne: kopie RimWorldu na hostovi byla server a kolonie se zastavila, když host skončil. To se mění. Vydání 0.11.5 přidalo práci na samostatném spuštění serveru a vývojové („continuous“) buildy projektu teď obsahují Server-beta.zip s buildy pro Windows a Linux. Poslouchá jen na Direct - síť Steamu ani arbiter nejsou podporované - čte settings.toml a save.zip z vlastní složky a pokud chybí, čeká, až se připojí první hráč a nastaví hru zevnitř RimWorldu. Poznámky k vydání ho popisují jako určený k testování, takže ho ber jako experimentální a počítej s tím, že se změní.

Pokud to chceš zkusit, potřebuješ počítač, který zůstává zapnutý, s otevřeným UDP 30502 pro tvé hráče. VDS je zřejmý domov - volba mezi VDS a herním panelem vysvětluje kompromis - a porty herních serverů vysvětleně popisuje, jak port zpřístupnit. Každý hráč stále potřebuje identický seznam modů; server na tomto požadavku nic nemění.

Pokud vaše skupina ve skutečnosti chce svět, který běží dál, zatímco lidé přicházejí a odcházejí, tohle je problém, který řeší RimWorld Together, a právě to herní hostingy prodávají jako RimWorld hosting. Řada RimWorld od RE:NODE provozuje takový perzistentní server, s mody nahranými přes správce souborů nebo SFTP a sloty záloh uloženými mimo stroj; mod Multiplayer nehostuje.

FAQ#

Proč můj kamarád vidí „Waiting for host to accept“, ale mně žádná žádost nepřijde?

Nehostuješ se zapnutým Steamem. Mod poslouchá žádosti o připojení přes Steam jen tehdy, když byla volba Steam zaškrtnutá v dialogu hostování. Zavři server, hostuj znovu se zapnutým Steamem a vyskakovací okno Accept se objeví.

Můžu krok s přijetím vypnout?

Ano. V nastavení modu Multiplayer zapni Auto-accept Steam. Každá žádost o spojení přes Steam je pak přijata bez kliknutí, takže nastav heslo ke hře, pokud je tvoje hra vidět lidem mimo vaši skupinu.

Přijdu při Try resync o postup?

Načte tě to ze současného stavu hosta, takže všechno, co se stalo jen na tvé rozsynchronizované kopii, je pryč, ale sdílená kolonie se nevrací zpět. Pokud resync stále selhává, host by měl uložit hru, všichni ukončit a session by se měla znovu hostovat z toho savu.

Máme všichni stejné mody a stejně se desyncujeme. Proč?

Shodné soubory vylučují jen jednu příčinu. Zkontroluj hodnocení kompatibility každého modu, zkontroluj, že se nastavení modů synchronizovala a nikdo žádné neměnil uprostřed session, a při příštím boji sleduj v chatu čísla o zaostávání v tickách. První odlišná trasa v desync reportu obvykle pojmenuje mod.

Mohou se hráči z GOG nebo Epicu připojit ke Steam hostovi?

Ne přes Steam. Musí se připojit přes Direct (UDP 30502 dostupný na hostovi) nebo LAN, včetně virtuální LAN jako Radmin VPN nebo Hamachi. Všichni stále potřebují stejný build RimWorldu a stejné mody.

Kde se ukládají desync reporty?

Ve složce MpDesyncs uvnitř datové složky RimWorldu, jako soubory Desync-NN.zip. Tlačítko Open info folder v okně desyncu ji otevře přímo.