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í | RAM | CPU | Poznámky |
|---|---|---|---|
| Malá komunita, 30-50 hráčů | 3-4 GB | 2 jádra | Army Battlefield, mírné dělostřelectvo |
| Bitva v liniích, 100-150 hráčů | 4-6 GB | 3 jádra | Běžná velikost veřejných serverů |
| Námořní bitvy, velké lodě | 4-6 GB | 3 jádra | Fyzika lodí a spousta děl |
| Eventové servery nad 150 | 6-8 GB | 3-4 rychlá jádra | Změř 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í#
$ steamcmd +force_install_dir /home/holdfast/server +login anonymous \ +app_update 1424230 validate +quitInstalace 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:
- Zkopíruj konfiguraci.
cp serverconfig_default.txt serverconfig_myserver.txta uprav svou kopii. Výchozí soubor se s každou aktualizací hry nahradí. - Zkopíruj i spouštěcí skript a změň v něm
-serverConfigFilePathna 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í.
# 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_name | Název v seznamu serverů |
server_welcome_message | Zpráva zobrazená hráčům při připojení |
server_region | Značka regionu pro filtrování v seznamu, např. europe, usa, usaeast, usawest, australia |
server_password | Heslo pro připojení. U veřejného serveru prázdné |
server_admin_password | Heslo pro rc login |
server_port | Herní port |
steam_communications_port | Komunikační port Steamu |
steam_query_port | Dotazovací port Steamu - z něj seznam serverů čte název a počet hráčů |
maximum_players | Maximální počet hráčů |
population_*_min_players | Prahy, které určují nízkou, střední a vysokou populaci |
map_rotation_start_randomise | Začít rotaci na náhodném bloku |
server_intro_title, server_intro_body | Okno zobrazené při připojení, vhodné na pravidla |
network_broadcast_mode | Síť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í#
| Port | Výchozí | Účel |
|---|---|---|
server_port | 20100 | Herní provoz |
steam_communications_port | 8700 | Komunikace se Steamem |
steam_query_port | 27000 | Dotazy 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ě.
!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 endHerní režimy, které použiješ nejčastěji:
| Režim | Co to je |
|---|---|
ArmyBattlefield | Bitva na otevřeném terénu, základ bitev v liniích |
ArmyConquest | Pozemní bitva o záchytné body s tickety |
ArmySiege | Útočníci dobývají opevněnou pozici |
CoastalSiege | Lodě a pozemní síly útočí na pobřežní pevnost |
NavalBattlefield | Bitva lodí proti sobě |
NavalConquest | Námořní bitva o záchytné body |
FrontlinesOffensive | Rež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.
-1znamená 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.
-1umax_player_respawnsznamená 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_splitvrací ú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:
map_voting_enabled truemap_voting_duration 20map_voting_max_choices 3map_voting_allow_same_map falsemap_voting_history_count 4map_voting_include_random_choice truemap_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:
mods_installed 1234567890mods_installed_server_only 2345678901mods_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é:
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 5Hodnota 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š.
- 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ší.
- Zamkni strany.
faction_balancing trueaallow_faction_switching falsedrží regimenty tam, kam je zařadili organizátoři. U asymetrických režimů nastavfaction_attackingafaction_defendingvýslovně. - Řiď třídy.
spawn_overrideomezuje, 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. - Rozhodni se o opozdilcích.
allow_midround_spawning falseje u eventů běžné, aby bitvu vedli ti, kdo jsou přítomní od začátku. Veřejné servery to chtějí zapnuté. - Dej důstojníkům jejich kanál.
include_officer_only_chat truedává důstojníkům vlastní kanál ainclude_sergeants_in_officer_chatrozhoduje, zda jsou v něm i poddůstojníci. - Dej pravidla tam, kde je lidé uvidí.
server_intro_titleaserver_intro_bodyzobrazí 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:
rc login a-long-random-admin-passwordrc helprc mapRotation 2Kaž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.