added processing for TeleportLocationRequest and TeleportLandmarkRequest. Local teleports implemented, inter-region teleports left to do.
parent
3cdc219ed6
commit
b5011e24ee
|
@ -651,6 +651,86 @@ namespace OpenSim
|
||||||
this.RequestMapBlock( MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY);
|
this.RequestMapBlock( MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PacketType.TeleportLandmarkRequest:
|
||||||
|
TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack;
|
||||||
|
|
||||||
|
TeleportStartPacket tpStart = new TeleportStartPacket();
|
||||||
|
tpStart.Info.TeleportFlags = 8; // tp via lm
|
||||||
|
this.OutPacket(tpStart);
|
||||||
|
|
||||||
|
TeleportProgressPacket tpProgress = new TeleportProgressPacket();
|
||||||
|
tpProgress.Info.Message = (new System.Text.ASCIIEncoding()).GetBytes("sending_landmark");
|
||||||
|
tpProgress.Info.TeleportFlags = 8;
|
||||||
|
tpProgress.AgentData.AgentID = tpReq.Info.AgentID;
|
||||||
|
this.OutPacket(tpProgress);
|
||||||
|
|
||||||
|
// Fetch landmark
|
||||||
|
LLUUID lmid = tpReq.Info.LandmarkID;
|
||||||
|
AssetBase lma = this.m_assetCache.GetAsset(lmid);
|
||||||
|
if (lma != null)
|
||||||
|
{
|
||||||
|
AssetLandmark lm = new AssetLandmark(lma);
|
||||||
|
|
||||||
|
if (lm.RegionID == m_regionData.SimUUID)
|
||||||
|
{
|
||||||
|
TeleportLocalPacket tpLocal = new TeleportLocalPacket();
|
||||||
|
|
||||||
|
tpLocal.Info.AgentID = tpReq.Info.AgentID;
|
||||||
|
tpLocal.Info.TeleportFlags = 8; // Teleport via landmark
|
||||||
|
tpLocal.Info.LocationID = 2;
|
||||||
|
tpLocal.Info.Position = lm.Position;
|
||||||
|
OutPacket(tpLocal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TeleportCancelPacket tpCancel = new TeleportCancelPacket();
|
||||||
|
tpCancel.Info.AgentID = tpReq.Info.AgentID;
|
||||||
|
tpCancel.Info.SessionID = tpReq.Info.SessionID;
|
||||||
|
OutPacket(tpCancel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Cancelling Teleport - fetch asset not yet implemented");
|
||||||
|
|
||||||
|
TeleportCancelPacket tpCancel = new TeleportCancelPacket();
|
||||||
|
tpCancel.Info.AgentID = tpReq.Info.AgentID;
|
||||||
|
tpCancel.Info.SessionID = tpReq.Info.SessionID;
|
||||||
|
OutPacket(tpCancel);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PacketType.TeleportLocationRequest:
|
||||||
|
TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack;
|
||||||
|
Console.WriteLine(tpLocReq.ToString());
|
||||||
|
|
||||||
|
tpStart = new TeleportStartPacket();
|
||||||
|
tpStart.Info.TeleportFlags = 16; // Teleport via location
|
||||||
|
Console.WriteLine(tpStart.ToString());
|
||||||
|
OutPacket(tpStart);
|
||||||
|
|
||||||
|
if (m_regionData.RegionHandle != tpLocReq.Info.RegionHandle)
|
||||||
|
{
|
||||||
|
/* m_gridServer.getRegion(tpLocReq.Info.RegionHandle); */
|
||||||
|
Console.WriteLine("Inter-sim teleport not yet implemented");
|
||||||
|
TeleportCancelPacket tpCancel = new TeleportCancelPacket();
|
||||||
|
tpCancel.Info.SessionID = tpLocReq.AgentData.SessionID;
|
||||||
|
tpCancel.Info.AgentID = tpLocReq.AgentData.AgentID;
|
||||||
|
|
||||||
|
OutPacket(tpCancel);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Console.WriteLine("Local teleport");
|
||||||
|
TeleportLocalPacket tpLocal = new TeleportLocalPacket();
|
||||||
|
tpLocal.Info.AgentID = tpLocReq.AgentData.AgentID;
|
||||||
|
tpLocal.Info.TeleportFlags = tpStart.Info.TeleportFlags;
|
||||||
|
tpLocal.Info.LocationID = 2;
|
||||||
|
tpLocal.Info.LookAt = tpLocReq.Info.LookAt;
|
||||||
|
tpLocal.Info.Position = tpLocReq.Info.Position;
|
||||||
|
OutPacket(tpLocal);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -718,7 +798,6 @@ namespace OpenSim
|
||||||
|
|
||||||
protected virtual void ProcessOutPacket(Packet Pack)
|
protected virtual void ProcessOutPacket(Packet Pack)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Keep track of when this packet was sent out
|
// Keep track of when this packet was sent out
|
||||||
Pack.TickCount = Environment.TickCount;
|
Pack.TickCount = Environment.TickCount;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue