RE:NODE

Návody12 min čtení

Konfigurace serveru Holdfast: Nations At War

Nastavení serveru Holdfast: Nations At War: instalace, soubor serverconfig, porty, bloky rotace map, herní režimy, hlasování o mapě, módy, automatické restarty a rc admin.

1 čtenář

Dedikovaný server Holdfast: Nations At War se zdarma stahuje přes SteamCMD (app id 1424230), běží na Windows i Linuxu a všechno kolem něj je v jednom textovém konfiguračním souboru: nahoře blok nastavení pro celý server, pak jeden blok !map_rotation start ... !map_rotation end pro každé kolo v rotaci, který určuje mapu, herní režim a pravidla daného kola. Server potřebuje tři porty - server_port (výchozí 20100), steam_communications_port (8700) a steam_query_port (27000) - a správa probíhá ve hře přes konzoli na F1 příkazem rc login a heslem správce ze souboru. Než začneš soubor upravovat, zkopíruj si dodávaný serverconfig_default.txt do vlastního souboru, protože aktualizace hry výchozí soubor přepisují.

Tento návod prochází soubor odshora dolů: instalaci a spuštění, globální nastavení, bloky rotace a pravidla jednotlivých kol, na kterých záleží, hlasování o mapě, módy, vestavěný plánovač restartů a konzoli správce.

Jak funguje server Holdfast#

Holdfast je hra na Unity a server je ta samá hra spuštěná bez grafiky. Při startu načte konfigurační soubor, odehrává bloky rotace popořadě (nebo nechá hráče mezi nimi hlasovat) a pořád dokola. Každý blok rotace je úplná definice jednoho kola: mapa, režim, která frakce útočí a která brání, délka kola, počet životů (tickets), pravidla spawnu, friendly fire, limity tříd. Stejná mapa se může objevit víckrát s různými pravidly.

Z toho plynou dvě věci, které je dobré vědět dřív, než začneš:

  • Je jen jeden soubor a je dlouhý. Nastavení celého serveru i všech kol je pohromadě. Překlep v jednom bloku rozbije dané kolo a zjistíš to, až rotace k němu dojde.
  • Pravidla se nastavují po kolech, ne po serveru. Friendly fire, časovače spawnu a limity tříd se nastavují uvnitř každého bloku rotace. Pokud chceš stejné pravidlo všude, musí být v každém bloku. Každý nový blok vytvoř kopií ověřeného bloku.

Holdfast nemá externí protokol RCON v tom smyslu jako hry na enginu Source. Správa probíhá přes konzoli ve hře, takže správce musí být k serveru připojený, aby ho mohl spravovat.

Požadavky a využití zdrojů#

Servery Holdfast zvládají velké počty hráčů - bitvy v liniích se stovkami hráčů jsou smyslem hry - a zátěž serveru roste s počtem hráčů, jízdy, dělostřelectva a na námořních mapách i lodí.

NastaveníRAMCPUPoznámky
Malá komunita, 30-50 hráčů3-4 GB2 jádraArmy Battlefield, mírné dělostřelectvo
Bitva v liniích, 100-150 hráčů4-6 GB3 jádraBěžná velikost veřejných serverů
Námořní bitvy, velké lodě4-6 GB3 jádraFyzika lodí a spousta děl
Eventové servery nad 1506-8 GB3-4 rychlá jádraZměř si to, než slíbíš počet

Jsou to pracovní rozsahy, ne oficiální čísla, a upřímná rada zní: než veřejně oznámíš počet slotů, otestuj zátěž se svou komunitou. U vytíženého serveru záleží na taktu procesoru; jak poznat, který zdroj opravdu chybí, najdeš v článku CPU vs RAM u herních serverů. Disk je nenáročný - instalace má pár gigabajtů a s módy roste.

Instalace a spuštění#

bash
$ steamcmd +force_install_dir /home/holdfast/server +login anonymous \    +app_update 1424230 validate +quit

