diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index fa9cd55..a36d0fe 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -61,8 +61,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
61 | set { m_MaxTransferDistance = value; } | 61 | set { m_MaxTransferDistance = value; } |
62 | } | 62 | } |
63 | 63 | ||
64 | private int m_levelHGTeleport = 0; | ||
65 | |||
66 | protected bool m_Enabled = false; | 64 | protected bool m_Enabled = false; |
67 | protected Scene m_aScene; | 65 | protected Scene m_aScene; |
68 | protected List<Scene> m_Scenes = new List<Scene>(); | 66 | protected List<Scene> m_Scenes = new List<Scene>(); |
@@ -106,7 +104,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
106 | if (transferConfig != null) | 104 | if (transferConfig != null) |
107 | { | 105 | { |
108 | MaxTransferDistance = transferConfig.GetInt("max_distance", 4095); | 106 | MaxTransferDistance = transferConfig.GetInt("max_distance", 4095); |
109 | m_levelHGTeleport = transferConfig.GetInt("LevelHGTeleport", 0); | ||
110 | } | 107 | } |
111 | 108 | ||
112 | m_agentsInTransit = new List<UUID>(); | 109 | m_agentsInTransit = new List<UUID>(); |
@@ -172,13 +169,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
172 | // Reset animations; the viewer does that in teleports. | 169 | // Reset animations; the viewer does that in teleports. |
173 | sp.Animator.ResetAnimations(); | 170 | sp.Animator.ResetAnimations(); |
174 | 171 | ||
172 | string destinationRegionName = "(not found)"; | ||
173 | |||
175 | try | 174 | try |
176 | { | 175 | { |
177 | if (regionHandle == sp.Scene.RegionInfo.RegionHandle) | 176 | if (regionHandle == sp.Scene.RegionInfo.RegionHandle) |
178 | { | 177 | { |
178 | destinationRegionName = sp.Scene.RegionInfo.RegionName; | ||
179 | |||
179 | m_log.DebugFormat( | 180 | m_log.DebugFormat( |
180 | "[ENTITY TRANSFER MODULE]: RequestTeleportToLocation {0} within {1}", | 181 | "[ENTITY TRANSFER MODULE]: RequestTeleportToLocation for {0} to {1} within existing region {2}", |
181 | position, sp.Scene.RegionInfo.RegionName); | 182 | sp.Name, position, destinationRegionName); |
182 | 183 | ||
183 | // Teleport within the same region | 184 | // Teleport within the same region |
184 | if (IsOutsideRegion(sp.Scene, position) || position.Z < 0) | 185 | if (IsOutsideRegion(sp.Scene, position) || position.Z < 0) |
@@ -188,6 +189,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
188 | m_log.WarnFormat( | 189 | m_log.WarnFormat( |
189 | "[ENTITY TRANSFER MODULE]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", | 190 | "[ENTITY TRANSFER MODULE]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", |
190 | position, sp.Name, sp.UUID, emergencyPos); | 191 | position, sp.Name, sp.UUID, emergencyPos); |
192 | |||
191 | position = emergencyPos; | 193 | position = emergencyPos; |
192 | } | 194 | } |
193 | 195 | ||
@@ -210,6 +212,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
210 | sp.ControllingClient.SendTeleportStart(teleportFlags); | 212 | sp.ControllingClient.SendTeleportStart(teleportFlags); |
211 | 213 | ||
212 | sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); | 214 | sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); |
215 | sp.Velocity = Vector3.Zero; | ||
213 | sp.Teleport(position); | 216 | sp.Teleport(position); |
214 | 217 | ||
215 | foreach (SceneObjectGroup grp in sp.GetAttachments()) | 218 | foreach (SceneObjectGroup grp in sp.GetAttachments()) |
@@ -233,15 +236,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
233 | return; | 236 | return; |
234 | } | 237 | } |
235 | 238 | ||
236 | // check if HyperGrid teleport is allowed, based on user level | 239 | destinationRegionName = finalDestination.RegionName; |
237 | int flags = m_aScene.GridService.GetRegionFlags(sp.Scene.RegionInfo.ScopeID, reg.RegionID); | ||
238 | |||
239 | if (((flags & (int)OpenSim.Data.RegionFlags.Hyperlink) != 0) && (sp.UserLevel < m_levelHGTeleport)) | ||
240 | { | ||
241 | m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Final destination link is non permitted hypergrid region. Unable to teleport agent."); | ||
242 | sp.ControllingClient.SendTeleportFailed("HyperGrid teleport not permitted"); | ||
243 | return; | ||
244 | } | ||
245 | 240 | ||
246 | uint curX = 0, curY = 0; | 241 | uint curX = 0, curY = 0; |
247 | Utils.LongToUInts(sp.Scene.RegionInfo.RegionHandle, out curX, out curY); | 242 | Utils.LongToUInts(sp.Scene.RegionInfo.RegionHandle, out curX, out curY); |
@@ -307,7 +302,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
307 | } | 302 | } |
308 | catch (Exception e) | 303 | catch (Exception e) |
309 | { | 304 | { |
310 | m_log.WarnFormat("[ENTITY TRANSFER MODULE]: Exception on teleport: {0} {1}", e.Message, e.StackTrace); | 305 | m_log.ErrorFormat( |
306 | "[ENTITY TRANSFER MODULE]: Exception on teleport of {0} from {1}@{2} to {3}@{4}: {5}{6}", | ||
307 | sp.Name, sp.AbsolutePosition, sp.Scene.RegionInfo.RegionName, position, destinationRegionName, | ||
308 | e.Message, e.StackTrace); | ||
309 | |||
311 | sp.ControllingClient.SendTeleportFailed("Internal error"); | 310 | sp.ControllingClient.SendTeleportFailed("Internal error"); |
312 | } | 311 | } |
313 | } | 312 | } |
@@ -402,7 +401,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
402 | bool logout = false; | 401 | bool logout = false; |
403 | if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout)) | 402 | if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout)) |
404 | { | 403 | { |
405 | sp.ControllingClient.SendTeleportFailed(String.Format("Destination refused: {0}", | 404 | sp.ControllingClient.SendTeleportFailed(String.Format("Teleport refused: {0}", |
406 | reason)); | 405 | reason)); |
407 | return; | 406 | return; |
408 | } | 407 | } |