From c3b8882dd60fcf6dcd99c6d85487f5fbb0cd0238 Mon Sep 17 00:00:00 2001 From: TsengSR Date: Sun, 17 Aug 2025 20:51:42 +0200 Subject: [PATCH] Updated Attachments collection faster as soon as we get an object update from the server. This helps avoid a lot of issues where labels are not updating in Radegast. --- LibreMetaverse/AppearanceManager.cs | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/LibreMetaverse/AppearanceManager.cs b/LibreMetaverse/AppearanceManager.cs index f5a30321..e092e38a 100644 --- a/LibreMetaverse/AppearanceManager.cs +++ b/LibreMetaverse/AppearanceManager.cs @@ -426,6 +426,7 @@ namespace OpenMetaverse Client.Network.RegisterCallback(PacketType.AgentCachedTextureResponse, AgentCachedTextureResponseHandler); Client.Network.RegisterCallback(PacketType.RebakeAvatarTextures, RebakeAvatarTexturesHandler); + Client.Objects.ObjectUpdate += Objects_AttachmentUpdate; Client.Network.Disconnected += Network_OnDisconnected; Client.Network.SimChanged += Network_OnSimChanged; } @@ -2716,6 +2717,37 @@ namespace OpenMetaverse Client.Network.CurrentSim.Caps.CapabilitiesReceived += Simulator_OnCapabilitiesReceived; } + private void Objects_AttachmentUpdate(object sender, PrimEventArgs e) + { + Primitive prim = e.Prim; + + if (Client.Self.LocalID == 0 + || prim.ParentID != Client.Self.LocalID + || prim.NameValues == null + || !prim.IsAttachment + || !e.IsNew) + { + return; + } + + // Updates Attachment points as soon as the data arrives + for (int i = 0; i < prim.NameValues.Length; ++i) + { + if (prim.NameValues[i].Name != "AttachItemID") + { + continue; + } + + UUID inventoryID = new UUID(prim.NameValues[i].Value.ToString()); + + if (Attachments.TryGetValue(inventoryID, out AttachmentPoint attachmentPoint)) + { + Attachments.AddOrUpdate(inventoryID, attachmentPoint, (id, value) => prim.PrimData.AttachmentPoint); + } + break; + } + } + private void Simulator_OnCapabilitiesReceived(object sender, CapabilitiesReceivedEventArgs e) { e.Simulator.Caps.CapabilitiesReceived -= Simulator_OnCapabilitiesReceived;