Instalace obsahuje dva spouštěcí skripty, LaunchServer.sh pro Linux a LaunchServer.ps1 pro Windows, a vzorový serverconfig_default.txt. Skripty spouštějí server bez grafiky s argumenty zhruba ve tvaru -startserver -batchmode -nographics -serverheadless a přes -serverConfigFilePath ho nasměrují na konfigurační soubor.

Dvě věci udělej před prvním ostrým startem:

  1. Zkopíruj konfiguraci. cp serverconfig_default.txt serverconfig_myserver.txt a uprav svou kopii. Výchozí soubor se s každou aktualizací hry nahradí.
  2. Zkopíruj i spouštěcí skript a změň v něm -serverConfigFilePath na svůj soubor. Dodávaný skript se při aktualizaci také přepisuje.

Pro linuxové hostitele existuje komunitní Docker image (cm2network/holdfastnaw), porty se nastavují přes proměnné prostředí. V hostingovém panelu se skriptů nedotýkáš; cesta ke konfiguraci a porty jsou startovací proměnné a konfigurační soubor upravuješ ve správci souborů. Článek SteamCMD vysvětleno obecně popisuje validate a aktualizační skripty.

Globální nastavení: identita, porty a počet hráčů#

Horní část souboru obsahuje nastavení platná pro celý server. Řádky mají tvar <nastavení> <hodnota>, komentáře začínají znakem # a prázdné řádky se ignorují.

serverconfig_myserver.txt
# Identityserver_name [EU] 33rd Line Battles | Sundays 19:00server_welcome_message Follow your officer. Rules on Discord.server_region europeserver_passwordserver_admin_password a-long-random-admin-password# Ports - unique per instance on one machineserver_port 20100steam_communications_port 8700steam_query_port 27000# Players and population bracketsmaximum_players 150population_low_min_players 30population_medium_min_players 60population_high_min_players 100# Behaviourmap_rotation_start_randomise falseinclude_officer_only_chat trueinclude_sergeants_in_officer_chat true
NastaveníCo dělá
server_nameNázev v seznamu serverů
server_welcome_messageZpráva zobrazená hráčům při připojení
server_regionZnačka regionu pro filtrování v seznamu, např. europe, usa, usaeast, usawest, australia
server_passwordHeslo pro připojení. U veřejného serveru prázdné
server_admin_passwordHeslo pro rc login
server_portHerní port
steam_communications_portKomunikační port Steamu
steam_query_portDotazovací port Steamu - z něj seznam serverů čte název a počet hráčů
maximum_playersMaximální počet hráčů
population_*_min_playersPrahy, které určují nízkou, střední a vysokou populaci
map_rotation_start_randomiseZačít rotaci na náhodném bloku
server_intro_title, server_intro_bodyOkno zobrazené při připojení, vhodné na pravidla
network_broadcast_modeSíťový profil Standard nebo Competitive

Prahy populace stojí za to nastavit záměrně. Řada nastavení kol a hlasování o mapě má varianty pro nízkou, střední a vysokou populaci, takže server může například nabízet jen malé mapy, když je téměř prázdný, a velké, když je plný. Je to jedna z lepších vlastností souboru, ale funguje jen tehdy, když prahy odpovídají skutečné návštěvnosti.

Značka regionu je jen štítek pro seznam serverů. Nastav ji podle toho, kde server skutečně běží: server v Německu je europe. Hráči podle ní filtrují kvůli pingu, takže špatný region plodí spoustu stížností na lagy.

Porty a připojení#

PortVýchozíÚčel
server_port20100Herní provoz
steam_communications_port8700Komunikace se Steamem
steam_query_port27000Dotazy Steamu - informace v seznamu serverů a počet hráčů

