RE:NODE

Návody13 min čtení

Dedikovaný server Arma 3: nastavení a mody

Jak nainstalovat server Arma 3, co dělá každý klíč v server.cfg, jak fungují mody a podpisové klíče a jak headless client vrací serveru FPS.

Aktualizováno

5 čtenářů

Arma 3 je jednovláknová simulace s obrovským seznamem věcí k simulování, takže číslo, které rozhoduje o pocitu ze hry, je taktovací frekvence, ne počet jader. Šestnáctijádrový stroj s nízkou frekvencí prohraje se čtyřmi rychlými jádry pokaždé a žádné množství paměti na tom nic nezmění. Zbytek práce jsou tři soubory - server.cfg, basic.cfg a profil - seznam modů, se kterým se musí přesně shodovat každý klient, a pět UDP portů. Tento průvodce pokrývá všechno: instalaci serveru, každé nastavení, které stojí za změnu, jak ověřování podpisů rozhoduje, kdo se může připojit, a headless client, což je největší jednotlivé zlepšení výkonu, které je k dispozici, a to, které většina návodů jen odbyde.

Co je server Arma 3 a co rozhoduje o jeho pocitu#

Dedikovaný server je bezplatná samostatná aplikace: Arma 3 Dedicated Server, Steam app id 233780, ke stažení anonymním přihlášením přes SteamCMD. Běží bez grafiky a zvuku, načte misi a simuluje všechno v ní - objekty terénu, fyziku, balistiku a především AI.

Výkon serveru se měří ve FPS serveru, které si přečteš příkazem #monitor 1 v chatu jako přihlášený admin. Nad 30 je zdravé, 20 je bod, kdy AI začíná dělat špatná rozhodnutí, a pod 15 se přestřelka změní na diashow jednotek teleportujících se do krytu. Co to číslo ovlivňuje, v pořadí:

  1. Počet AI. Každá jednotka AI stojí hledání cesty, zaměřování a aktualizace znalostí v každém snímku. Dvě stě AI na velkém terénu sníží FPS serveru na polovinu dřív, než se připojí první hráč.
  2. Skriptování. Mise, která spouští těžké smyčky v neplánovaném kódu, blokuje stejné vlákno, které používá simulace. Důvodem, proč se server ve třetí hodině zhoršuje, je obvykle mise, ne hostitel.
  3. Objekty a fyzika. Zničená vozidla, upuštěné zbraně a ragdolly se hromadí. Mise, která nikdy neuklízí, je mise, která zpomaluje.
  4. Hráči. Překvapivě hluboko v seznamu. Hráči jsou levní ve srovnání s AI.

Paměť je na vanille málokdy omezením a na silně modovaných serverech jím je vždy, protože mody načítají svůj obsah do procesu, ať ho mise používá, nebo ne.

Požadavky a využití zdrojů#

NastaveníRAMCPUDisk
Vanilla, 20-30 hráčů, lehká AI3-4 GB2 rychlá jádra40 GB
CBA plus ACE, jedna mise, 40 hráčů6 GB2-3 rychlá jádra55 GB
Plný balík: CBA, ACE, RHS, CUP Terrains8-12 GB3+ rychlých jader80-100 GB
Headless client vedle serverupřidej 2-4 GBpřidej 1-2 jádražádný
  • Disk je překvapení. Základní server má kolem 20 GB. CUP Terrains complete a RHS dohromady jsou větší než hra. Skupina, která uprostřed kampaně přidá pár balíků map, může za odpoledne zaplnit disk plánu a Arma nezvládá elegantně, když nemůže zapisovat.
  • Podíl CPU je důležitější než počet jader. Pokud tě hostitel škrtí na zlomek jádra, Arma bude působit přesně tak špatně, jak to zní. Viz CPU vs RAM u herních serverů, jak poznat, čeho se ti opravdu nedostává.
  • Šířka pásma se pohybuje zhruba kolem 100-300 KB/s na hráče při rušné misi, výš při hodně AI v zorném poli. To není moc, ale Arma je na jitter citlivá způsobem, jakým většina her není - latence, jitter a ztráta paketů ukazuje, jak ty tři věci rozlišit.

