RE:NODE

Návody13 min čtení

Nastavení serveru Arma 3: server.cfg, basic.cfg a mise

Každé nastavení server.cfg v Arma 3, které stojí za změnu, co skutečně dělá basic.cfg, rotace misí a obtížnost, admin příkazy a zprovoznění headless clientu.

6 čtenářů

Server Arma 3 se konfiguruje dvěma soubory s matoucím podobnými názvy a jedním přepínačem příkazové řádky pro každý. server.cfg, předávaný přes -config=, obsahuje všechno o serveru jako o místě, kam se lidé připojují: jeho název, hesla, adminy, rotaci misí a bezpečnostní nastavení. basic.cfg, předávaný přes -cfg=, obsahuje hrstku hodnot pro ladění sítě, které skoro nikdo nepotřebuje měnit. Obtížnost není v žádném z nich - přesunula se před lety do profilu serveru a pořád je to nejčastější důvod, proč se nějaké nastavení odmítá udržet.

Tento průvodce projde oba soubory klíč po klíči, pak rotaci misí, admin příkazy a headless client, což je největší jednotlivé zlepšení výkonu pro misi s velkým množstvím AI a zároveň to, co se nejčastěji nastavuje špatně. K načítání modů, klíčům a podpisům viz server Arma 3 a seznam modů, který se nenačte.

Spuštění serveru: příkazová řádka a porty#

Kompletní startovací řádek pro Linux vypadá takto:

bash
$ ./arma3server_x64 -port=2302 \    -config=cfg/server.cfg \    -cfg=cfg/basic.cfg \    -profiles=profiles -name=server \    -mod="@cba_a3;@ace" -serverMod="@server_only" \    -world=empty -autoInit -filePatching

Části, na kterých záleží:

  • `-config=` je server.cfg a `-cfg=` je basic.cfg. Je to naopak, než by kdokoli hádal, a jejich záměna vytvoří server, který se spustí, ignoruje tvoje nastavení a nic ti neřekne.
  • `-profiles=` a `-name=` rozhodují, kam se zapisuje profil serveru. Všechno o obtížnosti žije v souboru pod tímto adresářem, pojmenovaném podle -name.
  • `-world=empty` zabrání serveru načítat při startu Altis. Šetří paměť i čas startu a není důvod to nepoužít.
  • `-mod=` je seznam, který musí mít i klienti. `-serverMod=` načítá jen server, pro věci jako serverový anti-cheat nebo logovací mod. Dát do -mod= mod jen pro server nutí každého hráče, aby si ho zbytečně stáhl.
  • `-autoInit` spustí misi bez čekání na hráče a aby bylo užitečné, potřebuje persistent = 1 v server.cfg.
  • `-filePatching` povolí nerozbalené složky misí, což se páruje s allowedFilePatching v konfiguraci.

Instalace samotného serveru vyžaduje účet Steam: dedikovaný server Arma 3 a hlavně jakýkoli mod z Workshopu musí pocházet z účtu, který hru vlastní, což anonymní SteamCMD neumí. Na RE:NODE se server vytvoří, jakmile projde platba, a instalace počká na záložce Setup na tyto přihlašovací údaje, uložené tak, jak jsi je zadal - proto použij záložní účet místo hlavního. SteamCMD vysvětleně obecně pokrývá stranu stahování.

Porty tvoří blok začínající u -port:

PortProtokolÚčel
2302UDPHerní provoz a hlas
2303UDPSteam query, port, se kterým mluví prohlížeč
2304UDPSteam master
2305UDPRezervováno pro hlas
2306UDPBattlEye

Změna -port posune celý blok, takže dva servery na jednom stroji chtějí mezi sebou aspoň 100 portů. Plány Arma 3 na RE:NODE zahrnují právě z tohoto důvodu pět přidělených portů a další lze přidat na záložce Network. Pokud server běží, ale nikdo ho nemůže najít, první podezřelý je query port - viz porty herních serverů vysvětleně.

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

