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í:
- 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áč.
- 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.
- Objekty a fyzika. Zničená vozidla, upuštěné zbraně a ragdolly se hromadí. Mise, která nikdy neuklízí, je mise, která zpomaluje.
- 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í | RAM | CPU | Disk |
|---|---|---|---|
| Vanilla, 20-30 hráčů, lehká AI | 3-4 GB | 2 rychlá jádra | 40 GB |
| CBA plus ACE, jedna mise, 40 hráčů | 6 GB | 2-3 rychlá jádra | 55 GB |
| Plný balík: CBA, ACE, RHS, CUP Terrains | 8-12 GB | 3+ rychlých jader | 80-100 GB |
| Headless client vedle serveru | přidej 2-4 GB | př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:
$ steamcmd +force_install_dir /home/arma/server +login anonymous \ +app_update 233780 validate +quitMody 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:
$ steamcmd +force_install_dir /home/arma/server +login your_account \ +workshop_download_item 107410 <item-id> +quitStaž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:
$ ./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"| Argument | Co dělá |
|---|---|
-port=2302 | Herní 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=empty | Při startu nenačítat terén. Rychlejší, lehčí |
-autoInit | Spustit 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=2 | Novější odhad šířky pásma. Stojí za zapnutí |
-filePatching | Povolí 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 [].
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
passwordAdminse š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
-autoInittaké 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.
templateje název složky mise nebo.pbovčetně přípony terénu, přesně tak, jak se objevuje vmpmissions. 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í#
| Port | Protokol | Účel |
|---|---|---|
2302 | UDP | Herní provoz |
2303 | UDP | Steam query. S tím mluví prohlížeč a launcher |
2304 | UDP | Steam master, hlášení serveru |
2305 | UDP | Rezervováno blokem portů |
2306 | UDP | BattlEye |
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í:
- 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 = 2a chybějícím klíčem je klient odmítnut zprávou o nepodepsaném addonu, která pojmenovává soubor, ne mod. - 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:
$ 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:
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í.
$ ./arma3server_x64 -client -connect=127.0.0.1 -port=2302 \ -profiles=./hc -name=hc -nosound \ -mod="@CBA_A3;@ace;@RHSAFRF"Tři podmínky, které musí platit všechny:
headlessClients[] = {"127.0.0.1"};alocalClient[] = {"127.0.0.1"};vserver.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říkaz | Co dělá |
|---|---|
#login <password> | Stát se adminem |
#logout | Vzdát se admina |
#missions | Vrátit se na obrazovku výběru mise |
#mission <name> | Načíst konkrétní misi |
#restart | Restartovat aktuální misi |
#reassign | Restartovat a poslat všechny zpět na výběr slotu |
#monitor 1 | Každou sekundu vypsat do chatu FPS a CPS serveru |
#userlist | Vypsat připojené hráče |
#kick <name> | Odpojit hráče |
#lock / #unlock | Zastavit a povolit nová připojení |
#shutdown | Zastavit 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.