# Changelog ## Nächste Version **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 classic` zeigt wieder die MSCO-Figur, `model game` die MSC-Menschen; `rig` zeigt, 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 ` 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) - `fps` in 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/` 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) - `vehicles` in 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 ` im Chat oder `switch ` in der F7-Konsole – trennt und verbindet direkt mit dem anderen Server; `fav` listet alle, `fav add ` 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 per `docker 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: `ping` in 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 - `vehicles` in 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-save` auf 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 ` für Server-Befehle - Keymaster: Rate-Limits, Security-Header, Healthcheck, Docs-Seite - Automatische Tests: Server `dotnet run --project Tests` (30 Checks), Keymaster `npm run smoke` (24 Checks)