Instalace serveru přes SteamCMD#

Samotný server nepotřebuje účet:

bash
$ steamcmd +force_install_dir /home/arma/server +login anonymous \    +app_update 233780 validate +quit

Mody z Workshopu jsou jiná věc. Patří ke hře, app id 107410, a jejich stažení vyžaduje účet Steam, který vlastní Arma 3:

bash
$ steamcmd +force_install_dir /home/arma/server +login your_account \    +workshop_download_item 107410 <item-id> +quit

Stažené položky skončí v steamapps/workshop/content/107410/<item-id>/. Každou zkopíruj nebo propoj symlinkem do složky pojmenované @ModName v kořenu serveru. Na RE:NODE si instalace Arma 3 z tohoto důvodu vyžádá přihlášení do Steamu na záložce Setup a přihlašovací údaje se ukládají tak, jak je zadáš - použij záložní účet, který hru vlastní, ne ten hlavní.

Funkční startovací řádek pro Linux vypadá takto:

bash
$ ./arma3server_x64 -port=2302 -config=server.cfg -cfg=basic.cfg \    -profiles=./profiles -name=server -world=empty -autoInit \    -bandwidthAlg=2 \    -mod="@CBA_A3;@ace;@RHSAFRF" -serverMod="@ServerTools"
ArgumentCo dělá
-port=2302Herní port. Query port je vždy tento plus jedna
-config=Soubor server.cfg popsaný níže
-cfg=Síťový soubor basic.cfg
-profiles=Kam se zapisují profil obtížnosti a logy
-name=Který profil v tomto adresáři použít
-world=emptyPři startu nenačítat terén. Rychlejší, lehčí
-autoInitSpustit první misi, aniž by se čekalo na hráče
-mod=Mody, které musí načíst i každý klient
-serverMod=Mody, které načítá jen server
-bandwidthAlg=2Novější odhad šířky pásma. Stojí za zapnutí
-filePatchingPovolí načítání nerozbalených souborů. Vypnuto, pokud to nepotřebuješ

Vždy používej arma3server_x64, nikdy 32bitový arma3server. 32bitová binárka pořád existuje, pořád se spustí a dojde jí adresní prostor ve chvíli, kdy přidáš seznam modů.

server.cfg: nastavení, na kterých záleží#

server.cfg je prostý textový soubor v kořenu serveru ve vlastní konfigurační syntaxi Arma - středník za každým příkazem, pole deklarovaná přes [].

server.cfg
hostname = "Longship Crew - ACE";password = "";passwordAdmin = "change-me";serverCommandPassword = "also-change-me";maxPlayers = 40;motd[] = {"Rules in the Discord.", "TFAR on channel 1."};motdInterval = 20;admins[] = {"76561198012345678"};logFile = "server_console.log";verifySignatures = 2;BattlEye = 1;kickDuplicate = 1;allowedFilePatching = 0;persistent = 1;timeStampFormat = "short";disconnectTimeout = 90;steamProtocolMaxDataSize = 1024;voteMissionPlayers = 3;voteThreshold = 0.33;onUnsignedData = "kick (_this select 0)";onHackedData = "kick (_this select 0)";headlessClients[] = {"127.0.0.1"};localClient[] = {"127.0.0.1"};class Missions{    class Liberation    {        template = "Liberation.Altis";        difficulty = "custom";    };};

Ty, které rozhodují, jestli server vůbec funguje:

  • `passwordAdmin` je to, co bere #login. `serverCommandPassword` je samostatné a dává jen příkazy #, což je to, co dáš důvěryhodnému moderátorovi, který by neměl moci server vypnout. `password` je heslo pro připojení a obvykle je prázdné.
  • `admins[]` uvádí SteamID64, která dostanou admina bez zadání hesla. Bezpečnější než sdílet passwordAdmin se šesti lidmi.
  • `verifySignatures = 2` odmítne každý addon, který není podepsaný klíčem, jejž server drží. Tohle drží upravené PBO mimo tvůj server a je to zároveň příčina číslo jedna hlášení „nemůžu se připojit“ - viz níže.
  • `persistent = 1` nechá misi běžet, když odejde poslední hráč. Spolu s -autoInit také spustí misi při bootu. Bez toho se tvoje kampaň resetuje pokaždé, když se server vyprázdní.
  • `steamProtocolMaxDataSize = 1024` zvětší velikost odpovědi serveru pro Steam, aby launcher Arma mohl ukázat dlouhý seznam modů. Nech výchozí hodnotu při třiceti modech a hráči dostanou neúplný seznam a neúspěšné připojení.
  • `class Missions` je rotace. template je název složky mise nebo .pbo včetně přípony terénu, přesně tak, jak se objevuje v mpmissions. Překlep tady znamená, že server sedí v lobby bez vybrané mise.

