From 1aa335078a15b176215df963980fdb1141494324 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 22 Aug 2014 21:54:00 +0100 Subject: sop SendFullUpdate() goes by presence if it is a attachment --- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 15 +++++++++- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 32 +++++++++++++++++----- 2 files changed, 39 insertions(+), 8 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 0930820..6fbe732 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -3237,7 +3237,19 @@ namespace OpenSim.Region.Framework.Scenes // m_log.DebugFormat( // "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); - + + + if (ParentGroup.IsAttachment) + { + ScenePresence sp = ParentGroup.Scene.GetScenePresence(ParentGroup.AttachedAvatar); + if (sp != null) + { + sp.SendAttachmentUpdate(this, UpdateRequired.FULL); + } + } + +/* this does nothing +SendFullUpdateToClient(remoteClient, Position) ignores position parameter if (IsRoot) { if (ParentGroup.IsAttachment) @@ -3249,6 +3261,7 @@ namespace OpenSim.Region.Framework.Scenes SendFullUpdateToClient(remoteClient, AbsolutePosition); } } +*/ else { SendFullUpdateToClient(remoteClient); diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index faa07d4..d471930 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1891,7 +1891,7 @@ namespace OpenSim.Region.Framework.Scenes foreach (SceneObjectGroup sog in m_attachments) { SendFullUpdateToClient(ControllingClient); - sog.SendFullUpdateToClient(ControllingClient); + SendAttachmentFullUpdateToAgentNF(sog, this); if (!sog.HasPrivateAttachmentPoint) { @@ -1905,7 +1905,7 @@ namespace OpenSim.Region.Framework.Scenes continue; SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path - sog.SendFullUpdateToClient(p.ControllingClient); + SendAttachmentFullUpdateToAgentNF(sog, p); }; } sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); @@ -4745,9 +4745,11 @@ namespace OpenSim.Region.Framework.Scenes { if (p != this && sog.HasPrivateAttachmentPoint) return; + if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) return; - sog.SendFullUpdateToClient(p.ControllingClient); + + SendAttachmentFullUpdateToAgentNF(sog, p); SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path }); } @@ -4762,15 +4764,31 @@ namespace OpenSim.Region.Framework.Scenes { foreach (SceneObjectGroup sog in m_attachments) { - if (p == this || !sog.HasPrivateAttachmentPoint) - { - sog.SendFullUpdateToClient(p.ControllingClient); - } + SendAttachmentFullUpdateToAgentNF(sog, p); } SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path } } + public void SendAttachmentFullUpdateToAgentNF(SceneObjectGroup sog, ScenePresence p) + { + if (p != this && sog.HasPrivateAttachmentPoint) + return; + + SceneObjectPart[] parts = sog.Parts; + SceneObjectPart rootpart = sog.RootPart; + + p.ControllingClient.SendEntityUpdate(rootpart, PrimUpdateFlags.FullUpdate); + + for (int i = 0; i < parts.Length; i++) + { + SceneObjectPart part = parts[i]; + if (part == rootpart) + continue; + p.ControllingClient.SendEntityUpdate(part, PrimUpdateFlags.FullUpdate); + } + } + public void SendAttachmentScheduleUpdate(SceneObjectGroup sog) { if (IsChildAgent || IsInTransit) -- cgit v1.1