aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/LandManagement/LandManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/LandManagement/LandManager.cs')
-rw-r--r--OpenSim/Region/Environment/LandManagement/LandManager.cs122
1 files changed, 64 insertions, 58 deletions
diff --git a/OpenSim/Region/Environment/LandManagement/LandManager.cs b/OpenSim/Region/Environment/LandManagement/LandManager.cs
index 8e49811..843c0f5 100644
--- a/OpenSim/Region/Environment/LandManagement/LandManager.cs
+++ b/OpenSim/Region/Environment/LandManagement/LandManager.cs
@@ -36,34 +36,34 @@ using OpenSim.Region.Environment.Scenes;
36namespace OpenSim.Region.Environment.LandManagement 36namespace OpenSim.Region.Environment.LandManagement
37{ 37{
38 38
39
40 #region LandManager Class 39 #region LandManager Class
40
41 /// <summary> 41 /// <summary>
42 /// Handles Land objects and operations requiring information from other Land objects (divide, join, etc) 42 /// Handles Land objects and operations requiring information from other Land objects (divide, join, etc)
43 /// </summary> 43 /// </summary>
44 public class LandManager 44 public class LandManager
45 { 45 {
46
47 #region Constants 46 #region Constants
47
48 //Land types set with flags in ParcelOverlay. 48 //Land types set with flags in ParcelOverlay.
49 //Only one of these can be used. 49 //Only one of these can be used.
50 public const byte LAND_TYPE_PUBLIC = (byte)0; //Equals 00000000 50 public const byte LAND_TYPE_PUBLIC = (byte) 0; //Equals 00000000
51 public const byte LAND_TYPE_OWNED_BY_OTHER = (byte)1; //Equals 00000001 51 public const byte LAND_TYPE_OWNED_BY_OTHER = (byte) 1; //Equals 00000001
52 public const byte LAND_TYPE_OWNED_BY_GROUP = (byte)2; //Equals 00000010 52 public const byte LAND_TYPE_OWNED_BY_GROUP = (byte) 2; //Equals 00000010
53 public const byte LAND_TYPE_OWNED_BY_REQUESTER = (byte)3; //Equals 00000011 53 public const byte LAND_TYPE_OWNED_BY_REQUESTER = (byte) 3; //Equals 00000011
54 public const byte LAND_TYPE_IS_FOR_SALE = (byte)4; //Equals 00000100 54 public const byte LAND_TYPE_IS_FOR_SALE = (byte) 4; //Equals 00000100
55 public const byte LAND_TYPE_IS_BEING_AUCTIONED = (byte)5; //Equals 00000101 55 public const byte LAND_TYPE_IS_BEING_AUCTIONED = (byte) 5; //Equals 00000101
56 56
57 57
58 //Flags that when set, a border on the given side will be placed 58 //Flags that when set, a border on the given side will be placed
59 //NOTE: North and East is assumable by the west and south sides (if land to east has a west border, then I have an east border; etc) 59 //NOTE: North and East is assumable by the west and south sides (if land to east has a west border, then I have an east border; etc)
60 //This took forever to figure out -- jeesh. /blame LL for even having to send these 60 //This took forever to figure out -- jeesh. /blame LL for even having to send these
61 public const byte LAND_FLAG_PROPERTY_BORDER_WEST = (byte)64; //Equals 01000000 61 public const byte LAND_FLAG_PROPERTY_BORDER_WEST = (byte) 64; //Equals 01000000
62 public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = (byte)128; //Equals 10000000 62 public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = (byte) 128; //Equals 10000000
63 63
64 //RequestResults (I think these are right, they seem to work): 64 //RequestResults (I think these are right, they seem to work):
65 public const int LAND_RESULT_SINGLE = 0; // The request they made contained only a single piece of land 65 public const int LAND_RESULT_SINGLE = 0; // The request they made contained only a single piece of land
66 public const int LAND_RESULT_MULTIPLE = 1; // The request they made contained more than a single peice of land 66 public const int LAND_RESULT_MULTIPLE = 1; // The request they made contained more than a single peice of land
67 67
68 //ParcelSelectObjects 68 //ParcelSelectObjects
69 public const int LAND_SELECT_OBJECTS_OWNER = 2; 69 public const int LAND_SELECT_OBJECTS_OWNER = 2;
@@ -73,12 +73,14 @@ namespace OpenSim.Region.Environment.LandManagement
73 73
74 //These are other constants. Yay! 74 //These are other constants. Yay!
75 public const int START_LAND_LOCAL_ID = 1; 75 public const int START_LAND_LOCAL_ID = 1;
76
76 #endregion 77 #endregion
77 78
78 #region Member Variables 79 #region Member Variables
80
79 public Dictionary<int, Land> landList = new Dictionary<int, Land>(); 81 public Dictionary<int, Land> landList = new Dictionary<int, Land>();
80 private int lastLandLocalID = START_LAND_LOCAL_ID - 1; 82 private int lastLandLocalID = START_LAND_LOCAL_ID - 1;
81 private int[,] landIDList = new int[64, 64]; 83 private int[,] landIDList = new int[64,64];
82 84
83 /// <summary> 85 /// <summary>
84 /// Set to true when a prim is moved, created, added. Performs a prim count update 86 /// Set to true when a prim is moved, created, added. Performs a prim count update
@@ -91,35 +93,37 @@ namespace OpenSim.Region.Environment.LandManagement
91 #endregion 93 #endregion
92 94
93 #region Constructors 95 #region Constructors
96
94 public LandManager(Scene scene, RegionInfo reginfo) 97 public LandManager(Scene scene, RegionInfo reginfo)
95 { 98 {
96
97 m_scene = scene; 99 m_scene = scene;
98 m_regInfo = reginfo; 100 m_regInfo = reginfo;
99 landIDList.Initialize(); 101 landIDList.Initialize();
100
101 } 102 }
103
102 #endregion 104 #endregion
103 105
104 #region Member Functions 106 #region Member Functions
105 107
106 #region Parcel From Storage Functions 108 #region Parcel From Storage Functions
109
107 public void LandFromStorage(LandData data) 110 public void LandFromStorage(LandData data)
108 { 111 {
109 Land new_land = new Land(data.ownerID, data.isGroupOwned, m_scene); 112 Land new_land = new Land(data.ownerID, data.isGroupOwned, m_scene);
110 new_land.landData = data.Copy(); 113 new_land.landData = data.Copy();
111 new_land.setLandBitmapFromByteArray(); 114 new_land.setLandBitmapFromByteArray();
112 addLandObject(new_land); 115 addLandObject(new_land);
113
114 } 116 }
115 117
116 public void NoLandDataFromStorage() 118 public void NoLandDataFromStorage()
117 { 119 {
118 resetSimLandObjects(); 120 resetSimLandObjects();
119 } 121 }
122
120 #endregion 123 #endregion
121 124
122 #region Parcel Add/Remove/Get/Create 125 #region Parcel Add/Remove/Get/Create
126
123 /// <summary> 127 /// <summary>
124 /// Creates a basic Parcel object without an owner (a zeroed key) 128 /// Creates a basic Parcel object without an owner (a zeroed key)
125 /// </summary> 129 /// </summary>
@@ -155,8 +159,8 @@ namespace OpenSim.Region.Environment.LandManagement
155 landList[lastLandLocalID].forceUpdateLandInfo(); 159 landList[lastLandLocalID].forceUpdateLandInfo();
156 160
157 return new_land; 161 return new_land;
158
159 } 162 }
163
160 /// <summary> 164 /// <summary>
161 /// Removes a land object from the list. Will not remove if local_id is still owning an area in landIDList 165 /// Removes a land object from the list. Will not remove if local_id is still owning an area in landIDList
162 /// </summary> 166 /// </summary>
@@ -194,6 +198,7 @@ namespace OpenSim.Region.Environment.LandManagement
194 } 198 }
195 removeLandObject(slave.landData.localID); 199 removeLandObject(slave.landData.localID);
196 } 200 }
201
197 /// <summary> 202 /// <summary>
198 /// Get the land object at the specified point 203 /// Get the land object at the specified point
199 /// </summary> 204 /// </summary>
@@ -202,16 +207,16 @@ namespace OpenSim.Region.Environment.LandManagement
202 /// <returns>Land object at the point supplied</returns> 207 /// <returns>Land object at the point supplied</returns>
203 public Land getLandObject(float x_float, float y_float) 208 public Land getLandObject(float x_float, float y_float)
204 { 209 {
205 int x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / Convert.ToDouble(4.0))); 210 int x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float)/Convert.ToDouble(4.0)));
206 int y = Convert.ToInt32(Math.Floor(Convert.ToDouble(y_float) / Convert.ToDouble(4.0))); 211 int y = Convert.ToInt32(Math.Floor(Convert.ToDouble(y_float)/Convert.ToDouble(4.0)));
207 212
208 if (x > 63 || y > 63 || x < 0 || y < 0) 213 if (x > 63 || y > 63 || x < 0 || y < 0)
209 { 214 {
210 throw new Exception("Error: Parcel not found at point " + x + ", " + y); 215 throw new Exception("Error: Parcel not found at point " + x + ", " + y);
211 } 216 }
212 else 217 else
213 { 218 {
214 // Console.WriteLine("Point (" + x + ", " + y + ") determined from point (" + x_float + ", " + y_float + ")"); 219 // Console.WriteLine("Point (" + x + ", " + y + ") determined from point (" + x_float + ", " + y_float + ")");
215 return landList[landIDList[x, y]]; 220 return landList[landIDList[x, y]];
216 } 221 }
217 } 222 }
@@ -224,12 +229,14 @@ namespace OpenSim.Region.Environment.LandManagement
224 } 229 }
225 else 230 else
226 { 231 {
227 return landList[landIDList[x / 4, y / 4]]; 232 return landList[landIDList[x/4, y/4]];
228 } 233 }
229 } 234 }
235
230 #endregion 236 #endregion
231 237
232 #region Parcel Modification 238 #region Parcel Modification
239
233 /// <summary> 240 /// <summary>
234 /// Subdivides a piece of land 241 /// Subdivides a piece of land
235 /// </summary> 242 /// </summary>
@@ -241,7 +248,6 @@ namespace OpenSim.Region.Environment.LandManagement
241 /// <returns>Returns true if successful</returns> 248 /// <returns>Returns true if successful</returns>
242 private bool subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) 249 private bool subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id)
243 { 250 {
244
245 //First, lets loop through the points and make sure they are all in the same peice of land 251 //First, lets loop through the points and make sure they are all in the same peice of land
246 //Get the land object at start 252 //Get the land object at start
247 Land startLandObject = getLandObject(start_x, start_y); 253 Land startLandObject = getLandObject(start_x, start_y);
@@ -284,21 +290,21 @@ namespace OpenSim.Region.Environment.LandManagement
284 290
285 //Now, lets set the subdivision area of the original to false 291 //Now, lets set the subdivision area of the original to false
286 int startLandObjectIndex = startLandObject.landData.localID; 292 int startLandObjectIndex = startLandObject.landData.localID;
287 landList[startLandObjectIndex].setLandBitmap(Land.modifyLandBitmapSquare(startLandObject.getLandBitmap(), start_x, start_y, end_x, end_y, false)); 293 landList[startLandObjectIndex].setLandBitmap(
294 Land.modifyLandBitmapSquare(startLandObject.getLandBitmap(), start_x, start_y, end_x, end_y, false));
288 landList[startLandObjectIndex].forceUpdateLandInfo(); 295 landList[startLandObjectIndex].forceUpdateLandInfo();
289 296
290 297
291 this.setPrimsTainted(); 298 setPrimsTainted();
292 299
293 //Now add the new land object 300 //Now add the new land object
294 Land result = addLandObject(newLand); 301 Land result = addLandObject(newLand);
295 result.sendLandUpdateToAvatarsOverMe(); 302 result.sendLandUpdateToAvatarsOverMe();
296 303
297 304
298
299
300 return true; 305 return true;
301 } 306 }
307
302 /// <summary> 308 /// <summary>
303 /// Join 2 land objects together 309 /// Join 2 land objects together
304 /// </summary> 310 /// </summary>
@@ -320,7 +326,7 @@ namespace OpenSim.Region.Environment.LandManagement
320 { 326 {
321 for (stepXSelected = start_x; stepXSelected <= end_x; stepXSelected += 4) 327 for (stepXSelected = start_x; stepXSelected <= end_x; stepXSelected += 4)
322 { 328 {
323 Land p = getLandObject(stepXSelected,stepYSelected); 329 Land p = getLandObject(stepXSelected, stepYSelected);
324 if (!selectedLandObjects.Contains(p)) 330 if (!selectedLandObjects.Contains(p))
325 { 331 {
326 selectedLandObjects.Add(p); 332 selectedLandObjects.Add(p);
@@ -330,7 +336,7 @@ namespace OpenSim.Region.Environment.LandManagement
330 Land masterLandObject = selectedLandObjects[0]; 336 Land masterLandObject = selectedLandObjects[0];
331 selectedLandObjects.RemoveAt(0); 337 selectedLandObjects.RemoveAt(0);
332 338
333 339
334 if (selectedLandObjects.Count < 1) 340 if (selectedLandObjects.Count < 1)
335 { 341 {
336 return false; //Only one piece of land selected 342 return false; //Only one piece of land selected
@@ -348,23 +354,23 @@ namespace OpenSim.Region.Environment.LandManagement
348 } 354 }
349 foreach (Land slaveLandObject in selectedLandObjects) 355 foreach (Land slaveLandObject in selectedLandObjects)
350 { 356 {
351 landList[masterLandObject.landData.localID].setLandBitmap(Land.mergeLandBitmaps(masterLandObject.getLandBitmap(), slaveLandObject.getLandBitmap())); 357 landList[masterLandObject.landData.localID].setLandBitmap(
358 Land.mergeLandBitmaps(masterLandObject.getLandBitmap(), slaveLandObject.getLandBitmap()));
352 performFinalLandJoin(masterLandObject, slaveLandObject); 359 performFinalLandJoin(masterLandObject, slaveLandObject);
353 } 360 }
354 361
355 362
356 this.setPrimsTainted(); 363 setPrimsTainted();
357 364
358 masterLandObject.sendLandUpdateToAvatarsOverMe(); 365 masterLandObject.sendLandUpdateToAvatarsOverMe();
359 366
360 return true; 367 return true;
361
362
363
364 } 368 }
369
365 #endregion 370 #endregion
366 371
367 #region Parcel Updating 372 #region Parcel Updating
373
368 /// <summary> 374 /// <summary>
369 /// Where we send the ParcelOverlay packet to the client 375 /// Where we send the ParcelOverlay packet to the client
370 /// </summary> 376 /// </summary>
@@ -382,15 +388,17 @@ namespace OpenSim.Region.Environment.LandManagement
382 { 388 {
383 for (x = 0; x < 64; x++) 389 for (x = 0; x < 64; x++)
384 { 390 {
385 byte tempByte = (byte)0; //This represents the byte for the current 4x4 391 byte tempByte = (byte) 0; //This represents the byte for the current 4x4
386 Land currentParcelBlock = getLandObject(x * 4, y * 4); 392 Land currentParcelBlock = getLandObject(x*4, y*4);
387 393
388 if (currentParcelBlock.landData.ownerID == remote_client.AgentId) 394 if (currentParcelBlock.landData.ownerID == remote_client.AgentId)
389 { 395 {
390 //Owner Flag 396 //Owner Flag
391 tempByte = Convert.ToByte(tempByte | LAND_TYPE_OWNED_BY_REQUESTER); 397 tempByte = Convert.ToByte(tempByte | LAND_TYPE_OWNED_BY_REQUESTER);
392 } 398 }
393 else if (currentParcelBlock.landData.salePrice > 0 && (currentParcelBlock.landData.authBuyerID == LLUUID.Zero || currentParcelBlock.landData.authBuyerID == remote_client.AgentId)) 399 else if (currentParcelBlock.landData.salePrice > 0 &&
400 (currentParcelBlock.landData.authBuyerID == LLUUID.Zero ||
401 currentParcelBlock.landData.authBuyerID == remote_client.AgentId))
394 { 402 {
395 //Sale Flag 403 //Sale Flag
396 tempByte = Convert.ToByte(tempByte | LAND_TYPE_IS_FOR_SALE); 404 tempByte = Convert.ToByte(tempByte | LAND_TYPE_IS_FOR_SALE);
@@ -412,7 +420,7 @@ namespace OpenSim.Region.Environment.LandManagement
412 { 420 {
413 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_WEST); 421 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_WEST);
414 } 422 }
415 else if (getLandObject((x - 1) * 4, y * 4) != currentParcelBlock) 423 else if (getLandObject((x - 1)*4, y*4) != currentParcelBlock)
416 { 424 {
417 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_WEST); 425 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_WEST);
418 } 426 }
@@ -421,7 +429,7 @@ namespace OpenSim.Region.Environment.LandManagement
421 { 429 {
422 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_SOUTH); 430 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_SOUTH);
423 } 431 }
424 else if (getLandObject(x * 4, (y - 1) * 4) != currentParcelBlock) 432 else if (getLandObject(x*4, (y - 1)*4) != currentParcelBlock)
425 { 433 {
426 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_SOUTH); 434 tempByte = Convert.ToByte(tempByte | LAND_FLAG_PROPERTY_BORDER_SOUTH);
427 } 435 }
@@ -434,17 +442,16 @@ namespace OpenSim.Region.Environment.LandManagement
434 packet = new ParcelOverlayPacket(); 442 packet = new ParcelOverlayPacket();
435 packet.ParcelData.Data = byteArray; 443 packet.ParcelData.Data = byteArray;
436 packet.ParcelData.SequenceID = sequenceID; 444 packet.ParcelData.SequenceID = sequenceID;
437 remote_client.OutPacket((Packet)packet); 445 remote_client.OutPacket((Packet) packet);
438 sequenceID++; 446 sequenceID++;
439 byteArray = new byte[LAND_BLOCKS_PER_PACKET]; 447 byteArray = new byte[LAND_BLOCKS_PER_PACKET];
440 } 448 }
441 } 449 }
442 } 450 }
443
444
445 } 451 }
446 452
447 public void handleParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client) 453 public void handleParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id,
454 bool snap_selection, IClientAPI remote_client)
448 { 455 {
449 //Get the land objects within the bounds 456 //Get the land objects within the bounds
450 List<Land> temp = new List<Land>(); 457 List<Land> temp = new List<Land>();
@@ -486,14 +493,15 @@ namespace OpenSim.Region.Environment.LandManagement
486 landList[packet.ParcelData.LocalID].updateLandProperties(packet, remote_client); 493 landList[packet.ParcelData.LocalID].updateLandProperties(packet, remote_client);
487 } 494 }
488 } 495 }
496
489 public void handleParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client) 497 public void handleParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client)
490 { 498 {
491 subdivide(west, south, east, north, remote_client.AgentId); 499 subdivide(west, south, east, north, remote_client.AgentId);
492 } 500 }
501
493 public void handleParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client) 502 public void handleParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client)
494 { 503 {
495 join(west, south, east, north, remote_client.AgentId); 504 join(west, south, east, north, remote_client.AgentId);
496
497 } 505 }
498 506
499 public void handleParcelSelectObjectsRequest(int local_id, int request_type, IClientAPI remote_client) 507 public void handleParcelSelectObjectsRequest(int local_id, int request_type, IClientAPI remote_client)
@@ -505,6 +513,7 @@ namespace OpenSim.Region.Environment.LandManagement
505 { 513 {
506 landList[local_id].sendLandObjectOwners(remote_client); 514 landList[local_id].sendLandObjectOwners(remote_client);
507 } 515 }
516
508 #endregion 517 #endregion
509 518
510 /// <summary> 519 /// <summary>
@@ -523,7 +532,6 @@ namespace OpenSim.Region.Environment.LandManagement
523 fullSimParcel.landData.ownerID = m_regInfo.MasterAvatarAssignedUUID; 532 fullSimParcel.landData.ownerID = m_regInfo.MasterAvatarAssignedUUID;
524 533
525 addLandObject(fullSimParcel); 534 addLandObject(fullSimParcel);
526
527 } 535 }
528 536
529 537
@@ -532,7 +540,7 @@ namespace OpenSim.Region.Environment.LandManagement
532 ScenePresence clientAvatar = m_scene.RequestAvatar(remote_client.AgentId); 540 ScenePresence clientAvatar = m_scene.RequestAvatar(remote_client.AgentId);
533 if (clientAvatar != null) 541 if (clientAvatar != null)
534 { 542 {
535 Land over = getLandObject(clientAvatar.AbsolutePosition.X,clientAvatar.AbsolutePosition.Y); 543 Land over = getLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y);
536 if (over != null) 544 if (over != null)
537 { 545 {
538 over.sendLandProperties(0, false, 0, remote_client); 546 over.sendLandProperties(0, false, 0, remote_client);
@@ -547,9 +555,10 @@ namespace OpenSim.Region.Environment.LandManagement
547 p.resetLandPrimCounts(); 555 p.resetLandPrimCounts();
548 } 556 }
549 } 557 }
558
550 public void setPrimsTainted() 559 public void setPrimsTainted()
551 { 560 {
552 this.landPrimCountTainted = true; 561 landPrimCountTainted = true;
553 } 562 }
554 563
555 public void addPrimToLandPrimCounts(SceneObjectGroup obj) 564 public void addPrimToLandPrimCounts(SceneObjectGroup obj)
@@ -573,14 +582,14 @@ namespace OpenSim.Region.Environment.LandManagement
573 public void finalizeLandPrimCountUpdate() 582 public void finalizeLandPrimCountUpdate()
574 { 583 {
575 //Get Simwide prim count for owner 584 //Get Simwide prim count for owner
576 Dictionary<LLUUID, List<Land>> landOwnersAndParcels = new Dictionary<LLUUID,List<Land>>(); 585 Dictionary<LLUUID, List<Land>> landOwnersAndParcels = new Dictionary<LLUUID, List<Land>>();
577 foreach (Land p in landList.Values) 586 foreach (Land p in landList.Values)
578 { 587 {
579 if(!landOwnersAndParcels.ContainsKey(p.landData.ownerID)) 588 if (!landOwnersAndParcels.ContainsKey(p.landData.ownerID))
580 { 589 {
581 List<Land> tempList = new List<Land>(); 590 List<Land> tempList = new List<Land>();
582 tempList.Add(p); 591 tempList.Add(p);
583 landOwnersAndParcels.Add(p.landData.ownerID,tempList); 592 landOwnersAndParcels.Add(p.landData.ownerID, tempList);
584 } 593 }
585 else 594 else
586 { 595 {
@@ -595,7 +604,8 @@ namespace OpenSim.Region.Environment.LandManagement
595 foreach (Land p in landOwnersAndParcels[owner]) 604 foreach (Land p in landOwnersAndParcels[owner])
596 { 605 {
597 simArea += p.landData.area; 606 simArea += p.landData.area;
598 simPrims += p.landData.ownerPrims + p.landData.otherPrims + p.landData.groupPrims + p.landData.selectedPrims; 607 simPrims += p.landData.ownerPrims + p.landData.otherPrims + p.landData.groupPrims +
608 p.landData.selectedPrims;
599 } 609 }
600 610
601 foreach (Land p in landOwnersAndParcels[owner]) 611 foreach (Land p in landOwnersAndParcels[owner])
@@ -604,14 +614,10 @@ namespace OpenSim.Region.Environment.LandManagement
604 p.landData.simwidePrims = simPrims; 614 p.landData.simwidePrims = simPrims;
605 } 615 }
606 } 616 }
607
608 } 617 }
618
609 #endregion 619 #endregion
610 } 620 }
611 #endregion
612
613
614
615 621
616 622 #endregion
617} 623} \ No newline at end of file