mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 11:57:03 +08:00
* Applying melanie's Landmark patch. Thanks Melanie!
* To make a landmark, you currently have to enable admin options in the advanced menu first. We're working on this.. however use the admin options solution in the mean time.
This commit is contained in:
@@ -154,6 +154,7 @@ namespace OpenSim.Region.ClientStack
|
||||
private FetchInventory handlerAgentDataUpdateRequest = null; //OnAgentDataUpdateRequest;
|
||||
private FetchInventory handlerUserInfoRequest = null; //OnUserInfoRequest;
|
||||
private TeleportLocationRequest handlerSetStartLocationRequest = null; //OnSetStartLocationRequest;
|
||||
private TeleportLandmarkRequest handlerTeleportLandmarkRequest = null; //OnTeleportLandmarkRequest;
|
||||
private LinkObjects handlerLinkObjects = null; //OnLinkObjects;
|
||||
private DelinkObjects handlerDelinkObjects = null; //OnDelinkObjects;
|
||||
private AddNewPrim handlerAddPrim = null; //OnAddPrim;
|
||||
@@ -716,6 +717,7 @@ namespace OpenSim.Region.ClientStack
|
||||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
public event SetAlwaysRun OnSetAlwaysRun;
|
||||
@@ -4185,50 +4187,35 @@ namespace OpenSim.Region.ClientStack
|
||||
break;
|
||||
case PacketType.TeleportLandmarkRequest:
|
||||
TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack;
|
||||
|
||||
TeleportStartPacket tpStart = (TeleportStartPacket)PacketPool.Instance.GetPacket(PacketType.TeleportStart);
|
||||
tpStart.Info.TeleportFlags = 8; // tp via lm
|
||||
OutPacket(tpStart, ThrottleOutPacketType.Task);
|
||||
|
||||
TeleportProgressPacket tpProgress = (TeleportProgressPacket)PacketPool.Instance.GetPacket(PacketType.TeleportProgress);
|
||||
tpProgress.Info.Message = (new UTF8Encoding()).GetBytes("sending_landmark");
|
||||
tpProgress.Info.TeleportFlags = 8;
|
||||
tpProgress.AgentData.AgentID = tpReq.Info.AgentID;
|
||||
OutPacket(tpProgress, ThrottleOutPacketType.Task);
|
||||
|
||||
// Fetch landmark
|
||||
LLUUID lmid = tpReq.Info.LandmarkID;
|
||||
AssetBase lma = m_assetCache.GetAsset(lmid, false);
|
||||
if (lma != null)
|
||||
|
||||
if(lma == null)
|
||||
{
|
||||
AssetLandmark lm = new AssetLandmark(lma);
|
||||
// Failed to find landmark
|
||||
|
||||
TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel);
|
||||
tpCancel.Info.SessionID = tpReq.Info.SessionID;
|
||||
tpCancel.Info.AgentID = tpReq.Info.AgentID;
|
||||
OutPacket(tpCancel, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
||||
if (lm.RegionID == m_scene.RegionInfo.RegionID)
|
||||
{
|
||||
TeleportLocalPacket tpLocal = (TeleportLocalPacket)PacketPool.Instance.GetPacket(PacketType.TeleportLocal);
|
||||
|
||||
tpLocal.Info.AgentID = tpReq.Info.AgentID;
|
||||
tpLocal.Info.TeleportFlags = 8; // Teleport via landmark
|
||||
tpLocal.Info.LocationID = 2;
|
||||
tpLocal.Info.Position = lm.Position;
|
||||
OutPacket(tpLocal, ThrottleOutPacketType.Task);
|
||||
}
|
||||
else
|
||||
{
|
||||
TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel);
|
||||
tpCancel.Info.AgentID = tpReq.Info.AgentID;
|
||||
tpCancel.Info.SessionID = tpReq.Info.SessionID;
|
||||
OutPacket(tpCancel, ThrottleOutPacketType.Task);
|
||||
}
|
||||
AssetLandmark lm = new AssetLandmark(lma);
|
||||
handlerTeleportLandmarkRequest = OnTeleportLandmarkRequest;
|
||||
if (handlerTeleportLandmarkRequest != null)
|
||||
{
|
||||
handlerTeleportLandmarkRequest(this, lm.RegionHandle, lm.Position);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Cancelling Teleport - fetch asset not yet implemented");
|
||||
//no event handler so cancel request
|
||||
|
||||
|
||||
TeleportCancelPacket tpCancel = (TeleportCancelPacket)PacketPool.Instance.GetPacket(PacketType.TeleportCancel);
|
||||
tpCancel.Info.AgentID = tpReq.Info.AgentID;
|
||||
tpCancel.Info.SessionID = tpReq.Info.SessionID;
|
||||
OutPacket(tpCancel, ThrottleOutPacketType.Task);
|
||||
|
||||
}
|
||||
break;
|
||||
case PacketType.TeleportLocationRequest:
|
||||
|
||||
@@ -545,7 +545,20 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
|
||||
if (userInfo != null)
|
||||
{
|
||||
AssetBase asset = CreateAsset(name, description, invType, assetType, null);
|
||||
ScenePresence presence;
|
||||
TryGetAvatar(remoteClient.AgentId, out presence);
|
||||
byte[] data = null;
|
||||
if(invType == 3 && presence != null) // libsecondlife.asset.assettype.landmark = 3 - needs to be turned into an enum
|
||||
{
|
||||
LLVector3 pos=presence.AbsolutePosition;
|
||||
string strdata=String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n",
|
||||
presence.Scene.RegionInfo.RegionID,
|
||||
pos.X, pos.Y, pos.Z,
|
||||
presence.RegionHandle);
|
||||
data=Encoding.ASCII.GetBytes(strdata);
|
||||
}
|
||||
|
||||
AssetBase asset = CreateAsset(name, description, invType, assetType, data);
|
||||
AssetCache.AddAsset(asset);
|
||||
|
||||
CreateNewInventoryItem(remoteClient, folderID, callbackID, asset, nextOwnerMask);
|
||||
|
||||
@@ -1518,6 +1518,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
client.OnRequestMapBlocks += RequestMapBlocks;
|
||||
client.OnUpdatePrimTexture += m_innerScene.UpdatePrimTexture;
|
||||
client.OnTeleportLocationRequest += RequestTeleportLocation;
|
||||
client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
|
||||
client.OnObjectSelect += SelectPrim;
|
||||
client.OnObjectDeselect += DeselectPrim;
|
||||
client.OnGrabUpdate += m_innerScene.MoveObject;
|
||||
@@ -2081,6 +2082,21 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to teleport agent to landmark.
|
||||
/// </summary>
|
||||
/// <param name="remoteClient"></param>
|
||||
/// <param name="regionHandle"></param>
|
||||
/// <param name="position"></param>
|
||||
public void RequestTeleportLandmark(IClientAPI remoteClient, ulong regionHandle, LLVector3 position)
|
||||
{
|
||||
if (m_scenePresences.ContainsKey(remoteClient.AgentId))
|
||||
{
|
||||
m_sceneGridService.RequestTeleportToLocation(m_scenePresences[remoteClient.AgentId], regionHandle,
|
||||
position, LLVector3.Zero, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Agent is crossing the border into a neighbouring region. Tell the neighbour about it!
|
||||
/// </summary>
|
||||
|
||||
@@ -270,6 +270,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
}
|
||||
|
||||
m_pos = value;
|
||||
m_parentPosition=new LLVector3(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -602,7 +603,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
/// <param name="pos"></param>
|
||||
public void Teleport(LLVector3 pos)
|
||||
{
|
||||
RemoveFromPhysicalScene();
|
||||
Velocity = new LLVector3(0, 0, 0);
|
||||
AbsolutePosition = pos;
|
||||
AddToPhysicalScene();
|
||||
SendTerseUpdateToAllClients();
|
||||
}
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
public event SetAlwaysRun OnSetAlwaysRun;
|
||||
|
||||
Reference in New Issue
Block a user