0.4.0: Mitspieler in der Welt, BSO-Konto (Spiel-Ticket)

- Mitspieler als Bus/Spielfigur mit Namensschild, weich bewegt (RemotePlayers, Models)
- Ohne gueltiges Spiel-Ticket vom Launcher kein Multiplayer; Name kommt aus dem Konto
- Protokoll 2 (Hello mit Ticket), IPv6-Adressen
- Nach Szenenwechsel erst nach 3 s neu anlegen (Absturz im Test 0.3.0)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-28 18:10:48 +01:00
co-authored by Claude Opus 5.5
parent 35f2d1330d
commit 51c1ebc938
12 changed files with 397 additions and 10 deletions
+5 -1
View File
@@ -13,6 +13,8 @@ namespace BSO
public string Server { get; set; } = "127.0.0.1:7777";
/// <summary>Beim Spielstart automatisch verbinden (sonst F8).</summary>
public bool AutoConnect { get; set; }
/// <summary>Spiel-Ticket der BSO-Website - schreibt der Launcher bei SPIELEN hinein (24 h gueltig).</summary>
public string Ticket { get; set; }
public static Config Current { get; private set; } = new();
@@ -26,7 +28,9 @@ namespace BSO
if (File.Exists(ConfigFile)) Current = JsonSerializer.Deserialize<Config>(File.ReadAllText(ConfigFile), Options) ?? new Config();
// Immer zurueckschreiben: neue Einstellungen erscheinen so auch in alten Dateien
File.WriteAllText(ConfigFile, JsonSerializer.Serialize(Current, Options));
Bootstrap.Log($"Einstellungen: Name \"{Current.Name}\", Server {Current.Server}, AutoConnect {Current.AutoConnect}");
var ticket = BSO.Net.Ticket.Read(Current.Ticket);
Bootstrap.Log($"Einstellungen: Name \"{Current.Name}\", Server {Current.Server}, AutoConnect {Current.AutoConnect}, " +
(ticket == null ? "kein Spiel-Ticket" : $"Ticket fuer {ticket.Username} bis {ticket.Expires.ToLocalTime():dd.MM. HH:mm}"));
}
catch (Exception e)
{