diff options
Diffstat (limited to 'OpenSim/Region/Environment/LandManagement/LandManager.cs')
-rw-r--r-- | OpenSim/Region/Environment/LandManagement/LandManager.cs | 122 |
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; | |||
36 | namespace OpenSim.Region.Environment.LandManagement | 36 | namespace 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 |