RE:NODE

Návody15 min čtení

Server DayZ: nastavení, mody a ekonomika

Provoz serveru DayZ od začátku do konce: serverDZ.cfg, porty, mody a soubory .bikey, types.xml a lootová ekonomika, restarty, persistence a chyby, na které lidé narážejí.

Aktualizováno

23 čtenářů

DayZ má dva systémy, se kterými se noví administrátoři setkávají ve špatném pořadí: mody, kterými začíná každý, a centrální ekonomiku, která rozhoduje o tom, jestli mapa obsahuje něco, co stojí za nalezení. Dokonale modovaný server s nedotčenou ekonomikou je prázdný server. Aby obojí fungovalo, potřebuješ zhruba 6 GB paměti pro server na 40 slotů, tři porty UDP, účet na Steamu, který vlastní hru, a ochotu upravovat XML a restartovat. Tento návod pokrývá celou cestu: instalaci, serverDZ.cfg, porty, mody a jejich klíče, soubory ekonomiky, správu a selhání, která plní tickety podpory.

Co vlastně provozuješ#

Server DayZ je samostatná aplikace na Steamu - DayZ Server, app id 223350 - a na rozdíl od většiny her není dostupný anonymnímu přihlášení v SteamCMD. Potřebuješ účet na Steamu, který vlastní DayZ, a SteamCMD si u něj poprvé vyžádá potvrzení Steam Guard. Hostingy, které DayZ instalují za tebe, to dělají právě s tvými přihlašovacími údaji z tohoto důvodu. Použij záložní účet, který vlastní hru a nic jiného cenného; instalace herního serveru nemá co držet účet, ze kterého nakupuješ.

To, co server dostane z krabice, je skromnější, než lidé čekají:

  • Jedna složka mise v mpmissions, která je zároveň mapou i ekonomikou. Chernarus je dayzOffline.chernarusplus, Livonia je dayzOffline.enoch a pozdější mapy mají vlastní složky - přečti si adresář, než abys název hádal.
  • Konfigurační soubor serverDZ.cfg s přibližně čtyřiceti nastaveními.
  • BattlEye, který obstarává anticheat, bany a vzdálenou správu.
  • Žádné admin menu ve hře. Není spectate, teleport, spawn předmětů ani seznam hráčů. Každý administrativní nástroj, který jsi kdy na serveru DayZ viděl, je mod nebo externí klient RCon.
  • Perzistentní svět uložený odděleně od souborů mise, takže můžeš upravovat ekonomiku, aniž bys smazal základny hráčů - většinou.

Složka mise je ta důležitá myšlenka. Když upravuješ loot, upravuješ soubory uvnitř mpmissions/dayzOffline.chernarusplus/ a ty se čtou při startu. Nic, co tam změníš, se neprojeví, dokud server nerestartuješ, a proto má správa DayZ rytmus: uprav, restartuj, podívej se, uprav znovu.

Požadavky a využití zdrojů#

DayZ je na svůj počet hráčů těžký server. Simuluje nakažené, zvířata, vozidla a ekonomiku předmětů na mapě o rozloze 225 čtverečních kilometrů a hodně se opírá o jedno vlákno.

HráčiRAMCPUPoznámky
10-20, vanilla4-6 GB2 jádraPohodlné; dobré pro soukromou skupinu
30-40, vanilla6-8 GB2-3 jádraBěžný veřejný server
40-60, vanilla8-10 GB3+ jaderLimitem se stává FPS serveru, ne paměť
30-50, silně modovaný10-12 GB3+ jaderSeznamy modů velikosti Expansion, obchodníci, AI
  • CPU rozhoduje o tom, jak se plný server hraje. Sledovanou metrikou je FPS serveru, zapisované, pokud nastavíš logAverageFps. Zdravé je nad 30; pod zhruba 15 začnou hráči hlásit rubber-banding, nesynchronizovaný loot a dveře, které se otevřou dvakrát.
  • Paměť roste se seznamem modů mnohem rychleji než s počtem hráčů. Vanilkový server na 60 slotů spotřebuje méně než server na 30 slotů s velkou sestavou Expansion.
  • Disk: instalace serveru zabírá zhruba 3 GB a každý mod přidává svoje. Seznam dvaceti modů snadno přidá dalších 10-15 GB, a proto plány DayZ začínají s větším diskem, než by u tak staré hry člověk čekal.
  • Síť je skromná, několik set kilobajtů za sekundu na hráče, ale je to UDP a citlivé na latenci. Obecné pravidlo z CPU vs RAM pro herní servery platí tady víc než u většiny her: lidé kupují paměť, když je ve skutečnosti nasycené jedno jádro.

