- Car doors (FSM with bool "Open" and "Open door"/"Close door") are synced as open/closed: the receiver removes the hold joint and frees the hinge, closing runs the game's own logic - Fix: every synced close of an already closed Satsuma door added another FixedJoint, so the door could not be opened anymore; extra joints are removed automatically - Hinge sync also covers world doors/gates with hinges (garage door), interaction by bounds - Scene name read once per frame (Application.loadedLevelName allocates a string per call) - Console "perf" (FPS, ms per MSCO part incl. OnGUI, GC, hook calls), -msco-perf start option - Console "fsmdump <text>" / -msco-dump: PlayMaker FSMs and hinges to MSCO\fsmdump.txt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
19 KiB
Changelog
2.10.1
Türen
- Autotüren (Satsuma, Hayosiko, Kekmet, Gifu, Ferndale, Ruscko ...) werden jetzt als offen/zu übertragen: beim Mitspieler geht die Tür wirklich auf (Halte-Joint weg, Scharnier frei) und schwingt mit, Zumachen läuft über die Schließ-Logik des Spiels (mit Geräusch)
- Behoben: Satsuma-Türen ließen sich manchmal gar nicht mehr öffnen – jedes übertragene Zumachen hängte einen weiteren Halte-Joint an. Solche „verklemmten“ Türen werden automatisch repariert
- Garagentor (und andere Tore/Türen mit Scharnier) synchron
Leistung
- Szenenname wird nur noch einmal pro Bild abgefragt (vorher hundertfach – jedes Mal ein neuer String)
- Konsole
perf: FPS und Zeit pro MSCO-Teil (inkl. Oberfläche); Messung auf einem Server: MSCO braucht ~0,2 ms pro Bild – die FPS begrenzt das Spiel selbst - Konsole
fsmdump <text>: Diagnose für Spiel-Logik (Zustände, Aktionen, Scharniere) inMSCO\fsmdump.txt
2.10.0
Mod-Support
- Eigene MSCO-Mods: DLLs in
<Spielordner>\MSCO\Modsmit einer Klasse, die vonMscoModerbt (OnLoad, OnMenuLoad, OnGameLoad, Update, OnGUI, Spieler kommen/gehen, Sitzung, eigene Netzwerk-Nachrichten zwischen den Spielern). Anleitung und Beispiel:MODDING.md,examples/HelloMod - Server-Mods: Server mit Mods schicken beim Beitreten die Liste; fehlende Mods lädt das Spiel nach Zustimmung („INSTALL & JOIN“) direkt vom Server (SHA-256 geprüft). Sie sind nur auf diesem Server aktiv
- Neue Seite Mods im MSCO-Menü, Konsole
mods - Server-Browser: Pille MODS n, Filter VANILLA / MODDED, Mod-Liste im Server-Profil
- ESC im Hauptmenü beendet das Spiel nicht mehr (zum Beenden: QUIT)
- Netzwerk-Version bleibt 2.8 – Server und Mitspieler mit 2.8.x/2.9.x funktionieren weiter
2.9.1
Fehler ohne MSCLoader behoben
- Server-Browser: „Could not load System.Runtime.Serialization“ – MSCO braucht Newtonsoft.Json nicht mehr (eigener kleiner JSON-Leser); die Bibliothek kam vorher von MSCLoader
- Mauszeiger im Admin-Menü, Chat und in der Konsole wieder sichtbar (wie im Pausemenü des Spiels)
- Startbildschirm „Press any key“: statt ihm erscheint sofort ein MSCO-Ladebildschirm, dann das Hauptmenü
- JOIN im Browser, während das Spiel schon läuft: der Link kommt im Spiel an (Hinweis bzw. Beitreten im Hauptmenü)
Admin-Menü: Teleport
- Neuer Reiter TELEPORT: Haus, Laden (Teimo), Werkstatt, Prüfstelle, Peräjärvi, Müllkippe, Tanzhalle, Ferienhaus, Hütte, Rallye, Dragrace, Fußballplatz, Kilju-Käufer, Theater, Satsuma – man landet neben dem Ort auf dem Boden
MSCO-Look
- Fenstertitel „MSCO - My Summer Car Online“ und MSCO-Symbol; im Hauptmenü ist das MSCO-Logo statt des Spiel-Logos
- Oberfläche im Stil der Website: rundere Karten mit feinem Rand, Filter als Pillen, oranger Schimmer, schlanke Scrollleisten, Navigation mit abgerundeten Einträgen
2.9.0
Eigenständig – ohne MSCLoader
- MSCO braucht MSCLoader nicht mehr: es startet selbst über Unity Doorstop (
winhttp.dll) aus<Spielordner>\MSCO. Der MSCO Launcher richtet alles ein und stelltdoorstop_config.iniauf MSCO um – auch der Start über Steam lädt dann MSCO. MSCLoader ist dabei blockiert (seine Konfiguration wird alsdoorstop_config.mscloader.inigesichert) - Der Nachrichten-Bildschirm beim Spielstart („Press any key“) wird übersprungen, MSCO öffnet direkt im Hauptmenü
- Tasten ändern jetzt mit
bindin der F7-Konsole (bind passenger O), gespeichert in den Spiel-Einstellungen - Harmony und Newtonsoft.Json liegen neben
MSCO.dll; Lade-Protokoll inMSCO\MSCO_Loader.txt msco://-Links werden vom Launcher übernommen, wenn er installiert ist- Netzwerk-Version bleibt 2.8: spielt mit 2.8.x-Servern und -Mitspielern
2.8.1
Mehr Events synchron
- Zusätzlich zu Jobs, Laden, Werkstatt, Prüfstelle, Müllkippe, Tanzhalle, Ferienhaus und Rallye: Dragrace, Kilju-Käufer, Theater, Fußball, Peräjärvi (Dorf) und die Hütte - ständig wechselnde interne Zähler werden weiterhin automatisch ausgelassen
Admin-Menü
- Im Admin-Menü (Spieler-Reiter) gibt es MAKE ADMIN / REMOVE ADMIN: Admins können anderen Spielern Admin-Rechte geben oder nehmen (dedizierter Server ab 2.9.4; der Spieler braucht Steam)
Kleine Updates
- Mod-Version (2.8.1 für MSCLoader/MSC Launcher) und Netzwerk-Version (2.8) sind getrennt: Updates an der dritten Stelle passen zu allen 2.8-Servern und -Mitspielern. Anleitung im README („Updates veröffentlichen“)
Server-Browser
- Hervorgehobene Server: vom Keymaster-Admin markierte Server (Tag
featured) stehen ganz oben, mit goldener Zeile und FEATURED-Abzeichen (Liste und Profil) - Tags der Server erscheinen im Server-Profil; die Suche findet auch Tags. Serverbetreiber setzen eigene Tags im Web-Panel (Einstellungen), OFFICIAL vergeben nur die MSCO-Admins und wird hervorgehoben
- Braucht keinen neuen Server: die Infos kommen vom Master (msco.mbm.wtf) und funktionieren mit 2.8-Servern
Mitspieler als echte MSC-Menschen
- Andere Spieler sehen aus wie die Leute im Spiel: derselbe Körper wie alle MSC-Menschen, mit einem normalen Hemd, einer Hose und einem Gesicht aus dem Spiel (keine Kleider/Vorhänge/Geister). Bewegt wird ein eigenes Skelett mit der bisherigen Animation - laufen, springen, ducken, sitzen, Items halten
- Jeder Spieler bekommt (nach Spieler-Nummer) eine andere Kombination; alle Mitspieler sehen dieselbe
- Konsole (F7):
model classiczeigt wieder die MSCO-Figur,model gamedie MSC-Menschen;rigzeigt, wer welches Modell hat. Findet MSCO den Körper nicht, bleibt automatisch die MSCO-Figur
Türen an allen Fahrzeugen
- Türen hingen schief, sprangen zurück oder lösten sich: der Tür-Sync erfasste auch die FSMs zum An-/Abbauen, Festschrauben und Lackieren der Tür-Teile und erzwang deren Zustände beim Mitspieler. Jetzt nur noch Öffnen/Schließen
- Türen schaukelten hin und her: an einem stehenden Auto schickte jeder in der Nähe den Türwinkel zurück. Jetzt schickt nur, wer an der Tür geklickt hat (bzw. beim fahrenden Auto der Fahrer); empfangene Winkel werden länger gehalten
Mitfahren
- Wer im Fahrzeug ist, fährt mit - genau an seiner Stelle: Kopf in der Kabine, in der offenen Tür oder auf der Ladefläche -> die Position im Fahrzeug wird festgehalten, kein Umsetzen auf einen berechneten Sitz. Geht auch, wenn noch niemand fährt. Aussteigen mit Leertaste oder der Beifahrer-Taste (P) - man steht dann auf der näheren Seite neben dem Fahrzeug. P neben dem Auto setzt einen wie bisher auf den Beifahrersitz
- Beim Ein-/Aussteigen am Fahrersitz und kurz nach dem Fahren wird man nicht festgehalten
Satsuma zerfällt nicht mehr beim gemeinsamen Fahren
- Hing das Spiel des Fahrers kurz (z.B. beim Speichern für den Server), gab der Mitfahrer das Auto nach 3 s frei: es blieb bei ihm schlagartig stehen, die Teile wollten mit Tempo weiter und rissen ab - und das „Teil abgefallen“ ging an alle. Ein gefahrenes Auto wird jetzt erst nach 30 s ohne Daten freigegeben, rollt dann mit der Geschwindigkeit des Fahrers weiter, und die Teile bleiben noch 3 s fest, bis alles eingeschwungen ist
- Ladung im Auto (Kisten, Werkzeug, Teile im Kofferraum oder auf dem Sitz) gehört jetzt immer dem Fahrer. Vorher übernahm sie oft der Mitfahrer; beim Fahrer folgte sie dann verspätet und „unendlich schwer“ und schlug Sitze und Teile ab
Mitfahren ohne Ruckeln
- Fahrer und Beifahrer sitzen beim anderen fest auf dem Sitz: die Figur wird relativ zum Auto übertragen und geglättet, statt in Weltkoordinaten hinter dem fahrenden Auto herzuhinken (vorher wurde der Beifahrer bei Tempo nach hinten gezogen)
- Der Beifahrersitz wird jetzt aus der richtigen Fahrerposition berechnet (vorher aus der hinterherhinkenden Figur)
- Autos anderer Spieler ruckeln nicht mehr bei jedem Netzwerkpaket zurück (Vorausberechnung in Physik-Zeit) und werden zwischen den Physik-Schritten flüssig bewegt – auch der NPC-Verkehr
- Kompatibel: ältere Mods und der Server ignorieren die neuen Sitz-Daten
Schönere Oberfläche
- Fenster (Launcher, Konsole, Admin-Menü, Hinweise) mit weichem Schatten und feinem Rand, orange Knöpfe mit Verlauf
- Server-Browser: mehr Platz für die Liste, Zeilen leuchten beim Überfahren auf, Füllbalken für die Spielerzahl, Ping farbig (grün/gelb/rot), goldener Streifen bei hervorgehobenen Servern
- Seitenleiste mit Trennlinie, Menüpunkte werden beim Überfahren hell
2.8
Server und Mod müssen beide 2.8 sein (Server: git pull && docker compose up -d --build).
Weniger Hänger
- Der Server holt sich den Spielstand nur noch, wenn sich seit dem letzten etwas geändert hat (Speichern lässt das Spiel kurz hängen), Standard für neue Server alle 10 statt 5 Minuten
- Die teure Suche über alle PlayMaker-FSMs läuft seltener; die Schadens-Prüfung liest ab und zu nur noch ein Mesh
- Hänger-Erkennung: dauert ein Bild länger als 0,2 s, steht in der F7-Konsole, ob MSCO schuld war (und welcher Teil) oder das Spiel selbst (z.B. beim Speichern)
Behoben: Öl lief aus dem Satsuma
- Beim Beitreten lief Öl aus, obwohl der Spielstand lokal dicht war: die vom Spiel selbst berechneten Werte
LeakOilpan,LeakOilfilter,LeakRockerCover,LeakHeadgasket(und Raten wie…LeakRate) wurden wie echte Fahrzeugwerte synchronisiert und überschrieben den Stand aus dem Spielstand. Werden jetzt nicht mehr übertragen - Diagnose:
vars <filter>in der F7-Konsole zeigt die synchronisierten Fahrzeugwerte (z.B.vars oil)
Scharfe Oberfläche, FPS, Leistung
- Launcher wird in voller Auflösung gezeichnet (Schrift und Kanten scharf statt hochgezogen/verpixelt)
fpsin der F7-Konsole: FPS-Anzeige oben rechts (grün/gelb/rot), Konsole zeigt auch das längste Bild (Ruckler)- Weniger Ruckler: Sync-Teile suchen nach dem Laden nicht mehr alle im selben Frame, gemeinsame Suche nach Rigidbodys, Unfallschäden werden nur noch nach einem Aufprall geprüft (vorher jede Sekunde große Mesh-Kopien), Fahrzeug-Effekte schlagen ihre Bauteile seltener nach, Ping-/FPS-Anzeige ohne Registry-Zugriff pro Bild
Launcher im Vollbild
- Der MSCO-Launcher füllt das ganze Hauptmenü und skaliert automatisch mit der Auflösung; Listen wachsen mit dem Platz (keine abgeschnittenen Knöpfe mehr). Das Spielmenü dahinter (Logo, Farbauswahl, MP3 …) ist komplett verdeckt und gesperrt, die Menü-Musik ist stumm. MINIMIZE entfällt
P2P: Weiterspielen oder neues Spiel
- In der Host-Lobby: CONTINUE (eigenen Spielstand weiterspielen, mit Datum) oder NEW GAME (frische Welt für
alle). Der bisherige Spielstand wird vorher nach
MSCO_Saves/<Datum>gesichert (die letzten 10 bleiben), mit Sicherheitsabfrage. Mitspieler bekommen die neue Welt automatisch, sobald sie einmal gespeichert ist
Mehr Sync
- Einkäufe: gekaufte/ausgepackte Items tauchen bei allen auf (auch bei später Beitretenden)
- Verbrauchte Items: Gegessenes, Getrunkenes und Verbrauchtes verschwindet bei allen
- Räder drehen sich bei Autos, die ein anderer Spieler fährt
- Unfallschäden: verbeulte Karosserie wird an alle übertragen
- Jobs, Aufträge und Laden: Fortschritt (Auftrag angenommen, erledigt, bestellt ...) wird synchronisiert
- Zündung, Motor, Licht, Choke, Blinker, Wischer: die Schalterstellungen werden übertragen – beim anderen laufen Motor und Scheinwerfer dadurch wirklich (nicht nur das Geräusch)
- Autotüren, Motorhaube, Kofferraum: stehen bei allen im selben Winkel offen
- Verkehr: NPC-Autos fahren bei allen an derselben Stelle (der erste Spieler simuliert, die anderen folgen)
vehiclesin der F7-Konsole zeigt, wie viele Karosserie-Meshes, Job-Werte und Verkehrsautos synchronisiert werden
Admin: Welt verwalten (neuer Reiter WORLD im Admin-Menü)
- RESET WORLD: die ganze Welt zurück auf den Spielstand, wie er auf den Server hochgeladen wurde (Reset-Punkt) – das automatische Hochladen alle 5 Minuten ändert den Reset-Punkt nicht; der Stand davor wird gesichert
- SET RESET POINT: den aktuellen Spielstand als neuen Reset-Punkt nehmen (Server-Befehl:
set-reset-point) - BACKUP NOW: aktuellen Server-Spielstand sichern (Server-Befehl:
backup) - Backups mit Datum/Uhrzeit, RESTORE holt einen älteren Stand zurück (der aktuelle wird vorher gesichert)
- Jede Aktion mit Sicherheitsabfrage; nur für Admins (vom Server geprüft)
Favoriten
- Herz neben jedem Server (Liste und Profil) merkt ihn als Favorit
- Neuer Tab Favorites: jedem Server einen eigenen Kurznamen geben, beitreten, entfernen, per Adresse hinzufügen
- Schnell wechseln:
/switch <kurzname>im Chat oderswitch <kurzname>in der F7-Konsole – trennt und verbindet direkt mit dem anderen Server;favlistet alle,fav add <name>merkt den aktuellen Server
Pro Spieler
- Hunger, Durst, Stress, Harndrang, Müdigkeit und Schmutz werden für jeden Spieler einzeln auf dem Server gespeichert und beim Beitreten zurückgegeben (nicht mehr die Werte aus dem gemeinsamen Spielstand)
Spielerfiguren
- Springen: die ganze Figur hebt ab (vorher ging nur der Oberkörper nach oben), Knie werden angezogen
- Runder Gürtel, runde Schultern, abgerundete Stiefel mit Sohle
Hinweise
- Kleine Benachrichtigung oben rechts, wenn jemand beitritt oder das Spiel verlässt
Trennen & Neu-Verbinden
- Gekickt, gebannt, Server beendet, Verbindung verloren: eigenes Fenster in der Bildmitte mit Grund und OK (im Spiel wird der Grund vorher 2,5 s groß angezeigt)
reset-world/reload-save/ Server-Neustart (z.B. Update perdocker compose up) / Verbindung verloren: Fenster „Reconnecting“ – verbindet automatisch neu, bis zu 10 Versuche (ca. 1 Minute), mit CANCEL-Knopf. Nach Kick, Ban oder eigenem Trennen wird nicht neu verbunden
Behoben
- Nach Kick/Reset kam weder das Fenster mit dem Grund noch das automatische Neu-Verbinden: MSCLoader lädt beim Wechsel ins Hauptmenü alle Mods neu und damit ging der Zustand verloren. Er wird jetzt vorher gesichert und danach fortgesetzt
- Absturz („NaN … collider“) und abfallende Teile am Satsuma: Türen/Haube/Kofferraum wurden gegen das Scharnier an ihre Position teleportiert – das erzeugte riesige Kräfte. Jetzt zieht die Feder des Scharniers sie sanft auf den Winkel
- Beim anderen Spieler „orgelte“ der Anlasser endlos: erzwungene Geräusche/Lichter werden losgelassen, sobald keine Daten mehr vom Fahrer kommen
- Beim Neuladen der Welt wurden herumliegende Objekte als „verbraucht“ gemeldet und bei allen gelöscht. Jetzt werden nur einzelne echte Items gemeldet, Fahrzeuge/Teile nie gelöscht, und der Server nimmt höchstens 20 pro Minute an
Leistung
- Mod: herumliegende Objekte werden nur noch jedes 4. Frame geprüft (eigene/gehaltene/gefahrene weiterhin jedes Frame), weniger Speicher-Allokationen pro Frame, Gelenke fremd gefahrener Autos seltener geprüft
- Server: Nachrichten an alle werden nur einmal verpackt; der Server wartet auf eingehende Daten statt fest zu schlafen (geringere Verzögerung, fast keine CPU-Last im Leerlauf)
2.7
Server und Mod müssen beide 2.7 sein (Server: git pull && docker compose up -d --build).
Neu
- Eigene Spielerfigur im MSC-Stil (Karohemd, Jeans, Arbeitsschuhe, Schnurrbart, Kappe oder Haare, je Spieler etwas anders) statt kopierter NPCs – keine liegenden/verbuggten Figuren mehr
- Ping-Anzeige oben rechts:
pingin der F7-Konsole (grün/gelb/rot) - MSCO-Konsole jetzt auf F7 (F8 öffnet im Pausenmenü ein Test-Menü des Spiels)
- Admin-Menü: Cheats (+1.000 / +10.000 MK, Bedürfnisse auffüllen, Satsuma zu sich holen), GOTO / BRING (teleportieren)
- Fahrzeugzustand-Sync: Tank, Öl, Kühlwasser, Bremsflüssigkeit, Batterie, Schäden, Verschleiß, Kilometerstand, Lack
vehiclesin der Konsole zeigt die Position jedes Fahrzeugs- Admin-Menü mit Reitern: PLAYERS (Kick/Ban/GOTO/BRING, Cheats), ITEMS (Items spawnen – alle sehen sie, auf dem
Server gespeichert), BANS (Sperren aufheben); Server-Befehle
bans/unban - Tacho, Drehzahlmesser, Tank-/Temperaturanzeige und Lenkrad werden beim Beifahrer mitbewegt
- Flüssigerer Sync: Position wird aus der Geschwindigkeit vorausberechnet, 30 Updates/s
- Letzte Position wird zuverlässig gespeichert (nicht mehr immer an der Toilette spawnen)
- Server-Browser: Klick auf den Server öffnet das Profil (JOIN-Knopf in der Liste entfernt)
- Alle Mod-Meldungen nur noch in der MSCO-Konsole (F7)
- Eigenes Hauptmenü: Continue, New Game, Credits, Changelog und Quit des Spiels sind ausgeblendet, der MSCO-Launcher ist das Hauptmenü (mit eigenem QUIT)
- Server-Profil neu: JOIN oben, Spielerliste rechts, Namensfeld ohne Steam in eigenem Kasten
- Admin-ITEMS: Werkzeuge und Laden-Artikel (Ratschenkasten, Batterie, Motoröl, Kühlmittel, Bremsflüssigkeit ...)
- Nach dem Trennen (Kick, Ban, Shutdown, Timeout ...) zeigt das Hauptmenü den Grund
reset-world/reload-saveauf dem Server: alle Spieler bekommen eine Meldung und verbinden sich automatisch neu- Server holt sich den aktuellen Spielstand vom Spiel (beim Beitreten und alle 5 Minuten): neue Spieler bekommen exakt die aktuelle Welt – Schrauben fest, Teile dran – statt nachgespielter Aktionen; Backups der letzten 5 Stände
- Feuer, Rauch, Dampf und Funken an Fahrzeugen werden synchronisiert, auch bei geparkten Autos
- Kick-, Ban-, Reset- und Shutdown-Meldungen kommen zuverlässig an (Server trennt sauber)
- Status-Punkt gelb, bis man wirklich verbunden ist
Behoben
- Auto fiel beim Fahren eines anderen Spielers auseinander (angebaute Teile rissen an ihren Gelenken ab)
- Auto kippte mit dem Kopf des Fahrers mit und zitterte (Fahrzeug wurde als „in der Hand gehalten“ erkannt)
- Satsuma wurde weggeschleudert und war „verschwunden“ – ungültige/im Boden liegende Positionen werden jetzt verworfen bzw. angehoben, weggeschleuderte Objekte sofort gestoppt
- Items und Autos zitterten nach dem Loslassen (Ownership-Pingpong)
- Absturz beim Beitreten durch einen Kreis in der Objekt-Hierarchie (nachgespielte Montage-Aktion)
- Tippen im Chat/in der Konsole löste Spieltasten aus (Benutzen, Beifahrer-Taste P …)
- Maus sprang bei offenem Admin-Menü/Chat immer in die Bildmitte
- Ein Fehler in einem Sync-Teil legt nicht mehr den ganzen Sync lahm
- Freie Fahrzeuge: nur noch deutliche Wertänderungen werden abgeglichen (kein gegenseitiges Überschreiben)
Sicherheit (Server)
- Admin-Rechte nur noch für von Steam bestätigte SteamIDs – der Server braucht dafür einen
SteamWebApiKey(sonst könnte sich jeder als Admin ausgeben). Unbestätigte SteamIDs können niemanden mehr vom Server drängen. - Ungültige Positionen werden nicht gespeichert, Paketgröße und Weltzustand sind begrenzt
Server & Keymaster
- Master-Adresse fest (
msco.mbm.wtf), nicht mehr änderbar - Docker läuft als dein Linux-Benutzer (kein „Permission denied“ in
data/mehr), klare Meldungen statt Absturz docker exec msco-server msco <befehl>für Server-Befehle- Keymaster: Rate-Limits, Security-Header, Healthcheck, Docs-Seite
- Automatische Tests: Server
dotnet run --project Tests(30 Checks), Keymasternpm run smoke(24 Checks)