Esempio n. 1
0
        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);
            }
        }