Added ITeleportModule interface, and added a hook into scene so if a module has registered this interface then that handles teleport requests rather the SceneCommunicationService.

As by default there is no ITeleportModule registered, Teleports by default will still be handled by SceneCommunicationService.
0.6.6-post-fixes
MW 2009-05-21 10:41:16 +00:00
parent 787d58ae7f
commit e4d68964dd
2 changed files with 27 additions and 13 deletions

View File

@ -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);
}
}

View File

@ -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<IInterregionCommsIn>();
m_dialogModule = RequestModuleInterface<IDialogModule>();
m_capsModule = RequestModuleInterface<ICapabilitiesModule>();
m_teleportModule = RequestModuleInterface<ITeleportModule>();
}
#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)