From ee4d4d784eb9b51b29fe4bda3fc9ec3594d24f5a Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 21 Nov 2008 07:33:13 +0000 Subject: Fully implement object return from the parcel dialog --- .../Modules/World/Land/LandManagementModule.cs | 5 +- .../Environment/Modules/World/Land/LandObject.cs | 67 ++++++++++++++++++---- 2 files changed, 57 insertions(+), 15 deletions(-) (limited to 'OpenSim/Region/Environment/Modules/World/Land') diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index f656fb6..99128bc 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs @@ -1149,10 +1149,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (selectedParcel == null) return; - if (returnType == 16) // parcel return - { - selectedParcel.returnLandObjects(returnType, agentIDs, remoteClient); - } + selectedParcel.returnLandObjects(returnType, agentIDs, taskIDs, remoteClient); } public void NoLandDataFromStorage() diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs index 208338f..1483118 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs @@ -776,28 +776,73 @@ namespace OpenSim.Region.Environment.Modules.World.Land m_scene.returnObjects(objs, obj.OwnerID); } - public void returnLandObjects(uint type, UUID[] owners, IClientAPI remote_client) + public void returnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client) { - List objlist = new List(); - for (int i = 0; i < owners.Length; i++) + Dictionary> returns = + new Dictionary>(); + + lock (primsOverMe) { - lock (primsOverMe) + if (type == (uint)ObjectReturnType.Owner) { - try + foreach (SceneObjectGroup obj in primsOverMe) { - foreach (SceneObjectGroup obj in primsOverMe) + if (obj.OwnerID == m_landData.OwnerID) { - if (obj.OwnerID == owners[i]) - objlist.Add(obj); + if (!returns.ContainsKey(obj.OwnerID)) + returns[obj.OwnerID] = + new List(); + returns[obj.OwnerID].Add(obj); } } - catch (InvalidOperationException) + } + else if (type == (uint)ObjectReturnType.Group && m_landData.GroupID != UUID.Zero) + { + foreach (SceneObjectGroup obj in primsOverMe) + { + if (obj.GroupID == m_landData.GroupID) + { + if (!returns.ContainsKey(obj.OwnerID)) + returns[obj.OwnerID] = + new List(); + returns[obj.OwnerID].Add(obj); + } + } + } + else if (type == (uint)ObjectReturnType.Other) + { + foreach (SceneObjectGroup obj in primsOverMe) + { + if (obj.OwnerID != m_landData.OwnerID && + (obj.GroupID != m_landData.GroupID || + m_landData.GroupID == UUID.Zero)) + { + if (!returns.ContainsKey(obj.OwnerID)) + returns[obj.OwnerID] = + new List(); + returns[obj.OwnerID].Add(obj); + } + } + } + else if (type == (uint)ObjectReturnType.List) + { + List ownerlist = new List(owners); + + foreach (SceneObjectGroup obj in primsOverMe) { - m_log.Info("[PARCEL]: Unable to figure out all the objects owned by " + owners[i].ToString() + " arr."); + if (ownerlist.Contains(obj.OwnerID)) + { + if (!returns.ContainsKey(obj.OwnerID)) + returns[obj.OwnerID] = + new List(); + returns[obj.OwnerID].Add(obj); + } } } } - m_scene.returnObjects(objlist.ToArray(), remote_client.AgentId); + + foreach (List ol in returns.Values) + m_scene.returnObjects(ol.ToArray(), remote_client.AgentId); } #endregion -- cgit v1.1