diff --git a/OpenSim/Region/Framework/Interfaces/ITeleportModule.cs b/OpenSim/Region/Framework/Interfaces/ITeleportModule.cs new file mode 100644 index 0000000000..5365094515 --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/ITeleportModule.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; +using OpenMetaverse; +using OpenSim.Region.Framework.Scenes; + +namespace OpenSim.Region.Framework.Interfaces +{ + public interface ITeleportModule + { + void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, Vector3 position, + Vector3 lookAt, uint teleportFlags); + } +} diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index a650ec565c..f18d542406 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -147,6 +147,7 @@ namespace OpenSim.Region.Framework.Scenes protected IInterregionCommsOut m_interregionCommsOut; protected IInterregionCommsIn m_interregionCommsIn; protected IDialogModule m_dialogModule; + protected ITeleportModule m_teleportModule; protected ICapabilitiesModule m_capsModule; public ICapabilitiesModule CapsModule @@ -808,6 +809,7 @@ namespace OpenSim.Region.Framework.Scenes m_interregionCommsIn = RequestModuleInterface(); m_dialogModule = RequestModuleInterface(); m_capsModule = RequestModuleInterface(); + m_teleportModule = RequestModuleInterface(); } #endregion @@ -2819,8 +2821,16 @@ namespace OpenSim.Region.Framework.Scenes if (sp != null) { - m_sceneGridService.RequestTeleportToLocation(sp, regionHandle, - position, lookAt, teleportFlags); + if (m_teleportModule != null) + { + m_teleportModule.RequestTeleportToLocation(sp, regionHandle, + position, lookAt, teleportFlags); + } + else + { + m_sceneGridService.RequestTeleportToLocation(sp, regionHandle, + position, lookAt, teleportFlags); + } } } @@ -2841,17 +2851,7 @@ namespace OpenSim.Region.Framework.Scenes return; } - ScenePresence sp = null; - lock (m_scenePresences) - { - if (m_scenePresences.ContainsKey(remoteClient.AgentId)) - sp = m_scenePresences[remoteClient.AgentId]; - } - if (sp != null) - { - m_sceneGridService.RequestTeleportToLocation(sp, info.RegionHandle, - position, Vector3.Zero, (uint)(TPFlags.SetLastToTarget | TPFlags.ViaLandmark)); - } + RequestTeleportLocation(remoteClient, info.RegionHandle, position, Vector3.Zero, (uint)(TPFlags.SetLastToTarget | TPFlags.ViaLandmark)); } public void CrossAgentToNewRegion(ScenePresence agent, bool isFlying)