RE:NODE

Návody11 min čtení

Pluginy pro CS2: Metamod, CounterStrikeSharp a správa adminů

Proč SourceMod na CS2 neběží, jak nainstalovat Metamod:Source a CounterStrikeSharp, nastavit adminy a flagy a přežít aktualizaci hry.

23 čtenářů

První věc, kterou je u pluginů pro Counter-Strike 2 dobré vědět, je ta, která většinu lidí zastaví hned první den: SourceMod nefunguje. Deset let pluginů v SourcePawnu, každý .smx, který jsi kdy stáhl, admin menu, které znáš nazpaměť - nic z toho na Source 2 neběží. Zásobník pluginů pro CS2 je Metamod:Source ve své linii pro Source 2 a nad ním CounterStrikeSharp, který hostuje pluginy psané v C# nad .NET. Ekosystém je mladší, menší a postavený od nuly a je tam, kde dnes žije každý vážný komunitní server CS2.

Tento příspěvek je instalace, konfigurace adminů, pluginy, které stojí za místo na disku, a část, kterou nikdo nezapisuje: co se rozbije, když Valve vydá aktualizaci, a jak být zpátky online za deset minut místo za celý víkend.

Co na CS2 běží a co ne#

VěcStav na CS2
Metamod:Source, linie 2.xFunguje. Je to základ
Metamod:Source 1.11 / 1.12Jen Source 1. Špatný engine
SourceMod a pluginy .smxNeběží. Žádná podpora Source 2
CounterStrikeSharpFunguje. Pluginy v C# na .NET 8
CS2Fixes a další nativní pluginy pro MetamodFungují, psané v C++ přímo proti Metamodu
Rozhraní serverových pluginů Valve (plugin_load)Na Source 2 není praktická cesta

Dva důsledky. Za prvé, pokud ti návod říká, ať něco hodíš do addons/sourcemod/plugins, je to návod pro CS:GO a zbytek je taky špatně. Za druhé, když hledáš plugin, který dělá něco konkrétního, hledáš mezi vydáními na GitHubu, ne v adresáři pluginů - neexistuje správce balíčků, instalátor v panelu ani kurátorský index. Stáhneš zip, přečteš si, kdo ho napsal, a rozbalíš si ho sám.

Plugin běží jako nativní kód uvnitř procesu serveru bez sandboxu. Může číst každý soubor, který server přečte, otevírat sockety a běžet, jak dlouho chce, uvnitř jednoho ticku hry. S instalací jednoho zacházej jako se spuštěním skriptu jako root, protože přesně taková je skutečná úroveň oprávnění. Obecnou verzi tohoto argumentu najdeš v udržování modovaného serveru v čistotě.

čte se při startuprohledá plugins/Server CS2Source 2gameinfo.gipřidá cestu hledáníMetamod:Sourceaddons/metamodcounterstrikesharp.vdfMetamod ho načteCounterStrikeSharphostitel .NET 8Tvůj pluginMatchZy.dll
Jak se plugin v C# dostane do CS2

Instalace Metamod:Source#

Metamod je zavaděč. Sám o sobě na hře nic nemění; dává jinému kódu podporovaný způsob, jak se usadit mezi engine a herní modul.

  1. Získej build Metamod:Source z vývojové linie 2.x na webu AlliedModders. Stabilní stahování 1.x je pro hry na Source 1 a nenačte se. Vezmi balíček pro Linux, pokud tvůj server běží na Linuxu, což na hostingu s panelem platí.
  2. Rozbal ho tak, aby složka addons z archivu skončila v game/csgo/. Měl bys mít game/csgo/addons/metamod/ obsahující metaplugins.ini a složku bin.
  3. Uprav game/csgo/gameinfo.gi. Najdi blok SearchPaths a přidej jeden řádek nad stávající položku Game csgo:
game/csgo/gameinfo.gi
		SearchPaths		{			Game_LowViolence	csgo_lv			Game	csgo/addons/metamod			Game	csgo			Game	core
  1. Restartuj server a do konzole napiš meta version.

Úprava gameinfo.gi je celý trik a zároveň nejčastější důvod, proč fungující server přestane načítat pluginy. Ten soubor patří hře, takže ho přepíše běh validate nebo velká aktualizace a tvůj řádek zmizí. Žádná chyba; Metamod tam prostě už není, pluginy se nenačítají a server vypadá v pořádku. Pokud pluginy po aktualizaci zmizí, zkontroluj gameinfo.gi dřív než cokoli jiného.

code
] meta listListing 1 plugin:  [01] CounterStrikeSharp (1.0.xxx) by roflmuffin

