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)
m_scene.LandChannel.Clear();
m_scene.LandChannel.Clear(false);
m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData);
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>();
}
public void Clear()
public void Clear(bool setupDefaultParcel)
{
if (m_landManagementModule != null)
m_landManagementModule.Clear();
m_landManagementModule.Clear(setupDefaultParcel);
}
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_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);
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<ILandObject> AllParcels()
@ -640,7 +646,7 @@ namespace OpenSim.Region.CoreModules.World.Land
/// <summary>
/// Clear the scene of all parcels
/// </summary>
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<LandData> 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);
}

View File

@ -72,7 +72,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// <summary>
/// Clear the land channel of all parcels.
/// </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 IsForcefulBansAllowed();

View File

@ -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)

View File

@ -56,7 +56,7 @@ namespace OpenSim.Tests.Common.Mock
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
}