difficulty = "custom" odkazuje na nastavení obtížnosti v souboru profilu, který leží pod adresářem -profiles ve složce pojmenované podle -name. V tom souboru je třetí osoba, zaměřovače, značka na mapě a skill AI. Uprav ho při zastaveném serveru; server ho při ukončení zapisuje zpět.

Porty a připojení#

PortProtokolÚčel
2302UDPHerní provoz
2303UDPSteam query. S tím mluví prohlížeč a launcher
2304UDPSteam master, hlášení serveru
2305UDPRezervováno blokem portů
2306UDPBattlEye

Pravidlo zní, že Arma zabírá -port až -port + 4, všechno UDP, a posun herního portu posune celý blok. Proto plány Arma 3 na RE:NODE přicházejí s pěti přidělenými porty, ne jedním - s méně buď prohlížeč, nebo BattlEye potichu selže. Pokud potřebuješ víc, záložka Network porty přidává a odebírá. Porty herních serverů vysvětleně vysvětluje, proč vůbec existuje samostatný query port.

Hráči se připojují přes herní prohlížeč serverů, přes přímé připojení v Arma 3 Launcheru nebo přidáním adresy do oblíbených ve Steamu. Na launcher je dobré lidi odkazovat, protože umí načíst seznam modů serveru jedním kliknutím - pokud je nastavené steamProtocolMaxDataSize.

Mody, klíče a ověřování podpisů#

Mod je složka začínající @ obsahující adresář addons se soubory .pbo a obvykle adresář keys s jedním .bikey. Dvě pravidla pokrývají téměř všechna selhání připojení:

  1. Každý `.bikey` od každého modu v `-mod=` musí být zkopírován do složky `keys/` v kořenu serveru. S verifySignatures = 2 a chybějícím klíčem je klient odmítnut zprávou o nepodepsaném addonu, která pojmenovává soubor, ne mod.
  2. Seznam modů klienta musí odpovídat seznamu `-mod=` serveru, stejné mody, stejné verze. Výjimkou jsou mody v -serverMod= - ty se načítají jen na serveru a klienti je nepotřebují ani nevidí. Serverové admin nástroje, logování a výkonnostní mody patří tam.

Pořadí načítání je na tobě a záleží na něm. CBA_A3 se načítá před vším, co na něm závisí; ACE po CBA; mody map před mody, které ty mapy patchují. Arma vyřeší většinu závislostí sama, ale mod, který patchuje jiný a načte se první, se prostě neuplatní.

Na Linuxu je ještě jedna past, která lidi stojí večer: rozlišování velikosti písmen. Obsah z Workshopu se dodává se smíšenou velikostí písmen ve složkách a souborech a linuxový server nenajde Addons/ACE_Main.pbo, když konfigurace žádá addons/ace_main.pbo. Po každém stažení všechno převeď na malá písmena:

bash
$ find ./@ace -depth -name '*[A-Z]*' -execdir bash -c 'mv "$0" "${0,,}"' {} \;

Tři návyky drží seznam modů stabilní. Připínej verze: mod, který se uprostřed kampaně sám aktualizuje, kampaň ukončí, a workshop Arma nemá vlastní připínání verzí, takže připínání znamená nestahovat znovu. Zveřejni seznam někde, odkud ho hráči mohou zkopírovat, ideálně jako soubor presetu launcheru, místo popisu ve zprávě. A když se něco opravdu rozbije, co dělat, když update modu věci rozbije je kratší cesta než přestavovat seznam od nuly.

