Пример #1
0
        public ILandObject Copy()
        {
            ILandObject newLand = new LandObject(LandData.OwnerID, LandData.IsGroupOwned, m_scene);

            //Place all new variables here!
            newLand.LandData = LandData.Copy();

            return(newLand);
        }
Пример #2
0
        public ILandObject Copy()
        {
            ILandObject newLand = new LandObject(LandData.OwnerID, LandData.IsGroupOwned, m_scene);

            //Place all new variables here!
            newLand.LandData = LandData.Copy();

            return newLand;
        }
 public void IncomingLandDataFromOAR(List<LandData> data, bool merge, Vector2 parcelOffset)
 {
     if (!merge || data.Count == 0) //Serious fallback
         ResetSimLandObjects();
     foreach (LandData t in data)
     {
         int oldRegionSize = (int)Math.Sqrt(t.Bitmap.Length * 8);
         int offset_x = (int)(parcelOffset.X > 0 ? (parcelOffset.X / 4f) : 0),
             offset_y = (int)(parcelOffset.Y > 0 ? (parcelOffset.Y / 4f) : 0),
             i = 0, bitNum = 0;
         byte tempByte;
         lock (m_landListLock)
         {
             //Update the localID
             t.LocalID = ++m_lastLandLocalID;
         }
         int x = 0, y = 0;
         for (i = 0; i < t.Bitmap.Length; i++)
         {
             tempByte = t.Bitmap[i];
             for (bitNum = 0; bitNum < 8; bitNum++)
             {
                 bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte)1);
                 if (bit)
                     m_landIDList[offset_x + x, offset_y + y] = t.LocalID;
                 x++;
                 if (x > oldRegionSize - 1)
                 {
                     x = 0;
                     y++;
                 }
             }
         }
         ILandObject new_land = new LandObject(t.OwnerID, t.IsGroupOwned, m_scene);
         new_land.LandData = t;
         new_land.ForceUpdateLandInfo();
         lock (m_landListLock)
         {
             m_lastLandLocalID -= 1;
         }
         AddLandObject(new_land);
     }
     UpdateAllParcelBitmaps();
 }
        public void EventManagerOnIncomingLandDataFromStorage(List<LandData> data, Vector2 parcelOffset)
        {
            bool result = data.All(t => PreprocessIncomingLandObjectFromStorage(t, parcelOffset));

            if (!result || data.Count == 0) //Force a new base first, then force a merge later
                ResetSimLandObjects();

            foreach (LandData t in data)
            {
                ILandObject new_land = new LandObject(t.OwnerID, t.IsGroupOwned, m_scene);
                new_land.LandData = t;
                if (SetLandBitmapFromByteArray(new_land, !result, parcelOffset))
                    //Merge it into the large parcel if possible
                {
                    new_land.ForceUpdateLandInfo();
                    AddLandObject(new_land, true);
                }
            }
            if (AllParcels().Count == 0) //Serious fallback
                ResetSimLandObjects();
        }
        /// <summary>
        ///     Resets the sim to the default land object (full sim piece of land owned by the default user)
        /// </summary>
        public ILandObject ResetSimLandObjects()
        {
            ClearAllParcels();
            ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
            if (fullSimParcel.LandData.OwnerID == UUID.Zero)
                fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;

            UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.AllScopeIDs,
                                                                            fullSimParcel.LandData.OwnerID);

            while (fullSimParcel.LandData.OwnerID == UUID.Zero || account == null)
            {
                MainConsole.Instance.Warn(
                    "[ParcelManagement]: Could not find user for parcel, please give a valid user to make the owner");
                string userName = MainConsole.Instance.Prompt("User Name:", "");
                if (userName == "")
                {
                    MainConsole.Instance.Warn("Put in a valid username.");
                    continue;
                }
                account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.AllScopeIDs, userName);
                if (account != null)
                    fullSimParcel.LandData.OwnerID = account.PrincipalID;
                else
                    MainConsole.Instance.Warn("Could not find the user.");
            }
            MainConsole.Instance.Info("[ParcelManagement]: No land found for region " + m_scene.RegionInfo.RegionName +
                                      ", setting owner to " + fullSimParcel.LandData.OwnerID);
            fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch();
            fullSimParcel.LandData.Bitmap =
                new byte[(m_scene.RegionInfo.RegionSizeX/4)*(m_scene.RegionInfo.RegionSizeY/4)/8];
            fullSimParcel = AddLandObject(fullSimParcel);
            ModifyLandBitmapSquare(0, 0,
                                   m_scene.RegionInfo.RegionSizeX, m_scene.RegionInfo.RegionSizeY,
                                   fullSimParcel);
            return fullSimParcel;
        }
 public bool PreprocessIncomingLandObjectFromStorage(LandData data, Vector2 parcelOffset)
 {
     ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene);
     new_land.LandData = data;
     return SetLandBitmapFromByteArray(new_land, false, parcelOffset);
 }
        public void IncomingLandDataFromOAR(List<LandData> data, bool merge, Vector2 parcelOffset)
        {
            if (!merge || data.Count == 0) //Serious fallback
                ResetSimLandObjects();
            foreach (LandData land in data)
            {
                int oldRegionSize = (int)Math.Sqrt(land.Bitmap.Length * 8);
                int offset_x = (int)(parcelOffset.X > 0 ? (parcelOffset.X / 4f) : 0),
                    offset_y = (int)(parcelOffset.Y > 0 ? (parcelOffset.Y / 4f) : 0),
                    i = 0, bitNum = 0;
                byte tempByte;
                lock (m_landListLock)
                {
                    //Update the localID
                    land.LocalID = ++m_lastLandLocalID;
                }
                int x = 0, y = 0;
                for (i = 0; i < land.Bitmap.Length; i++)
                {
                    tempByte = land.Bitmap[i];
                    for (bitNum = 0; bitNum < 8; bitNum++)
                    {
                        bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte)1);
                        if (bit)
                            m_landIDList[offset_x + x, offset_y + y] = land.LocalID;
                        x++;
                        if (x > oldRegionSize - 1)
                        {
                            x = 0;
                            y++;
                        }
                    }
                }

                // verify that the owner exists
                UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.AllScopeIDs, land.OwnerID);
                if (account == null)
                {
                    // incomming owner is invalid so re-assign
                    land.OwnerID = (UUID)Constants.RealEstateOwnerUUID;
                    land.IsGroupOwned = false;
                }

                ILandObject new_land = new LandObject(land.OwnerID, land.IsGroupOwned, m_scene);
                new_land.LandData = land;
                new_land.ForceUpdateLandInfo();
                lock (m_landListLock)
                {
                    m_lastLandLocalID -= 1;
                }
                AddLandObject(new_land);
            }
            UpdateAllParcelBitmaps();
        }
        /// <summary>
        ///     Resets the sim to the default land object (full sim piece of land owned by the default user)
        /// </summary>
        public ILandObject ResetSimLandObjects ()
        {
            ClearAllParcels ();
            ILandObject fullSimParcel = new LandObject (UUID.Zero, false, m_scene);
            if (fullSimParcel.LandData.OwnerID == UUID.Zero)
                fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;

            UserAccount account = m_scene.UserAccountService.GetUserAccount (m_scene.RegionInfo.AllScopeIDs,
                                      fullSimParcel.LandData.OwnerID);
            // we should always have the estate user
            string ownerName = "";
            if (account != null)
                ownerName = account.Name;

            while (fullSimParcel.LandData.OwnerID == UUID.Zero || account == null) {
                MainConsole.Instance.Warn (
                    "[Land management]: Could not find user for parcel, please give a valid user to make the owner");

                string userName = MainConsole.Instance.Prompt ("User Name:", "");
                if (userName == "") {
                    MainConsole.Instance.Warn ("A valid username is required.");
                    continue;
                }

                account = m_scene.UserAccountService.GetUserAccount (m_scene.RegionInfo.AllScopeIDs, userName);
                if (account != null) {
                    fullSimParcel.LandData.OwnerID = account.PrincipalID;
                    ownerName = account.Name;
                } else
                    MainConsole.Instance.Warn ("Could not find the user.");
            }


            MainConsole.Instance.InfoFormat ("[Land management]: Setting land owner for region {0} to {1}",
                m_scene.RegionInfo.RegionName,
                ownerName);                 //  was >>   fullSimParcel.LandData.OwnerID);

            fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch ();
            fullSimParcel.LandData.Bitmap =
                new byte [(m_scene.RegionInfo.RegionSizeX / 4) * (m_scene.RegionInfo.RegionSizeY / 4) / 8];
            fullSimParcel = AddLandObject (fullSimParcel);

            ModifyLandBitmapSquare (0, 0, m_scene.RegionInfo.RegionSizeX, m_scene.RegionInfo.RegionSizeY, fullSimParcel);

            return fullSimParcel;
        }