CS2-Server sicher modden: Die komplette Anleitung
1. Das Grundprinzip
Deine Struktur sollte ungefähr so aussehen:
CS2 Server/
└── game/
└── csgo/
├── addons/
│ ├── metamod/
│ ├── counterstrikesharp/
│ │ ├── api/
│ │ ├── bin/
│ │ ├── configs/
│ │ ├── gamedata/
│ │ ├── lang/
│ │ ├── plugins/
│ │ └── shared/
│ └── ...
│
├── cfg/
├── maps/
├── gameinfo.gi
└── ...
CounterStrikeSharp verwendet insbesondere:
game/csgo/addons/counterstrikesharp/plugins
game/csgo/addons/counterstrikesharp/configs
game/csgo/addons/counterstrikesharp/gamedata
game/csgo/addons/counterstrikesharp/lang
Diese Pfade sind auch in der offiziellen Dokumentation so vorgesehen.
2. Bevor du irgendetwas installierst: Backup
Das ist der wichtigste Schritt.
Ich würde mindestens diese Dinge sichern:
game/csgo/
und zusätzlich, falls vorhanden:
game/csgo/cfg/
game/csgo/addons/
game/csgo/maps/
game/csgo/gameinfo.gi
Noch besser:
Backup A – Serverbasis
Vor Installation von Metamod.
backup/
└── 01-vanilla/
Backup B – Framework
Nachdem Metamod + CounterStrikeSharp funktionieren:
backup/
└── 02-css-installed/
Backup C – nach jedem funktionierenden Plugin
Zum Beispiel:
backup/
├── 02-css-installed/
├── 03-admin-plugin/
├── 04-music-plugin/
└── 05-custom-content/
Damit kannst du bei einem Fehler sehr schnell zurück.
3. Metamod:Source installieren
CounterStrikeSharp kommuniziert über Metamod:Source mit dem Server. Beide müssen deshalb installiert sein.
Lade Metamod ausschließlich aus einer vertrauenswürdigen Quelle und achte darauf, dass du die CS2-kompatible Version verwendest.
Nach dem Entpacken kommt der addons-Ordner nach:
game/csgo/
Danach brauchst du die Metamod-Zeile in:
game/csgo/gameinfo.gi
Die CounterStrikeSharp-Dokumentation beschreibt dafür:
Game_LowViolence csgo_lv
Game csgo/addons/metamod
Danach Server neu starten.
4. Metamod testen
Jetzt noch keine Plugins installieren.
Starte den Server und führe in der Serverkonsole aus:
meta list
Wenn Metamod funktioniert, bekommst du eine Plugin-Liste.
Wenn
Unknown command: meta
erscheint, nicht weitermachen.
Dann stimmt normalerweise etwas mit:
gameinfo.gi- dem
addons-Ordner - der Metamod-Version
- dem Serverstart
nicht.
Die offizielle CSS-Dokumentation nennt meta list ebenfalls als grundlegenden Test.
5. CounterStrikeSharp installieren
Danach CounterStrikeSharp installieren.
Für eine erstmalige Installation solltest du laut offizieller Dokumentation die Variante mit Runtime verwenden.
Der Inhalt kommt ebenfalls nach:
game/csgo/
Danach sollte beispielsweise Folgendes vorhanden sein:
game/csgo/addons/counterstrikesharp/
mit unter anderem:
api/
bin/
plugins/
gamedata/
Die offizielle Dokumentation zeigt diese Struktur ebenfalls.
Server neu starten.
Dann:
meta list
Jetzt sollte CounterStrikeSharp als Plugin auftauchen.
6. Erst jetzt dein erstes Plugin
Jetzt kommt die wichtigste Sicherheitsregel:
Immer nur EIN neues Plugin installieren.
Nicht:
20 Plugins herunterladen
↓
alles kopieren
↓
Server starten
↓
Crash
↓
keine Ahnung welches Plugin schuld ist
Sondern:
Backup
↓
Plugin A
↓
Start
↓
Test
↓
Logs
↓
OK
↓
Backup
↓
Plugin B
7. Wie ein CounterStrikeSharp-Plugin installiert wird
Die genaue Struktur hängt vom Plugin ab.
Ein typisches CSS-Plugin landet beispielsweise hier:
game/csgo/addons/counterstrikesharp/plugins/
und hat seinen eigenen Ordner:
plugins/
└── MeinPlugin/
├── MeinPlugin.dll
├── MeinPlugin.deps.json
└── MeinPlugin.pdb
Die offizielle Dokumentation beschreibt genau dieses Prinzip.
Wichtig: Nicht einfach jede Datei eines Downloads irgendwo hineinwerfen.
Wenn der Plugin-Autor beispielsweise sagt:
addons/counterstrikesharp/plugins/MyPlugin/
dann genau dort.
Wenn er zusätzlich schreibt:
addons/counterstrikesharp/configs/
kommt die Config dorthin.
Wenn er schreibt:
addons/counterstrikesharp/gamedata/
dann dorthin.
8. Plugin-Konfiguration
Viele CSS-Plugins erzeugen oder verwenden eigene Konfigurationsdateien.
Typischerweise:
addons/
└── counterstrikesharp/
└── configs/
└── pluginname/
└── config.json
Die genaue Struktur ist aber pluginabhängig.
CounterStrikeSharp besitzt ein eigenes Config-System und unterstützt das Laden/Aktualisieren solcher Plugin-Konfigurationen.
Wichtig
Bevor du eine Config bearbeitest:
config.json
kopieren:
config.json.backup
Dann nur eine Änderung machen.
9. Plugin nach der Installation testen
Nach jedem Plugin:
Serverkonsole
Achte auf:
error
exception
failed
could not
missing
unable
Ein einzelner harmloser Warning-Eintrag bedeutet nicht automatisch, dass etwas kaputt ist.
Besonders kritisch sind:
Unhandled exception
Plugin failed to load
Could not load
Missing dependency
10. Plugins auflisten
Mit CounterStrikeSharp kannst du überprüfen, welche Plugins geladen sind.
Außerdem ist meta list hilfreich, um die Metamod-Seite zu kontrollieren.
Ich würde nach jeder Änderung prüfen:
meta list
und anschließend das CSS-Plugin-Verhalten im Spiel testen.
11. Abhängigkeiten nicht vergessen
Das ist eine der häufigsten Fehlerquellen.
Ein Plugin kann beispielsweise folgendes benötigen:
CounterStrikeSharp
+
anderes CSS-Plugin
+
Gamedata
+
zusätzliche DLL
Wenn du nur die Haupt-DLL kopierst, kann es deshalb scheitern.
CounterStrikeSharp unterstützt unter anderem externe Assemblies über shared/ und optional einen NuGet-Resolver.
Wenn ein Plugin eine Dependency verlangt:
nicht raten, wohin sie gehört.
Immer die Installationsanleitung des Plugins verwenden.
12. Sounds hinzufügen
Jetzt wird es etwas interessanter.
Angenommen, dein Plugin verwendet:
sounds/myserver/roundstart.mp3
Dann brauchst du grundsätzlich zwei Dinge:
A. Datei auf dem Server
Die Datei muss an der Stelle liegen, die das Plugin erwartet.
Zum Beispiel:
game/csgo/sounds/myserver/roundstart.mp3
B. Spieler müssen die Datei bekommen
Das ist ein separates Thema.
Nur weil der Sound auf deinem Server liegt, heißt das nicht automatisch, dass jeder Client ihn korrekt besitzt bzw. herunterladen kann.
Je nach verwendeter CS2-Technik/Plugin kann dafür eine entsprechende Resource-/Download-Konfiguration bzw. ein externes Hosting/CDN erforderlich sein.
Deshalb niemals einfach irgendwelche alten CS:GO-FastDL-Anleitungen 1:1 auf CS2 übertragen.
13. Sound-Dateien sicher organisieren
Ich würde mir beispielsweise diese Struktur machen:
game/csgo/
└── sounds/
└── myserver/
├── admin/
│ ├── welcome.mp3
│ └── goodbye.mp3
│
├── rounds/
│ ├── roundstart.mp3
│ └── roundend.mp3
│
└── misc/
└── test.mp3
Damit hast du keine 200 Dateien direkt in einem Ordner.
14. Sounds testen
Nie direkt 50 Sounds installieren.
Erst:
test.mp3
installieren.
Plugin konfigurieren.
Server starten.
Testen.
Dann:
welcome.mp3
dazu.
Dann:
roundstart.mp3
usw.
So findest du sofort heraus, welcher Sound Probleme macht.
15. Custom Models / Skins
Hier würde ich noch vorsichtiger sein.
Custom Content kann beispielsweise aus:
models/
materials/
particles/
sounds/
bestehen.
Nicht einfach einen kompletten fremden Ordner darüberkopieren.
Schlecht
Fremder Download
↓
game/
↓
alles überschreiben
Gut
Download analysieren
↓
benötigte Dateien identifizieren
↓
Backup
↓
einzelne Dateien kopieren
↓
testen
16. Niemals blind überschreiben
Wenn Windows/Linux fragt:
File already exists.
Replace?
nicht automatisch:
Ja, alle.
Erst prüfen:
Welche Datei?
Von welchem Plugin?
Welche Version?
Besonders vorsichtig bei:
gameinfo.gi
*.cfg
*.vdf
*.dll
gamedata/*
17. Gamedata – besonders wichtig
Einige CS2-Plugins verwenden sogenannte Gamedata.
Zum Beispiel:
addons/counterstrikesharp/gamedata/
Das kann nach einem CS2-Update problematisch werden.
Wenn ein Plugin plötzlich nach einem Steam/CS2-Update nicht mehr funktioniert, obwohl du nichts verändert hast:
Gamedata als erste Fehlerquelle prüfen.
Das liegt daran, dass Plugins teilweise auf bestimmte Spielstrukturen/Offsets bzw. Signaturen angewiesen sind.
18. Nach CS2-Updates
Das ist eine wichtige Routine:
CS2 Update
↓
Server starten
↓
meta list
↓
CSS prüfen
↓
Plugins einzeln prüfen
↓
Logs kontrollieren
Nicht sofort zehn Plugins aktualisieren.
Wenn plötzlich etwas nicht funktioniert, weißt du sonst nicht:
CS2 Update?
Plugin Update?
Gamedata?
Config?
Dependency?
19. Plugin-Updates
Bei einem Update:
Vorher
Backup Plugin
zum Beispiel:
backup/
└── MyPlugin/
├── old.dll
├── old-config.json
└── ...
Dann:
Server stoppen
↓
alte Plugin-Version sichern
↓
neue Version installieren
↓
Server starten
↓
Logs prüfen
↓
Plugin testen
Wenn es nicht funktioniert:
Server stoppen
↓
alte Version zurück
↓
Server starten
Das ist dein Rollback.
20. Hot Reload – praktisch, aber nicht für alles
CounterStrikeSharp kann Plugins standardmäßig beim Austauschen der DLL automatisch neu laden.
Das ist beim Entwickeln sehr praktisch.
Für einen öffentlichen Produktionsserver würde ich trotzdem lieber:
Server stoppen
↓
Dateien ändern
↓
Server starten
verwenden.
Warum?
Weil du dadurch einen klar definierten Zustand hast und Fehler beim Reload leichter nachvollziehen kannst.
Die CounterStrikeSharp-Dokumentation weist ebenfalls darauf hin, dass automatische Entwicklungs-/Deploy-Workflows nicht für einen Produktionsserver gedacht sind.
21. Admins einrichten
CounterStrikeSharp hat ein eigenes Admin-System.
Die Admin-Konfiguration befindet sich bei:
addons/counterstrikesharp/configs/admins.json
Dort können SteamIDs und Berechtigungen definiert werden.
Beispiel:
{
"Admin": {
"identity": "DEINE_STEAM_ID",
"flags": [
"@css/generic"
]
}
}
Welche Permissions du tatsächlich brauchst, hängt vom jeweiligen Plugin ab.
Nicht einfach jedem Admin * oder maximale Rechte geben, wenn das Plugin differenzierte Permissions unterstützt.
22. Sicherheitsregel für Plugins
Das ist extrem wichtig:
Eine
.dllist ausführbarer Code.
Ein Plugin kann theoretisch sehr viel mehr machen als nur:
!admin
Deshalb würde ich Plugins nur aus vertrauenswürdigen Quellen verwenden.
Vor Installation prüfen:
- Wer entwickelt es?
- Gibt es ein öffentliches Repository?
- Gibt es Dokumentation?
- Gibt es Versionshistorie?
- Gibt es andere Nutzer?
- Welche Dependencies braucht es?
- Ist die Version für deine aktuelle CSS-Version gedacht?
23. GSLT / Server-Sicherheitsrisiken
Hier solltest du ebenfalls aufpassen.
CounterStrikeSharp besitzt sogar eine Einstellung namens:
FollowCS2ServerGuidelines
Diese kann bestimmte Plugin-Funktionen blockieren, die laut Dokumentation Risiken für Game Server Login Tokens darstellen können. Die Option bietet allerdings keine Garantie gegen einen Bann.
Meine Empfehlung:
Diese Schutzfunktion nicht leichtfertig deaktivieren.
Wenn ein Plugin sagt:
„Disable server guidelines, otherwise this plugin won’t work“
würde ich erst einmal sehr genau prüfen, warum.
24. Meine empfohlene Serverstruktur
Ich würde deinen Server ungefähr so organisieren:
CS2/
│
├── backups/
│ ├── 00-clean/
│ ├── 01-metamod/
│ ├── 02-css/
│ ├── 03-admin/
│ ├── 04-sounds/
│ └── 05-final/
│
└── game/
└── csgo/
│
├── addons/
│ ├── metamod/
│ │
│ └── counterstrikesharp/
│ ├── configs/
│ ├── gamedata/
│ ├── lang/
│ ├── plugins/
│ └── shared/
│
├── cfg/
├── maps/
├── models/
├── materials/
├── particles/
├── sounds/
│ └── myserver/
│
└── gameinfo.gi
25. Die goldene Installationsreihenfolge
Wenn du beispielsweise einen komplett neuen Server hast:
1. Vanilla CS2 Server
↓
2. Backup
↓
3. Metamod
↓
4. Test: meta list
↓
5. Backup
↓
6. CounterStrikeSharp
↓
7. Test
↓
8. Backup
↓
9. Admin-System
↓
10. Test
↓
11. Backup
↓
12. Plugin #1
↓
13. Test
↓
14. Backup
↓
15. Plugin #2
↓
16. Test
↓
17. Backup
↓
18. Sounds
↓
19. Test
↓
20. Custom Models/Content
↓
21. Test
Das klingt langsamer als:
„Ich kopiere alles rein.“
Ist aber massiv einfacher zu debuggen.
26. Wenn der Server plötzlich nicht mehr startet
Nicht in Panik geraten.
Schritt 1
Letzte Änderung identifizieren.
Beispiel:
Vorher:
Server läuft.
Danach:
Server startet nicht.
Dann ist die letzte Änderung dein Hauptverdächtiger.
Schritt 2
Server stoppen.
Schritt 3
Letztes Plugin/Content entfernen oder umbenennen.
Zum Beispiel:
plugins/
└── BrokenPlugin/
zu:
plugins/
└── BrokenPlugin.disabled/
Schritt 4
Server starten.
Schritt 5
Wenn er wieder funktioniert:
Problem gefunden.
27. Wenn der Server startet, aber das Plugin nicht
Dann prüfen:
meta list
Danach:
CSS logs
und Plugin-Logs.
Typische Ursachen:
falsche Plugin-Version
fehlende Dependency
fehlende Gamedata
falscher Pfad
falsche Config
veraltete API
CS2-Update
28. Wenn nur Sounds nicht funktionieren
Dann gehe in dieser Reihenfolge vor:
Datei vorhanden?
↓
richtiger Pfad?
↓
richtiger Dateiname?
↓
Plugin erwartet genau diesen Pfad?
↓
Client bekommt die Resource?
↓
Format unterstützt?
↓
Plugin-Config korrekt?
Nicht sofort das komplette Plugin neu installieren.
29. Wenn nach einem Update alles kaputt ist
Dann:
CS2 Update
↓
CSS-Version prüfen
↓
Metamod-Version prüfen
↓
Plugin-Kompatibilität prüfen
↓
Gamedata prüfen
↓
Logs prüfen
Und nicht zehn neue Versionen gleichzeitig installieren.
30. Unsere „Safe Mode“-Regel
Wenn du später beispielsweise 30 Plugins hast, würde ich bei Problemen nicht alle löschen.
Stattdessen:
plugins/
├── 01-admin/
├── 02-ranks/
├── 03-music/
├── 04-reservedslots/
├── 05-vip/
└── ...
Problematisches Plugin:
03-music
temporär deaktivieren:
03-music.disabled
Server starten.
Wenn alles wieder läuft:
Fehler ziemlich wahrscheinlich gefunden.
Die wichtigste Faustregel
Ändere immer nur eine Variable.
Also niemals:
„Ich installiere heute 15 Plugins, 80 Sounds, Models und ein komplett neues Admin-System.“
Sondern:
Backup → eine Änderung → Neustart → Test → Logs → Backup.
Damit kannst du deinen Server praktisch wie ein Versionssystem behandeln.
Offizielle Referenzen
Die aktuelle CounterStrikeSharp-Dokumentation findest du hier:
CounterStrikeSharp – Getting Started