Identita a přístup:

server.cfg
hostname = "Our Arma 3 server";password = "";passwordAdmin = "a-long-random-string";serverCommandPassword = "a-different-long-string";maxPlayers = 40;admins[] = {"76561198000000000"};motd[] = {"Rules in the Discord", "Teamkilling is a ban"};motdInterval = 5;logFile = "server_console.log";

password je heslo pro připojení a na veřejném serveru je prázdné. passwordAdmin je to, co píšeš za #login, a mělo by být dlouhé, protože kdokoli, kdo ho má, může restartovat tvoji misi. serverCommandPassword je třetí, samostatné heslo pro serverové příkazy zadávané klientem a potřebuje ho headless client. admins[] uvádí UID hráčů, kteří dostanou admin práva bez jakéhokoli přihlášení, což je lepší způsob, jak spravovat štáb na serveru, kde je jich víc.

Bezpečnost:

config
verifySignatures = 2;BattlEye = 1;kickDuplicate = 1;allowedFilePatching = 1;requiredBuild = 0;onUnsignedData = "kick (_this select 0)";onHackedData = "kick (_this select 0)";onDifferentData = "";

verifySignatures = 2 je nastavení, které dělá z klíčů modů věc, na které záleží: každý mod, který klient načte, musí být podepsaný klíčem přítomným ve složce keys/ serveru. Je to také důvod, proč vzniká polovina všech hlášení „nemůžu se připojit“, a vypnutí, aby přestala, je přesně špatná oprava. allowedFilePatching bere 0 pro nikoho, 1 jen pro headless clienty a 2 pro všechny; 1 je správná odpověď na serveru, který používá headless client a nic jiného.

Hlasování:

config
voteMissionPlayers = 3;voteThreshold = 0.33;allowedVoteCmds[] = {};

voteThreshold nad 1 hlasování úplně vypne, což většina organizovaných skupin chce. Nechat výchozí hodnotu na veřejném serveru znamená, že tři lidé mohou odhlasovat tvoji misi pryč.

Chování sítě:

config
disconnectTimeout = 90;maxdesync = 150;maxping = 500;maxpacketloss = 50;kickClientsOnSlowNetwork[] = {0,0,0,0};

Čtyři čísla v kickClientsOnSlowNetwork odpovídají desyncu, pingu, ztrátě paketů a kontrole „nereaguje“: 0 varuje, 1 vyhazuje. Vyhazovat podle pingu je lákavé a většinou chyba, protože hodnota pingu v Arma skáče při načítání a při vytíženém snímku. Nejdřív varuj, týden sleduj log a pak se rozhodni. Latence, jitter a ztráta paketů ukazuje, jak odlišit skutečně špatné připojení od vytíženého.

Perzistence a hlas:

config
persistent = 1;autoInit = 1;timeStampFormat = "short";disableVoN = 0;vonCodecQuality = 30;vonCodec = 1;

persistent = 1 nechá misi běžet, když odejde poslední hráč, což je to, co potřebuje server pro kampaň a co nepotřebuje server pro scrimy. autoInit = 1 spustí první misi při bootu místo čekání, až se někdo připojí, a bez persistent nedělá vůbec nic.

Obtížnost se přesunula ze server.cfg#

Od Arma 3 1.58 se obtížnost nekonfiguruje v server.cfg. Konfigurace jen pojmenovává preset pro každou misi: Recruit, Regular, Veteran nebo Custom. Skutečná nastavení žijí v profilu serveru, souboru .Arma3Profile zapsaném pod adresářem -profiles ve složce pojmenované podle -name.

