diff options
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 0ebdbb7..4daabd2 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -5379,6 +5379,33 @@ Environment.Exit(1); | |||
5379 | 5379 | ||
5380 | if (position == Vector3.Zero) // Teleport | 5380 | if (position == Vector3.Zero) // Teleport |
5381 | { | 5381 | { |
5382 | if (!RegionInfo.EstateSettings.AllowDirectTeleport) | ||
5383 | { | ||
5384 | SceneObjectGroup telehub; | ||
5385 | if (RegionInfo.RegionSettings.TelehubObject != UUID.Zero && (telehub = GetSceneObjectGroup(RegionInfo.RegionSettings.TelehubObject)) != null) | ||
5386 | { | ||
5387 | List<SpawnPoint> spawnPoints = RegionInfo.RegionSettings.SpawnPoints(); | ||
5388 | bool banned = true; | ||
5389 | foreach (SpawnPoint sp in spawnPoints) | ||
5390 | { | ||
5391 | Vector3 spawnPoint = sp.GetLocation(telehub.AbsolutePosition, telehub.GroupRotation); | ||
5392 | ILandObject land = LandChannel.GetLandObject(spawnPoint.X, spawnPoint.Y); | ||
5393 | if (land == null) | ||
5394 | continue; | ||
5395 | if (land.IsEitherBannedOrRestricted(agentID)) | ||
5396 | continue; | ||
5397 | banned = false; | ||
5398 | break; | ||
5399 | } | ||
5400 | |||
5401 | if (banned) | ||
5402 | { | ||
5403 | reason = "No suitable landing point found"; | ||
5404 | return false; | ||
5405 | } | ||
5406 | } | ||
5407 | } | ||
5408 | |||
5382 | float posX = 128.0f; | 5409 | float posX = 128.0f; |
5383 | float posY = 128.0f; | 5410 | float posY = 128.0f; |
5384 | 5411 | ||