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 .dll ist 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

CounterStrikeSharp – Core Configuration

CounterStrikeSharp – Plugin Installation/Development