Všechny tři musí být dostupné přes UDP a všechny tři musí být unikátní pro každou instanci, pokud na jednom stroji běží víc serverů. Dotazovací port umožňuje seznamu serverů zobrazit počet hráčů; server se zablokovaným dotazovacím portem může běžet bez problémů a přesto se tvářit jako prázdný nebo se v seznamu vůbec neobjeví. Proč hry rozdělují provoz tímto způsobem, vysvětluje článek Porty herních serverů vysvětleny.

Bloky rotace map#

Každé kolo v rotaci je blok mezi !map_rotation start a !map_rotation end. Příklady dodávané se serverem (a složka example_map_rotations v novějších buildech) ukazují kompletní bloky pro každý režim; začni z nich, ne z hlavy, protože názvy map jsou interní identifikátory a musí sedět přesně.

serverconfig_myserver.txt
!map_rotation startmap_name PalisadeArenagame_mode ArmyBattlefieldround_time_minutes 30faction_balancing trueallow_faction_switching falseallow_midround_spawning truefriendly_fire truespawn_immunity_timer 3!map_rotation end!map_rotation startmap_name Azuregame_mode NavalBattlefieldround_time_minutes 25max_tickets 2000max_player_respawns -1faction_balancing true!map_rotation end

Herní režimy, které použiješ nejčastěji:

RežimCo to je
ArmyBattlefieldBitva na otevřeném terénu, základ bitev v liniích
ArmyConquestPozemní bitva o záchytné body s tickety
ArmySiegeÚtočníci dobývají opevněnou pozici
CoastalSiegeLodě a pozemní síly útočí na pobřežní pevnost
NavalBattlefieldBitva lodí proti sobě
NavalConquestNámořní bitva o záchytné body
FrontlinesOffensiveRežim Frontlines se zapnutým frontlines_mode

Sada režimů a map závisí na verzi hry a DLC a spolehlivým seznamem jsou ukázkové rotace v instalaci. Nastavení kol, která stojí za to znát:

  • `faction_attacking` a `faction_defending` určují strany u asymetrických režimů, jako jsou obléhání. Tam, kde je režim nepotřebuje, je vynech.
  • `round_time_minutes` - délka kola. -1 znamená bez časového limitu, což se hodí pro arény a tréninkové mapy.
  • `max_tickets`, `reinforcements_per_faction`, `max_player_respawns` - jak dlouho může každá strana bojovat. -1 u max_player_respawns znamená neomezeně.
  • `faction_balancing` a `allow_faction_switching` - u organizovaných bitev v liniích zapnuté vyvažování a vypnuté přepínání brání tomu, aby se regimenty nahromadily na jedné straně.
  • `friendly_fire` - u většiny komunit bitev v liniích zapnuté, protože je součástí disciplíny. damage_split vrací útočníkovi část poškození způsobeného vlastnímu týmu.
  • `spawn_immunity_timer` - ochrana po spawnu v sekundách, maximálně pět.
  • `allow_midround_spawning` - zda se mohou opozdilci připojit do rozehraného kola.
  • `class_system_orders` - systém rozkazů důstojníků.
  • `admin_console_allowed` - zda v daném kole funguje konzole správce.

Přepsání pravidel po kolech jde ještě dál: limity tříd na jednotlivých spawn bodech přes spawn_override, výchozí zbraně, rozmístění dělostřelectva, spawny lodí a životy lodí v námořních kolech. Jsou to mocné a upovídané možnosti. Přidávej je po jednom bloku a každé kolo vyzkoušej před eventem, ne během něj.

Hlasování o mapě#

Místo pevné rotace může server nechat hráče hlasovat mezi kandidáty na konci každého kola. Hlavní přepínače:

code
map_voting_enabled truemap_voting_duration 20map_voting_max_choices 3map_voting_allow_same_map falsemap_voting_history_count 4map_voting_include_random_choice true

