aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs470
1 files changed, 463 insertions, 7 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 7122d65..aa4fb13 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -34,6 +34,7 @@ using System.Threading;
34using Nini.Config; 34using Nini.Config;
35using Axiom.Math; 35using Axiom.Math;
36using libsecondlife; 36using libsecondlife;
37using libsecondlife.Packets;
37using OpenSim.Framework; 38using OpenSim.Framework;
38using OpenSim.Framework.Communications.Cache; 39using OpenSim.Framework.Communications.Cache;
39using OpenSim.Region.Environment; 40using OpenSim.Region.Environment;
@@ -4778,6 +4779,316 @@ namespace OpenSim.Region.ScriptEngine.Common
4778 m_host.AddScriptLPS(1); 4779 m_host.AddScriptLPS(1);
4779 return Util.Md5Hash(src + ":" + nonce.ToString()); 4780 return Util.Md5Hash(src + ":" + nonce.ToString());
4780 } 4781 }
4782
4783 private ObjectShapePacket.ObjectDataBlock SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist)
4784 {
4785 ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock();
4786
4787 if (holeshape != (int)BuiltIn_Commands_BaseClass.PRIM_HOLE_DEFAULT &&
4788 holeshape != (int)BuiltIn_Commands_BaseClass.PRIM_HOLE_CIRCLE &&
4789 holeshape != (int)BuiltIn_Commands_BaseClass.PRIM_HOLE_SQUARE &&
4790 holeshape != (int)BuiltIn_Commands_BaseClass.PRIM_HOLE_TRIANGLE)
4791 {
4792 holeshape = (int)BuiltIn_Commands_BaseClass.PRIM_HOLE_DEFAULT;
4793 }
4794 shapeBlock.ProfileCurve = (byte)holeshape;
4795 if (cut.x < 0f)
4796 {
4797 cut.x = 0f;
4798 }
4799 if (cut.x > 1f)
4800 {
4801 cut.x = 1f;
4802 }
4803 if (cut.y < 0f)
4804 {
4805 cut.y = 0f;
4806 }
4807 if (cut.y > 1f)
4808 {
4809 cut.y = 1f;
4810 }
4811 if (cut.y - cut.x < 0.05f)
4812 {
4813 cut.x = cut.y - 0.05f;
4814 }
4815 shapeBlock.ProfileBegin = (ushort)(50000 * cut.x);
4816 shapeBlock.ProfileEnd = (ushort)(50000 * (1 - cut.y));
4817 if (hollow < 0f)
4818 {
4819 hollow = 0f;
4820 }
4821 if (hollow > 0.95)
4822 {
4823 hollow = 0.95f;
4824 }
4825 shapeBlock.ProfileHollow = (ushort)(50000 * hollow);
4826 if (twist.x < -0.5f)
4827 {
4828 twist.x = -0.5f;
4829 }
4830 if (twist.x > 0.5f)
4831 {
4832 twist.x = 0.5f;
4833 }
4834 if (twist.y < -0.5f)
4835 {
4836 twist.y = -0.5f;
4837 }
4838 if (twist.y > 0.5f)
4839 {
4840 twist.y = 0.5f;
4841 }
4842 shapeBlock.PathTwistBegin = (sbyte)(200 * twist.x);
4843 shapeBlock.PathTwist = (sbyte)(200 * twist.y);
4844
4845 shapeBlock.ObjectLocalID = m_host.LocalId;
4846
4847 // retain pathcurve
4848 shapeBlock.PathCurve = m_host.Shape.PathCurve;
4849
4850 return shapeBlock;
4851 }
4852
4853 private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 taper_b, LSL_Types.Vector3 topshear, byte fudge)
4854 {
4855 ObjectShapePacket.ObjectDataBlock shapeBlock;
4856
4857 shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist);
4858
4859 shapeBlock.ProfileCurve += fudge;
4860
4861 if (taper_b.x < 0f)
4862 {
4863 taper_b.x = 0f;
4864 }
4865 if (taper_b.x > 2f)
4866 {
4867 taper_b.x = 2f;
4868 }
4869 if (taper_b.y < 0f)
4870 {
4871 taper_b.y = 0f;
4872 }
4873 if (taper_b.y > 2f)
4874 {
4875 taper_b.y = 2f;
4876 }
4877 shapeBlock.PathScaleX = (byte)(100 * taper_b.x);
4878 shapeBlock.PathScaleY = (byte)(100 * taper_b.y);
4879 if (topshear.x < -0.5f)
4880 {
4881 topshear.x = -0.5f;
4882 }
4883 if (topshear.x > 0.5f)
4884 {
4885 topshear.x = 0.5f;
4886 }
4887 if (topshear.y < -0.5f)
4888 {
4889 topshear.y = -0.5f;
4890 }
4891 if (topshear.y > 0.5f)
4892 {
4893 topshear.y = 0.5f;
4894 }
4895 shapeBlock.PathShearX = (byte)(100 * topshear.x);
4896 shapeBlock.PathShearY = (byte)(100 * topshear.y);
4897
4898 m_host.UpdateShape(shapeBlock);
4899 }
4900
4901 private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 dimple, byte fudge)
4902 {
4903 ObjectShapePacket.ObjectDataBlock shapeBlock;
4904
4905 shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist);
4906
4907 // profile/path swapped for a sphere
4908 shapeBlock.PathBegin = shapeBlock.ProfileBegin;
4909 shapeBlock.PathEnd = shapeBlock.ProfileEnd;
4910
4911 shapeBlock.ProfileCurve += fudge;
4912
4913 shapeBlock.PathScaleX = 100;
4914 shapeBlock.PathScaleY = 100;
4915
4916 if (dimple.x < 0f)
4917 {
4918 dimple.x = 0f;
4919 }
4920 if (dimple.x > 1f)
4921 {
4922 dimple.x = 1f;
4923 }
4924 if (dimple.y < 0f)
4925 {
4926 dimple.y = 0f;
4927 }
4928 if (dimple.y > 1f)
4929 {
4930 dimple.y = 1f;
4931 }
4932 if (dimple.y - cut.x < 0.05f)
4933 {
4934 dimple.x = cut.y - 0.05f;
4935 }
4936 shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x);
4937 shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y));
4938
4939 m_host.UpdateShape(shapeBlock);
4940 }
4941
4942 private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 holesize, LSL_Types.Vector3 topshear, LSL_Types.Vector3 profilecut, LSL_Types.Vector3 taper_a, float revolutions, float radiusoffset, float skew, byte fudge)
4943 {
4944 ObjectShapePacket.ObjectDataBlock shapeBlock;
4945
4946 shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist);
4947
4948 shapeBlock.ProfileCurve += fudge;
4949
4950 // profile/path swapped for a torrus, tube, ring
4951 shapeBlock.PathBegin = shapeBlock.ProfileBegin;
4952 shapeBlock.PathEnd = shapeBlock.ProfileEnd;
4953
4954 if (holesize.x < 0.05f)
4955 {
4956 holesize.x = 0.05f;
4957 }
4958 if (holesize.x > 1f)
4959 {
4960 holesize.x = 1f;
4961 }
4962 if (holesize.y < 0.05f)
4963 {
4964 holesize.y = 0.05f;
4965 }
4966 if (holesize.y > 0.5f)
4967 {
4968 holesize.y = 0.5f;
4969 }
4970 shapeBlock.PathScaleX = (byte)(100 * (2 - holesize.x));
4971 shapeBlock.PathScaleY = (byte)(100 * (2 - holesize.y));
4972 if (topshear.x < -0.5f)
4973 {
4974 topshear.x = -0.5f;
4975 }
4976 if (topshear.x > 0.5f)
4977 {
4978 topshear.x = 0.5f;
4979 }
4980 if (topshear.y < -0.5f)
4981 {
4982 topshear.y = -0.5f;
4983 }
4984 if (topshear.y > 0.5f)
4985 {
4986 topshear.y = 0.5f;
4987 }
4988 shapeBlock.PathShearX = (byte)(100 * topshear.x);
4989 shapeBlock.PathShearY = (byte)(100 * topshear.y);
4990 if (profilecut.x < 0f)
4991 {
4992 profilecut.x = 0f;
4993 }
4994 if (profilecut.x > 1f)
4995 {
4996 profilecut.x = 1f;
4997 }
4998 if (profilecut.y < 0f)
4999 {
5000 profilecut.y = 0f;
5001 }
5002 if (profilecut.y > 1f)
5003 {
5004 profilecut.y = 1f;
5005 }
5006 if (profilecut.y - cut.x < 0.05f)
5007 {
5008 profilecut.x = cut.y - 0.05f;
5009 }
5010 shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x);
5011 shapeBlock.ProfileEnd = (ushort)(50000 * (1 - profilecut.y));
5012 if (taper_a.x < -1f)
5013 {
5014 taper_a.x = -1f;
5015 }
5016 if (taper_a.x > 1f)
5017 {
5018 taper_a.x = 1f;
5019 }
5020 if (taper_a.y < -1f)
5021 {
5022 taper_a.y = -1f;
5023 }
5024 if (taper_a.y > 1f)
5025 {
5026 taper_a.y = 1f;
5027 }
5028 shapeBlock.PathTaperX = (sbyte)(100 * taper_a.x);
5029 shapeBlock.PathTaperY = (sbyte)(100 * taper_a.y);
5030 if (revolutions < 1f)
5031 {
5032 revolutions = 1f;
5033 }
5034 if (revolutions > 4f)
5035 {
5036 revolutions = 4f;
5037 }
5038 shapeBlock.PathRevolutions = (byte)(100 * revolutions);
5039 // limits on radiusoffset depend on revolutions and hole size (how?) seems like the maximum range is 0 to 1
5040 if (radiusoffset < 0f)
5041 {
5042 radiusoffset = 0f;
5043 }
5044 if (radiusoffset > 1f)
5045 {
5046 radiusoffset = 1f;
5047 }
5048 shapeBlock.PathRadiusOffset = (sbyte)(100 * radiusoffset);
5049 if (skew < -0.95f)
5050 {
5051 skew = -0.95f;
5052 }
5053 if (skew > 0.95f)
5054 {
5055 skew = 0.95f;
5056 }
5057 shapeBlock.PathSkew = (sbyte)(100 * skew);
5058
5059 m_host.UpdateShape(shapeBlock);
5060 }
5061
5062 private void SetPrimitiveShapeParams(string map, int type)
5063 {
5064 ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock();
5065 LLUUID sculptId;
5066
5067 if (!LLUUID.TryParse(map, out sculptId))
5068 {
5069 llSay(0, "Could not parse key " + map);
5070 return;
5071 }
5072
5073 shapeBlock.ObjectLocalID = m_host.LocalId;
5074 shapeBlock.PathScaleX = 100;
5075 shapeBlock.PathScaleY = 150;
5076
5077 if (type != (int)BuiltIn_Commands_BaseClass.PRIM_SCULPT_TYPE_CYLINDER &&
5078 type != (int)BuiltIn_Commands_BaseClass.PRIM_SCULPT_TYPE_PLANE &&
5079 type != (int)BuiltIn_Commands_BaseClass.PRIM_SCULPT_TYPE_SPHERE &&
5080 type != (int)BuiltIn_Commands_BaseClass.PRIM_SCULPT_TYPE_TORUS)
5081 {
5082 // default
5083 type = (int)BuiltIn_Commands_BaseClass.PRIM_SCULPT_TYPE_SPHERE;
5084 }
5085
5086 // retain pathcurve
5087 shapeBlock.PathCurve = m_host.Shape.PathCurve;
5088
5089 m_host.Shape.SetSculptData((byte)type, sculptId);
5090 m_host.UpdateShape(shapeBlock);
5091 }
4781 5092
4782 public void llSetPrimitiveParams(LSL_Types.list rules) 5093 public void llSetPrimitiveParams(LSL_Types.list rules)
4783 { 5094 {
@@ -4822,7 +5133,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4822 5133
4823 switch (code) 5134 switch (code)
4824 { 5135 {
4825 case 6: // PRIM_POSITION 5136 case (int)BuiltIn_Commands_BaseClass.PRIM_POSITION:
4826 if (remain < 1) 5137 if (remain < 1)
4827 return; 5138 return;
4828 5139
@@ -4830,7 +5141,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4830 SetPos(part, v); 5141 SetPos(part, v);
4831 5142
4832 break; 5143 break;
4833 case 7: // PRIM_SIZE 5144 case (int)BuiltIn_Commands_BaseClass.PRIM_SIZE:
4834 if (remain < 1) 5145 if (remain < 1)
4835 return; 5146 return;
4836 5147
@@ -4838,7 +5149,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4838 SetScale(part, v); 5149 SetScale(part, v);
4839 5150
4840 break; 5151 break;
4841 case 8: // PRIM_ROTATION 5152 case (int)BuiltIn_Commands_BaseClass.PRIM_ROTATION:
4842 if (remain < 1) 5153 if (remain < 1)
4843 return; 5154 return;
4844 5155
@@ -4846,8 +5157,153 @@ namespace OpenSim.Region.ScriptEngine.Common
4846 SetRot(part, q); 5157 SetRot(part, q);
4847 5158
4848 break; 5159 break;
5160
5161 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE:
5162 if (remain < 3)
5163 return;
5164
5165 code = Convert.ToInt32(rules.Data[idx++]);
5166
5167 remain = rules.Length - idx;
5168 float hollow;
5169 LSL_Types.Vector3 twist;
5170 LSL_Types.Vector3 taper_b;
5171 LSL_Types.Vector3 topshear;
5172 float revolutions;
5173 float radiusoffset;
5174 float skew;
5175 LSL_Types.Vector3 holesize;
5176 LSL_Types.Vector3 profilecut;
5177
5178 switch(code)
5179 {
5180 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX:
5181 if (remain < 6)
5182 return;
5183
5184 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5185 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // cut
5186 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5187 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5188 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5189 topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5190 m_host.Shape.PathCurve = (byte) Extrusion.Straight;
5191 SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 1);;
5192 break;
5193
5194 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_CYLINDER:
5195 if (remain < 6)
5196 return;
5197
5198 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5199 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // cut
5200 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5201 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5202 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5203 topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5204 m_host.Shape.ProfileShape = ProfileShape.Circle;
5205 m_host.Shape.PathCurve = (byte) Extrusion.Straight;
5206 SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 0);
5207 break;
5208
5209 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_PRISM:
5210 if (remain < 6)
5211 return;
5212
5213 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5214 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); //cut
5215 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5216 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5217 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5218 topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5219 m_host.Shape.PathCurve = (byte) Extrusion.Straight;
5220 SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 3);
5221 break;
4849 5222
4850 case 17: // PRIM_TEXTURE 5223 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_SPHERE:
5224 if (remain < 5)
5225 return;
5226
5227 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5228 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // cut
5229 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5230 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5231 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // dimple
5232 m_host.Shape.PathCurve = (byte) Extrusion.Curve1;
5233 SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, 5);
5234 break;
5235
5236 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_TORUS:
5237 if (remain < 11)
5238 return;
5239
5240 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5241 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); //cut
5242 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5243 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5244 holesize = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5245 topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5246 profilecut = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5247 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // taper_a
5248 revolutions = (float)Convert.ToDouble(rules.Data[idx++]);
5249 radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]);
5250 skew = (float)Convert.ToDouble(rules.Data[idx++]);
5251 m_host.Shape.PathCurve = (byte) Extrusion.Curve1;
5252 SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 0);
5253 break;
5254
5255 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_TUBE:
5256 if (remain < 11)
5257 return;
5258
5259 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5260 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); //cut
5261 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5262 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5263 holesize = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5264 topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5265 profilecut = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5266 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // taper_a
5267 revolutions = (float)Convert.ToDouble(rules.Data[idx++]);
5268 radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]);
5269 skew = (float)Convert.ToDouble(rules.Data[idx++]);
5270 m_host.Shape.PathCurve = (byte) Extrusion.Curve1;
5271 SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 1);
5272 break;
5273
5274 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_RING:
5275 if (remain < 11)
5276 return;
5277
5278 face = Convert.ToInt32(rules.Data[idx++]); // holeshape
5279 v = new LSL_Types.Vector3(rules.Data[idx++].ToString()); //cut
5280 hollow = (float)Convert.ToDouble(rules.Data[idx++]);
5281 twist = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5282 holesize = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5283 topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5284 profilecut = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5285 taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // taper_a
5286 revolutions = (float)Convert.ToDouble(rules.Data[idx++]);
5287 radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]);
5288 skew = (float)Convert.ToDouble(rules.Data[idx++]);
5289 m_host.Shape.PathCurve = (byte) Extrusion.Curve1;
5290 SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 3);
5291 break;
5292
5293 case (int)BuiltIn_Commands_BaseClass.PRIM_TYPE_SCULPT:
5294 if (remain < 2)
5295 return;
5296
5297 string map = rules.Data[idx++].ToString();
5298 face = Convert.ToInt32(rules.Data[idx++]); // type
5299 m_host.Shape.PathCurve = (byte) Extrusion.Curve1;
5300 SetPrimitiveShapeParams(map, face);
5301 break;
5302 }
5303
5304 break;
5305
5306 case (int)BuiltIn_Commands_BaseClass.PRIM_TEXTURE:
4851 if (remain < 5) 5307 if (remain < 5)
4852 return; 5308 return;
4853 5309
@@ -4864,7 +5320,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4864 5320
4865 break; 5321 break;
4866 5322
4867 case 18: // PRIM_COLOR 5323 case (int)BuiltIn_Commands_BaseClass.PRIM_COLOR:
4868 if (remain < 3) 5324 if (remain < 3)
4869 return; 5325 return;
4870 5326
@@ -4876,7 +5332,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4876 SetAlpha(part, alpha, face); 5332 SetAlpha(part, alpha, face);
4877 5333
4878 break; 5334 break;
4879 case 21: // PRIM_FLEXI 5335 case (int)BuiltIn_Commands_BaseClass.PRIM_FLEXIBLE:
4880 if (remain < 7) 5336 if (remain < 7)
4881 return; 5337 return;
4882 5338
@@ -4891,7 +5347,7 @@ namespace OpenSim.Region.ScriptEngine.Common
4891 SetFlexi(part, (flexi == 1), softness, gravity, friction, wind, tension, force); 5347 SetFlexi(part, (flexi == 1), softness, gravity, friction, wind, tension, force);
4892 5348
4893 break; 5349 break;
4894 case 23: // PRIM_POINT_LIGHT 5350 case (int)BuiltIn_Commands_BaseClass.PRIM_POINT_LIGHT:
4895 if (remain < 5) 5351 if (remain < 5)
4896 return; 5352 return;
4897 int light = Convert.ToInt32(rules.Data[idx++]); 5353 int light = Convert.ToInt32(rules.Data[idx++]);