diff options
author | AliciaRaven | 2016-11-22 15:31:45 +0000 |
---|---|---|
committer | AliciaRaven | 2016-11-22 15:31:45 +0000 |
commit | 94e48838d5b1f0bf0c5b0e40b7bc9a6f1be156e9 (patch) | |
tree | 384a7f929cbc59bf4b45d9daaae976471427219a | |
parent | Coding standards: A local variable may not use the prefix m_ (diff) | |
download | opensim-SC-94e48838d5b1f0bf0c5b0e40b7bc9a6f1be156e9.zip opensim-SC-94e48838d5b1f0bf0c5b0e40b7bc9a6f1be156e9.tar.gz opensim-SC-94e48838d5b1f0bf0c5b0e40b7bc9a6f1be156e9.tar.bz2 opensim-SC-94e48838d5b1f0bf0c5b0e40b7bc9a6f1be156e9.tar.xz |
Include new Region.ini option for DefaultLandingPoint for teleports with no coords specified.
This is useful when using a Telehub would be to restrictive as it would block landmarks and map teleports. This location is only ever used when no coordinates are provided. If config value not set, the previous default of 128,128 is used.
-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 |