From 139044fc79844b455574fd0be7baa1bab9bf78d9 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 26 Oct 2014 01:25:28 +0000 Subject: keep intransit flag even if deleted, dont set sog position if in transit --- .../Region/Framework/Scenes/SceneObjectGroup.cs | 79 +++++++++++----------- 1 file changed, 38 insertions(+), 41 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index dea8f3e..9f2a689 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -529,7 +529,7 @@ namespace OpenSim.Region.Framework.Scenes set { Vector3 val = value; - + if (Scene != null && !inTransit) { if ( @@ -552,54 +552,55 @@ namespace OpenSim.Region.Framework.Scenes d.BeginInvoke(this, val, CrossAsyncCompleted, d); return; } - } - if (RootPart.GetStatusSandbox()) - { - if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10) + + if (RootPart.GetStatusSandbox()) { - RootPart.ScriptSetPhysicsStatus(false); - - if (Scene != null) - Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), - ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); - - return; - } - } + if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10) + { + RootPart.ScriptSetPhysicsStatus(false); - bool triggerScriptEvent = m_rootPart.GroupPosition != val; - if (m_dupeInProgress || IsDeleted) - triggerScriptEvent = false; + if (Scene != null) + Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), + ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); - m_rootPart.GroupPosition = val; + return; + } + } - // Restuff the new GroupPosition into each child SOP of the linkset. - // this is needed because physics may not have linksets but just loose SOPs in world + bool triggerScriptEvent = m_rootPart.GroupPosition != val; + if (m_dupeInProgress || IsDeleted) + triggerScriptEvent = false; - SceneObjectPart[] parts = m_parts.GetArray(); + m_rootPart.GroupPosition = val; - foreach (SceneObjectPart part in parts) - { - if (part != m_rootPart) - part.GroupPosition = val; - } + // Restuff the new GroupPosition into each child SOP of the linkset. + // this is needed because physics may not have linksets but just loose SOPs in world - foreach (ScenePresence av in m_linkedAvatars) - { - av.sitSOGmoved(); - } + SceneObjectPart[] parts = m_parts.GetArray(); - // now that position is changed tell it to scripts - if (triggerScriptEvent) - { foreach (SceneObjectPart part in parts) { - part.TriggerScriptChangedEvent(Changed.POSITION); + if (part != m_rootPart) + part.GroupPosition = val; } + + foreach (ScenePresence av in m_linkedAvatars) + { + av.sitSOGmoved(); + } + + // now that position is changed tell it to scripts + if (triggerScriptEvent) + { + foreach (SceneObjectPart part in parts) + { + part.TriggerScriptChangedEvent(Changed.POSITION); + } + } + + Scene.EventManager.TriggerParcelPrimCountTainted(); } - - Scene.EventManager.TriggerParcelPrimCountTainted(); } } @@ -751,11 +752,7 @@ namespace OpenSim.Region.Framework.Scenes SOGCrossDelegate icon = (SOGCrossDelegate)iar.AsyncState; SceneObjectGroup sog = icon.EndInvoke(iar); - if (sog.IsDeleted) - { - sog.inTransit = false; // just in case... - } - else + if (!sog.IsDeleted) { SceneObjectPart rootp = sog.m_rootPart; Vector3 oldp = rootp.GroupPosition; -- cgit v1.1