diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Environment/LandManagement/LandManager.cs | 95 |
1 files changed, 51 insertions, 44 deletions
diff --git a/OpenSim/Region/Environment/LandManagement/LandManager.cs b/OpenSim/Region/Environment/LandManagement/LandManager.cs index ecd458d..772fe2e 100644 --- a/OpenSim/Region/Environment/LandManagement/LandManager.cs +++ b/OpenSim/Region/Environment/LandManagement/LandManager.cs | |||
@@ -27,11 +27,13 @@ | |||
27 | */ | 27 | */ |
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using Axiom.Math; | ||
30 | using libsecondlife; | 31 | using libsecondlife; |
31 | using libsecondlife.Packets; | 32 | using libsecondlife.Packets; |
32 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Framework.Console; | ||
33 | using OpenSim.Region.Environment.Scenes; | 35 | using OpenSim.Region.Environment.Scenes; |
34 | using OpenSim.Region.Environment.Interfaces; | 36 | using OpenSim.Region.Physics.Manager; |
35 | 37 | ||
36 | namespace OpenSim.Region.Environment.LandManagement | 38 | namespace OpenSim.Region.Environment.LandManagement |
37 | { | 39 | { |
@@ -93,7 +95,7 @@ namespace OpenSim.Region.Environment.LandManagement | |||
93 | private readonly RegionInfo m_regInfo; | 95 | private readonly RegionInfo m_regInfo; |
94 | 96 | ||
95 | public bool allowedForcefulBans = true; | 97 | public bool allowedForcefulBans = true; |
96 | 98 | ||
97 | #endregion | 99 | #endregion |
98 | 100 | ||
99 | #region Constructors | 101 | #region Constructors |
@@ -103,14 +105,13 @@ namespace OpenSim.Region.Environment.LandManagement | |||
103 | m_scene = scene; | 105 | m_scene = scene; |
104 | m_regInfo = reginfo; | 106 | m_regInfo = reginfo; |
105 | landIDList.Initialize(); | 107 | landIDList.Initialize(); |
106 | scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(handleAvatarChangingParcel); | 108 | scene.EventManager.OnAvatarEnteringNewParcel += |
107 | scene.EventManager.OnClientMovement += new EventManager.ClientMovement(this.handleAnyClientMovement); | 109 | new EventManager.AvatarEnteringNewParcel(handleAvatarChangingParcel); |
110 | scene.EventManager.OnClientMovement += new EventManager.ClientMovement(handleAnyClientMovement); | ||
108 | } | 111 | } |
109 | 112 | ||
110 | |||
111 | |||
112 | #endregion | 113 | #endregion |
113 | 114 | ||
114 | #region Member Functions | 115 | #region Member Functions |
115 | 116 | ||
116 | #region Land Object From Storage Functions | 117 | #region Land Object From Storage Functions |
@@ -147,7 +148,6 @@ namespace OpenSim.Region.Environment.LandManagement | |||
147 | /// <returns></returns> | 148 | /// <returns></returns> |
148 | public Land createBaseLand() | 149 | public Land createBaseLand() |
149 | { | 150 | { |
150 | |||
151 | return new Land(LLUUID.Zero, false, m_scene); | 151 | return new Land(LLUUID.Zero, false, m_scene); |
152 | } | 152 | } |
153 | 153 | ||
@@ -175,7 +175,7 @@ namespace OpenSim.Region.Environment.LandManagement | |||
175 | } | 175 | } |
176 | } | 176 | } |
177 | landList[lastLandLocalID].forceUpdateLandInfo(); | 177 | landList[lastLandLocalID].forceUpdateLandInfo(); |
178 | m_scene.EventManager.TriggerLandObjectAdded(new_land,m_scene.RegionInfo.RegionID); | 178 | m_scene.EventManager.TriggerLandObjectAdded(new_land, m_scene.RegionInfo.RegionID); |
179 | return new_land; | 179 | return new_land; |
180 | } | 180 | } |
181 | 181 | ||
@@ -207,7 +207,7 @@ namespace OpenSim.Region.Environment.LandManagement | |||
207 | if (landList.ContainsKey(local_id)) | 207 | if (landList.ContainsKey(local_id)) |
208 | { | 208 | { |
209 | landList[local_id].landData = newData.Copy(); | 209 | landList[local_id].landData = newData.Copy(); |
210 | m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, landList[local_id]); | 210 | m_scene.EventManager.TriggerLandObjectUpdated((uint) local_id, landList[local_id]); |
211 | } | 211 | } |
212 | else | 212 | else |
213 | { | 213 | { |
@@ -335,7 +335,7 @@ namespace OpenSim.Region.Environment.LandManagement | |||
335 | 335 | ||
336 | //Now add the new land object | 336 | //Now add the new land object |
337 | Land result = addLandObject(newLand); | 337 | Land result = addLandObject(newLand); |
338 | updateLandObject(startLandObject.landData.localID,startLandObject.landData); | 338 | updateLandObject(startLandObject.landData.localID, startLandObject.landData); |
339 | result.sendLandUpdateToAvatarsOverMe(); | 339 | result.sendLandUpdateToAvatarsOverMe(); |
340 | 340 | ||
341 | 341 | ||
@@ -463,11 +463,11 @@ namespace OpenSim.Region.Environment.LandManagement | |||
463 | Land southParcel = null; | 463 | Land southParcel = null; |
464 | if (x > 0) | 464 | if (x > 0) |
465 | { | 465 | { |
466 | westParcel = getLandObject((x - 1) * 4, y * 4); | 466 | westParcel = getLandObject((x - 1)*4, y*4); |
467 | } | 467 | } |
468 | if (y > 0) | 468 | if (y > 0) |
469 | { | 469 | { |
470 | southParcel = getLandObject(x * 4, (y - 1) * 4); | 470 | southParcel = getLandObject(x*4, (y - 1)*4); |
471 | } | 471 | } |
472 | 472 | ||
473 | if (x == 0) | 473 | if (x == 0) |
@@ -496,14 +496,15 @@ namespace OpenSim.Region.Environment.LandManagement | |||
496 | packet = new ParcelOverlayPacket(); | 496 | packet = new ParcelOverlayPacket(); |
497 | packet.ParcelData.Data = byteArray; | 497 | packet.ParcelData.Data = byteArray; |
498 | packet.ParcelData.SequenceID = sequenceID; | 498 | packet.ParcelData.SequenceID = sequenceID; |
499 | remote_client.OutPacket((Packet)packet, ThrottleOutPacketType.Task); | 499 | remote_client.OutPacket((Packet) packet, ThrottleOutPacketType.Task); |
500 | sequenceID++; | 500 | sequenceID++; |
501 | byteArray = new byte[LAND_BLOCKS_PER_PACKET]; | 501 | byteArray = new byte[LAND_BLOCKS_PER_PACKET]; |
502 | } | 502 | } |
503 | } | 503 | } |
504 | catch (System.Exception e) | 504 | catch (Exception e) |
505 | { | 505 | { |
506 | OpenSim.Framework.Console.MainLog.Instance.Debug("LAND", "Skipped Land checks because avatar is out of bounds: " + e.Message); | 506 | MainLog.Instance.Debug("LAND", |
507 | "Skipped Land checks because avatar is out of bounds: " + e.Message); | ||
507 | } | 508 | } |
508 | } | 509 | } |
509 | } | 510 | } |
@@ -599,7 +600,6 @@ namespace OpenSim.Region.Environment.LandManagement | |||
599 | 600 | ||
600 | public List<Land> parcelsNearPoint(LLVector3 position) | 601 | public List<Land> parcelsNearPoint(LLVector3 position) |
601 | { | 602 | { |
602 | |||
603 | List<Land> parcelsNear = new List<Land>(); | 603 | List<Land> parcelsNear = new List<Land>(); |
604 | int x, y; | 604 | int x, y; |
605 | for (x = -4; x <= 4; x += 4) | 605 | for (x = -4; x <= 4; x += 4) |
@@ -617,22 +617,25 @@ namespace OpenSim.Region.Environment.LandManagement | |||
617 | } | 617 | } |
618 | } | 618 | } |
619 | 619 | ||
620 | return parcelsNear; | 620 | return parcelsNear; |
621 | |||
622 | } | 621 | } |
623 | 622 | ||
624 | public void sendYouAreBannedNotice(ScenePresence avatar) | 623 | public void sendYouAreBannedNotice(ScenePresence avatar) |
625 | { | 624 | { |
626 | if (allowedForcefulBans) | 625 | if (allowedForcefulBans) |
627 | { | 626 | { |
628 | avatar.ControllingClient.SendAlertMessage("You are not allowed on this parcel because you are banned. Please go away. <3 OpenSim Developers"); | 627 | avatar.ControllingClient.SendAlertMessage( |
628 | "You are not allowed on this parcel because you are banned. Please go away. <3 OpenSim Developers"); | ||
629 | 629 | ||
630 | avatar.PhysicsActor.Position = new OpenSim.Region.Physics.Manager.PhysicsVector(avatar.lastKnownAllowedPosition.x, avatar.lastKnownAllowedPosition.y, avatar.lastKnownAllowedPosition.z); | 630 | avatar.PhysicsActor.Position = |
631 | avatar.PhysicsActor.Velocity = new OpenSim.Region.Physics.Manager.PhysicsVector(0, 0, 0); | 631 | new PhysicsVector(avatar.lastKnownAllowedPosition.x, avatar.lastKnownAllowedPosition.y, |
632 | avatar.lastKnownAllowedPosition.z); | ||
633 | avatar.PhysicsActor.Velocity = new PhysicsVector(0, 0, 0); | ||
632 | } | 634 | } |
633 | else | 635 | else |
634 | { | 636 | { |
635 | avatar.ControllingClient.SendAlertMessage("You are not allowed on this parcel because you are banned; however, the grid administrator has disabled ban lines globally. Please obey the land owner's requests or you can be banned from the entire sim! <3 OpenSim Developers"); | 637 | avatar.ControllingClient.SendAlertMessage( |
638 | "You are not allowed on this parcel because you are banned; however, the grid administrator has disabled ban lines globally. Please obey the land owner's requests or you can be banned from the entire sim! <3 OpenSim Developers"); | ||
636 | } | 639 | } |
637 | } | 640 | } |
638 | 641 | ||
@@ -651,7 +654,8 @@ namespace OpenSim.Region.Environment.LandManagement | |||
651 | } | 654 | } |
652 | else if (parcelAvatarIsEntering.isRestrictedFromLand(avatar.UUID)) | 655 | else if (parcelAvatarIsEntering.isRestrictedFromLand(avatar.UUID)) |
653 | { | 656 | { |
654 | avatar.ControllingClient.SendAlertMessage("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!). <3 OpenSim Developers"); | 657 | avatar.ControllingClient.SendAlertMessage( |
658 | "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!). <3 OpenSim Developers"); | ||
655 | } | 659 | } |
656 | else | 660 | else |
657 | { | 661 | { |
@@ -668,7 +672,6 @@ namespace OpenSim.Region.Environment.LandManagement | |||
668 | 672 | ||
669 | public void sendOutNearestBanLine(IClientAPI avatar) | 673 | public void sendOutNearestBanLine(IClientAPI avatar) |
670 | { | 674 | { |
671 | |||
672 | List<ScenePresence> avatars = m_scene.GetAvatars(); | 675 | List<ScenePresence> avatars = m_scene.GetAvatars(); |
673 | foreach (ScenePresence presence in avatars) | 676 | foreach (ScenePresence presence in avatars) |
674 | { | 677 | { |
@@ -679,15 +682,14 @@ namespace OpenSim.Region.Environment.LandManagement | |||
679 | { | 682 | { |
680 | if (checkBan.isBannedFromLand(avatar.AgentId)) | 683 | if (checkBan.isBannedFromLand(avatar.AgentId)) |
681 | { | 684 | { |
682 | checkBan.sendLandProperties(-30000, false, (int)ParcelManager.ParcelResult.Single, avatar); | 685 | checkBan.sendLandProperties(-30000, false, (int) ParcelManager.ParcelResult.Single, avatar); |
683 | return; //Only send one | 686 | return; //Only send one |
684 | } | 687 | } |
685 | else if (checkBan.isRestrictedFromLand(avatar.AgentId)) | 688 | else if (checkBan.isRestrictedFromLand(avatar.AgentId)) |
686 | { | 689 | { |
687 | checkBan.sendLandProperties(-40000, false, (int)ParcelManager.ParcelResult.Single, avatar); | 690 | checkBan.sendLandProperties(-40000, false, (int) ParcelManager.ParcelResult.Single, avatar); |
688 | return; //Only send one | 691 | return; //Only send one |
689 | } | 692 | } |
690 | |||
691 | } | 693 | } |
692 | return; | 694 | return; |
693 | } | 695 | } |
@@ -696,8 +698,8 @@ namespace OpenSim.Region.Environment.LandManagement | |||
696 | 698 | ||
697 | public void sendLandUpdate(ScenePresence avatar) | 699 | public void sendLandUpdate(ScenePresence avatar) |
698 | { | 700 | { |
699 | Land over = getLandObject((int)Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.X))), | 701 | Land over = getLandObject((int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.X))), |
700 | (int)Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.Y)))); | 702 | (int) Math.Min(255, Math.Max(0, Math.Round(avatar.AbsolutePosition.Y)))); |
701 | 703 | ||
702 | if (over != null) | 704 | if (over != null) |
703 | { | 705 | { |
@@ -705,10 +707,10 @@ namespace OpenSim.Region.Environment.LandManagement | |||
705 | if (avatar.currentParcelUUID != over.landData.globalID) | 707 | if (avatar.currentParcelUUID != over.landData.globalID) |
706 | { | 708 | { |
707 | avatar.currentParcelUUID = over.landData.globalID; | 709 | avatar.currentParcelUUID = over.landData.globalID; |
708 | m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.localID, this.m_scene.RegionInfo.RegionID); | 710 | m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.localID, |
711 | m_scene.RegionInfo.RegionID); | ||
709 | } | 712 | } |
710 | } | 713 | } |
711 | |||
712 | } | 714 | } |
713 | 715 | ||
714 | public void handleSignificantClientMovement(IClientAPI remote_client) | 716 | public void handleSignificantClientMovement(IClientAPI remote_client) |
@@ -722,16 +724,18 @@ namespace OpenSim.Region.Environment.LandManagement | |||
722 | Land parcel = getLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y); | 724 | Land parcel = getLandObject(clientAvatar.AbsolutePosition.X, clientAvatar.AbsolutePosition.Y); |
723 | if (parcel != null) | 725 | if (parcel != null) |
724 | { | 726 | { |
725 | if (clientAvatar.AbsolutePosition.Z < BAN_LINE_SAFETY_HIEGHT && clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) | 727 | if (clientAvatar.AbsolutePosition.Z < BAN_LINE_SAFETY_HIEGHT && |
728 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) | ||
726 | { | 729 | { |
727 | 730 | handleAvatarChangingParcel(clientAvatar, parcel.landData.localID, m_scene.RegionInfo.RegionID); | |
728 | handleAvatarChangingParcel(clientAvatar, parcel.landData.localID, m_scene.RegionInfo.RegionID); //They are going below the safety line! | 731 | //They are going below the safety line! |
729 | if (!parcel.isBannedFromLand(clientAvatar.UUID)) | 732 | if (!parcel.isBannedFromLand(clientAvatar.UUID)) |
730 | { | 733 | { |
731 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false; | 734 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false; |
732 | } | 735 | } |
733 | } | 736 | } |
734 | else if (clientAvatar.AbsolutePosition.Z < BAN_LINE_SAFETY_HIEGHT && parcel.isBannedFromLand(clientAvatar.UUID)) | 737 | else if (clientAvatar.AbsolutePosition.Z < BAN_LINE_SAFETY_HIEGHT && |
738 | parcel.isBannedFromLand(clientAvatar.UUID)) | ||
735 | { | 739 | { |
736 | sendYouAreBannedNotice(clientAvatar); | 740 | sendYouAreBannedNotice(clientAvatar); |
737 | } | 741 | } |
@@ -739,30 +743,33 @@ namespace OpenSim.Region.Environment.LandManagement | |||
739 | } | 743 | } |
740 | } | 744 | } |
741 | 745 | ||
742 | public void handleAnyClientMovement(ScenePresence avatar) //Like handleSignificantClientMovement, but called with an AgentUpdate regardless of distance. | 746 | public void handleAnyClientMovement(ScenePresence avatar) |
747 | //Like handleSignificantClientMovement, but called with an AgentUpdate regardless of distance. | ||
743 | { | 748 | { |
744 | Land over = getLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 749 | Land over = getLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
745 | if (over != null) | 750 | if (over != null) |
746 | { | 751 | { |
747 | if (!over.isBannedFromLand(avatar.UUID) || avatar.AbsolutePosition.Z >= BAN_LINE_SAFETY_HIEGHT) | 752 | if (!over.isBannedFromLand(avatar.UUID) || avatar.AbsolutePosition.Z >= BAN_LINE_SAFETY_HIEGHT) |
748 | { | 753 | { |
749 | avatar.lastKnownAllowedPosition = new Axiom.Math.Vector3(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z); | 754 | avatar.lastKnownAllowedPosition = |
750 | 755 | new Vector3(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z); | |
751 | |||
752 | } | 756 | } |
753 | } | 757 | } |
754 | } | 758 | } |
755 | 759 | ||
756 | 760 | ||
757 | public void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client) | 761 | public void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, |
762 | int landLocalID, IClientAPI remote_client) | ||
758 | { | 763 | { |
759 | if (landList.ContainsKey(landLocalID)) | 764 | if (landList.ContainsKey(landLocalID)) |
760 | { | 765 | { |
761 | landList[landLocalID].sendAccessList(agentID, sessionID, flags, sequenceID,remote_client); | 766 | landList[landLocalID].sendAccessList(agentID, sessionID, flags, sequenceID, remote_client); |
762 | } | 767 | } |
763 | } | 768 | } |
764 | 769 | ||
765 | public void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID,uint flags, int landLocalID, List<libsecondlife.ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client) | 770 | public void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, |
771 | List<ParcelManager.ParcelAccessEntry> entries, | ||
772 | IClientAPI remote_client) | ||
766 | { | 773 | { |
767 | if (landList.ContainsKey(landLocalID)) | 774 | if (landList.ContainsKey(landLocalID)) |
768 | { | 775 | { |
@@ -849,4 +856,4 @@ namespace OpenSim.Region.Environment.LandManagement | |||
849 | } | 856 | } |
850 | 857 | ||
851 | #endregion | 858 | #endregion |
852 | } | 859 | } \ No newline at end of file |