aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/RegionInfo.cs58
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs4
-rw-r--r--bin/Regions/Regions.ini.example3
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