aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Scene.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs32
1 files changed, 13 insertions, 19 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 5465ca4..3b90c16 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3102,7 +3102,7 @@ namespace OpenSim.Region.Framework.Scenes
3102 delegate(IClientAPI client) 3102 delegate(IClientAPI client)
3103 { 3103 {
3104 //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway 3104 //We can safely ignore null reference exceptions. It means the avatar is dead and cleaned up anyway
3105 try { client.SendKillObject(avatar.RegionHandle, avatar.LocalId); } 3105 try { client.SendKillObject(avatar.RegionHandle, new List<uint> { avatar.LocalId }); }
3106 catch (NullReferenceException) { } 3106 catch (NullReferenceException) { }
3107 }); 3107 });
3108 3108
@@ -3161,28 +3161,24 @@ namespace OpenSim.Region.Framework.Scenes
3161 3161
3162 #region Entities 3162 #region Entities
3163 3163
3164 public void SendKillObject(uint localID) 3164 public void SendKillObject(List<uint> localIDs)
3165 { 3165 {
3166 SceneObjectPart part = GetSceneObjectPart(localID); 3166 List<uint> deleteIDs = new List<uint>();
3167 UUID attachedAvatar = UUID.Zero;
3168 3167
3169 if (part != null) // It is a prim 3168 foreach (uint localID in localIDs)
3170 { 3169 {
3171 if (!part.ParentGroup.IsDeleted) // Valid 3170 SceneObjectPart part = GetSceneObjectPart(localID);
3171 if (part != null) // It is a prim
3172 { 3172 {
3173 if (part.ParentGroup.RootPart != part) // Child part 3173 if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) // Valid
3174 return; 3174 {
3175 3175 if (part.ParentGroup.RootPart != part) // Child part
3176 if (part.ParentGroup.IsAttachment && part.ParentGroup.AttachmentPoint >= 31 && part.ParentGroup.AttachmentPoint <= 38) 3176 continue;
3177 attachedAvatar = part.ParentGroup.AttachedAvatar; 3177 }
3178 } 3178 }
3179 deleteIDs.Add(localID);
3179 } 3180 }
3180 3181 ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, deleteIDs); });
3181 ForEachClient(delegate(IClientAPI client)
3182 {
3183 if (attachedAvatar == UUID.Zero || attachedAvatar == client.AgentId)
3184 client.SendKillObject(m_regionHandle, localID);
3185 });
3186 } 3182 }
3187 3183
3188 #endregion 3184 #endregion
@@ -3200,7 +3196,6 @@ namespace OpenSim.Region.Framework.Scenes
3200 //m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; 3196 //m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
3201 //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; 3197 //m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar;
3202 m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; 3198 m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
3203 m_sceneGridService.KiPrimitive += SendKillObject;
3204 m_sceneGridService.OnGetLandData += GetLandData; 3199 m_sceneGridService.OnGetLandData += GetLandData;
3205 } 3200 }
3206 3201
@@ -3209,7 +3204,6 @@ namespace OpenSim.Region.Framework.Scenes
3209 /// </summary> 3204 /// </summary>
3210 public void UnRegisterRegionWithComms() 3205 public void UnRegisterRegionWithComms()
3211 { 3206 {
3212 m_sceneGridService.KiPrimitive -= SendKillObject;
3213 m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; 3207 m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;
3214 //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; 3208 //m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar;
3215 //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; 3209 //m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;