Creator DLC si zaslouží poznámku: server může provozovat terén z CDLC a hráči, kteří ho nevlastní, se mohou stále připojit, s omezeným vlastněným obsahem. Zda to pro tvoji misi funguje, záleží na tom, co mise používá.

basic.cfg a nastavení, která lidé kopírují bez měření#

basic.cfg obsahuje ladění sítě. Toto jsou zdokumentované výchozí hodnoty:

basic.cfg
MaxMsgSend = 128;MaxSizeGuaranteed = 512;MaxSizeNonguaranteed = 256;MinBandwidth = 131072;MaxBandwidth = 2147483647;MinErrorToSend = 0.001;MinErrorToSendNear = 0.01;MaxCustomFileSize = 0;class sockets { maxPacketSize = 1400; };

MaxMsgSend je počet zpráv, které server pošle za jeden cyklus simulace, a je to to, které má skutečný efekt: jeho zvýšení na 256 na obsazeném serveru s dobrou rezervou CPU snižuje desync a jeho zvýšení na serveru, kterému už CPU chybí, věci zhoršuje, protože zprávy se musejí sestavovat na stejném vlákně, které už je opožděné. MinErrorToSend a MinErrorToSendNear řídí, jak moc se objekt musí změnit, než se pošle aktualizace - jejich snížení vyhladí pohyb ve vzdálenosti za cenu šířky pásma a CPU.

Upřímný postoj k tomuto souboru je, že je to nejvíc kopírovaná a nejméně měřená konfigurace v Arma. Změň jednu hodnotu, odehraj session s běžícím #monitor 1 a zapiš si čísla. Pokud nevidíš rozdíl ve FPS serveru ani v hlášeném desyncu, vrať ji zpět.

Headless client#

AI je to, co žere čas snímku v dlouhé misi, a headless client je způsob, jak tu práci přesunout z procesu serveru. Je to druhá kopie stejné binárky, která se připojí k serveru jako hráč bez obrazovky, a mise mu předá vlastnictví skupin AI. Na stroji s volnými jádry je to rozdíl mezi přestřelkou ve třetí hodině, která se dá hrát, a takovou, která se plazí.

bash
$ ./arma3server_x64 -client -connect=127.0.0.1 -port=2302 \    -profiles=./hc -name=hc -nosound \    -mod="@CBA_A3;@ace;@RHSAFRF"
UDP 2302joins as a clienthands over groupsHráčiaž 40 klientůHeadless clientstejný strojOdlehčená AIskupiny, které vlastníServer Arma 3UDP 2302
Kde běží AI s headless clientem

Tři podmínky, které musí platit všechny:

  • headlessClients[] = {"127.0.0.1"}; a localClient[] = {"127.0.0.1"}; v server.cfg, aby mu server přiznal status headless a neomezenou šířku pásma.
  • Stejný seznam modů jako server, načtený přes -mod=.
  • Mise napsaná pro něj. Tohle je část, kterou většina návodů přeskakuje. Pokud mise výslovně nepřenáší skupiny AI na headless client, jeho připojení nezmění vůbec nic kromě počtu hráčů. Liberation, Antistasi a většina velkých trvalých misí ho podporuje; misi, kterou jsi napsal minulý týden, ne, dokud nepřidáš předání.

Stojí také slot a vlastní paměť, takže na malém plánu může headless client věci zhoršit tím, že celek přitlačí k limitu paměti. Dej mu vlastních 2-4 GB, než ho započítáš jako výhru.

Admin příkazy a ovládání mise#

Přihlas se z chatu přes #login <passwordAdmin>, a pak:

PříkazCo dělá
#login <password>Stát se adminem
#logoutVzdát se admina
#missionsVrátit se na obrazovku výběru mise
#mission <name>Načíst konkrétní misi
#restartRestartovat aktuální misi
#reassignRestartovat a poslat všechny zpět na výběr slotu
#monitor 1Každou sekundu vypsat do chatu FPS a CPS serveru
#userlistVypsat připojené hráče
#kick <name>Odpojit hráče
#lock / #unlockZastavit a povolit nová připojení
#shutdownZastavit server
#exec ban <name>Zabanovat hráče

