diff options
6 files changed, 85 insertions, 39 deletions
diff --git a/OpenSim/Framework/LandData.cs b/OpenSim/Framework/LandData.cs index 3fb2fd6..0389a2d 100644 --- a/OpenSim/Framework/LandData.cs +++ b/OpenSim/Framework/LandData.cs | |||
@@ -697,6 +697,8 @@ namespace OpenSim.Framework | |||
697 | landData._mediaLoop = _mediaLoop; | 697 | landData._mediaLoop = _mediaLoop; |
698 | landData._obscureMusic = _obscureMusic; | 698 | landData._obscureMusic = _obscureMusic; |
699 | landData._obscureMedia = _obscureMedia; | 699 | landData._obscureMedia = _obscureMedia; |
700 | landData._simwideArea = _simwideArea; | ||
701 | landData._simwidePrims = _simwidePrims; | ||
700 | 702 | ||
701 | landData._parcelAccessList.Clear(); | 703 | landData._parcelAccessList.Clear(); |
702 | foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList) | 704 | foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList) |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 72348b9..3972ec9 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -4398,7 +4398,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4398 | updateMessage.SequenceID = sequence_id; | 4398 | updateMessage.SequenceID = sequence_id; |
4399 | if (landData.SimwideArea > 0) | 4399 | if (landData.SimwideArea > 0) |
4400 | { | 4400 | { |
4401 | updateMessage.SimWideMaxPrims = parcelObjectCapacity; | 4401 | int simulatorCapacity = (int)(((float)landData.SimwideArea / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); |
4402 | updateMessage.SimWideMaxPrims = simulatorCapacity; | ||
4402 | } | 4403 | } |
4403 | else | 4404 | else |
4404 | { | 4405 | { |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 29d0713..b1dec4c 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | |||
@@ -217,31 +217,20 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
217 | m_scene.DeleteAllSceneObjects(); | 217 | m_scene.DeleteAllSceneObjects(); |
218 | } | 218 | } |
219 | 219 | ||
220 | // Try to retain the original creator/owner/lastowner if their uuid is present on this grid | 220 | LoadParcels(serialisedParcels); |
221 | // otherwise, use the master avatar uuid instead | 221 | LoadObjects(serialisedSceneObjects); |
222 | 222 | ||
223 | // Reload serialized parcels | 223 | m_log.InfoFormat("[ARCHIVER]: Successfully loaded archive"); |
224 | m_log.InfoFormat("[ARCHIVER]: Loading {0} parcels. Please wait.", serialisedParcels.Count); | ||
225 | List<LandData> landData = new List<LandData>(); | ||
226 | foreach (string serialisedParcel in serialisedParcels) | ||
227 | { | ||
228 | LandData parcel = LandDataSerializer.Deserialize(serialisedParcel); | ||
229 | if (!ResolveUserUuid(parcel.OwnerID)) | ||
230 | parcel.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | ||
231 | |||
232 | // m_log.DebugFormat( | ||
233 | // "[ARCHIVER]: Adding parcel {0}, local id {1}, area {2}", | ||
234 | // parcel.Name, parcel.LocalID, parcel.Area); | ||
235 | |||
236 | landData.Add(parcel); | ||
237 | } | ||
238 | |||
239 | if (!m_merge) | ||
240 | m_scene.LandChannel.Clear(false); | ||
241 | |||
242 | m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData); | ||
243 | m_log.InfoFormat("[ARCHIVER]: Restored {0} parcels.", landData.Count); | ||
244 | 224 | ||
225 | m_scene.EventManager.TriggerOarFileLoaded(m_requestId, m_errorMessage); | ||
226 | } | ||
227 | |||
228 | /// <summary> | ||
229 | /// Load serialized scene objects. | ||
230 | /// </summary> | ||
231 | /// <param name="serialisedSceneObjects"></param> | ||
232 | protected void LoadObjects(List<string> serialisedSceneObjects) | ||
233 | { | ||
245 | // Reload serialized prims | 234 | // Reload serialized prims |
246 | m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count); | 235 | m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count); |
247 | 236 | ||
@@ -271,6 +260,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
271 | // to the same scene (when this is possible). | 260 | // to the same scene (when this is possible). |
272 | sceneObject.ResetIDs(); | 261 | sceneObject.ResetIDs(); |
273 | 262 | ||
263 | // Try to retain the original creator/owner/lastowner if their uuid is present on this grid | ||
264 | // or creator data is present. Otherwise, use the estate owner instead. | ||
274 | foreach (SceneObjectPart part in sceneObject.Parts) | 265 | foreach (SceneObjectPart part in sceneObject.Parts) |
275 | { | 266 | { |
276 | if (part.CreatorData == null || part.CreatorData == string.Empty) | 267 | if (part.CreatorData == null || part.CreatorData == string.Empty) |
@@ -345,11 +336,36 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
345 | int ignoredObjects = serialisedSceneObjects.Count - sceneObjectsLoadedCount; | 336 | int ignoredObjects = serialisedSceneObjects.Count - sceneObjectsLoadedCount; |
346 | 337 | ||
347 | if (ignoredObjects > 0) | 338 | if (ignoredObjects > 0) |
348 | m_log.WarnFormat("[ARCHIVER]: Ignored {0} scene objects that already existed in the scene", ignoredObjects); | 339 | m_log.WarnFormat("[ARCHIVER]: Ignored {0} scene objects that already existed in the scene", ignoredObjects); |
349 | 340 | } | |
350 | m_log.InfoFormat("[ARCHIVER]: Successfully loaded archive"); | 341 | |
351 | 342 | /// <summary> | |
352 | m_scene.EventManager.TriggerOarFileLoaded(m_requestId, m_errorMessage); | 343 | /// Load serialized parcels. |
344 | /// </summary> | ||
345 | /// <param name="serialisedParcels"></param> | ||
346 | protected void LoadParcels(List<string> serialisedParcels) | ||
347 | { | ||
348 | // Reload serialized parcels | ||
349 | m_log.InfoFormat("[ARCHIVER]: Loading {0} parcels. Please wait.", serialisedParcels.Count); | ||
350 | List<LandData> landData = new List<LandData>(); | ||
351 | foreach (string serialisedParcel in serialisedParcels) | ||
352 | { | ||
353 | LandData parcel = LandDataSerializer.Deserialize(serialisedParcel); | ||
354 | if (!ResolveUserUuid(parcel.OwnerID)) | ||
355 | parcel.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | ||
356 | |||
357 | // m_log.DebugFormat( | ||
358 | // "[ARCHIVER]: Adding parcel {0}, local id {1}, area {2}", | ||
359 | // parcel.Name, parcel.LocalID, parcel.Area); | ||
360 | |||
361 | landData.Add(parcel); | ||
362 | } | ||
363 | |||
364 | if (!m_merge) | ||
365 | m_scene.LandChannel.Clear(false); | ||
366 | |||
367 | m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData); | ||
368 | m_log.InfoFormat("[ARCHIVER]: Restored {0} parcels.", landData.Count); | ||
353 | } | 369 | } |
354 | 370 | ||
355 | /// <summary> | 371 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index a4e85d6..9bcaf32 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -759,10 +759,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
759 | { | 759 | { |
760 | try | 760 | try |
761 | { | 761 | { |
762 | if (m_landList.ContainsKey(m_landIDList[x / 4, y / 4])) | 762 | //if (m_landList.ContainsKey(m_landIDList[x / 4, y / 4])) |
763 | return m_landList[m_landIDList[x / 4, y / 4]]; | 763 | return m_landList[m_landIDList[x / 4, y / 4]]; |
764 | else | 764 | //else |
765 | return null; | 765 | // return null; |
766 | } | 766 | } |
767 | catch (IndexOutOfRangeException) | 767 | catch (IndexOutOfRangeException) |
768 | { | 768 | { |
@@ -1995,9 +1995,21 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1995 | 1995 | ||
1996 | protected void ClearCommand(Object[] args) | 1996 | protected void ClearCommand(Object[] args) |
1997 | { | 1997 | { |
1998 | Clear(true); | 1998 | string response = MainConsole.Instance.CmdPrompt( |
1999 | string.Format( | ||
2000 | "Are you sure that you want to clear all land parcels from {0} (y or n)", | ||
2001 | m_scene.RegionInfo.RegionName), | ||
2002 | "n"); | ||
1999 | 2003 | ||
2000 | MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName); | 2004 | if (response.ToLower() == "y") |
2005 | { | ||
2006 | Clear(true); | ||
2007 | MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName); | ||
2008 | } | ||
2009 | else | ||
2010 | { | ||
2011 | MainConsole.Instance.OutputFormat("Aborting clear of all parcels from {0}", m_scene.RegionInfo.RegionName); | ||
2012 | } | ||
2001 | } | 2013 | } |
2002 | 2014 | ||
2003 | protected void ShowParcelsCommand(Object[] args) | 2015 | protected void ShowParcelsCommand(Object[] args) |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 7723eb4..b114db1 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -66,6 +66,13 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
66 | 66 | ||
67 | #region ILandObject Members | 67 | #region ILandObject Members |
68 | 68 | ||
69 | public int GetPrimsFree() | ||
70 | { | ||
71 | m_scene.EventManager.TriggerParcelPrimCountUpdate(); | ||
72 | int free = GetSimulatorMaxPrimCount(this) - m_landData.SimwidePrims; | ||
73 | return free; | ||
74 | } | ||
75 | |||
69 | public LandData LandData | 76 | public LandData LandData |
70 | { | 77 | { |
71 | get { return m_landData; } | 78 | get { return m_landData; } |
@@ -141,7 +148,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
141 | /// <returns>Returns true if the piece of land contains the specified point</returns> | 148 | /// <returns>Returns true if the piece of land contains the specified point</returns> |
142 | public bool ContainsPoint(int x, int y) | 149 | public bool ContainsPoint(int x, int y) |
143 | { | 150 | { |
144 | if (x >= 0 && y >= 0 && x <= Constants.RegionSize && y <= Constants.RegionSize) | 151 | if (x >= 0 && y >= 0 && x < Constants.RegionSize && y < Constants.RegionSize) |
145 | { | 152 | { |
146 | return (LandBitmap[x / 4, y / 4] == true); | 153 | return (LandBitmap[x / 4, y / 4] == true); |
147 | } | 154 | } |
@@ -183,7 +190,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
183 | else | 190 | else |
184 | { | 191 | { |
185 | // Normal Calculations | 192 | // Normal Calculations |
186 | return (int)Math.Round(((float)LandData.Area / 65536.0f) * (float)m_scene.RegionInfo.ObjectCapacity * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); | 193 | int parcelMax = (int)(((float)LandData.Area / 65536.0f) |
194 | * (float)m_scene.RegionInfo.ObjectCapacity | ||
195 | * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); | ||
196 | // TODO: The calculation of ObjectBonus should be refactored. It does still not work in the same manner as SL! | ||
197 | return parcelMax; | ||
187 | } | 198 | } |
188 | } | 199 | } |
189 | public int GetSimulatorMaxPrimCount(ILandObject thisObject) | 200 | public int GetSimulatorMaxPrimCount(ILandObject thisObject) |
@@ -195,7 +206,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
195 | else | 206 | else |
196 | { | 207 | { |
197 | //Normal Calculations | 208 | //Normal Calculations |
198 | return m_scene.RegionInfo.ObjectCapacity; | 209 | int simMax = (int)(((float)LandData.SimwideArea / 65536.0f) |
210 | * (float)m_scene.RegionInfo.ObjectCapacity); | ||
211 | return simMax; | ||
199 | } | 212 | } |
200 | } | 213 | } |
201 | #endregion | 214 | #endregion |
@@ -369,7 +382,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
369 | newData.AuthBuyerID = UUID.Zero; | 382 | newData.AuthBuyerID = UUID.Zero; |
370 | newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects | ParcelFlags.ShowDirectory); | 383 | newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects | ParcelFlags.ShowDirectory); |
371 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); | 384 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
372 | 385 | m_scene.EventManager.TriggerParcelPrimCountUpdate(); | |
373 | SendLandUpdateToAvatarsOverMe(true); | 386 | SendLandUpdateToAvatarsOverMe(true); |
374 | } | 387 | } |
375 | 388 | ||
@@ -384,7 +397,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
384 | newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects | ParcelFlags.ShowDirectory); | 397 | newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects | ParcelFlags.ShowDirectory); |
385 | 398 | ||
386 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); | 399 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
387 | 400 | m_scene.EventManager.TriggerParcelPrimCountUpdate(); | |
388 | SendLandUpdateToAvatarsOverMe(true); | 401 | SendLandUpdateToAvatarsOverMe(true); |
389 | } | 402 | } |
390 | 403 | ||
@@ -485,6 +498,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
485 | 498 | ||
486 | public void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client) | 499 | public void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client) |
487 | { | 500 | { |
501 | m_scene.EventManager.TriggerParcelPrimCountUpdate(); | ||
488 | SendLandProperties(0, snap_selection, 0, remote_client); | 502 | SendLandProperties(0, snap_selection, 0, remote_client); |
489 | } | 503 | } |
490 | 504 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/ILandObject.cs b/OpenSim/Region/Framework/Interfaces/ILandObject.cs index 576b645..eeb9d3a 100644 --- a/OpenSim/Region/Framework/Interfaces/ILandObject.cs +++ b/OpenSim/Region/Framework/Interfaces/ILandObject.cs | |||
@@ -39,6 +39,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
39 | { | 39 | { |
40 | int GetParcelMaxPrimCount(ILandObject thisObject); | 40 | int GetParcelMaxPrimCount(ILandObject thisObject); |
41 | int GetSimulatorMaxPrimCount(ILandObject thisObject); | 41 | int GetSimulatorMaxPrimCount(ILandObject thisObject); |
42 | int GetPrimsFree(); | ||
42 | 43 | ||
43 | LandData LandData { get; set; } | 44 | LandData LandData { get; set; } |
44 | bool[,] LandBitmap { get; set; } | 45 | bool[,] LandBitmap { get; set; } |