Files
MSCO-Dedicated-Server/README.md
T
2026-09-26 19:45:02 +02:00

118 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MSCO Dedicated Server
Dedizierter Server für **MSCO – My Summer Car Online**. Er hält einen gemeinsamen Spielstand, speichert alles,
was die Spieler verändern, und gibt es an später Beitretende weiter. .NET 10, läuft unter Linux (Docker oder systemd)
und Windows.
- Mod: [MSCO](https://git.mbm.wtf/MrMaho/MSCO)
- Keymaster & Serverliste: [MSCO-Keymaster](https://git.mbm.wtf/MrMaho/MSCO-Keymaster) – https://msco.mbm.wtf
## Voraussetzungen
- Ein **Lizenzschlüssel** von https://msco.mbm.wtf/keys (Login mit Steam, wie der FiveM-Keymaster).
Der Server prüft ihn beim Start und meldet sich danach regelmäßig beim Master für die Serverliste.
- Ein My-Summer-Car-Spielstand als Startwelt.
- Port **7777/TCP** im Router/Firewall freigegeben (sonst wird der Server nicht gelistet).
- Server und Mod müssen dieselbe Version haben (sonst bekommen Spieler eine Warnung).
## Mit Docker (empfohlen)
```bash
git clone https://git.mbm.wtf/MrMaho/MSCO-Dedicated-Server.git
cd MSCO-Dedicated-Server
docker compose up -d --build # erster Start legt data/server.json an und beendet sich
```
1. In `data/server.json` mindestens `LicenseKey` eintragen.
2. Die Spielstand-Dateien nach `data/save/` kopieren (siehe unten).
3. `docker compose up -d`
| Aktion | Befehl |
|---|---|
| Konsole | `docker attach msco-server` – verlassen mit **Strg+P, dann Strg+Q** (Strg+C beendet den Server) |
| Einzelner Befehl | `docker exec msco-server msco <befehl>`, z.B. `msco players` |
| Logs | `docker logs -f msco-server` |
| Stoppen | `docker compose stop` – speichert vorher den Weltzustand und meldet den Server ab |
| Update | `git pull && docker compose up -d --build` |
Anderer Port: in `data/server.json` **und** in `docker-compose.yml` ändern.
## Ohne Docker
**Linux (systemd):** .NET 10 Runtime installieren (`sudo apt install dotnet-runtime-10.0`), dann
`dotnet publish -c Release -o /opt/msco-server` und [`deploy/msco-server.service`](deploy/msco-server.service)
einrichten (Anleitung oben in der Datei). Daten liegen in `/var/lib/msco-server`.
Für eine Konsole den Server stattdessen in `screen`/`tmux` starten.
**Windows:** `dotnet publish -c Release -o publish`, dann `publish\MSCO.Server.exe` starten.
Startparameter:
- `--data <ordner>` – Datenordner (Standard: Programmordner; Docker: `/data`)
- `--import-save [pfad]` – Spielstand übernehmen (ohne Pfad: der eigene Spielstand dieses PCs, auch Proton)
- `--cmd <befehl>` – Befehl an einen laufenden Server im selben Datenordner schicken
## Spielstand
In `data/save/` gehören diese Dateien aus dem My-Summer-Car-Spielstand:
`defaultES2File.txt`, `items.txt`, `meshsave.txt`, `graveyard.txt` (und `notepad.txt`, falls vorhanden).
- Windows: `%USERPROFILE%\AppData\LocalLow\Amistech\My Summer Car`
- Linux (Proton): `~/.steam/steam/steamapps/compatdata/516750/pfx/drive_c/users/steamuser/AppData/LocalLow/Amistech/My Summer Car`
Neuen Spielstand übernehmen: Dateien ersetzen, `data/world.json` löschen, Server neu starten.
## Einstellungen (`data/server.json`)
| Einstellung | Bedeutung |
|---|---|
| `LicenseKey` | Schlüssel von der Keymaster-Seite (Pflicht) |
| `Name`, `Description` | Anzeige im Server-Browser |
| `MaxPlayers`, `Port` | Spieler-Limit (max. 3 sinnvoll), Port |
| `Public` | `false` = nicht in der Liste, nur Direct Connect |
| `RequireSteam` | `true` = nur Spieler mit Steam; `false` = Non-Steam-Server (Spieler werden über den Namen erkannt) |
| `PublicAddress` | öffentliche IP/Domain für die Liste (nur hinter NAT/Proxy nötig) |
| `AutosaveSeconds` | wie oft der Weltzustand gespeichert wird |
| `SteamWebApiKey` | optional: Steam-Anmeldetickets der Spieler bei Steam prüfen |
| `BannedSteamIds` | gesperrte Spieler |
| `Admins` | SteamID64s, die im Spiel mit `/admin` kicken/bannen dürfen |
Fehlende Einstellungen ergänzt der Server beim Start automatisch. Umgebungsvariablen (`MSCO_LICENSE_KEY`,
`MSCO_NAME`, `MSCO_PORT`, `MSCO_MAX_PLAYERS`, `MSCO_PUBLIC`, `MSCO_REQUIRE_STEAM`, `MSCO_PUBLIC_ADDRESS`,
`MSCO_STEAM_WEB_API_KEY`) überschreiben `server.json`.
## Konsolenbefehle
| Befehl | Beschreibung |
|---|---|
| `status`, `players` | Übersicht, Spielerliste mit IDs |
| `kick <id> [grund]`, `ban <id> [grund]` | Spieler entfernen / sperren |
| `say <text>` | Chatnachricht an alle |
| `admins`, `op <id oder SteamID64>`, `deop <...>` | Admins anzeigen / geben / nehmen |
| `save` | Weltzustand jetzt speichern |
| `reset-world` | alle Änderungen seit dem Spielstand verwerfen |
| `reload-save` | Spielstand-Dateien neu einlesen |
| `stop` | speichern und beenden |
Im Spiel öffnen Admins mit `/admin` (Chat, Taste T) oder `admin` (F8-Konsole) ein Kick/Ban-Menü.
Der Chat landet auch im Server-Log.
## Was der Server speichert
- `save/` – der Ausgangs-Spielstand, den jeder neue Spieler bekommt.
- `world.json` – alles, was seitdem passiert ist: Positionen bewegter Objekte, Schraub-/Montage-Aktionen,
Geld, Türen/Tore, Fahrzeugzustand (Tank, Öl, Schrauben, Verschleiß …) und die letzte Position jedes Spielers.
Beim Beitreten: Spielstand laden → Objekte erfassen → Weltzustand anwenden → an der letzten eigenen Position weiterspielen.
## Sicherheit
- Die Adresse des Masters (`https://msco.mbm.wtf`) ist fest eingebaut, damit niemand die Schlüsselprüfung mit
einem eigenen Master umgehen kann. Nur Debug-Builds akzeptieren `MSCO_MASTER_URL`.
- `data/` enthält Lizenzschlüssel und API-Keys – nicht veröffentlichen (steht in `.gitignore`).
## Lizenz
GNU AGPL-3.0 – siehe [LICENSE](LICENSE).
Made by **MBM** – [mbm.wtf](https://mbm.wtf)