MSCO dedicated server 2.6: code, Docker, systemd, README
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,2 +1,117 @@
|
||||
# MSCO-Dedicated-Server
|
||||
# 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)
|
||||
|
||||
Reference in New Issue
Block a user