Plány DayZ na RE:NODE začínají na 6 GB se třemi přidělenými porty, což je správný tvar pro vanilkový nebo lehce modovaný server na 40 slotů. Velký server s Expansion chce horní příčku žebříčku.

Instalace serveru a spouštěcí řádek#

Na vlastním stroji SteamCMD se skutečným přihlášením:

bash
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \    +app_update 223350 validate +quit

Server se pak spouští dlouhým řádkem parametrů. Tohle jsou parametry, na kterých záleží, a v panelu se objevují jako pole na kartě Startup, ne jako text, který píšeš:

ParametrÚčel
-config=serverDZ.cfgKonfigurační soubor ke čtení
-port=2302Herní port
-profiles=profilesKam se zapisují logy, BattlEye a výpisy pádů
-mod=@CF;@Mod2Mody pro klienta i server, odděleno středníky, na pořadí záleží
-servermod=@AdminToolMody jen pro server, které klienti nesmějí mít
-doLogsZapisovat logy skriptů a chyb
-adminLogZapisovat log aktivity hráčů .ADM
-netLogLogování síťového provozu, jednou užitečné, navždy hlučné
-freezeCheckVypsat log, když se server zasekne
-cpuCount=2Kolik jader smí engine používat

Dej -profiles někam, kam se dostaneš přes SFTP nebo správce souborů, protože ve té složce žije každá odpověď na otázku „proč to udělal“. Pokud je pro tebe SteamCMD nové, app id a rozdíl mezi validate a obyčejnou aktualizací vysvětluje SteamCMD vysvětleno.

serverDZ.cfg, klíč po klíči#

Soubor je seznam řádků key = value; včetně středníků, s blokem mise na konci. Hodnoty níže jsou ty z ukázkového souboru Bohemia a jsou rozumným výchozím bodem, ne doporučením.

serverDZ.cfg
hostname = "Chernarus - vanilla, no KOS in trader";password = "";passwordAdmin = "a-long-random-string";maxPlayers = 60;verifySignatures = 2;forceSameBuild = 1;disableVoN = 0;vonCodecQuality = 20;disable3rdPerson = 0;disableCrosshair = 0;serverTime = "SystemTime";serverTimeAcceleration = 12;serverNightTimeAcceleration = 1;serverTimePersistent = 0;loginQueueConcurrentPlayers = 5;loginQueueMaxPlayers = 500;instanceId = 1;storageAutoFix = 1;steamQueryPort = 2305;respawnTime = 5;timeStampFormat = "Short";logAverageFps = 300;logMemory = 300;logPlayers = 300;logFile = "server_console.log";adminLogPlayerHitsOnly = 0;enableDebugMonitor = 0;allowFilePatching = 0;multithreadedReplication = 1;speedhackDetection = 1;class Missions{    class DayZ    {        template = "dayzOffline.chernarusplus";    };};

Ty, nad kterými stojí za to přemýšlet, místo abys je kopíroval:

  • verifySignatures = 2 odmítne jakýkoli mod, jehož .bikey není ve složce keys na serveru. Nech 2. Snížení na 0 je způsob, jak servery skončí s cizími upravenými PBO.
  • forceSameBuild = 1 odmítne klienty s jinou verzí hry. Vypnutí nezpůsobí, že zastaralý klient bude fungovat; jen selže později a méně srozumitelně.
  • allowFilePatching = 0 blokuje klienty spuštěné s -filePatching, kudy přichází hodně nenápadného cheatování. Zapnuté ho potřebují jen vývojáři modů.
  • serverTimeAcceleration násobí herní hodiny. 12 dává dvouhodinový den. serverNightTimeAcceleration násobí znovu během noci, takže serverTimeAcceleration = 12 s serverNightTimeAcceleration = 4 dává dlouhý den a krátkou noc - nejčastěji požadovaná změna na každém veřejném serveru.
  • serverTimePersistent = 1 způsobí, že světový čas přežije restart, místo aby se vrátil na serverTime. Při čtyřech restartech denně a hodnotě 0 má tvůj server čtyřikrát to samé ráno.
  • instanceId vybírá složku persistence, storage_1 pro instanci 1. Dva servery sdílející stroj nesmějí sdílet id instance.
  • disableVoN = 0 zachovává hlas ve hře. Vypnutí je větší změna toho, jak se hra hraje, než většina nastavení v souboru.

Porty a připojení#

PortProtokolÚčel
2302UDPHerní provoz, nastavuje -port=
2303-2304UDPRezervované vedle herního portu; hostingy přidělují celý blok
2305UDPDotaz Steam, nastavuje steamQueryPort
Port RConUDPBattlEye RCon, nastavuje se v BEServer_x64.cfg

