When an oar is loaded, do not create a default parcel before loading the parcels from the OAR.

The region spanning parcel shouldn't exist in this situation.  If it does, when the land data is loaded it is repersisted with a local ID which comes after the ones loaded via the oar, which obliterates the oar loaded one.

Resaving the data we just loaded from the database is somewhat odd in itself (though this makes sense from the way that OAR loading was already using the same event).
viewer-2-initial-appearance
Justin Clark-Casey (justincc) 2011-01-27 20:29:06 +00:00
parent 42c0dbf49a
commit be3685b1a2
6 changed files with 25 additions and 15 deletions

View File

@ -237,7 +237,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
} }
if (!m_merge) if (!m_merge)
m_scene.LandChannel.Clear(); m_scene.LandChannel.Clear(false);
m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData); m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData);
m_log.InfoFormat("[ARCHIVER]: Restored {0} parcels.", landData.Count); m_log.InfoFormat("[ARCHIVER]: Restored {0} parcels.", landData.Count);

View File

@ -117,10 +117,10 @@ namespace OpenSim.Region.CoreModules.World.Land
return new List<ILandObject>(); return new List<ILandObject>();
} }
public void Clear() public void Clear(bool setupDefaultParcel)
{ {
if (m_landManagementModule != null) if (m_landManagementModule != null)
m_landManagementModule.Clear(); m_landManagementModule.Clear(setupDefaultParcel);
} }
public List<ILandObject> ParcelsNearPoint(Vector3 position) public List<ILandObject> ParcelsNearPoint(Vector3 position)

View File

@ -298,13 +298,19 @@ namespace OpenSim.Region.CoreModules.World.Land
m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1; m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1;
m_landIDList.Initialize(); m_landIDList.Initialize();
} }
}
/// <summary>
/// Create a default parcel that spans the entire region and is owned by the estate owner.
/// </summary>
/// <returns>The parcel created.</returns>
protected ILandObject CreateDefaultParcel()
{
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch(); fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch();
AddLandObject(fullSimParcel); return AddLandObject(fullSimParcel);
} }
public List<ILandObject> AllParcels() public List<ILandObject> AllParcels()
@ -640,7 +646,7 @@ namespace OpenSim.Region.CoreModules.World.Land
/// <summary> /// <summary>
/// Clear the scene of all parcels /// Clear the scene of all parcels
/// </summary> /// </summary>
public void Clear() public void Clear(bool setupDefaultParcel)
{ {
lock (m_landList) lock (m_landList)
{ {
@ -654,6 +660,9 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
ResetSimLandObjects(); ResetSimLandObjects();
if (setupDefaultParcel)
CreateDefaultParcel();
} }
private void performFinalLandJoin(ILandObject master, ILandObject slave) 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) void ClientOnParcelDeedToGroup(int parcelLocalID, UUID groupID, IClientAPI remote_client)
{ {
ILandObject land; ILandObject land;
@ -1337,10 +1345,8 @@ namespace OpenSim.Region.CoreModules.World.Land
{ {
land.DeedToGroup(groupID); land.DeedToGroup(groupID);
} }
} }
#region Land Object From Storage Functions #region Land Object From Storage Functions
public void EventManagerOnIncomingLandDataFromStorage(List<LandData> data) public void EventManagerOnIncomingLandDataFromStorage(List<LandData> data)
@ -1375,6 +1381,7 @@ namespace OpenSim.Region.CoreModules.World.Land
public void EventManagerOnNoLandDataFromStorage() public void EventManagerOnNoLandDataFromStorage()
{ {
ResetSimLandObjects(); ResetSimLandObjects();
CreateDefaultParcel();
} }
#endregion #endregion
@ -1646,7 +1653,7 @@ namespace OpenSim.Region.CoreModules.World.Land
protected void ClearCommand(Object[] args) protected void ClearCommand(Object[] args)
{ {
Clear(); Clear(true);
MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName); MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName);
} }

View File

@ -72,7 +72,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// <summary> /// <summary>
/// Clear the land channel of all parcels. /// Clear the land channel of all parcels.
/// </summary> /// </summary>
void Clear(); /// <param name="setupDefaultParcel">
/// If true, set up a default parcel covering the whole region owned by the estate owner.
/// </param>
void Clear(bool setupDefaultParcel);
bool IsLandPrimCountTainted(); bool IsLandPrimCountTainted();
bool IsForcefulBansAllowed(); bool IsForcefulBansAllowed();

View File

@ -63,9 +63,9 @@ public class RegionCombinerLargeLandChannel : ILandChannel
return RootRegionLandChannel.AllParcels(); return RootRegionLandChannel.AllParcels();
} }
public void Clear() public void Clear(bool setupDefaultParcel)
{ {
RootRegionLandChannel.Clear(); RootRegionLandChannel.Clear(setupDefaultParcel);
} }
public ILandObject GetLandObject(int x, int y) public ILandObject GetLandObject(int x, int y)

View File

@ -56,7 +56,7 @@ namespace OpenSim.Tests.Common.Mock
return new List<ILandObject>(); return new List<ILandObject>();
} }
public void Clear() public void Clear(bool setupDefaultParcel)
{ {
// Intentionally blank since we don't save any parcel data in the test channel // Intentionally blank since we don't save any parcel data in the test channel
} }