diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 2d2772bef5..44fd994245 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -237,7 +237,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver } if (!m_merge) - m_scene.LandChannel.Clear(); + m_scene.LandChannel.Clear(false); m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData); m_log.InfoFormat("[ARCHIVER]: Restored {0} parcels.", landData.Count); diff --git a/OpenSim/Region/CoreModules/World/Land/LandChannel.cs b/OpenSim/Region/CoreModules/World/Land/LandChannel.cs index 2959eb4bcf..7d990c265c 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandChannel.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandChannel.cs @@ -117,10 +117,10 @@ namespace OpenSim.Region.CoreModules.World.Land return new List(); } - public void Clear() + public void Clear(bool setupDefaultParcel) { if (m_landManagementModule != null) - m_landManagementModule.Clear(); + m_landManagementModule.Clear(setupDefaultParcel); } public List ParcelsNearPoint(Vector3 position) diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 7d030c7a16..a46be13557 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -298,13 +298,19 @@ namespace OpenSim.Region.CoreModules.World.Land m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1; m_landIDList.Initialize(); } - + } + + /// + /// Create a default parcel that spans the entire region and is owned by the estate owner. + /// + /// The parcel created. + protected ILandObject CreateDefaultParcel() + { ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); - fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch(); - AddLandObject(fullSimParcel); + return AddLandObject(fullSimParcel); } public List AllParcels() @@ -640,7 +646,7 @@ namespace OpenSim.Region.CoreModules.World.Land /// /// Clear the scene of all parcels /// - public void Clear() + public void Clear(bool setupDefaultParcel) { lock (m_landList) { @@ -654,6 +660,9 @@ namespace OpenSim.Region.CoreModules.World.Land } ResetSimLandObjects(); + + if (setupDefaultParcel) + CreateDefaultParcel(); } private void performFinalLandJoin(ILandObject master, ILandObject slave) @@ -1321,7 +1330,6 @@ namespace OpenSim.Region.CoreModules.World.Land } } - void ClientOnParcelDeedToGroup(int parcelLocalID, UUID groupID, IClientAPI remote_client) { ILandObject land; @@ -1337,10 +1345,8 @@ namespace OpenSim.Region.CoreModules.World.Land { land.DeedToGroup(groupID); } - } - #region Land Object From Storage Functions public void EventManagerOnIncomingLandDataFromStorage(List data) @@ -1375,6 +1381,7 @@ namespace OpenSim.Region.CoreModules.World.Land public void EventManagerOnNoLandDataFromStorage() { ResetSimLandObjects(); + CreateDefaultParcel(); } #endregion @@ -1646,7 +1653,7 @@ namespace OpenSim.Region.CoreModules.World.Land protected void ClearCommand(Object[] args) { - Clear(); + Clear(true); MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName); } diff --git a/OpenSim/Region/Framework/Interfaces/ILandChannel.cs b/OpenSim/Region/Framework/Interfaces/ILandChannel.cs index 17570c6593..30bae16d81 100644 --- a/OpenSim/Region/Framework/Interfaces/ILandChannel.cs +++ b/OpenSim/Region/Framework/Interfaces/ILandChannel.cs @@ -72,7 +72,10 @@ namespace OpenSim.Region.Framework.Interfaces /// /// Clear the land channel of all parcels. /// - void Clear(); + /// + /// If true, set up a default parcel covering the whole region owned by the estate owner. + /// + void Clear(bool setupDefaultParcel); bool IsLandPrimCountTainted(); bool IsForcefulBansAllowed(); diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs index c2480b735b..98e5453d1e 100644 --- a/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs +++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerLargeLandChannel.cs @@ -63,9 +63,9 @@ public class RegionCombinerLargeLandChannel : ILandChannel return RootRegionLandChannel.AllParcels(); } - public void Clear() + public void Clear(bool setupDefaultParcel) { - RootRegionLandChannel.Clear(); + RootRegionLandChannel.Clear(setupDefaultParcel); } public ILandObject GetLandObject(int x, int y) diff --git a/OpenSim/Tests/Common/Mock/TestLandChannel.cs b/OpenSim/Tests/Common/Mock/TestLandChannel.cs index 366af67dc4..c3134b3bc1 100644 --- a/OpenSim/Tests/Common/Mock/TestLandChannel.cs +++ b/OpenSim/Tests/Common/Mock/TestLandChannel.cs @@ -56,7 +56,7 @@ namespace OpenSim.Tests.Common.Mock return new List(); } - public void Clear() + public void Clear(bool setupDefaultParcel) { // Intentionally blank since we don't save any parcel data in the test channel }