meta list je důkaz, že se Metamod načetl, a seznam toho, co načetl. Prázdný seznam s bannerem verze znamená, že Metamod běží a nemá co načítat. Žádná odpověď vůbec znamená, že gameinfo.gi je špatně nebo že build je ten pro Source 1.

Instalace CounterStrikeSharp#

CounterStrikeSharp je plugin pro Metamod, který hostuje runtime .NET a zpřístupňuje hru pro C#. Jeho vydání mají dvě podoby: jedna obsahuje runtime .NET a druhá očekává, že .NET 8 je na stroji nainstalovaný. Na hostingu postaveném na kontejnerech vezmi verzi s runtimem - nekontroluješ, co je na nodu nainstalováno, a verze s runtimem je pár set megabajtů disku, ne žádost o podporu.

  1. Rozbal vydání do game/csgo/, aby se addons/counterstrikesharp/ objevilo vedle addons/metamod/.
  2. Ověř, že existuje addons/metamod/counterstrikesharp.vdf. Tento soubor říká Metamodu, aby ho načetl.
  3. Restartuj. meta list by teď měl ukázat CounterStrikeSharp a css_plugins list by měl odpovědět.

Strom, o který usiluješ:

code
game/csgo/addons/  metamod/    metaplugins.ini    counterstrikesharp.vdf  counterstrikesharp/    bin/    configs/      core.json      admins.json      admin_groups.json    gamedata/    logs/    plugins/      MatchZy/        MatchZy.dll

Pluginy žijí o jednu složku hlouběji a název složky se musí shodovat s názvem DLL: plugins/MatchZy/MatchZy.dll se načte, plugins/MatchZy.dll ne. Na toto pravidlo narazí skoro každý jednou.

configs/core.json stojí za přečtení celý, protože je krátký a tři jeho nastavení mění chování, které bys jinak hodinu hledal. Spouštěče v chatu určují, jaká předpona spustí příkaz v chatu - ve výchozím stavu ! pro viditelný příkaz a / pro tichý. Hot reload určuje, jestli vložení nového DLL na místo způsobí jeho načtení bez restartu, což je pohodlné na testovacím serveru a špatný nápad na ostrém. A je tam přepínač pro dodržování zásad Valve pro komunitní servery, který omezuje API pluginů v dělání věcí, kvůli kterým mají servery potíže; ponechat ho zapnutý je výchozí z dobrého důvodu, popsaného níže.

Správci, skupiny a flagy#

Admini jsou soubor JSON, ne příkaz v konzoli. configs/admins.json mapuje Steam id na sadu flagů:

addons/counterstrikesharp/configs/admins.json
{  "Anna": {    "identity": "76561198012345678",    "flags": ["@css/generic", "@css/kick", "@css/ban", "@css/changemap"],    "immunity": 80  },  "Moderator Jan": {    "identity": "76561198087654321",    "groups": ["#css/moderator"],    "immunity": 40  }}
addons/counterstrikesharp/configs/admin_groups.json
{  "#css/moderator": {    "flags": ["@css/generic", "@css/kick", "@css/chat"],    "immunity": 40  }}
FlagUděluje
@css/rootVše, včetně flagů přidaných budoucími pluginy
@css/genericZákladní kontrola „je to admin“, kterou většina pluginů začíná
@css/kickVyhození
@css/ban / @css/unbanZabanování a zrušení banu
@css/slaySlay, slap a podobné
@css/changemapZměna mapy
@css/cvarZměna cvarů z chatu
@css/chatGag, mute, admin chat
@css/voteZahájení hlasování
@css/reservationPřístup na rezervovaný slot
@css/cheatsPřepnutí sv_cheats, kde to plugin dovoluje

immunity je číslo a na vyšší číslo nemůže nižší působit. Dej si 100, důvěryhodným moderátorům 50 a tomu, kdo se slušně zeptal, 10. Bez hodnot imunity se mohou dva admini ve smyčce vyhazovat navzájem, což je vtipné přesně jednou.

css_admins_reload znovu načte oba soubory bez restartu, takže přidání moderátora během večera nestojí nic. @css/root používej pro jediný účet, svůj, a všechny ostatní skládej z konkrétních flagů. Pole identity je 17místné SteamID64; status v konzoli vypíše id každého připojeného hráče ve tvaru, který potřebuješ.

Pluginy, které stojí za provoz#

