aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs300
1 files changed, 159 insertions, 141 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs b/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs
index ca209b6..0f2d2a5 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs
@@ -111,8 +111,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
111 { 111 {
112 m_host.AddScriptLPS(1); 112 m_host.AddScriptLPS(1);
113 113
114 if(text.Length > 1023) 114 if (text.Length > 1023)
115 text=text.Substring(0, 1023); 115 text = text.Substring(0, 1023);
116 116
117 World.SimChat(Helpers.StringToField(text), 117 World.SimChat(Helpers.StringToField(text),
118 ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); 118 ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false);
@@ -129,13 +129,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
129 129
130 private LLUUID InventorySelf() 130 private LLUUID InventorySelf()
131 { 131 {
132 LLUUID invItemID=new LLUUID(); 132 LLUUID invItemID = new LLUUID();
133 133
134 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory) 134 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory)
135 { 135 {
136 if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID) 136 if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID)
137 { 137 {
138 invItemID=inv.Key; 138 invItemID = inv.Key;
139 break; 139 break;
140 } 140 }
141 } 141 }
@@ -300,7 +300,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
300 return angle; 300 return angle;
301 } 301 }
302 302
303
304 // Old implementation of llRot2Euler, now normalized 303 // Old implementation of llRot2Euler, now normalized
305 304
306 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r) 305 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r)
@@ -322,7 +321,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
322 return new LSL_Types.Vector3(0.0, -Math.PI / 2, NormalizeAngle(Math.Atan2((r.z * r.s + r.x * r.y), 0.5 - t.x - t.z))); 321 return new LSL_Types.Vector3(0.0, -Math.PI / 2, NormalizeAngle(Math.Atan2((r.z * r.s + r.x * r.y), 0.5 - t.x - t.z)));
323 } 322 }
324 323
325
326 // Xantor's newer llEuler2Rot() *try the second* inverted quaternions (-x,-y,-z,w) as LL seems to like 324 // Xantor's newer llEuler2Rot() *try the second* inverted quaternions (-x,-y,-z,w) as LL seems to like
327 // New and improved, now actually works as described. Prim rotates as expected as does llRot2Euler. 325 // New and improved, now actually works as described. Prim rotates as expected as does llRot2Euler.
328 326
@@ -363,7 +361,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
363 return new LSL_Types.Quaternion(x, y, z, s); 361 return new LSL_Types.Quaternion(x, y, z, s);
364 } 362 }
365 363
366
367 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up) 364 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up)
368 { 365 {
369 m_host.AddScriptLPS(1); 366 m_host.AddScriptLPS(1);
@@ -388,6 +385,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
388 m_host.AddScriptLPS(1); 385 m_host.AddScriptLPS(1);
389 return (new LSL_Types.Vector3(0, 0, 1) * r); 386 return (new LSL_Types.Vector3(0, 0, 1) * r);
390 } 387 }
388
391 public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 a, LSL_Types.Vector3 b) 389 public LSL_Types.Quaternion llRotBetween(LSL_Types.Vector3 a, LSL_Types.Vector3 b)
392 { 390 {
393 //A and B should both be normalized 391 //A and B should both be normalized
@@ -401,12 +399,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
401 399
402 return new LSL_Types.Quaternion(axis.x * s, axis.y * s, axis.z * s, (float)Math.Cos(angle / 2)); 400 return new LSL_Types.Quaternion(axis.x * s, axis.y * s, axis.z * s, (float)Math.Cos(angle / 2));
403 } 401 }
402
404 public void llWhisper(int channelID, string text) 403 public void llWhisper(int channelID, string text)
405 { 404 {
406 m_host.AddScriptLPS(1); 405 m_host.AddScriptLPS(1);
407 406
408 if(text.Length > 1023) 407 if (text.Length > 1023)
409 text=text.Substring(0, 1023); 408 text = text.Substring(0, 1023);
410 409
411 World.SimChat(Helpers.StringToField(text), 410 World.SimChat(Helpers.StringToField(text),
412 ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); 411 ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false);
@@ -419,8 +418,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
419 { 418 {
420 m_host.AddScriptLPS(1); 419 m_host.AddScriptLPS(1);
421 420
422 if(text.Length > 1023) 421 if (text.Length > 1023)
423 text=text.Substring(0, 1023); 422 text = text.Substring(0, 1023);
424 423
425 World.SimChat(Helpers.StringToField(text), 424 World.SimChat(Helpers.StringToField(text),
426 ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, true); 425 ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, true);
@@ -437,9 +436,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
437 return; 436 return;
438 } 437 }
439 438
440 439 if (text.Length > 1023)
441 if(text.Length > 1023) 440 text = text.Substring(0, 1023);
442 text=text.Substring(0, 1023);
443 441
444 m_host.AddScriptLPS(1); 442 m_host.AddScriptLPS(1);
445 443
@@ -486,7 +484,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
486 LLUUID.TryParse(id, out keyID); 484 LLUUID.TryParse(id, out keyID);
487 485
488 m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host); 486 m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host);
489 } 487 }
490 488
491 public void llSensorRemove() 489 public void llSensorRemove()
492 { 490 {
@@ -520,17 +518,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
520 if (SensedObject == null) 518 if (SensedObject == null)
521 return String.Empty; 519 return String.Empty;
522 return SensedObject.Name; 520 return SensedObject.Name;
523
524 } 521 }
525 522
526 public string llDetectedName(int number) 523 public string llDetectedName(int number)
527 { 524 {
528 m_host.AddScriptLPS(1); 525 m_host.AddScriptLPS(1);
529 LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number); 526 LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number);
530 if(sensedUUID != null) 527 if (sensedUUID != null)
531 return resolveName(sensedUUID); 528 return resolveName(sensedUUID);
532 return String.Empty; 529 return String.Empty;
533 } 530 }
534 531
535 public LLUUID uuidDetectedKey(int number) 532 public LLUUID uuidDetectedKey(int number)
536 { 533 {
@@ -540,7 +537,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
540 public EntityBase entityDetectedKey(int number) 537 public EntityBase entityDetectedKey(int number)
541 { 538 {
542 LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number); 539 LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number);
543 if(sensedUUID != null) 540 if (sensedUUID != null)
544 { 541 {
545 EntityBase SensedObject = null; 542 EntityBase SensedObject = null;
546 lock (World.Entities) 543 lock (World.Entities)
@@ -567,7 +564,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
567 // returns UUID of owner of object detected 564 // returns UUID of owner of object detected
568 m_host.AddScriptLPS(1); 565 m_host.AddScriptLPS(1);
569 EntityBase SensedObject = entityDetectedKey(number); 566 EntityBase SensedObject = entityDetectedKey(number);
570 if (SensedObject ==null) 567 if (SensedObject == null)
571 return String.Empty; 568 return String.Empty;
572 LLUUID SensedUUID = uuidDetectedKey(number); 569 LLUUID SensedUUID = uuidDetectedKey(number);
573 if (World.GetScenePresence(SensedUUID) == null) 570 if (World.GetScenePresence(SensedUUID) == null)
@@ -575,7 +572,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
575 // sensed object is not an avatar 572 // sensed object is not an avatar
576 // so get the owner of the sensed object 573 // so get the owner of the sensed object
577 SceneObjectPart SOP = World.GetSceneObjectPart(SensedUUID); 574 SceneObjectPart SOP = World.GetSceneObjectPart(SensedUUID);
578 if (SOP != null) { return SOP.ObjectOwner.ToString(); } 575 if (SOP != null)
576 {
577 return SOP.ObjectOwner.ToString();
578 }
579 } 579 }
580 else 580 else
581 { 581 {
@@ -583,9 +583,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
583 return SensedUUID.ToString(); 583 return SensedUUID.ToString();
584 } 584 }
585 585
586
587 return String.Empty; 586 return String.Empty;
588
589 } 587 }
590 588
591 public LSL_Types.LSLInteger llDetectedType(int number) 589 public LSL_Types.LSLInteger llDetectedType(int number)
@@ -599,14 +597,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
599 LLUUID SensedUUID = uuidDetectedKey(number); 597 LLUUID SensedUUID = uuidDetectedKey(number);
600 LSL_Types.Vector3 ZeroVector = new LSL_Types.Vector3(0, 0, 0); 598 LSL_Types.Vector3 ZeroVector = new LSL_Types.Vector3(0, 0, 0);
601 599
602 if (World.GetScenePresence(SensedUUID) != null) mask |= 0x01; // actor 600 if (World.GetScenePresence(SensedUUID) != null)
601 mask |= 0x01; // actor
602
603 if (SensedObject.Velocity.Equals(ZeroVector)) 603 if (SensedObject.Velocity.Equals(ZeroVector))
604 mask |= 0x04; // passive non-moving 604 mask |= 0x04; // passive non-moving
605 else 605 else
606 mask |= 0x02; // active moving 606 mask |= 0x02; // active moving
607 if (SensedObject is IScript) mask |= 0x08; // Scripted. It COULD have one hidden ...
608 return mask;
609 607
608 if (SensedObject is IScript)
609 mask |= 0x08; // Scripted. It COULD have one hidden ...
610
611 return mask;
610 } 612 }
611 613
612 public LSL_Types.Vector3 llDetectedPos(int number) 614 public LSL_Types.Vector3 llDetectedPos(int number)
@@ -627,7 +629,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
627 return new LSL_Types.Vector3(0, 0, 0); 629 return new LSL_Types.Vector3(0, 0, 0);
628 630
629 return new LSL_Types.Vector3(SensedObject.Velocity.X, SensedObject.Velocity.Y, SensedObject.Velocity.Z); 631 return new LSL_Types.Vector3(SensedObject.Velocity.X, SensedObject.Velocity.Y, SensedObject.Velocity.Z);
630 // return new LSL_Types.Vector3(); 632 // return new LSL_Types.Vector3();
631 } 633 }
632 634
633 public LSL_Types.Vector3 llDetectedGrab(int number) 635 public LSL_Types.Vector3 llDetectedGrab(int number)
@@ -702,8 +704,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
702 m_host.ScriptSetPhysicsStatus(true); 704 m_host.ScriptSetPhysicsStatus(true);
703 else 705 else
704 m_host.ScriptSetPhysicsStatus(false); 706 m_host.ScriptSetPhysicsStatus(false);
705
706 } 707 }
708
707 if ((status & BuiltIn_Commands_BaseClass.STATUS_PHANTOM) == BuiltIn_Commands_BaseClass.STATUS_PHANTOM) 709 if ((status & BuiltIn_Commands_BaseClass.STATUS_PHANTOM) == BuiltIn_Commands_BaseClass.STATUS_PHANTOM)
708 { 710 {
709 if (value == 1) 711 if (value == 1)
@@ -711,27 +713,32 @@ namespace OpenSim.Region.ScriptEngine.XEngine
711 else 713 else
712 m_host.ScriptSetPhantomStatus(false); 714 m_host.ScriptSetPhantomStatus(false);
713 } 715 }
716
714 if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) 717 if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS)
715 { 718 {
716 m_host.AddFlag(LLObject.ObjectFlags.CastShadows); 719 m_host.AddFlag(LLObject.ObjectFlags.CastShadows);
717 } 720 }
721
718 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) 722 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X)
719 { 723 {
720 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X; 724 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X;
721
722 } 725 }
726
723 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) 727 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y)
724 { 728 {
725 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y; 729 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y;
726 } 730 }
731
727 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) 732 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z)
728 { 733 {
729 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z; 734 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z;
730 } 735 }
736
731 if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) 737 if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB)
732 { 738 {
733 NotImplemented("llSetStatus - STATUS_BLOCK_GRAB"); 739 NotImplemented("llSetStatus - STATUS_BLOCK_GRAB");
734 } 740 }
741
735 if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) 742 if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE)
736 { 743 {
737 if (value == 1) 744 if (value == 1)
@@ -739,18 +746,20 @@ namespace OpenSim.Region.ScriptEngine.XEngine
739 else 746 else
740 m_host.SetDieAtEdge(false); 747 m_host.SetDieAtEdge(false);
741 } 748 }
749
742 if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) 750 if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE)
743 { 751 {
744 NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE"); 752 NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE");
745 } 753 }
754
746 if ((status & BuiltIn_Commands_BaseClass.STATUS_SANDBOX) == BuiltIn_Commands_BaseClass.STATUS_SANDBOX) 755 if ((status & BuiltIn_Commands_BaseClass.STATUS_SANDBOX) == BuiltIn_Commands_BaseClass.STATUS_SANDBOX)
747 { 756 {
748 NotImplemented("llSetStatus - STATUS_SANDBOX"); 757 NotImplemented("llSetStatus - STATUS_SANDBOX");
749 } 758 }
759
750 if (statusrotationaxis != 0) 760 if (statusrotationaxis != 0)
751 { 761 {
752 m_host.SetAxisRotation(statusrotationaxis, value); 762 m_host.SetAxisRotation(statusrotationaxis, value);
753
754 } 763 }
755 } 764 }
756 765
@@ -766,23 +775,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine
766 return 1; 775 return 1;
767 } 776 }
768 return 0; 777 return 0;
778
769 case BuiltIn_Commands_BaseClass.STATUS_PHANTOM: 779 case BuiltIn_Commands_BaseClass.STATUS_PHANTOM:
770 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom) 780 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom)
771 { 781 {
772 return 1; 782 return 1;
773 } 783 }
774 return 0; 784 return 0;
785
775 case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS: 786 case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS:
776 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows) 787 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows)
777 { 788 {
778 return 1; 789 return 1;
779 } 790 }
780 return 0; 791 return 0;
792
781 case BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB: 793 case BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB:
782 NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); 794 NotImplemented("llGetStatus - STATUS_BLOCK_GRAB");
783 return 0; 795 return 0;
784 case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE:
785 796
797 case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE:
786 if (m_host.GetDieAtEdge()) 798 if (m_host.GetDieAtEdge())
787 return 1; 799 return 1;
788 else 800 else
@@ -791,15 +803,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine
791 case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE: 803 case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE:
792 NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); 804 NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE");
793 return 0; 805 return 0;
806
794 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_X: 807 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_X:
795 NotImplemented("llGetStatus - STATUS_ROTATE_X"); 808 NotImplemented("llGetStatus - STATUS_ROTATE_X");
796 return 0; 809 return 0;
810
797 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y: 811 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y:
798 NotImplemented("llGetStatus - STATUS_ROTATE_Y"); 812 NotImplemented("llGetStatus - STATUS_ROTATE_Y");
799 return 0; 813 return 0;
814
800 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z: 815 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z:
801 NotImplemented("llGetStatus - STATUS_ROTATE_Z"); 816 NotImplemented("llGetStatus - STATUS_ROTATE_Z");
802 return 0; 817 return 0;
818
803 case BuiltIn_Commands_BaseClass.STATUS_SANDBOX: 819 case BuiltIn_Commands_BaseClass.STATUS_SANDBOX:
804 NotImplemented("llGetStatus - STATUS_SANDBOX"); 820 NotImplemented("llGetStatus - STATUS_SANDBOX");
805 return 0; 821 return 0;
@@ -2499,17 +2515,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2499 2515
2500 string reply = String.Empty; 2516 string reply = String.Empty;
2501 2517
2502 switch(data) 2518 switch (data)
2503 { 2519 {
2504 case 1: // DATA_ONLINE (0|1) 2520 case 1: // DATA_ONLINE (0|1)
2505 // TODO: implement fetching of this information 2521 // TODO: implement fetching of this information
2506// if(userProfile.CurrentAgent.AgentOnline) 2522// if (userProfile.CurrentAgent.AgentOnline)
2507// reply = "1"; 2523// reply = "1";
2508// else 2524// else
2509 reply = "0"; 2525 reply = "0";
2510 break; 2526 break;
2511 case 2: // DATA_NAME (First Last) 2527 case 2: // DATA_NAME (First Last)
2512 reply = userProfile.FirstName+" "+userProfile.SurName; 2528 reply = userProfile.FirstName + " " + userProfile.SurName;
2513 break; 2529 break;
2514 case 3: // DATA_BORN (YYYY-MM-DD) 2530 case 3: // DATA_BORN (YYYY-MM-DD)
2515 DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); 2531 DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0);
@@ -2529,8 +2545,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2529 LLUUID rq = LLUUID.Random(); 2545 LLUUID rq = LLUUID.Random();
2530 2546
2531 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 2547 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
2532 m_Dataserver.RegisterRequest(m_localID, 2548 m_Dataserver.RegisterRequest(m_localID,
2533 m_itemID, rq.ToString()); 2549 m_itemID, rq.ToString());
2534 2550
2535 m_ScriptEngine.m_ASYNCLSLCommandManager. 2551 m_ScriptEngine.m_ASYNCLSLCommandManager.
2536 m_Dataserver.DataserverReply(rq.ToString(), reply); 2552 m_Dataserver.DataserverReply(rq.ToString(), reply);
@@ -2547,8 +2563,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2547 if (item.Type == 3 && item.Name == name) 2563 if (item.Type == 3 && item.Name == name)
2548 { 2564 {
2549 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 2565 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
2550 m_Dataserver.RegisterRequest(m_localID, 2566 m_Dataserver.RegisterRequest(m_localID,
2551 m_itemID, item.AssetID.ToString()); 2567 m_itemID, item.AssetID.ToString());
2552 2568
2553 LLVector3 region = new LLVector3( 2569 LLVector3 region = new LLVector3(
2554 World.RegionInfo.RegionLocX * Constants.RegionSize, 2570 World.RegionInfo.RegionLocX * Constants.RegionSize,
@@ -2565,8 +2581,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
2565 string reply = region.ToString(); 2581 string reply = region.ToString();
2566 2582
2567 m_ScriptEngine.m_ASYNCLSLCommandManager. 2583 m_ScriptEngine.m_ASYNCLSLCommandManager.
2568 m_Dataserver.DataserverReply(i.ToString(), 2584 m_Dataserver.DataserverReply(i.ToString(),
2569 reply); 2585 reply);
2570 }, false); 2586 }, false);
2571 2587
2572 return tid.ToString(); 2588 return tid.ToString();
@@ -3314,25 +3330,28 @@ namespace OpenSim.Region.ScriptEngine.XEngine
3314 { 3330 {
3315 switch (src[i]) 3331 switch (src[i])
3316 { 3332 {
3317 case '<' : 3333 case '<':
3318 parens++; 3334 parens++;
3319 length++; 3335 length++;
3320 break; 3336 break;
3321 case '>' : 3337 case '>':
3322 if (parens > 0) 3338 if (parens > 0)
3323 parens--; 3339 parens--;
3324 length++; 3340 length++;
3325 break; 3341 break;
3326 case ',' : 3342 case ',':
3327 if (parens == 0) 3343 if (parens == 0)
3328 { 3344 {
3329 result.Add(src.Substring(start,length).Trim()); 3345 result.Add(src.Substring(start,length).Trim());
3330 start += length+1; 3346 start += length+1;
3331 length = 0; 3347 length = 0;
3332 } else 3348 }
3349 else
3350 {
3333 length++; 3351 length++;
3352 }
3334 break; 3353 break;
3335 default : 3354 default:
3336 length++; 3355 length++;
3337 break; 3356 break;
3338 } 3357 }
@@ -3341,7 +3360,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
3341 result.Add(src.Substring(start,length).Trim()); 3360 result.Add(src.Substring(start,length).Trim());
3342 3361
3343 return result; 3362 return result;
3344
3345 } 3363 }
3346 3364
3347 /// <summary> 3365 /// <summary>
@@ -5290,11 +5308,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
5290 if (active[j]) 5308 if (active[j])
5291 { 5309 {
5292 // scan all of the markers 5310 // scan all of the markers
5293 if ((offset[j] = src.IndexOf((string)spcarray[j-seplen],beginning)) == -1) 5311 if ((offset[j] = src.IndexOf((string)spcarray[j-seplen], beginning)) == -1)
5294 { 5312 {
5295 // not present at all 5313 // not present at all
5296 active[j] = false; 5314 active[j] = false;
5297 } else 5315 }
5316 else
5298 { 5317 {
5299 // present and correct 5318 // present and correct
5300 if (offset[j] < offset[best]) 5319 if (offset[j] < offset[best])
@@ -5313,7 +5332,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
5313 { 5332 {
5314 // no markers were found on this pass 5333 // no markers were found on this pass
5315 // so we're pretty much done 5334 // so we're pretty much done
5316 tokens.Add(src.Substring(beginning, srclen-beginning)); 5335 tokens.Add(src.Substring(beginning, srclen - beginning));
5317 break; 5336 break;
5318 } 5337 }
5319 5338
@@ -5322,15 +5341,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
5322 5341
5323 tokens.Add(src.Substring(beginning,offset[best]-beginning)); 5342 tokens.Add(src.Substring(beginning,offset[best]-beginning));
5324 5343
5325 if (best<seplen) 5344 if (best < seplen)
5326 { 5345 {
5327 beginning = offset[best]+((string)separray[best]).Length; 5346 beginning = offset[best] + ((string)separray[best]).Length;
5328 } else 5347 }
5348 else
5329 { 5349 {
5330 beginning = offset[best]+((string)spcarray[best-seplen]).Length; 5350 beginning = offset[best] + ((string)spcarray[best - seplen]).Length;
5331 tokens.Add(spcarray[best-seplen]); 5351 tokens.Add(spcarray[best - seplen]);
5332 } 5352 }
5333
5334 } 5353 }
5335 5354
5336 // This an awkward an not very intuitive boundary case. If the 5355 // This an awkward an not very intuitive boundary case. If the
@@ -5475,60 +5494,60 @@ namespace OpenSim.Region.ScriptEngine.XEngine
5475 5494
5476 public string llRequestSimulatorData(string simulator, int data) 5495 public string llRequestSimulatorData(string simulator, int data)
5477 { 5496 {
5478try 5497 try
5479{ 5498 {
5480 m_host.AddScriptLPS(1); 5499 m_host.AddScriptLPS(1);
5481 5500
5482 string reply = String.Empty; 5501 string reply = String.Empty;
5483 5502
5484 RegionInfo info = m_ScriptEngine.World.RequestClosestRegion(simulator); 5503 RegionInfo info = m_ScriptEngine.World.RequestClosestRegion(simulator);
5485 5504
5486 switch(data) 5505 switch (data)
5487 { 5506 {
5488 case 5: // DATA_SIM_POS 5507 case 5: // DATA_SIM_POS
5489 if(info == null) 5508 if (info == null)
5490 return LLUUID.Zero.ToString(); 5509 return LLUUID.Zero.ToString();
5491 reply = new LSL_Types.Vector3( 5510 reply = new LSL_Types.Vector3(
5492 info.RegionLocX * Constants.RegionSize, 5511 info.RegionLocX * Constants.RegionSize,
5493 info.RegionLocY * Constants.RegionSize, 5512 info.RegionLocY * Constants.RegionSize,
5494 0).ToString(); 5513 0).ToString();
5495 break; 5514 break;
5496 case 6: // DATA_SIM_STATUS 5515 case 6: // DATA_SIM_STATUS
5497 if(info != null) 5516 if (info != null)
5498 reply = "up"; // Duh! 5517 reply = "up"; // Duh!
5499 else 5518 else
5500 reply = "unknown"; 5519 reply = "unknown";
5501 break; 5520 break;
5502 case 7: // DATA_SIM_RATING 5521 case 7: // DATA_SIM_RATING
5503 if(info == null) 5522 if (info == null)
5504 return LLUUID.Zero.ToString(); 5523 return LLUUID.Zero.ToString();
5505 int access = (int)info.EstateSettings.simAccess; 5524 int access = (int)info.EstateSettings.simAccess;
5506 if(access == 21) 5525 if (access == 21)
5507 reply = "MATURE"; 5526 reply = "MATURE";
5508 else if(access == 13) 5527 else if (access == 13)
5509 reply = "MATURE"; 5528 reply = "MATURE";
5510 else 5529 else
5511 reply = "UNKNOWN"; 5530 reply = "UNKNOWN";
5512 break; 5531 break;
5513 default: 5532 default:
5514 return LLUUID.Zero.ToString(); // Raise no event 5533 return LLUUID.Zero.ToString(); // Raise no event
5515 } 5534 }
5516 LLUUID rq = LLUUID.Random(); 5535 LLUUID rq = LLUUID.Random();
5517 5536
5518 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 5537 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
5519 m_Dataserver.RegisterRequest(m_localID, 5538 m_Dataserver.RegisterRequest(m_localID,
5520 m_itemID, rq.ToString()); 5539 m_itemID, rq.ToString());
5521 5540
5522 m_ScriptEngine.m_ASYNCLSLCommandManager. 5541 m_ScriptEngine.m_ASYNCLSLCommandManager.
5523 m_Dataserver.DataserverReply(rq.ToString(), reply); 5542 m_Dataserver.DataserverReply(rq.ToString(), reply);
5524 5543
5525 return tid.ToString(); 5544 return tid.ToString();
5526} 5545 }
5527catch(Exception e) 5546 catch(Exception e)
5528{ 5547 {
5529Console.WriteLine(e.ToString()); 5548 Console.WriteLine(e.ToString());
5530return LLUUID.Zero.ToString(); 5549 return LLUUID.Zero.ToString();
5531} 5550 }
5532 } 5551 }
5533 5552
5534 public void llForceMouselook(int mouselook) 5553 public void llForceMouselook(int mouselook)
@@ -5543,7 +5562,7 @@ return LLUUID.Zero.ToString();
5543 LLUUID key = new LLUUID(); 5562 LLUUID key = new LLUUID();
5544 if (LLUUID.TryParse(id,out key)) 5563 if (LLUUID.TryParse(id,out key))
5545 { 5564 {
5546 return (double)World.GetSceneObjectPart(World.Entities[key].LocalId).GetMass(); 5565 return (double) World.GetSceneObjectPart(World.Entities[key].LocalId).GetMass();
5547 } 5566 }
5548 return 0; 5567 return 0;
5549 } 5568 }
@@ -5562,7 +5581,6 @@ return LLUUID.Zero.ToString();
5562 5581
5563 public LSL_Types.list llListReplaceList(LSL_Types.list dest, LSL_Types.list src, int start, int end) 5582 public LSL_Types.list llListReplaceList(LSL_Types.list dest, LSL_Types.list src, int start, int end)
5564 { 5583 {
5565
5566 LSL_Types.list pref = null; 5584 LSL_Types.list pref = null;
5567 5585
5568 m_host.AddScriptLPS(1); 5586 m_host.AddScriptLPS(1);
@@ -5592,9 +5610,9 @@ return LLUUID.Zero.ToString();
5592 pref = dest.GetSublist(0,start-1); 5610 pref = dest.GetSublist(0,start-1);
5593 // Only add a suffix if there is something 5611 // Only add a suffix if there is something
5594 // beyond the end index (it's inclusive too). 5612 // beyond the end index (it's inclusive too).
5595 if (end+1 < dest.Length) 5613 if (end + 1 < dest.Length)
5596 { 5614 {
5597 return pref + src + dest.GetSublist(end+1,-1); 5615 return pref + src + dest.GetSublist(end + 1, -1);
5598 } 5616 }
5599 else 5617 else
5600 { 5618 {
@@ -5609,9 +5627,9 @@ return LLUUID.Zero.ToString();
5609 // is removed. 5627 // is removed.
5610 else 5628 else
5611 { 5629 {
5612 if (end+1 < dest.Length) 5630 if (end + 1 < dest.Length)
5613 { 5631 {
5614 return src + dest.GetSublist(end+1,-1); 5632 return src + dest.GetSublist(end + 1, -1);
5615 } 5633 }
5616 else 5634 else
5617 { 5635 {
@@ -5627,7 +5645,7 @@ return LLUUID.Zero.ToString();
5627 // might have been negative. 5645 // might have been negative.
5628 else 5646 else
5629 { 5647 {
5630 return dest.GetSublist(end+1,start-1)+src; 5648 return dest.GetSublist(end + 1, start - 1) + src;
5631 } 5649 }
5632 } 5650 }
5633 5651
@@ -6250,7 +6268,7 @@ return LLUUID.Zero.ToString();
6250 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 6268 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
6251 m_Dataserver.RegisterRequest(m_localID, 6269 m_Dataserver.RegisterRequest(m_localID,
6252 m_itemID, item.AssetID.ToString()); 6270 m_itemID, item.AssetID.ToString());
6253 if(NotecardCache.IsCached(item.AssetID)) 6271 if (NotecardCache.IsCached(item.AssetID))
6254 { 6272 {
6255 m_ScriptEngine.m_ASYNCLSLCommandManager. 6273 m_ScriptEngine.m_ASYNCLSLCommandManager.
6256 m_Dataserver.DataserverReply(item.AssetID.ToString(), 6274 m_Dataserver.DataserverReply(item.AssetID.ToString(),
@@ -6286,7 +6304,7 @@ return LLUUID.Zero.ToString();
6286 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 6304 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
6287 m_Dataserver.RegisterRequest(m_localID, 6305 m_Dataserver.RegisterRequest(m_localID,
6288 m_itemID, item.AssetID.ToString()); 6306 m_itemID, item.AssetID.ToString());
6289 if(NotecardCache.IsCached(item.AssetID)) 6307 if (NotecardCache.IsCached(item.AssetID))
6290 { 6308 {
6291 m_ScriptEngine.m_ASYNCLSLCommandManager. 6309 m_ScriptEngine.m_ASYNCLSLCommandManager.
6292 m_Dataserver.DataserverReply(item.AssetID.ToString(), 6310 m_Dataserver.DataserverReply(item.AssetID.ToString(),
@@ -6329,13 +6347,13 @@ return LLUUID.Zero.ToString();
6329 { 6347 {
6330 CacheCheck(); 6348 CacheCheck();
6331 6349
6332 lock(m_Notecards) 6350 lock (m_Notecards)
6333 { 6351 {
6334 if(m_Notecards.ContainsKey(assetID)) 6352 if (m_Notecards.ContainsKey(assetID))
6335 return; 6353 return;
6336 6354
6337 Notecard nc = new Notecard(); 6355 Notecard nc = new Notecard();
6338 nc.lastRef=DateTime.Now; 6356 nc.lastRef = DateTime.Now;
6339 nc.text = ParseText(text.Replace("\r", "").Split('\n')); 6357 nc.text = ParseText(text.Replace("\r", "").Split('\n'));
6340 m_Notecards[assetID] = nc; 6358 m_Notecards[assetID] = nc;
6341 } 6359 }
@@ -6343,56 +6361,57 @@ return LLUUID.Zero.ToString();
6343 6361
6344 private static string[] ParseText(string[] input) 6362 private static string[] ParseText(string[] input)
6345 { 6363 {
6346 int idx=0; 6364 int idx = 0;
6347 int level=0; 6365 int level = 0;
6348 List<string> output = new List<string>(); 6366 List<string> output = new List<string>();
6349 string[] words; 6367 string[] words;
6350 6368
6351 while(idx < input.Length) 6369 while (idx < input.Length)
6352 { 6370 {
6353 if(input[idx] == "{") 6371 if (input[idx] == "{")
6354 { 6372 {
6355 level++; 6373 level++;
6356 idx++; 6374 idx++;
6357 continue; 6375 continue;
6358 } 6376 }
6359 if(input[idx]== "}") 6377
6378 if (input[idx]== "}")
6360 { 6379 {
6361 level--; 6380 level--;
6362 idx++; 6381 idx++;
6363 continue; 6382 continue;
6364 } 6383 }
6365 6384
6366 switch(level) 6385 switch (level)
6367 { 6386 {
6368 case 0: 6387 case 0:
6369 words = input[idx].Split(' '); // Linden text ver 6388 words = input[idx].Split(' '); // Linden text ver
6370 int version = int.Parse(words[3]); 6389 int version = int.Parse(words[3]);
6371 if(version != 2) 6390 if (version != 2)
6372 return new String[0]; 6391 return new String[0];
6373 break; 6392 break;
6374 case 1: 6393 case 1:
6375 words = input[idx].Split(' '); 6394 words = input[idx].Split(' ');
6376 if(words[0] == "LLEmbeddedItems") 6395 if (words[0] == "LLEmbeddedItems")
6377 break; 6396 break;
6378 if(words[0] == "Text") 6397 if (words[0] == "Text")
6379 { 6398 {
6380 int len = int.Parse(words[2]); 6399 int len = int.Parse(words[2]);
6381 idx++; 6400 idx++;
6382 6401
6383 int count=-1; 6402 int count = -1;
6384 6403
6385 while(count < len) 6404 while (count < len)
6386 { 6405 {
6387 int l = input[idx].Length; 6406 int l = input[idx].Length;
6388 string ln = input[idx]; 6407 string ln = input[idx];
6389 6408
6390 int need = len-count-1; 6409 int need = len-count-1;
6391 if(ln.Length > need) 6410 if (ln.Length > need)
6392 ln=ln.Substring(0, need); 6411 ln = ln.Substring(0, need);
6393 6412
6394 output.Add(ln); 6413 output.Add(ln);
6395 count+=ln.Length+1; 6414 count += ln.Length + 1;
6396 idx++; 6415 idx++;
6397 } 6416 }
6398 6417
@@ -6401,10 +6420,10 @@ return LLUUID.Zero.ToString();
6401 break; 6420 break;
6402 case 2: 6421 case 2:
6403 words = input[idx].Split(' '); // count 6422 words = input[idx].Split(' '); // count
6404 if(words[0] == "count") 6423 if (words[0] == "count")
6405 { 6424 {
6406 int c = int.Parse(words[1]); 6425 int c = int.Parse(words[1]);
6407 if(c > 0) 6426 if (c > 0)
6408 return new String[0]; 6427 return new String[0];
6409 break; 6428 break;
6410 } 6429 }
@@ -6417,7 +6436,7 @@ return LLUUID.Zero.ToString();
6417 6436
6418 public static bool IsCached(LLUUID assetID) 6437 public static bool IsCached(LLUUID assetID)
6419 { 6438 {
6420 lock(m_Notecards) 6439 lock (m_Notecards)
6421 { 6440 {
6422 return m_Notecards.ContainsKey(assetID); 6441 return m_Notecards.ContainsKey(assetID);
6423 } 6442 }
@@ -6425,10 +6444,10 @@ return LLUUID.Zero.ToString();
6425 6444
6426 public static int GetLines(LLUUID assetID) 6445 public static int GetLines(LLUUID assetID)
6427 { 6446 {
6428 if(!IsCached(assetID)) 6447 if (!IsCached(assetID))
6429 return -1; 6448 return -1;
6430 6449
6431 lock(m_Notecards) 6450 lock (m_Notecards)
6432 { 6451 {
6433 m_Notecards[assetID].lastRef = DateTime.Now; 6452 m_Notecards[assetID].lastRef = DateTime.Now;
6434 return m_Notecards[assetID].text.Length; 6453 return m_Notecards[assetID].text.Length;
@@ -6437,23 +6456,23 @@ return LLUUID.Zero.ToString();
6437 6456
6438 public static string GetLine(LLUUID assetID, int line) 6457 public static string GetLine(LLUUID assetID, int line)
6439 { 6458 {
6440 if(line < 0) 6459 if (line < 0)
6441 return ""; 6460 return "";
6442 6461
6443 string data; 6462 string data;
6444 6463
6445 if(!IsCached(assetID)) 6464 if (!IsCached(assetID))
6446 return ""; 6465 return "";
6447 6466
6448 lock(m_Notecards) 6467 lock (m_Notecards)
6449 { 6468 {
6450 m_Notecards[assetID].lastRef = DateTime.Now; 6469 m_Notecards[assetID].lastRef = DateTime.Now;
6451 6470
6452 if(line >= m_Notecards[assetID].text.Length) 6471 if (line >= m_Notecards[assetID].text.Length)
6453 return "\n\n\n"; 6472 return "\n\n\n";
6454 6473
6455 data=m_Notecards[assetID].text[line]; 6474 data = m_Notecards[assetID].text[line];
6456 if(data.Length > 255) 6475 if (data.Length > 255)
6457 data = data.Substring(0, 255); 6476 data = data.Substring(0, 255);
6458 6477
6459 return data; 6478 return data;
@@ -6465,10 +6484,9 @@ return LLUUID.Zero.ToString();
6465 foreach (LLUUID key in new List<LLUUID>(m_Notecards.Keys)) 6484 foreach (LLUUID key in new List<LLUUID>(m_Notecards.Keys))
6466 { 6485 {
6467 Notecard nc = m_Notecards[key]; 6486 Notecard nc = m_Notecards[key];
6468 if(nc.lastRef.AddSeconds(30) < DateTime.Now) 6487 if (nc.lastRef.AddSeconds(30) < DateTime.Now)
6469 m_Notecards.Remove(key); 6488 m_Notecards.Remove(key);
6470 } 6489 }
6471 } 6490 }
6472
6473 } 6491 }
6474} 6492}