diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 3b0430bed0..d73802e0b5 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -1116,6 +1116,8 @@ namespace OpenSim.Framework
///
void SendKillObject(List localID);
+ void SendPartFullUpdate(ISceneEntity ent, uint? parentID);
+
void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs);
void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args);
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 475cfe2ad1..06f13015e3 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -4208,9 +4208,35 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(packet, ThrottleOutPacketType.Task, true);
}
+
+
#endregion Packet Sending
+
}
+ // hack.. dont use
+ public void SendPartFullUpdate(ISceneEntity ent, uint? parentID)
+ {
+ if (ent is SceneObjectPart)
+ {
+ SceneObjectPart part = (SceneObjectPart)ent;
+ ObjectUpdatePacket packet = (ObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ObjectUpdate);
+ packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
+ packet.RegionData.TimeDilation = 1;
+ packet.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
+
+ ObjectUpdatePacket.ObjectDataBlock blk = CreatePrimUpdateBlock(part, this.m_agentId);
+ if (parentID.HasValue)
+ {
+ blk.ParentID = parentID.Value;
+ }
+
+ packet.ObjectData[0] = blk;
+
+ OutPacket(packet, ThrottleOutPacketType.Task, true);
+ }
+ }
+
public void ReprioritizeUpdates()
{
lock (m_entityUpdates.SyncRoot)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 5ebf3dbb10..73283ed270 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1916,6 +1916,7 @@ namespace OpenSim.Region.Framework.Scenes
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200)
return;
+ p.ControllingClient.SendPartFullUpdate(sog.RootPart,LocalId + 1);
sog.SendFullUpdateToClient(p.ControllingClient);
SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path
});
@@ -4746,7 +4747,10 @@ namespace OpenSim.Region.Framework.Scenes
foreach (SceneObjectGroup sog in m_attachments)
{
if (p == this || !sog.HasPrivateAttachmentPoint)
+ {
+ p.ControllingClient.SendPartFullUpdate(sog.RootPart, LocalId + 1);
sog.SendFullUpdateToClient(p.ControllingClient);
+ }
}
SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path
}
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index f35ea92caf..2112b718aa 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1702,5 +1702,8 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
{
}
+ public void SendPartFullUpdate(ISceneEntity ent, uint? parentID)
+ {
+ }
}
}
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 7002d75869..fa1d38a31f 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -1272,5 +1272,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
{
}
+ public void SendPartFullUpdate(ISceneEntity ent, uint? parentID)
+ {
+ }
+
}
}
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index f3eaed3a2a..27580300d8 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -536,6 +536,10 @@ namespace OpenSim.Tests.Common.Mock
ReceivedKills.AddRange(localID);
}
+ public void SendPartFullUpdate(ISceneEntity ent, uint? parentID)
+ {
+ }
+
public virtual void SetChildAgentThrottle(byte[] throttle)
{
}