diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 802cb37aa0..b5d025fbbd 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1171,6 +1171,16 @@ namespace OpenSim.Framework
}
+ public static uint ConvertAccessLevelToMaturity(byte maturity)
+ {
+ if (maturity <= 13)
+ return 0;
+ else if (maturity <= 21)
+ return 1;
+ else
+ return 2;
+ }
+
///
/// Produces an OSDMap from its string representation on a stream
///
@@ -1486,4 +1496,4 @@ namespace OpenSim.Framework
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index c59eedf188..7bf7511da6 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -2656,7 +2656,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Bit 0: Mature, bit 7: on sale, other bits: no idea
reply.Data.Flags = (byte)(
- ((land.Flags & (uint)ParcelFlags.MaturePublish) != 0 ? (1 << 0) : 0) +
+ (info.AccessLevel > 13 ? (1 << 0) : 0) +
((land.Flags & (uint)ParcelFlags.ForSale) != 0 ? (1 << 7) : 0));
Vector3 pos = land.UserLocation;
@@ -2664,8 +2664,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
pos = (land.AABBMax + land.AABBMin) * 0.5f;
}
- reply.Data.GlobalX = info.RegionLocX * Constants.RegionSize + x;
- reply.Data.GlobalY = info.RegionLocY * Constants.RegionSize + y;
+ reply.Data.GlobalX = info.RegionLocX + x;
+ reply.Data.GlobalY = info.RegionLocY + y;
reply.Data.GlobalZ = pos.Z;
reply.Data.SimName = Utils.StringToBytes(info.RegionName);
reply.Data.SnapshotID = land.SnapshotID;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs
index bce160a92a..23251c9b1c 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs
@@ -121,7 +121,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land
#region ILandService
- public LandData GetLandData(ulong regionHandle, uint x, uint y)
+ public LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess)
{
m_log.DebugFormat("[LAND IN CONNECTOR]: GetLandData for {0}. Count = {1}",
regionHandle, m_Scenes.Count);
@@ -130,10 +130,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land
if (s.RegionInfo.RegionHandle == regionHandle)
{
m_log.Debug("[LAND IN CONNECTOR]: Found region to GetLandData from");
+ regionAccess = s.RegionInfo.AccessLevel;
return s.GetLandData(x, y);
}
}
m_log.DebugFormat("[LAND IN CONNECTOR]: region handle {0} not found", regionHandle);
+ regionAccess = 42;
return null;
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs
index cb87f6f847..e15f624d70 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs
@@ -116,8 +116,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
#region ILandService
- public LandData GetLandData(ulong regionHandle, uint x, uint y)
+ public LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess)
{
+ regionAccess = 2;
m_log.DebugFormat("[LAND CONNECTOR]: request for land data in {0} at {1}, {2}",
regionHandle, x, y);
@@ -126,6 +127,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
if (s.RegionInfo.RegionHandle == regionHandle)
{
LandData land = s.GetLandData(x, y);
+ regionAccess = s.RegionInfo.AccessLevel;
return land;
}
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs
index 153c2a5834..23860600f9 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs
@@ -108,13 +108,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land
#region ILandService
- public override LandData GetLandData(ulong regionHandle, uint x, uint y)
+ public override LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess)
{
- LandData land = m_LocalService.GetLandData(regionHandle, x, y);
+ LandData land = m_LocalService.GetLandData(regionHandle, x, y, out regionAccess);
if (land != null)
return land;
- return base.GetLandData(regionHandle, x, y);
+ return base.GetLandData(regionHandle, x, y, out regionAccess);
}
#endregion ILandService
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 4ccd0f03cb..31aa017615 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Land
public LandData LandData;
public ulong RegionHandle;
public uint X, Y;
+ public byte RegionAccess;
}
public class LandManagementModule : INonSharedRegionModule
@@ -1459,13 +1460,15 @@ namespace OpenSim.Region.CoreModules.World.Land
if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle)
{
extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData;
+ extLandData.RegionAccess = m_scene.RegionInfo.AccessLevel;
}
else
{
ILandService landService = m_scene.RequestModuleInterface();
extLandData.LandData = landService.GetLandData(extLandData.RegionHandle,
extLandData.X,
- extLandData.Y);
+ extLandData.Y,
+ out extLandData.RegionAccess);
if (extLandData.LandData == null)
{
// we didn't find the region/land => don't cache
@@ -1497,6 +1500,7 @@ namespace OpenSim.Region.CoreModules.World.Land
r.RegionName = info.RegionName;
r.RegionLocX = (uint)info.RegionLocX;
r.RegionLocY = (uint)info.RegionLocY;
+ r.RegionSettings.Maturity = (int)Util.ConvertAccessLevelToMaturity(data.RegionAccess);
remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y);
}
else
diff --git a/OpenSim/Server/Handlers/Land/LandHandlers.cs b/OpenSim/Server/Handlers/Land/LandHandlers.cs
index a21f9de29b..561f285a4b 100644
--- a/OpenSim/Server/Handlers/Land/LandHandlers.cs
+++ b/OpenSim/Server/Handlers/Land/LandHandlers.cs
@@ -66,7 +66,8 @@ namespace OpenSim.Server.Handlers.Land
uint y = Convert.ToUInt32(requestData["y"]);
m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle);
- LandData landData = m_LocalService.GetLandData(regionHandle, x, y);
+ byte regionAccess;
+ LandData landData = m_LocalService.GetLandData(regionHandle, x, y, out regionAccess);
Hashtable hash = new Hashtable();
if (landData != null)
{
@@ -83,6 +84,7 @@ namespace OpenSim.Server.Handlers.Land
hash["SalePrice"] = landData.SalePrice.ToString();
hash["SnapshotID"] = landData.SnapshotID.ToString();
hash["UserLocation"] = landData.UserLocation.ToString();
+ hash["RegionAccess"] = regionAccess.ToString();
}
XmlRpcResponse response = new XmlRpcResponse();
diff --git a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs
index 06bc11cebe..8bae4aac13 100644
--- a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs
@@ -64,7 +64,7 @@ namespace OpenSim.Services.Connectors
m_GridService = gridServices;
}
- public virtual LandData GetLandData(ulong regionHandle, uint x, uint y)
+ public virtual LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess)
{
LandData landData = null;
Hashtable hash = new Hashtable();
@@ -74,6 +74,7 @@ namespace OpenSim.Services.Connectors
IList paramList = new ArrayList();
paramList.Add(hash);
+ regionAccess = 42; // Default to adult. Better safe...
try
{
@@ -107,6 +108,8 @@ namespace OpenSim.Services.Connectors
landData.SalePrice = Convert.ToInt32(hash["SalePrice"]);
landData.SnapshotID = new UUID((string)hash["SnapshotID"]);
landData.UserLocation = Vector3.Parse((string)hash["UserLocation"]);
+ if (hash["RegionAccess"] != null)
+ regionAccess = (byte)Convert.ToInt32((string)hash["RegionAccess"]);
m_log.DebugFormat("[OGS1 GRID SERVICES] Got land data for parcel {0}", landData.Name);
}
catch (Exception e)
diff --git a/OpenSim/Services/Interfaces/ILandService.cs b/OpenSim/Services/Interfaces/ILandService.cs
index e2f1d1d51a..7a12aff951 100644
--- a/OpenSim/Services/Interfaces/ILandService.cs
+++ b/OpenSim/Services/Interfaces/ILandService.cs
@@ -33,6 +33,6 @@ namespace OpenSim.Services.Interfaces
{
public interface ILandService
{
- LandData GetLandData(ulong regionHandle, uint x, uint y);
+ LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess);
}
}