diff options
Diffstat (limited to 'OpenSim')
6 files changed, 45 insertions, 46 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index c1d6cd3..d05cfc2 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -196,13 +196,24 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
196 | // currently calls this with multiple items. | 196 | // currently calls this with multiple items. |
197 | UUID ret = UUID.Zero; | 197 | UUID ret = UUID.Zero; |
198 | 198 | ||
199 | Dictionary<UUID, List<SceneObjectGroup>> deletes = | ||
200 | new Dictionary<UUID, List<SceneObjectGroup>>(); | ||
201 | |||
199 | foreach (SceneObjectGroup g in objectGroups) | 202 | foreach (SceneObjectGroup g in objectGroups) |
200 | ret = DeleteToInventory(action, folderID, g, remoteClient); | 203 | { |
204 | if (!deletes.ContainsKey(g.OwnerID)) | ||
205 | deletes[g.OwnerID] = new List<SceneObjectGroup>(); | ||
206 | |||
207 | deletes[g.OwnerID].Add(g); | ||
208 | } | ||
209 | |||
210 | foreach (List<SceneObjectGroup> objlist in deletes.Values) | ||
211 | ret = DeleteToInventory(action, folderID, objlist, remoteClient); | ||
201 | 212 | ||
202 | return ret; | 213 | return ret; |
203 | } | 214 | } |
204 | 215 | ||
205 | public virtual UUID DeleteToInventory(DeRezAction action, UUID folderID, | 216 | private UUID DeleteToInventory(DeRezAction action, UUID folderID, |
206 | SceneObjectGroup objectGroup, IClientAPI remoteClient) | 217 | SceneObjectGroup objectGroup, IClientAPI remoteClient) |
207 | { | 218 | { |
208 | UUID assetID = UUID.Zero; | 219 | UUID assetID = UUID.Zero; |
@@ -315,10 +326,20 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
315 | } | 326 | } |
316 | else | 327 | else |
317 | { | 328 | { |
318 | // Catch all. Use lost & found | 329 | if (remoteClient == null || |
319 | // | 330 | objectGroup.OwnerID != remoteClient.AgentId) |
331 | { | ||
332 | // Taking copy of another person's item. Take to | ||
333 | // Objects folder. | ||
334 | folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.Object); | ||
335 | } | ||
336 | else | ||
337 | { | ||
338 | // Catch all. Use lost & found | ||
339 | // | ||
320 | 340 | ||
321 | folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder); | 341 | folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder); |
342 | } | ||
322 | } | 343 | } |
323 | } | 344 | } |
324 | 345 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 1bf6b87..4cc797b 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1689,37 +1689,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1689 | } | 1689 | } |
1690 | } | 1690 | } |
1691 | 1691 | ||
1692 | /// <summary> | ||
1693 | /// Called when one or more objects are removed from the environment into inventory. | ||
1694 | /// </summary> | ||
1695 | /// <param name="remoteClient"></param> | ||
1696 | /// <param name="localID"></param> | ||
1697 | /// <param name="groupID"></param> | ||
1698 | /// <param name="action"></param> | ||
1699 | /// <param name="destinationID"></param> | ||
1700 | public virtual void DeRezObject(IClientAPI remoteClient, List<uint> localIDs, | ||
1701 | UUID groupID, DeRezAction action, UUID destinationID) | ||
1702 | { | ||
1703 | foreach (uint localID in localIDs) | ||
1704 | { | ||
1705 | DeRezObject(remoteClient, localID, groupID, action, destinationID); | ||
1706 | } | ||
1707 | } | ||
1708 | |||
1709 | /// <summary> | ||
1710 | /// Called when an object is removed from the environment into inventory. | ||
1711 | /// </summary> | ||
1712 | /// <param name="remoteClient"></param> | ||
1713 | /// <param name="localID"></param> | ||
1714 | /// <param name="groupID"></param> | ||
1715 | /// <param name="action"></param> | ||
1716 | /// <param name="destinationID"></param> | ||
1717 | public virtual void DeRezObject(IClientAPI remoteClient, uint localID, | ||
1718 | UUID groupID, DeRezAction action, UUID destinationID) | ||
1719 | { | ||
1720 | DeRezObjects(remoteClient, new List<uint>() { localID }, groupID, action, destinationID); | ||
1721 | } | ||
1722 | |||
1723 | public virtual void DeRezObjects(IClientAPI remoteClient, List<uint> localIDs, | 1692 | public virtual void DeRezObjects(IClientAPI remoteClient, List<uint> localIDs, |
1724 | UUID groupID, DeRezAction action, UUID destinationID) | 1693 | UUID groupID, DeRezAction action, UUID destinationID) |
1725 | { | 1694 | { |
@@ -1990,14 +1959,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1990 | return group; | 1959 | return group; |
1991 | } | 1960 | } |
1992 | 1961 | ||
1993 | public virtual bool returnObjects(SceneObjectGroup[] returnobjects, UUID AgentId) | 1962 | public virtual bool returnObjects(SceneObjectGroup[] returnobjects, |
1963 | UUID AgentId) | ||
1994 | { | 1964 | { |
1965 | List<uint> localIDs = new List<uint>(); | ||
1966 | |||
1995 | foreach (SceneObjectGroup grp in returnobjects) | 1967 | foreach (SceneObjectGroup grp in returnobjects) |
1996 | { | 1968 | { |
1997 | AddReturn(grp.OwnerID, grp.Name, grp.AbsolutePosition, "parcel owner return"); | 1969 | AddReturn(grp.OwnerID, grp.Name, grp.AbsolutePosition, |
1998 | DeRezObject(null, grp.RootPart.LocalId, | 1970 | "parcel owner return"); |
1999 | grp.RootPart.GroupID, DeRezAction.Return, UUID.Zero); | 1971 | localIDs.Add(grp.RootPart.LocalId); |
2000 | } | 1972 | } |
1973 | DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return, | ||
1974 | UUID.Zero); | ||
2001 | 1975 | ||
2002 | return true; | 1976 | return true; |
2003 | } | 1977 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index fe0ab5b..0cfc235 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2735,7 +2735,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2735 | client.OnGrabUpdate += m_sceneGraph.MoveObject; | 2735 | client.OnGrabUpdate += m_sceneGraph.MoveObject; |
2736 | client.OnSpinStart += m_sceneGraph.SpinStart; | 2736 | client.OnSpinStart += m_sceneGraph.SpinStart; |
2737 | client.OnSpinUpdate += m_sceneGraph.SpinObject; | 2737 | client.OnSpinUpdate += m_sceneGraph.SpinObject; |
2738 | client.OnDeRezObject += DeRezObject; | 2738 | client.OnDeRezObject += DeRezObjects; |
2739 | 2739 | ||
2740 | client.OnObjectName += m_sceneGraph.PrimName; | 2740 | client.OnObjectName += m_sceneGraph.PrimName; |
2741 | client.OnObjectClickAction += m_sceneGraph.PrimClickAction; | 2741 | client.OnObjectClickAction += m_sceneGraph.PrimClickAction; |
@@ -2864,7 +2864,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2864 | client.OnGrabUpdate -= m_sceneGraph.MoveObject; | 2864 | client.OnGrabUpdate -= m_sceneGraph.MoveObject; |
2865 | client.OnSpinStart -= m_sceneGraph.SpinStart; | 2865 | client.OnSpinStart -= m_sceneGraph.SpinStart; |
2866 | client.OnSpinUpdate -= m_sceneGraph.SpinObject; | 2866 | client.OnSpinUpdate -= m_sceneGraph.SpinObject; |
2867 | client.OnDeRezObject -= DeRezObject; | 2867 | client.OnDeRezObject -= DeRezObjects; |
2868 | client.OnObjectName -= m_sceneGraph.PrimName; | 2868 | client.OnObjectName -= m_sceneGraph.PrimName; |
2869 | client.OnObjectClickAction -= m_sceneGraph.PrimClickAction; | 2869 | client.OnObjectClickAction -= m_sceneGraph.PrimClickAction; |
2870 | client.OnObjectMaterial -= m_sceneGraph.PrimMaterial; | 2870 | client.OnObjectMaterial -= m_sceneGraph.PrimMaterial; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 5513584..f7a304f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1291,6 +1291,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1291 | ILandObject parcel = m_scene.LandChannel.GetLandObject( | 1291 | ILandObject parcel = m_scene.LandChannel.GetLandObject( |
1292 | m_rootPart.GroupPosition.X, m_rootPart.GroupPosition.Y); | 1292 | m_rootPart.GroupPosition.X, m_rootPart.GroupPosition.Y); |
1293 | 1293 | ||
1294 | List<uint> returns = new List<uint>(); | ||
1295 | |||
1294 | if (parcel != null && parcel.LandData != null && | 1296 | if (parcel != null && parcel.LandData != null && |
1295 | parcel.LandData.OtherCleanTime != 0) | 1297 | parcel.LandData.OtherCleanTime != 0) |
1296 | { | 1298 | { |
@@ -1304,13 +1306,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
1304 | DetachFromBackup(); | 1306 | DetachFromBackup(); |
1305 | m_log.InfoFormat("[SCENE]: Returning object {0} due to parcel auto return", RootPart.UUID.ToString()); | 1307 | m_log.InfoFormat("[SCENE]: Returning object {0} due to parcel auto return", RootPart.UUID.ToString()); |
1306 | m_scene.AddReturn(OwnerID, Name, AbsolutePosition, "parcel auto return"); | 1308 | m_scene.AddReturn(OwnerID, Name, AbsolutePosition, "parcel auto return"); |
1307 | m_scene.DeRezObject(null, RootPart.LocalId, | 1309 | returns.Add(RootPart.LocalId); |
1308 | RootPart.GroupID, DeRezAction.Return, UUID.Zero); | ||
1309 | 1310 | ||
1310 | return; | 1311 | return; |
1311 | } | 1312 | } |
1312 | } | 1313 | } |
1313 | } | 1314 | } |
1315 | |||
1316 | m_scene.DeRezObjects(null, returns, UUID.Zero, | ||
1317 | DeRezAction.Return, UUID.Zero); | ||
1314 | } | 1318 | } |
1315 | 1319 | ||
1316 | if (HasGroupChanged) | 1320 | if (HasGroupChanged) |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs index 5616a4e..4969b09 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs | |||
@@ -142,7 +142,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
142 | SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene); | 142 | SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene); |
143 | 143 | ||
144 | IClientAPI client = SceneSetupHelpers.AddRootAgent(scene, agentId); | 144 | IClientAPI client = SceneSetupHelpers.AddRootAgent(scene, agentId); |
145 | scene.DeRezObject(client, part.LocalId, UUID.Zero, DeRezAction.Delete, UUID.Zero); | 145 | scene.DeRezObjects(client, new System.Collections.Generic.List<uint>() { part.LocalId }, UUID.Zero, DeRezAction.Delete, UUID.Zero); |
146 | 146 | ||
147 | SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); | 147 | SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); |
148 | 148 | ||
diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs index fc9db03..9d7733e 100644 --- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs +++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs | |||
@@ -556,7 +556,7 @@ namespace OpenSim.Tests.Common.Setup | |||
556 | AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; | 556 | AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; |
557 | sogd.Enabled = false; | 557 | sogd.Enabled = false; |
558 | 558 | ||
559 | scene.DeRezObject(client, part.LocalId, UUID.Zero, action, destinationId); | 559 | scene.DeRezObjects(client, new List<uint>() { part.LocalId }, UUID.Zero, action, destinationId); |
560 | sogd.InventoryDeQueueAndDelete(); | 560 | sogd.InventoryDeQueueAndDelete(); |
561 | } | 561 | } |
562 | } | 562 | } |