RE:NODE

Návody11 min čtení

Don't Starve Together: módy, admini a rollbacky

Nainstaluj módy DST na dedikovaný cluster přes dedicated_server_mods_setup.lua a modoverrides.lua, nastav adminy, používej konzolové příkazy a bezpečně vrať svět zpět.

5 čtenářů

Módy na dedikovaném serveru Don't Starve Together vyžadují dva soubory: mods/dedicated_server_mods_setup.lua v instalaci serveru říká, které položky z workshopu se mají stáhnout, a modoverrides.lua v každé složce shardu rozhoduje, které z nich jsou zapnuté a s jakým nastavením. Admini jsou ID uživatelů Klei, jedno na řádek, v souboru adminlist.txt ve složce clusteru. Všechno ostatní - vyhazování, bany, ukládání, rollbacky, vytváření předmětů - je Lua zadaná do konzole shardu a několik z těch příkazů se na konzoli serveru chová jinak než ve hře. Tento článek probírá soubory s módy do hloubky, jak správně nastavit konfiguraci každého módu bez hádání, nastavení adminů, kompletní přehled příkazů a jak provést rollback, aby tvůj Forest a Caves neskončily každý v jiném dni.

K samotnému clusteru - tokenu, cluster.ini, server.ini, portům a shardům - začni v průvodci serverem Don't Starve Together. Tento článek předpokládá cluster, který se spustí.

Jak se módy dostanou na dedikovaný server#

Server DST nikdy nenačítá módy od hráčů. Stahuje si je sám ze Steam Workshopu při startu shardu. Postup je tento:

  1. Shard přečte dedicated_server_mods_setup.lua a stáhne nebo aktualizuje každou tam uvedenou položku z workshopu.
  2. Přečte svůj vlastní modoverrides.lua a zapne módy označené enabled = true s uvedenou konfigurací.
  3. Když se připojí hráč, server jeho klientovi sdělí, které módy jsou povinné, a klient si je z Workshopu stáhne automaticky.
ServerModSetup idsstažení při startuseznam povinných módůstejné verzemods_setup.luaco se má stáhnoutSteam Workshopsoubory módůKaždý shardmodoverrides.luaHra hráčeautomatické stažení
Jak se mód dostane z Workshopu k hráči DST

Důsledkem tohoto návrhu je, že cluster musí být online - offline_cluster = false - aby workshopové módy vůbec fungovaly, a každý shard si při startu stahuje, co potřebuje, takže dlouhý seznam módů znamená pomalejší start.

Kam se stažené soubory dostanou, závisí na formátu módu ve workshopu. Starší módy se rozbalí do složky mods v instalaci jako adresáře workshop-<id>. Novější se ukládají do složky ugc_mods, rozdělené podle clusteru a shardu, pokud není server spuštěn s -ugc_directory ukazujícím jinam. Málokdy se musíš dotýkat jednoho či druhého; hodí se to vědět, když kontroluješ, jestli se stažení opravdu provedlo.

dedicated_server_mods_setup.lua#

Tento soubor leží v instalačním adresáři serveru, ne ve složce clusteru - mods/dedicated_server_mods_setup.lua vedle binárních souborů hry. Je to seznam ke stažení a nic víc:

mods/dedicated_server_mods_setup.lua
-- Individual workshop items, by idServerModSetup("1234567890")ServerModSetup("2345678901")-- Or a whole workshop collectionServerModCollectionSetup("3456789012")

ID je číslo na konci URL módu ve Workshopu, za ?id=. ID kolekce funguje stejně a stáhne všechny položky v kolekci - pohodlné pro dlouhý seznam, ale znamená to, že kdokoli, kdo může kolekci upravit, může změnit, co si tvůj server stahuje. Používej kolekci, kterou vlastníš.

Na tři věci lidé narážejí nejčastěji:

  • Tento soubor je v instalaci, takže přeinstalace nebo validace ho může resetovat. Uchovej si kopii ve složce clusteru nebo v poznámkách a po aktualizacích ji obnov.
  • Uvedení módu zde ho nezapne. Jen ho stáhne. Mód, který je v tomto souboru a není v modoverrides.lua, se při každém startu stáhne a nikdy nepoužije.
  • Módy se aktualizují při každém startu. Jakmile autor vydá novou verzi, příští restart ji převezme. Neexistuje připínání verzí, a proto může aktualizace hry nebo módu rozbít cluster, který včera běžel bez problémů.