map_voting_history_count zabrání tomu, aby se právě odehraná mapa nabízela znovu po daný počet kol, a má varianty podle populace (_verylow, _low, _medium, _high), takže téměř prázdný server může své malé mapy recyklovat rychleji. Klíče population_*_playable uvnitř bloků rotace označují, která kola jsou vhodná při jaké populaci, a právě tak se hlasování vyhne tomu, aby dvanácti lidem nabídlo obléhání pro 150 hráčů.

Hlasování se hodí na veřejné servery. Organizované komunity, které pořádají plánované eventy, obvykle chtějí pevnou rotaci a hlasování vypínají.

Módy, plánované restarty a logování na Discord#

Módy pocházejí ze Steam Workshopu. Konfigurace je uvádí podle Workshop id:

code
mods_installed 1234567890mods_installed_server_only 2345678901

mods_installed je pro módy, které potřebuje server i klienti; mods_installed_server_only pro ty, které běží jen na serveru. Načítání řídí klíče jako load_mod, load_mod_client_only a load_mod_server_only a mod_variable předává módu nastavení. Uvedená id jsou jen zástupná a stránka módu na Workshopu říká, které klíče potřebuje. Jako u každé hry se klientské módy musí shodovat mezi serverem a hráči a aktualizace hry může mód rozbít, dokud ho autor neopraví - viz módy ze Steam Workshopu na dedikovaných serverech a co dělat, když aktualizace módu něco rozbije.

Plánované restarty a vypnutí jsou vestavěné přímo v konfiguraci, což je neobvyklé:

code
server_autorestart_interval_minutes 1440server_autorestart_overtime_minutes 15server_autorestart_broadcasted_message Server restarts at the end of this round.server_autorestart_broadcasted_message_interval_minutes 5

Hodnota overtime nechá rozehrané kolo doběhnout před restartem. Používej buď tohle, nebo plán v panelu, ne obojí; dva restartovací systémy na různých hodinách dělají z večerů zmatek. Plán v panelu má tu výhodu, že dokáže předem udělat backup. Jak často restartovat, rozebírá článek Plány restartů, které pomáhají.

Logování na Discord událostí správců se nastavuje klíči discord_webhook_warning_* a discord_webhook_banmute_*, které posílají varování, bany a mute do webhooků vytvořených v Discordu. Stojí za to to zapnout: tvůj tým tak má záznam moderátorských akcí a nikdo nemusí ručně kopírovat logy. Vytvoření webhooku vysvětluje článek Discord webhooky pro stav serveru; token ber jako tajemství.

Pořádání eventu s bitvou v liniích#

Většina komunit kolem Holdfastu existuje proto, aby pořádala organizované bitvy v liniích: regimenty se přihlásí, velí důstojníci a večer běží podle plánu. V konfiguračním souboru se rozhoduje, jestli tuto disciplínu podpoříš, nebo podkopeš.

  1. Pro event použij pevnou rotaci. Vypni hlasování o mapě a vypiš kola eventu popořadě. Hráči mají vědět dřív, než se připojí, jaká mapa a režim přijdou další.
  2. Zamkni strany. faction_balancing true a allow_faction_switching false drží regimenty tam, kam je zařadili organizátoři. U asymetrických režimů nastav faction_attacking a faction_defending výslovně.
  3. Řiď třídy. spawn_override omezuje, kolik jednotek dané třídy se může objevit na jednom bodě. Bitvy v liniích stojí a padají na tom, aby střelci, jízda a dělostřelectvo byli v poměru k liniové pěchotě; limity nastav v každém bloku a nespoléhej na dobrou vůli.
  4. Rozhodni se o opozdilcích. allow_midround_spawning false je u eventů běžné, aby bitvu vedli ti, kdo jsou přítomní od začátku. Veřejné servery to chtějí zapnuté.
  5. Dej důstojníkům jejich kanál. include_officer_only_chat true dává důstojníkům vlastní kanál a include_sergeants_in_officer_chat rozhoduje, zda jsou v něm i poddůstojníci.
  6. Dej pravidla tam, kde je lidé uvidí. server_intro_title a server_intro_body zobrazí okno při připojení. Použij ho na tři pravidla, za která se vyhazuje, ne na celý řád.

