diff options
-rw-r--r-- | OpenSim/Framework/RegionInfo.cs | 58 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 4 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 4 | ||||
-rw-r--r-- | bin/Regions/Regions.ini.example | 3 |
4 files changed, 69 insertions, 0 deletions
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index ac77352..b6e9d9f 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs | |||
@@ -176,6 +176,9 @@ namespace OpenSim.Framework | |||
176 | /// </remarks> | 176 | /// </remarks> |
177 | public uint RegionSizeZ = Constants.RegionHeight; | 177 | public uint RegionSizeZ = Constants.RegionHeight; |
178 | 178 | ||
179 | // If entering avatar has no specific coords, this is where they land | ||
180 | public Vector3 DefaultLandingPoint = new Vector3(128, 128, 30); | ||
181 | |||
179 | private Dictionary<String, String> m_extraSettings = new Dictionary<string, string>(); | 182 | private Dictionary<String, String> m_extraSettings = new Dictionary<string, string>(); |
180 | 183 | ||
181 | // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. | 184 | // Apparently, we're applying the same estatesettings regardless of whether it's local or remote. |
@@ -712,6 +715,19 @@ namespace OpenSim.Framework | |||
712 | m_regionType = config.GetString("RegionType", String.Empty); | 715 | m_regionType = config.GetString("RegionType", String.Empty); |
713 | allKeys.Remove("RegionType"); | 716 | allKeys.Remove("RegionType"); |
714 | 717 | ||
718 | // Get Default Landing Location (Defaults to 128,128) | ||
719 | string temp_location = config.GetString("DefaultLanding", "<128, 128, 30>"); | ||
720 | Vector3 temp_vector; | ||
721 | |||
722 | if (Vector3.TryParse(temp_location, out temp_vector)) | ||
723 | DefaultLandingPoint = temp_vector; | ||
724 | else | ||
725 | m_log.ErrorFormat("[RegionInfo]: Unable to parse DefaultLanding for '{0}'. The value given was '{1}'", RegionName, temp_location); | ||
726 | |||
727 | allKeys.Remove("DefaultLanding"); | ||
728 | |||
729 | DoDefaultLandingSanityChecks(); | ||
730 | |||
715 | #region Prim and map stuff | 731 | #region Prim and map stuff |
716 | 732 | ||
717 | m_nonphysPrimMin = config.GetFloat("NonPhysicalPrimMin", 0); | 733 | m_nonphysPrimMin = config.GetFloat("NonPhysicalPrimMin", 0); |
@@ -764,6 +780,48 @@ namespace OpenSim.Framework | |||
764 | } | 780 | } |
765 | } | 781 | } |
766 | 782 | ||
783 | // Make sure DefaultLanding is within region borders with a buffer zone 5 meters from borders | ||
784 | private void DoDefaultLandingSanityChecks() | ||
785 | { | ||
786 | // Sanity Check Default Landing | ||
787 | float buffer_zone = 5f; | ||
788 | |||
789 | bool ValuesCapped = false; | ||
790 | |||
791 | // Minimum Positions | ||
792 | if (DefaultLandingPoint.X < 0f) | ||
793 | { | ||
794 | DefaultLandingPoint.X = buffer_zone; | ||
795 | ValuesCapped = true; | ||
796 | } | ||
797 | |||
798 | if (DefaultLandingPoint.Y < 0f) | ||
799 | { | ||
800 | DefaultLandingPoint.Y = buffer_zone; | ||
801 | ValuesCapped = true; | ||
802 | } | ||
803 | |||
804 | // Maximum Positions | ||
805 | if (DefaultLandingPoint.X > RegionSizeX - buffer_zone) | ||
806 | { | ||
807 | DefaultLandingPoint.X = RegionSizeX - buffer_zone; | ||
808 | ValuesCapped = true; | ||
809 | } | ||
810 | |||
811 | if (DefaultLandingPoint.Y > RegionSizeY - buffer_zone) | ||
812 | { | ||
813 | DefaultLandingPoint.Y = RegionSizeY - buffer_zone; | ||
814 | ValuesCapped = true; | ||
815 | } | ||
816 | |||
817 | // Height | ||
818 | if (DefaultLandingPoint.Z < 0f) | ||
819 | DefaultLandingPoint.Z = 0f; | ||
820 | |||
821 | if (ValuesCapped == true) | ||
822 | m_log.WarnFormat("[RegionInfo]: The default landing location for {0} has been capped to {1}", RegionName, DefaultLandingPoint); | ||
823 | } | ||
824 | |||
767 | // Make sure user specified region sizes are sane. | 825 | // Make sure user specified region sizes are sane. |
768 | // Must be multiples of legacy region size (256). | 826 | // Must be multiples of legacy region size (256). |
769 | private void DoRegionSizeSanityChecks() | 827 | private void DoRegionSizeSanityChecks() |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 1161571..23cfde5 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -455,6 +455,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
455 | position = emergencyPos; | 455 | position = emergencyPos; |
456 | } | 456 | } |
457 | 457 | ||
458 | // Check Default Location (Also See ScenePresence.CompleteMovement) | ||
459 | if (position.X == 128f && position.Y == 128f) | ||
460 | position = sp.Scene.RegionInfo.DefaultLandingPoint; | ||
461 | |||
458 | // TODO: Get proper AVG Height | 462 | // TODO: Get proper AVG Height |
459 | float localHalfAVHeight = 0.8f; | 463 | float localHalfAVHeight = 0.8f; |
460 | if (sp.Appearance != null) | 464 | if (sp.Appearance != null) |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 7efd920..2cf0e9d 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2043,6 +2043,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2043 | look = new Vector3(0.99f, 0.042f, 0); | 2043 | look = new Vector3(0.99f, 0.042f, 0); |
2044 | } | 2044 | } |
2045 | 2045 | ||
2046 | // Check Default Location (Also See EntityTransferModule.TeleportAgentWithinRegion) | ||
2047 | if (AbsolutePosition.X == 128f && AbsolutePosition.Y == 128f) | ||
2048 | AbsolutePosition = Scene.RegionInfo.DefaultLandingPoint; | ||
2049 | |||
2046 | if (!MakeRootAgent(AbsolutePosition, flying, ref look)) | 2050 | if (!MakeRootAgent(AbsolutePosition, flying, ref look)) |
2047 | { | 2051 | { |
2048 | m_log.DebugFormat( | 2052 | m_log.DebugFormat( |
diff --git a/bin/Regions/Regions.ini.example b/bin/Regions/Regions.ini.example index e20fee6..97d1c4f 100644 --- a/bin/Regions/Regions.ini.example +++ b/bin/Regions/Regions.ini.example | |||
@@ -31,6 +31,9 @@ ExternalHostName = SYSTEMIP | |||
31 | ; SizeX = 512 | 31 | ; SizeX = 512 |
32 | ; SizeY = 512 | 32 | ; SizeY = 512 |
33 | 33 | ||
34 | ; * Default region landing point used when no teleport coords are specified | ||
35 | ; DefaultLanding = <128,128,30> | ||
36 | |||
34 | ; * | 37 | ; * |
35 | ; * Prim data | 38 | ; * Prim data |
36 | ; * This allows limiting the sizes of prims and the region prim count | 39 | ; * This allows limiting the sizes of prims and the region prim count |