From dd4e004d51cc20802073b799cf00f83eacd18191 Mon Sep 17 00:00:00 2001 From: MrMaho Date: Sun, 4 Oct 2026 20:45:59 +0200 Subject: [PATCH] 2.10.9: beta notice in the MSCO menu and the in-game status bar Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 6 ++++++ LobbyUI.cs | 15 +++++++++++++++ MSCO.cs | 2 +- MultiplayerManager.cs | 12 +++++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23ffb31..c91f76d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 2.10.9 + +- **Beta-Hinweis:** im MSCO-Menü steht „BETA“ neben dem Schriftzug und ein kurzer Hinweis, dass Fehler auftreten + können; die Statusleiste im Spiel zeigt „MSCO BETA“ +- Die Statusleiste baut ihren Text nur noch bei Änderungen neu (nicht jedes Frame) + ## 2.10.8 **Stabilität – weniger Hänger** diff --git a/LobbyUI.cs b/LobbyUI.cs index 3e342a2..b53e0a6 100644 --- a/LobbyUI.cs +++ b/LobbyUI.cs @@ -73,6 +73,7 @@ namespace MSCO GUIStyle dangerStyle; GUIStyle windowBox, sidebarBox, rowBox, accentBox, pillStyle, pillMutedStyle, chipOnStyle, chipOffStyle; GUIStyle featuredRowBox, pillFeaturedStyle; + GUIStyle betaPillStyle, betaNoteStyle; GUIStyle logoStyle, taglineStyle, navStyle, navActiveStyle, titleStyle, textStyle, captionStyle, fieldStyle, primaryStyle, secondaryStyle, statusStyle, tabStyle, headerCellStyle, rowNameStyle, rowTagStyle, badgeStyle, toggleStyle, placeholderStyle; @@ -193,6 +194,9 @@ namespace MSCO textX = r.x + S(72); } GUI.Label(new Rect(textX, r.y + S(24), r.xMax - textX, S(40)), "MSCO", logoStyle); + // Beta-Abzeichen direkt hinter dem Schriftzug + float logoWidth = logoStyle.CalcSize(new GUIContent("MSCO")).x; + GUI.Box(new Rect(textX + logoWidth + S(6), r.y + S(36), S(40), S(18)), "BETA", betaPillStyle); GUI.Label(new Rect(r.x + S(22), r.y + S(70), r.width - S(30), S(20)), "MY SUMMER CAR ONLINE", taglineStyle); GUI.DrawTexture(new Rect(r.x + S(20), r.y + S(98), r.width - S(40), S(1)), texDivider); @@ -206,6 +210,9 @@ namespace MSCO y += S(44); int modCount = ModLoader.All.Count; if (NavButton(new Rect(r.x, y, r.width, S(42)), "Mods" + (modCount > 0 ? " (" + modCount + ")" : ""), page == Page.Mods)) page = Page.Mods; + y += S(54); + GUI.Label(new Rect(r.x + S(22), y, r.width - S(40), S(64)), + "MSCO is still in beta - bugs can happen. If something goes wrong, please tell us.", betaNoteStyle); // Eigenes Hauptmenü: Spiel beenden (die Knöpfe des Spiel-Menüs sind ausgeblendet) if (quitConfirm) @@ -1120,6 +1127,14 @@ namespace MSCO logoStyle = Label(P(28), Color.white, FontStyle.Bold); taglineStyle = Label(P(10), Muted, FontStyle.Bold); + betaPillStyle = UiTheme.Panel9(UiTheme.Accent, 4); + if (UiTheme.DynamicFont != null) betaPillStyle.font = UiTheme.DynamicFont; + betaPillStyle.normal.textColor = new Color(0.1f, 0.07f, 0.02f); + betaPillStyle.fontSize = P(10); + betaPillStyle.fontStyle = FontStyle.Bold; + betaPillStyle.alignment = TextAnchor.MiddleCenter; + betaNoteStyle = Label(P(11), Muted, FontStyle.Normal); + betaNoteStyle.wordWrap = true; titleStyle = Label(P(24), Color.white, FontStyle.Bold); textStyle = Label(P(13), Muted, FontStyle.Normal); textStyle.wordWrap = true; diff --git a/MSCO.cs b/MSCO.cs index 33c4a58..54c691e 100644 --- a/MSCO.cs +++ b/MSCO.cs @@ -11,7 +11,7 @@ namespace MSCO /// Version der Mod. Kleine Updates: nur die dritte Stelle erhöhen (2.9.1, 2.9.2 ...) - sie bleiben mit /// Servern und Mitspielern derselben ersten zwei Stellen kompatibel. /// - public const string ModVersion = "2.10.8"; + public const string ModVersion = "2.10.9"; /// /// Netzwerk-Version (die ersten beiden Stellen). Nur erhöhen, wenn sich das Protokoll inkompatibel ändert - dann /// auch GameServer.ModVersion im Server. diff --git a/MultiplayerManager.cs b/MultiplayerManager.cs index 6b825a8..3f394e1 100644 --- a/MultiplayerManager.cs +++ b/MultiplayerManager.cs @@ -2725,12 +2725,22 @@ namespace MSCO InputLock.Set(overlays.AnyOpen && MenuHelper.InGame); } + string hudText; + int hudTextKey; + void DrawHud() { // Statuszeile oben in der Mitte (links oben ist die Spielanzeige) string state = IsFullyConnected ? "CONNECTED" : IsPeerReady ? "SYNCING..." : "WAITING"; - string text = "MSCO • " + state + " • " + (dedicated ? "Server" : IsHost ? "Host" : "Client") + " • " + + // Text nur neu bauen, wenn sich etwas geändert hat (nicht jedes Frame neue Strings) + int key = (state.Length * 31 + players.Count) * 100003 + objects.Count + (dedicated ? 7 : IsHost ? 3 : 1) * 1000000007; + if (hudText == null || key != hudTextKey) + { + hudTextKey = key; + hudText = "MSCO BETA • " + state + " • " + (dedicated ? "Server" : IsHost ? "Host" : "Client") + " • " + players.Count + " player(s) • " + objects.Count + " synced objects"; + } + string text = hudText; var rect = new Rect((Screen.width - 520) / 2f, 6, 520, 24); if (hudBox == null) hudBox = UiTheme.Panel9(new Color(0.06f, 0.06f, 0.07f, 0.85f), 8); GUI.Box(rect, GUIContent.none, hudBox);