diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 9767fa8a..615d31e3 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -2495,6 +2495,10 @@ public sealed class GameWindow : IDisposable /// private void OnLiveEntitySpawned(AcDream.Core.Net.WorldSession.EntitySpawn spawn) { + // D.5.1: enrich a known inventory/equipped item (stubbed from PlayerDescription) + // with the icon/name/type its CreateObject carries, so the toolbar can render it. + Items.EnrichItem(spawn.Guid, spawn.IconId, spawn.Name ?? string.Empty, (AcDream.Core.Items.ItemType)(spawn.ItemType ?? 0)); + // Phase A.1 hotfix: live CreateObject handler reads dats extensively // (Setup, GfxObj, Surface, SurfaceTexture) to hydrate the spawned // entity. All of it must run under the dat lock so it doesn't race diff --git a/src/AcDream.Core.Net/WorldSession.cs b/src/AcDream.Core.Net/WorldSession.cs index 8b4e0f74..2f07ede3 100644 --- a/src/AcDream.Core.Net/WorldSession.cs +++ b/src/AcDream.Core.Net/WorldSession.cs @@ -80,7 +80,9 @@ public sealed class WorldSession : IDisposable // sizing hint for tall-scenery selection indicators when the // server publishes it for non-useable display entities. uint? Useability = null, - float? UseRadius = null); + float? UseRadius = null, + // D.5.1: icon datId from CreateObject WeenieHeader, for toolbar rendering. + uint IconId = 0); /// Fires when the session finishes parsing a CreateObject. public event Action? EntitySpawned; @@ -716,7 +718,8 @@ public sealed class WorldSession : IDisposable parsed.Value.Friction, parsed.Value.Elasticity, parsed.Value.Useability, - parsed.Value.UseRadius)); + parsed.Value.UseRadius, + parsed.Value.IconId)); } } else if (op == DeleteObject.Opcode)