Měj samostatný konfigurační soubor pro večery s eventem a jiný pro veřejný server mezi eventy a přepínej mezi nimi tak, že spuštění nasměruješ na druhý soubor a restartuješ. Je to mnohem bezpečnější než každý týden upravovat jeden soubor tam a zpět a chyba udělaná při přípravě nedělního eventu pak nemůže rozbít úterní veřejný server. Před každou změnou oba soubory zálohuj.

Příkazy správce#

Správci otevřou konzoli klávesou F1 ve hře a přihlásí se:

code
rc login a-long-random-admin-passwordrc helprc mapRotation 2

Každý příkaz správce má prefix rc. rc help vypíše příkazy dostupné ve tvé verzi, což je rozhodující seznam - sada se aktualizacemi rozrostla. Vyhazování, banování, mute i oznámení jsou příkazy rc a rc mapRotation <n> skočí na číslovaný blok v rotaci, čímž správci posunou event dál, když kolo doběhlo.

Protože heslo správce umožňuje všechno, zacházej s ním stejně pečlivě jako s heslem RCON (důvody najdeš v článku RCON bezpečně): dlouhé, unikátní, sdílené s co nejméně lidmi a změněné, když člen týmu odejde. V konfiguraci nejsou účty jednotlivých správců, takže sdílené heslo je celý bezpečnostní model.

Řešení potíží#

Server se po aktualizaci vrátil s výchozím nastavením. Spouštěl jsi serverconfig_default.txt nebo dodávaný spouštěcí skript. Používej vlastní kopie.

Server běží, ale není v seznamu nebo nezobrazuje hráče. Dotazovací port je zavřený nebo koliduje s jinou instancí.

Jedno kolo v rotaci selhává nebo načte něco jiného. V tom bloku je špatně napsaný map_name nebo game_mode. Porovnej s ukázkovými rotacemi.

Dva servery na jednom stroji se perou. Všechny tři porty se musí mezi instancemi lišit.

Hráči vidí kolo s prohozenými stranami. U asymetrického režimu chybí faction_attacking a faction_defending nebo jsou prohozené.

`rc login` selhává. Heslo neodpovídá server_admin_password, nebo je řádek zakomentovaný znakem #.

Módy se hráčům nenačítají. Klientský mód je uvedený jako jen serverový, nebo mají hráči jinou verzi.

FAQ#

Kde je konfigurační soubor serveru Holdfast?

V instalační složce serveru jako serverconfig_default.txt. Zkopíruj ho do vlastního souboru, nasměruj na kopii spouštěcí skript nebo startovací proměnnou a upravuj ji - aktualizace výchozí soubor přepisují.

Které porty server Holdfast potřebuje?

server_port (výchozí 20100), steam_communications_port (8700) a steam_query_port (27000), všechny přes UDP a všechny unikátní pro každou instanci na stejném stroji.

Jak se na svém serveru Holdfast stanu správcem?

Nastav v konfiguraci server_admin_password, restartuj, připoj se, stiskni F1 a napiš rc login a za ním heslo. rc help pak vypíše příkazy správce.

Mohu změnit friendly fire pro celý server najednou?

Jen tak, že nastavíš friendly_fire v každém bloku rotace. Pravidla platí po kolech, takže nastavení zkopíruj do každého bloku, který používáš.

Má Holdfast RCON?

Externí protokol RCON ne. Správa probíhá přes konzoli ve hře příkazy rc, takže správce musí být k serveru připojený.

Kolik hráčů pojme server Holdfast?

Tolik, kolik dovolí maximum_players a unese tvůj hardware. Servery pro bitvy v liniích se 100 až 150 hráči jsou běžné; vyšší počty otestuj se svou komunitou, než je oznámíš.


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