modoverrides.lua, pro každý shard zvlášť#

Každý shard má vlastní modoverrides.lua ve své složce v clusteru - Master/modoverrides.lua a Caves/modoverrides.lua. Je to tabulka v Lua, jejímž klíčem je workshop- plus ID:

Master/modoverrides.lua
return {  ["workshop-1234567890"] = {    enabled = true,    configuration_options = {      stack_size = 99,      show_in_inventory = true,    },  },  ["workshop-2345678901"] = { enabled = true },}

Pravidlo, které rozhoduje o tom, zda cluster funguje: každý mód, který ovlivňuje svět, musí být zapnutý se stejným nastavením v obou shardech. Když hráč sleze do propadliny, přesouvá se mezi procesy serveru. Pokud je mód zapnutý ve Forestu a vypnutý v Caves, předměty a tvorové z toho módu na druhé straně neexistují a následky sahají od zmizelých předmětů po padající shard. Udržuj jeden soubor a po každé změně ho zkopíruj do obou složek.

Konfigurační klíče nejsou zdokumentované nikde jinde než v samotném módu. Každý mód má modinfo.lua a jeho tabulka configuration_options uvádí u každé volby interní name, povolené hodnoty data a výchozí hodnotu default. Hodnoty v modoverrides.lua musí být přesně jedna z těchto hodnot data - číslo tam, kde mód čeká řetězec, nebo hodnota, která není v jeho seznamu, se tiše ignoruje a použije se výchozí.

Které módy patří na server#

Každý mód DST v modinfo.lua deklaruje, kde běží, a vyplatí se to přečíst, než cokoli přidáš:

Příznak v modinfo.luaVýznam pro server
client_only_mod = truePro servery vůbec ne. Každý hráč si ho instaluje sám
all_clients_require_mod = trueBěží na serveru i u všech klientů. Při připojení se stáhne automaticky
all_clients_require_mod = falseBěží jen na serveru. Hráči nepotřebují nic
dst_compatible = trueNapsaný pro DST, ne pro jednohráčové Don't Starve

Módy jen pro klienta - HUD minimapy, mřížky pro stavění, úpravy rozhraní - na serveru nedělají nic. Nepřidávej je na seznam serveru; místo toho hráčům řekni, které doporučuješ.

Módy jen pro server jsou pro skupinu nejlevnější: mění pravidla, kořist nebo spawny, aniž by si cokoli kdo stahoval. U módů, které vyžadují všechny klienty, sídlí velikost stahování, kolísání verzí a problémy s kompatibilitou. Cluster se čtyřiceti módy pro všechny klienty má čtyřicet věcí, které se mohou rozbít při další aktualizaci hry, a první připojení nového hráče je stáhne všechny.

Dobrou disciplínou je držet krátký seznam, každý přírůstek vyzkoušet na kopii světa a módy přidávat mezi herními sezeními, ne během nich. Širší zvyk popisuje Jak udržet modovaný server čistý a obecnou mechaniku workshopového obsahu na serverech Módy ze Steam Workshopu na dedikovaných serverech.

Módy, které nejsou ve Workshopu - vlastní nebo soukromý fork - se umístí jako složka do adresáře mods na serveru a v modoverrides.lua se zapnou pod názvem té složky místo klíče workshop-. Hráči pak musí kopii získat ručně, protože automatické stahování funguje jen pro položky z Workshopu.

Admini a jak zjistit ID Klei#

Admini jsou uvedeni v adminlist.txt ve složce clusteru vedle cluster.ini:

adminlist.txt
KU_aB3dEf7hKU_9zQ2mNp1

Záznamy jsou ID uživatelů Klei, začínají KU_ a jsou stejná na každé platformě, na které účet hraje. Nejsou to ID ze Steamu ani jména hráčů. Abys nějaké zjistil, nech hráče připojit se a spusť v konzoli shardu tohle:

lua
c_listallplayers()

Vypíše všechny připojené hráče s jejich ID. Hráči si své ID najdou také na stránce svého účtu Klei. Soubor se čte při startu shardu, takže po úpravě restartuj.

Admin ve hře dostane dvě věci. Seznam hráčů (podržená klávesa Tab) ukazuje vedle každého jména tlačítka pro vyhození a ban. A herní konzole - otevřená klávesou zpětný apostrof - umí posílat příkazy serveru: začíná v lokálním režimu a před psaním ji přepneš na vzdálený pomocí Ctrl. Příkaz spuštěný v lokálním režimu se týká jen tvého klienta, a proto je tak časté „napsal jsem c_save() a nic se nestalo“.

whitelist.txt používá stejná ID a spolu s whitelist_slots v cluster.ini rezervuje sloty. blocklist.txt je seznam banů a server do něj zapisuje, když někoho zabanuješ.

Přehled konzolových příkazů#

Příkazy jsou Lua a zadávají se do konzole shardu, o který jde - příkazy pro Forest do Master, příkazy pro Caves do Caves.

PříkazCo dělá
c_save()Okamžitě uloží tento shard
c_shutdown()Uloží a zastaví. c_shutdown(false) zastaví bez uložení
c_reset()Znovu načte tento shard z posledního uložení
c_rollback(n)Vrátí zpět n snapshotů
c_regenerateshard()Smaže a znovu vygeneruje jen tento shard
c_regenerateworld()Smaže a znovu vygeneruje celý svět
c_announce("text")Zpráva všem hráčům
c_listallplayers()Připojení hráči s jejich ID Klei
TheNet:Kick("KU_...")Vyhození podle ID
TheNet:Ban("KU_...")Ban podle ID a zápis do seznamu banů
c_despawn(player)Pošle hráče zpět na výběr postavy
c_godmode(player)Přepne nezranitelnost
c_spawn("prefab", n)Vytvoří n kusů prefabu
c_give("prefab", n)Dá předměty
c_countprefabs("prefab")Spočítá, kolik jich v tomto shardu existuje
c_gonext("prefab")Teleportuje k další instanci prefabu
TheWorld:PushEvent("ms_nextcycle")Přeskočí na další část dne

Háček je v tom, koho se příkaz týká. Ve hře příkazy bez argumentu hráče působí na tebe - nebo na to, co máš vybrané. Na vlastní konzoli serveru žádné „ty“ neexistuje a mnoho z těchto příkazů se vrací k prvnímu hráči v seznamu. Takže c_give("goldnugget", 10) zadaný do konzole panelu dá zlato tomu, kdo je zrovna první, ne tomu, kdo o něj požádal.

Hráče proto cílí výslovně:

lua
-- Look up a player by namelocal p = UserToPlayer("Wendy_main")c_godmode(p)c_despawn(p)-- Give items to one specific playerp.components.inventory:GiveItem(SpawnPrefab("goldnugget"))-- The connected players, in join orderfor i, v in ipairs(AllPlayers) do print(i, v.name, v.userid) end

c_countprefabs je nástroj správce, který lidé přehlížejí. Cluster, který začal lagovat, má obvykle příliš mnoho něčeho - odhozených předmětů, zasazených stromů, vytvořených tvorů - a c_countprefabs("log") nebo c_countprefabs("evergreen") ti za pár sekund řekne, kolik jich je.

Rollbacky a snapshoty#

DST uchovává snapshoty: body uložení vytvářené automatickým ukládáním, nejvýše max_snapshots z cluster.ini (ve výchozím stavu 6). c_rollback(1) se vrátí o jeden, c_rollback(3) o tři. Hráči se odpojí a znovu připojí k obnovenému stavu.

Potíž je v tom, že cluster jsou dva světy. Když vrátíš zpět Forest a ne Caves, hráči, kteří byli pod zemí, si ponechají novější stav, zatímco povrch jde zpátky, a počítadla dnů si neodpovídají. Vracej oba shardy o stejný počet, krátce po sobě, a než pustíš lidi zpět, zkontroluj obě počítadla dnů. Pokud si nejsi jistý, jistou cestou je úplná obnova celé složky clusteru z backupu při zastavených obou shardech.