server.Arma3Profile
class DifficultyPresets{    class CustomDifficulty    {        class Options        {            reducedDamage = 0;            groupIndicators = 0;            friendlyTags = 0;            enemyTags = 0;            detectedMines = 0;            commands = 1;            waypoints = 1;            weaponInfo = 2;            stanceIndicator = 1;            staminaBar = 1;            weaponCrosshair = 0;            visionAid = 0;            thirdPersonView = 0;            cameraShake = 1;            scoreTable = 1;            deathMessages = 0;            vonID = 1;            mapContent = 0;            autoReport = 0;            multipleSaves = 0;        };        aiLevelPreset = 3;    };    class CustomAILevel    {        skillAI = 0.5;        precisionAI = 0.3;    };};

Dvě pasti. Soubor neexistuje, dokud server aspoň jednou nepoběžel s -name=, takže na čerstvé instalaci není co upravovat až do prvního startu. A server profil při korektním vypnutí přepisuje, takže úprava provedená za běhu serveru se zahodí ve chvíli, kdy ho řádně zastavíš. Nejdřív zastav, pak uprav, pak spusť.

aiLevelPreset = 3 vybírá vlastní úroveň AI definovanou pod ním. precisionAI je ta, kterou stojí za to snížit: při vysokých hodnotách AI střílí s konzistencí, kterou žádný lidský zápas nepřežije, a většina stížností, že je Arma nespravedlivá, je hodnota přesnosti, kterou nikdo nesnížil.

Mise, rotace a perzistence#

Mise jsou soubory .pbo v mpmissions/, pojmenované missionName.worldName. Rotace se deklaruje na konci server.cfg:

server.cfg
class Missions{    class Mission_01    {        template = "co40_liberation.Altis";        difficulty = "Custom";        class Params {};    };    class Mission_02    {        template = "tvt30_assault.Malden";        difficulty = "Veteran";    };};missionWhitelist[] = {"co40_liberation.Altis", "tvt30_assault.Malden"};

template je název souboru pbo bez přípony, včetně světa - co40_liberation.Altis, ne co40_liberation. Špatně zadaná hodnota je důvod, proč se mise v seznamu neobjeví. Server hraje třídy popořadě a po skončení poslední se vrací k první.

class Params nastavuje parametry mise, které si definuje sama mise - denní dobu, pravidla respawnu, počet AI. Názvy pocházejí z vlastního description.ext mise, takže se liší u každé mise a neplatný se ignoruje, místo aby byl nahlášen. Whitelist misí omezuje, co lze vybrat nebo odhlasovat, což je důležité na serveru, kde může být kdokoli odhlasován adminem.

Pro trvalou kampaň je celou rotací jedna mise plus persistent = 1 a autoInit = 1: server spustí misi při bootu, drží ji, dokud nikdo není online, a jede dál. Pro skupinu hrající po sessions nech persistent vypnuté, aby mise čistě skončila, když všichni odejdou, a další vyber přes #missions.

basic.cfg a mýtus ladění sítě#

basic.cfg je místo, kde rady o Arma z internetu umírají. Typický soubor:

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

Tady je nepříjemná verze. Výchozí hodnoty jsou správné pro téměř každý server, hodnoty kolující v příspěvcích na fórech byly vyladěné pro konkrétní stroj na konkrétním připojení kolem roku 2014 a vložit cizí soubor je stejně pravděpodobně škodlivé jako užitečné.

Dvě, na které stojí za to sáhnout:

  • `MaxCustomFileSize = 0` blokuje vlastní obličeje hráčů a zvukové soubory. Na veřejném serveru je to jasná výhra: odstraní to kategorii otravného obsahu a malou útočnou plochu.
  • `MaxMsgSend` řídí, kolik zpráv server pošle za cyklus simulace. Jeho zvýšení může snížit desync, když má server rezervu CPU, a věci zhorší, když ji nemá, protože se zprávy místo toho řadí do fronty. Změň ho o jeden krok, nech jednu session běžet #monitor a zapiš, co se stalo.

maxPacketSize nech být, pokud neznáš path MTU, což u hostovaného serveru neovládáš.

Admin příkazy#

Přihlas se z herního chatu přes #login <passwordAdmin>, nebo buď uveden v admins[] a přihlášení přeskoč.

