From 7494d7726afd9f8b9762d78aead918ba7a90efa3 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 11 Oct 2016 01:14:53 +0100 Subject: change math on GetParcelMaxPrimCount and GetSimulatorMaxPrimCount to reduce round errors, limit both to region max prims. consider ObjectBonus on last one also. Change a variable name in PrimLimitsModule to make it more clear --- .../Region/CoreModules/World/Land/LandObject.cs | 25 ++++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'OpenSim/Region/CoreModules/World/Land') diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 69a3455..4cbc8b8 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs @@ -341,10 +341,16 @@ namespace OpenSim.Region.CoreModules.World.Land else { // Normal Calculations - int parcelMax = (int)( (long)LandData.Area - * (long)m_scene.RegionInfo.ObjectCapacity - * (long)m_scene.RegionInfo.RegionSettings.ObjectBonus - / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) ); + int parcelMax = (int)( + (double)LandData.Area + * (double)m_scene.RegionInfo.ObjectCapacity + * (double)m_scene.RegionInfo.RegionSettings.ObjectBonus + / (double)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) + + 0.5 ); + + if(parcelMax > m_scene.RegionInfo.ObjectCapacity) + parcelMax = m_scene.RegionInfo.ObjectCapacity; + //m_log.DebugFormat("Area: {0}, Capacity {1}, Bonus {2}, Parcel {3}", LandData.Area, m_scene.RegionInfo.ObjectCapacity, m_scene.RegionInfo.RegionSettings.ObjectBonus, parcelMax); return parcelMax; } @@ -359,9 +365,14 @@ namespace OpenSim.Region.CoreModules.World.Land else { //Normal Calculations - int simMax = (int)( (long)LandData.SimwideArea - * (long)m_scene.RegionInfo.ObjectCapacity - / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) ); + int simMax = (int)( (double)LandData.SimwideArea + * (double)m_scene.RegionInfo.ObjectCapacity + * (double)m_scene.RegionInfo.RegionSettings.ObjectBonus + / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) + +0.5 ); + + if(simMax > m_scene.RegionInfo.ObjectCapacity) + simMax = m_scene.RegionInfo.ObjectCapacity; //m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}, SimWidePrims {3}", // LandData.SimwideArea, m_scene.RegionInfo.ObjectCapacity, simMax, LandData.SimwidePrims); return simMax; -- cgit v1.1