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