From 7c1f17b994ca987df2167101054f523cc33d7fb9 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Wed, 16 Apr 2008 14:10:54 +0000 Subject: * 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. --- OpenSim/Region/Environment/Scenes/Scene.Inventory.cs | 15 ++++++++++++++- OpenSim/Region/Environment/Scenes/Scene.cs | 16 ++++++++++++++++ OpenSim/Region/Environment/Scenes/ScenePresence.cs | 4 ++++ 3 files changed, 34 insertions(+), 1 deletion(-) (limited to 'OpenSim/Region/Environment') diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 97d09aa..ff0f3a7 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -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); diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 464926d..08cf3d8 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -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; @@ -2082,6 +2083,21 @@ namespace OpenSim.Region.Environment.Scenes } /// + /// Tries to teleport agent to landmark. + /// + /// + /// + /// + 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); + } + } + + /// /// Agent is crossing the border into a neighbouring region. Tell the neighbour about it! /// /// diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 795224e..8b8373d 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -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 /// public void Teleport(LLVector3 pos) { + RemoveFromPhysicalScene(); + Velocity = new LLVector3(0, 0, 0); AbsolutePosition = pos; + AddToPhysicalScene(); SendTerseUpdateToAllClients(); } -- cgit v1.1