Dotazovací port je ten, na kterém se lidé chytají. Hra běží, můžeš se připojit přes IP a server se nikdy neobjeví v seznamu DayZ Launcheru - to je zablokovaný nebo špatný steamQueryPort. Oba jsou UDP; pravidlo firewallu, které otevře jen TCP, tady nedělá vůbec nic. Porty herních serverů vysvětleny vysvětluje, proč dotazovací port existuje odděleně od herního a jak vypadá každé selhání.

Téměř nikdo se na modovaný server DayZ nepřipojuje z prohlížeče ve hře. Používají DayZ Launcher, který čte seznam modů, jejž server inzeruje, přihlásí odběr těch položek na Workshopu a spustí hru s odpovídajícím řádkem -mod=. To je celý důvod, proč musí být pořadí načítání modů a klíče správně: launcher automatizuje klientskou stranu a hlasitě to vzdá, když se obě strany neshodují.

najde serverpřipojeníverifySignatures 2klíč musí být přítomenDayZ Launcherčte seznam modůDotazovací port2305 UDPServer DayZ2302 UDPBattlEyekontrola podpisuSložka keys/jeden .bikey na mod
Co se musí sejít, než se může připojit hráč s mody

Mody: klíče, pořadí načítání a dva přepínače#

Mody z Workshopu se stahují přes SteamCMD proti app id klienta, 221100, ne serveru:

bash
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \    +workshop_download_item 221100 1559212036 +quit

