diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 4c8e2d2..d2a8ad0 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3259,8 +3259,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3259 | /// also return a reason.</returns> | 3259 | /// also return a reason.</returns> |
3260 | public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason, bool requirePresenceLookup) | 3260 | public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason, bool requirePresenceLookup) |
3261 | { | 3261 | { |
3262 | bool vialogin = ((teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0 || | 3262 | bool vialogin = ((teleportFlags & (uint)TPFlags.ViaLogin) != 0 || |
3263 | (teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0); | 3263 | (teleportFlags & (uint)TPFlags.ViaHGLogin) != 0); |
3264 | bool viahome = ((teleportFlags & (uint)TPFlags.ViaHome) != 0); | ||
3265 | bool godlike = ((teleportFlags & (uint)TPFlags.Godlike) != 0); | ||
3266 | |||
3264 | reason = String.Empty; | 3267 | reason = String.Empty; |
3265 | 3268 | ||
3266 | //Teleport flags: | 3269 | //Teleport flags: |
@@ -3272,9 +3275,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3272 | 3275 | ||
3273 | // Don't disable this log message - it's too helpful | 3276 | // Don't disable this log message - it's too helpful |
3274 | m_log.DebugFormat( | 3277 | m_log.DebugFormat( |
3275 | "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})", | 3278 | "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags ({8}), position {9})", |
3276 | RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname, | 3279 | RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname, |
3277 | agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos); | 3280 | agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, ((TPFlags)teleportFlags).ToString(), agent.startpos); |
3278 | 3281 | ||
3279 | if (LoginsDisabled) | 3282 | if (LoginsDisabled) |
3280 | { | 3283 | { |
@@ -3427,6 +3430,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
3427 | agent.startpos.Z = 720; | 3430 | agent.startpos.Z = 720; |
3428 | } | 3431 | } |
3429 | } | 3432 | } |
3433 | |||
3434 | // Honor Estate teleport routing via Telehubs excluding ViaHome and GodLike TeleportFlags | ||
3435 | if (RegionInfo.RegionSettings.TelehubObject != UUID.Zero && | ||
3436 | RegionInfo.EstateSettings.AllowDirectTeleport == false && | ||
3437 | !viahome && !godlike) | ||
3438 | { | ||
3439 | SceneObjectGroup telehub = GetSceneObjectGroup(RegionInfo.RegionSettings.TelehubObject); | ||
3440 | // Can have multiple SpawnPoints | ||
3441 | List<SpawnPoint> spawnpoints = RegionInfo.RegionSettings.SpawnPoints(); | ||
3442 | if ( spawnpoints.Count > 1) | ||
3443 | { | ||
3444 | // We have multiple SpawnPoints, Route the agent to a random one | ||
3445 | agent.startpos = spawnpoints[Util.RandomClass.Next(spawnpoints.Count)].GetLocation(telehub.AbsolutePosition, telehub.GroupRotation); | ||
3446 | } | ||
3447 | else | ||
3448 | { | ||
3449 | // We have a single SpawnPoint and will route the agent to it | ||
3450 | agent.startpos = spawnpoints[0].GetLocation(telehub.AbsolutePosition, telehub.GroupRotation); | ||
3451 | } | ||
3452 | |||
3453 | return true; | ||
3454 | } | ||
3455 | |||
3430 | // Honor parcel landing type and position. | 3456 | // Honor parcel landing type and position. |
3431 | if (land != null) | 3457 | if (land != null) |
3432 | { | 3458 | { |