diff options
Fixed the bug that makes a region use its water height as its name (in regionhandshake), which lead to most regions being called "20". (applied fix to sugilite)
Rearranged some of the methods in ClientView.API.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/OpenSim.RegionServer/ClientView.API.cs | 333 |
1 files changed, 195 insertions, 138 deletions
diff --git a/OpenSim/OpenSim.RegionServer/ClientView.API.cs b/OpenSim/OpenSim.RegionServer/ClientView.API.cs index b9773c6..3badec9 100644 --- a/OpenSim/OpenSim.RegionServer/ClientView.API.cs +++ b/OpenSim/OpenSim.RegionServer/ClientView.API.cs | |||
@@ -147,7 +147,7 @@ namespace OpenSim | |||
147 | 147 | ||
148 | handshake.RegionInfo.RegionFlags = (uint)regionInfo.estateSettings.regionFlags; | 148 | handshake.RegionInfo.RegionFlags = (uint)regionInfo.estateSettings.regionFlags; |
149 | 149 | ||
150 | handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.estateSettings.waterHeight + "\0"); | 150 | handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.RegionName + "\0"); |
151 | handshake.RegionInfo.SimOwner = regionInfo.MasterAvatarAssignedUUID; | 151 | handshake.RegionInfo.SimOwner = regionInfo.MasterAvatarAssignedUUID; |
152 | handshake.RegionInfo.TerrainBase0 = regionInfo.estateSettings.terrainBase0; | 152 | handshake.RegionInfo.TerrainBase0 = regionInfo.estateSettings.terrainBase0; |
153 | handshake.RegionInfo.TerrainBase1 = regionInfo.estateSettings.terrainBase1; | 153 | handshake.RegionInfo.TerrainBase1 = regionInfo.estateSettings.terrainBase1; |
@@ -266,6 +266,12 @@ namespace OpenSim | |||
266 | } | 266 | } |
267 | } | 267 | } |
268 | 268 | ||
269 | /// <summary> | ||
270 | /// | ||
271 | /// </summary> | ||
272 | /// <param name="neighbourHandle"></param> | ||
273 | /// <param name="neighbourIP"></param> | ||
274 | /// <param name="neighbourPort"></param> | ||
269 | public void InformClientOfNeighbour(ulong neighbourHandle, System.Net.IPAddress neighbourIP, ushort neighbourPort) | 275 | public void InformClientOfNeighbour(ulong neighbourHandle, System.Net.IPAddress neighbourIP, ushort neighbourPort) |
270 | { | 276 | { |
271 | EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket(); | 277 | EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket(); |
@@ -281,6 +287,10 @@ namespace OpenSim | |||
281 | OutPacket(enablesimpacket); | 287 | OutPacket(enablesimpacket); |
282 | } | 288 | } |
283 | 289 | ||
290 | /// <summary> | ||
291 | /// | ||
292 | /// </summary> | ||
293 | /// <returns></returns> | ||
284 | public AgentCircuitData RequestClientInfo() | 294 | public AgentCircuitData RequestClientInfo() |
285 | { | 295 | { |
286 | AgentCircuitData agentData = new AgentCircuitData(); | 296 | AgentCircuitData agentData = new AgentCircuitData(); |
@@ -383,70 +393,6 @@ namespace OpenSim | |||
383 | 393 | ||
384 | } | 394 | } |
385 | 395 | ||
386 | |||
387 | /// <summary> | ||
388 | /// | ||
389 | /// </summary> | ||
390 | /// <param name="objdata"></param> | ||
391 | protected void SetDefaultAvatarPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata) | ||
392 | { | ||
393 | objdata.PSBlock = new byte[0]; | ||
394 | objdata.ExtraParams = new byte[1]; | ||
395 | objdata.MediaURL = new byte[0]; | ||
396 | objdata.NameValue = new byte[0]; | ||
397 | objdata.Text = new byte[0]; | ||
398 | objdata.TextColor = new byte[4]; | ||
399 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
400 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
401 | objdata.Material = 4; | ||
402 | objdata.TextureAnim = new byte[0]; | ||
403 | objdata.Sound = LLUUID.Zero; | ||
404 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); | ||
405 | objdata.TextureEntry = ntex.ToBytes(); | ||
406 | objdata.State = 0; | ||
407 | objdata.Data = new byte[0]; | ||
408 | |||
409 | objdata.ObjectData = new byte[76]; | ||
410 | objdata.ObjectData[15] = 128; | ||
411 | objdata.ObjectData[16] = 63; | ||
412 | objdata.ObjectData[56] = 128; | ||
413 | objdata.ObjectData[61] = 102; | ||
414 | objdata.ObjectData[62] = 40; | ||
415 | objdata.ObjectData[63] = 61; | ||
416 | objdata.ObjectData[64] = 189; | ||
417 | } | ||
418 | |||
419 | /// <summary> | ||
420 | /// | ||
421 | /// </summary> | ||
422 | /// <returns></returns> | ||
423 | protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket() | ||
424 | { | ||
425 | libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); | ||
426 | |||
427 | SetDefaultAvatarPacketValues(ref objdata); | ||
428 | objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); | ||
429 | objdata.PathCurve = 16; | ||
430 | objdata.ProfileCurve = 1; | ||
431 | objdata.PathScaleX = 100; | ||
432 | objdata.PathScaleY = 100; | ||
433 | objdata.ParentID = 0; | ||
434 | objdata.OwnerID = LLUUID.Zero; | ||
435 | objdata.Scale = new LLVector3(1, 1, 1); | ||
436 | objdata.PCode = 47; | ||
437 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
438 | libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16); | ||
439 | pos.X = 100f; | ||
440 | objdata.ID = 8880000; | ||
441 | objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0"); | ||
442 | libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f); | ||
443 | //objdata.FullID=user.AgentID; | ||
444 | byte[] pb = pos.GetBytes(); | ||
445 | Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length); | ||
446 | |||
447 | return objdata; | ||
448 | } | ||
449 | |||
450 | #endregion | 396 | #endregion |
451 | 397 | ||
452 | #region Primitive Packet/data Sending Methods | 398 | #region Primitive Packet/data Sending Methods |
@@ -521,78 +467,13 @@ namespace OpenSim | |||
521 | } | 467 | } |
522 | 468 | ||
523 | /// <summary> | 469 | /// <summary> |
524 | /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) | 470 | /// |
525 | /// </summary> | ||
526 | /// <param name="primData"></param> | ||
527 | /// <returns></returns> | ||
528 | protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID) | ||
529 | { | ||
530 | ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); | ||
531 | this.SetDefaultPrimPacketValues(objupdate); | ||
532 | objupdate.UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456; | ||
533 | this.SetPrimPacketShapeData(objupdate, primData, textureID); | ||
534 | |||
535 | return objupdate; | ||
536 | } | ||
537 | |||
538 | /// <summary> | ||
539 | /// Set some default values in a ObjectUpdatePacket | ||
540 | /// </summary> | ||
541 | /// <param name="objdata"></param> | ||
542 | protected void SetDefaultPrimPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata) | ||
543 | { | ||
544 | objdata.PSBlock = new byte[0]; | ||
545 | objdata.ExtraParams = new byte[1]; | ||
546 | objdata.MediaURL = new byte[0]; | ||
547 | objdata.NameValue = new byte[0]; | ||
548 | objdata.Text = new byte[0]; | ||
549 | objdata.TextColor = new byte[4]; | ||
550 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
551 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
552 | objdata.Material = 3; | ||
553 | objdata.TextureAnim = new byte[0]; | ||
554 | objdata.Sound = LLUUID.Zero; | ||
555 | objdata.State = 0; | ||
556 | objdata.Data = new byte[0]; | ||
557 | |||
558 | objdata.ObjectData = new byte[60]; | ||
559 | objdata.ObjectData[46] = 128; | ||
560 | objdata.ObjectData[47] = 63; | ||
561 | } | ||
562 | |||
563 | /// <summary> | ||
564 | /// Copy the data from a PrimData object to a ObjectUpdatePacket | ||
565 | /// </summary> | 471 | /// </summary> |
566 | /// <param name="objectData"></param> | 472 | /// <param name="regionHandle"></param> |
567 | /// <param name="primData"></param> | 473 | /// <param name="timeDilation"></param> |
568 | protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID) | 474 | /// <param name="localID"></param> |
569 | { | 475 | /// <param name="position"></param> |
570 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID); | 476 | /// <param name="rotation"></param> |
571 | objectData.TextureEntry = ntex.ToBytes(); | ||
572 | objectData.OwnerID = primData.OwnerID; | ||
573 | objectData.PCode = primData.PCode; | ||
574 | objectData.PathBegin =primData.PathBegin; | ||
575 | objectData.PathEnd = primData.PathEnd; | ||
576 | objectData.PathScaleX = primData.PathScaleX; | ||
577 | objectData.PathScaleY = primData.PathScaleY; | ||
578 | objectData.PathShearX = primData.PathShearX; | ||
579 | objectData.PathShearY = primData.PathShearY; | ||
580 | objectData.PathSkew = primData.PathSkew; | ||
581 | objectData.ProfileBegin = primData.ProfileBegin; | ||
582 | objectData.ProfileEnd = primData.ProfileEnd; | ||
583 | objectData.Scale = primData.Scale; | ||
584 | objectData.PathCurve = primData.PathCurve; | ||
585 | objectData.ProfileCurve = primData.ProfileCurve; | ||
586 | objectData.ParentID = primData.ParentID; | ||
587 | objectData.ProfileHollow = primData.ProfileHollow; | ||
588 | objectData.PathRadiusOffset = primData.PathRadiusOffset; | ||
589 | objectData.PathRevolutions = primData.PathRevolutions; | ||
590 | objectData.PathTaperX = primData.PathTaperX; | ||
591 | objectData.PathTaperY = primData.PathTaperY; | ||
592 | objectData.PathTwist = primData.PathTwist; | ||
593 | objectData.PathTwistBegin = primData.PathTwistBegin; | ||
594 | } | ||
595 | |||
596 | public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation) | 477 | public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation) |
597 | { | 478 | { |
598 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); | 479 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); |
@@ -604,6 +485,12 @@ namespace OpenSim | |||
604 | this.OutPacket(terse); | 485 | this.OutPacket(terse); |
605 | } | 486 | } |
606 | 487 | ||
488 | #endregion | ||
489 | |||
490 | #endregion | ||
491 | |||
492 | #region Helper Methods | ||
493 | |||
607 | /// <summary> | 494 | /// <summary> |
608 | /// | 495 | /// |
609 | /// </summary> | 496 | /// </summary> |
@@ -625,7 +512,7 @@ namespace OpenSim | |||
625 | bytes[i++] = (byte)((ID >> 24) % 256); | 512 | bytes[i++] = (byte)((ID >> 24) % 256); |
626 | bytes[i++] = 0; | 513 | bytes[i++] = 0; |
627 | bytes[i++] = 0; | 514 | bytes[i++] = 0; |
628 | 515 | ||
629 | byte[] pb = position.GetBytes(); | 516 | byte[] pb = position.GetBytes(); |
630 | Array.Copy(pb, 0, bytes, i, pb.Length); | 517 | Array.Copy(pb, 0, bytes, i, pb.Length); |
631 | i += 12; | 518 | i += 12; |
@@ -674,8 +561,178 @@ namespace OpenSim | |||
674 | dat.Data = bytes; | 561 | dat.Data = bytes; |
675 | return dat; | 562 | return dat; |
676 | } | 563 | } |
677 | #endregion | ||
678 | 564 | ||
565 | |||
566 | /// <summary> | ||
567 | /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) | ||
568 | /// </summary> | ||
569 | /// <param name="primData"></param> | ||
570 | /// <returns></returns> | ||
571 | protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID) | ||
572 | { | ||
573 | ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); | ||
574 | this.SetDefaultPrimPacketValues(objupdate); | ||
575 | objupdate.UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456; | ||
576 | this.SetPrimPacketShapeData(objupdate, primData, textureID); | ||
577 | |||
578 | return objupdate; | ||
579 | } | ||
580 | |||
581 | /// <summary> | ||
582 | /// Copy the data from a PrimData object to a ObjectUpdatePacket | ||
583 | /// </summary> | ||
584 | /// <param name="objectData"></param> | ||
585 | /// <param name="primData"></param> | ||
586 | protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID) | ||
587 | { | ||
588 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID); | ||
589 | objectData.TextureEntry = ntex.ToBytes(); | ||
590 | objectData.OwnerID = primData.OwnerID; | ||
591 | objectData.PCode = primData.PCode; | ||
592 | objectData.PathBegin = primData.PathBegin; | ||
593 | objectData.PathEnd = primData.PathEnd; | ||
594 | objectData.PathScaleX = primData.PathScaleX; | ||
595 | objectData.PathScaleY = primData.PathScaleY; | ||
596 | objectData.PathShearX = primData.PathShearX; | ||
597 | objectData.PathShearY = primData.PathShearY; | ||
598 | objectData.PathSkew = primData.PathSkew; | ||
599 | objectData.ProfileBegin = primData.ProfileBegin; | ||
600 | objectData.ProfileEnd = primData.ProfileEnd; | ||
601 | objectData.Scale = primData.Scale; | ||
602 | objectData.PathCurve = primData.PathCurve; | ||
603 | objectData.ProfileCurve = primData.ProfileCurve; | ||
604 | objectData.ParentID = primData.ParentID; | ||
605 | objectData.ProfileHollow = primData.ProfileHollow; | ||
606 | objectData.PathRadiusOffset = primData.PathRadiusOffset; | ||
607 | objectData.PathRevolutions = primData.PathRevolutions; | ||
608 | objectData.PathTaperX = primData.PathTaperX; | ||
609 | objectData.PathTaperY = primData.PathTaperY; | ||
610 | objectData.PathTwist = primData.PathTwist; | ||
611 | objectData.PathTwistBegin = primData.PathTwistBegin; | ||
612 | } | ||
613 | |||
614 | /// <summary> | ||
615 | /// Set some default values in a ObjectUpdatePacket | ||
616 | /// </summary> | ||
617 | /// <param name="objdata"></param> | ||
618 | protected void SetDefaultPrimPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata) | ||
619 | { | ||
620 | objdata.PSBlock = new byte[0]; | ||
621 | objdata.ExtraParams = new byte[1]; | ||
622 | objdata.MediaURL = new byte[0]; | ||
623 | objdata.NameValue = new byte[0]; | ||
624 | objdata.Text = new byte[0]; | ||
625 | objdata.TextColor = new byte[4]; | ||
626 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
627 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
628 | objdata.Material = 3; | ||
629 | objdata.TextureAnim = new byte[0]; | ||
630 | objdata.Sound = LLUUID.Zero; | ||
631 | objdata.State = 0; | ||
632 | objdata.Data = new byte[0]; | ||
633 | |||
634 | objdata.ObjectData = new byte[60]; | ||
635 | objdata.ObjectData[46] = 128; | ||
636 | objdata.ObjectData[47] = 63; | ||
637 | } | ||
638 | |||
639 | |||
640 | /// <summary> | ||
641 | /// | ||
642 | /// </summary> | ||
643 | /// <returns></returns> | ||
644 | protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket() | ||
645 | { | ||
646 | libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); | ||
647 | |||
648 | SetDefaultAvatarPacketValues(ref objdata); | ||
649 | objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); | ||
650 | objdata.PathCurve = 16; | ||
651 | objdata.ProfileCurve = 1; | ||
652 | objdata.PathScaleX = 100; | ||
653 | objdata.PathScaleY = 100; | ||
654 | objdata.ParentID = 0; | ||
655 | objdata.OwnerID = LLUUID.Zero; | ||
656 | objdata.Scale = new LLVector3(1, 1, 1); | ||
657 | objdata.PCode = 47; | ||
658 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
659 | libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16); | ||
660 | pos.X = 100f; | ||
661 | objdata.ID = 8880000; | ||
662 | objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0"); | ||
663 | libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f); | ||
664 | //objdata.FullID=user.AgentID; | ||
665 | byte[] pb = pos.GetBytes(); | ||
666 | Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length); | ||
667 | |||
668 | return objdata; | ||
669 | } | ||
670 | |||
671 | /// <summary> | ||
672 | /// | ||
673 | /// </summary> | ||
674 | /// <param name="objdata"></param> | ||
675 | protected void SetDefaultAvatarPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata) | ||
676 | { | ||
677 | objdata.PSBlock = new byte[0]; | ||
678 | objdata.ExtraParams = new byte[1]; | ||
679 | objdata.MediaURL = new byte[0]; | ||
680 | objdata.NameValue = new byte[0]; | ||
681 | objdata.Text = new byte[0]; | ||
682 | objdata.TextColor = new byte[4]; | ||
683 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
684 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
685 | objdata.Material = 4; | ||
686 | objdata.TextureAnim = new byte[0]; | ||
687 | objdata.Sound = LLUUID.Zero; | ||
688 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); | ||
689 | objdata.TextureEntry = ntex.ToBytes(); | ||
690 | objdata.State = 0; | ||
691 | objdata.Data = new byte[0]; | ||
692 | |||
693 | objdata.ObjectData = new byte[76]; | ||
694 | objdata.ObjectData[15] = 128; | ||
695 | objdata.ObjectData[16] = 63; | ||
696 | objdata.ObjectData[56] = 128; | ||
697 | objdata.ObjectData[61] = 102; | ||
698 | objdata.ObjectData[62] = 40; | ||
699 | objdata.ObjectData[63] = 61; | ||
700 | objdata.ObjectData[64] = 189; | ||
701 | } | ||
702 | |||
703 | /// <summary> | ||
704 | /// | ||
705 | /// </summary> | ||
706 | /// <param name="addPacket"></param> | ||
707 | /// <returns></returns> | ||
708 | protected PrimData CreatePrimFromObjectAdd(ObjectAddPacket addPacket) | ||
709 | { | ||
710 | PrimData PData = new PrimData(); | ||
711 | PData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
712 | PData.PCode = addPacket.ObjectData.PCode; | ||
713 | PData.PathBegin = addPacket.ObjectData.PathBegin; | ||
714 | PData.PathEnd = addPacket.ObjectData.PathEnd; | ||
715 | PData.PathScaleX = addPacket.ObjectData.PathScaleX; | ||
716 | PData.PathScaleY = addPacket.ObjectData.PathScaleY; | ||
717 | PData.PathShearX = addPacket.ObjectData.PathShearX; | ||
718 | PData.PathShearY = addPacket.ObjectData.PathShearY; | ||
719 | PData.PathSkew = addPacket.ObjectData.PathSkew; | ||
720 | PData.ProfileBegin = addPacket.ObjectData.ProfileBegin; | ||
721 | PData.ProfileEnd = addPacket.ObjectData.ProfileEnd; | ||
722 | PData.Scale = addPacket.ObjectData.Scale; | ||
723 | PData.PathCurve = addPacket.ObjectData.PathCurve; | ||
724 | PData.ProfileCurve = addPacket.ObjectData.ProfileCurve; | ||
725 | PData.ParentID = 0; | ||
726 | PData.ProfileHollow = addPacket.ObjectData.ProfileHollow; | ||
727 | PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; | ||
728 | PData.PathRevolutions = addPacket.ObjectData.PathRevolutions; | ||
729 | PData.PathTaperX = addPacket.ObjectData.PathTaperX; | ||
730 | PData.PathTaperY = addPacket.ObjectData.PathTaperY; | ||
731 | PData.PathTwist = addPacket.ObjectData.PathTwist; | ||
732 | PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin; | ||
733 | |||
734 | return PData; | ||
735 | } | ||
679 | #endregion | 736 | #endregion |
680 | 737 | ||
681 | } | 738 | } |