aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
diff options
context:
space:
mode:
authorCharles Krinke2008-08-25 21:39:36 +0000
committerCharles Krinke2008-08-25 21:39:36 +0000
commita055d3c2e8d8b03db3d4de77dfa9d1aa10a8df58 (patch)
treef9da0b44240c1f3c65dcebf81e465c59c33ee09c /OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
parent* zap compilation warnings (diff)
downloadopensim-SC-a055d3c2e8d8b03db3d4de77dfa9d1aa10a8df58.zip
opensim-SC-a055d3c2e8d8b03db3d4de77dfa9d1aa10a8df58.tar.gz
opensim-SC-a055d3c2e8d8b03db3d4de77dfa9d1aa10a8df58.tar.bz2
opensim-SC-a055d3c2e8d8b03db3d4de77dfa9d1aa10a8df58.tar.xz
Mantis#2045. Thank you kindly, Tyre for a patch that:
This patch adds even more LSL compatibility to llSetPos() As stated in the wiki http://wiki.secondlife.com/wiki/LlSetPos, [^] movement should also be capped to 10m per call for unattached root prims. Beside this issue the attached patch adds (hopefully) all known LSL script delays (as ScriptSleep(), but still commented out) to LSL_BuiltIn_Commands.cs and LSL_Api.cs and a lot of format cleanup.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs782
1 files changed, 419 insertions, 363 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 602a3c8..60ed5c1 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -72,6 +72,7 @@ namespace OpenSim.Region.ScriptEngine.Common
72 72
73 //m_log.Info(ScriptEngineName, "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]"); 73 //m_log.Info(ScriptEngineName, "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
74 74
75
75 IConfigSource config = new IniConfigSource(Application.iniFilePath); 76 IConfigSource config = new IniConfigSource(Application.iniFilePath);
76 if (config.Configs["LL-Functions"] == null) 77 if (config.Configs["LL-Functions"] == null)
77 config.AddConfig("LL-Functions"); 78 config.AddConfig("LL-Functions");
@@ -89,7 +90,7 @@ namespace OpenSim.Region.ScriptEngine.Common
89 private void ScriptSleep(int delay) 90 private void ScriptSleep(int delay)
90 { 91 {
91 delay = (int)((float)delay * m_delayFactor); 92 delay = (int)((float)delay * m_delayFactor);
92 if(delay == 0) 93 if (delay == 0)
93 return; 94 return;
94 System.Threading.Thread.Sleep(delay); 95 System.Threading.Thread.Sleep(delay);
95 } 96 }
@@ -128,15 +129,11 @@ namespace OpenSim.Region.ScriptEngine.Common
128 // Object never expires 129 // Object never expires
129 public override Object InitializeLifetimeService() 130 public override Object InitializeLifetimeService()
130 { 131 {
131 //Console.WriteLine("LSL_BuiltIn_Commands: InitializeLifetimeService()");
132 // return null;
133 ILease lease = (ILease)base.InitializeLifetimeService(); 132 ILease lease = (ILease)base.InitializeLifetimeService();
134 133
135 if (lease.CurrentState == LeaseState.Initial) 134 if (lease.CurrentState == LeaseState.Initial)
136 { 135 {
137 lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1); 136 lease.InitialLeaseTime = TimeSpan.Zero;
138 // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
139 // lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
140 } 137 }
141 return lease; 138 return lease;
142 } 139 }
@@ -154,13 +151,13 @@ namespace OpenSim.Region.ScriptEngine.Common
154 151
155 private LLUUID InventorySelf() 152 private LLUUID InventorySelf()
156 { 153 {
157 LLUUID invItemID=new LLUUID(); 154 LLUUID invItemID = new LLUUID();
158 155
159 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory) 156 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory)
160 { 157 {
161 if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID) 158 if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID)
162 { 159 {
163 invItemID=inv.Key; 160 invItemID = inv.Key;
164 break; 161 break;
165 } 162 }
166 } 163 }
@@ -350,7 +347,6 @@ namespace OpenSim.Region.ScriptEngine.Common
350 return angle; 347 return angle;
351 } 348 }
352 349
353
354 // Old implementation of llRot2Euler, now normalized 350 // Old implementation of llRot2Euler, now normalized
355 351
356 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r) 352 public LSL_Types.Vector3 llRot2Euler(LSL_Types.Quaternion r)
@@ -441,8 +437,8 @@ namespace OpenSim.Region.ScriptEngine.Common
441 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up) 437 public LSL_Types.Quaternion llAxes2Rot(LSL_Types.Vector3 fwd, LSL_Types.Vector3 left, LSL_Types.Vector3 up)
442 { 438 {
443 m_host.AddScriptLPS(1); 439 m_host.AddScriptLPS(1);
444 double x,y,z,s; 440 double x, y, z, s;
445 int f=0; 441 int f = 0;
446 // Important Note: q1=<x,y,z,s> is equal to q2=<-x,-y,-z,-s> 442 // Important Note: q1=<x,y,z,s> is equal to q2=<-x,-y,-z,-s>
447 // Computing quaternion x,y,z,s values 443 // Computing quaternion x,y,z,s values
448 x = ((fwd.x - left.y - up.z + 1) / 4); 444 x = ((fwd.x - left.y - up.z + 1) / 4);
@@ -459,9 +455,9 @@ namespace OpenSim.Region.ScriptEngine.Common
459 s = Math.Sqrt(Math.Sqrt(s)); 455 s = Math.Sqrt(Math.Sqrt(s));
460 456
461 // Set f for signs detection 457 // Set f for signs detection
462 if (fwd.y+left.x >= 0){f+=1;} 458 if (fwd.y + left.x >= 0) { f += 1; }
463 if (fwd.z+up.x >= 0){f+=2;} 459 if (fwd.z + up.x >= 0) { f += 2; }
464 if (left.z-up.y >= 0){f+=4;} 460 if (left.z - up.y >= 0) { f += 4; }
465 // Set correct quaternion signs based on f value 461 // Set correct quaternion signs based on f value
466 if (f == 0) { x = -x; } 462 if (f == 0) { x = -x; }
467 if (f == 1) { x = -x; y = -y; } 463 if (f == 1) { x = -x; y = -y; }
@@ -549,7 +545,7 @@ namespace OpenSim.Region.ScriptEngine.Common
549 545
550 // Fast Algebric Calculations instead of Vectors & Quaternions Product 546 // Fast Algebric Calculations instead of Vectors & Quaternions Product
551 x = 2 * (r.x * r.z + r.y * r.s); 547 x = 2 * (r.x * r.z + r.y * r.s);
552 y = 2*(-r.x * r.s + r.y * r.z); 548 y = 2 * (-r.x * r.s + r.y * r.z);
553 z = -r.x * r.x - r.y * r.y + r.z * r.z + r.s * r.s; 549 z = -r.x * r.x - r.y * r.y + r.z * r.z + r.s * r.s;
554 return (new LSL_Types.Vector3(x, y, z)); 550 return (new LSL_Types.Vector3(x, y, z));
555 } 551 }
@@ -571,6 +567,10 @@ namespace OpenSim.Region.ScriptEngine.Common
571 public void llWhisper(int channelID, string text) 567 public void llWhisper(int channelID, string text)
572 { 568 {
573 m_host.AddScriptLPS(1); 569 m_host.AddScriptLPS(1);
570
571 if (text.Length > 1023)
572 text = text.Substring(0, 1023);
573
574 World.SimChat(Helpers.StringToField(text), 574 World.SimChat(Helpers.StringToField(text),
575 ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); 575 ChatTypeEnum.Whisper, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false);
576 576
@@ -581,6 +581,10 @@ namespace OpenSim.Region.ScriptEngine.Common
581 public void llSay(int channelID, string text) 581 public void llSay(int channelID, string text)
582 { 582 {
583 m_host.AddScriptLPS(1); 583 m_host.AddScriptLPS(1);
584
585 if (text.Length > 1023)
586 text = text.Substring(0, 1023);
587
584 World.SimChat(Helpers.StringToField(text), 588 World.SimChat(Helpers.StringToField(text),
585 ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); 589 ChatTypeEnum.Say, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false);
586 590
@@ -591,8 +595,12 @@ namespace OpenSim.Region.ScriptEngine.Common
591 public void llShout(int channelID, string text) 595 public void llShout(int channelID, string text)
592 { 596 {
593 m_host.AddScriptLPS(1); 597 m_host.AddScriptLPS(1);
598
599 if (text.Length > 1023)
600 text = text.Substring(0, 1023);
601
594 World.SimChat(Helpers.StringToField(text), 602 World.SimChat(Helpers.StringToField(text),
595 ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); 603 ChatTypeEnum.Shout, channelID, m_host.AbsolutePosition, m_host.Name, m_host.UUID, true);
596 604
597 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 605 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
598 wComm.DeliverMessage(ChatTypeEnum.Shout, channelID, m_host.Name, m_host.UUID, text); 606 wComm.DeliverMessage(ChatTypeEnum.Shout, channelID, m_host.Name, m_host.UUID, text);
@@ -606,6 +614,9 @@ namespace OpenSim.Region.ScriptEngine.Common
606 return; 614 return;
607 } 615 }
608 616
617 if (text.Length > 1023)
618 text = text.Substring(0, 1023);
619
609 m_host.AddScriptLPS(1); 620 m_host.AddScriptLPS(1);
610 621
611 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 622 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
@@ -637,7 +648,7 @@ namespace OpenSim.Region.ScriptEngine.Common
637 648
638 public void llSensor(string name, string id, int type, double range, double arc) 649 public void llSensor(string name, string id, int type, double range, double arc)
639 { 650 {
640 m_host.AddScriptLPS(300); 651 m_host.AddScriptLPS(1);
641 LLUUID keyID = LLUUID.Zero; 652 LLUUID keyID = LLUUID.Zero;
642 LLUUID.TryParse(id, out keyID); 653 LLUUID.TryParse(id, out keyID);
643 654
@@ -651,7 +662,7 @@ namespace OpenSim.Region.ScriptEngine.Common
651 LLUUID.TryParse(id, out keyID); 662 LLUUID.TryParse(id, out keyID);
652 663
653 m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host); 664 m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host);
654 } 665 }
655 666
656 public void llSensorRemove() 667 public void llSensorRemove()
657 { 668 {
@@ -685,7 +696,6 @@ namespace OpenSim.Region.ScriptEngine.Common
685 if (SensedObject == null) 696 if (SensedObject == null)
686 return String.Empty; 697 return String.Empty;
687 return SensedObject.Name; 698 return SensedObject.Name;
688
689 } 699 }
690 700
691 public string llDetectedName(int number) 701 public string llDetectedName(int number)
@@ -821,7 +831,6 @@ namespace OpenSim.Region.ScriptEngine.Common
821 LLUUID SensedUUID = uuidDetectedKey(number); 831 LLUUID SensedUUID = uuidDetectedKey(number);
822 if (SensedUUID == LLUUID.Zero) 832 if (SensedUUID == LLUUID.Zero)
823 return String.Empty; 833 return String.Empty;
824
825 return SensedUUID.ToString(); 834 return SensedUUID.ToString();
826 } 835 }
827 836
@@ -869,7 +878,6 @@ namespace OpenSim.Region.ScriptEngine.Common
869 mask |= 0x02; // active moving 878 mask |= 0x02; // active moving
870 if (SensedObject is IScript) mask |= 0x08; // Scripted. It COULD have one hidden ... 879 if (SensedObject is IScript) mask |= 0x08; // Scripted. It COULD have one hidden ...
871 return mask; 880 return mask;
872
873 } 881 }
874 882
875 public LSL_Types.Vector3 llDetectedPos(int number) 883 public LSL_Types.Vector3 llDetectedPos(int number)
@@ -878,7 +886,6 @@ namespace OpenSim.Region.ScriptEngine.Common
878 EntityBase SensedObject = entityDetectedKey(number); 886 EntityBase SensedObject = entityDetectedKey(number);
879 if (SensedObject == null) 887 if (SensedObject == null)
880 return new LSL_Types.Vector3(0, 0, 0); 888 return new LSL_Types.Vector3(0, 0, 0);
881
882 return new LSL_Types.Vector3(SensedObject.AbsolutePosition.X,SensedObject.AbsolutePosition.Y,SensedObject.AbsolutePosition.Z); 889 return new LSL_Types.Vector3(SensedObject.AbsolutePosition.X,SensedObject.AbsolutePosition.Y,SensedObject.AbsolutePosition.Z);
883 } 890 }
884 891
@@ -888,7 +895,6 @@ namespace OpenSim.Region.ScriptEngine.Common
888 EntityBase SensedObject = entityDetectedKey(number); 895 EntityBase SensedObject = entityDetectedKey(number);
889 if (SensedObject == null) 896 if (SensedObject == null)
890 return new LSL_Types.Vector3(0, 0, 0); 897 return new LSL_Types.Vector3(0, 0, 0);
891
892 return new LSL_Types.Vector3(SensedObject.Velocity.X, SensedObject.Velocity.Y, SensedObject.Velocity.Z); 898 return new LSL_Types.Vector3(SensedObject.Velocity.X, SensedObject.Velocity.Y, SensedObject.Velocity.Z);
893 } 899 }
894 900
@@ -911,7 +917,6 @@ namespace OpenSim.Region.ScriptEngine.Common
911 EntityBase SensedObject = entityDetectedKey(number); 917 EntityBase SensedObject = entityDetectedKey(number);
912 if (SensedObject == null) 918 if (SensedObject == null)
913 return new LSL_Types.Quaternion(); 919 return new LSL_Types.Quaternion();
914
915 return new LSL_Types.Quaternion(SensedObject.Rotation.x, SensedObject.Rotation.y, SensedObject.Rotation.z, SensedObject.Rotation.w); 920 return new LSL_Types.Quaternion(SensedObject.Rotation.x, SensedObject.Rotation.y, SensedObject.Rotation.z, SensedObject.Rotation.w);
916 } 921 }
917 922
@@ -986,8 +991,8 @@ namespace OpenSim.Region.ScriptEngine.Common
986 } 991 }
987 else 992 else
988 m_host.ScriptSetPhysicsStatus(false); 993 m_host.ScriptSetPhysicsStatus(false);
989
990 } 994 }
995
991 if ((status & BuiltIn_Commands_BaseClass.STATUS_PHANTOM) == BuiltIn_Commands_BaseClass.STATUS_PHANTOM) 996 if ((status & BuiltIn_Commands_BaseClass.STATUS_PHANTOM) == BuiltIn_Commands_BaseClass.STATUS_PHANTOM)
992 { 997 {
993 if (value == 1) 998 if (value == 1)
@@ -995,27 +1000,32 @@ namespace OpenSim.Region.ScriptEngine.Common
995 else 1000 else
996 m_host.ScriptSetPhantomStatus(false); 1001 m_host.ScriptSetPhantomStatus(false);
997 } 1002 }
1003
998 if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) 1004 if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS)
999 { 1005 {
1000 m_host.AddFlag(LLObject.ObjectFlags.CastShadows); 1006 m_host.AddFlag(LLObject.ObjectFlags.CastShadows);
1001 } 1007 }
1008
1002 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) 1009 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X)
1003 { 1010 {
1004 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X; 1011 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X;
1005
1006 } 1012 }
1013
1007 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) 1014 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y)
1008 { 1015 {
1009 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y; 1016 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y;
1010 } 1017 }
1018
1011 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) 1019 if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z)
1012 { 1020 {
1013 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z; 1021 statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z;
1014 } 1022 }
1023
1015 if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) 1024 if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB)
1016 { 1025 {
1017 NotImplemented("llSetStatus - STATUS_BLOCK_GRAB"); 1026 NotImplemented("llSetStatus - STATUS_BLOCK_GRAB");
1018 } 1027 }
1028
1019 if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) 1029 if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE)
1020 { 1030 {
1021 if (value == 1) 1031 if (value == 1)
@@ -1023,18 +1033,20 @@ namespace OpenSim.Region.ScriptEngine.Common
1023 else 1033 else
1024 m_host.SetDieAtEdge(false); 1034 m_host.SetDieAtEdge(false);
1025 } 1035 }
1036
1026 if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) 1037 if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE)
1027 { 1038 {
1028 NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE"); 1039 NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE");
1029 } 1040 }
1041
1030 if ((status & BuiltIn_Commands_BaseClass.STATUS_SANDBOX) == BuiltIn_Commands_BaseClass.STATUS_SANDBOX) 1042 if ((status & BuiltIn_Commands_BaseClass.STATUS_SANDBOX) == BuiltIn_Commands_BaseClass.STATUS_SANDBOX)
1031 { 1043 {
1032 NotImplemented("llSetStatus - STATUS_SANDBOX"); 1044 NotImplemented("llSetStatus - STATUS_SANDBOX");
1033 } 1045 }
1046
1034 if (statusrotationaxis != 0) 1047 if (statusrotationaxis != 0)
1035 { 1048 {
1036 m_host.SetAxisRotation(statusrotationaxis, value); 1049 m_host.SetAxisRotation(statusrotationaxis, value);
1037
1038 } 1050 }
1039 } 1051 }
1040 1052
@@ -1050,23 +1062,26 @@ namespace OpenSim.Region.ScriptEngine.Common
1050 return 1; 1062 return 1;
1051 } 1063 }
1052 return 0; 1064 return 0;
1065
1053 case BuiltIn_Commands_BaseClass.STATUS_PHANTOM: 1066 case BuiltIn_Commands_BaseClass.STATUS_PHANTOM:
1054 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom) 1067 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom)
1055 { 1068 {
1056 return 1; 1069 return 1;
1057 } 1070 }
1058 return 0; 1071 return 0;
1072
1059 case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS: 1073 case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS:
1060 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows) 1074 if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows)
1061 { 1075 {
1062 return 1; 1076 return 1;
1063 } 1077 }
1064 return 0; 1078 return 0;
1079
1065 case BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB: 1080 case BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB:
1066 NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); 1081 NotImplemented("llGetStatus - STATUS_BLOCK_GRAB");
1067 return 0; 1082 return 0;
1068 case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE:
1069 1083
1084 case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE:
1070 if (m_host.GetDieAtEdge()) 1085 if (m_host.GetDieAtEdge())
1071 return 1; 1086 return 1;
1072 else 1087 else
@@ -1075,15 +1090,19 @@ namespace OpenSim.Region.ScriptEngine.Common
1075 case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE: 1090 case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE:
1076 NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); 1091 NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE");
1077 return 0; 1092 return 0;
1093
1078 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_X: 1094 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_X:
1079 NotImplemented("llGetStatus - STATUS_ROTATE_X"); 1095 NotImplemented("llGetStatus - STATUS_ROTATE_X");
1080 return 0; 1096 return 0;
1097
1081 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y: 1098 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y:
1082 NotImplemented("llGetStatus - STATUS_ROTATE_Y"); 1099 NotImplemented("llGetStatus - STATUS_ROTATE_Y");
1083 return 0; 1100 return 0;
1101
1084 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z: 1102 case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z:
1085 NotImplemented("llGetStatus - STATUS_ROTATE_Z"); 1103 NotImplemented("llGetStatus - STATUS_ROTATE_Z");
1086 return 0; 1104 return 0;
1105
1087 case BuiltIn_Commands_BaseClass.STATUS_SANDBOX: 1106 case BuiltIn_Commands_BaseClass.STATUS_SANDBOX:
1088 NotImplemented("llGetStatus - STATUS_SANDBOX"); 1107 NotImplemented("llGetStatus - STATUS_SANDBOX");
1089 return 0; 1108 return 0;
@@ -1179,103 +1198,103 @@ namespace OpenSim.Region.ScriptEngine.Common
1179 1198
1180 public void SetGlow(SceneObjectPart part, int face, float glow) 1199 public void SetGlow(SceneObjectPart part, int face, float glow)
1181 { 1200 {
1182 LLObject.TextureEntry tex = part.Shape.Textures; 1201 LLObject.TextureEntry tex = part.Shape.Textures;
1183 if (face > -1) 1202 if (face > -1)
1184 { 1203 {
1185 tex.CreateFace((uint)face); 1204 tex.CreateFace((uint) face);
1186 tex.FaceTextures[face].Glow = glow; 1205 tex.FaceTextures[face].Glow = glow;
1187 part.UpdateTexture(tex); 1206 part.UpdateTexture(tex);
1188 return; 1207 return;
1189 } 1208 }
1190 else if (face == -1) 1209 else if (face == -1)
1191 { 1210 {
1192 for (uint i = 0; i < 32; i++) 1211 for (uint i = 0; i < 32; i++)
1193 { 1212 {
1194 if (tex.FaceTextures[i] != null) 1213 if (tex.FaceTextures[i] != null)
1195 { 1214 {
1196 tex.FaceTextures[i].Glow = glow; 1215 tex.FaceTextures[i].Glow = glow;
1197 } 1216 }
1198 tex.DefaultTexture.Glow = glow; 1217 tex.DefaultTexture.Glow = glow;
1199 } 1218 }
1200 part.UpdateTexture(tex); 1219 part.UpdateTexture(tex);
1201 return; 1220 return;
1202 } 1221 }
1203 } 1222 }
1204 1223
1205 public void SetShiny(SceneObjectPart part, int face, int shiny, Bumpiness bump) 1224 public void SetShiny(SceneObjectPart part, int face, int shiny, Bumpiness bump)
1206 { 1225 {
1207 1226
1208 Shininess sval = new Shininess(); 1227 Shininess sval = new Shininess();
1209 1228
1210 switch (shiny) 1229 switch (shiny)
1211 { 1230 {
1212 case 0: 1231 case 0:
1213 sval = Shininess.None; 1232 sval = Shininess.None;
1214 break; 1233 break;
1215 case 1: 1234 case 1:
1216 sval = Shininess.Low; 1235 sval = Shininess.Low;
1217 break; 1236 break;
1218 case 2: 1237 case 2:
1219 sval = Shininess.Medium; 1238 sval = Shininess.Medium;
1220 break; 1239 break;
1221 case 3: 1240 case 3:
1222 sval = Shininess.High; 1241 sval = Shininess.High;
1223 break; 1242 break;
1224 default: 1243 default:
1225 sval = Shininess.None; 1244 sval = Shininess.None;
1226 break; 1245 break;
1227 } 1246 }
1228 1247
1229 LLObject.TextureEntry tex = part.Shape.Textures; 1248 LLObject.TextureEntry tex = part.Shape.Textures;
1230 if (face > -1) 1249 if (face > -1)
1231 { 1250 {
1232 tex.CreateFace((uint)face); 1251 tex.CreateFace((uint) face);
1233 tex.FaceTextures[face].Shiny = sval; 1252 tex.FaceTextures[face].Shiny = sval;
1234 tex.FaceTextures[face].Bump = bump; 1253 tex.FaceTextures[face].Bump = bump;
1235 part.UpdateTexture(tex); 1254 part.UpdateTexture(tex);
1236 return; 1255 return;
1237 } 1256 }
1238 else if (face == -1) 1257 else if (face == -1)
1239 { 1258 {
1240 for (uint i = 0; i < 32; i++) 1259 for (uint i = 0; i < 32; i++)
1241 { 1260 {
1242 if (tex.FaceTextures[i] != null) 1261 if (tex.FaceTextures[i] != null)
1243 { 1262 {
1244 tex.FaceTextures[i].Shiny = sval; 1263 tex.FaceTextures[i].Shiny = sval;
1245 tex.FaceTextures[i].Bump = bump; ; 1264 tex.FaceTextures[i].Bump = bump;;
1246 } 1265 }
1247 tex.DefaultTexture.Shiny = sval; 1266 tex.DefaultTexture.Shiny = sval;
1248 tex.DefaultTexture.Bump = bump; 1267 tex.DefaultTexture.Bump = bump;
1249 } 1268 }
1250 part.UpdateTexture(tex); 1269 part.UpdateTexture(tex);
1251 return; 1270 return;
1252 } 1271 }
1253 } 1272 }
1254 1273
1255 public void SetFullBright(SceneObjectPart part, int face, bool bright) 1274 public void SetFullBright(SceneObjectPart part, int face, bool bright)
1256 { 1275 {
1257 LLObject.TextureEntry tex = part.Shape.Textures; 1276 LLObject.TextureEntry tex = part.Shape.Textures;
1258 if (face > -1) 1277 if (face > -1)
1259 { 1278 {
1260 tex.CreateFace((uint)face); 1279 tex.CreateFace((uint) face);
1261 tex.FaceTextures[face].Fullbright = bright; 1280 tex.FaceTextures[face].Fullbright = bright;
1262 part.UpdateTexture(tex); 1281 part.UpdateTexture(tex);
1263 return; 1282 return;
1264 } 1283 }
1265 else if (face == -1) 1284 else if (face == -1)
1266 { 1285 {
1267 for (uint i = 0; i < 32; i++) 1286 for (uint i = 0; i < 32; i++)
1268 { 1287 {
1269 if (tex.FaceTextures[i] != null) 1288 if (tex.FaceTextures[i] != null)
1270 { 1289 {
1271 tex.FaceTextures[i].Fullbright = bright; 1290 tex.FaceTextures[i].Fullbright = bright;
1272 } 1291 }
1273 } 1292 }
1274 tex.DefaultTexture.Fullbright = bright; 1293 tex.DefaultTexture.Fullbright = bright;
1275 part.UpdateTexture(tex); 1294 part.UpdateTexture(tex);
1276 return; 1295 return;
1277 } 1296 }
1278 } 1297 }
1279 1298
1280 public double llGetAlpha(int face) 1299 public double llGetAlpha(int face)
1281 { 1300 {
@@ -1426,8 +1445,6 @@ namespace OpenSim.Region.ScriptEngine.Common
1426 part.ScheduleFullUpdate(); 1445 part.ScheduleFullUpdate();
1427 } 1446 }
1428 1447
1429
1430
1431 public LSL_Types.Vector3 llGetColor(int face) 1448 public LSL_Types.Vector3 llGetColor(int face)
1432 { 1449 {
1433 m_host.AddScriptLPS(1); 1450 m_host.AddScriptLPS(1);
@@ -1460,6 +1477,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1460 { 1477 {
1461 m_host.AddScriptLPS(1); 1478 m_host.AddScriptLPS(1);
1462 SetTexture(m_host, texture, face); 1479 SetTexture(m_host, texture, face);
1480 // ScriptSleep(200);
1463 } 1481 }
1464 1482
1465 private void SetTexture(SceneObjectPart part, string texture, int face) 1483 private void SetTexture(SceneObjectPart part, string texture, int face)
@@ -1504,6 +1522,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1504 m_host.AddScriptLPS(1); 1522 m_host.AddScriptLPS(1);
1505 1523
1506 ScaleTexture(m_host, u, v, face); 1524 ScaleTexture(m_host, u, v, face);
1525 // ScriptSleep(200);
1507 } 1526 }
1508 1527
1509 private void ScaleTexture(SceneObjectPart part, double u, double v, int face) 1528 private void ScaleTexture(SceneObjectPart part, double u, double v, int face)
@@ -1539,6 +1558,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1539 { 1558 {
1540 m_host.AddScriptLPS(1); 1559 m_host.AddScriptLPS(1);
1541 OffsetTexture(m_host, u, v, face); 1560 OffsetTexture(m_host, u, v, face);
1561 // ScriptSleep(200);
1542 } 1562 }
1543 1563
1544 private void OffsetTexture(SceneObjectPart part, double u, double v, int face) 1564 private void OffsetTexture(SceneObjectPart part, double u, double v, int face)
@@ -1574,6 +1594,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1574 { 1594 {
1575 m_host.AddScriptLPS(1); 1595 m_host.AddScriptLPS(1);
1576 RotateTexture(m_host, rotation, face); 1596 RotateTexture(m_host, rotation, face);
1597 // ScriptSleep(200);
1577 } 1598 }
1578 1599
1579 private void RotateTexture(SceneObjectPart part, double rotation, int face) 1600 private void RotateTexture(SceneObjectPart part, double rotation, int face)
@@ -1628,19 +1649,25 @@ namespace OpenSim.Region.ScriptEngine.Common
1628 1649
1629 SetPos(m_host, pos); 1650 SetPos(m_host, pos);
1630 1651
1631 // sleep for 0.2 seconds
1632 ScriptSleep(200); 1652 ScriptSleep(200);
1633 } 1653 }
1634 1654
1635 private void SetPos(SceneObjectPart part, LSL_Types.Vector3 pos) 1655 private void SetPos(SceneObjectPart part, LSL_Types.Vector3 targetPos)
1636 { 1656 {
1657 // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos)
1658 LSL_Types.Vector3 currentPos = llGetLocalPos();
1659 if (llVecDist(currentPos, targetPos) > 10)
1660 {
1661 targetPos = currentPos + 10 * llVecNorm(targetPos - currentPos);
1662 }
1663
1637 if (part.ParentID != 0) 1664 if (part.ParentID != 0)
1638 { 1665 {
1639 part.UpdateOffSet(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); 1666 part.UpdateOffSet(new LLVector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z));
1640 } 1667 }
1641 else 1668 else
1642 { 1669 {
1643 part.UpdateGroupPosition(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); 1670 part.UpdateGroupPosition(new LLVector3((float)targetPos.x, (float)targetPos.y, (float)targetPos.z));
1644 } 1671 }
1645 } 1672 }
1646 1673
@@ -1675,7 +1702,6 @@ namespace OpenSim.Region.ScriptEngine.Common
1675 1702
1676 SetRot(m_host, rot); 1703 SetRot(m_host, rot);
1677 1704
1678 // sleep for 0.2 seconds
1679 ScriptSleep(200); 1705 ScriptSleep(200);
1680 } 1706 }
1681 1707
@@ -1954,6 +1980,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1954 { 1980 {
1955 m_host.AddScriptLPS(1); 1981 m_host.AddScriptLPS(1);
1956 m_host.PreloadSound(sound); 1982 m_host.PreloadSound(sound);
1983 // ScriptSleep(1000);
1957 } 1984 }
1958 1985
1959 /// <summary> 1986 /// <summary>
@@ -2237,24 +2264,28 @@ namespace OpenSim.Region.ScriptEngine.Common
2237 { 2264 {
2238 m_host.AddScriptLPS(1); 2265 m_host.AddScriptLPS(1);
2239 Deprecated("llMakeExplosion"); 2266 Deprecated("llMakeExplosion");
2267 // ScriptSleep(100);
2240 } 2268 }
2241 2269
2242 public void llMakeFountain() 2270 public void llMakeFountain()
2243 { 2271 {
2244 m_host.AddScriptLPS(1); 2272 m_host.AddScriptLPS(1);
2245 Deprecated("llMakeFountain"); 2273 Deprecated("llMakeFountain");
2274 // ScriptSleep(100);
2246 } 2275 }
2247 2276
2248 public void llMakeSmoke() 2277 public void llMakeSmoke()
2249 { 2278 {
2250 m_host.AddScriptLPS(1); 2279 m_host.AddScriptLPS(1);
2251 Deprecated("llMakeSmoke"); 2280 Deprecated("llMakeSmoke");
2281 // ScriptSleep(100);
2252 } 2282 }
2253 2283
2254 public void llMakeFire() 2284 public void llMakeFire()
2255 { 2285 {
2256 m_host.AddScriptLPS(1); 2286 m_host.AddScriptLPS(1);
2257 Deprecated("llMakeFire"); 2287 Deprecated("llMakeFire");
2288 // ScriptSleep(100);
2258 } 2289 }
2259 2290
2260 public void llRezAtRoot(string inventory, LSL_Types.Vector3 pos, LSL_Types.Vector3 vel, LSL_Types.Quaternion rot, int param) 2291 public void llRezAtRoot(string inventory, LSL_Types.Vector3 pos, LSL_Types.Vector3 vel, LSL_Types.Quaternion rot, int param)
@@ -2305,8 +2336,9 @@ namespace OpenSim.Region.ScriptEngine.Common
2305 //Recoil. 2336 //Recoil.
2306 llApplyImpulse(new LSL_Types.Vector3(llvel.X * groupmass, llvel.Y * groupmass, llvel.Z * groupmass), 0); 2337 llApplyImpulse(new LSL_Types.Vector3(llvel.X * groupmass, llvel.Y * groupmass, llvel.Z * groupmass), 0);
2307 found = true; 2338 found = true;
2308 //script delay 2339 // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay)
2309 ScriptSleep((int)((groupmass * velmag) / 10)); 2340 ScriptSleep((int)((groupmass * velmag) / 10));
2341 // ScriptSleep(100);
2310 break; 2342 break;
2311 } 2343 }
2312 } 2344 }
@@ -2340,8 +2372,8 @@ namespace OpenSim.Region.ScriptEngine.Common
2340 2372
2341 public void llSleep(double sec) 2373 public void llSleep(double sec)
2342 { 2374 {
2343 m_host.AddScriptLPS((int)(sec * 100)); 2375 m_host.AddScriptLPS(1);
2344 System.Threading.Thread.Sleep((int)(sec * 1000)); 2376 Thread.Sleep((int)(sec * 1000));
2345 } 2377 }
2346 2378
2347 public double llGetMass() 2379 public double llGetMass()
@@ -2460,8 +2492,8 @@ namespace OpenSim.Region.ScriptEngine.Common
2460 msg.fromAgentSession = new Guid(friendTransactionID.ToString());// fromAgentSession.UUID; 2492 msg.fromAgentSession = new Guid(friendTransactionID.ToString());// fromAgentSession.UUID;
2461 msg.toAgentID = new Guid(user); // toAgentID.UUID; 2493 msg.toAgentID = new Guid(user); // toAgentID.UUID;
2462 msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here 2494 msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here
2463 Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); 2495// Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message);
2464 Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); 2496// Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString());
2465 msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp; 2497 msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp;
2466 //if (client != null) 2498 //if (client != null)
2467 //{ 2499 //{
@@ -2480,6 +2512,8 @@ namespace OpenSim.Region.ScriptEngine.Common
2480 msg.RegionID = World.RegionInfo.RegionID.UUID;//RegionID.UUID; 2512 msg.RegionID = World.RegionInfo.RegionID.UUID;//RegionID.UUID;
2481 msg.binaryBucket = new byte[0];// binaryBucket; 2513 msg.binaryBucket = new byte[0];// binaryBucket;
2482 World.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); 2514 World.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
2515 // ScriptSleep(2000);
2516
2483 // NotImplemented("llInstantMessage"); 2517 // NotImplemented("llInstantMessage");
2484 } 2518 }
2485 2519
@@ -2491,6 +2525,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2491 return; 2525 return;
2492 2526
2493 emailModule.SendEmail(m_host.UUID, address, subject, message); 2527 emailModule.SendEmail(m_host.UUID, address, subject, message);
2528 // ScriptSleep(20000);
2494 } 2529 }
2495 2530
2496 public void llGetNextEmail(string address, string subject) 2531 public void llGetNextEmail(string address, string subject)
@@ -2914,7 +2949,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2914 SceneObjectGroup parentPrim = null, childPrim = null; 2949 SceneObjectGroup parentPrim = null, childPrim = null;
2915 if (targetPart != null) 2950 if (targetPart != null)
2916 { 2951 {
2917 if (parent == BuiltIn_Commands_BaseClass.TRUE) { 2952 if (parent != 0) {
2918 parentPrim = m_host.ParentGroup; 2953 parentPrim = m_host.ParentGroup;
2919 childPrim = targetPart.ParentGroup; 2954 childPrim = targetPart.ParentGroup;
2920 } 2955 }
@@ -2932,9 +2967,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2932 parentPrim.RootPart.AddFlag(LLObject.ObjectFlags.CreateSelected); 2967 parentPrim.RootPart.AddFlag(LLObject.ObjectFlags.CreateSelected);
2933 parentPrim.GetProperties(client); 2968 parentPrim.GetProperties(client);
2934 2969
2935 // sleep for 1 second
2936 ScriptSleep(1000); 2970 ScriptSleep(1000);
2937
2938 } 2971 }
2939 2972
2940 public void llBreakLink(int linknum) 2973 public void llBreakLink(int linknum)
@@ -3096,6 +3129,7 @@ namespace OpenSim.Region.ScriptEngine.Common
3096 // destination is an object 3129 // destination is an object
3097 World.MoveTaskInventoryItem(destId, m_host, objId); 3130 World.MoveTaskInventoryItem(destId, m_host, objId);
3098 } 3131 }
3132 // ScriptSleep(3000);
3099 } 3133 }
3100 3134
3101 public void llRemoveInventory(string name) 3135 public void llRemoveInventory(string name)
@@ -3134,12 +3168,14 @@ namespace OpenSim.Region.ScriptEngine.Common
3134 { 3168 {
3135 m_host.AddScriptLPS(1); 3169 m_host.AddScriptLPS(1);
3136 NotImplemented("llRequestAgentData"); 3170 NotImplemented("llRequestAgentData");
3171 // ScriptSleep(100);
3137 return String.Empty; 3172 return String.Empty;
3138 } 3173 }
3139 3174
3140 public string llRequestInventoryData(string name) 3175 public string llRequestInventoryData(string name)
3141 { 3176 {
3142 m_host.AddScriptLPS(1); 3177 m_host.AddScriptLPS(1);
3178
3143 foreach (TaskInventoryItem item in m_host.TaskInventory.Values) 3179 foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
3144 { 3180 {
3145 if (item.Type == 3 && item.Name == name) 3181 if (item.Type == 3 && item.Name == name)
@@ -3167,9 +3203,11 @@ namespace OpenSim.Region.ScriptEngine.Common
3167 reply); 3203 reply);
3168 }, false); 3204 }, false);
3169 3205
3206 // ScriptSleep(1000);
3170 return tid.ToString(); 3207 return tid.ToString();
3171 } 3208 }
3172 } 3209 }
3210 // ScriptSleep(1000);
3173 return String.Empty; 3211 return String.Empty;
3174 } 3212 }
3175 3213
@@ -3193,6 +3231,7 @@ namespace OpenSim.Region.ScriptEngine.Common
3193 World.TeleportClientHome(agentId, presence.ControllingClient); 3231 World.TeleportClientHome(agentId, presence.ControllingClient);
3194 } 3232 }
3195 } 3233 }
3234 // ScriptSleep(5000);
3196 } 3235 }
3197 3236
3198 public void llModifyLand(int action, int brush) 3237 public void llModifyLand(int action, int brush)
@@ -3256,7 +3295,6 @@ namespace OpenSim.Region.ScriptEngine.Common
3256 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 3295 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
3257 partLocalID, partItemID, "link_message", EventQueueManager.llDetectNull, resobj 3296 partLocalID, partItemID, "link_message", EventQueueManager.llDetectNull, resobj
3258 ); 3297 );
3259
3260 } 3298 }
3261 } 3299 }
3262 3300
@@ -3363,7 +3401,6 @@ namespace OpenSim.Region.ScriptEngine.Common
3363 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 3401 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
3364 m_localID, partItemID, "link_message", EventQueueManager.llDetectNull, resobj 3402 m_localID, partItemID, "link_message", EventQueueManager.llDetectNull, resobj
3365 ); 3403 );
3366
3367 } 3404 }
3368 } 3405 }
3369 3406
@@ -3437,12 +3474,12 @@ namespace OpenSim.Region.ScriptEngine.Common
3437 return result; 3474 return result;
3438 3475
3439 } 3476 }
3477
3440 // this function to understand which shape it is (taken from meshmerizer) 3478 // this function to understand which shape it is (taken from meshmerizer)
3441 // quite useful can be used by meshmerizer to have a centralized point of understanding the shape 3479 // quite useful can be used by meshmerizer to have a centralized point of understanding the shape
3442 // except that it refers to scripting constants 3480 // except that it refers to scripting constants
3443 private int getScriptPrimType(PrimitiveBaseShape primShape) 3481 private int getScriptPrimType(PrimitiveBaseShape primShape)
3444 { 3482 {
3445
3446 if (primShape.SculptEntry) 3483 if (primShape.SculptEntry)
3447 return BuiltIn_Commands_BaseClass.PRIM_TYPE_SCULPT; 3484 return BuiltIn_Commands_BaseClass.PRIM_TYPE_SCULPT;
3448 if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Square) 3485 if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.Square)
@@ -3473,9 +3510,8 @@ namespace OpenSim.Region.ScriptEngine.Common
3473 return BuiltIn_Commands_BaseClass.PRIM_TYPE_RING; 3510 return BuiltIn_Commands_BaseClass.PRIM_TYPE_RING;
3474 } 3511 }
3475 return BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX; 3512 return BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX;
3476
3477
3478 } 3513 }
3514
3479 // Helper functions to understand if object has cut, hollow, dimple, and other affecting number of faces 3515 // Helper functions to understand if object has cut, hollow, dimple, and other affecting number of faces
3480 private void hasCutHollowDimpleProfileCut(int primType, PrimitiveBaseShape shape, out bool hasCut, out bool hasHollow, 3516 private void hasCutHollowDimpleProfileCut(int primType, PrimitiveBaseShape shape, out bool hasCut, out bool hasHollow,
3481 out bool hasDimple, out bool hasProfileCut) 3517 out bool hasDimple, out bool hasProfileCut)
@@ -3553,10 +3589,10 @@ namespace OpenSim.Region.ScriptEngine.Common
3553 ret = 1; 3589 ret = 1;
3554 break; 3590 break;
3555 } 3591 }
3556
3557 return ret; 3592 return ret;
3558 } 3593 }
3559 3594
3595
3560 /* The new / changed functions were tested with the following LSL script: 3596 /* The new / changed functions were tested with the following LSL script:
3561 3597
3562 default 3598 default
@@ -3714,7 +3750,6 @@ namespace OpenSim.Region.ScriptEngine.Common
3714 m_host.ParentGroup.RootPart.AllowedDrop = true; 3750 m_host.ParentGroup.RootPart.AllowedDrop = true;
3715 else 3751 else
3716 m_host.ParentGroup.RootPart.AllowedDrop = false; 3752 m_host.ParentGroup.RootPart.AllowedDrop = false;
3717
3718 } 3753 }
3719 3754
3720 public LSL_Types.Vector3 llGetSunDirection() 3755 public LSL_Types.Vector3 llGetSunDirection()
@@ -4069,16 +4104,16 @@ namespace OpenSim.Region.ScriptEngine.Common
4069 { 4104 {
4070 switch (src[i]) 4105 switch (src[i])
4071 { 4106 {
4072 case '<' : 4107 case '<':
4073 parens++; 4108 parens++;
4074 length++; 4109 length++;
4075 break; 4110 break;
4076 case '>' : 4111 case '>':
4077 if (parens > 0) 4112 if (parens > 0)
4078 parens--; 4113 parens--;
4079 length++; 4114 length++;
4080 break; 4115 break;
4081 case ',' : 4116 case ',':
4082 if (parens == 0) 4117 if (parens == 0)
4083 { 4118 {
4084 result.Add(src.Substring(start,length).Trim()); 4119 result.Add(src.Substring(start,length).Trim());
@@ -4090,7 +4125,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4090 length++; 4125 length++;
4091 } 4126 }
4092 break; 4127 break;
4093 default : 4128 default:
4094 length++; 4129 length++;
4095 break; 4130 break;
4096 } 4131 }
@@ -4099,7 +4134,6 @@ namespace OpenSim.Region.ScriptEngine.Common
4099 result.Add(src.Substring(start,length).Trim()); 4134 result.Add(src.Substring(start,length).Trim());
4100 4135
4101 return result; 4136 return result;
4102
4103 } 4137 }
4104 4138
4105 /// <summary> 4139 /// <summary>
@@ -4115,7 +4149,6 @@ namespace OpenSim.Region.ScriptEngine.Common
4115 4149
4116 public LSL_Types.list llListRandomize(LSL_Types.list src, int stride) 4150 public LSL_Types.list llListRandomize(LSL_Types.list src, int stride)
4117 { 4151 {
4118
4119 LSL_Types.list result; 4152 LSL_Types.list result;
4120 Random rand = new Random(); 4153 Random rand = new Random();
4121 4154
@@ -4174,7 +4207,6 @@ namespace OpenSim.Region.ScriptEngine.Common
4174 } 4207 }
4175 4208
4176 return result; 4209 return result;
4177
4178 } 4210 }
4179 4211
4180 /// <summary> 4212 /// <summary>
@@ -4398,6 +4430,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4398 { 4430 {
4399 m_host.AddScriptLPS(1); 4431 m_host.AddScriptLPS(1);
4400 m_host.AdjustSoundGain(volume); 4432 m_host.AdjustSoundGain(volume);
4433 // ScriptSleep(100);
4401 } 4434 }
4402 4435
4403 public void llSetSoundQueueing(int queue) 4436 public void llSetSoundQueueing(int queue)
@@ -4550,81 +4583,6 @@ namespace OpenSim.Region.ScriptEngine.Common
4550 return World.GetLandOwner((float)pos.x, (float)pos.y).ToString(); 4583 return World.GetLandOwner((float)pos.x, (float)pos.y).ToString();
4551 } 4584 }
4552 4585
4553 public string llGetNotecardLine(string name, int line)
4554 {
4555 m_host.AddScriptLPS(1);
4556
4557 // TODO: this script function should actually return
4558 // the requested notecard line via the dataserver event
4559 // once it is implemented - krtaylor
4560
4561 String[] notecardLines = GetNotecardLines(name);
4562
4563 line--; // array starts at 0
4564 if ((!String.IsNullOrEmpty(notecardLines[0])) &&
4565 (line >= 0) &&
4566 (line < notecardLines.Length))
4567 {
4568 return notecardLines[line];
4569 }
4570 else
4571 {
4572 return String.Empty;
4573 }
4574 }
4575
4576 private String[] GetNotecardLines(string name)
4577 {
4578 // bool found = false;
4579 int notecardIndex = 0;
4580 String[] notecardLines = { "0" };
4581 notecardLines[0] = String.Empty;
4582
4583 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory)
4584 {
4585 if ((inv.Value.Name == name) && (inv.Value.InvType == (int)InventoryType.Notecard))
4586 {
4587 // OK, it has the right name and it is a notecard
4588 // so get the asset that contains the notecard raw data
4589 // and convert it into a string
4590 AssetBase notecardAsset = World.AssetCache.GetAsset(inv.Value.AssetID, false);
4591 String dataString = System.Text.Encoding.ASCII.GetString(notecardAsset.Data);
4592
4593 if (!String.IsNullOrEmpty(dataString))
4594 {
4595 // good, we have the notecard data as a string
4596 // now parse the text lines using the Linden Text delimiters
4597 notecardIndex = dataString.IndexOf("}\nText length ");
4598 if (notecardIndex > 0)
4599 {
4600 notecardIndex = notecardIndex + 2; //get past delimiter
4601 notecardIndex = dataString.IndexOf("\n", notecardIndex);
4602 if (notecardIndex > 0)
4603 {
4604 // Finally got to the first line of the notecard
4605 // now find the end of the notecard text delimited by }<LF>
4606 // parse the lines, delimited by <LF>
4607 notecardIndex = dataString.IndexOf("\n", notecardIndex);
4608 notecardIndex++; // get past delimiter
4609
4610 int notecardLength = dataString.Length - notecardIndex - 3;
4611
4612 // create new string to parse that only consists of the actual lines in the asset
4613 Char[] notecardCharArray = dataString.ToCharArray(notecardIndex, notecardLength);
4614 String notecardString = new String(notecardCharArray);
4615
4616 // split the lines of the notecard into separate strings
4617 char[] delimChar = { '\n' };
4618 notecardLines = notecardString.Split(delimChar);
4619 return notecardLines;
4620 }
4621 }
4622 }
4623 }
4624 }
4625 return notecardLines;
4626 }
4627
4628 public LSL_Types.Vector3 llGetAgentSize(string id) 4586 public LSL_Types.Vector3 llGetAgentSize(string id)
4629 { 4587 {
4630 m_host.AddScriptLPS(1); 4588 m_host.AddScriptLPS(1);
@@ -5071,6 +5029,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5071 land.ParcelAccessList.Add(entry); 5029 land.ParcelAccessList.Add(entry);
5072 } 5030 }
5073 } 5031 }
5032 // ScriptSleep(100);
5074 } 5033 }
5075 5034
5076 public void llSetTouchText(string text) 5035 public void llSetTouchText(string text)
@@ -5158,6 +5117,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5158 buts[i] = buttons.Data[i].ToString(); 5117 buts[i] = buttons.Data[i].ToString();
5159 } 5118 }
5160 World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); 5119 World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts);
5120 // ScriptSleep(1000);
5161 } 5121 }
5162 5122
5163 public void llVolumeDetect(int detect) 5123 public void llVolumeDetect(int detect)
@@ -5232,12 +5192,12 @@ namespace OpenSim.Region.ScriptEngine.Common
5232 { 5192 {
5233 m_host.AddScriptLPS(1); 5193 m_host.AddScriptLPS(1);
5234 Deprecated("llRemoteLoadScript"); 5194 Deprecated("llRemoteLoadScript");
5195 // ScriptSleep(3000);
5235 } 5196 }
5236 5197
5237 public void llSetRemoteScriptAccessPin(int pin) 5198 public void llSetRemoteScriptAccessPin(int pin)
5238 { 5199 {
5239 m_host.AddScriptLPS(1); 5200 m_host.AddScriptLPS(1);
5240
5241 m_host.ScriptAccessPin = pin; 5201 m_host.ScriptAccessPin = pin;
5242 } 5202 }
5243 5203
@@ -5287,11 +5247,6 @@ namespace OpenSim.Region.ScriptEngine.Common
5287 ScriptSleep(3000); 5247 ScriptSleep(3000);
5288 } 5248 }
5289 5249
5290 // remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval)
5291 // Not sure where these constants should live:
5292 // REMOTE_DATA_CHANNEL = 1
5293 // REMOTE_DATA_REQUEST = 2
5294 // REMOTE_DATA_REPLY = 3
5295 public void llOpenRemoteDataChannel() 5250 public void llOpenRemoteDataChannel()
5296 { 5251 {
5297 m_host.AddScriptLPS(1); 5252 m_host.AddScriptLPS(1);
@@ -5302,12 +5257,14 @@ namespace OpenSim.Region.ScriptEngine.Common
5302 object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; 5257 object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) };
5303 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", EventQueueManager.llDetectNull, resobj); 5258 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", EventQueueManager.llDetectNull, resobj);
5304 } 5259 }
5260 // ScriptSleep(1000);
5305 } 5261 }
5306 5262
5307 public string llSendRemoteData(string channel, string dest, int idata, string sdata) 5263 public string llSendRemoteData(string channel, string dest, int idata, string sdata)
5308 { 5264 {
5309 m_host.AddScriptLPS(1); 5265 m_host.AddScriptLPS(1);
5310 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 5266 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
5267 // ScriptSleep(3000);
5311 return (xmlrpcMod.SendRemoteData(m_localID, m_itemID, channel, dest, idata, sdata)).ToString(); 5268 return (xmlrpcMod.SendRemoteData(m_localID, m_itemID, channel, dest, idata, sdata)).ToString();
5312 } 5269 }
5313 5270
@@ -5316,6 +5273,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5316 m_host.AddScriptLPS(1); 5273 m_host.AddScriptLPS(1);
5317 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 5274 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
5318 xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); 5275 xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata);
5276 // ScriptSleep(3000);
5319 } 5277 }
5320 5278
5321 public void llCloseRemoteDataChannel(string channel) 5279 public void llCloseRemoteDataChannel(string channel)
@@ -5323,6 +5281,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5323 m_host.AddScriptLPS(1); 5281 m_host.AddScriptLPS(1);
5324 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); 5282 IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
5325 xmlrpcMod.CloseXMLRPCChannel(channel); 5283 xmlrpcMod.CloseXMLRPCChannel(channel);
5284 // ScriptSleep(1000);
5326 } 5285 }
5327 5286
5328 public string llMD5String(string src, int nonce) 5287 public string llMD5String(string src, int nonce)
@@ -5900,7 +5859,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5900 break; 5859 break;
5901 case (int)BuiltIn_Commands_BaseClass.PRIM_GLOW: 5860 case (int)BuiltIn_Commands_BaseClass.PRIM_GLOW:
5902 if (remain < 2) 5861 if (remain < 2)
5903 return; 5862 return;
5904 face = Convert.ToInt32(rules.Data[idx++]); 5863 face = Convert.ToInt32(rules.Data[idx++]);
5905 float glow = (float)Convert.ToDouble(rules.Data[idx++]); 5864 float glow = (float)Convert.ToDouble(rules.Data[idx++]);
5906 5865
@@ -5909,7 +5868,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5909 break; 5868 break;
5910 case (int)BuiltIn_Commands_BaseClass.PRIM_BUMP_SHINY: 5869 case (int)BuiltIn_Commands_BaseClass.PRIM_BUMP_SHINY:
5911 if (remain < 3) 5870 if (remain < 3)
5912 return; 5871 return;
5913 face = Convert.ToInt32(rules.Data[idx++]); 5872 face = Convert.ToInt32(rules.Data[idx++]);
5914 int shiny = Convert.ToInt32(rules.Data[idx++]); 5873 int shiny = Convert.ToInt32(rules.Data[idx++]);
5915 Bumpiness bump = (Bumpiness)Convert.ToByte(rules.Data[idx++]); 5874 Bumpiness bump = (Bumpiness)Convert.ToByte(rules.Data[idx++]);
@@ -5918,58 +5877,58 @@ namespace OpenSim.Region.ScriptEngine.Common
5918 5877
5919 break; 5878 break;
5920 case (int)BuiltIn_Commands_BaseClass.PRIM_FULLBRIGHT: 5879 case (int)BuiltIn_Commands_BaseClass.PRIM_FULLBRIGHT:
5921 if (remain < 2) 5880 if (remain < 2)
5922 return; 5881 return;
5923 face = Convert.ToInt32(rules.Data[idx++]); 5882 face = Convert.ToInt32(rules.Data[idx++]);
5924 string bv = rules.Data[idx++].ToString(); 5883 string bv = rules.Data[idx++].ToString();
5925 bool st; 5884 bool st;
5926 if (bv.Equals("1")) 5885 if (bv.Equals("1"))
5927 st = true; 5886 st = true;
5928 else 5887 else
5929 st = false; 5888 st = false;
5930 5889
5931 SetFullBright(part, face, st); 5890 SetFullBright(part, face , st);
5932 break; 5891 break;
5933 case (int)BuiltIn_Commands_BaseClass.PRIM_MATERIAL: 5892 case (int)BuiltIn_Commands_BaseClass.PRIM_MATERIAL:
5934 if (remain < 1) 5893 if (remain < 1)
5935 return; 5894 return;
5936 if (part != null) 5895 if (part != null)
5937 { 5896 {
5938 /* Unhandled at this time - sends "Unhandled" message 5897 /* Unhandled at this time - sends "Unhandled" message
5939 will enable when available 5898 will enable when available
5940 byte material = (byte)Convert.ToByte( rules.Data[idx++]); 5899 byte material = (byte)Convert.ToByte( rules.Data[idx++]);
5941 part.Material = material; 5900 part.Material = material;
5942 */ 5901 */
5943 return; 5902 return;
5944 } 5903 }
5945 break; 5904 break;
5946 case (int)BuiltIn_Commands_BaseClass.PRIM_PHANTOM: 5905 case (int)BuiltIn_Commands_BaseClass.PRIM_PHANTOM:
5947 if (remain < 1) 5906 if (remain < 1)
5948 return; 5907 return;
5949 5908
5950 string ph = rules.Data[idx++].ToString(); 5909 string ph = rules.Data[idx++].ToString();
5951 bool phantom; 5910 bool phantom;
5952 5911
5953 if (ph.Equals("1")) 5912 if (ph.Equals("1"))
5954 phantom = true; 5913 phantom = true;
5955 else 5914 else
5956 phantom = false; 5915 phantom = false;
5957 5916
5958 part.ScriptSetPhantomStatus(phantom); 5917 part.ScriptSetPhantomStatus(phantom);
5959 part.ScheduleFullUpdate(); 5918 part.ScheduleFullUpdate();
5960 break; 5919 break;
5961 case (int)BuiltIn_Commands_BaseClass.PRIM_PHYSICS: 5920 case (int)BuiltIn_Commands_BaseClass.PRIM_PHYSICS:
5962 if (remain < 1) 5921 if (remain < 1)
5963 return; 5922 return;
5964 string phy = rules.Data[idx++].ToString(); 5923 string phy = rules.Data[idx++].ToString();
5965 bool physics; 5924 bool physics;
5966 5925
5967 if (phy.Equals("1")) 5926 if (phy.Equals("1"))
5968 physics = true; 5927 physics = true;
5969 else 5928 else
5970 physics = false; 5929 physics = false;
5971 5930
5972 m_host.ScriptSetPhysicsStatus(physics); 5931 m_host.ScriptSetPhysicsStatus(physics);
5973 part.ScheduleFullUpdate(); 5932 part.ScheduleFullUpdate();
5974 break; 5933 break;
5975 } 5934 }
@@ -6016,6 +5975,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6016 { 5975 {
6017 m_host.AddScriptLPS(1); 5976 m_host.AddScriptLPS(1);
6018 Deprecated("llXorBase64Strings"); 5977 Deprecated("llXorBase64Strings");
5978 // ScriptSleep(300);
6019 } 5979 }
6020 5980
6021 public void llRemoteDataSetRegion() 5981 public void llRemoteDataSetRegion()
@@ -6064,6 +6024,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6064 return; 6024 return;
6065 } 6025 }
6066 World.SetLandMusicURL(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, url); 6026 World.SetLandMusicURL(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y, url);
6027 // ScriptSleep(2000);
6067 } 6028 }
6068 6029
6069 public void osSetParcelMediaURL(string url) 6030 public void osSetParcelMediaURL(string url)
@@ -6203,25 +6164,6 @@ namespace OpenSim.Region.ScriptEngine.Common
6203 return m_host.ParentGroup.PrimCount; 6164 return m_host.ParentGroup.PrimCount;
6204 } 6165 }
6205 6166
6206 public int llGetNumberOfNotecardLines(string name)
6207 {
6208 m_host.AddScriptLPS(1);
6209
6210 // TODO: this script function should actually return
6211 // the number of lines via the dataserver event
6212 // once it is implemented - krtaylor
6213
6214 String[] notecardLines = GetNotecardLines(name);
6215 if (!String.IsNullOrEmpty(notecardLines[0]))
6216 {
6217 return notecardLines.Length;
6218 }
6219 else
6220 {
6221 return 0;
6222 }
6223 }
6224
6225 public LSL_Types.list llGetBoundingBox(string obj) 6167 public LSL_Types.list llGetBoundingBox(string obj)
6226 { 6168 {
6227 m_host.AddScriptLPS(1); 6169 m_host.AddScriptLPS(1);
@@ -6292,22 +6234,20 @@ namespace OpenSim.Region.ScriptEngine.Common
6292 break; 6234 break;
6293 6235
6294 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE: 6236 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE:
6295
6296 // implementing box 6237 // implementing box
6297 PrimitiveBaseShape Shape=m_host.Shape; 6238 PrimitiveBaseShape Shape = m_host.Shape;
6298 int primType=getScriptPrimType(m_host.Shape); 6239 int primType = getScriptPrimType(m_host.Shape);
6299 res.Add(new LSL_Types.LSLInteger(primType)); 6240 res.Add(new LSL_Types.LSLInteger(primType));
6300 switch(primType) 6241 switch (primType)
6301 { 6242 {
6302 case BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX: 6243 case BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX:
6303 case BuiltIn_Commands_BaseClass.PRIM_TYPE_CYLINDER: 6244 case BuiltIn_Commands_BaseClass.PRIM_TYPE_CYLINDER:
6304 case BuiltIn_Commands_BaseClass.PRIM_TYPE_PRISM: 6245 case BuiltIn_Commands_BaseClass.PRIM_TYPE_PRISM:
6305
6306 res.Add(new LSL_Types.LSLInteger(Shape.ProfileCurve)); 6246 res.Add(new LSL_Types.LSLInteger(Shape.ProfileCurve));
6307 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); 6247 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0));
6308 res.Add(new LSL_Types.LSLFloat(Shape.ProfileHollow / 50000.0)); 6248 res.Add(new LSL_Types.LSLFloat(Shape.ProfileHollow / 50000.0));
6309 res.Add(new LSL_Types.Vector3(Shape.PathTwistBegin / 100.0,Shape.PathTwist / 100.0,0)); 6249 res.Add(new LSL_Types.Vector3(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0));
6310 res.Add(new LSL_Types.Vector3(1 - (Shape.PathScaleX / 100.0-1), 1 - (Shape.PathScaleY / 100.0-1), 0)); 6250 res.Add(new LSL_Types.Vector3(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0));
6311 res.Add(new LSL_Types.Vector3(Shape.PathShearX / 100.0, Shape.PathShearY / 100.0, 0)); 6251 res.Add(new LSL_Types.Vector3(Shape.PathShearX / 100.0, Shape.PathShearY / 100.0, 0));
6312 break; 6252 break;
6313 6253
@@ -6317,24 +6257,21 @@ namespace OpenSim.Region.ScriptEngine.Common
6317 res.Add(new LSL_Types.LSLFloat(Shape.ProfileHollow / 50000.0)); 6257 res.Add(new LSL_Types.LSLFloat(Shape.ProfileHollow / 50000.0));
6318 res.Add(new LSL_Types.Vector3(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); 6258 res.Add(new LSL_Types.Vector3(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0));
6319 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); 6259 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0));
6320
6321 break; 6260 break;
6322 6261
6323
6324
6325 case BuiltIn_Commands_BaseClass.PRIM_TYPE_SCULPT: 6262 case BuiltIn_Commands_BaseClass.PRIM_TYPE_SCULPT:
6326 res.Add(Shape.SculptTexture.ToString()); 6263 res.Add(Shape.SculptTexture.ToString());
6327 res.Add(new LSL_Types.LSLInteger(Shape.SculptType)); 6264 res.Add(new LSL_Types.LSLInteger(Shape.SculptType));
6328
6329 break; 6265 break;
6266
6330 case BuiltIn_Commands_BaseClass.PRIM_TYPE_RING: 6267 case BuiltIn_Commands_BaseClass.PRIM_TYPE_RING:
6331 case BuiltIn_Commands_BaseClass.PRIM_TYPE_TUBE: 6268 case BuiltIn_Commands_BaseClass.PRIM_TYPE_TUBE:
6332 case BuiltIn_Commands_BaseClass.PRIM_TYPE_TORUS: 6269 case BuiltIn_Commands_BaseClass.PRIM_TYPE_TORUS:
6333 // holeshape 6270 // holeshape
6334 res.Add(new LSL_Types.LSLInteger(Shape.ProfileCurve)); 6271 res.Add(new LSL_Types.LSLInteger(Shape.ProfileCurve));
6335 6272
6336 // cut 6273 // cut
6337 res.Add(new LSL_Types.Vector3(Shape.PathBegin / 50000.0, 1 - Shape.PathEnd / 50000.0, 0)); 6274 res.Add(new LSL_Types.Vector3(Shape.PathBegin / 50000.0, 1 - Shape.PathEnd / 50000.0, 0));
6338 6275
6339 // hollow 6276 // hollow
6340 res.Add(new LSL_Types.LSLFloat(Shape.ProfileHollow / 50000.0)); 6277 res.Add(new LSL_Types.LSLFloat(Shape.ProfileHollow / 50000.0));
@@ -6344,29 +6281,27 @@ namespace OpenSim.Region.ScriptEngine.Common
6344 6281
6345 // vector holesize 6282 // vector holesize
6346 res.Add(new LSL_Types.Vector3(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0)); 6283 res.Add(new LSL_Types.Vector3(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0));
6347 6284
6348 // vector topshear 6285 // vector topshear
6349 res.Add(new LSL_Types.Vector3(Shape.PathShearX / 100.0, Shape.PathShearY / 100.0, 0)); 6286 res.Add(new LSL_Types.Vector3(Shape.PathShearX / 100.0, Shape.PathShearY / 100.0, 0));
6350 6287
6351 // vector profilecut 6288 // vector profilecut
6352 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin/ 50000.0, 1 - Shape.ProfileEnd / 50000.0,0)); 6289 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0));
6353 6290
6354 6291
6355 // vector tapera 6292 // vector tapera
6356 res.Add(new LSL_Types.Vector3(Shape.PathTaperX / 100.0,Shape.PathTaperY / 100.0,0)); 6293 res.Add(new LSL_Types.Vector3(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0));
6357 6294
6358 // float revolutions, 6295 // float revolutions,
6359 res.Add(new LSL_Types.LSLFloat(Shape.PathRevolutions/50.0)); // needs fixing :( 6296 res.Add(new LSL_Types.LSLFloat(Shape.PathRevolutions / 50.0)); // needs fixing :(
6360 6297
6361 // float radiusoffset, 6298 // float radiusoffset,
6362 res.Add(new LSL_Types.LSLFloat(Shape.PathRadiusOffset/100.0)); 6299 res.Add(new LSL_Types.LSLFloat(Shape.PathRadiusOffset / 100.0));
6363 6300
6364 // float skew 6301 // float skew
6365 res.Add(new LSL_Types.LSLFloat(Shape.PathSkew/100.0)); 6302 res.Add(new LSL_Types.LSLFloat(Shape.PathSkew / 100.0));
6366 break; 6303 break;
6367
6368 6304
6369
6370 } 6305 }
6371 break; 6306 break;
6372 6307
@@ -6374,7 +6309,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6374 if (remain < 1) 6309 if (remain < 1)
6375 return res; 6310 return res;
6376 6311
6377 int face=Convert.ToInt32(""+rules.Data[idx++]); 6312 int face = Convert.ToInt32("" + rules.Data[idx++]);
6378 if (face == -1) 6313 if (face == -1)
6379 face = 0; 6314 face = 0;
6380 6315
@@ -6395,7 +6330,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6395 if (remain < 1) 6330 if (remain < 1)
6396 return res; 6331 return res;
6397 6332
6398 face=Convert.ToInt32(""+rules.Data[idx++]); 6333 face=Convert.ToInt32("" + rules.Data[idx++]);
6399 6334
6400 tex = m_host.Shape.Textures; 6335 tex = m_host.Shape.Textures;
6401 LLColor texcolor; 6336 LLColor texcolor;
@@ -6753,6 +6688,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6753 { 6688 {
6754 m_host.AddScriptLPS(1); 6689 m_host.AddScriptLPS(1);
6755 m_host.RotationOffset = new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); 6690 m_host.RotationOffset = new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
6691 // ScriptSleep(200);
6756 } 6692 }
6757 6693
6758 // <summary> 6694 // <summary>
@@ -6872,7 +6808,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6872 if (active[j]) 6808 if (active[j])
6873 { 6809 {
6874 // scan all of the markers 6810 // scan all of the markers
6875 if ((offset[j] = src.IndexOf((string)spcarray[j-seplen],beginning)) == -1) 6811 if ((offset[j] = src.IndexOf((string)spcarray[j-seplen], beginning)) == -1)
6876 { 6812 {
6877 // not present at all 6813 // not present at all
6878 active[j] = false; 6814 active[j] = false;
@@ -6896,7 +6832,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6896 { 6832 {
6897 // no markers were found on this pass 6833 // no markers were found on this pass
6898 // so we're pretty much done 6834 // so we're pretty much done
6899 tokens.Add(src.Substring(beginning, srclen-beginning)); 6835 tokens.Add(src.Substring(beginning, srclen - beginning));
6900 break; 6836 break;
6901 } 6837 }
6902 6838
@@ -6907,14 +6843,13 @@ namespace OpenSim.Region.ScriptEngine.Common
6907 6843
6908 if (best < seplen) 6844 if (best < seplen)
6909 { 6845 {
6910 beginning = offset[best]+((string)separray[best]).Length; 6846 beginning = offset[best] + ((string)separray[best]).Length;
6911 } 6847 }
6912 else 6848 else
6913 { 6849 {
6914 beginning = offset[best]+((string)spcarray[best-seplen]).Length; 6850 beginning = offset[best] + ((string)spcarray[best - seplen]).Length;
6915 tokens.Add(spcarray[best-seplen]); 6851 tokens.Add(spcarray[best - seplen]);
6916 } 6852 }
6917
6918 } 6853 }
6919 6854
6920 // This an awkward an not very intuitive boundary case. If the 6855 // This an awkward an not very intuitive boundary case. If the
@@ -7053,65 +6988,78 @@ namespace OpenSim.Region.ScriptEngine.Common
7053 public void llOwnerSay(string msg) 6988 public void llOwnerSay(string msg)
7054 { 6989 {
7055 m_host.AddScriptLPS(1); 6990 m_host.AddScriptLPS(1);
7056 World.SimChatBroadcast(Helpers.StringToField(msg),
7057 ChatTypeEnum.Owner, 0, m_host.AbsolutePosition,
7058 m_host.Name, m_host.UUID, false);
7059 6991
7060 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 6992 World.SimChatBroadcast(Helpers.StringToField(msg), ChatTypeEnum.Owner, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID, false);
7061 wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); 6993// IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
6994// wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg);
7062 } 6995 }
7063 6996
7064 public string llRequestSimulatorData(string simulator, int data) 6997 public string llRequestSimulatorData(string simulator, int data)
7065 { 6998 {
7066 m_host.AddScriptLPS(1); 6999 try
7000 {
7001 m_host.AddScriptLPS(1);
7067 7002
7068 string reply = String.Empty; 7003 string reply = String.Empty;
7069 7004
7070 RegionInfo info = m_ScriptEngine.World.RequestClosestRegion(simulator); 7005 RegionInfo info = m_ScriptEngine.World.RequestClosestRegion(simulator);
7071 7006
7072 switch (data) 7007 switch (data)
7073 { 7008 {
7074 case 5: // DATA_SIM_POS 7009 case 5: // DATA_SIM_POS
7075 if (info == null) 7010 if (info == null)
7076 return LLUUID.Zero.ToString(); 7011 {
7077 reply = new LSL_Types.Vector3( 7012 // ScriptSleep(1000);
7078 info.RegionLocX * Constants.RegionSize, 7013 return LLUUID.Zero.ToString();
7079 info.RegionLocY * Constants.RegionSize, 7014 }
7080 0).ToString(); 7015 reply = new LSL_Types.Vector3(
7081 break; 7016 info.RegionLocX * Constants.RegionSize,
7082 case 6: // DATA_SIM_STATUS 7017 info.RegionLocY * Constants.RegionSize,
7083 if (info != null) 7018 0).ToString();
7084 reply = "up"; // Duh! 7019 break;
7085 else 7020 case 6: // DATA_SIM_STATUS
7086 reply = "unknown"; 7021 if (info != null)
7087 break; 7022 reply = "up"; // Duh!
7088 case 7: // DATA_SIM_RATING 7023 else
7089 if (info == null) 7024 reply = "unknown";
7090 return LLUUID.Zero.ToString(); 7025 break;
7091 int access = info.RegionSettings.Maturity; 7026 case 7: // DATA_SIM_RATING
7092 if (access == 0) 7027 if (info == null)
7093 reply = "PG"; 7028 {
7094 else if (access == 1) 7029 // ScriptSleep(1000);
7095 reply = "MATURE"; 7030 return LLUUID.Zero.ToString();
7096 else 7031 }
7097 reply = "UNKNOWN"; 7032 int access = info.RegionSettings.Maturity;
7098 break; 7033 if (access == 0)
7099 case 128: // SIM_RELEASE 7034 reply = "PG";
7100 reply = m_ScriptEngine.World.GetSimulatorVersion(); 7035 else if (access == 1)
7101 break; 7036 reply = "MATURE";
7102 default: 7037 else
7103 return LLUUID.Zero.ToString(); // Raise no event 7038 reply = "UNKNOWN";
7104 } 7039 break;
7105 LLUUID rq = LLUUID.Random(); 7040 case 128: // SIM_RELEASE
7041 reply = m_ScriptEngine.World.GetSimulatorVersion();
7042 break;
7043 default:
7044 // ScriptSleep(1000);
7045 return LLUUID.Zero.ToString(); // Raise no event
7046 }
7047 LLUUID rq = LLUUID.Random();
7106 7048
7107 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 7049 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
7108 m_Dataserver.RegisterRequest(m_localID, 7050 m_Dataserver.RegisterRequest(m_localID, m_itemID, rq.ToString());
7109 m_itemID, rq.ToString());
7110 7051
7111 m_ScriptEngine.m_ASYNCLSLCommandManager. 7052 m_ScriptEngine.m_ASYNCLSLCommandManager.
7112 m_Dataserver.DataserverReply(rq.ToString(), reply); 7053 m_Dataserver.DataserverReply(rq.ToString(), reply);
7113 7054
7114 return tid.ToString(); 7055 // ScriptSleep(1000);
7056 return tid.ToString();
7057 }
7058 catch(Exception e)
7059 {
7060 Console.WriteLine(e.ToString());
7061 return LLUUID.Zero.ToString();
7062 }
7115 } 7063 }
7116 7064
7117 public void llForceMouselook(int mouselook) 7065 public void llForceMouselook(int mouselook)
@@ -7145,7 +7093,6 @@ namespace OpenSim.Region.ScriptEngine.Common
7145 7093
7146 public LSL_Types.list llListReplaceList(LSL_Types.list dest, LSL_Types.list src, int start, int end) 7094 public LSL_Types.list llListReplaceList(LSL_Types.list dest, LSL_Types.list src, int start, int end)
7147 { 7095 {
7148
7149 LSL_Types.list pref = null; 7096 LSL_Types.list pref = null;
7150 7097
7151 m_host.AddScriptLPS(1); 7098 m_host.AddScriptLPS(1);
@@ -7175,9 +7122,9 @@ namespace OpenSim.Region.ScriptEngine.Common
7175 pref = dest.GetSublist(0,start-1); 7122 pref = dest.GetSublist(0,start-1);
7176 // Only add a suffix if there is something 7123 // Only add a suffix if there is something
7177 // beyond the end index (it's inclusive too). 7124 // beyond the end index (it's inclusive too).
7178 if (end+1 < dest.Length) 7125 if (end + 1 < dest.Length)
7179 { 7126 {
7180 return pref + src + dest.GetSublist(end+1,-1); 7127 return pref + src + dest.GetSublist(end + 1, -1);
7181 } 7128 }
7182 else 7129 else
7183 { 7130 {
@@ -7192,9 +7139,9 @@ namespace OpenSim.Region.ScriptEngine.Common
7192 // is removed. 7139 // is removed.
7193 else 7140 else
7194 { 7141 {
7195 if (end+1 < dest.Length) 7142 if (end + 1 < dest.Length)
7196 { 7143 {
7197 return src + dest.GetSublist(end+1,-1); 7144 return src + dest.GetSublist(end + 1, -1);
7198 } 7145 }
7199 else 7146 else
7200 { 7147 {
@@ -7210,7 +7157,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7210 // might have been negative. 7157 // might have been negative.
7211 else 7158 else
7212 { 7159 {
7213 return dest.GetSublist(end+1,start-1)+src; 7160 return dest.GetSublist(end + 1, start - 1) + src;
7214 } 7161 }
7215 } 7162 }
7216 7163
@@ -7220,6 +7167,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7220 LLUUID avatarId = new LLUUID(avatar_id); 7167 LLUUID avatarId = new LLUUID(avatar_id);
7221 m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message, 7168 m_ScriptEngine.World.SendUrlToUser(avatarId, m_host.Name, m_host.UUID, m_host.ObjectOwner, false, message,
7222 url); 7169 url);
7170 // ScriptSleep(10000);
7223 } 7171 }
7224 7172
7225 public void llParcelMediaCommandList(LSL_Types.list commandList) 7173 public void llParcelMediaCommandList(LSL_Types.list commandList)
@@ -7306,7 +7254,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7306 }//end switch 7254 }//end switch
7307 7255
7308 } 7256 }
7309 7257 // ScriptSleep(2000);
7310 7258
7311 //NotImplemented("llParcelMediaCommandList"); 7259 //NotImplemented("llParcelMediaCommandList");
7312 } 7260 }
@@ -7346,8 +7294,8 @@ namespace OpenSim.Region.ScriptEngine.Common
7346 7294
7347 } 7295 }
7348 } 7296 }
7297 // ScriptSleep(2000);
7349 return list; 7298 return list;
7350
7351 } 7299 }
7352 7300
7353 public LSL_Types.LSLInteger llModPow(int a, int b, int c) 7301 public LSL_Types.LSLInteger llModPow(int a, int b, int c)
@@ -7355,6 +7303,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7355 m_host.AddScriptLPS(1); 7303 m_host.AddScriptLPS(1);
7356 Int64 tmp = 0; 7304 Int64 tmp = 0;
7357 Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp); 7305 Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp);
7306 // ScriptSleep(1000);
7358 return Convert.ToInt32(tmp); 7307 return Convert.ToInt32(tmp);
7359 } 7308 }
7360 7309
@@ -7420,12 +7369,14 @@ namespace OpenSim.Region.ScriptEngine.Common
7420 { 7369 {
7421 m_host.AddScriptLPS(1); 7370 m_host.AddScriptLPS(1);
7422 NotImplemented("llSetPrimURL"); 7371 NotImplemented("llSetPrimURL");
7372 // ScriptSleep(2000);
7423 } 7373 }
7424 7374
7425 public void llRefreshPrimURL() 7375 public void llRefreshPrimURL()
7426 { 7376 {
7427 m_host.AddScriptLPS(1); 7377 m_host.AddScriptLPS(1);
7428 NotImplemented("llRefreshPrimURL"); 7378 NotImplemented("llRefreshPrimURL");
7379 // ScriptSleep(20000);
7429 } 7380 }
7430 7381
7431 public string llEscapeURL(string url) 7382 public string llEscapeURL(string url)
@@ -7458,6 +7409,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7458 { 7409 {
7459 m_host.AddScriptLPS(1); 7410 m_host.AddScriptLPS(1);
7460 NotImplemented("llMapDestination"); 7411 NotImplemented("llMapDestination");
7412 // ScriptSleep(1000);
7461 } 7413 }
7462 7414
7463 public void llAddToLandBanList(string avatar, double hours) 7415 public void llAddToLandBanList(string avatar, double hours)
@@ -7476,6 +7428,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7476 land.ParcelAccessList.Add(entry); 7428 land.ParcelAccessList.Add(entry);
7477 } 7429 }
7478 } 7430 }
7431 // ScriptSleep(100);
7479 } 7432 }
7480 7433
7481 public void llRemoveFromLandPassList(string avatar) 7434 public void llRemoveFromLandPassList(string avatar)
@@ -7497,6 +7450,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7497 } 7450 }
7498 } 7451 }
7499 } 7452 }
7453 // ScriptSleep(100);
7500 } 7454 }
7501 7455
7502 public void llRemoveFromLandBanList(string avatar) 7456 public void llRemoveFromLandBanList(string avatar)
@@ -7518,6 +7472,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7518 } 7472 }
7519 } 7473 }
7520 } 7474 }
7475 // ScriptSleep(100);
7521 } 7476 }
7522 7477
7523 public void llSetCameraParams(LSL_Types.list rules) 7478 public void llSetCameraParams(LSL_Types.list rules)
@@ -7647,7 +7602,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7647 IEstateModule estate = World.RequestModuleInterface<IEstateModule>(); 7602 IEstateModule estate = World.RequestModuleInterface<IEstateModule>();
7648 if (estate == null) 7603 if (estate == null)
7649 return 67108864; 7604 return 67108864;
7650 return estate.GetRegionFlags(); 7605 return (int)estate.GetRegionFlags();
7651 } 7606 }
7652 7607
7653 public string llXorBase64StringsCorrect(string str1, string str2) 7608 public string llXorBase64StringsCorrect(string str1, string str2)
@@ -7725,6 +7680,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7725 } 7680 }
7726 } 7681 }
7727 } 7682 }
7683 // ScriptSleep(100);
7728 } 7684 }
7729 7685
7730 public void llResetLandPassList() 7686 public void llResetLandPassList()
@@ -7741,6 +7697,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7741 } 7697 }
7742 } 7698 }
7743 } 7699 }
7700 // ScriptSleep(100);
7744 } 7701 }
7745 7702
7746 public LSL_Types.LSLInteger llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) 7703 public LSL_Types.LSLInteger llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide)
@@ -7819,6 +7776,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7819 ret.Add(d.Value); 7776 ret.Add(d.Value);
7820 } 7777 }
7821 } 7778 }
7779 // ScriptSleep(2000);
7822 return ret; 7780 return ret;
7823 } 7781 }
7824 7782
@@ -7915,6 +7873,7 @@ namespace OpenSim.Region.ScriptEngine.Common
7915 return; 7873 return;
7916 7874
7917 SetTexture(part, texture, face); 7875 SetTexture(part, texture, face);
7876 // ScriptSleep(200);
7918 } 7877 }
7919 7878
7920 public string llStringTrim(string src, int type) 7879 public string llStringTrim(string src, int type)
@@ -8041,5 +8000,102 @@ namespace OpenSim.Region.ScriptEngine.Common
8041 { 8000 {
8042 throw new Exception("LSL Runtime Error: " + msg); 8001 throw new Exception("LSL Runtime Error: " + msg);
8043 } 8002 }
8003 public int llGetNumberOfNotecardLines(string name)
8004 {
8005 m_host.AddScriptLPS(1);
8006
8007 // TODO: this script function should actually return
8008 // the number of lines via the dataserver event
8009 // once it is implemented - krtaylor
8010
8011 String[] notecardLines = GetNotecardLines(name);
8012 if (!String.IsNullOrEmpty(notecardLines[0]))
8013 {
8014 return notecardLines.Length;
8015 }
8016 else
8017 {
8018 return 0;
8019 }
8020 // ScriptSleep(100);
8021 }
8022
8023 public string llGetNotecardLine(string name, int line)
8024 {
8025 m_host.AddScriptLPS(1);
8026
8027 // TODO: this script function should actually return
8028 // the requested notecard line via the dataserver event
8029 // once it is implemented - krtaylor
8030
8031 String[] notecardLines = GetNotecardLines(name);
8032
8033 line--; // array starts at 0
8034 if ((!String.IsNullOrEmpty(notecardLines[0])) &&
8035 (line >= 0) &&
8036 (line < notecardLines.Length))
8037 {
8038 // ScriptSleep(100);
8039 return notecardLines[line];
8040 }
8041 else
8042 {
8043 // ScriptSleep(100);
8044 return String.Empty;
8045 }
8046 }
8047
8048 private String[] GetNotecardLines(string name)
8049 {
8050 // bool found = false;
8051 int notecardIndex = 0;
8052 String[] notecardLines = { "0" };
8053 notecardLines[0] = String.Empty;
8054
8055 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory)
8056 {
8057 if ((inv.Value.Name == name) && (inv.Value.InvType == (int)InventoryType.Notecard))
8058 {
8059 // OK, it has the right name and it is a notecard
8060 // so get the asset that contains the notecard raw data
8061 // and convert it into a string
8062 AssetBase notecardAsset = World.AssetCache.GetAsset(inv.Value.AssetID, false);
8063 String dataString = System.Text.Encoding.ASCII.GetString(notecardAsset.Data);
8064
8065 if (!String.IsNullOrEmpty(dataString))
8066 {
8067 // good, we have the notecard data as a string
8068 // now parse the text lines using the Linden Text delimiters
8069 notecardIndex = dataString.IndexOf("}\nText length ");
8070 if (notecardIndex > 0)
8071 {
8072 notecardIndex = notecardIndex + 2; //get past delimiter
8073 notecardIndex = dataString.IndexOf("\n", notecardIndex);
8074 if (notecardIndex > 0)
8075 {
8076 // Finally got to the first line of the notecard
8077 // now find the end of the notecard text delimited by }<LF>
8078 // parse the lines, delimited by <LF>
8079 notecardIndex = dataString.IndexOf("\n", notecardIndex);
8080 notecardIndex++; // get past delimiter
8081
8082 int notecardLength = dataString.Length - notecardIndex - 3;
8083
8084 // create new string to parse that only consists of the actual lines in the asset
8085 Char[] notecardCharArray = dataString.ToCharArray(notecardIndex, notecardLength);
8086 String notecardString = new String(notecardCharArray);
8087
8088 // split the lines of the notecard into separate strings
8089 char[] delimChar = { '\n' };
8090 notecardLines = notecardString.Split(delimChar);
8091 return notecardLines;
8092 }
8093 }
8094 }
8095 }
8096 }
8097 return notecardLines;
8098 }
8099
8044 } 8100 }
8045} 8101}