public void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client) { Dictionary <UUID, List <ISceneEntity> > returns = new Dictionary <UUID, List <ISceneEntity> >(); IPrimCountModule primCountModule = m_scene.RequestModuleInterface <IPrimCountModule>(); IPrimCounts primCounts = primCountModule.GetPrimCounts(LandData.GlobalID); if (type == (uint)ObjectReturnType.Owner) { foreach (ISceneEntity obj in primCounts.Objects.Where(obj => obj.OwnerID == m_landData.OwnerID)) { if (!returns.ContainsKey(obj.OwnerID)) { returns[obj.OwnerID] = new List <ISceneEntity>(); } if (!returns[obj.OwnerID].Contains(obj)) { returns[obj.OwnerID].Add(obj); } } } else if (type == (uint)ObjectReturnType.Group && m_landData.GroupID != UUID.Zero) { foreach (ISceneEntity obj in primCounts.Objects.Where(obj => obj.GroupID == m_landData.GroupID)) { if (!returns.ContainsKey(obj.OwnerID)) { returns[obj.OwnerID] = new List <ISceneEntity>(); } if (!returns[obj.OwnerID].Contains(obj)) { returns[obj.OwnerID].Add(obj); } } } else if (type == (uint)ObjectReturnType.Other) { foreach (ISceneEntity obj in primCounts.Objects.Where(obj => 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 <ISceneEntity>(); } if (!returns[obj.OwnerID].Contains(obj)) { returns[obj.OwnerID].Add(obj); } } } else if (type == (uint)ObjectReturnType.List) { List <UUID> ownerlist = new List <UUID>(owners); foreach (ISceneEntity obj in primCounts.Objects.Where(obj => ownerlist.Contains(obj.OwnerID))) { if (!returns.ContainsKey(obj.OwnerID)) { returns[obj.OwnerID] = new List <ISceneEntity>(); } if (!returns[obj.OwnerID].Contains(obj)) { returns[obj.OwnerID].Add(obj); } } } else if (type == 1) { List <UUID> Tasks = new List <UUID>(tasks); foreach (ISceneEntity obj in primCounts.Objects.Where(obj => Tasks.Contains(obj.UUID))) { if (!returns.ContainsKey(obj.OwnerID)) { returns[obj.OwnerID] = new List <ISceneEntity>(); } if (!returns[obj.OwnerID].Contains(obj)) { returns[obj.OwnerID].Add(obj); } } } foreach ( List <ISceneEntity> ol in returns.Values.Where(ol => m_scene.Permissions.CanReturnObjects(this, remote_client.AgentId, ol))) { //The return system will take care of the returned objects m_parcelManagementModule.AddReturns(ol[0].OwnerID, ol[0].Name, ol[0].AbsolutePosition, "Parcel Owner Return", ol); //m_scene.returnObjects(ol.ToArray(), remote_client.AgentId); } }