From b08d51ceb7fb13796017d63606598a0cac0854de Mon Sep 17 00:00:00 2001 From: MrMaho Date: Sat, 26 Sep 2026 19:42:02 +0200 Subject: [PATCH] Add README, embed logo from repo Co-Authored-By: Claude Opus 5.5 --- MSCO.csproj | 2 +- README.md | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++- logo.png | Bin 0 -> 6861 bytes 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 logo.png diff --git a/MSCO.csproj b/MSCO.csproj index 6c2e7b6..4740fc0 100644 --- a/MSCO.csproj +++ b/MSCO.csproj @@ -101,7 +101,7 @@ - + MSCO.logo.png diff --git a/README.md b/README.md index 3b40897..7ece73a 100644 --- a/README.md +++ b/README.md @@ -1 +1,100 @@ -# MSCO \ No newline at end of file +# MSCO – My Summer Car Online + +Multiplayer-Mod für **My Summer Car** (MSCLoader). Spiel mit bis zu 3 Spielern zusammen – per Steam-Einladung +(P2P) oder auf einem dedizierten Server aus dem Server-Browser. + +- Mod: dieses Repository +- Dedizierter Server: [MSCO-Dedicated-Server](https://git.mbm.wtf/MrMaho/MSCO-Dedicated-Server) +- Keymaster & Serverliste: [MSCO-Keymaster](https://git.mbm.wtf/MrMaho/MSCO-Keymaster) – live unter https://msco.mbm.wtf + +## Features + +**Verbinden** +- Launcher im Hauptmenü im Stil von FiveM: P2P-Seite und Server-Browser +- **P2P über Steam:** HOST GAME, Freunde einladen, Beitritt über die Steam-Freundesliste (max. 3 Spieler) +- **Server-Browser:** Suche, Filter (Steam / Non-Steam / volle ausblenden), Ping, Server-Profil + (Besitzer, Version, Laufzeit, Spieler), lokale Server auf diesem PC werden automatisch gefunden +- **Direct Connect** per Adresse, JOIN-Links von der Website (`msco://`) starten das Spiel und verbinden direkt +- Server ohne Steam („Non-Steam“) werden unterstützt, andere Mod-Version = Warnung statt Sperre +- Der Host-Spielstand wird beim Start automatisch an alle übertragen; der eigene Spielstand wird vorher gesichert + und nach dem Spielen wiederhergestellt + +**Synchronisiert** +- Spieler als Spielfigur (Modell aus den NPCs des Spiels) mit Blickrichtung, Ducken/Lehnen, Namensschild +- Items, lose Teile, Schrauben und Fahrzeuge (auch mit G geschoben) mit Besitzer-System – inkl. was jemand in der Hand hält +- Fahrzeuge: Position, Lichter, Motorgeräusch; als **Beifahrer** mitfahren (Taste P) +- **Fahrzeugzustand:** Tank, Öl, Kühlwasser, Bremsflüssigkeit, Batterie, Schrauben-Festigkeit, Schäden, Verschleiß, + Kilometerstand, Lack, Vergaser-/Zündungseinstellungen +- Anbauen/Abbauen von Teilen und Schrauben (PlayMaker-Events) +- Türen, Tore, Hauben (z.B. Garagentor), Geld, Uhrzeit und Wetter + +**Im Spiel** +- **T** – Chat +- **F8** – MSCO-Konsole mit allen Befehlen +- **/admin** – Admin-Menü (Spieler kicken/bannen) für Server-Admins bzw. den P2P-Host +- **P** – als Beifahrer ein-/aussteigen +- Alle Tasten sind in den MSCLoader-Einstellungen der Mod änderbar +- Discord Rich Presence („In the Menus“, Server, Spielerzahl) + +## Installation + +1. [MSCLoader](https://github.com/piotrulos/MSCModLoader) installieren. +2. `MSCO.dll` in den Mods-Ordner kopieren (Standard: `Documents\MySummerCar\Mods`). +3. Spiel **über Steam** starten – ohne Steam gehen nur Non-Steam-Server. + +## Befehle + +In der F8-Konsole direkt, in der MSCLoader-Konsole mit `mp` davor (z.B. `mp connect ...`): + +| Befehl | Beschreibung | +|---|---| +| `connect ` | mit einem dedizierten Server verbinden | +| `disconnect` | Server / Spiel verlassen | +| `host [port]` / `join [port]` | LAN-Testsitzung ohne Steam | +| `save` | Spiel speichern (Host / Einzelspieler) | +| `admin` bzw. `/admin` im Chat | Admin-Menü | +| `vehicles`, `rig` | Diagnose: Fahrzeuge / Spielermodelle | +| `debug` | Sync-Debugausgaben an/aus | +| `master [url]` | Adresse der Serverliste anzeigen/ändern | +| `clear` | Konsole leeren | + +## Selbst bauen + +- Visual Studio 2022 oder neuer, .NET Framework 3.5 (Unity 5.0 / Mono) +- Die Verweise in `MSCO.csproj` zeigen auf `F:\SteamLibrary\steamapps\common\My Summer Car\mysummercar_Data\Managed\` + (UnityEngine, PlayMaker, Assembly-CSharp, Assembly-CSharp-firstpass, MSCLoader, 0Harmony, Newtonsoft.Json, cInput) – + bei anderem Installationsort anpassen. +- Nach dem Build wird die DLL automatisch nach `Documents\MySummerCar\Mods` kopiert (`MSCMODSFOLDER` in der csproj). + +``` +msbuild MSCO.csproj -p:Configuration=Release +``` + +## Aufbau + +| Datei | Aufgabe | +|---|---| +| `MSCO.cs` | Mod-Einstieg, Tastenbelegung | +| `MultiplayerManager.cs` | Sitzung, Nachrichten, Spielerliste, Spielstart, HUD | +| `NetSession.cs` | Netzwerk (TCP und Steam P2P), Protokoll | +| `LobbyUI.cs`, `Overlays.cs`, `UiTheme.cs` | Launcher, Konsole/Chat/Admin-Menü, gemeinsamer Stil | +| `ServerBrowser.cs`, `WinHttp.cs` | Serverliste (TLS 1.2 über WinHTTP), Server-Abfrage | +| `ObjectSync.cs` | Items/Teile/Fahrzeuge mit Besitzer-System | +| `VehicleStateSync.cs`, `VehicleFx.cs`, `Passenger.cs` | Fahrzeugzustand, Lichter/Sound, Beifahrer | +| `FsmSync.cs`, `DoorSync.cs`, `WorldSync.cs`, `MoneySync.cs` | Montage-Events, Türen, Zeit/Wetter, Geld | +| `RemotePlayer.cs`, `GameCharacter.cs` | Spielfiguren der Mitspieler | +| `SaveSync.cs`, `MenuHelper.cs` | Spielstand übertragen/sichern, Laden aus dem Menü | +| `SteamLobby.cs`, `JoinLinks.cs`, `DiscordPresence.cs` | Steam-Lobbys, `msco://`-Links, Discord | +| `SafetyPatches.cs`, `InputLock.cs`, `SceneCache.cs` | Absturzschutz, Eingabesperre, geteilte FSM-Suche | + +## Bekannte Einschränkungen + +- Teile, die nach dem Server-Spielstand montiert wurden, werden für neue Spieler nachgespielt – das klappt nicht immer + perfekt. `reset-world` auf dem Server setzt den Stand zurück. +- Maximal 3 Spieler. + +## Lizenz + +GNU AGPL-3.0 – siehe [LICENSE.txt](LICENSE.txt). + +Made by **MBM** – [mbm.wtf](https://mbm.wtf) diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bec43aa758f2e0d453296141cd0985baefdc06ce GIT binary patch literal 6861 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