diff --git a/src/AcDream.Launcher.Core/Orchestration/LauncherOrchestrator.cs b/src/AcDream.Launcher.Core/Orchestration/LauncherOrchestrator.cs index 9bb48560..f7923808 100644 --- a/src/AcDream.Launcher.Core/Orchestration/LauncherOrchestrator.cs +++ b/src/AcDream.Launcher.Core/Orchestration/LauncherOrchestrator.cs @@ -873,6 +873,13 @@ public sealed class LauncherOrchestrator : ILauncherOrchestrator { activity.State = LauncherActivityState.InWorld; } + // LU6: keep the identity, not just a sentence about it. A + // character-select launch has no character name until this + // arrives, and the sessions list should say who is playing. + if (!string.IsNullOrWhiteSpace(enteredWorld.CharacterName)) + { + activity.CharacterName = enteredWorld.CharacterName; + } activity.Status = $"In world as {enteredWorld.CharacterName}."; break; case PluginLoadedStatusEvent loaded: @@ -1269,7 +1276,14 @@ public sealed class LauncherOrchestrator : ILauncherOrchestrator public string AccountName { get; } - public string? CharacterName { get; } + /// + /// LU6: settable so the character the player ACTUALLY entered the world + /// as can replace a null. A character-select launch starts with no + /// character name, and the host's own enteredWorld event is the only + /// place that identity ever becomes known — it used to be written into + /// a status string and thrown away. + /// + public string? CharacterName { get; set; } public LaunchMode? LaunchMode { get; } diff --git a/src/AcDream.Launcher/MainWindow.axaml b/src/AcDream.Launcher/MainWindow.axaml index 44526b0e..bb638338 100644 --- a/src/AcDream.Launcher/MainWindow.axaml +++ b/src/AcDream.Launcher/MainWindow.axaml @@ -160,9 +160,14 @@ - - + @@ -188,13 +193,22 @@ + -