aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs539
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_Types.cs376
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs24
3 files changed, 476 insertions, 463 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index c8b7d5c..6cebf04 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -303,26 +303,26 @@ namespace OpenSim.Region.ScriptEngine.Common
303 double sqx = r.x*r.x; 303 double sqx = r.x*r.x;
304 double sqy = r.y*r.y; 304 double sqy = r.y*r.y;
305 double sqz = r.z*r.z; 305 double sqz = r.z*r.z;
306 double unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor 306 double unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
307 double test = r.x*r.y + r.z*r.s; 307 double test = r.x*r.y + r.z*r.s;
308 if (test > 0.499 * unit) // singularity at north pole 308 if (test > 0.499 * unit) // singularity at north pole
309 { 309 {
310 x = 0; 310 x = 0;
311 y = 2 * Math.Atan2(r.x, r.s); 311 y = 2 * Math.Atan2(r.x, r.s);
312 z = Math.PI/2; 312 z = Math.PI/2;
313 return new LSL_Types.Vector3(x, y, z); 313 return new LSL_Types.Vector3(x, y, z);
314 } 314 }
315 if (test < -0.499 * unit) // singularity at south pole 315 if (test < -0.499 * unit) // singularity at south pole
316 { 316 {
317 x = 0; 317 x = 0;
318 y = -2 * Math.Atan2(r.x,r.s); 318 y = -2 * Math.Atan2(r.x,r.s);
319 z = -Math.PI/2; 319 z = -Math.PI/2;
320 return new LSL_Types.Vector3(x, y, z); 320 return new LSL_Types.Vector3(x, y, z);
321 } 321 }
322 x = Math.Atan2(2 * r.x * r.s - 2 * r.y * r.z, -sqx + sqy - sqz + sqw); 322 x = Math.Atan2(2 * r.x * r.s - 2 * r.y * r.z, -sqx + sqy - sqz + sqw);
323 y = Math.Atan2(2*r.y*r.s-2*r.x*r.z , sqx - sqy - sqz + sqw); 323 y = Math.Atan2(2*r.y*r.s-2*r.x*r.z , sqx - sqy - sqz + sqw);
324 z = Math.Asin(2*test/unit); 324 z = Math.Asin(2*test/unit);
325 return new LSL_Types.Vector3(x, y, z); 325 return new LSL_Types.Vector3(x, y, z);
326 } 326 }
327 327
328 328
@@ -490,11 +490,11 @@ namespace OpenSim.Region.ScriptEngine.Common
490 490
491 public void llRegionSay(int channelID, string text) 491 public void llRegionSay(int channelID, string text)
492 { 492 {
493 if(channelID == 0) 493 if (channelID == 0)
494 { 494 {
495 LSLError("Cannot use llRegionSay() on channel 0"); 495 LSLError("Cannot use llRegionSay() on channel 0");
496 return; 496 return;
497 } 497 }
498 498
499 m_host.AddScriptLPS(1); 499 m_host.AddScriptLPS(1);
500 500
@@ -922,11 +922,11 @@ namespace OpenSim.Region.ScriptEngine.Common
922 public void llSetScale(LSL_Types.Vector3 scale) 922 public void llSetScale(LSL_Types.Vector3 scale)
923 { 923 {
924 m_host.AddScriptLPS(1); 924 m_host.AddScriptLPS(1);
925 SetScale(m_host, scale); 925 SetScale(m_host, scale);
926 } 926 }
927 927
928 private void SetScale(SceneObjectPart part, LSL_Types.Vector3 scale) 928 private void SetScale(SceneObjectPart part, LSL_Types.Vector3 scale)
929 { 929 {
930 // TODO: this needs to trigger a persistance save as well 930 // TODO: this needs to trigger a persistance save as well
931 LLVector3 tmp = part.Scale; 931 LLVector3 tmp = part.Scale;
932 tmp.X = (float)scale.x; 932 tmp.X = (float)scale.x;
@@ -947,11 +947,11 @@ namespace OpenSim.Region.ScriptEngine.Common
947 { 947 {
948 m_host.AddScriptLPS(1); 948 m_host.AddScriptLPS(1);
949 949
950 SetColor(m_host, color, face); 950 SetColor(m_host, color, face);
951 } 951 }
952 952
953 private void SetColor(SceneObjectPart part, LSL_Types.Vector3 color, int face) 953 private void SetColor(SceneObjectPart part, LSL_Types.Vector3 color, int face)
954 { 954 {
955 LLObject.TextureEntry tex = part.Shape.Textures; 955 LLObject.TextureEntry tex = part.Shape.Textures;
956 LLColor texcolor; 956 LLColor texcolor;
957 if (face > -1) 957 if (face > -1)
@@ -1010,11 +1010,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1010 { 1010 {
1011 m_host.AddScriptLPS(1); 1011 m_host.AddScriptLPS(1);
1012 1012
1013 SetAlpha(m_host, alpha, face); 1013 SetAlpha(m_host, alpha, face);
1014 } 1014 }
1015 1015
1016 private void SetAlpha(SceneObjectPart part, double alpha, int face) 1016 private void SetAlpha(SceneObjectPart part, double alpha, int face)
1017 { 1017 {
1018 LLObject.TextureEntry tex = part.Shape.Textures; 1018 LLObject.TextureEntry tex = part.Shape.Textures;
1019 LLColor texcolor; 1019 LLColor texcolor;
1020 if (face > -1) 1020 if (face > -1)
@@ -1080,19 +1080,19 @@ namespace OpenSim.Region.ScriptEngine.Common
1080 public void llSetTexture(string texture, int face) 1080 public void llSetTexture(string texture, int face)
1081 { 1081 {
1082 m_host.AddScriptLPS(1); 1082 m_host.AddScriptLPS(1);
1083 SetTexture(m_host, texture, face); 1083 SetTexture(m_host, texture, face);
1084 } 1084 }
1085 1085
1086 private void SetTexture(SceneObjectPart part, string texture, int face) 1086 private void SetTexture(SceneObjectPart part, string texture, int face)
1087 { 1087 {
1088 LLUUID textureID=new LLUUID(); 1088 LLUUID textureID=new LLUUID();
1089 1089
1090 if(!LLUUID.TryParse(texture, out textureID)) 1090 if (!LLUUID.TryParse(texture, out textureID))
1091 { 1091 {
1092 textureID=InventoryKey(texture, (int)AssetType.Texture); 1092 textureID=InventoryKey(texture, (int)AssetType.Texture);
1093 } 1093 }
1094 1094
1095 if(textureID == LLUUID.Zero) 1095 if (textureID == LLUUID.Zero)
1096 return; 1096 return;
1097 1097
1098 LLObject.TextureEntry tex = part.Shape.Textures; 1098 LLObject.TextureEntry tex = part.Shape.Textures;
@@ -1128,11 +1128,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1128 { 1128 {
1129 m_host.AddScriptLPS(1); 1129 m_host.AddScriptLPS(1);
1130 1130
1131 ScaleTexture(m_host, u, v, face); 1131 ScaleTexture(m_host, u, v, face);
1132 } 1132 }
1133 1133
1134 private void ScaleTexture(SceneObjectPart part, double u, double v, int face) 1134 private void ScaleTexture(SceneObjectPart part, double u, double v, int face)
1135 { 1135 {
1136 LLObject.TextureEntry tex = part.Shape.Textures; 1136 LLObject.TextureEntry tex = part.Shape.Textures;
1137 if (face > -1) 1137 if (face > -1)
1138 { 1138 {
@@ -1167,11 +1167,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1167 public void llOffsetTexture(double u, double v, int face) 1167 public void llOffsetTexture(double u, double v, int face)
1168 { 1168 {
1169 m_host.AddScriptLPS(1); 1169 m_host.AddScriptLPS(1);
1170 OffsetTexture(m_host, u, v, face); 1170 OffsetTexture(m_host, u, v, face);
1171 } 1171 }
1172 1172
1173 private void OffsetTexture(SceneObjectPart part, double u, double v, int face) 1173 private void OffsetTexture(SceneObjectPart part, double u, double v, int face)
1174 { 1174 {
1175 LLObject.TextureEntry tex = part.Shape.Textures; 1175 LLObject.TextureEntry tex = part.Shape.Textures;
1176 if (face > -1) 1176 if (face > -1)
1177 { 1177 {
@@ -1206,11 +1206,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1206 public void llRotateTexture(double rotation, int face) 1206 public void llRotateTexture(double rotation, int face)
1207 { 1207 {
1208 m_host.AddScriptLPS(1); 1208 m_host.AddScriptLPS(1);
1209 RotateTexture(m_host, rotation, face); 1209 RotateTexture(m_host, rotation, face);
1210 } 1210 }
1211 1211
1212 private void RotateTexture(SceneObjectPart part, double rotation, int face) 1212 private void RotateTexture(SceneObjectPart part, double rotation, int face)
1213 { 1213 {
1214 LLObject.TextureEntry tex = part.Shape.Textures; 1214 LLObject.TextureEntry tex = part.Shape.Textures;
1215 if (face > -1) 1215 if (face > -1)
1216 { 1216 {
@@ -1264,11 +1264,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1264 { 1264 {
1265 m_host.AddScriptLPS(1); 1265 m_host.AddScriptLPS(1);
1266 1266
1267 SetPos(m_host, pos); 1267 SetPos(m_host, pos);
1268 } 1268 }
1269 1269
1270 private void SetPos(SceneObjectPart part, LSL_Types.Vector3 pos) 1270 private void SetPos(SceneObjectPart part, LSL_Types.Vector3 pos)
1271 { 1271 {
1272 if (part.ParentID != 0) 1272 if (part.ParentID != 0)
1273 { 1273 {
1274 part.UpdateOffSet(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z)); 1274 part.UpdateOffSet(new LLVector3((float)pos.x, (float)pos.y, (float)pos.z));
@@ -1308,11 +1308,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1308 { 1308 {
1309 m_host.AddScriptLPS(1); 1309 m_host.AddScriptLPS(1);
1310 1310
1311 SetRot(m_host, rot); 1311 SetRot(m_host, rot);
1312 } 1312 }
1313 1313
1314 private void SetRot(SceneObjectPart part, LSL_Types.Quaternion rot) 1314 private void SetRot(SceneObjectPart part, LSL_Types.Quaternion rot)
1315 { 1315 {
1316 part.UpdateRotation(new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s)); 1316 part.UpdateRotation(new LLQuaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s));
1317 // Update rotation does not move the object in the physics scene if it's a linkset. 1317 // Update rotation does not move the object in the physics scene if it's a linkset.
1318 part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition; 1318 part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition;
@@ -1569,7 +1569,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1569 if (start <= end) 1569 if (start <= end)
1570 { 1570 {
1571 // Implies both bounds are out-of-range. 1571 // Implies both bounds are out-of-range.
1572 if(end < 0 || start >= src.Length) 1572 if (end < 0 || start >= src.Length)
1573 { 1573 {
1574 return String.Empty; 1574 return String.Empty;
1575 } 1575 }
@@ -1577,12 +1577,12 @@ namespace OpenSim.Region.ScriptEngine.Common
1577 // corresponds to the lengt of the substring 1577 // corresponds to the lengt of the substring
1578 // needed (plus one of course). BUT, it 1578 // needed (plus one of course). BUT, it
1579 // must be within bounds. 1579 // must be within bounds.
1580 if(end >= src.Length) 1580 if (end >= src.Length)
1581 { 1581 {
1582 end = src.Length-1; 1582 end = src.Length-1;
1583 } 1583 }
1584 1584
1585 if(start < 0) 1585 if (start < 0)
1586 { 1586 {
1587 return src.Substring(0,end+1); 1587 return src.Substring(0,end+1);
1588 } 1588 }
@@ -1597,21 +1597,21 @@ namespace OpenSim.Region.ScriptEngine.Common
1597 // lower bound. In the inverted case, that 1597 // lower bound. In the inverted case, that
1598 // means the entire string will be returned 1598 // means the entire string will be returned
1599 // unchanged. 1599 // unchanged.
1600 if(start < 0) 1600 if (start < 0)
1601 { 1601 {
1602 return src; 1602 return src;
1603 } 1603 }
1604 // If both indices are greater than the upper 1604 // If both indices are greater than the upper
1605 // bound the result may seem initially counter 1605 // bound the result may seem initially counter
1606 // intuitive. 1606 // intuitive.
1607 if(end >= src.Length) 1607 if (end >= src.Length)
1608 { 1608 {
1609 return src; 1609 return src;
1610 } 1610 }
1611 1611
1612 if(end < 0) 1612 if (end < 0)
1613 { 1613 {
1614 if(start < src.Length) 1614 if (start < src.Length)
1615 { 1615 {
1616 return src.Substring(start); 1616 return src.Substring(start);
1617 } 1617 }
@@ -1622,7 +1622,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1622 } 1622 }
1623 else 1623 else
1624 { 1624 {
1625 if(start < src.Length) 1625 if (start < src.Length)
1626 { 1626 {
1627 return src.Substring(0,end+1) + src.Substring(start); 1627 return src.Substring(0,end+1) + src.Substring(start);
1628 } 1628 }
@@ -1664,18 +1664,18 @@ namespace OpenSim.Region.ScriptEngine.Common
1664 { 1664 {
1665 // If both bounds are outside of the existing 1665 // If both bounds are outside of the existing
1666 // string, then return unchanges. 1666 // string, then return unchanges.
1667 if(end < 0 || start >= src.Length) 1667 if (end < 0 || start >= src.Length)
1668 { 1668 {
1669 return src; 1669 return src;
1670 } 1670 }
1671 // At least one bound is in-range, so we 1671 // At least one bound is in-range, so we
1672 // need to clip the out-of-bound argument. 1672 // need to clip the out-of-bound argument.
1673 if(start < 0) 1673 if (start < 0)
1674 { 1674 {
1675 start = 0; 1675 start = 0;
1676 } 1676 }
1677 1677
1678 if(end >= src.Length) 1678 if (end >= src.Length)
1679 { 1679 {
1680 end = src.Length-1; 1680 end = src.Length-1;
1681 } 1681 }
@@ -1687,14 +1687,14 @@ namespace OpenSim.Region.ScriptEngine.Common
1687 { 1687 {
1688 // In this case, out of bounds means that 1688 // In this case, out of bounds means that
1689 // the existing string is part of the cut. 1689 // the existing string is part of the cut.
1690 if(start < 0 || end >= src.Length) 1690 if (start < 0 || end >= src.Length)
1691 { 1691 {
1692 return String.Empty; 1692 return String.Empty;
1693 } 1693 }
1694 1694
1695 if(end > 0) 1695 if (end > 0)
1696 { 1696 {
1697 if(start < src.Length) 1697 if (start < src.Length)
1698 { 1698 {
1699 return src.Remove(start).Remove(0,end+1); 1699 return src.Remove(start).Remove(0,end+1);
1700 } 1700 }
@@ -1705,7 +1705,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1705 } 1705 }
1706 else 1706 else
1707 { 1707 {
1708 if(start < src.Length) 1708 if (start < src.Length)
1709 { 1709 {
1710 return src.Remove(start); 1710 return src.Remove(start);
1711 } 1711 }
@@ -1741,14 +1741,14 @@ namespace OpenSim.Region.ScriptEngine.Common
1741 // Negative now means it is less than the lower 1741 // Negative now means it is less than the lower
1742 // bound of the string. 1742 // bound of the string.
1743 1743
1744 if(index < 0) 1744 if (index < 0)
1745 { 1745 {
1746 return src+dest; 1746 return src+dest;
1747 } 1747 }
1748 1748
1749 } 1749 }
1750 1750
1751 if(index >= dest.Length) 1751 if (index >= dest.Length)
1752 { 1752 {
1753 return dest+src; 1753 return dest+src;
1754 } 1754 }
@@ -1777,15 +1777,15 @@ namespace OpenSim.Region.ScriptEngine.Common
1777 public int llGiveMoney(string destination, int amount) 1777 public int llGiveMoney(string destination, int amount)
1778 { 1778 {
1779 LLUUID invItemID=InventorySelf(); 1779 LLUUID invItemID=InventorySelf();
1780 if(invItemID == LLUUID.Zero) 1780 if (invItemID == LLUUID.Zero)
1781 return 0; 1781 return 0;
1782 1782
1783 m_host.AddScriptLPS(1); 1783 m_host.AddScriptLPS(1);
1784 1784
1785 if(m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) 1785 if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero)
1786 return 0; 1786 return 0;
1787 1787
1788 if((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) == 0) 1788 if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) == 0)
1789 { 1789 {
1790 LSLError("No permissions to give money"); 1790 LSLError("No permissions to give money");
1791 return 0; 1791 return 0;
@@ -1793,7 +1793,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1793 1793
1794 LLUUID toID=new LLUUID(); 1794 LLUUID toID=new LLUUID();
1795 1795
1796 if(!LLUUID.TryParse(destination, out toID)) 1796 if (!LLUUID.TryParse(destination, out toID))
1797 { 1797 {
1798 LSLError("Bad key in llGiveMoney"); 1798 LSLError("Bad key in llGiveMoney");
1799 return 0; 1799 return 0;
@@ -1801,7 +1801,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1801 1801
1802 IMoneyModule money=World.RequestModuleInterface<IMoneyModule>(); 1802 IMoneyModule money=World.RequestModuleInterface<IMoneyModule>();
1803 1803
1804 if(money == null) 1804 if (money == null)
1805 { 1805 {
1806 NotImplemented("llGiveMoney"); 1806 NotImplemented("llGiveMoney");
1807 return 0; 1807 return 0;
@@ -1809,7 +1809,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1809 1809
1810 bool result=money.ObjectGiveMoney(m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); 1810 bool result=money.ObjectGiveMoney(m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount);
1811 1811
1812 if(result) 1812 if (result)
1813 return 1; 1813 return 1;
1814 1814
1815 return 0; 1815 return 0;
@@ -2113,17 +2113,17 @@ namespace OpenSim.Region.ScriptEngine.Common
2113 m_host.AddScriptLPS(1); 2113 m_host.AddScriptLPS(1);
2114 2114
2115 LLUUID invItemID=InventorySelf(); 2115 LLUUID invItemID=InventorySelf();
2116 if(invItemID == LLUUID.Zero) 2116 if (invItemID == LLUUID.Zero)
2117 return; 2117 return;
2118 2118
2119 if(m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) 2119 if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero)
2120 return; 2120 return;
2121 2121
2122 if((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) 2122 if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
2123 { 2123 {
2124 // Do NOT try to parse LLUUID, animations cannot be triggered by ID 2124 // Do NOT try to parse LLUUID, animations cannot be triggered by ID
2125 LLUUID animID=InventoryKey(anim, (int)AssetType.Animation); 2125 LLUUID animID=InventoryKey(anim, (int)AssetType.Animation);
2126 if(animID == LLUUID.Zero) 2126 if (animID == LLUUID.Zero)
2127 return; 2127 return;
2128 2128
2129 if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter)) 2129 if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter))
@@ -2139,22 +2139,22 @@ namespace OpenSim.Region.ScriptEngine.Common
2139 m_host.AddScriptLPS(1); 2139 m_host.AddScriptLPS(1);
2140 2140
2141 LLUUID invItemID=InventorySelf(); 2141 LLUUID invItemID=InventorySelf();
2142 if(invItemID == LLUUID.Zero) 2142 if (invItemID == LLUUID.Zero)
2143 return; 2143 return;
2144 2144
2145 if(m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) 2145 if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero)
2146 return; 2146 return;
2147 2147
2148 if((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) 2148 if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
2149 { 2149 {
2150 LLUUID animID = new LLUUID(); 2150 LLUUID animID = new LLUUID();
2151 2151
2152 if(!LLUUID.TryParse(anim, out animID)) 2152 if (!LLUUID.TryParse(anim, out animID))
2153 { 2153 {
2154 animID=InventoryKey(anim); 2154 animID=InventoryKey(anim);
2155 } 2155 }
2156 2156
2157 if(animID == LLUUID.Zero) 2157 if (animID == LLUUID.Zero)
2158 return; 2158 return;
2159 2159
2160 if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter)) 2160 if (World.m_innerScene.ScenePresences.ContainsKey(m_host.TaskInventory[invItemID].PermsGranter))
@@ -2203,15 +2203,15 @@ namespace OpenSim.Region.ScriptEngine.Common
2203 { 2203 {
2204 LLUUID agentID=new LLUUID(); 2204 LLUUID agentID=new LLUUID();
2205 2205
2206 if(!LLUUID.TryParse(agent, out agentID)) 2206 if (!LLUUID.TryParse(agent, out agentID))
2207 return; 2207 return;
2208 2208
2209 LLUUID invItemID=InventorySelf(); 2209 LLUUID invItemID=InventorySelf();
2210 2210
2211 if(invItemID == LLUUID.Zero) 2211 if (invItemID == LLUUID.Zero)
2212 return; // Not in a prim? How?? 2212 return; // Not in a prim? How??
2213 2213
2214 if(agentID == LLUUID.Zero || perm == 0) // Releasing permissions 2214 if (agentID == LLUUID.Zero || perm == 0) // Releasing permissions
2215 { 2215 {
2216 m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero; 2216 m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero;
2217 m_host.TaskInventory[invItemID].PermsMask=0; 2217 m_host.TaskInventory[invItemID].PermsMask=0;
@@ -2226,14 +2226,14 @@ namespace OpenSim.Region.ScriptEngine.Common
2226 2226
2227 bool attachment=false; // Attachments not implemented yet. TODO: reflect real attachemnt state 2227 bool attachment=false; // Attachments not implemented yet. TODO: reflect real attachemnt state
2228 2228
2229 if(m_host.ParentGroup.RootPart.m_IsAttachment && agent == m_host.ParentGroup.RootPart.m_attachedAvatar) 2229 if (m_host.ParentGroup.RootPart.m_IsAttachment && agent == m_host.ParentGroup.RootPart.m_attachedAvatar)
2230 { 2230 {
2231 // When attached, certain permissions are implicit if requested from owner 2231 // When attached, certain permissions are implicit if requested from owner
2232 int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS | 2232 int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS |
2233 BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION | 2233 BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION |
2234 BuiltIn_Commands_BaseClass.PERMISSION_ATTACH; 2234 BuiltIn_Commands_BaseClass.PERMISSION_ATTACH;
2235 2235
2236 if((perm & (~implicitPerms)) == 0) // Requested only implicit perms 2236 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
2237 { 2237 {
2238 m_host.TaskInventory[invItemID].PermsGranter=agentID; 2238 m_host.TaskInventory[invItemID].PermsGranter=agentID;
2239 m_host.TaskInventory[invItemID].PermsMask=perm; 2239 m_host.TaskInventory[invItemID].PermsMask=perm;
@@ -2244,13 +2244,13 @@ namespace OpenSim.Region.ScriptEngine.Common
2244 return; 2244 return;
2245 } 2245 }
2246 } 2246 }
2247 else if(m_host.m_sitTargetAvatar == agentID) // Sitting avatar 2247 else if (m_host.m_sitTargetAvatar == agentID) // Sitting avatar
2248 { 2248 {
2249 // When agent is sitting, certain permissions are implicit if requested from sitting agent 2249 // When agent is sitting, certain permissions are implicit if requested from sitting agent
2250 int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION | 2250 int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION |
2251 BuiltIn_Commands_BaseClass.PERMISSION_TRACK_CAMERA; 2251 BuiltIn_Commands_BaseClass.PERMISSION_TRACK_CAMERA;
2252 2252
2253 if((perm & (~implicitPerms)) == 0) // Requested only implicit perms 2253 if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
2254 { 2254 {
2255 m_host.TaskInventory[invItemID].PermsGranter=agentID; 2255 m_host.TaskInventory[invItemID].PermsGranter=agentID;
2256 m_host.TaskInventory[invItemID].PermsMask=perm; 2256 m_host.TaskInventory[invItemID].PermsMask=perm;
@@ -2265,11 +2265,11 @@ namespace OpenSim.Region.ScriptEngine.Common
2265 if (World.m_innerScene.ScenePresences.ContainsKey(agentID)) 2265 if (World.m_innerScene.ScenePresences.ContainsKey(agentID))
2266 { 2266 {
2267 string ownerName=resolveName(m_host.ParentGroup.RootPart.OwnerID); 2267 string ownerName=resolveName(m_host.ParentGroup.RootPart.OwnerID);
2268 if(ownerName == String.Empty) 2268 if (ownerName == String.Empty)
2269 ownerName="(hippos)"; 2269 ownerName="(hippos)";
2270 2270
2271 ScenePresence presence = World.m_innerScene.ScenePresences[agentID]; 2271 ScenePresence presence = World.m_innerScene.ScenePresences[agentID];
2272 if(!m_waitingForScriptAnswer) 2272 if (!m_waitingForScriptAnswer)
2273 { 2273 {
2274 m_host.TaskInventory[invItemID].PermsGranter=agentID; 2274 m_host.TaskInventory[invItemID].PermsGranter=agentID;
2275 m_host.TaskInventory[invItemID].PermsMask=0; 2275 m_host.TaskInventory[invItemID].PermsMask=0;
@@ -2288,12 +2288,12 @@ namespace OpenSim.Region.ScriptEngine.Common
2288 2288
2289 void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer) 2289 void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer)
2290 { 2290 {
2291 if(taskID != m_host.UUID) 2291 if (taskID != m_host.UUID)
2292 return; 2292 return;
2293 2293
2294 LLUUID invItemID=InventorySelf(); 2294 LLUUID invItemID=InventorySelf();
2295 2295
2296 if(invItemID == LLUUID.Zero) 2296 if (invItemID == LLUUID.Zero)
2297 return; 2297 return;
2298 2298
2299 client.OnScriptAnswer-=handleScriptAnswer; 2299 client.OnScriptAnswer-=handleScriptAnswer;
@@ -2310,7 +2310,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2310 2310
2311 foreach (TaskInventoryItem item in m_host.TaskInventory.Values) 2311 foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
2312 { 2312 {
2313 if(item.Type == 10 && item.ItemID == m_itemID) 2313 if (item.Type == 10 && item.ItemID == m_itemID)
2314 { 2314 {
2315 return item.PermsGranter.ToString(); 2315 return item.PermsGranter.ToString();
2316 } 2316 }
@@ -2325,7 +2325,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2325 2325
2326 foreach (TaskInventoryItem item in m_host.TaskInventory.Values) 2326 foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
2327 { 2327 {
2328 if(item.Type == 10 && item.ItemID == m_itemID) 2328 if (item.Type == 10 && item.ItemID == m_itemID)
2329 { 2329 {
2330 return item.PermsMask; 2330 return item.PermsMask;
2331 } 2331 }
@@ -2541,16 +2541,23 @@ namespace OpenSim.Region.ScriptEngine.Common
2541 // These functions are supposed to be robust, 2541 // These functions are supposed to be robust,
2542 // so get the state one step at a time. 2542 // so get the state one step at a time.
2543 2543
2544 if((item = ScriptByName(name)) != LLUUID.Zero) 2544 if ((item = ScriptByName(name)) != LLUUID.Zero)
2545 if((sm = m_ScriptEngine.m_ScriptManager) != null) 2545 {
2546 if(sm.Scripts.ContainsKey(m_localID)) 2546 if ((sm = m_ScriptEngine.m_ScriptManager) != null)
2547 if((script = sm.GetScript(m_localID, item)) != null) 2547 {
2548 script.Exec.Running = (run==0) ? false : true; 2548 if (sm.Scripts.ContainsKey(m_localID))
2549 2549 {
2550 if ((script = sm.GetScript(m_localID, item)) != null)
2551 {
2552 script.Exec.Running = (run==0) ? false : true;
2553 }
2554 }
2555 }
2556 }
2550 2557
2551 // Required by SL 2558 // Required by SL
2552 2559
2553 if(script == null) 2560 if (script == null)
2554 ShoutError("llSetScriptState: script "+name+" not found"); 2561 ShoutError("llSetScriptState: script "+name+" not found");
2555 2562
2556 // If we didn;t find it, then it's safe to 2563 // If we didn;t find it, then it's safe to
@@ -2709,7 +2716,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2709 partItemID = item.ItemID; 2716 partItemID = item.ItemID;
2710 Object[] resobj = new object[] 2717 Object[] resobj = new object[]
2711 { 2718 {
2712 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id) 2719 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id)
2713 }; 2720 };
2714 2721
2715 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 2722 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
@@ -2737,7 +2744,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2737 partItemID = item.ItemID; 2744 partItemID = item.ItemID;
2738 Object[] resobj = new object[] 2745 Object[] resobj = new object[]
2739 { 2746 {
2740 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id) 2747 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id)
2741 }; 2748 };
2742 2749
2743 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 2750 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
@@ -2767,7 +2774,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2767 partItemID = item.ItemID; 2774 partItemID = item.ItemID;
2768 Object[] resobj = new object[] 2775 Object[] resobj = new object[]
2769 { 2776 {
2770 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id) 2777 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id)
2771 }; 2778 };
2772 2779
2773 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 2780 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
@@ -2791,7 +2798,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2791 2798
2792 object[] resobj = new object[] 2799 object[] resobj = new object[]
2793 { 2800 {
2794 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id) 2801 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id)
2795 }; 2802 };
2796 2803
2797 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 2804 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
@@ -2819,7 +2826,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2819 partItemID = item.ItemID; 2826 partItemID = item.ItemID;
2820 Object[] resObjDef = new object[] 2827 Object[] resObjDef = new object[]
2821 { 2828 {
2822 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id) 2829 new LSL_Types.LSLInteger(m_host.LinkNum + 1), new LSL_Types.LSLInteger(num), new LSL_Types.LSLString(msg), new LSL_Types.LSLString(id)
2823 }; 2830 };
2824 2831
2825 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 2832 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
@@ -2858,7 +2865,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2858 2865
2859 foreach (TaskInventoryItem item in m_host.TaskInventory.Values) 2866 foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
2860 { 2867 {
2861 if(item.Type == 10 && item.ItemID == m_itemID) 2868 if (item.Type == 10 && item.ItemID == m_itemID)
2862 { 2869 {
2863 result = item.Name!=null?item.Name:String.Empty; 2870 result = item.Name!=null?item.Name:String.Empty;
2864 break; 2871 break;
@@ -3013,9 +3020,9 @@ namespace OpenSim.Region.ScriptEngine.Common
3013 m_host.AddScriptLPS(1); 3020 m_host.AddScriptLPS(1);
3014 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory) 3021 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory)
3015 { 3022 {
3016 if(inv.Value.Name == name) 3023 if (inv.Value.Name == name)
3017 { 3024 {
3018 if((inv.Value.OwnerMask & (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) == (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) 3025 if ((inv.Value.OwnerMask & (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) == (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify))
3019 { 3026 {
3020 return inv.Value.AssetID.ToString(); 3027 return inv.Value.AssetID.ToString();
3021 } 3028 }
@@ -3122,7 +3129,7 @@ namespace OpenSim.Region.ScriptEngine.Common
3122 public LSL_Types.list llListSort(LSL_Types.list src, int stride, int ascending) 3129 public LSL_Types.list llListSort(LSL_Types.list src, int stride, int ascending)
3123 { 3130 {
3124 m_host.AddScriptLPS(1); 3131 m_host.AddScriptLPS(1);
3125 return src.Sort(stride, ascending); 3132 return src.Sort(stride, ascending);
3126 } 3133 }
3127 3134
3128 public int llGetListLength(LSL_Types.list src) 3135 public int llGetListLength(LSL_Types.list src)
@@ -3142,14 +3149,14 @@ namespace OpenSim.Region.ScriptEngine.Common
3142 { 3149 {
3143 return 0; 3150 return 0;
3144 } 3151 }
3145 try 3152 try
3146 { 3153 {
3147 return Convert.ToInt32(src.Data[index]); 3154 return Convert.ToInt32(src.Data[index]);
3148 } 3155 }
3149 catch (FormatException e) 3156 catch (FormatException e)
3150 { 3157 {
3151 return 0; 3158 return 0;
3152 } 3159 }
3153 } 3160 }
3154 3161
3155 public double osList2Double(LSL_Types.list src, int index) 3162 public double osList2Double(LSL_Types.list src, int index)
@@ -3177,14 +3184,14 @@ namespace OpenSim.Region.ScriptEngine.Common
3177 { 3184 {
3178 return 0.0; 3185 return 0.0;
3179 } 3186 }
3180 try 3187 try
3181 { 3188 {
3182 return Convert.ToDouble(src.Data[index]); 3189 return Convert.ToDouble(src.Data[index]);
3183 } 3190 }
3184 catch (FormatException e) 3191 catch (FormatException e)
3185 { 3192 {
3186 return 0.0; 3193 return 0.0;
3187 } 3194 }
3188 } 3195 }
3189 3196
3190 public string llList2String(LSL_Types.list src, int index) 3197 public string llList2String(LSL_Types.list src, int index)
@@ -3321,7 +3328,7 @@ namespace OpenSim.Region.ScriptEngine.Common
3321 3328
3322 m_host.AddScriptLPS(1); 3329 m_host.AddScriptLPS(1);
3323 3330
3324 if(src.Data.Length > 0) 3331 if (src.Data.Length > 0)
3325 { 3332 {
3326 ret = src.Data[x++].ToString(); 3333 ret = src.Data[x++].ToString();
3327 for(;x<src.Data.Length;x++) 3334 for(;x<src.Data.Length;x++)
@@ -3361,12 +3368,12 @@ namespace OpenSim.Region.ScriptEngine.Common
3361 length++; 3368 length++;
3362 break; 3369 break;
3363 case '>' : 3370 case '>' :
3364 if(parens > 0) 3371 if (parens > 0)
3365 parens--; 3372 parens--;
3366 length++; 3373 length++;
3367 break; 3374 break;
3368 case ',' : 3375 case ',' :
3369 if(parens == 0) 3376 if (parens == 0)
3370 { 3377 {
3371 result.Add(src.Substring(start,length).Trim()); 3378 result.Add(src.Substring(start,length).Trim());
3372 start += length+1; 3379 start += length+1;
@@ -3411,14 +3418,14 @@ namespace OpenSim.Region.ScriptEngine.Common
3411 3418
3412 m_host.AddScriptLPS(1); 3419 m_host.AddScriptLPS(1);
3413 3420
3414 if(stride == 0) 3421 if (stride == 0)
3415 stride = 1; 3422 stride = 1;
3416 3423
3417 // Stride MUST be a factor of the list length 3424 // Stride MUST be a factor of the list length
3418 // If not, then return the src list. This also 3425 // If not, then return the src list. This also
3419 // traps those cases where stride > length. 3426 // traps those cases where stride > length.
3420 3427
3421 if(src.Length != stride && src.Length%stride == 0) 3428 if (src.Length != stride && src.Length%stride == 0)
3422 { 3429 {
3423 3430
3424 chunkk = src.Length/stride; 3431 chunkk = src.Length/stride;
@@ -3481,26 +3488,26 @@ namespace OpenSim.Region.ScriptEngine.Common
3481 3488
3482 // First step is always to deal with negative indices 3489 // First step is always to deal with negative indices
3483 3490
3484 if(start < 0) 3491 if (start < 0)
3485 start = src.Length+start; 3492 start = src.Length+start;
3486 if(end < 0) 3493 if (end < 0)
3487 end = src.Length+end; 3494 end = src.Length+end;
3488 3495
3489 // Out of bounds indices are OK, just trim them 3496 // Out of bounds indices are OK, just trim them
3490 // accordingly 3497 // accordingly
3491 3498
3492 if(start > src.Length) 3499 if (start > src.Length)
3493 start = src.Length; 3500 start = src.Length;
3494 3501
3495 if(end > src.Length) 3502 if (end > src.Length)
3496 end = src.Length; 3503 end = src.Length;
3497 3504
3498 // There may be one or two ranges to be considered 3505 // There may be one or two ranges to be considered
3499 3506
3500 if(start != end) 3507 if (start != end)
3501 { 3508 {
3502 3509
3503 if(start <= end) 3510 if (start <= end)
3504 { 3511 {
3505 si[0] = start; 3512 si[0] = start;
3506 ei[0] = end; 3513 ei[0] = end;
@@ -3521,23 +3528,23 @@ namespace OpenSim.Region.ScriptEngine.Common
3521 // A negative stride reverses the direction of the 3528 // A negative stride reverses the direction of the
3522 // scan producing an inverted list as a result. 3529 // scan producing an inverted list as a result.
3523 3530
3524 if(stride == 0) 3531 if (stride == 0)
3525 stride = 1; 3532 stride = 1;
3526 3533
3527 if(stride > 0) 3534 if (stride > 0)
3528 for(int i=0;i<src.Length;i+=stride) 3535 for(int i=0;i<src.Length;i+=stride)
3529 { 3536 {
3530 if(i<=ei[0] && i>=si[0]) 3537 if (i<=ei[0] && i>=si[0])
3531 result.Add(src.Data[i]); 3538 result.Add(src.Data[i]);
3532 if(twopass && i>=si[1] && i<=ei[1]) 3539 if (twopass && i>=si[1] && i<=ei[1])
3533 result.Add(src.Data[i]); 3540 result.Add(src.Data[i]);
3534 } 3541 }
3535 else if(stride < 0) 3542 else if (stride < 0)
3536 for(int i=src.Length-1;i>=0;i+=stride) 3543 for(int i=src.Length-1;i>=0;i+=stride)
3537 { 3544 {
3538 if(i<=ei[0] && i>=si[0]) 3545 if (i<=ei[0] && i>=si[0])
3539 result.Add(src.Data[i]); 3546 result.Add(src.Data[i]);
3540 if(twopass && i>=si[1] && i<=ei[1]) 3547 if (twopass && i>=si[1] && i<=ei[1])
3541 result.Add(src.Data[i]); 3548 result.Add(src.Data[i]);
3542 } 3549 }
3543 } 3550 }
@@ -3566,19 +3573,19 @@ namespace OpenSim.Region.ScriptEngine.Common
3566 3573
3567 m_host.AddScriptLPS(1); 3574 m_host.AddScriptLPS(1);
3568 3575
3569 if(index < 0) 3576 if (index < 0)
3570 { 3577 {
3571 index = index+dest.Length; 3578 index = index+dest.Length;
3572 if(index < 0) 3579 if (index < 0)
3573 { 3580 {
3574 index = 0; 3581 index = 0;
3575 } 3582 }
3576 } 3583 }
3577 3584
3578 if(index != 0) 3585 if (index != 0)
3579 { 3586 {
3580 pref = dest.GetSublist(0,index-1); 3587 pref = dest.GetSublist(0,index-1);
3581 if(index < dest.Length) 3588 if (index < dest.Length)
3582 { 3589 {
3583 suff = dest.GetSublist(index,-1); 3590 suff = dest.GetSublist(index,-1);
3584 return pref + src + suff; 3591 return pref + src + suff;
@@ -3590,7 +3597,7 @@ namespace OpenSim.Region.ScriptEngine.Common
3590 } 3597 }
3591 else 3598 else
3592 { 3599 {
3593 if(index < dest.Length) 3600 if (index < dest.Length)
3594 { 3601 {
3595 suff = dest.GetSublist(index,-1); 3602 suff = dest.GetSublist(index,-1);
3596 return src + suff; 3603 return src + suff;
@@ -3618,17 +3625,17 @@ namespace OpenSim.Region.ScriptEngine.Common
3618 3625
3619 // If either list is empty, do not match 3626 // If either list is empty, do not match
3620 3627
3621 if(src.Length != 0 && test.Length != 0) 3628 if (src.Length != 0 && test.Length != 0)
3622 { 3629 {
3623 for(int i=0; i< length; i++) 3630 for(int i=0; i< length; i++)
3624 { 3631 {
3625 if(src.Data[i].Equals(test.Data[0])) 3632 if (src.Data[i].Equals(test.Data[0]))
3626 { 3633 {
3627 int j; 3634 int j;
3628 for(j=1;j<test.Length;j++) 3635 for(j=1;j<test.Length;j++)
3629 if(!src.Data[i+j].Equals(test.Data[j])) 3636 if (!src.Data[i+j].Equals(test.Data[j]))
3630 break; 3637 break;
3631 if(j == test.Length) 3638 if (j == test.Length)
3632 { 3639 {
3633 index = i; 3640 index = i;
3634 break; 3641 break;
@@ -4292,7 +4299,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4292 LSLError("First parameter to llDialog needs to be a key"); 4299 LSLError("First parameter to llDialog needs to be a key");
4293 return; 4300 return;
4294 } 4301 }
4295 if(buttons.Length > 12) 4302 if (buttons.Length > 12)
4296 { 4303 {
4297 LSLError("No more than 12 buttons can be shown"); 4304 LSLError("No more than 12 buttons can be shown");
4298 return; 4305 return;
@@ -4300,12 +4307,12 @@ namespace OpenSim.Region.ScriptEngine.Common
4300 string[] buts = new string[buttons.Length]; 4307 string[] buts = new string[buttons.Length];
4301 for(int i = 0; i < buttons.Length; i++) 4308 for(int i = 0; i < buttons.Length; i++)
4302 { 4309 {
4303 if(buttons.Data[i].ToString() == String.Empty) 4310 if (buttons.Data[i].ToString() == String.Empty)
4304 { 4311 {
4305 LSLError("button label cannot be blank"); 4312 LSLError("button label cannot be blank");
4306 return; 4313 return;
4307 } 4314 }
4308 if(buttons.Data[i].ToString().Length > 24) 4315 if (buttons.Data[i].ToString().Length > 24)
4309 { 4316 {
4310 LSLError("button label cannot be longer than 24 characters"); 4317 LSLError("button label cannot be longer than 24 characters");
4311 return; 4318 return;
@@ -4338,13 +4345,13 @@ namespace OpenSim.Region.ScriptEngine.Common
4338 // These functions are supposed to be robust, 4345 // These functions are supposed to be robust,
4339 // so get the state one step at a time. 4346 // so get the state one step at a time.
4340 4347
4341 if((item = ScriptByName(name)) != LLUUID.Zero) 4348 if ((item = ScriptByName(name)) != LLUUID.Zero)
4342 if((sm = m_ScriptEngine.m_ScriptManager) != null) 4349 if ((sm = m_ScriptEngine.m_ScriptManager) != null)
4343 sm.ResetScript(m_localID, item); 4350 sm.ResetScript(m_localID, item);
4344 4351
4345 // Required by SL 4352 // Required by SL
4346 4353
4347 if(script == null) 4354 if (script == null)
4348 ShoutError("llResetOtherScript: script "+name+" not found"); 4355 ShoutError("llResetOtherScript: script "+name+" not found");
4349 4356
4350 // If we didn;t find it, then it's safe to 4357 // If we didn;t find it, then it's safe to
@@ -4366,14 +4373,20 @@ namespace OpenSim.Region.ScriptEngine.Common
4366 // These functions are supposed to be robust, 4373 // These functions are supposed to be robust,
4367 // so get the state one step at a time. 4374 // so get the state one step at a time.
4368 4375
4369 if((item = ScriptByName(name)) != LLUUID.Zero) 4376 if ((item = ScriptByName(name)) != LLUUID.Zero)
4370 if((sm = m_ScriptEngine.m_ScriptManager) != null) 4377 {
4371 if((script = sm.GetScript(m_localID, item)) != null) 4378 if ((sm = m_ScriptEngine.m_ScriptManager) != null)
4379 {
4380 if ((script = sm.GetScript(m_localID, item)) != null)
4381 {
4372 return script.Exec.Running?1:0; 4382 return script.Exec.Running?1:0;
4383 }
4384 }
4385 }
4373 4386
4374 // Required by SL 4387 // Required by SL
4375 4388
4376 if(script == null) 4389 if (script == null)
4377 ShoutError("llGetScriptState: script "+name+" not found"); 4390 ShoutError("llGetScriptState: script "+name+" not found");
4378 4391
4379 // If we didn;t find it, then it's safe to 4392 // If we didn;t find it, then it's safe to
@@ -4447,107 +4460,107 @@ namespace OpenSim.Region.ScriptEngine.Common
4447 4460
4448 public void llSetPrimitiveParams(LSL_Types.list rules) 4461 public void llSetPrimitiveParams(LSL_Types.list rules)
4449 { 4462 {
4450 llSetLinkPrimitiveParams(m_host.LinkNum+1, rules); 4463 llSetLinkPrimitiveParams(m_host.LinkNum+1, rules);
4451 } 4464 }
4452 4465
4453 public void llSetLinkPrimitiveParams(int linknumber, LSL_Types.list rules) 4466 public void llSetLinkPrimitiveParams(int linknumber, LSL_Types.list rules)
4454 { 4467 {
4455 m_host.AddScriptLPS(1); 4468 m_host.AddScriptLPS(1);
4456 4469
4457 SceneObjectPart part=null; 4470 SceneObjectPart part=null;
4458 4471
4459 if(m_host.LinkNum+1 != linknumber) 4472 if (m_host.LinkNum+1 != linknumber)
4460 { 4473 {
4461 foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) 4474 foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts())
4462 { 4475 {
4463 if ((partInst.LinkNum + 1) == linknumber) 4476 if ((partInst.LinkNum + 1) == linknumber)
4464 { 4477 {
4465 part=partInst; 4478 part=partInst;
4466 break; 4479 break;
4467 } 4480 }
4468 } 4481 }
4469 } 4482 }
4470 else 4483 else
4471 { 4484 {
4472 part=m_host; 4485 part=m_host;
4473 } 4486 }
4474 4487
4475 if(part == null) 4488 if (part == null)
4476 return; 4489 return;
4477 4490
4478 4491
4479 int idx=0; 4492 int idx=0;
4480 4493
4481 while(idx < rules.Length) 4494 while(idx < rules.Length)
4482 { 4495 {
4483 int code=Convert.ToInt32(rules.Data[idx++]); 4496 int code=Convert.ToInt32(rules.Data[idx++]);
4484 4497
4485 int remain=rules.Length-idx; 4498 int remain=rules.Length-idx;
4486 4499
4487 int face; 4500 int face;
4488 LSL_Types.Vector3 v; 4501 LSL_Types.Vector3 v;
4489 4502
4490 switch(code) 4503 switch(code)
4491 { 4504 {
4492 case 6: // PRIM_POSITION 4505 case 6: // PRIM_POSITION
4493 if(remain < 1) 4506 if (remain < 1)
4494 return; 4507 return;
4495 4508
4496 v=new LSL_Types.Vector3(rules.Data[idx++].ToString()); 4509 v=new LSL_Types.Vector3(rules.Data[idx++].ToString());
4497 SetPos(part, v); 4510 SetPos(part, v);
4498 4511
4499 break; 4512 break;
4500 4513
4501 case 8: // PRIM_ROTATION 4514 case 8: // PRIM_ROTATION
4502 if(remain < 1) 4515 if (remain < 1)
4503 return; 4516 return;
4504 4517
4505 LSL_Types.Quaternion q = new LSL_Types.Quaternion(rules.Data[idx++].ToString()); 4518 LSL_Types.Quaternion q = new LSL_Types.Quaternion(rules.Data[idx++].ToString());
4506 SetRot(part, q); 4519 SetRot(part, q);
4507 4520
4508 break; 4521 break;
4509 4522
4510 case 17: // PRIM_TEXTURE 4523 case 17: // PRIM_TEXTURE
4511 if(remain < 5) 4524 if (remain < 5)
4512 return; 4525 return;
4513 4526
4514 face=Convert.ToInt32(rules.Data[idx++]); 4527 face=Convert.ToInt32(rules.Data[idx++]);
4515 string tex=rules.Data[idx++].ToString(); 4528 string tex=rules.Data[idx++].ToString();
4516 LSL_Types.Vector3 repeats=new LSL_Types.Vector3(rules.Data[idx++].ToString()); 4529 LSL_Types.Vector3 repeats=new LSL_Types.Vector3(rules.Data[idx++].ToString());
4517 LSL_Types.Vector3 offsets=new LSL_Types.Vector3(rules.Data[idx++].ToString()); 4530 LSL_Types.Vector3 offsets=new LSL_Types.Vector3(rules.Data[idx++].ToString());
4518 double rotation=Convert.ToDouble(rules.Data[idx++]); 4531 double rotation=Convert.ToDouble(rules.Data[idx++]);
4519 4532
4520 SetTexture(part, tex, face); 4533 SetTexture(part, tex, face);
4521 ScaleTexture(part, repeats.x, repeats.y, face); 4534 ScaleTexture(part, repeats.x, repeats.y, face);
4522 OffsetTexture(part, offsets.x, offsets.y, face); 4535 OffsetTexture(part, offsets.x, offsets.y, face);
4523 RotateTexture(part, rotation, face); 4536 RotateTexture(part, rotation, face);
4524 4537
4525 break; 4538 break;
4526 4539
4527 case 18: // PRIM_COLOR 4540 case 18: // PRIM_COLOR
4528 if(remain < 3) 4541 if (remain < 3)
4529 return; 4542 return;
4530 4543
4531 face=Convert.ToInt32(rules.Data[idx++]); 4544 face=Convert.ToInt32(rules.Data[idx++]);
4532 LSL_Types.Vector3 color=new LSL_Types.Vector3(rules.Data[idx++].ToString()); 4545 LSL_Types.Vector3 color=new LSL_Types.Vector3(rules.Data[idx++].ToString());
4533 double alpha=Convert.ToDouble(rules.Data[idx++]); 4546 double alpha=Convert.ToDouble(rules.Data[idx++]);
4534 4547
4535 SetColor(part, color, face); 4548 SetColor(part, color, face);
4536 SetAlpha(part, alpha, face); 4549 SetAlpha(part, alpha, face);
4537 4550
4538 break; 4551 break;
4539 4552
4540 case 7: // PRIM_SIZE 4553 case 7: // PRIM_SIZE
4541 if(remain < 1) 4554 if (remain < 1)
4542 return; 4555 return;
4543 4556
4544 v=new LSL_Types.Vector3(rules.Data[idx++].ToString()); 4557 v=new LSL_Types.Vector3(rules.Data[idx++].ToString());
4545 SetScale(part, v); 4558 SetScale(part, v);
4546 4559
4547 break; 4560 break;
4548 4561
4549 } 4562 }
4550 } 4563 }
4551 } 4564 }
4552 4565
4553 public string llStringToBase64(string str) 4566 public string llStringToBase64(string str)
@@ -4637,12 +4650,12 @@ namespace OpenSim.Region.ScriptEngine.Common
4637 m_host.AddScriptLPS(1); 4650 m_host.AddScriptLPS(1);
4638 LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y); 4651 LLUUID landowner = World.GetLandOwner(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
4639 4652
4640 if(landowner == LLUUID.Zero) 4653 if (landowner == LLUUID.Zero)
4641 { 4654 {
4642 return; 4655 return;
4643 } 4656 }
4644 4657
4645 if(landowner != m_host.ObjectOwner) 4658 if (landowner != m_host.ObjectOwner)
4646 { 4659 {
4647 return; 4660 return;
4648 } 4661 }
@@ -5000,7 +5013,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5000 5013
5001 // Require a well-fromed base64 string 5014 // Require a well-fromed base64 string
5002 5015
5003 if(str.Length > 8) 5016 if (str.Length > 8)
5004 return 0; 5017 return 0;
5005 5018
5006 // The loop is unrolled in the interests 5019 // The loop is unrolled in the interests
@@ -5010,37 +5023,37 @@ namespace OpenSim.Region.ScriptEngine.Common
5010 // -1 == invalid 5023 // -1 == invalid
5011 // 0 == padding 5024 // 0 == padding
5012 5025
5013 if((digit=c2itable[str[0]])<=0) 5026 if ((digit=c2itable[str[0]])<=0)
5014 { 5027 {
5015 return digit<0?(int)0:number; 5028 return digit<0?(int)0:number;
5016 } 5029 }
5017 number += --digit<<26; 5030 number += --digit<<26;
5018 5031
5019 if((digit=c2itable[str[1]])<=0) 5032 if ((digit=c2itable[str[1]])<=0)
5020 { 5033 {
5021 return digit<0?(int)0:number; 5034 return digit<0?(int)0:number;
5022 } 5035 }
5023 number += --digit<<20; 5036 number += --digit<<20;
5024 5037
5025 if((digit=c2itable[str[2]])<=0) 5038 if ((digit=c2itable[str[2]])<=0)
5026 { 5039 {
5027 return digit<0?(int)0:number; 5040 return digit<0?(int)0:number;
5028 } 5041 }
5029 number += --digit<<14; 5042 number += --digit<<14;
5030 5043
5031 if((digit=c2itable[str[3]])<=0) 5044 if ((digit=c2itable[str[3]])<=0)
5032 { 5045 {
5033 return digit<0?(int)0:number; 5046 return digit<0?(int)0:number;
5034 } 5047 }
5035 number += --digit<<8; 5048 number += --digit<<8;
5036 5049
5037 if((digit=c2itable[str[4]])<=0) 5050 if ((digit=c2itable[str[4]])<=0)
5038 { 5051 {
5039 return digit<0?(int)0:number; 5052 return digit<0?(int)0:number;
5040 } 5053 }
5041 number += --digit<<2; 5054 number += --digit<<2;
5042 5055
5043 if((digit=c2itable[str[5]])<=0) 5056 if ((digit=c2itable[str[5]])<=0)
5044 { 5057 {
5045 return digit<0?(int)0:number; 5058 return digit<0?(int)0:number;
5046 } 5059 }
@@ -5156,21 +5169,21 @@ namespace OpenSim.Region.ScriptEngine.Common
5156 5169
5157 for(j=0; j<seplen; j++) 5170 for(j=0; j<seplen; j++)
5158 { 5171 {
5159 if(active[j]) 5172 if (active[j])
5160 { 5173 {
5161 // scan all of the markers 5174 // scan all of the markers
5162 if((offset[j] = src.IndexOf((string)separray[j],beginning)) == -1) 5175 if ((offset[j] = src.IndexOf((string)separray[j],beginning)) == -1)
5163 { 5176 {
5164 // not present at all 5177 // not present at all
5165 active[j] = false; 5178 active[j] = false;
5166 } else 5179 } else
5167 { 5180 {
5168 // present and correct 5181 // present and correct
5169 if(offset[j] < offset[best]) 5182 if (offset[j] < offset[best])
5170 { 5183 {
5171 // closest so far 5184 // closest so far
5172 best = j; 5185 best = j;
5173 if(offset[best] == beginning) 5186 if (offset[best] == beginning)
5174 break; 5187 break;
5175 } 5188 }
5176 } 5189 }
@@ -5179,21 +5192,21 @@ namespace OpenSim.Region.ScriptEngine.Common
5179 5192
5180 // Scan for spacers 5193 // Scan for spacers
5181 5194
5182 if(offset[best] != beginning) 5195 if (offset[best] != beginning)
5183 { 5196 {
5184 for(j=seplen; (j<mlen) && (offset[best] > beginning); j++) 5197 for(j=seplen; (j<mlen) && (offset[best] > beginning); j++)
5185 { 5198 {
5186 if(active[j]) 5199 if (active[j])
5187 { 5200 {
5188 // scan all of the markers 5201 // scan all of the markers
5189 if((offset[j] = src.IndexOf((string)spcarray[j-seplen],beginning)) == -1) 5202 if ((offset[j] = src.IndexOf((string)spcarray[j-seplen],beginning)) == -1)
5190 { 5203 {
5191 // not present at all 5204 // not present at all
5192 active[j] = false; 5205 active[j] = false;
5193 } else 5206 } else
5194 { 5207 {
5195 // present and correct 5208 // present and correct
5196 if(offset[j] < offset[best]) 5209 if (offset[j] < offset[best])
5197 { 5210 {
5198 // closest so far 5211 // closest so far
5199 best = j; 5212 best = j;
@@ -5205,7 +5218,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5205 5218
5206 // This is the normal exit from the scanning loop 5219 // This is the normal exit from the scanning loop
5207 5220
5208 if(best == mlen) 5221 if (best == mlen)
5209 { 5222 {
5210 // no markers were found on this pass 5223 // no markers were found on this pass
5211 // so we're pretty much done 5224 // so we're pretty much done
@@ -5218,7 +5231,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5218 5231
5219 tokens.Add(src.Substring(beginning,offset[best]-beginning)); 5232 tokens.Add(src.Substring(beginning,offset[best]-beginning));
5220 5233
5221 if(best<seplen) 5234 if (best<seplen)
5222 { 5235 {
5223 beginning = offset[best]+((string)separray[best]).Length; 5236 beginning = offset[best]+((string)separray[best]).Length;
5224 } else 5237 } else
@@ -5235,9 +5248,9 @@ namespace OpenSim.Region.ScriptEngine.Common
5235 // arduous. Alternatively the 'break' could be replced with a return 5248 // arduous. Alternatively the 'break' could be replced with a return
5236 // but that's shabby programming. 5249 // but that's shabby programming.
5237 5250
5238 if(beginning == srclen) 5251 if (beginning == srclen)
5239 { 5252 {
5240 if(srclen != 0) 5253 if (srclen != 0)
5241 tokens.Add(""); 5254 tokens.Add("");
5242 } 5255 }
5243 5256
@@ -5418,30 +5431,30 @@ namespace OpenSim.Region.ScriptEngine.Common
5418 5431
5419 // Note that although we have normalized, both 5432 // Note that although we have normalized, both
5420 // indices could still be negative. 5433 // indices could still be negative.
5421 if(start < 0) 5434 if (start < 0)
5422 { 5435 {
5423 start = start+dest.Length; 5436 start = start+dest.Length;
5424 } 5437 }
5425 5438
5426 if(end < 0) 5439 if (end < 0)
5427 { 5440 {
5428 end = end+dest.Length; 5441 end = end+dest.Length;
5429 } 5442 }
5430 // The comventional case, remove a sequence starting with 5443 // The comventional case, remove a sequence starting with
5431 // start and ending with end. And then insert the source 5444 // start and ending with end. And then insert the source
5432 // list. 5445 // list.
5433 if(start <= end) 5446 if (start <= end)
5434 { 5447 {
5435 // If greater than zero, then there is going to be a 5448 // If greater than zero, then there is going to be a
5436 // surviving prefix. Otherwise the inclusive nature 5449 // surviving prefix. Otherwise the inclusive nature
5437 // of the indices mean that we're going to add the 5450 // of the indices mean that we're going to add the
5438 // source list as a prefix. 5451 // source list as a prefix.
5439 if(start > 0) 5452 if (start > 0)
5440 { 5453 {
5441 pref = dest.GetSublist(0,start-1); 5454 pref = dest.GetSublist(0,start-1);
5442 // Only add a suffix if there is something 5455 // Only add a suffix if there is something
5443 // beyond the end index (it's inclusive too). 5456 // beyond the end index (it's inclusive too).
5444 if(end+1 < dest.Length) 5457 if (end+1 < dest.Length)
5445 { 5458 {
5446 return pref + src + dest.GetSublist(end+1,-1); 5459 return pref + src + dest.GetSublist(end+1,-1);
5447 } 5460 }
@@ -5458,7 +5471,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5458 // is removed. 5471 // is removed.
5459 else 5472 else
5460 { 5473 {
5461 if(end+1 < dest.Length) 5474 if (end+1 < dest.Length)
5462 { 5475 {
5463 return src + dest.GetSublist(end+1,-1); 5476 return src + dest.GetSublist(end+1,-1);
5464 } 5477 }
@@ -5525,7 +5538,7 @@ namespace OpenSim.Region.ScriptEngine.Common
5525 { 5538 {
5526 m_host.AddScriptLPS(1); 5539 m_host.AddScriptLPS(1);
5527 5540
5528 if(quick_pay_buttons.Data.Length != 4) 5541 if (quick_pay_buttons.Data.Length != 4)
5529 { 5542 {
5530 LSLError("List must have 4 elements"); 5543 LSLError("List must have 4 elements");
5531 return; 5544 return;
@@ -5798,14 +5811,14 @@ namespace OpenSim.Region.ScriptEngine.Common
5798 5811
5799 LandData land = World.GetLandData((float)pos.x, (float)pos.y); 5812 LandData land = World.GetLandData((float)pos.x, (float)pos.y);
5800 5813
5801 if(land == null) 5814 if (land == null)
5802 { 5815 {
5803 return 0; 5816 return 0;
5804 } 5817 }
5805 5818
5806 else 5819 else
5807 { 5820 {
5808 if(sim_wide == 1) 5821 if (sim_wide == 1)
5809 { 5822 {
5810 if (category == 0) 5823 if (category == 0)
5811 { 5824 {
@@ -5821,32 +5834,32 @@ namespace OpenSim.Region.ScriptEngine.Common
5821 5834
5822 else 5835 else
5823 { 5836 {
5824 if(category == 0)//Total Prims 5837 if (category == 0)//Total Prims
5825 { 5838 {
5826 return 0;//land. 5839 return 0;//land.
5827 } 5840 }
5828 5841
5829 else if(category == 1)//Owner Prims 5842 else if (category == 1)//Owner Prims
5830 { 5843 {
5831 return land.ownerPrims; 5844 return land.ownerPrims;
5832 } 5845 }
5833 5846
5834 else if(category == 2)//Group Prims 5847 else if (category == 2)//Group Prims
5835 { 5848 {
5836 return land.groupPrims; 5849 return land.groupPrims;
5837 } 5850 }
5838 5851
5839 else if(category == 3)//Other Prims 5852 else if (category == 3)//Other Prims
5840 { 5853 {
5841 return land.otherPrims; 5854 return land.otherPrims;
5842 } 5855 }
5843 5856
5844 else if(category == 4)//Selected 5857 else if (category == 4)//Selected
5845 { 5858 {
5846 return land.selectedPrims; 5859 return land.selectedPrims;
5847 } 5860 }
5848 5861
5849 else if(category == 5)//Temp 5862 else if (category == 5)//Temp
5850 { 5863 {
5851 return 0;//land. 5864 return 0;//land.
5852 } 5865 }
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs
index edd16a7..923b81e 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs
@@ -64,11 +64,11 @@ namespace OpenSim.Region.ScriptEngine.Common
64 str = str.Replace('<', ' '); 64 str = str.Replace('<', ' ');
65 str = str.Replace('>', ' '); 65 str = str.Replace('>', ' ');
66 string[] tmps = str.Split(new Char[] { ',', '<', '>' }); 66 string[] tmps = str.Split(new Char[] { ',', '<', '>' });
67 if(tmps.Length < 3) 67 if (tmps.Length < 3)
68 { 68 {
69 x=y=z=0; 69 x=y=z=0;
70 return; 70 return;
71 } 71 }
72 bool res; 72 bool res;
73 res = Double.TryParse(tmps[0], out x); 73 res = Double.TryParse(tmps[0], out x);
74 res = res & Double.TryParse(tmps[1], out y); 74 res = res & Double.TryParse(tmps[1], out y);
@@ -81,26 +81,26 @@ namespace OpenSim.Region.ScriptEngine.Common
81 81
82 public override string ToString() 82 public override string ToString()
83 { 83 {
84 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000}>", x, y, z); 84 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000}>", x, y, z);
85 return s; 85 return s;
86 } 86 }
87 87
88 public static explicit operator LSLString(Vector3 vec) 88 public static explicit operator LSLString(Vector3 vec)
89 { 89 {
90 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z); 90 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z);
91 return new LSLString(s); 91 return new LSLString(s);
92 } 92 }
93 93
94 public static explicit operator string(Vector3 vec) 94 public static explicit operator string(Vector3 vec)
95 { 95 {
96 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z); 96 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z);
97 return s; 97 return s;
98 } 98 }
99 99
100 public static explicit operator Vector3(string s) 100 public static explicit operator Vector3(string s)
101 { 101 {
102 return new Vector3(s); 102 return new Vector3(s);
103 } 103 }
104 104
105 public static bool operator ==(Vector3 lhs, Vector3 rhs) 105 public static bool operator ==(Vector3 lhs, Vector3 rhs)
106 { 106 {
@@ -296,11 +296,11 @@ namespace OpenSim.Region.ScriptEngine.Common
296 str = str.Replace('<', ' '); 296 str = str.Replace('<', ' ');
297 str = str.Replace('>', ' '); 297 str = str.Replace('>', ' ');
298 string[] tmps = str.Split(new Char[] { ',', '<', '>' }); 298 string[] tmps = str.Split(new Char[] { ',', '<', '>' });
299 if(tmps.Length < 4) 299 if (tmps.Length < 4)
300 { 300 {
301 x=y=z=s=0; 301 x=y=z=s=0;
302 return; 302 return;
303 } 303 }
304 bool res; 304 bool res;
305 res = Double.TryParse(tmps[0], out x); 305 res = Double.TryParse(tmps[0], out x);
306 res = res & Double.TryParse(tmps[1], out y); 306 res = res & Double.TryParse(tmps[1], out y);
@@ -330,26 +330,26 @@ namespace OpenSim.Region.ScriptEngine.Common
330 330
331 public override string ToString() 331 public override string ToString()
332 { 332 {
333 string st=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}>", x, y, z, s); 333 string st=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}>", x, y, z, s);
334 return st; 334 return st;
335 } 335 }
336 336
337 public static explicit operator string(Quaternion r) 337 public static explicit operator string(Quaternion r)
338 { 338 {
339 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}>", r.x, r.y, r.z, r.s); 339 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}>", r.x, r.y, r.z, r.s);
340 return s; 340 return s;
341 } 341 }
342 342
343 public static explicit operator LSLString(Quaternion r) 343 public static explicit operator LSLString(Quaternion r)
344 { 344 {
345 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}>", r.x, r.y, r.z, r.s); 345 string s=String.Format("<{0:0.000000},{1:0.000000},{2:0.000000},{3:0.000000}>", r.x, r.y, r.z, r.s);
346 return new LSLString(s); 346 return new LSLString(s);
347 } 347 }
348 348
349 public static explicit operator Quaternion(string s) 349 public static explicit operator Quaternion(string s)
350 { 350 {
351 return new Quaternion(s); 351 return new Quaternion(s);
352 } 352 }
353 353
354 public static bool operator ==(Quaternion lhs, Quaternion rhs) 354 public static bool operator ==(Quaternion lhs, Quaternion rhs)
355 { 355 {
@@ -406,19 +406,19 @@ namespace OpenSim.Region.ScriptEngine.Common
406 public int Length 406 public int Length
407 { 407 {
408 get { 408 get {
409 if(m_data == null) 409 if (m_data == null)
410 m_data=new Object[0]; 410 m_data=new Object[0];
411 return m_data.Length; 411 return m_data.Length;
412 } 412 }
413 } 413 }
414 414
415 public object[] Data 415 public object[] Data
416 { 416 {
417 get { 417 get {
418 if(m_data == null) 418 if (m_data == null)
419 m_data=new Object[0]; 419 m_data=new Object[0];
420 return m_data; 420 return m_data;
421 } 421 }
422 } 422 }
423 423
424 public static list operator +(list a, list b) 424 public static list operator +(list a, list b)
@@ -453,67 +453,67 @@ namespace OpenSim.Region.ScriptEngine.Common
453 return ret; 453 return ret;
454 } 454 }
455 455
456 public list DeleteSublist(int start, int end) 456 public list DeleteSublist(int start, int end)
457 { 457 {
458 // Not an easy one 458 // Not an easy one
459 // If start <= end, remove that part 459 // If start <= end, remove that part
460 // if either is negative, count from the end of the array 460 // if either is negative, count from the end of the array
461 // if the resulting start > end, remove all BUT that part 461 // if the resulting start > end, remove all BUT that part
462 462
463 Object[] ret; 463 Object[] ret;
464 464
465 if(start < 0) 465 if (start < 0)
466 start=m_data.Length-start; 466 start=m_data.Length-start;
467 467
468 if(start < 0) 468 if (start < 0)
469 start=0; 469 start=0;
470 470
471 if(end < 0) 471 if (end < 0)
472 end=m_data.Length-end; 472 end=m_data.Length-end;
473 if(end < 0) 473 if (end < 0)
474 end=0; 474 end=0;
475 475
476 if(start > end) 476 if (start > end)
477 { 477 {
478 if(end >= m_data.Length) 478 if (end >= m_data.Length)
479 return new list(new Object[0]); 479 return new list(new Object[0]);
480 480
481 if(start >= m_data.Length) 481 if (start >= m_data.Length)
482 start=m_data.Length-1; 482 start=m_data.Length-1;
483 483
484 return GetSublist(end, start); 484 return GetSublist(end, start);
485 } 485 }
486 486
487 // start >= 0 && end >= 0 here 487 // start >= 0 && end >= 0 here
488 if(start >= m_data.Length) 488 if (start >= m_data.Length)
489 { 489 {
490 ret=new Object[m_data.Length]; 490 ret=new Object[m_data.Length];
491 Array.Copy(m_data, 0, ret, 0, m_data.Length); 491 Array.Copy(m_data, 0, ret, 0, m_data.Length);
492 492
493 return new list(ret); 493 return new list(ret);
494 } 494 }
495 495
496 if(end >= m_data.Length) 496 if (end >= m_data.Length)
497 end=m_data.Length-1; 497 end=m_data.Length-1;
498 498
499 // now, this makes the math easier 499 // now, this makes the math easier
500 int remove=end+1-start; 500 int remove=end+1-start;
501 501
502 ret=new Object[m_data.Length-remove]; 502 ret=new Object[m_data.Length-remove];
503 if(ret.Length == 0) 503 if (ret.Length == 0)
504 return new list(ret); 504 return new list(ret);
505 505
506 int src; 506 int src;
507 int dest=0; 507 int dest=0;
508 508
509 for(src = 0 ; src < m_data.Length ; src++) 509 for(src = 0 ; src < m_data.Length ; src++)
510 { 510 {
511 if(src < start || src > end) 511 if (src < start || src > end)
512 ret[dest++]=m_data[src]; 512 ret[dest++]=m_data[src];
513 } 513 }
514 514
515 return new list(ret); 515 return new list(ret);
516 } 516 }
517 517
518 public list GetSublist(int start, int end) 518 public list GetSublist(int start, int end)
519 { 519 {
@@ -581,13 +581,13 @@ namespace OpenSim.Region.ScriptEngine.Common
581 list result = null; 581 list result = null;
582 582
583 // If end is negative, then prefix list is empty 583 // If end is negative, then prefix list is empty
584 if(end < 0) 584 if (end < 0)
585 { 585 {
586 result = new list(); 586 result = new list();
587 // If start is still negative, then the whole of 587 // If start is still negative, then the whole of
588 // the existing list is returned. This case is 588 // the existing list is returned. This case is
589 // only admitted if end is also still negative. 589 // only admitted if end is also still negative.
590 if(start < 0) 590 if (start < 0)
591 { 591 {
592 return this; 592 return this;
593 } 593 }
@@ -600,7 +600,7 @@ namespace OpenSim.Region.ScriptEngine.Common
600 600
601 // If start is outside of list, then just return 601 // If start is outside of list, then just return
602 // the prefix, whatever it is. 602 // the prefix, whatever it is.
603 if(start >= m_data.Length) 603 if (start >= m_data.Length)
604 { 604 {
605 return result; 605 return result;
606 } 606 }
@@ -610,76 +610,76 @@ namespace OpenSim.Region.ScriptEngine.Common
610 } 610 }
611 } 611 }
612 612
613 public list Sort(int stride, int ascending) 613 public list Sort(int stride, int ascending)
614 { 614 {
615 if(Data.Length == 0) 615 if (Data.Length == 0)
616 return new list(); // Don't even bother 616 return new list(); // Don't even bother
617 617
618 string[] keys; 618 string[] keys;
619 619
620 if(stride == 1) // The simple case 620 if (stride == 1) // The simple case
621 { 621 {
622 Object[] ret=new Object[Data.Length]; 622 Object[] ret=new Object[Data.Length];
623 623
624 Array.Copy(Data, 0, ret, 0, Data.Length); 624 Array.Copy(Data, 0, ret, 0, Data.Length);
625 625
626 keys=new string[Data.Length]; 626 keys=new string[Data.Length];
627 int k; 627 int k;
628 for(k=0;k<Data.Length;k++) 628 for(k=0;k<Data.Length;k++)
629 keys[k]=Data[k].ToString(); 629 keys[k]=Data[k].ToString();
630 630
631 Array.Sort(keys, ret); 631 Array.Sort(keys, ret);
632 632
633 if(ascending == 0) 633 if (ascending == 0)
634 Array.Reverse(ret); 634 Array.Reverse(ret);
635 return new list(ret); 635 return new list(ret);
636 } 636 }
637 637
638 int src=0; 638 int src=0;
639 639
640 int len=(Data.Length+stride-1)/stride; 640 int len=(Data.Length+stride-1)/stride;
641 641
642 keys=new string[len]; 642 keys=new string[len];
643 Object[][] vals=new Object[len][]; 643 Object[][] vals=new Object[len][];
644 644
645 int i; 645 int i;
646 646
647 while(src < Data.Length) 647 while(src < Data.Length)
648 { 648 {
649 Object[] o=new Object[stride]; 649 Object[] o=new Object[stride];
650 650
651 for(i=0;i<stride;i++) 651 for(i=0;i<stride;i++)
652 { 652 {
653 if(src < Data.Length) 653 if (src < Data.Length)
654 o[i]=Data[src++]; 654 o[i]=Data[src++];
655 else 655 else
656 { 656 {
657 o[i]=new Object(); 657 o[i]=new Object();
658 src++; 658 src++;
659 } 659 }
660 } 660 }
661 661
662 int idx=src/stride-1; 662 int idx=src/stride-1;
663 keys[idx]=o[0].ToString(); 663 keys[idx]=o[0].ToString();
664 vals[idx]=o; 664 vals[idx]=o;
665 } 665 }
666 666
667 Array.Sort(keys, vals); 667 Array.Sort(keys, vals);
668 if(ascending == 0) 668 if (ascending == 0)
669 { 669 {
670 Array.Reverse(vals); 670 Array.Reverse(vals);
671 } 671 }
672 672
673 Object[] sorted=new Object[stride*vals.Length]; 673 Object[] sorted=new Object[stride*vals.Length];
674 674
675 int j; 675 int j;
676 676
677 for(i=0;i<vals.Length;i++) 677 for(i=0;i<vals.Length;i++)
678 for(j=0;j<stride;j++) 678 for(j=0;j<stride;j++)
679 sorted[i*stride+j]=vals[i][j]; 679 sorted[i*stride+j]=vals[i][j];
680 680
681 return new list(sorted); 681 return new list(sorted);
682 } 682 }
683 683
684 #region CSV Methods 684 #region CSV Methods
685 685
@@ -693,7 +693,7 @@ namespace OpenSim.Region.ScriptEngine.Common
693 string ret = ""; 693 string ret = "";
694 foreach(object o in this.Data) 694 foreach(object o in this.Data)
695 { 695 {
696 if(ret == "") 696 if (ret == "")
697 { 697 {
698 ret = o.ToString(); 698 ret = o.ToString();
699 } 699 }
@@ -720,20 +720,20 @@ namespace OpenSim.Region.ScriptEngine.Common
720 return output; 720 return output;
721 } 721 }
722 722
723 public static explicit operator String(list l) 723 public static explicit operator String(list l)
724 { 724 {
725 return l.ToSoup(); 725 return l.ToSoup();
726 } 726 }
727 727
728 public static explicit operator LSLString(list l) 728 public static explicit operator LSLString(list l)
729 { 729 {
730 return new LSLString(l.ToSoup()); 730 return new LSLString(l.ToSoup());
731 } 731 }
732 732
733 public override string ToString() 733 public override string ToString()
734 { 734 {
735 return ToSoup(); 735 return ToSoup();
736 } 736 }
737 737
738 #endregion 738 #endregion
739 739
@@ -1068,7 +1068,7 @@ namespace OpenSim.Region.ScriptEngine.Common
1068 1068
1069 public override bool Equals(object o) 1069 public override bool Equals(object o)
1070 { 1070 {
1071 return o.ToString() == value; 1071 return o.ToString() == value;
1072 } 1072 }
1073 1073
1074 public override int GetHashCode() 1074 public override int GetHashCode()
@@ -1089,11 +1089,11 @@ namespace OpenSim.Region.ScriptEngine.Common
1089 m_string = s; 1089 m_string = s;
1090 } 1090 }
1091 1091
1092 public LSLString(double d) 1092 public LSLString(double d)
1093 { 1093 {
1094 string s=String.Format("{0:0.000000}", d); 1094 string s=String.Format("{0:0.000000}", d);
1095 m_string=s; 1095 m_string=s;
1096 } 1096 }
1097 1097
1098 #endregion 1098 #endregion
1099 1099
@@ -1120,10 +1120,10 @@ namespace OpenSim.Region.ScriptEngine.Common
1120 return new LSLString(s); 1120 return new LSLString(s);
1121 } 1121 }
1122 1122
1123 public static string ToString(LSLString s) 1123 public static string ToString(LSLString s)
1124 { 1124 {
1125 return s.m_string; 1125 return s.m_string;
1126 } 1126 }
1127 1127
1128 public override string ToString() 1128 public override string ToString()
1129 { 1129 {
@@ -1140,27 +1140,27 @@ namespace OpenSim.Region.ScriptEngine.Common
1140 return s1.m_string != s2; 1140 return s1.m_string != s2;
1141 } 1141 }
1142 1142
1143 public static explicit operator double(LSLString s) 1143 public static explicit operator double(LSLString s)
1144 { 1144 {
1145 return Convert.ToDouble(s.m_string); 1145 return Convert.ToDouble(s.m_string);
1146 } 1146 }
1147 1147
1148 public static explicit operator LSLInteger(LSLString s) 1148 public static explicit operator LSLInteger(LSLString s)
1149 { 1149 {
1150 return new LSLInteger(Convert.ToInt32(s.m_string)); 1150 return new LSLInteger(Convert.ToInt32(s.m_string));
1151 } 1151 }
1152 1152
1153 public static explicit operator LSLString(double d) 1153 public static explicit operator LSLString(double d)
1154 { 1154 {
1155 return new LSLString(d); 1155 return new LSLString(d);
1156 } 1156 }
1157 1157
1158 #endregion 1158 #endregion
1159 1159
1160 #region Overriders 1160 #region Overriders
1161 public override bool Equals(object o) 1161 public override bool Equals(object o)
1162 { 1162 {
1163 return m_string == o.ToString(); 1163 return m_string == o.ToString();
1164 } 1164 }
1165 1165
1166 public override int GetHashCode() 1166 public override int GetHashCode()
@@ -1212,10 +1212,10 @@ namespace OpenSim.Region.ScriptEngine.Common
1212 return (uint)i.value; 1212 return (uint)i.value;
1213 } 1213 }
1214 1214
1215 static public explicit operator LSLString(LSLInteger i) 1215 static public explicit operator LSLString(LSLInteger i)
1216 { 1216 {
1217 return new LSLString(i.ToString()); 1217 return new LSLString(i.ToString());
1218 } 1218 }
1219 1219
1220 static public implicit operator Boolean(LSLInteger i) 1220 static public implicit operator Boolean(LSLInteger i)
1221 { 1221 {
@@ -1234,10 +1234,10 @@ namespace OpenSim.Region.ScriptEngine.Common
1234 return new LSLInteger(i); 1234 return new LSLInteger(i);
1235 } 1235 }
1236 1236
1237 static public explicit operator LSLInteger(string s) 1237 static public explicit operator LSLInteger(string s)
1238 { 1238 {
1239 return new LSLInteger(int.Parse(s)); 1239 return new LSLInteger(int.Parse(s));
1240 } 1240 }
1241 1241
1242 static public implicit operator LSLInteger(double d) 1242 static public implicit operator LSLInteger(double d)
1243 { 1243 {
@@ -1250,17 +1250,17 @@ namespace OpenSim.Region.ScriptEngine.Common
1250 return ret; 1250 return ret;
1251 } 1251 }
1252 1252
1253 public static LSLInteger operator ++(LSLInteger i) 1253 public static LSLInteger operator ++(LSLInteger i)
1254 { 1254 {
1255 i.value++; 1255 i.value++;
1256 return i; 1256 return i;
1257 } 1257 }
1258 1258
1259 public static LSLInteger operator --(LSLInteger i) 1259 public static LSLInteger operator --(LSLInteger i)
1260 { 1260 {
1261 i.value--; 1261 i.value--;
1262 return i; 1262 return i;
1263 } 1263 }
1264 1264
1265 static public implicit operator System.Double(LSLInteger i) 1265 static public implicit operator System.Double(LSLInteger i)
1266 { 1266 {
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs
index 2a6f775..ed11337 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs
@@ -295,18 +295,18 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
295 if (e.InnerException != null) 295 if (e.InnerException != null)
296 { 296 {
297 // Send inner exception 297 // Send inner exception
298 string[] lines=e.InnerException.ToString().Replace("\r", "").Split('\n'); 298 string[] lines=e.InnerException.ToString().Replace("\r", "").Split('\n');
299 int line=0; 299 int line=0;
300 foreach(string t in lines) 300 foreach(string t in lines)
301 { 301 {
302 int idx=t.IndexOf("SecondLife.Script."); 302 int idx=t.IndexOf("SecondLife.Script.");
303 if(idx != -1) 303 if(idx != -1)
304 { 304 {
305 int colon=t.IndexOf(":"); 305 int colon=t.IndexOf(":");
306 line=Convert.ToInt32(t.Substring(colon+1)); 306 line=Convert.ToInt32(t.Substring(colon+1));
307 break; 307 break;
308 } 308 }
309 } 309 }
310 text += e.InnerException.Message.ToString()+" in line "+line.ToString(); 310 text += e.InnerException.Message.ToString()+" in line "+line.ToString();
311 } 311 }
312 else 312 else