Exemplo n.º 1
0
        public void TestAddGroupObject()
        {
            TestHelpers.InMethod();
            //            log4net.Config.XmlConfigurator.Configure();

            m_lo.DeedToGroup(m_groupId);

            IPrimCounts pc = m_lo.PrimCounts;

            SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_otherUserId, "a", 0x01);

            sog.GroupID = m_groupId;
            m_scene.AddNewSceneObject(sog, false);

            Assert.That(pc.Owner, Is.EqualTo(0));
            Assert.That(pc.Group, Is.EqualTo(3));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(3));
            Assert.That(pc.Selected, Is.EqualTo(0));

            // Is this desired behaviour?  Not totally sure.
            Assert.That(pc.Users[m_userId], Is.EqualTo(0));
            Assert.That(pc.Users[m_groupId], Is.EqualTo(0));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(3));

            Assert.That(pc.Simulator, Is.EqualTo(3));
        }
Exemplo n.º 2
0
        public void TestRemoveGroupObject()
        {
            TestHelpers.InMethod();
            //            log4net.Config.XmlConfigurator.Configure();

            m_lo.DeedToGroup(m_groupId);

            IPrimCounts pc = m_lo.PrimCounts;

            SceneObjectGroup sogToKeep = SceneHelpers.CreateSceneObject(1, m_userId, "a", 0x1);

            sogToKeep.GroupID = m_groupId;
            m_scene.AddNewSceneObject(sogToKeep, false);

            SceneObjectGroup sogToDelete = SceneHelpers.CreateSceneObject(3, m_userId, "b", 0x10);

            m_scene.AddNewSceneObject(sogToDelete, false);
            m_scene.DeleteSceneObject(sogToDelete, false);

            Assert.That(pc.Owner, Is.EqualTo(0));
            Assert.That(pc.Group, Is.EqualTo(1));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(1));
            Assert.That(pc.Selected, Is.EqualTo(0));
            Assert.That(pc.Users[m_userId], Is.EqualTo(1));
            Assert.That(pc.Users[m_groupId], Is.EqualTo(0));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pc.Simulator, Is.EqualTo(1));
        }
Exemplo n.º 3
0
        public void TestAddOwnerObject()
        {
            TestHelpers.InMethod();
            //            log4net.Config.XmlConfigurator.Configure();

            IPrimCounts pc = m_lo.PrimCounts;

            SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01);

            m_scene.AddNewSceneObject(sog, false);

            Assert.That(pc.Owner, Is.EqualTo(3));
            Assert.That(pc.Group, Is.EqualTo(0));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(3));
            Assert.That(pc.Selected, Is.EqualTo(0));
            Assert.That(pc.Users[m_userId], Is.EqualTo(3));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pc.Simulator, Is.EqualTo(3));

            // Add a second object and retest
            SceneObjectGroup sog2 = SceneHelpers.CreateSceneObject(2, m_userId, "b", 0x10);

            m_scene.AddNewSceneObject(sog2, false);

            Assert.That(pc.Owner, Is.EqualTo(5));
            Assert.That(pc.Group, Is.EqualTo(0));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(5));
            Assert.That(pc.Selected, Is.EqualTo(0));
            Assert.That(pc.Users[m_userId], Is.EqualTo(5));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pc.Simulator, Is.EqualTo(5));
        }
