diff options
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.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/OpenSim.RegionServer/ClientView.API.cs | 105 |
1 files changed, 93 insertions, 12 deletions
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 | |||
63 | public event GenericCall2 OnStopMovement; | 63 | public event GenericCall2 OnStopMovement; |
64 | public event NewAvatar OnNewAvatar; | 64 | public event NewAvatar OnNewAvatar; |
65 | public event GenericCall6 OnRemoveAvatar; | 65 | public event GenericCall6 OnRemoveAvatar; |
66 | public event RequestMapBlocks OnRequestMapBlocks; | ||
67 | public event TeleportLocationRequest OnTeleportLocationRequest; | ||
66 | 68 | ||
67 | public event ParcelPropertiesRequest OnParcelPropertiesRequest; | 69 | public event ParcelPropertiesRequest OnParcelPropertiesRequest; |
68 | public event ParcelDivideRequest OnParcelDivideRequest; | 70 | public event ParcelDivideRequest OnParcelDivideRequest; |
@@ -155,7 +157,7 @@ namespace OpenSim | |||
155 | handshake.RegionInfo.TerrainBase3 = regionInfo.estateSettings.terrainBase3; | 157 | handshake.RegionInfo.TerrainBase3 = regionInfo.estateSettings.terrainBase3; |
156 | handshake.RegionInfo.TerrainDetail0 = regionInfo.estateSettings.terrainDetail0; | 158 | handshake.RegionInfo.TerrainDetail0 = regionInfo.estateSettings.terrainDetail0; |
157 | handshake.RegionInfo.TerrainDetail1 = regionInfo.estateSettings.terrainDetail1; | 159 | handshake.RegionInfo.TerrainDetail1 = regionInfo.estateSettings.terrainDetail1; |
158 | handshake.RegionInfo.TerrainDetail2 =regionInfo.estateSettings.terrainDetail2; | 160 | handshake.RegionInfo.TerrainDetail2 = regionInfo.estateSettings.terrainDetail2; |
159 | handshake.RegionInfo.TerrainDetail3 = regionInfo.estateSettings.terrainDetail3; | 161 | handshake.RegionInfo.TerrainDetail3 = regionInfo.estateSettings.terrainDetail3; |
160 | handshake.RegionInfo.CacheID = LLUUID.Random(); //I guess this is for the client to remember an old setting? | 162 | handshake.RegionInfo.CacheID = LLUUID.Random(); //I guess this is for the client to remember an old setting? |
161 | 163 | ||
@@ -166,7 +168,7 @@ namespace OpenSim | |||
166 | /// | 168 | /// |
167 | /// </summary> | 169 | /// </summary> |
168 | /// <param name="regInfo"></param> | 170 | /// <param name="regInfo"></param> |
169 | public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos) | 171 | public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look) |
170 | { | 172 | { |
171 | AgentMovementCompletePacket mov = new AgentMovementCompletePacket(); | 173 | AgentMovementCompletePacket mov = new AgentMovementCompletePacket(); |
172 | mov.AgentData.SessionID = this.SessionID; | 174 | mov.AgentData.SessionID = this.SessionID; |
@@ -182,16 +184,16 @@ namespace OpenSim | |||
182 | { | 184 | { |
183 | mov.Data.Position = this.startpos; | 185 | mov.Data.Position = this.startpos; |
184 | } | 186 | } |
185 | mov.Data.LookAt = new LLVector3(0.99f, 0.042f, 0); | 187 | mov.Data.LookAt = look; |
186 | 188 | ||
187 | OutPacket(mov); | 189 | OutPacket(mov); |
188 | } | 190 | } |
189 | 191 | ||
190 | public void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) | 192 | public void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) |
191 | { | 193 | { |
192 | SendChatMessage( Helpers.StringToField( message ), type, fromPos, fromName, fromAgentID); | 194 | SendChatMessage(Helpers.StringToField(message), type, fromPos, fromName, fromAgentID); |
193 | } | 195 | } |
194 | 196 | ||
195 | /// <summary> | 197 | /// <summary> |
196 | /// | 198 | /// |
197 | /// </summary> | 199 | /// </summary> |
@@ -216,7 +218,7 @@ namespace OpenSim | |||
216 | this.OutPacket(reply); | 218 | this.OutPacket(reply); |
217 | } | 219 | } |
218 | 220 | ||
219 | 221 | ||
220 | /// <summary> | 222 | /// <summary> |
221 | /// Send the region heightmap to the client | 223 | /// Send the region heightmap to the client |
222 | /// </summary> | 224 | /// </summary> |
@@ -272,7 +274,7 @@ namespace OpenSim | |||
272 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "ClientView API .cs: SendLayerData() - Failed with exception " + e.ToString()); | 274 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "ClientView API .cs: SendLayerData() - Failed with exception " + e.ToString()); |
273 | } | 275 | } |
274 | } | 276 | } |
275 | 277 | ||
276 | /// <summary> | 278 | /// <summary> |
277 | /// | 279 | /// |
278 | /// </summary> | 280 | /// </summary> |
@@ -314,8 +316,8 @@ namespace OpenSim | |||
314 | 316 | ||
315 | public void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, System.Net.IPAddress newRegionIP, ushort newRegionPort) | 317 | public void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, System.Net.IPAddress newRegionIP, ushort newRegionPort) |
316 | { | 318 | { |
317 | LLVector3 look = new LLVector3(lookAt.X *10, lookAt.Y *10, lookAt.Z *10); | 319 | LLVector3 look = new LLVector3(lookAt.X * 10, lookAt.Y * 10, lookAt.Z * 10); |
318 | 320 | ||
319 | CrossedRegionPacket newSimPack = new CrossedRegionPacket(); | 321 | CrossedRegionPacket newSimPack = new CrossedRegionPacket(); |
320 | newSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); | 322 | newSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); |
321 | newSimPack.AgentData.AgentID = this.AgentID; | 323 | newSimPack.AgentData.AgentID = this.AgentID; |
@@ -334,7 +336,86 @@ namespace OpenSim | |||
334 | newSimPack.RegionData.SeedCapability = new byte[0]; | 336 | newSimPack.RegionData.SeedCapability = new byte[0]; |
335 | 337 | ||
336 | this.OutPacket(newSimPack); | 338 | this.OutPacket(newSimPack); |
337 | this.DowngradeClient(); | 339 | //this.DowngradeClient(); |
340 | } | ||
341 | |||
342 | public void SendMapBlock(List<MapBlockData> mapBlocks) | ||
343 | { | ||
344 | System.Text.Encoding _enc = System.Text.Encoding.ASCII; | ||
345 | |||
346 | MapBlockReplyPacket mapReply = new MapBlockReplyPacket(); | ||
347 | mapReply.AgentData.AgentID = this.AgentID; | ||
348 | mapReply.Data = new MapBlockReplyPacket.DataBlock[mapBlocks.Count]; | ||
349 | mapReply.AgentData.Flags = 0; | ||
350 | |||
351 | for (int i = 0; i < mapBlocks.Count; i++) | ||
352 | { | ||
353 | mapReply.Data[i] = new MapBlockReplyPacket.DataBlock(); | ||
354 | mapReply.Data[i].MapImageID = mapBlocks[i].MapImageId; | ||
355 | mapReply.Data[i].X = mapBlocks[i].X; | ||
356 | mapReply.Data[i].Y = mapBlocks[i].Y; | ||
357 | mapReply.Data[i].WaterHeight = mapBlocks[i].WaterHeight; | ||
358 | mapReply.Data[i].Name = _enc.GetBytes(mapBlocks[i].Name); | ||
359 | mapReply.Data[i].RegionFlags = mapBlocks[i].RegionFlags; | ||
360 | mapReply.Data[i].Access = mapBlocks[i].Access; | ||
361 | mapReply.Data[i].Agents = mapBlocks[i].Agents; | ||
362 | } | ||
363 | this.OutPacket(mapReply); | ||
364 | } | ||
365 | |||
366 | public void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags) | ||
367 | { | ||
368 | TeleportLocalPacket tpLocal2 = new TeleportLocalPacket(); | ||
369 | tpLocal2.Info.AgentID = this.AgentID; | ||
370 | tpLocal2.Info.TeleportFlags = flags; | ||
371 | tpLocal2.Info.LocationID = 2; | ||
372 | tpLocal2.Info.LookAt = lookAt; | ||
373 | tpLocal2.Info.Position = position; | ||
374 | OutPacket(tpLocal2); | ||
375 | } | ||
376 | |||
377 | public void SendRegionTeleport(ulong regionHandle, byte simAccess, string ipAddress, ushort ipPort, uint locationID, uint flags) | ||
378 | { | ||
379 | TeleportFinishPacket Teleport = new TeleportFinishPacket(); | ||
380 | Teleport.Info.AgentID = this.AgentID; | ||
381 | Teleport.Info.RegionHandle = regionHandle; | ||
382 | Teleport.Info.SimAccess = simAccess; | ||
383 | Teleport.Info.SeedCapability = new byte[0]; | ||
384 | |||
385 | System.Net.IPAddress oIP = System.Net.IPAddress.Parse(ipAddress); | ||
386 | byte[] byteIP = oIP.GetAddressBytes(); | ||
387 | uint ip = (uint)byteIP[3] << 24; | ||
388 | ip += (uint)byteIP[2] << 16; | ||
389 | ip += (uint)byteIP[1] << 8; | ||
390 | ip += (uint)byteIP[0]; | ||
391 | |||
392 | Teleport.Info.SimIP = ip; | ||
393 | Teleport.Info.SimPort = ipPort; | ||
394 | Teleport.Info.LocationID = 4; | ||
395 | Teleport.Info.TeleportFlags = 1 << 4; | ||
396 | OutPacket(Teleport); | ||
397 | } | ||
398 | |||
399 | /// <summary> | ||
400 | /// | ||
401 | /// </summary> | ||
402 | public void SendTeleportCancel() | ||
403 | { | ||
404 | TeleportCancelPacket tpCancel = new TeleportCancelPacket(); | ||
405 | tpCancel.Info.SessionID = this.SessionID; | ||
406 | tpCancel.Info.AgentID = this.AgentID; | ||
407 | |||
408 | OutPacket(tpCancel); | ||
409 | } | ||
410 | |||
411 | /// <summary> | ||
412 | /// | ||
413 | /// </summary> | ||
414 | public void SendTeleportLocationStart() | ||
415 | { | ||
416 | TeleportStartPacket tpStart = new TeleportStartPacket(); | ||
417 | tpStart.Info.TeleportFlags = 16; // Teleport via location | ||
418 | OutPacket(tpStart); | ||
338 | } | 419 | } |
339 | 420 | ||
340 | #region Appearance/ Wearables Methods | 421 | #region Appearance/ Wearables Methods |
@@ -511,7 +592,7 @@ namespace OpenSim | |||
511 | outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; | 592 | outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; |
512 | outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID); | 593 | outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID); |
513 | outPacket.ObjectData[0].ID = localID; | 594 | outPacket.ObjectData[0].ID = localID; |
514 | outPacket.ObjectData[0].FullID = primData.FullID; | 595 | outPacket.ObjectData[0].FullID = primData.FullID; |
515 | byte[] pb = pos.GetBytes(); | 596 | byte[] pb = pos.GetBytes(); |
516 | Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length); | 597 | Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length); |
517 | 598 | ||
@@ -570,7 +651,7 @@ namespace OpenSim | |||
570 | ushort InternVelocityY; | 651 | ushort InternVelocityY; |
571 | ushort InternVelocityZ; | 652 | ushort InternVelocityZ; |
572 | Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(0, 0, 0); | 653 | Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(0, 0, 0); |
573 | 654 | ||
574 | internDirec = new Axiom.MathLib.Vector3(velocity.X, velocity.Y, velocity.Z); | 655 | internDirec = new Axiom.MathLib.Vector3(velocity.X, velocity.Y, velocity.Z); |
575 | 656 | ||
576 | internDirec = internDirec / 128.0f; | 657 | internDirec = internDirec / 128.0f; |