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 ILandObject Copy() { ILandObject newLand = new LandObject(LandData.OwnerID, LandData.IsGroupOwned, m_scene); //Place all new variables here! newLand.LandData = LandData.Copy(); return newLand; }
/// <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; }
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) & 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 (); }
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 (); }