Zum Inhalt springen

CS2-Server sicher modden: Die komplette Anleitung

CS2 Server/ └── game/ └── csgo/ ├── addons/ │ ├── metamod/ │ ├── counterstrikesharp/ │ │ ├── api/ │ │ ├── bin/ │ │ ├── configs/ │ │ ├── gamedata/ │ │ ├── …

1. Das Grundprinzip

Deine Struktur sollte ungefähr so aussehen:

Code
CS2 Server/
└── game/
    └── csgo/
        ├── addons/
        │   ├── metamod/
        │   ├── counterstrikesharp/
        │   │   ├── api/
        │   │   ├── bin/
        │   │   ├── configs/
        │   │   ├── gamedata/
        │   │   ├── lang/
        │   │   ├── plugins/
        │   │   └── shared/
        │   └── ...
        │
        ├── cfg/
        ├── maps/
        ├── gameinfo.gi
        └── ...

CounterStrikeSharp verwendet insbesondere:

Code
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:

Code
game/csgo/

und zusätzlich, falls vorhanden:

Code
game/csgo/cfg/
game/csgo/addons/
game/csgo/maps/
game/csgo/gameinfo.gi

Noch besser:

Backup A – Serverbasis

Vor Installation von Metamod.

Code
backup/
└── 01-vanilla/

Backup B – Framework

Nachdem Metamod + CounterStrikeSharp funktionieren:

Code
backup/
└── 02-css-installed/

Backup C – nach jedem funktionierenden Plugin

Zum Beispiel:

Code
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:

Code
game/csgo/

Danach brauchst du die Metamod-Zeile in:

Code
game/csgo/gameinfo.gi

Die CounterStrikeSharp-Dokumentation beschreibt dafür:

Code
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:

Code
meta list

Wenn Metamod funktioniert, bekommst du eine Plugin-Liste.

Wenn

Code
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:

Code
game/csgo/

Danach sollte beispielsweise Folgendes vorhanden sein:

Code
game/csgo/addons/counterstrikesharp/

mit unter anderem:

Code
api/
bin/
plugins/
gamedata/

Die offizielle Dokumentation zeigt diese Struktur ebenfalls.

Server neu starten.

Dann:

Code
meta list

Jetzt sollte CounterStrikeSharp als Plugin auftauchen.

6. Erst jetzt dein erstes Plugin

Jetzt kommt die wichtigste Sicherheitsregel:

Wichtig

Immer nur EIN neues Plugin installieren.

Nicht:

Code
20 Plugins herunterladen
↓
alles kopieren
↓
Server starten
↓
Crash
↓
keine Ahnung welches Plugin schuld ist

Sondern:

Code
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:

Code
game/csgo/addons/counterstrikesharp/plugins/

und hat seinen eigenen Ordner:

Code
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:

Code
addons/counterstrikesharp/plugins/MyPlugin/

dann genau dort.

Wenn er zusätzlich schreibt:

Code
addons/counterstrikesharp/configs/

kommt die Config dorthin.

Wenn er schreibt:

Code
addons/counterstrikesharp/gamedata/

dann dorthin.

8. Plugin-Konfiguration

Viele CSS-Plugins erzeugen oder verwenden eigene Konfigurationsdateien.

Typischerweise:

Code
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:

Code
config.json

kopieren:

Code
config.json.backup

Dann nur eine Änderung machen.

9. Plugin nach der Installation testen

Nach jedem Plugin:

Serverkonsole

Achte auf:

Code
error
exception
failed
could not
missing
unable

Ein einzelner harmloser Warning-Eintrag bedeutet nicht automatisch, dass etwas kaputt ist.

Besonders kritisch sind:

Code
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:

Code
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:

Code
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:

Code
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:

Code
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:

Code
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:

Code
test.mp3

installieren.

Plugin konfigurieren.

Server starten.

Testen.

Dann:

Code
welcome.mp3

dazu.

Dann:

Code
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:

Code
models/
materials/
particles/
sounds/

bestehen.

Nicht einfach einen kompletten fremden Ordner darüberkopieren.

Schlecht

Code
Fremder Download
↓
game/
↓
alles überschreiben

Gut

Code
Download analysieren
↓
benötigte Dateien identifizieren
↓
Backup
↓
einzelne Dateien kopieren
↓
testen

16. Niemals blind überschreiben

Wenn Windows/Linux fragt:

Code
File already exists.
Replace?

nicht automatisch:

Ja, alle.

Erst prüfen:

Code
Welche Datei?
Von welchem Plugin?
Welche Version?

Besonders vorsichtig bei:

Code
gameinfo.gi
*.cfg
*.vdf
*.dll
gamedata/*

17. Gamedata – besonders wichtig

Einige CS2-Plugins verwenden sogenannte Gamedata.

Zum Beispiel:

Code
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:

Code
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:

Code
CS2 Update?
Plugin Update?
Gamedata?
Config?
Dependency?

19. Plugin-Updates

Bei einem Update:

Vorher

Code
Backup Plugin

zum Beispiel:

Code
backup/
└── MyPlugin/
    ├── old.dll
    ├── old-config.json
    └── ...

Dann:

Code
Server stoppen
↓
alte Plugin-Version sichern
↓
neue Version installieren
↓
Server starten
↓
Logs prüfen
↓
Plugin testen

Wenn es nicht funktioniert:

Code
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:

Code
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:

Code
addons/counterstrikesharp/configs/admins.json

Dort können SteamIDs und Berechtigungen definiert werden.

Beispiel:

JSON
{
    "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:

Code
!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:

Code
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:

Code
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:

Code
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:

Code
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:

Code
plugins/
└── BrokenPlugin/

zu:

Code
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:

Code
meta list

Danach:

Code
CSS logs

und Plugin-Logs.

Typische Ursachen:

Code
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:

Code
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:

Code
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:

Code
plugins/
├── 01-admin/
├── 02-ranks/
├── 03-music/
├── 04-reservedslots/
├── 05-vip/
└── ...

Problematisches Plugin:

Code
03-music

temporär deaktivieren:

Code
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:

Wichtig

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

War die Anleitung hilfreich?

Mit einem Klick hilfst du uns, sie besser zu machen.