diff --git a/CHANGELOG.md b/CHANGELOG.md index 85de3c2..c48e1e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,12 @@ Server und Mod müssen beide 2.8 sein (Server: `git pull && docker compose up -d --build`). +**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) diff --git a/Commands.cs b/Commands.cs index 74cd3bc..f7146ca 100644 --- a/Commands.cs +++ b/Commands.cs @@ -21,6 +21,7 @@ namespace MSCO "fps [on|off] - show the frames per second (toggle)\n" + "/admin - admin menu (kick / ban / teleport / cheats)\n" + "vehicles | rig - debug info about vehicles / player models\n" + + "vars - synced vehicle values, e.g. vars oil (debug)\n" + "debug - toggle sync debug output\n" + "clear - clear this console"; @@ -129,6 +130,10 @@ namespace MSCO case "vehicles": foreach (string line in mp.DescribeVehicles()) print(line); break; + case "vars": + // Diagnose: welche Fahrzeugwerte synchronisiert werden (z.B. "vars oil") + foreach (string line in mp.DescribeVehicleValues(args.Length > 1 ? args[1] : "")) print(line); + break; case "debug": FsmSync.Debug = !FsmSync.Debug; print("Sync debug output " + (FsmSync.Debug ? "ON" : "OFF")); diff --git a/MultiplayerManager.cs b/MultiplayerManager.cs index 408f726..dcfb7e6 100644 --- a/MultiplayerManager.cs +++ b/MultiplayerManager.cs @@ -210,6 +210,9 @@ namespace MSCO return lines; } + /// Konsole "vars ": synchronisierte Fahrzeugwerte (Diagnose). + public List DescribeVehicleValues(string filter) { return vehicleState.Describe(filter, 60); } + public List DescribeVehicles() { var lines = objects.DescribeVehicles(); diff --git a/VehicleStateSync.cs b/VehicleStateSync.cs index 1cf9ef4..a77e72e 100644 --- a/VehicleStateSync.cs +++ b/VehicleStateSync.cs @@ -28,7 +28,14 @@ namespace MSCO // Montiert-Flags nicht direkt setzen: das echte Anbauen läuft über FsmSync (Events) // Schrauben/Festigkeit laufen über FsmSync (Events) - ein falscher Wert hier würde Teile lockern und abfallen lassen - static readonly string[] Excluded = { "install", "bolt", "tight", "detach", "attach", "rpm", "speed", "steer", "throttle", "gear", "raycast", "distance" }; + // Vom Spiel selbst berechnete Werte ebenfalls nicht: z.B. LeakOilpan/LeakOilfilter (leckt Öl?) ergibt sich aus + // angebauten/festgezogenen Teilen - ein übertragener alter Wert ließ beim Beitreten Öl auslaufen. Raten (…Rate) + // rechnet das Spiel laufend neu aus. + static readonly string[] Excluded = + { + "install", "bolt", "tight", "detach", "attach", "rpm", "speed", "steer", "throttle", "gear", "raycast", "distance", + "leak", "rate" + }; const float ScanInterval = 10f; const float CheckInterval = 0.5f; @@ -37,6 +44,7 @@ namespace MSCO class Var { public int Key; + public string Name; // Pfad|FSM|Variable (für die Diagnose "vars") public string Root; public NamedVariable Variable; public byte Type; // 1 float, 2 int, 3 bool @@ -53,6 +61,24 @@ namespace MSCO public int Count { get { return vars.Count; } } + /// Diagnose (Konsole "vars "): synchronisierte Fahrzeugwerte mit aktuellem Wert. + public List Describe(string filter, int max) + { + var lines = new List(); + string f = (filter ?? "").ToLower(); + foreach (Var v in vars.Values) + { + if (f.Length > 0 && (v.Name == null || !v.Name.ToLower().Contains(f))) continue; + string value = v.Type == 1 ? ((FsmFloat)v.Variable).Value.ToString("0.###") + : v.Type == 2 ? ((FsmInt)v.Variable).Value.ToString() + : ((FsmBool)v.Variable).Value.ToString(); + lines.Add(" " + v.Name + " = " + value); + if (lines.Count >= max) { lines.Add(" ... (more - use a narrower filter)"); break; } + } + if (lines.Count == 0) lines.Add(" no synced vehicle value matches '" + filter + "'"); + return lines; + } + public void Reset() { vars.Clear(); @@ -180,7 +206,7 @@ namespace MSCO int key = Hash(prefix + variable.Name); Var existing; if (vars.TryGetValue(key, out existing) && existing.Variable == variable) return; - var v = new Var { Key = key, Root = root, Variable = variable, Type = type }; + var v = new Var { Key = key, Name = prefix + variable.Name, Root = root, Variable = variable, Type = type }; Remember(v); vars[key] = v;