From ef0e5e913e2c22f8e2cba96d54436443b573c1ed Mon Sep 17 00:00:00 2001
From: MW
Date: Sun, 17 Jun 2007 14:10:19 +0000
Subject: Very Preliminary local teleporting added (currently only can
teleport within the current region). Now need to add teleporting between
regions and use of the dynamic texture for the terrain.
---
OpenSim/OpenSim.RegionServer/ClientView.API.cs | 105 ++++++++++++++++++++++---
1 file changed, 93 insertions(+), 12 deletions(-)
(limited to 'OpenSim/OpenSim.RegionServer/ClientView.API.cs')
diff --git a/OpenSim/OpenSim.RegionServer/ClientView.API.cs b/OpenSim/OpenSim.RegionServer/ClientView.API.cs
index 0ace92c..80719d6 100644
--- a/OpenSim/OpenSim.RegionServer/ClientView.API.cs
+++ b/OpenSim/OpenSim.RegionServer/ClientView.API.cs
@@ -63,6 +63,8 @@ namespace OpenSim
public event GenericCall2 OnStopMovement;
public event NewAvatar OnNewAvatar;
public event GenericCall6 OnRemoveAvatar;
+ public event RequestMapBlocks OnRequestMapBlocks;
+ public event TeleportLocationRequest OnTeleportLocationRequest;
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
public event ParcelDivideRequest OnParcelDivideRequest;
@@ -155,7 +157,7 @@ namespace OpenSim
handshake.RegionInfo.TerrainBase3 = regionInfo.estateSettings.terrainBase3;
handshake.RegionInfo.TerrainDetail0 = regionInfo.estateSettings.terrainDetail0;
handshake.RegionInfo.TerrainDetail1 = regionInfo.estateSettings.terrainDetail1;
- handshake.RegionInfo.TerrainDetail2 =regionInfo.estateSettings.terrainDetail2;
+ handshake.RegionInfo.TerrainDetail2 = regionInfo.estateSettings.terrainDetail2;
handshake.RegionInfo.TerrainDetail3 = regionInfo.estateSettings.terrainDetail3;
handshake.RegionInfo.CacheID = LLUUID.Random(); //I guess this is for the client to remember an old setting?
@@ -166,7 +168,7 @@ namespace OpenSim
///
///
///
- public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos)
+ public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look)
{
AgentMovementCompletePacket mov = new AgentMovementCompletePacket();
mov.AgentData.SessionID = this.SessionID;
@@ -182,16 +184,16 @@ namespace OpenSim
{
mov.Data.Position = this.startpos;
}
- mov.Data.LookAt = new LLVector3(0.99f, 0.042f, 0);
+ mov.Data.LookAt = look;
OutPacket(mov);
}
public void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
{
- SendChatMessage( Helpers.StringToField( message ), type, fromPos, fromName, fromAgentID);
+ SendChatMessage(Helpers.StringToField(message), type, fromPos, fromName, fromAgentID);
}
-
+
///
///
///
@@ -216,7 +218,7 @@ namespace OpenSim
this.OutPacket(reply);
}
-
+
///
/// Send the region heightmap to the client
///
@@ -272,7 +274,7 @@ namespace OpenSim
OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "ClientView API .cs: SendLayerData() - Failed with exception " + e.ToString());
}
}
-
+
///
///
///
@@ -314,8 +316,8 @@ namespace OpenSim
public void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, System.Net.IPAddress newRegionIP, ushort newRegionPort)
{
- LLVector3 look = new LLVector3(lookAt.X *10, lookAt.Y *10, lookAt.Z *10);
-
+ LLVector3 look = new LLVector3(lookAt.X * 10, lookAt.Y * 10, lookAt.Z * 10);
+
CrossedRegionPacket newSimPack = new CrossedRegionPacket();
newSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock();
newSimPack.AgentData.AgentID = this.AgentID;
@@ -334,7 +336,86 @@ namespace OpenSim
newSimPack.RegionData.SeedCapability = new byte[0];
this.OutPacket(newSimPack);
- this.DowngradeClient();
+ //this.DowngradeClient();
+ }
+
+ public void SendMapBlock(List mapBlocks)
+ {
+ System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+
+ MapBlockReplyPacket mapReply = new MapBlockReplyPacket();
+ mapReply.AgentData.AgentID = this.AgentID;
+ mapReply.Data = new MapBlockReplyPacket.DataBlock[mapBlocks.Count];
+ mapReply.AgentData.Flags = 0;
+
+ for (int i = 0; i < mapBlocks.Count; i++)
+ {
+ mapReply.Data[i] = new MapBlockReplyPacket.DataBlock();
+ mapReply.Data[i].MapImageID = mapBlocks[i].MapImageId;
+ mapReply.Data[i].X = mapBlocks[i].X;
+ mapReply.Data[i].Y = mapBlocks[i].Y;
+ mapReply.Data[i].WaterHeight = mapBlocks[i].WaterHeight;
+ mapReply.Data[i].Name = _enc.GetBytes(mapBlocks[i].Name);
+ mapReply.Data[i].RegionFlags = mapBlocks[i].RegionFlags;
+ mapReply.Data[i].Access = mapBlocks[i].Access;
+ mapReply.Data[i].Agents = mapBlocks[i].Agents;
+ }
+ this.OutPacket(mapReply);
+ }
+
+ public void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags)
+ {
+ TeleportLocalPacket tpLocal2 = new TeleportLocalPacket();
+ tpLocal2.Info.AgentID = this.AgentID;
+ tpLocal2.Info.TeleportFlags = flags;
+ tpLocal2.Info.LocationID = 2;
+ tpLocal2.Info.LookAt = lookAt;
+ tpLocal2.Info.Position = position;
+ OutPacket(tpLocal2);
+ }
+
+ public void SendRegionTeleport(ulong regionHandle, byte simAccess, string ipAddress, ushort ipPort, uint locationID, uint flags)
+ {
+ TeleportFinishPacket Teleport = new TeleportFinishPacket();
+ Teleport.Info.AgentID = this.AgentID;
+ Teleport.Info.RegionHandle = regionHandle;
+ Teleport.Info.SimAccess = simAccess;
+ Teleport.Info.SeedCapability = new byte[0];
+
+ System.Net.IPAddress oIP = System.Net.IPAddress.Parse(ipAddress);
+ byte[] byteIP = oIP.GetAddressBytes();
+ uint ip = (uint)byteIP[3] << 24;
+ ip += (uint)byteIP[2] << 16;
+ ip += (uint)byteIP[1] << 8;
+ ip += (uint)byteIP[0];
+
+ Teleport.Info.SimIP = ip;
+ Teleport.Info.SimPort = ipPort;
+ Teleport.Info.LocationID = 4;
+ Teleport.Info.TeleportFlags = 1 << 4;
+ OutPacket(Teleport);
+ }
+
+ ///
+ ///
+ ///
+ public void SendTeleportCancel()
+ {
+ TeleportCancelPacket tpCancel = new TeleportCancelPacket();
+ tpCancel.Info.SessionID = this.SessionID;
+ tpCancel.Info.AgentID = this.AgentID;
+
+ OutPacket(tpCancel);
+ }
+
+ ///
+ ///
+ ///
+ public void SendTeleportLocationStart()
+ {
+ TeleportStartPacket tpStart = new TeleportStartPacket();
+ tpStart.Info.TeleportFlags = 16; // Teleport via location
+ OutPacket(tpStart);
}
#region Appearance/ Wearables Methods
@@ -511,7 +592,7 @@ namespace OpenSim
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID);
outPacket.ObjectData[0].ID = localID;
- outPacket.ObjectData[0].FullID = primData.FullID;
+ outPacket.ObjectData[0].FullID = primData.FullID;
byte[] pb = pos.GetBytes();
Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length);
@@ -570,7 +651,7 @@ namespace OpenSim
ushort InternVelocityY;
ushort InternVelocityZ;
Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(0, 0, 0);
-
+
internDirec = new Axiom.MathLib.Vector3(velocity.X, velocity.Y, velocity.Z);
internDirec = internDirec / 128.0f;
--
cgit v1.1