PříkazCo dělá
#login <password>Stát se adminem, #logout k ukončení
#missionsOtevře obrazovku výběru mise
#restartRestartuje aktuální misi
#reassignRestartuje a pošle všechny zpět na výběr slotu
#shutdownZastaví proces serveru
#kick <name>Odpojí hráče
#exec ban <name>Zabanuje, zápis do seznamu banů
#lock, #unlockZastaví a povolí nová připojení
#userlistVypíše připojené hráče a jejich UID
#monitor <seconds>Vypisuje FPS serveru a počty objektů, 0 zastaví
#vote admin <name>Hráči odhlasují někoho za admina, pokud je to povoleno

#monitor 5 je nejužitečnější věc v tomto seznamu. Každých pět sekund vypíše do chatu snímkovou frekvenci serveru a FPS serveru je číslo, které rozhoduje, zda se mise dobře hraje. Zdravý server sedí blízko svého stropu. Pod zhruba 20 se AI začíná viditelně chovat špatně - pomalé reakce, pozdní hledání cesty, skupiny, které stojí na místě. Pod 10 nefunguje nic a žádné síťové nastavení to nezachrání. To číslo klesá s rostoucím počtem AI, k čemuž je headless client. Obecnější verze tohoto argumentu je v co tick rate opravdu znamená.

Existuje také vlastní RCon BattlEye, konfigurovaný v BEServer_x64.cfg ve složce BattlEye pomocí RConPassword a RConPort. Připojují se k němu externí admin nástroje a jeho protokol není šifrovaný, takže s portem zacházej jako s lokálním a s heslem jako s tajemstvím, které se nikdy nesmí znovu použít. Bezpečné používání RCON pokrývá obecný případ.

Headless clienty#

Simulace Arma je převážně jednovláknová a na dlouhé misi je to AI, kdo nakonec toto vlákno nasytí. Headless client je druhý proces Arma, který se připojí k serveru jako klient bez grafiky, převezme vlastnictví skupin AI, které mu mise předá, a simuluje je na vlastním vlákně. Na misi postavené pro něj může přesun padesáti skupin AI ze serveru rozhodnout mezi přestřelkou ve třetí hodině, která se dá hrát, a takovou, která se plazí.

Strana serveru jsou tři věci:

server.cfg
headlessClients[] = {"127.0.0.1"};localClient[] = {"127.0.0.1"};serverCommandPassword = "a-different-long-string";

headlessClients[] říká serveru, které adresy se smějí připojit jako headless. localClient[] je označí jako lokální, čímž je vyjme z limitů šířky pásma určených pro hráče na domácích připojeních - bez toho je headless client škrcený jako hráč a nepomáhá. Obě berou adresu loopbacku, když headless client běží na stejném stroji, což by měl.

Strana klienta je stejná binárka s -client:

bash
$ ./arma3server_x64 -client -connect=127.0.0.1 -port=2302 \    -password="" -mod="@cba_a3;@ace" \    -profiles=profiles -name=HC -world=empty

Seznam modů musí přesně odpovídat serverovému. Heslo je heslo pro připojení k serveru, ne adminské.

A pak část, kterou většina návodů přeskakuje: mise ho musí podporovat. Headless client nedělá nic, pokud mise neobsahuje slot headless clientu a kód, který na něj po připojení přenáší skupiny AI. Frameworky zaměřené na dlouhé mise to obecně mají; mise z workshopu bez zmínky v popisu obecně ne, a provozovat proti ní headless client tě stojí paměť a nic nezíská.

Dvě upřímná upozornění pro hostované servery. Headless client je druhý proces Arma, takže chce vlastní jádro a pár gigabajtů paměti. Na plánu s pevným limitem CPU - jeden kontejner na server, škrcený na podíl, který sis koupil - čerpá headless client ze stejného přídělu, takže pomůže jen tehdy, když je uvnitř tvého limitu skutečně nevyužité CPU, ne nevyužitá jádra na stroji. A pokud je headless client při připojení odmítnut, zkontroluj nejdřív headlessClients[] a potom seznam modů; tyto dvě věci tvoří téměř všechny případy. CPU vs RAM u herních serverů stojí za přečtení, než se rozhodneš, na jaký limit opravdu narážíš.