Exemplo n.º 4
0
        public void TestMoveOwnerObject()
        {
            TestHelpers.InMethod();
            //            log4net.Config.XmlConfigurator.Configure();

            SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01);

            m_scene.AddNewSceneObject(sog, false);
            SceneObjectGroup sog2 = SceneHelpers.CreateSceneObject(2, m_userId, "b", 0x10);

            m_scene.AddNewSceneObject(sog2, false);

            // Move the first scene object to the eastern strip parcel
            sog.AbsolutePosition = new Vector3(254, 2, 2);

            IPrimCounts pclo1 = m_lo.PrimCounts;

            Assert.That(pclo1.Owner, Is.EqualTo(2));
            Assert.That(pclo1.Group, Is.EqualTo(0));
            Assert.That(pclo1.Others, Is.EqualTo(0));
            Assert.That(pclo1.Total, Is.EqualTo(2));
            Assert.That(pclo1.Selected, Is.EqualTo(0));
            Assert.That(pclo1.Users[m_userId], Is.EqualTo(2));
            Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pclo1.Simulator, Is.EqualTo(5));

            IPrimCounts pclo2 = m_lo2.PrimCounts;

            Assert.That(pclo2.Owner, Is.EqualTo(3));
            Assert.That(pclo2.Group, Is.EqualTo(0));
            Assert.That(pclo2.Others, Is.EqualTo(0));
            Assert.That(pclo2.Total, Is.EqualTo(3));
            Assert.That(pclo2.Selected, Is.EqualTo(0));
            Assert.That(pclo2.Users[m_userId], Is.EqualTo(3));
            Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pclo2.Simulator, Is.EqualTo(5));

            // Now move it back again
            sog.AbsolutePosition = new Vector3(2, 2, 2);

            Assert.That(pclo1.Owner, Is.EqualTo(5));
            Assert.That(pclo1.Group, Is.EqualTo(0));
            Assert.That(pclo1.Others, Is.EqualTo(0));
            Assert.That(pclo1.Total, Is.EqualTo(5));
            Assert.That(pclo1.Selected, Is.EqualTo(0));
            Assert.That(pclo1.Users[m_userId], Is.EqualTo(5));
            Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pclo1.Simulator, Is.EqualTo(5));

            Assert.That(pclo2.Owner, Is.EqualTo(0));
            Assert.That(pclo2.Group, Is.EqualTo(0));
            Assert.That(pclo2.Others, Is.EqualTo(0));
            Assert.That(pclo2.Total, Is.EqualTo(0));
            Assert.That(pclo2.Selected, Is.EqualTo(0));
            Assert.That(pclo2.Users[m_userId], Is.EqualTo(0));
            Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pclo2.Simulator, Is.EqualTo(5));
        }
Exemplo n.º 5
0
        /// <summary>
        ///     Notify the parcel owner each avatar that owns prims situated on their land.  This notification includes
        ///     aggregate details such as the number of prims.
        /// </summary>
        /// <param name="remote_client">
        ///     <see cref="IClientAPI" />
        /// </param>
        public void SendLandObjectOwners(IClientAPI remote_client)
        {
            if (m_scene.Permissions.CanViewObjectOwners(remote_client.AgentId, this))
            {
                IPrimCountModule primCountModule = m_scene.RequestModuleInterface <IPrimCountModule>();
                if (primCountModule != null)
                {
                    IPrimCounts primCounts = primCountModule.GetPrimCounts(LandData.GlobalID);
                    Dictionary <UUID, LandObjectOwners> owners = new Dictionary <UUID, LandObjectOwners>();
                    foreach (ISceneEntity grp in primCounts.Objects)
                    {
                        bool             newlyAdded = false;
                        LandObjectOwners landObj;
                        if (!owners.TryGetValue(grp.OwnerID, out landObj))
                        {
                            landObj = new LandObjectOwners();
                            owners.Add(grp.OwnerID, landObj);
                            newlyAdded = true;
                        }

                        landObj.Count += grp.PrimCount;
                        //Only do all of this once
                        if (newlyAdded)
                        {
                            if (grp.GroupID != UUID.Zero && grp.GroupID == grp.OwnerID)
                            {
                                landObj.GroupOwned = true;
                            }
                            else
                            {
                                landObj.GroupOwned = false;
                            }
                            if (landObj.GroupOwned)
                            {
                                landObj.Online = false;
                            }
                            else
                            {
                                IAgentInfoService presenceS = m_scene.RequestModuleInterface <IAgentInfoService>();
                                UserInfo          info      = presenceS.GetUserInfo(grp.OwnerID.ToString());
                                if (info != null)
                                {
                                    landObj.Online = info.IsOnline;
                                }
                            }
                            landObj.OwnerID = grp.OwnerID;
                        }
                        if (grp.RootChild.Rezzed > landObj.TimeLastRezzed)
                        {
                            landObj.TimeLastRezzed = grp.RootChild.Rezzed;
                        }
                    }
                    remote_client.SendLandObjectOwners(new List <LandObjectOwners>(owners.Values));
                }
            }
        }
Exemplo n.º 6
0
        public void TestInitialCounts()
        {
            IPrimCounts pc = m_lo.PrimCounts;

            Assert.That(pc.Owner, Is.EqualTo(0));
            Assert.That(pc.Group, Is.EqualTo(0));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(0));
            Assert.That(pc.Selected, Is.EqualTo(0));
            Assert.That(pc.Users[m_userId], Is.EqualTo(0));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pc.Simulator, Is.EqualTo(0));
        }
Exemplo n.º 7
0
        public void SendForceObjectSelect(int local_id, int request_type, List <UUID> returnIDs, IClientAPI remote_client)
        {
            if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this))
            {
                List <uint> resultLocalIDs = new List <uint>();
                try
                {
                    IPrimCountModule primCountModule = m_scene.RequestModuleInterface <IPrimCountModule>();
                    IPrimCounts      primCounts      = primCountModule.GetPrimCounts(LandData.GlobalID);
                    foreach (ISceneEntity obj in primCounts.Objects.Where(obj => obj.LocalId > 0))
                    {
                        if (request_type == ParcelManagementModule.LAND_SELECT_OBJECTS_OWNER &&
                            obj.OwnerID == LandData.OwnerID)
                        {
                            resultLocalIDs.Add(obj.LocalId);
                        }
                        else if (request_type == ParcelManagementModule.LAND_SELECT_OBJECTS_GROUP &&
                                 obj.GroupID == LandData.GroupID && LandData.GroupID != UUID.Zero)
                        {
                            resultLocalIDs.Add(obj.LocalId);
                        }
                        else if (request_type == ParcelManagementModule.LAND_SELECT_OBJECTS_OTHER &&
                                 obj.OwnerID != remote_client.AgentId)
                        {
                            resultLocalIDs.Add(obj.LocalId);
                        }
                        else if (request_type == (int)ObjectReturnType.List && returnIDs.Contains(obj.OwnerID))
                        {
                            resultLocalIDs.Add(obj.LocalId);
                        }
                        else if (request_type == (int)ObjectReturnType.Sell &&
                                 obj.OwnerID == remote_client.AgentId)
                        {
                            resultLocalIDs.Add(obj.LocalId);
                        }
                    }
                }
                catch (InvalidOperationException)
                {
                    MainConsole.Instance.Error("[LAND]: Unable to force select the parcel objects. Arr.");
                }

                remote_client.SendForceClientSelectObjects(resultLocalIDs);
            }
        }
Exemplo n.º 8
0
        public void TestTaint()
        {
            TestHelpers.InMethod();
            IPrimCounts pc = m_lo.PrimCounts;

            SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01);

            m_scene.AddNewSceneObject(sog, false);

            m_pcm.TaintPrimCount();

            Assert.That(pc.Owner, Is.EqualTo(3));
            Assert.That(pc.Group, Is.EqualTo(0));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(3));
            Assert.That(pc.Selected, Is.EqualTo(0));
            Assert.That(pc.Users[m_userId], Is.EqualTo(3));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pc.Simulator, Is.EqualTo(3));
        }
Exemplo n.º 9
0
        public List <ISceneEntity> GetPrimsOverByOwner(UUID targetID, int flags)
        {
            List <ISceneEntity> prims           = new List <ISceneEntity>();
            IPrimCountModule    primCountModule = m_scene.RequestModuleInterface <IPrimCountModule>();
            IPrimCounts         primCounts      = primCountModule.GetPrimCounts(LandData.GlobalID);

            foreach (ISceneEntity obj in primCounts.Objects.Where(obj => obj.OwnerID == m_landData.OwnerID))
            {
                if (flags == 4)
                {
                    bool containsScripts = obj.ChildrenEntities().Any(child => child.Inventory.ContainsScripts());
                    if (!containsScripts)
                    {
                        continue;
                    }
                }
                prims.Add(obj);
            }
            return(prims);
        }
Exemplo n.º 10
0
        public void TestCopyOwnerObject()
        {
            TestHelpers.InMethod();
            //            log4net.Config.XmlConfigurator.Configure();

            IPrimCounts pc = m_lo.PrimCounts;

            SceneObjectGroup sog = SceneHelpers.CreateSceneObject(3, m_userId, "a", 0x01);

            m_scene.AddNewSceneObject(sog, false);
            m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, m_userId, UUID.Zero, Quaternion.Identity, false);

            Assert.That(pc.Owner, Is.EqualTo(6));
            Assert.That(pc.Group, Is.EqualTo(0));
            Assert.That(pc.Others, Is.EqualTo(0));
            Assert.That(pc.Total, Is.EqualTo(6));
            Assert.That(pc.Selected, Is.EqualTo(0));
            Assert.That(pc.Users[m_userId], Is.EqualTo(6));
            Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
            Assert.That(pc.Simulator, Is.EqualTo(6));
        }
Exemplo n.º 11
0
        public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice,
                                   int area)
        {
            if ((LandData.Flags & (uint)ParcelFlags.SellParcelObjects) == (uint)ParcelFlags.SellParcelObjects)
            {
                //Sell all objects on the parcel too
                IPrimCountModule primCountModule = m_scene.RequestModuleInterface <IPrimCountModule> ();
                IPrimCounts      primCounts      = primCountModule.GetPrimCounts(LandData.GlobalID);

                foreach (ISceneEntity obj in primCounts.Objects.Where(obj => obj.OwnerID == LandData.OwnerID))
                {
                    //Fix the owner/last owner
                    obj.SetOwnerId(avatarID);
                    //Then update all clients around
                    obj.ScheduleGroupUpdate(PrimUpdateFlags.FullUpdate);
                }
            }

            LandData.OwnerID      = avatarID;
            LandData.GroupID      = groupID;
            LandData.IsGroupOwned = groupOwned;
            LandData.AuctionID    = 0;
            LandData.ClaimDate    = Util.UnixTimeSinceEpoch();
            LandData.ClaimPrice   = claimprice;
            LandData.SalePrice    = 0;
            LandData.AuthBuyerID  = UUID.Zero;
            LandData.Flags       &= ~(uint)(
                ParcelFlags.ForSale |
                ParcelFlags.ForSaleObjects |
                ParcelFlags.SellParcelObjects |
                ParcelFlags.ShowDirectory);

            m_parcelManagementModule.UpdateLandObject(this);

            SendLandUpdateToAvatarsOverMe(true);
            //Send a full update to the client as well
            IScenePresence SP = m_scene.GetScenePresence(avatarID);

            SendLandUpdateToClient(SP.ControllingClient);
        }
Exemplo n.º 12
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);
            }
        }
Exemplo n.º 13
0
        public void DisableLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client)
        {
            Dictionary <UUID, List <ISceneEntity> > disabled =
                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 (!disabled.ContainsKey(obj.OwnerID))
                    {
                        disabled[obj.OwnerID] =
                            new List <ISceneEntity>();
                    }

                    disabled[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 (!disabled.ContainsKey(obj.OwnerID))
                    {
                        disabled[obj.OwnerID] =
                            new List <ISceneEntity>();
                    }

                    disabled[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 (!disabled.ContainsKey(obj.OwnerID))
                    {
                        disabled[obj.OwnerID] =
                            new List <ISceneEntity>();
                    }
                    disabled[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 (!disabled.ContainsKey(obj.OwnerID))
                    {
                        disabled[obj.OwnerID] =
                            new List <ISceneEntity>();
                    }
                    disabled[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 (!disabled.ContainsKey(obj.OwnerID))
                    {
                        disabled[obj.OwnerID] =
                            new List <ISceneEntity>();
                    }
                    disabled[obj.OwnerID].Add(obj);
                }
            }

            IScriptModule[] modules = m_scene.RequestModuleInterfaces <IScriptModule>();
            foreach (List <ISceneEntity> ol in disabled.Values)
            {
                foreach (ISceneEntity group in ol)
                {
                    if (m_scene.Permissions.CanEditObject(group.UUID, remote_client.AgentId))
                    {
                        foreach (IScriptModule module in modules)
                        {
                            //Disable the entire object
                            foreach (ISceneChildEntity part in group.ChildrenEntities())
                            {
                                foreach (TaskInventoryItem item in part.Inventory.GetInventoryItems())
                                {
                                    if (item.InvType == (int)InventoryType.LSL)
                                    {
                                        module.SuspendScript(item.ItemID);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }