RE:NODE

Návody11 min čtení

Rotace map a vlastní mapy na herním serveru

Jak funguje rotace map napříč herními servery: mapcycle.txt, mapové skupiny v CS2, vrstvy Squadu, mise Arma, cykly KF2 a Sandstormu, hlasování o mapě a stahování vlastních map.

1 čtenář

Rotace map je seznam, kterým server prochází, když skončí zápas: odehraj tuto mapu, pak další a pak se vrať na začátek. Má ji skoro každá hra založená na kolech, ale každá ji ukládá jinak - mapcycle.txt ve hrách na Source a GoldSrc, mapové skupiny a kolekce z Workshopu v CS2, seznamy vrstev ve Squadu, třídy misí v Arma 3, GameMapCycles v Killing Floor 2, MapCycle.txt se scénáři v Insurgency: Sandstorm. Hry s trvalým světem, jako Minecraft, Rust nebo Valheim, rotaci nemají vůbec; mají jeden svět a mění ho wipem. Dále najdeš, kde seznam leží v které hře, co mapu ukončí, jak se do toho vejdou hlasování a jak vybrat rotaci, kterou hráči neopouštějí v půlce.

Dva druhy serverů: rotující a trvalé#

Před soubory ještě rozlišení, které rozhoduje, jestli se tě to vůbec týká.

Rotující servery hrají mapu po dobu zápasu nebo časového limitu a pak načtou jinou. Takhle fungují střílečky a většina kooperativních her založených na kolech: Team Fortress 2, Counter-Strike ve všech verzích, herní režimy Garry's Modu jako TTT a Prop Hunt, kampaně Left 4 Dead 2, Squad, Insurgency: Sandstorm, Killing Floor 2. Identita takového serveru je z velké části jeho rotace.

Trvalé servery načtou jeden svět a drží ho. Minecraft, Rust, Valheim, 7 Days to Die, Project Zomboid, DayZ, Palworld a každá survival nebo stavitelská hra patří sem. „Změna mapy“ znamená zastavit server a nasměrovat ho na jiný svět nebo seed a u Rustu je to měsíční wipe. Tyto hry mapové volby mají - velikost světa, seed, vlastní mapy, komunitní terény - ale je to rozhodnutí, které děláš jednou za wipe, ne cyklus. Tuto stranu pokrývají články wipy Rustu bez ztráty hráčů a vlastní generování světa v Minecraftu.

Zbytek článku je o prvním druhu.

Co mapu ukončí#

Rotace má smysl, jen když něco serveru řekne, aby šel dál. Hry používají nějakou kombinaci čtyř spouštěčů:

SpouštěčCvar pro Source / GoldSrcCo se stane
Časový limitmp_timelimit (minuty)Mapa se změní po uplynutí času, obvykle na konci kola
Limit výhermp_winlimitMapa se změní, když tým dosáhne N výher
Limit kolmp_maxroundsMapa se změní po N kolech
Limit fragůmp_fraglimitHry ve stylu deathmatche, kdo první dosáhne N

0 limit vypíná. Pokud jsou všechny limity 0, mapa se sama nikdy nezmění, což je častá příčina hlášení „moje rotace nefunguje“: seznam je v pořádku, jen nic nekončí mapu. V TF2 je běžné veřejné nastavení mp_timelimit 30 s mp_winlimit 0; v CS jsou důležitější limity kol a výher, protože zápasy se počítají v kolech.

Hry mimo Source mají vlastní ekvivalenty, obvykle uvnitř nastavení herního režimu - délka zápasu, počet kol nebo vln, podmínka vítězství. Mapa v KF2 končí, když jsou dokončeny vlny (a boss) nebo tým padne; vrstva ve Squadu končí, když dojdou tikety nebo vyprší časový limit.

Source a GoldSrc: mapcycle.txt#

Team Fortress 2, Counter-Strike: Source, Garry's Mod, Left 4 Dead 2 i Counter-Strike 1.6 čtou prostý textový soubor s jedním názvem mapy na řádek, bez přípony:

tf/cfg/mapcycle.txt
ctf_2fortpl_badwatercp_process_finalkoth_harvest_finalpl_upwardcp_granary_pro_rc8

Kde soubor leží, se liší. V TF2 je to tf/cfg/mapcycle.txt s náhradním mapcycle_default.txt, pokud jsi žádný nevytvořil. Ve starších hrách a v CS 1.6 leží v kořeni složky hry (cstrike/mapcycle.txt). Cvar mapcyclefile určuje, který soubor se použije, takže jich můžeš mít několik a přepínat mezi nimi ze server.cfg.

Pravidla, na kterých lidé klopýtají:

  • Mapa v cyklu, která na disku neexistuje, se přeskočí (nebo v některých hrách server přestane měnit mapu vůbec). Každý název se musí přesně shodovat s .bsp ve složce maps, včetně velikosti písmen na Linuxu.
  • Server čte soubor při změně mapy. Úprava uprostřed mapy je v pořádku; změna se projeví od dalšího přechodu.
  • nextmap v konzoli ukáže, co přijde dál. changelevel <map> přepne okamžitě a hráči zůstanou připojeni. map <map> provede tvrdší načtení, které všechny odpojí a znovu připojí.

Hlasování a nominace pomocí SourceMod a AMX Mod X

Pevný cyklus je předvídatelný; hlasování udrží lidi u hry. Na Source 1 k tomu SourceMod dodává pluginy, i když několik z nich je nainstalováno v addons/sourcemod/plugins/disabled/ a k zapnutí je třeba je přesunout o složku výš:

  • mapchooser.smx - několik minut před limitem spustí hlasování o mapě na konci mapy mezi mapami z cyklu (nebo z vlastního seznamu).
  • rockthevote.smx - hráči napíšou rtv; pokud se shodne dost lidí, hlasování začne hned.
  • nominations.smx - hráči napíšou nominate, aby mapu zařadili do příštího hlasování.
  • nextmap.smx - ve výchozím stavu zapnutý; hlásí a řídí, co přijde dál.
  • randomcycle.smx - vybere další mapu náhodně z cyklu.

Na CS 1.6 dodává AMX Mod X mapchooser.amxx a nextmap.amxx, zapínané v addons/amxmodx/configs/plugins.ini, plus admin menu pro hlasování, které čte addons/amxmodx/configs/maps.ini. Stranu pluginů popisují články pluginy AMX Mod X pro Counter-Strike 1.6 a pluginy SourceMod pro Team Fortress 2.

V Garry's Modu si konec mapy řeší samotné herní režimy. TTT končí po ttt_round_limit kolech nebo ttt_time_limit_minutes a pak změní mapu; většina serverů přidává doplněk pro hlasování o mapě (obvyklý je MapVote od Willoxe), který se na tento okamžik napojí. Podrobnosti najdeš v článku server Garry's Mod TTT.

CS2: mapové skupiny a kolekce z Workshopu#

Counter-Strike 2 nepoužívá mapcycle.txt tak jako CS:S. Jeho rotace vychází z mapových skupin definovaných v game/csgo/gamemodes_server.txt (pro začátek zkopíruj dodaný soubor .example). Mapová skupina je pojmenovaný seznam map; spouštěcí řádek vybere herní režim a skupinu:

bash
$ ./cs2 -dedicated +game_type 0 +game_mode 1 +mapgroup mg_active +map de_inferno

game_type 0 s game_mode 1 je Competitive; game_mode 0 je Casual. Vestavěné skupiny jako mg_active sledují aktuální pool Valve, který se mezi operacemi mění. Pro vlastní rotaci si definuješ vlastní skupinu v gamemodes_server.txt a předáš její název.

Mapy z Workshopu jdou jinou cestou. +host_workshop_collection <id> načte kolekci ze Steam Workshopu a prochází ji; +host_workshop_map <id> načte jednu mapu z Workshopu. Kolekce se stahuje při startu, takže kolekce o 40 mapách znamená dlouhý první boot a hodně místa na disku. Server potřebuje pro stahování z Workshopu Steam token. Obojí provádí mapy a kolekce z Workshopu v CS2 a celý spouštěcí řádek najdeš v článku nastavení serveru Counter-Strike 2.

Další hry: vrstvy, mise a scénáře#

Squad

Squad odděluje mapy od vrstev - vrstva je mapa s herním režimem, frakcemi a verzí (Narva_RAAS_v1). Rotace je seznam vrstev v SquadGame/ServerConfig/LayerRotation.cfg a MapRotationMode v Server.cfg určuje, jestli server prochází seznam vrstev, nebo seznam úrovní - přípustné hodnoty uvádějí komentáře v souboru tvé verze. Admini mění vrstvy příkazem AdminChangeLayer a další nastavují příkazem AdminSetNextLayer. Názvy vrstev se mění, když jsou mapy přepracovány, takže rotace, která fungovala minulý měsíc, může obsahovat názvy, které už neexistují; po každé aktualizaci Squadu zkontroluj log serveru. Celý soubor najdeš v článku konfigurace serveru Squad a admini.

Arma 3

Arma 3 nazývá mapy „misemi“ a rotaci ukládá jako třídy uvnitř server.cfg:

server.cfg
class Missions{    class Mission1    {        template = "MyCoop.Altis";        difficulty = "Regular";    };    class Mission2    {        template = "Invade_Annex.Stratis";        difficulty = "Veteran";    };};

template je název souboru mise (z MPMissions) bez .pbo. Pokud třída Missions existuje, server rotaci spouští sám a nečeká, až admin vybere misi příkazem #missions. Většina komunit Arma hraje jednu dlouhou misi místo cyklu; třídu se přesto vyplatí definovat, aby se server po restartu zotavil sám. Víc v článku server.cfg a mise v Arma 3.

Killing Floor 2

KF2 drží cyklus v KFGame/Config/PCServer-KFGame.ini pod [KFGame.KFGameInfo]:

PCServer-KFGame.ini
[KFGame.KFGameInfo]GameMapCycles=(Maps=("KF-BurningParis","KF-Outpost","KF-BioticsLab"))ActiveMapCycle=0

Řádků GameMapCycles může být několik; ActiveMapCycle jeden vybere podle indexu. Mapy z Workshopu musí být na serveru odebírané - řádky ServerSubscribedWorkshopItems= pod [OnlineSubsystemSteamworks.KFWorkshopSteamworks] v PCServer-KFEngine.ini - a také se objevit v cyklu. Zbytek pokrývá průvodce serverem Killing Floor 2.

Insurgency: Sandstorm

Sandstorm rotuje scénáře, ne mapy. Insurgency/Config/Server/MapCycle.txt obsahuje jeden scénář na řádek, buď jako prostý název scénáře, nebo s volbami, například osvětlením:

MapCycle.txt
Scenario_Farmhouse_Checkpoint_SecurityScenario_Hideout_Checkpoint_Insurgents(Scenario="Scenario_Refinery_Push_Security",Lighting="Night")

Název scénáře kóduje mapu, režim a stranu, takže server s režimem Checkpoint uvádí jen scénáře Checkpoint. Úplný seznam režimů je v článku průvodce serverem Insurgency: Sandstorm.

Vlastní mapy a jak je dostat k hráčům#

Rotace standardních map nepotřebuje nic dalšího. V okamžiku, kdy přidáš vlastní mapu, ji hráči musí získat, a jak ji získají, rozhoduje o tom, jestli zůstanou.

HraJak klienti získají vlastní mapy
TF2, CS:S, GMod, L4D2Stažení ze serveru, nebo FastDL přes HTTP
Garry's ModWorkshop přes resource.AddWorkshop nebo kolekce
CS2Pouze Steam Workshop
KF2, Squad, SandstormOdběr z Workshopu nebo mod.io, automaticky při připojení
Arma 3Mise .pbo se stáhne při připojení; módy musí být předem nainstalované

U Source 1 je důležité nastavit správně cestu stahování. Bez FastDL si klient stáhne mapu z herního serveru samotného omezenou rychlostí, což u mapy o 60 MB znamená minuty na načítací obrazovce a velkou šanci, že to hráč vzdá. Když sv_downloadurl ukazuje na webový server s kopiemi týchž souborů komprimovanými do .bz2, stahování je rychlé a herní server utratí přenos za hru. Nastavení popisuje Workshop a FastDL pro Garry's Mod a stejná metoda funguje pro TF2 a CS:S.

Soubory map stojí také místo na disku. Mapy Source mívají běžně 20-100 MB, mapy z Workshopu pro CS2 mohou mít i několik set a hry řízené Workshopem cachují vše, co kdy stáhly. Rotace o 50 mapách jsou několik gigabajtů, na čemž u malého tarifu záleží - viz kolik úložiště herní server potřebuje.

Jak navrhnout rotaci, u které lidé zůstanou#