Snapshoty navíc leží na stejném disku jako uložení. Kryjí situaci „před hodinou jsme se špatně rozhodli“, ne „server byl smazán“. K tomu potřebuješ skutečný backup mimo stroj - argumenty pro něj shrnuje Backupy, které se opravdu obnoví. Na RE:NODE jsou sloty pro backupy součástí každého plánu Don't Starve Together, ukládají se mimo stroj a obnovují tlačítkem; karta Schedules umí podle výrazu cron poslat jako konzolové příkazy c_announce("Saving for backup") a c_save() a o minutu později vytvořit backup.

Hráči mohou také zahájit hlasování o rollbacku nebo regeneraci světa, pokud je vote_enabled = true. Na veřejném serveru se rozhodni, jestli chceš mít tuhle moc v rukou hráčů.

Aktualizace a když se módy rozbijí#

Aktualizace hry jsou hlavním zdrojem potíží s módy DST. Záplaty od Klei mění vnitřky, na které se módy napojují, a každá záplata rozbije část módů, dokud je autoři nedoženou. Protože server při každém startu znovu stahuje módy, rozbitá aktualizace módu se k tobě dostane také bez varování.

Krátký postup:

  1. Před aktualizací hry udělej backup celé složky clusteru.
  2. Po aktualizaci spusť Master a při načítání módů čti jeho log. Mód, který selže, vypíše své jméno a chybu Lua.
  3. Vypni selhávající mód v obou souborech modoverrides.lua, restartuj a zkontroluj svět.
  4. Znovu ho zapni, až autor vydá opravu.

Mód, který přidal předměty nebo tvory, nelze ze stávajícího světa vždy čistě odstranit; shard může jeho objekty zahodit nebo odmítnout načíst. Před odebráním udělej backup a obecný postup obnovy najdeš v článku Co dělat, když aktualizace módu věci rozbije.

Řešení potíží#

Módy jsou v setup souboru, ale nejsou aktivní. Nejsou v modoverrides.lua, nebo klíči chybí předpona workshop-.

Mód funguje ve Forestu a shazuje Caves. Oba soubory modoverrides.lua se liší. Zkopíruj jeden přes druhý.

Nastavení módu se ignoruje. Název nebo hodnota volby přesně neodpovídá modinfo.lua módu. Vygeneruj soubor ze hry.

Hráči se po aktualizaci módu nemohou připojit. Jejich klient má starší kopii. Restart hry obvykle spustí aktualizaci z Workshopu.

`c_give` dal předměty špatné osobě. Konzole serveru bez zadaného hráče cílí na prvního hráče. Použij UserToPlayer("name").

Admin příkazy z herní konzole nic nedělají. Konzole je v lokálním režimu. Přepni na vzdálený a zkontroluj, že ID je v adminlist.txt a shard byl restartován.

FAQ#

Musejí si hráči nainstalovat módy serveru, než se připojí?

Ne. Módy označené jako povinné pro všechny klienty se stahují automaticky při připojení. Módy jen pro klienta jsou věcí každého hráče a nikdy nejsou povinné.

Mohou mít Forest a Caves různé módy?

Jen módy, které se nedotýkají sdílených věcí, například některé úpravy na straně serveru. Cokoli, co přidává předměty, tvory nebo recepty, musí být v obou shardech shodné, jinak hráči přecházející mezi nimi narazí na chybějící objekty.

Kde najdu konfigurační volby módu?

V jeho modinfo.lua, v části configuration_options. Snazší je nastavit volby v lokálním světě ve hře a vygenerovaný modoverrides.lua zkopírovat na server.

Ovlivňuje c_rollback oba shardy?

Počítej s tím, že ovlivní shard, ve kterém ho spustíš, a vracej oba o stejný počet. Potom zkontroluj počítadlo dnů v obou světech.

Jak udělám někoho adminem bez restartu?

Seznam adminů se čte při startu, takže spolehlivá cesta je přidat jeho ID Klei do adminlist.txt a restartovat v klidné chvíli.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000