diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 60485186e0..ecf10e43ad 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -4589,7 +4589,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (landData.SimwideArea > 0) { - int simulatorCapacity = (int)(((float)landData.SimwideArea / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); + int simulatorCapacity = (int)((double)(landData.SimwideArea * m_scene.RegionInfo.ObjectCapacity) * m_scene.RegionInfo.RegionSettings.ObjectBonus) / 65536; + // Never report more than sim total capacity + if (simulatorCapacity > m_scene.RegionInfo.ObjectCapacity) + simulatorCapacity = m_scene.RegionInfo.ObjectCapacity; updateMessage.SimWideMaxPrims = simulatorCapacity; } else diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 2a6d362833..950dff7266 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs @@ -190,10 +190,26 @@ namespace OpenSim.Region.CoreModules.World.Land else { // Normal Calculations - int parcelMax = (int)(((float)LandData.Area / 65536.0f) - * (float)m_scene.RegionInfo.ObjectCapacity - * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); - // TODO: The calculation of ObjectBonus should be refactored. It does still not work in the same manner as SL! + int parcelMax = (int)((double)(LandData.Area + * m_scene.RegionInfo.ObjectCapacity) + * m_scene.RegionInfo.RegionSettings.ObjectBonus) + / 65536; + return parcelMax; + } + } + + private int GetParcelBasePrimCount() + { + if (overrideParcelMaxPrimCount != null) + { + return overrideParcelMaxPrimCount(this); + } + else + { + // Normal Calculations + int parcelMax = LandData.Area + * m_scene.RegionInfo.ObjectCapacity + / 65536; return parcelMax; } } @@ -245,7 +261,7 @@ namespace OpenSim.Region.CoreModules.World.Land remote_client.SendLandProperties(seq_id, snap_selection, request_result, this, (float)m_scene.RegionInfo.RegionSettings.ObjectBonus, - GetParcelMaxPrimCount(), + GetParcelBasePrimCount(), GetSimulatorMaxPrimCount(), regionFlags); }