PluginCo děláPotřebuje
MatchZyZápasy 5v5: ready-up, knife round, pauzy, dema na mapu, obnovení kolaCounterStrikeSharp
CS2-SimpleAdminBany, mute, gag a slay podložené databází, sdílené mezi serveryCounterStrikeSharp, databáze
cs2-retakesRežim retakes se spawny u bombsite a přidělováním zbraníCounterStrikeSharp
CS2FixesOpravy na úrovni enginu a admin příkazy, základ pro servery Zombie EscapeJen Metamod

Ten seznam je záměrně krátký. Komunitní server CS2 potřebuje admin plugin, způsob, jak hlasovat o další mapě, a jeden plugin pro to, k čemu server vlastně slouží. Všechno nad to je váha, kterou musíš po každé aktualizaci hry znovu testovat.

Dvě kategorie si zaslouží spíš varování než doporučení. Cokoli, co mění skiny zbraní, dává předměty z inventáře nebo předstírá kosmetiku, je proti zásadám Valve pro servery a trestem je ban na přihlašovací token herního serveru - což stáhne s sebou i server a může to následovat účet na Steamu k dalšímu tokenu. Pluginy se skiny jsou oblíbené a pro tvůj token jsou skutečné riziko, ne teoretické. A cokoli, co se pro CS2 prezentuje jako „anti-cheat“, dělá heuristiky zevnitř procesu serveru; část z toho je užitečná, nic z toho není VAC a všechno vyrábí falešné pozitivy, o kterých budeš muset rozhodovat ty.

Pro zápasový server pokryje celý večer samotný MatchZy a soutěžní zápasový server CS2 provádí jeho konfigurací.

Instalace, konfigurace a znovunačtení pluginu#

Instalace má vždy stejný tvar. Stáhni zip s vydáním, otevři ho a zkontroluj, že obsahuje cestu addons/ nebo prostou složku pluginu, a rozbal ho na správné místo přes správce souborů nebo SFTP - SFTP a správce souborů obsahují podrobnosti o připojení. Potom:

code
css_plugins listcss_plugins load MatchZycss_plugins unload MatchZycss_plugins reload MatchZy

Většina pluginů generuje konfiguraci při prvním načtení, ne že by ji dodávala, takže postup je: nainstalovat, spustit, zastavit, upravit soubor, který se objevil. Některé zapisují do addons/counterstrikesharp/configs/plugins/<Name>/, některé zapíšou .cfg do game/csgo/cfg/ a jedinou autoritou, které je které, je readme pluginu. Pokud má plugin nastavení, která nemůžeš najít, jednou spusť server a podívej se, co se na disku změnilo.

Chyby pluginů jdou do addons/counterstrikesharp/logs/, jeden soubor na den, a jsou mnohem čitelnější než konzole, protože stack trace z C# se v herní konzoli zalomí do kaše. Když se plugin načte, ale nic nedělá, log obvykle obsahuje jeden řádek s důvodem, a bývá to chybějící závislost nebo signatura v gamedata, která už nesedí.

Přežití aktualizace CS2#

Valve aktualizuje CS2 bez varování a bez ohledu na tvoje pluginy. Rozbijí se tři věci, v tomto pořadí pravděpodobnosti:

  1. gameinfo.gi je resetován, takže se Metamod vůbec nenačte. Přidej řádek znovu.
  2. Metamod nebo CounterStrikeSharp potřebuje nový build, protože se posunuly interní offsety. Nic z toho, co vlastníš, to neopraví; čekáš na vydání, což bývají hodiny, ne dny.
  3. Gamedata pluginu už nesedí, takže se načte a pak vyhodí chybu, když se dotkne hry. Aktualizuj plugin, nebo jeho soubor gamedata, pokud ho autor dodává zvlášť.

Obrana je procedurální, ne technická. Měj kopii celé složky addons a svého gameinfo.gi někde, co není server, aby obnova byla kopírování souborů. Nespouštěj aktualizaci hry hodinu před zápasem - aktualizuj den poté, záměrně, s časem na opravy. A pokud provozuješ cokoli, na čem záleží, měj druhý, levný server, který aktualizuješ jako první. Co dělat, když aktualizace modu něco rozbije je obecný postup; CS2 je jen neobvykle rychle se měnící případ.

Na RE:NODE se aktualizace spouští při startu serveru, takže rozhodnutí, kdy aktualizaci přijmout, je rozhodnutí, kdy restartovat - a záložka Schedules je místo, kde to nastavíš na 05:00 v úterý místo pěti minut před zápasem. Sloty pro zálohy jsou v každém tarifu CS2 a rozumný návyk je ruční záloha před instalací jakéhokoli pluginu, protože vrácení zpět je pak jedno tlačítko, ne archeologická výprava.

Paměť, CPU a co pluginy opravdu stojí#

Vanilla server CS2 pro deset hráčů se pohodlně vejde do 1 GB. CounterStrikeSharp přináší do procesu runtime .NET a nad ním hrstku pluginů a realistické minimum pro server s pluginy je 2 GB - ne proto, že by pluginy byly těžké, ale protože runtime má working set a garbage collector má rád rezervu. Když kontejner narazí na limit paměti, je zastaven a čistě restartován, ne ponechán swapovat, což je na zápasový večer nejhorší možný výsledek, takže dimenzuj raději výš, než plout těsně.

CPU je zajímavější omezení. Plugin, který dělá práci v každém ticku, ji dělá 64 nebo 128krát za sekundu, na hráče, navždy. Většina zveřejněných pluginů je opatrná; ten, který někdo napsal pro tvůj server za odpoledne, být nemusí. Pokud server po instalaci něčeho začne sekat, plugin odnačti a sleduj graf, místo abys o tom uvažoval - graf CPU v panelu proti tvému tvrdému limitu je nejrychlejší test, který máš, a jeden kontejner na server znamená, že to nezpůsobuje nic jiného.

Řešení potíží#

`meta list` nevypíše nic. Metamod se nenačítá. Zkontroluj řádek v gameinfo.gi, zkontroluj, že jsi rozbalil build pro Source 2, a zkontroluj, že cesta je game/csgo/addons/metamod, a ne csgo/addons/metamod.

Metamod se načte, ale CounterStrikeSharp se neobjeví. Chybí addons/metamod/counterstrikesharp.vdf, nebo jsi nasadil build bez přibaleného runtimu na stroj bez .NET 8.

`css_plugins list` ukazuje plugin, ale jeho příkazy nic nedělají. Téměř vždy admin flagy. Zkontroluj, že admins.json obsahuje tvoje SteamID64, spusť css_admins_reload a zkontroluj, že spouštěč chatu v core.json odpovídá tomu, co píšeš.

Včera všechno fungovalo a dnes nic. Aktualizace CS2. Začni u gameinfo.gi.

Server padá při změně mapy. Odnačítej pluginy jeden po druhém a mezi každým změň mapu. Změna mapy je chvíle, kdy se většina chyb pluginů projeví, protože hra v ní ruší a znovu staví stav, který plugin může stále držet.

Příkazy z chatu se vypisují v chatu všem. To je veřejný spouštěč, který dělá svou práci. Pro admin příkazy použij tichý spouštěč, ve výchozím stavu /.

FAQ#

Funguje SourceMod na CS2?

Ne. SourceMod podporuje hry na Source 1, například Team Fortress 2, Counter-Strike: Source a CS:GO. CS2 běží na Source 2, který SourceMod nepodporuje, a pro pluginy v SourcePawnu neexistuje konvertor. V praxi je náhradou CounterStrikeSharp.

Dostanu kvůli pluginům na server VAC ban?

VAC banuje klienty, ne servery. Riziko pro server je ban na přihlašovací token herního serveru, který Valve vystavuje za porušení zásad pro komunitní servery - rozdávání předmětů z inventáře, falšování skinů nebo zkreslování toho, čím server je. Běžné admin pluginy, zápasové pluginy a pluginy herních režimů problém nejsou.

Mohu pluginy instalovat z panelu bez SSH?

Ano. Všechno tady jsou soubory v game/csgo/, takže stačí správce souborů nebo SFTP. Archivy lze rozbalit na místě a editor otevře přímo gameinfo.gi i konfigurace JSON.

Kam dám adminy pro CS2?

Do addons/counterstrikesharp/configs/admins.json, klíčované jménem, se SteamID64 v identity a seznamem flagů @css/. Za běhu je znovu načteš přes css_admins_reload.

Kolik paměti CounterStrikeSharp přidá?

Dost na to, aby 1 GB přestal být pohodlný. Počítej s 2 GB pro server s CounterStrikeSharp a několika pluginy a s víc, pokud některý z nich drží stav pro každého hráče.

Proč se mi po aktualizaci přestaly načítat pluginy?

Protože aktualizace přepsala game/csgo/gameinfo.gi a odstranila cestu hledání Metamodu. Přidej řádek zpět a restartuj. Pokud to není ono, Metamod nebo CounterStrikeSharp potřebuje build odpovídající nové verzi hry.


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