diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index e17ef2b..df6a1cf 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2065,41 +2065,37 @@ namespace OpenSim.Region.Framework.Scenes | |||
2065 | { | 2065 | { |
2066 | // We need to keep track of this state in case this group is still queued for backup. | 2066 | // We need to keep track of this state in case this group is still queued for backup. |
2067 | IsDeleted = true; | 2067 | IsDeleted = true; |
2068 | HasGroupChanged = true; | ||
2069 | 2068 | ||
2070 | DetachFromBackup(); | 2069 | DetachFromBackup(); |
2071 | 2070 | ||
2071 | if(Scene == null) // should not happen unless restart/shutdown ? | ||
2072 | return; | ||
2073 | |||
2072 | SceneObjectPart[] parts = m_parts.GetArray(); | 2074 | SceneObjectPart[] parts = m_parts.GetArray(); |
2073 | for (int i = 0; i < parts.Length; i++) | 2075 | for (int i = 0; i < parts.Length; i++) |
2074 | { | 2076 | { |
2075 | SceneObjectPart part = parts[i]; | 2077 | SceneObjectPart part = parts[i]; |
2076 | 2078 | ||
2077 | if (Scene != null) | 2079 | Scene.ForEachScenePresence(delegate(ScenePresence avatar) |
2078 | { | 2080 | { |
2079 | Scene.ForEachScenePresence(delegate(ScenePresence avatar) | 2081 | if (!avatar.IsChildAgent && avatar.ParentID == LocalId) |
2080 | { | 2082 | avatar.StandUp(); |
2081 | if (!avatar.IsChildAgent && avatar.ParentID == LocalId) | ||
2082 | avatar.StandUp(); | ||
2083 | 2083 | ||
2084 | if (!silent) | 2084 | if (!silent) |
2085 | { | ||
2086 | part.ClearUpdateSchedule(); | ||
2087 | if (part == m_rootPart) | ||
2085 | { | 2088 | { |
2086 | part.ClearUpdateSchedule(); | 2089 | if (!IsAttachment |
2087 | if (part == m_rootPart) | 2090 | || AttachedAvatar == avatar.ControllingClient.AgentId |
2091 | || !HasPrivateAttachmentPoint) | ||
2088 | { | 2092 | { |
2089 | if (!IsAttachment | 2093 | // Send a kill object immediately |
2090 | || AttachedAvatar == avatar.ControllingClient.AgentId | 2094 | avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId }); |
2091 | || !HasPrivateAttachmentPoint) | ||
2092 | { | ||
2093 | // Send a kill object immediately | ||
2094 | avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId }); | ||
2095 | // Also, send a terse update; in case race conditions make the object pop again in the client, | ||
2096 | // this update will send another kill object | ||
2097 | m_rootPart.SendTerseUpdateToClient(avatar.ControllingClient); | ||
2098 | } | ||
2099 | } | 2095 | } |
2100 | } | 2096 | } |
2101 | }); | 2097 | } |
2102 | } | 2098 | }); |
2103 | } | 2099 | } |
2104 | } | 2100 | } |
2105 | 2101 | ||