aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs252
1 files changed, 128 insertions, 124 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index fdff61e..d2b5cb1 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -47,9 +47,9 @@ namespace OpenSim.Region.CoreModules.World.Land
47{ 47{
48 // used for caching 48 // used for caching
49 internal class ExtendedLandData { 49 internal class ExtendedLandData {
50 public LandData landData; 50 public LandData LandData;
51 public ulong regionHandle; 51 public ulong RegionHandle;
52 public uint x, y; 52 public uint X, Y;
53 } 53 }
54 54
55 public class LandManagementModule : INonSharedRegionModule 55 public class LandManagementModule : INonSharedRegionModule
@@ -191,7 +191,7 @@ namespace OpenSim.Region.CoreModules.World.Land
191 { 191 {
192 if (m_landList.ContainsKey(local_id)) 192 if (m_landList.ContainsKey(local_id))
193 { 193 {
194 m_landList[local_id].landData = newData; 194 m_landList[local_id].LandData = newData;
195 m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, m_landList[local_id]); 195 m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, m_landList[local_id]);
196 } 196 }
197 } 197 }
@@ -218,12 +218,12 @@ namespace OpenSim.Region.CoreModules.World.Land
218 218
219 ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); 219 ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
220 220
221 fullSimParcel.setLandBitmap(fullSimParcel.getSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); 221 fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
222 if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) 222 if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero)
223 fullSimParcel.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; 223 fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
224 else 224 else
225 fullSimParcel.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; 225 fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
226 fullSimParcel.landData.ClaimDate = Util.UnixTimeSinceEpoch(); 226 fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch();
227 AddLandObject(fullSimParcel); 227 AddLandObject(fullSimParcel);
228 } 228 }
229 229
@@ -289,11 +289,11 @@ namespace OpenSim.Region.CoreModules.World.Land
289 { 289 {
290 if (avatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT) 290 if (avatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT)
291 { 291 {
292 if (parcelAvatarIsEntering.isBannedFromLand(avatar.UUID)) 292 if (parcelAvatarIsEntering.IsBannedFromLand(avatar.UUID))
293 { 293 {
294 SendYouAreBannedNotice(avatar); 294 SendYouAreBannedNotice(avatar);
295 } 295 }
296 else if (parcelAvatarIsEntering.isRestrictedFromLand(avatar.UUID)) 296 else if (parcelAvatarIsEntering.IsRestrictedFromLand(avatar.UUID))
297 { 297 {
298 avatar.ControllingClient.SendAlertMessage( 298 avatar.ControllingClient.SendAlertMessage(
299 "You are not allowed on this parcel because the land owner has restricted access. For now, you can enter, but please respect the land owner's decisions (or he can ban you!)."); 299 "You are not allowed on this parcel because the land owner has restricted access. For now, you can enter, but please respect the land owner's decisions (or he can ban you!).");
@@ -321,14 +321,14 @@ namespace OpenSim.Region.CoreModules.World.Land
321 List<ILandObject> checkLandParcels = ParcelsNearPoint(presence.AbsolutePosition); 321 List<ILandObject> checkLandParcels = ParcelsNearPoint(presence.AbsolutePosition);
322 foreach (ILandObject checkBan in checkLandParcels) 322 foreach (ILandObject checkBan in checkLandParcels)
323 { 323 {
324 if (checkBan.isBannedFromLand(avatar.AgentId)) 324 if (checkBan.IsBannedFromLand(avatar.AgentId))
325 { 325 {
326 checkBan.sendLandProperties((int)ParcelPropertiesStatus.CollisionBanned, false, (int)ParcelResult.Single, avatar); 326 checkBan.SendLandProperties((int)ParcelPropertiesStatus.CollisionBanned, false, (int)ParcelResult.Single, avatar);
327 return; //Only send one 327 return; //Only send one
328 } 328 }
329 if (checkBan.isRestrictedFromLand(avatar.AgentId)) 329 if (checkBan.IsRestrictedFromLand(avatar.AgentId))
330 { 330 {
331 checkBan.sendLandProperties((int)ParcelPropertiesStatus.CollisionNotOnAccessList, false, (int)ParcelResult.Single, avatar); 331 checkBan.SendLandProperties((int)ParcelPropertiesStatus.CollisionNotOnAccessList, false, (int)ParcelResult.Single, avatar);
332 return; //Only send one 332 return; //Only send one
333 } 333 }
334 } 334 }
@@ -348,19 +348,19 @@ namespace OpenSim.Region.CoreModules.World.Land
348 { 348 {
349 if (!avatar.IsChildAgent) 349 if (!avatar.IsChildAgent)
350 { 350 {
351 over.sendLandUpdateToClient(avatar.ControllingClient); 351 over.SendLandUpdateToClient(avatar.ControllingClient);
352 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.LocalID, 352 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.LandData.LocalID,
353 m_scene.RegionInfo.RegionID); 353 m_scene.RegionInfo.RegionID);
354 } 354 }
355 } 355 }
356 356
357 if (avatar.currentParcelUUID != over.landData.GlobalID) 357 if (avatar.currentParcelUUID != over.LandData.GlobalID)
358 { 358 {
359 if (!avatar.IsChildAgent) 359 if (!avatar.IsChildAgent)
360 { 360 {
361 over.sendLandUpdateToClient(avatar.ControllingClient); 361 over.SendLandUpdateToClient(avatar.ControllingClient);
362 avatar.currentParcelUUID = over.landData.GlobalID; 362 avatar.currentParcelUUID = over.LandData.GlobalID;
363 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.LocalID, 363 m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.LandData.LocalID,
364 m_scene.RegionInfo.RegionID); 364 m_scene.RegionInfo.RegionID);
365 } 365 }
366 } 366 }
@@ -386,16 +386,16 @@ namespace OpenSim.Region.CoreModules.World.Land
386 if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && 386 if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT &&
387 clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) 387 clientAvatar.sentMessageAboutRestrictedParcelFlyingDown)
388 { 388 {
389 EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.landData.LocalID, 389 EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID,
390 m_scene.RegionInfo.RegionID); 390 m_scene.RegionInfo.RegionID);
391 //They are going under the safety line! 391 //They are going under the safety line!
392 if (!parcel.isBannedFromLand(clientAvatar.UUID)) 392 if (!parcel.IsBannedFromLand(clientAvatar.UUID))
393 { 393 {
394 clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false; 394 clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false;
395 } 395 }
396 } 396 }
397 else if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && 397 else if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT &&
398 parcel.isBannedFromLand(clientAvatar.UUID)) 398 parcel.IsBannedFromLand(clientAvatar.UUID))
399 { 399 {
400 SendYouAreBannedNotice(clientAvatar); 400 SendYouAreBannedNotice(clientAvatar);
401 } 401 }
@@ -409,7 +409,7 @@ namespace OpenSim.Region.CoreModules.World.Land
409 ILandObject over = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); 409 ILandObject over = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
410 if (over != null) 410 if (over != null)
411 { 411 {
412 if (!over.isBannedFromLand(avatar.UUID) || avatar.AbsolutePosition.Z >= LandChannel.BAN_LINE_SAFETY_HIEGHT) 412 if (!over.IsBannedFromLand(avatar.UUID) || avatar.AbsolutePosition.Z >= LandChannel.BAN_LINE_SAFETY_HIEGHT)
413 { 413 {
414 avatar.lastKnownAllowedPosition = 414 avatar.lastKnownAllowedPosition =
415 new Vector3(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z); 415 new Vector3(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z);
@@ -429,7 +429,7 @@ namespace OpenSim.Region.CoreModules.World.Land
429 429
430 if (land != null) 430 if (land != null)
431 { 431 {
432 m_landList[landLocalID].sendAccessList(agentID, sessionID, flags, sequenceID, remote_client); 432 m_landList[landLocalID].SendAccessList(agentID, sessionID, flags, sequenceID, remote_client);
433 } 433 }
434 } 434 }
435 435
@@ -445,9 +445,9 @@ namespace OpenSim.Region.CoreModules.World.Land
445 445
446 if (land != null) 446 if (land != null)
447 { 447 {
448 if (agentID == land.landData.OwnerID) 448 if (agentID == land.LandData.OwnerID)
449 { 449 {
450 land.updateAccessList(flags, entries, remote_client); 450 land.UpdateAccessList(flags, entries, remote_client);
451 } 451 }
452 } 452 }
453 else 453 else
@@ -476,9 +476,9 @@ namespace OpenSim.Region.CoreModules.World.Land
476 lock (m_landList) 476 lock (m_landList)
477 { 477 {
478 int newLandLocalID = ++m_lastLandLocalID; 478 int newLandLocalID = ++m_lastLandLocalID;
479 new_land.landData.LocalID = newLandLocalID; 479 new_land.LandData.LocalID = newLandLocalID;
480 480
481 bool[,] landBitmap = new_land.getLandBitmap(); 481 bool[,] landBitmap = new_land.GetLandBitmap();
482 for (int x = 0; x < landArrayMax; x++) 482 for (int x = 0; x < landArrayMax; x++)
483 { 483 {
484 for (int y = 0; y < landArrayMax; y++) 484 for (int y = 0; y < landArrayMax; y++)
@@ -493,7 +493,7 @@ namespace OpenSim.Region.CoreModules.World.Land
493 m_landList.Add(newLandLocalID, new_land); 493 m_landList.Add(newLandLocalID, new_land);
494 } 494 }
495 495
496 new_land.forceUpdateLandInfo(); 496 new_land.ForceUpdateLandInfo();
497 m_scene.EventManager.TriggerLandObjectAdded(new_land); 497 m_scene.EventManager.TriggerLandObjectAdded(new_land);
498 return new_land; 498 return new_land;
499 } 499 }
@@ -520,14 +520,14 @@ namespace OpenSim.Region.CoreModules.World.Land
520 } 520 }
521 } 521 }
522 522
523 m_scene.EventManager.TriggerLandObjectRemoved(m_landList[local_id].landData.GlobalID); 523 m_scene.EventManager.TriggerLandObjectRemoved(m_landList[local_id].LandData.GlobalID);
524 m_landList.Remove(local_id); 524 m_landList.Remove(local_id);
525 } 525 }
526 } 526 }
527 527
528 private void performFinalLandJoin(ILandObject master, ILandObject slave) 528 private void performFinalLandJoin(ILandObject master, ILandObject slave)
529 { 529 {
530 bool[,] landBitmapSlave = slave.getLandBitmap(); 530 bool[,] landBitmapSlave = slave.GetLandBitmap();
531 lock (m_landList) 531 lock (m_landList)
532 { 532 {
533 for (int x = 0; x < 64; x++) 533 for (int x = 0; x < 64; x++)
@@ -536,14 +536,14 @@ namespace OpenSim.Region.CoreModules.World.Land
536 { 536 {
537 if (landBitmapSlave[x, y]) 537 if (landBitmapSlave[x, y])
538 { 538 {
539 m_landIDList[x, y] = master.landData.LocalID; 539 m_landIDList[x, y] = master.LandData.LocalID;
540 } 540 }
541 } 541 }
542 } 542 }
543 } 543 }
544 544
545 removeLandObject(slave.landData.LocalID); 545 removeLandObject(slave.LandData.LocalID);
546 UpdateLandObject(master.landData.LocalID, master.landData); 546 UpdateLandObject(master.LandData.LocalID, master.LandData);
547 } 547 }
548 548
549 public ILandObject GetLandObject(int parcelLocalID) 549 public ILandObject GetLandObject(int parcelLocalID)
@@ -630,7 +630,7 @@ namespace OpenSim.Region.CoreModules.World.Land
630 { 630 {
631 foreach (LandObject p in m_landList.Values) 631 foreach (LandObject p in m_landList.Values)
632 { 632 {
633 p.resetLandPrimCounts(); 633 p.ResetLandPrimCounts();
634 } 634 }
635 } 635 }
636 } 636 }
@@ -651,7 +651,7 @@ namespace OpenSim.Region.CoreModules.World.Land
651 ILandObject landUnderPrim = GetLandObject(position.X, position.Y); 651 ILandObject landUnderPrim = GetLandObject(position.X, position.Y);
652 if (landUnderPrim != null) 652 if (landUnderPrim != null)
653 { 653 {
654 landUnderPrim.addPrimToCount(obj); 654 landUnderPrim.AddPrimToCount(obj);
655 } 655 }
656 } 656 }
657 657
@@ -662,7 +662,7 @@ namespace OpenSim.Region.CoreModules.World.Land
662 { 662 {
663 foreach (LandObject p in m_landList.Values) 663 foreach (LandObject p in m_landList.Values)
664 { 664 {
665 p.removePrimFromCount(obj); 665 p.RemovePrimFromCount(obj);
666 } 666 }
667 } 667 }
668 } 668 }
@@ -675,15 +675,15 @@ namespace OpenSim.Region.CoreModules.World.Land
675 { 675 {
676 foreach (LandObject p in m_landList.Values) 676 foreach (LandObject p in m_landList.Values)
677 { 677 {
678 if (!landOwnersAndParcels.ContainsKey(p.landData.OwnerID)) 678 if (!landOwnersAndParcels.ContainsKey(p.LandData.OwnerID))
679 { 679 {
680 List<LandObject> tempList = new List<LandObject>(); 680 List<LandObject> tempList = new List<LandObject>();
681 tempList.Add(p); 681 tempList.Add(p);
682 landOwnersAndParcels.Add(p.landData.OwnerID, tempList); 682 landOwnersAndParcels.Add(p.LandData.OwnerID, tempList);
683 } 683 }
684 else 684 else
685 { 685 {
686 landOwnersAndParcels[p.landData.OwnerID].Add(p); 686 landOwnersAndParcels[p.LandData.OwnerID].Add(p);
687 } 687 }
688 } 688 }
689 } 689 }
@@ -694,15 +694,15 @@ namespace OpenSim.Region.CoreModules.World.Land
694 int simPrims = 0; 694 int simPrims = 0;
695 foreach (LandObject p in landOwnersAndParcels[owner]) 695 foreach (LandObject p in landOwnersAndParcels[owner])
696 { 696 {
697 simArea += p.landData.Area; 697 simArea += p.LandData.Area;
698 simPrims += p.landData.OwnerPrims + p.landData.OtherPrims + p.landData.GroupPrims + 698 simPrims += p.LandData.OwnerPrims + p.LandData.OtherPrims + p.LandData.GroupPrims +
699 p.landData.SelectedPrims; 699 p.LandData.SelectedPrims;
700 } 700 }
701 701
702 foreach (LandObject p in landOwnersAndParcels[owner]) 702 foreach (LandObject p in landOwnersAndParcels[owner])
703 { 703 {
704 p.landData.SimwideArea = simArea; 704 p.LandData.SimwideArea = simArea;
705 p.landData.SimwidePrims = simPrims; 705 p.LandData.SimwidePrims = simPrims;
706 } 706 }
707 } 707 }
708 } 708 }
@@ -779,26 +779,26 @@ namespace OpenSim.Region.CoreModules.World.Land
779 779
780 //Lets create a new land object with bitmap activated at that point (keeping the old land objects info) 780 //Lets create a new land object with bitmap activated at that point (keeping the old land objects info)
781 ILandObject newLand = startLandObject.Copy(); 781 ILandObject newLand = startLandObject.Copy();
782 newLand.landData.Name = newLand.landData.Name; 782 newLand.LandData.Name = newLand.LandData.Name;
783 newLand.landData.GlobalID = UUID.Random(); 783 newLand.LandData.GlobalID = UUID.Random();
784 784
785 newLand.setLandBitmap(newLand.getSquareLandBitmap(start_x, start_y, end_x, end_y)); 785 newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y));
786 786
787 //Now, lets set the subdivision area of the original to false 787 //Now, lets set the subdivision area of the original to false
788 int startLandObjectIndex = startLandObject.landData.LocalID; 788 int startLandObjectIndex = startLandObject.LandData.LocalID;
789 lock (m_landList) 789 lock (m_landList)
790 { 790 {
791 m_landList[startLandObjectIndex].setLandBitmap( 791 m_landList[startLandObjectIndex].SetLandBitmap(
792 newLand.modifyLandBitmapSquare(startLandObject.getLandBitmap(), start_x, start_y, end_x, end_y, false)); 792 newLand.ModifyLandBitmapSquare(startLandObject.GetLandBitmap(), start_x, start_y, end_x, end_y, false));
793 m_landList[startLandObjectIndex].forceUpdateLandInfo(); 793 m_landList[startLandObjectIndex].ForceUpdateLandInfo();
794 } 794 }
795 795
796 EventManagerOnParcelPrimCountTainted(); 796 EventManagerOnParcelPrimCountTainted();
797 797
798 //Now add the new land object 798 //Now add the new land object
799 ILandObject result = AddLandObject(newLand); 799 ILandObject result = AddLandObject(newLand);
800 UpdateLandObject(startLandObject.landData.LocalID, startLandObject.landData); 800 UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData);
801 result.sendLandUpdateToAvatarsOverMe(); 801 result.SendLandUpdateToAvatarsOverMe();
802 } 802 }
803 803
804 /// <summary> 804 /// <summary>
@@ -846,7 +846,7 @@ namespace OpenSim.Region.CoreModules.World.Land
846 } 846 }
847 foreach (ILandObject p in selectedLandObjects) 847 foreach (ILandObject p in selectedLandObjects)
848 { 848 {
849 if (p.landData.OwnerID != masterLandObject.landData.OwnerID) 849 if (p.LandData.OwnerID != masterLandObject.LandData.OwnerID)
850 { 850 {
851 return; 851 return;
852 } 852 }
@@ -856,14 +856,14 @@ namespace OpenSim.Region.CoreModules.World.Land
856 { 856 {
857 foreach (ILandObject slaveLandObject in selectedLandObjects) 857 foreach (ILandObject slaveLandObject in selectedLandObjects)
858 { 858 {
859 m_landList[masterLandObject.landData.LocalID].setLandBitmap( 859 m_landList[masterLandObject.LandData.LocalID].SetLandBitmap(
860 slaveLandObject.mergeLandBitmaps(masterLandObject.getLandBitmap(), slaveLandObject.getLandBitmap())); 860 slaveLandObject.MergeLandBitmaps(masterLandObject.GetLandBitmap(), slaveLandObject.GetLandBitmap()));
861 performFinalLandJoin(masterLandObject, slaveLandObject); 861 performFinalLandJoin(masterLandObject, slaveLandObject);
862 } 862 }
863 } 863 }
864 EventManagerOnParcelPrimCountTainted(); 864 EventManagerOnParcelPrimCountTainted();
865 865
866 masterLandObject.sendLandUpdateToAvatarsOverMe(); 866 masterLandObject.SendLandUpdateToAvatarsOverMe();
867 } 867 }
868 868
869 #endregion 869 #endregion
@@ -894,19 +894,19 @@ namespace OpenSim.Region.CoreModules.World.Land
894 894
895 if (currentParcelBlock != null) 895 if (currentParcelBlock != null)
896 { 896 {
897 if (currentParcelBlock.landData.OwnerID == remote_client.AgentId) 897 if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId)
898 { 898 {
899 //Owner Flag 899 //Owner Flag
900 tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER); 900 tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER);
901 } 901 }
902 else if (currentParcelBlock.landData.SalePrice > 0 && 902 else if (currentParcelBlock.LandData.SalePrice > 0 &&
903 (currentParcelBlock.landData.AuthBuyerID == UUID.Zero || 903 (currentParcelBlock.LandData.AuthBuyerID == UUID.Zero ||
904 currentParcelBlock.landData.AuthBuyerID == remote_client.AgentId)) 904 currentParcelBlock.LandData.AuthBuyerID == remote_client.AgentId))
905 { 905 {
906 //Sale Flag 906 //Sale Flag
907 tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE); 907 tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE);
908 } 908 }
909 else if (currentParcelBlock.landData.OwnerID == UUID.Zero) 909 else if (currentParcelBlock.LandData.OwnerID == UUID.Zero)
910 { 910 {
911 //Public Flag 911 //Public Flag
912 tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC); 912 tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC);
@@ -980,7 +980,7 @@ namespace OpenSim.Region.CoreModules.World.Land
980 { 980 {
981 if (!temp.Contains(currentParcel)) 981 if (!temp.Contains(currentParcel))
982 { 982 {
983 currentParcel.forceUpdateLandInfo(); 983 currentParcel.ForceUpdateLandInfo();
984 temp.Add(currentParcel); 984 temp.Add(currentParcel);
985 } 985 }
986 } 986 }
@@ -996,7 +996,7 @@ namespace OpenSim.Region.CoreModules.World.Land
996 996
997 for (int i = 0; i < temp.Count; i++) 997 for (int i = 0; i < temp.Count; i++)
998 { 998 {
999 temp[i].sendLandProperties(sequence_id, snap_selection, requestResult, remote_client); 999 temp[i].SendLandProperties(sequence_id, snap_selection, requestResult, remote_client);
1000 } 1000 }
1001 1001
1002 SendParcelOverlay(remote_client); 1002 SendParcelOverlay(remote_client);
@@ -1010,7 +1010,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1010 m_landList.TryGetValue(localID, out land); 1010 m_landList.TryGetValue(localID, out land);
1011 } 1011 }
1012 1012
1013 if (land != null) land.updateLandProperties(args, remote_client); 1013 if (land != null) land.UpdateLandProperties(args, remote_client);
1014 } 1014 }
1015 1015
1016 public void ClientOnParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client) 1016 public void ClientOnParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client)
@@ -1026,7 +1026,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1026 public void ClientOnParcelSelectObjects(int local_id, int request_type, 1026 public void ClientOnParcelSelectObjects(int local_id, int request_type,
1027 List<UUID> returnIDs, IClientAPI remote_client) 1027 List<UUID> returnIDs, IClientAPI remote_client)
1028 { 1028 {
1029 m_landList[local_id].sendForceObjectSelect(local_id, request_type, returnIDs, remote_client); 1029 m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client);
1030 } 1030 }
1031 1031
1032 public void ClientOnParcelObjectOwnerRequest(int local_id, IClientAPI remote_client) 1032 public void ClientOnParcelObjectOwnerRequest(int local_id, IClientAPI remote_client)
@@ -1039,7 +1039,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1039 1039
1040 if (land != null) 1040 if (land != null)
1041 { 1041 {
1042 m_landList[local_id].sendLandObjectOwners(remote_client); 1042 m_landList[local_id].SendLandObjectOwners(remote_client);
1043 } 1043 }
1044 else 1044 else
1045 { 1045 {
@@ -1059,10 +1059,10 @@ namespace OpenSim.Region.CoreModules.World.Land
1059 { 1059 {
1060 if (m_scene.Permissions.IsGod(remote_client.AgentId)) 1060 if (m_scene.Permissions.IsGod(remote_client.AgentId))
1061 { 1061 {
1062 land.landData.OwnerID = ownerID; 1062 land.LandData.OwnerID = ownerID;
1063 1063
1064 m_scene.Broadcast(SendParcelOverlay); 1064 m_scene.Broadcast(SendParcelOverlay);
1065 land.sendLandUpdateToClient(remote_client); 1065 land.SendLandUpdateToClient(remote_client);
1066 } 1066 }
1067 } 1067 }
1068 } 1068 }
@@ -1080,11 +1080,11 @@ namespace OpenSim.Region.CoreModules.World.Land
1080 if (m_scene.Permissions.CanAbandonParcel(remote_client.AgentId, land)) 1080 if (m_scene.Permissions.CanAbandonParcel(remote_client.AgentId, land))
1081 { 1081 {
1082 if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) 1082 if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero)
1083 land.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; 1083 land.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
1084 else 1084 else
1085 land.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; 1085 land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
1086 m_scene.Broadcast(SendParcelOverlay); 1086 m_scene.Broadcast(SendParcelOverlay);
1087 land.sendLandUpdateToClient(remote_client); 1087 land.SendLandUpdateToClient(remote_client);
1088 } 1088 }
1089 } 1089 }
1090 } 1090 }
@@ -1102,13 +1102,13 @@ namespace OpenSim.Region.CoreModules.World.Land
1102 if (m_scene.Permissions.CanReclaimParcel(remote_client.AgentId, land)) 1102 if (m_scene.Permissions.CanReclaimParcel(remote_client.AgentId, land))
1103 { 1103 {
1104 if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) 1104 if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero)
1105 land.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; 1105 land.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
1106 else 1106 else
1107 land.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; 1107 land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
1108 land.landData.ClaimDate = Util.UnixTimeSinceEpoch(); 1108 land.LandData.ClaimDate = Util.UnixTimeSinceEpoch();
1109 land.landData.IsGroupOwned = false; 1109 land.LandData.IsGroupOwned = false;
1110 m_scene.Broadcast(SendParcelOverlay); 1110 m_scene.Broadcast(SendParcelOverlay);
1111 land.sendLandUpdateToClient(remote_client); 1111 land.SendLandUpdateToClient(remote_client);
1112 } 1112 }
1113 } 1113 }
1114 } 1114 }
@@ -1130,7 +1130,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1130 1130
1131 if (land != null) 1131 if (land != null)
1132 { 1132 {
1133 land.updateLandSold(e.agentId, e.groupId, e.groupOwned, (uint)e.transactionID, e.parcelPrice, e.parcelArea); 1133 land.UpdateLandSold(e.agentId, e.groupId, e.groupOwned, (uint)e.transactionID, e.parcelPrice, e.parcelArea);
1134 } 1134 }
1135 } 1135 }
1136 } 1136 }
@@ -1151,11 +1151,11 @@ namespace OpenSim.Region.CoreModules.World.Land
1151 1151
1152 if (lob != null) 1152 if (lob != null)
1153 { 1153 {
1154 UUID AuthorizedID = lob.landData.AuthBuyerID; 1154 UUID AuthorizedID = lob.LandData.AuthBuyerID;
1155 int saleprice = lob.landData.SalePrice; 1155 int saleprice = lob.LandData.SalePrice;
1156 UUID pOwnerID = lob.landData.OwnerID; 1156 UUID pOwnerID = lob.LandData.OwnerID;
1157 1157
1158 bool landforsale = ((lob.landData.Flags & 1158 bool landforsale = ((lob.LandData.Flags &
1159 (uint)(ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects)) != 0); 1159 (uint)(ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects)) != 0);
1160 if ((AuthorizedID == UUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale) 1160 if ((AuthorizedID == UUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale)
1161 { 1161 {
@@ -1184,7 +1184,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1184 1184
1185 if (land != null) 1185 if (land != null)
1186 { 1186 {
1187 land.deedToGroup(groupID); 1187 land.DeedToGroup(groupID);
1188 } 1188 }
1189 1189
1190 } 1190 }
@@ -1203,8 +1203,8 @@ namespace OpenSim.Region.CoreModules.World.Land
1203 public void IncomingLandObjectFromStorage(LandData data) 1203 public void IncomingLandObjectFromStorage(LandData data)
1204 { 1204 {
1205 ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene); 1205 ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene);
1206 new_land.landData = data.Copy(); 1206 new_land.LandData = data.Copy();
1207 new_land.setLandBitmapFromByteArray(); 1207 new_land.SetLandBitmapFromByteArray();
1208 AddLandObject(new_land); 1208 AddLandObject(new_land);
1209 } 1209 }
1210 1210
@@ -1218,7 +1218,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1218 1218
1219 if (selectedParcel == null) return; 1219 if (selectedParcel == null) return;
1220 1220
1221 selectedParcel.returnLandObjects(returnType, agentIDs, taskIDs, remoteClient); 1221 selectedParcel.ReturnLandObjects(returnType, agentIDs, taskIDs, remoteClient);
1222 } 1222 }
1223 1223
1224 public void EventManagerOnNoLandDataFromStorage() 1224 public void EventManagerOnNoLandDataFromStorage()
@@ -1234,7 +1234,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1234 { 1234 {
1235 foreach (LandObject obj in m_landList.Values) 1235 foreach (LandObject obj in m_landList.Values)
1236 { 1236 {
1237 obj.setParcelObjectMaxOverride(overrideDel); 1237 obj.SetParcelObjectMaxOverride(overrideDel);
1238 } 1238 }
1239 } 1239 }
1240 } 1240 }
@@ -1337,7 +1337,7 @@ namespace OpenSim.Region.CoreModules.World.Land
1337 return; 1337 return;
1338 } 1338 }
1339 1339
1340 remoteClient.SendParcelDwellReply(localID, selectedParcel.landData.GlobalID, selectedParcel.landData.Dwell); 1340 remoteClient.SendParcelDwellReply(localID, selectedParcel.LandData.GlobalID, selectedParcel.LandData.Dwell);
1341 } 1341 }
1342 1342
1343 private void ClientOnParcelInfoRequest(IClientAPI remoteClient, UUID parcelID) 1343 private void ClientOnParcelInfoRequest(IClientAPI remoteClient, UUID parcelID)
@@ -1345,39 +1345,43 @@ namespace OpenSim.Region.CoreModules.World.Land
1345 if (parcelID == UUID.Zero) 1345 if (parcelID == UUID.Zero)
1346 return; 1346 return;
1347 1347
1348 ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), delegate(string id) { 1348 ExtendedLandData data =
1349 UUID parcel = UUID.Zero; 1349 (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(),
1350 UUID.TryParse(id, out parcel); 1350 delegate(string id)
1351 // assume we've got the parcelID we just computed in RemoteParcelRequest 1351 {
1352 ExtendedLandData extLandData = new ExtendedLandData(); 1352 UUID parcel = UUID.Zero;
1353 Util.ParseFakeParcelID(parcel, out extLandData.regionHandle, out extLandData.x, out extLandData.y); 1353 UUID.TryParse(id, out parcel);
1354 m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", 1354 // assume we've got the parcelID we just computed in RemoteParcelRequest
1355 extLandData.regionHandle, extLandData.x, extLandData.y); 1355 ExtendedLandData extLandData = new ExtendedLandData();
1356 1356 Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle,
1357 // for this region or for somewhere else? 1357 out extLandData.X, out extLandData.Y);
1358 if (extLandData.regionHandle == m_scene.RegionInfo.RegionHandle) 1358 m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}",
1359 { 1359 extLandData.RegionHandle, extLandData.X, extLandData.Y);
1360 extLandData.landData = this.GetLandObject(extLandData.x, extLandData.y).landData; 1360
1361 } 1361 // for this region or for somewhere else?
1362 else 1362 if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle)
1363 { 1363 {
1364 ILandService landService = m_scene.RequestModuleInterface<ILandService>(); 1364 extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData;
1365 extLandData.landData = landService.GetLandData(extLandData.regionHandle, 1365 }
1366 extLandData.x, 1366 else
1367 extLandData.y); 1367 {
1368 if (extLandData.landData == null) 1368 ILandService landService = m_scene.RequestModuleInterface<ILandService>();
1369 { 1369 extLandData.LandData = landService.GetLandData(extLandData.RegionHandle,
1370 // we didn't find the region/land => don't cache 1370 extLandData.X,
1371 return null; 1371 extLandData.Y);
1372 } 1372 if (extLandData.LandData == null)
1373 } 1373 {
1374 return extLandData; 1374 // we didn't find the region/land => don't cache
1375 }); 1375 return null;
1376 }
1377 }
1378 return extLandData;
1379 });
1376 1380
1377 if (data != null) // if we found some data, send it 1381 if (data != null) // if we found some data, send it
1378 { 1382 {
1379 GridRegion info; 1383 GridRegion info;
1380 if (data.regionHandle == m_scene.RegionInfo.RegionHandle) 1384 if (data.RegionHandle == m_scene.RegionInfo.RegionHandle)
1381 { 1385 {
1382 info = new GridRegion(m_scene.RegionInfo); 1386 info = new GridRegion(m_scene.RegionInfo);
1383 } 1387 }
@@ -1385,18 +1389,18 @@ namespace OpenSim.Region.CoreModules.World.Land
1385 { 1389 {
1386 // most likely still cached from building the extLandData entry 1390 // most likely still cached from building the extLandData entry
1387 uint x = 0, y = 0; 1391 uint x = 0, y = 0;
1388 Utils.LongToUInts(data.regionHandle, out x, out y); 1392 Utils.LongToUInts(data.RegionHandle, out x, out y);
1389 info = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); 1393 info = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y);
1390 } 1394 }
1391 // we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark. 1395 // we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark.
1392 m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...", 1396 m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...",
1393 data.landData.Name, data.regionHandle); 1397 data.LandData.Name, data.RegionHandle);
1394 // HACK for now 1398 // HACK for now
1395 RegionInfo r = new RegionInfo(); 1399 RegionInfo r = new RegionInfo();
1396 r.RegionName = info.RegionName; 1400 r.RegionName = info.RegionName;
1397 r.RegionLocX = (uint)info.RegionLocX; 1401 r.RegionLocX = (uint)info.RegionLocX;
1398 r.RegionLocY = (uint)info.RegionLocY; 1402 r.RegionLocY = (uint)info.RegionLocY;
1399 remoteClient.SendParcelInfo(r, data.landData, parcelID, data.x, data.y); 1403 remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y);
1400 } 1404 }
1401 else 1405 else
1402 m_log.Debug("[LAND] got no parcelinfo; not sending"); 1406 m_log.Debug("[LAND] got no parcelinfo; not sending");
@@ -1415,9 +1419,9 @@ namespace OpenSim.Region.CoreModules.World.Land
1415 if (!m_scene.Permissions.CanEditParcel(remoteClient.AgentId, land)) 1419 if (!m_scene.Permissions.CanEditParcel(remoteClient.AgentId, land))
1416 return; 1420 return;
1417 1421
1418 land.landData.OtherCleanTime = otherCleanTime; 1422 land.LandData.OtherCleanTime = otherCleanTime;
1419 1423
1420 UpdateLandObject(localID, land.landData); 1424 UpdateLandObject(localID, land.LandData);
1421 } 1425 }
1422 } 1426 }
1423} 1427}