Pak se musí stát tři věci a když chybí kterákoli, projeví se jiným matoucím příznakem:

  1. Složka modu, pojmenovaná @SomeMod, leží v kořeni serveru.
  2. Její soubor keys/*.bikey je zkopírovaný do složky keys na serveru. Když to vynecháš, klienti jsou na načítací obrazovce vyhozeni BattlEye s chybou podpisu, i když je všechno ostatní správně.
  3. Složka je uvedená v -mod=, v pořadí závislostí. Frameworky první: -mod=@CF;@DayZ-Expansion-Core;@DayZ-Expansion-Bundle. Community Framework (@CF) je závislostí velkého množství modů a musí se načíst před nimi.

-servermod= použij pro všechno, co klient mít nemá: admin nástroje, spawnery lootu, úpravy na straně serveru. Mody v -servermod= se launcheru neinzerují, takže hráči nejsou vyzváni k jejich stažení. Server-only mod omylem v -mod= způsobí, že si každý připojující se hráč stahuje něco, k čemu nemá využití.

Dva návyky zachrání celé servery. Zaprvé, zamkni seznam modů a aktualizuj ho záměrně, ne automaticky - patch DayZ zneplatní každý mod, dokud ho autor nepřestaví, a server, který se v den patche automaticky aktualizuje, je server, na který se v den patche nikdo nepřipojí. Co dělat, když aktualizace modu něco rozbije stojí za přečtení dřív, než to budeš potřebovat. Zadruhé, před každou aktualizací si ponech kopii funkční složky modu a svého XML. Mody ze Steam Workshopu na dedikovaných serverech popisuje, jak se stahování z Workshopu chová na straně serveru napříč hrami.

types.xml a centrální ekonomika#

Tohle je část, která rozhoduje, jestli se na tvém serveru vyplatí hrát. Loot se nerozhazuje náhodně. Centrální ekonomika drží cílovou populaci každého předmětu na mapě a doplňuje k ní, a pravidla žijí v XML uvnitř složky mise.

SouborCo řídí
db/types.xmlKaždý předmět: kolik jich existuje, jak dlouho vydrží, jak rychle se vrací
db/events.xmlVozidla, havárie vrtulníků, spawny nakažených a zvířat
db/globals.xmlLimity pro celý svět jako ZombieMaxCount a časovače úklidu
db/messages.xmlPlánovaná hlášení, včetně toho, které vypíná server
db/economy.xmlKteré podsystémy ekonomiky se vůbec načítají
cfgeconomycore.xmlKteré soubory XML se čtou, včetně tvých vlastních
cfgspawnabletypes.xmlS jakými příslušenstvími a obsahem se předmět spawnuje
cfgeventspawns.xmlSouřadnice, které smějí události používat
cfgplayerspawnpoints.xmlKde se objevují nové spawny a respawny

Záznam v types.xml vypadá takhle. Čísla jsou ilustrační - skutečná najdeš v přibaleném souboru:

db/types.xml
<type name="M4A1">    <nominal>8</nominal>    <lifetime>7200</lifetime>    <restock>1800</restock>    <min>4</min>    <quantmin>-1</quantmin>    <quantmax>-1</quantmax>    <cost>100</cost>    <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1"           count_in_player="0" crafted="0" deloot="0"/>    <category name="weapons"/>    <usage name="Military"/>    <value name="Tier4"/></type>

Každý element má konkrétní úlohu a pět z nich rozhoduje skoro o všem:

  • nominal je cílový počet na mapě. min je podlaha: když živý počet klesne na ni, ekonomika zařadí další.
  • lifetime je počet vteřin, které nedotčený předmět přežije, než ho úklid odebere. Zvednutí a položení předmětu hodiny vynuluje.
  • restock je prodleva, než smí ekonomika nahradit to, co bylo odebráno. 0 znamená, jakmile to půjde.
  • cost je priorita spawnu mezi 0 a 100 - který z vhodných předmětů dostane slot.
  • usage a value rozhodují, kde se může objevit: usage je typ budovy (Military, Police, Medic, Farm, Industrial, Town, Village, Hunting), value je úroveň lootu, vyšší úrovně jsou dál od pobřeží. Předmět bez usage a bez value se nespawnuje nikde, což je nejčastější sebezpůsobená rána v administraci DayZ.
  • Atributy flags rozhodují, co se počítá do nominal. count_in_cargo="1" znamená, že se počítají předměty uvnitř kontejnerů, takže hromadící klan může mapu připravit o předmět, aniž by cokoli bylo rozbité.

Z tohoto mechanismu plynou tři důsledky. Městečko, které působí holé, je obvykle problém nominal, ne nastavení rychlosti spawnu, které nemůžeš najít. Zvýšení nominal napříč vším loot nenásobí donekonečna, protože celek je také omezen lootovými body na mapě. A předmět s krátkým lifetime zmizí ze základny, kterou jsi nechal týden - použij kontejner, který má vlastní lifetime.

Mody, které přidávají předměty, potřebují také své záznamy. Zbraňový mod, který vypadá, že nedělá nic, je téměř vždy mod, jehož předměty nebyly nikdy zaregistrovány v ekonomice: mod je načtený, zbraně existují v herních souborech a nic je nespawnuje. Správná oprava není vložit záznamy modu do vanilkového types.xml, který aktualizace hry přepíše. Místo toho zaregistruj vlastní složku v cfgeconomycore.xml:

cfgeconomycore.xml
<ce folder="custom">    <file name="mod_types.xml" type="types"/></ce>

Teď tvé úpravy žijí v mpmissions/dayzOffline.chernarusplus/custom/mod_types.xml a přežijí přepsání patchem. types.xml a lootová ekonomika rozebírá celý systém podrobně.

Persistence je od toho všeho oddělená. Základny hráčů, skrýše, vozidla a data postav žijí v storage_<instanceId> vedle složky mise. Úprava ekonomiky je nemaže. Smazání té složky ano - to je wipe a je to jediný spolehlivý. Nejdřív udělej kopii a drž ji jinde než na serveru: zálohy, které opravdu obnovíš existují proto, že záloha, kterou nikdo neobnovil, je hypotéza.

Správa: RCon, logy a restarty#

Správa je BattlEye RCon plus admin mod, který sis vybral. passwordAdmin v serverDZ.cfg by mělo být dlouhé a náhodné, i když vanilka s ním dovoluje skoro nic dělat; heslo k RCon je oddělené a žije v BEServer_x64.cfg ve složce BattlEye uvnitř adresáře profiles.

Vlastní sada příkazů BattlEye, zadávaných do klienta RCon nebo do konzole panelu, je malá:

PříkazÚčinek
playersPřipojení hráči s jejich ID a pingy
kick <id> <reason>Vyhodí podle id relace
ban <id> <minutes> <reason>Zabanuje připojeného hráče, 0 pro trvalý ban
addBan <GUID> <minutes> <reason>Zabanuje někoho, kdo není připojený
bans / removeBan <n>Vypíše a zruší bany
say -1 <message>Zpráva všem
loadBans / loadEventsZnovu načte soubory BattlEye bez restartu
#shutdownZastaví server

Bany se ukládají do bans.txt jako GUID z BattlEye, které jsou odvozené ze SteamID a nejsou to SteamID. Zkopíruj je z logů, místo abys je převáděl ručně. Pokud RCon vůbec vystavuješ, přečti si nejdřív RCON bezpečně - protokol je UDP, heslo je celé ověření a servery DayZ se neustále skenují.

Logy ve složce profiles jsou druhá polovina práce:

  • server_console.log - všechno, co konzole vypsala, a tam se objevují chyby ve tvém XML při startu.
  • *.ADM - admin log: připojení, odpojení, pozice, smrti, zásahy, kdo koho zabil a čím. To je soubor, který čteš po každé hádce o raid základny.
  • script*.log - chyby skriptů, včetně těch z modů.
  • crash_* a *.mdmp - to, co poslat autorovi modu.

Servery DayZ se restartují podle plánu, typicky každé tři až čtyři hodiny, protože FPS serveru s průběhem relace klesá a protože plánovaný restart je řízené uložení. Můžeš to řešit čistě v db/messages.xml, kde záznam zprávy může nést vypnutí, a karta Schedules v panelu umí spustit restart plus zálohu výrazem cron - jaký interval se skutečně vyplatí, viz restartovací plány, které pomáhají. Na RE:NODE je tlačítko Restart čisté zastavení, hlídač si všimne serveru, který se neustále sám restartuje, a otevře ticket, místo aby ho nechal ve smyčce, a server, který dosáhne limitu paměti, se zastaví a čistě restartuje, místo aby se nechal swapovat.

Řešení potíží#

Server běží, ale není v seznamu DayZ Launcheru. Dotazovací port. Zkontroluj, že steamQueryPort odpovídá přidělenému portu UDP a že ho na stroji nezabírá nic jiného.

Hráči jsou vyhazováni s chybou podpisu BattlEye. V keys chybí .bikey, nebo se mod aktualizoval a přinesl nový klíč. Po každé aktualizaci modu zkopíruj klíče všech modů znovu.

„You cannot play/edit this mission; it is dependent on downloadable content that has been deleted.“ Seznam modů klienta se neshoduje se serverem - obvykle mod, který launcher nestáhl, nebo nesoulad verzí. Ať hráč ověří soubory přes launcher, ne přes Steam.

Loot se po úpravě `types.xml` nezměnil. Buď jsi nerestartoval, nebo se soubor nepodařilo naparsovat a ekonomika se vrátila k výchozímu. Přečti server_console.log od začátku: poškozený soubor XML je tam pojmenovaný i s elementem, který ho rozbil.

Předměty přidaného modu se nikdy nespawnují. Nemají záznamy v ekonomice, nebo mají záznamy bez usage a bez value. Viz výše.

Všechno je pomalé, když se server zaplní. Zkontroluj zalogované FPS serveru dřív, než koupíš paměť. Vysoké počty nakažených, velké seznamy modů a desítky persistentních vozidel stojí CPU, ne RAM.

Základny po aktualizaci zmizely. Persistence v storage_<instanceId> byla resetována nebo se změnilo id instance. Bez zálohy té složky není žádná záchrana.

Světový čas se při každém restartu resetuje. serverTimePersistent = 0.

FAQ#

Můžu provozovat server DayZ, aniž bych DayZ vlastnil?

Ne. Aplikace serveru není dostupná anonymnímu přihlášení v SteamCMD, takže se pro instalaci musí použít účet na Steamu, který hru vlastní. Použij záložní účet, ne hlavní.

Kolik hráčů server DayZ unese?

maxPlayers jde výrazně přes 60, ale praktickým limitem je CPU. Většina veřejných serverů běží na 40-60 a nad tím začíná ztrácet FPS serveru, zvlášť s velkým seznamem modů. Počet hráčů server DayZ rozbije jen zřídka; rozbije ho seznam modů.

Musím restartovat každých pár hodin?

Ne nutně. Server bude běžet dál. Ale FPS serveru se při dlouhé relaci snižuje, restart je čisté uložení a většina serverů s mnoha mody je po něm viditelně lepší. Tři až čtyři hodiny jsou zvyk komunity; oznam to přes db/messages.xml, aby kvůli tomu nikdo neztratil raid.

Smaže úprava lootové ekonomiky mapu?

Ne. Loot a persistence jsou oddělené. Úprava types.xml a dalších souborů ekonomiky mění, co se spawnuje od příštího restartu; základny hráčů, skrýše a postavy v storage_<instanceId> zůstávají nedotčené. Wipe znamená záměrné smazání té složky storage.

Proč mod funguje mně, ale nikomu jinému?

Máš mod lokálně a server ho neinzeruje, nebo je v -servermod=, ačkoli má být v -mod=. Mody pro klienta i server patří do -mod= s klíčem v keys; do -servermod= patří jen skutečně serverové mody.

Kde mám hledat jako první, když je něco špatně?

V server_console.log a v souboru .ADM ve složce profiles, v tomto pořadí. Polovina správy DayZ je XML a druhá polovina je čtení logu, který ti řekne, který jeho řádek jsi pokazil.


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