Technická část je snadná. O tom, jestli bude tvůj server ve 21:00 plný, rozhoduje samotný seznam.

Začni oblíbenými mapami. První mapa po restartu je ta, kterou lidé vidí při procházení. Server, který ve špičce stojí na obskurní vlastní mapě, se přeskočí. Dej na začátek dvě nebo tři oblíbené a experimenty nech uprostřed.

Přizpůsob mapy počtu hráčů. Velké mapy se při deseti hráčích vyprázdní; malé jsou při třiceti chaos. Existují pluginy, které přepínají mezi dvěma cykly podle počtu hráčů, a mapchooser v SourceModu lze nasměrovat na různé seznamy. I bez nich „noční“ cyklus malých map používaný, když je na serveru klid, udrží těch pár hráčů, kteří tam jsou, aby se nerozešli.

Neopakuj příliš brzy. Hlasování bez paměti vybírá pořád stejnou oblíbenou mapu. Mapchooser v SourceModu vylučuje nedávno hrané mapy (sm_mapvote_exclude určuje kolik); použij to.

Škrtej podle dat. Logy serveru zaznamenávají každou změnu mapy a počet hráčů na ní. Mapa, která do pěti minut po načtení přijde o polovinu serveru, by měla z rotace odejít, ať se ti líbí sebevíc. Víc o čtení takových signálů je v článku rozvoj komunity herního serveru.

Drž vlastní mapy v menšině. Dvě nebo tři dobře udělané vlastní mapy dají serveru identitu. Patnáct znamená, že většina hráčů při většině změn map něco stahuje.

Řešení potíží se změnou map#

Mapa se nikdy nezmění. Všechny podmínky konce jsou 0, nebo další mapu přepisuje plugin. Zkontroluj mp_timelimit, mp_winlimit a mp_maxrounds, pak nextmap.

Vždycky se vrátí ke stejné mapě. Soubor cyklu se nečte - špatné umístění, špatný mapcyclefile, nebo je každá druhá položka neplatná a přeskakuje se. Při změně mapy sleduj v konzoli řádky „map not found“.

Server spadl při změně mapy. Vlastní mapa je poškozená nebo potřebuje obsah, který server nemá. Načti ji samostatně přes changelevel a sleduj log. Druhým podezřelým jsou pluginy, které se napojují na entity mapy.

Hráči jsou vyhozeni s „missing map“. Stahování je vypnuté (sv_allowdownload 0), adresa FastDL je špatná, nebo se .bz2 na webovém serveru neshoduje s mapou na herním serveru.

Kolekce z Workshopu se nenačte. Chybí Steam token, kolekce je soukromá, nebo byla mapa z Workshopu odstraněna. Konzole vypíše ID položky, která selhala.

FAQ#

Mohu provozovat rotaci na serveru Minecraftu nebo Rustu?

Ne ve stejném smyslu. Drží jeden trvalý svět. Světy můžeš přepnout zastavením serveru a změnou level-name (Minecraft) nebo nastavení mapy (Rust), nebo provozovat více světů pomocí pluginu jako Multiverse, ale nic se na konci zápasu automaticky necyklí.

Kolik map by rotace měla mít?

Dost na to, aby se stejná mapa nevrátila během jednoho večera, a málo na to, aby se každá hrála. Při 30minutovém časovém limitu je rozumný začátek osm až dvanáct map. Hlasování potřebný počet snižuje, protože hráči přeskakují ty, které nechtějí.

Proč mé hlasování o mapě pořád vybírá stejnou mapu?

Protože tomu nic nebrání. Vylučuj z hlasování nedávno hrané mapy, omez, jak často lze mapu nominovat, nebo oblíbenou mapu z hlasování odstraň a dej ji do pevného cyklu na určené místo.

Způsobují vlastní mapy lagy serveru?

Mohou. Špatně optimalizovaná mapa s mnoha dynamickými entitami stojí CPU serveru v každém ticku a obrovská stojí paměť. Každou novou mapu otestuj s plným serverem, než ji přidáš do hlavní rotace.

Vyžaduje změna rotace restart?

Obvykle ne. Source a GoldSrc čtou cyklus při změně mapy a SourceMod znovu načítá své seznamy map při startu mapy. Mapové skupiny v CS2 a většina her mimo Source čtou rotaci při startu, takže u nich restart potřeba je.


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