Řešení potíží#

Server se neobjevuje v prohlížeči. Query port Steamu, -port plus jedna, je zavřený nebo používaný. Připojení přes IP funguje, zatímco prohlížeč ne, což je rychlý způsob, jak to potvrdit.

Moje změny v server.cfg nic nedělají. -config= a -cfg= jsou prohozené, nebo je špatná cesta a server běží na výchozích hodnotách. Startovací log pojmenovává soubor, který načetl.

Nastavení obtížnosti se pořád vrací. Upravil jsi profil za běhu serveru a při vypnutí se přepsal. Zastav server, uprav, spusť.

Mise není v seznamu. V hodnotě template chybí název světa, pbo není v mpmissions/, nebo ji missionWhitelist[] vylučuje.

Hráči dostávají „session lost“ na načítací obrazovce. Nesoulad modů nebo podpisů. S verifySignatures = 2 musí být klíč v keys/ a klient musí mít stejnou verzi modu, ne jen stejný mod.

Mody se načtou na Windows a na Linuxu ne. Linux rozlišuje velikost písmen a složky modů a názvy pbo v Arma mají často smíšenou velikost. Převeď složku modu a její obsah na malá písmena, nebo použij nástroj pro stahování, který to udělá za tebe.

Dvě hodiny je všechno v pořádku a pak se to plazí. Počet AI. Spusť #monitor 5, sleduj, jak FPS serveru klesá, a buď omez AI, kterou mise spawnuje, nebo nastav headless client.

`autoInit` nespouští misi. Potřebuje persistent = 1. Týdenní plánovaný restart se na trvalém serveru pořád vyplatí - viz restartovací plány, které pomáhají.

FAQ#

Jaký je rozdíl mezi -config a -cfg v Arma 3?

-config= načítá server.cfg, který obsahuje název serveru, hesla, adminy, bezpečnostní nastavení a rotaci misí. -cfg= načítá basic.cfg, který obsahuje ladění sítě. Pojmenování je proti intuici a jejich záměna ti potichu dá výchozí server.

Kde nastavím obtížnost serveru Arma 3?

V profilu serveru, ne v server.cfg. Konfigurace jen pojmenovává preset pro každou misi; hodnoty za Custom žijí v souboru .Arma3Profile pod adresářem -profiles. Uprav ho při zastaveném serveru, jinak se přepíše.

Kolik hráčů zvládne server Arma 3?

maxPlayers nastavuje strop, ale skutečným limitem je počet slotů v misi a CPU. Šedesát hráčů na dobře postavené misi je běžné; stejný server umírá už při třiceti, pokud mise spawnuje několik stovek AI, protože právě AI spotřebovává čas snímku.

Potřebuju headless client?

Jen pokud ho tvoje mise podporuje a AI je tvé úzké místo. Spusť #monitor 5 ve špatné chvíli: pokud FPS serveru klesá, zatímco CPU je na stropě a mise má hodně AI, headless client pomůže. Pokud mise nemá slot pro headless, nedělá nic.

Které porty server Arma 3 potřebuje?

UDP 2302 pro hru, 2303 pro Steam query, 2304 pro Steam master, 2305 rezervovaný pro hlas a 2306 pro BattlEye. Při změně -port se posouvají jako blok.

Můžu změnit basic.cfg, abych opravil desync?

Zřídka. Desync v Arma je téměř vždy to, že serveru dochází čas snímku, ne že síti dochází šířka pásma. Nejdřív oprav počet AI, změř pomocí #monitor a teprve potom upravuj MaxMsgSend po jednom kroku.


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