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
parent
787d58ae7f
commit
e4d68964dd
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -147,6 +147,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
protected IInterregionCommsOut m_interregionCommsOut;
|
protected IInterregionCommsOut m_interregionCommsOut;
|
||||||
protected IInterregionCommsIn m_interregionCommsIn;
|
protected IInterregionCommsIn m_interregionCommsIn;
|
||||||
protected IDialogModule m_dialogModule;
|
protected IDialogModule m_dialogModule;
|
||||||
|
protected ITeleportModule m_teleportModule;
|
||||||
|
|
||||||
protected ICapabilitiesModule m_capsModule;
|
protected ICapabilitiesModule m_capsModule;
|
||||||
public ICapabilitiesModule CapsModule
|
public ICapabilitiesModule CapsModule
|
||||||
|
@ -808,6 +809,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_interregionCommsIn = RequestModuleInterface<IInterregionCommsIn>();
|
m_interregionCommsIn = RequestModuleInterface<IInterregionCommsIn>();
|
||||||
m_dialogModule = RequestModuleInterface<IDialogModule>();
|
m_dialogModule = RequestModuleInterface<IDialogModule>();
|
||||||
m_capsModule = RequestModuleInterface<ICapabilitiesModule>();
|
m_capsModule = RequestModuleInterface<ICapabilitiesModule>();
|
||||||
|
m_teleportModule = RequestModuleInterface<ITeleportModule>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -2818,11 +2820,19 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sp != null)
|
if (sp != null)
|
||||||
|
{
|
||||||
|
if (m_teleportModule != null)
|
||||||
|
{
|
||||||
|
m_teleportModule.RequestTeleportToLocation(sp, regionHandle,
|
||||||
|
position, lookAt, teleportFlags);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
m_sceneGridService.RequestTeleportToLocation(sp, regionHandle,
|
m_sceneGridService.RequestTeleportToLocation(sp, regionHandle,
|
||||||
position, lookAt, teleportFlags);
|
position, lookAt, teleportFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tries to teleport agent to landmark.
|
/// Tries to teleport agent to landmark.
|
||||||
|
@ -2841,17 +2851,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScenePresence sp = null;
|
RequestTeleportLocation(remoteClient, info.RegionHandle, position, Vector3.Zero, (uint)(TPFlags.SetLastToTarget | TPFlags.ViaLandmark));
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CrossAgentToNewRegion(ScenePresence agent, bool isFlying)
|
public void CrossAgentToNewRegion(ScenePresence agent, bool isFlying)
|
||||||
|
|
Loading…
Reference in New Issue