#monitor 1 je diagnostika, na které záleží. Vypisuje FPS serveru a CPS (vyhodnocení podmínek za sekundu); sleduj ho během session a uvidíš přesně, kdy mise začne ztrácet. #monitor 0 ho zase vypne. Na všechno, co chceš uchovat, je záznamem log serveru pojmenovaný v logFile - logy, které stojí za uchování vysvětluje, které řádky stojí za ponechání a jak dlouho.

Řešení potíží#

„You cannot play/edit this mission; it is dependent on downloadable content.“ Klientovi chybí mod, který mise potřebuje, nebo ho má v jiné verzi. Chyba pojmenovává addon, ne mod, takže hledej název addonu.

Okamžité vyhození s chybou podpisu. V keys/ serveru chybí .bikey, nebo klient má upravené PBO. Přidej klíč; pokud to přetrvává jen u jednoho hráče, má poškozené stažení a měl by mod ověřit.

Launcher ukazuje jen část seznamu modů. steamProtocolMaxDataSize je příliš malé. Nastav ho na 1024.

Server je v prohlížeči, ale nikdo se nemůže připojit. Zkontroluj, že je otevřený celý blok UDP od -port do -port + 4, ne jen herní port.

FPS serveru se hodinu po začátku každé mise zhroutí. Téměř vždy mise, ne hostitel: neuklizené vraky, těla a upuštěné předměty, nebo skriptová smyčka. Zapni #monitor 1 a sleduj, kdy to klesne. Pokud to koreluje s událostí v misi, je to mise.

Mise se resetuje, kdykoli odejde poslední hráč. Chybí persistent = 1.

Mody se načtou na Windows a na Linuxu ne. Velikost písmen. Převeď složky modů a jejich obsah na malá písmena.

Server se zastaví bez crash logu. Paměť. Na RE:NODE se kontejner, který dosáhne svého limitu, zastaví a čistě restartuje, místo aby se nechal swapovat, což zevnitř hry vypadá přesně takhle; než budeš hledat chybu v enginu, zkontroluj graf paměti za celou session.

FAQ#

Kolik RAM potřebuje server Arma 3?

Tři až čtyři gigabajty pro vanillu s třiceti hráči, šest s CBA a ACE a osm až dvanáct pro plný balík RHS a CUP. Mody se načítají, ať je mise používá, nebo ne, takže seznam modů určuje spodní hranici a mise určuje, jak vysoko nad ni půjdeš.

Opravdu na rychlejším CPU záleží víc než na počtu jader?

Ano. Simulace běží na jednom vlákně a nedá se rozdělit, takže vyšší takt přímo zvyšuje FPS serveru, zatímco další jádra většinou stojí. Výjimkou je headless client, což je skutečný druhý proces a další jádro využije.

Proč se někteří hráči mohou připojit a jiní ne?

Jejich seznam modů nesedí. Stejné mody nestačí - musí sedět i verze, proto mod, který se automaticky aktualizoval u poloviny skupiny, rozbije druhou polovinu. Distribuuj preset launcheru, ne seznam jmen.

Potřebují klienti mody načtené přes -serverMod?

Ne, a o tom ten argument je. Serverové logování, admin a výkonnostní mody patří do -serverMod=, takže se nikdy neobjeví v seznamu, s nímž se hráč musí shodovat.

Můžu provozovat dva servery Arma 3 na jednom stroji?

Ano, pokud každý dostane vlastní blok pěti portů a vlastní adresář -profiles. Použij -port=2302 a -port=2312, ne sousední čísla, aby se bloky nemohly překrývat, a pamatuj, že každý server drží vlastní kopii seznamu modů v paměti.

Vyplatí se nastavovat headless client pro malou skupinu?

Jen pokud ho tvoje mise podporuje a už ti chybí FPS serveru. Na kooperativní misi pro dvanáct hráčů se šedesáti AI to server zvládne. Na trvalé misi se stovkami AI je to největší jednotlivé zlepšení, které je k dispozici, a nic jiného se mu nepřiblíží.


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