aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs148
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs8
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs24
6 files changed, 152 insertions, 38 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
index ee32755..14edde4 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs
@@ -137,7 +137,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
137 if (cmdHandlerThread == null) 137 if (cmdHandlerThread == null)
138 { 138 {
139 // Start the thread that will be doing the work 139 // Start the thread that will be doing the work
140 cmdHandlerThread = Watchdog.StartThread(CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true); 140 cmdHandlerThread
141 = Watchdog.StartThread(
142 CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true);
141 } 143 }
142 } 144 }
143 145
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 61a6907..c5392b5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -6376,16 +6376,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6376 } 6376 }
6377 } 6377 }
6378 6378
6379 public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) 6379 protected void SitTarget(SceneObjectPart part, LSL_Vector offset, LSL_Rotation rot)
6380 { 6380 {
6381 m_host.AddScriptLPS(1);
6382 // LSL quaternions can normalize to 0, normal Quaternions can't. 6381 // LSL quaternions can normalize to 0, normal Quaternions can't.
6383 if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0) 6382 if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0)
6384 rot.z = 1; // ZERO_ROTATION = 0,0,0,1 6383 rot.z = 1; // ZERO_ROTATION = 0,0,0,1
6385 6384
6386 m_host.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z); 6385 part.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
6387 m_host.SitTargetOrientation = Rot2Quaternion(rot); 6386 part.SitTargetOrientation = Rot2Quaternion(rot);
6388 m_host.ParentGroup.HasGroupChanged = true; 6387 part.ParentGroup.HasGroupChanged = true;
6388 }
6389
6390 public void llSitTarget(LSL_Vector offset, LSL_Rotation rot)
6391 {
6392 m_host.AddScriptLPS(1);
6393 SitTarget(m_host, offset, rot);
6394 }
6395
6396 public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot)
6397 {
6398 m_host.AddScriptLPS(1);
6399 if (link == ScriptBaseClass.LINK_ROOT)
6400 SitTarget(m_host.ParentGroup.RootPart, offset, rot);
6401 else if (link == ScriptBaseClass.LINK_THIS)
6402 SitTarget(m_host, offset, rot);
6403 else
6404 {
6405 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
6406 if (null != part)
6407 {
6408 SitTarget(part, offset, rot);
6409 }
6410 }
6389 } 6411 }
6390 6412
6391 public LSL_String llAvatarOnSitTarget() 6413 public LSL_String llAvatarOnSitTarget()
@@ -7047,10 +7069,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7047 shapeBlock.PathScaleX = 100; 7069 shapeBlock.PathScaleX = 100;
7048 shapeBlock.PathScaleY = 150; 7070 shapeBlock.PathScaleY = 150;
7049 7071
7050 if (type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER && 7072 int flag = type & (ScriptBaseClass.PRIM_SCULPT_FLAG_INVERT | ScriptBaseClass.PRIM_SCULPT_FLAG_MIRROR);
7051 type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE && 7073
7052 type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE && 7074 if (type != (ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER | flag) &&
7053 type != (int)ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS) 7075 type != (ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE | flag) &&
7076 type != (ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE | flag) &&
7077 type != (ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS | flag))
7054 { 7078 {
7055 // default 7079 // default
7056 type = (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE; 7080 type = (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE;
@@ -8151,23 +8175,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8151 { 8175 {
8152 m_host.AddScriptLPS(1); 8176 m_host.AddScriptLPS(1);
8153 ScriptSleep(1000); 8177 ScriptSleep(1000);
8178 return GetPrimMediaParams(m_host, face, rules);
8179 }
8154 8180
8181 public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
8182 {
8183 m_host.AddScriptLPS(1);
8184 ScriptSleep(1000);
8185 if (link == ScriptBaseClass.LINK_ROOT)
8186 return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules);
8187 else if (link == ScriptBaseClass.LINK_THIS)
8188 return GetPrimMediaParams(m_host, face, rules);
8189 else
8190 {
8191 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
8192 if (null != part)
8193 return GetPrimMediaParams(part, face, rules);
8194 }
8195
8196 return new LSL_List();
8197 }
8198
8199 private LSL_List GetPrimMediaParams(SceneObjectPart part, int face, LSL_List rules)
8200 {
8155 // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid 8201 // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid
8156 // TODO: Need to correctly handle case where a face has no media (which gives back an empty list). 8202 // TODO: Need to correctly handle case where a face has no media (which gives back an empty list).
8157 // Assuming silently fail means give back an empty list. Ideally, need to check this. 8203 // Assuming silently fail means give back an empty list. Ideally, need to check this.
8158 if (face < 0 || face > m_host.GetNumberOfSides() - 1) 8204 if (face < 0 || face > part.GetNumberOfSides() - 1)
8159 return new LSL_List(); 8205 return new LSL_List();
8160 8206
8161 return GetPrimMediaParams(face, rules);
8162 }
8163
8164 private LSL_List GetPrimMediaParams(int face, LSL_List rules)
8165 {
8166 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); 8207 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
8167 if (null == module) 8208 if (null == module)
8168 throw new Exception("Media on a prim functions not available"); 8209 return new LSL_List();
8169 8210
8170 MediaEntry me = module.GetMediaEntry(m_host, face); 8211 MediaEntry me = module.GetMediaEntry(part, face);
8171 8212
8172 // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams 8213 // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams
8173 if (null == me) 8214 if (null == me)
@@ -8249,33 +8290,52 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8249 case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: 8290 case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL:
8250 res.Add(new LSL_Integer((int)me.ControlPermissions)); 8291 res.Add(new LSL_Integer((int)me.ControlPermissions));
8251 break; 8292 break;
8293
8294 default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS;
8252 } 8295 }
8253 } 8296 }
8254 8297
8255 return res; 8298 return res;
8256 } 8299 }
8257 8300
8258 public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules) 8301 public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules)
8259 { 8302 {
8260 m_host.AddScriptLPS(1); 8303 m_host.AddScriptLPS(1);
8261 ScriptSleep(1000); 8304 ScriptSleep(1000);
8305 return SetPrimMediaParams(m_host, face, rules);
8306 }
8262 8307
8263 // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid 8308 public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
8264 // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. 8309 {
8265 // Don't perform the media check directly 8310 m_host.AddScriptLPS(1);
8266 if (face < 0 || face > m_host.GetNumberOfSides() - 1) 8311 ScriptSleep(1000);
8267 return ScriptBaseClass.LSL_STATUS_OK; 8312 if (link == ScriptBaseClass.LINK_ROOT)
8313 return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules);
8314 else if (link == ScriptBaseClass.LINK_THIS)
8315 return SetPrimMediaParams(m_host, face, rules);
8316 else
8317 {
8318 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
8319 if (null != part)
8320 return SetPrimMediaParams(part, face, rules);
8321 }
8268 8322
8269 return SetPrimMediaParams(face, rules); 8323 return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
8270 } 8324 }
8271 8325
8272 private LSL_Integer SetPrimMediaParams(int face, LSL_List rules) 8326 private LSL_Integer SetPrimMediaParams(SceneObjectPart part, LSL_Integer face, LSL_List rules)
8273 { 8327 {
8328 // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid
8329 // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this.
8330 // Don't perform the media check directly
8331 if (face < 0 || face > part.GetNumberOfSides() - 1)
8332 return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
8333
8274 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); 8334 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
8275 if (null == module) 8335 if (null == module)
8276 throw new Exception("Media on a prim functions not available"); 8336 return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED;
8277 8337
8278 MediaEntry me = module.GetMediaEntry(m_host, face); 8338 MediaEntry me = module.GetMediaEntry(part, face);
8279 if (null == me) 8339 if (null == me)
8280 me = new MediaEntry(); 8340 me = new MediaEntry();
8281 8341
@@ -8354,10 +8414,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8354 case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: 8414 case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL:
8355 me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); 8415 me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++);
8356 break; 8416 break;
8417
8418 default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS;
8357 } 8419 }
8358 } 8420 }
8359 8421
8360 module.SetMediaEntry(m_host, face, me); 8422 module.SetMediaEntry(part, face, me);
8361 8423
8362 return ScriptBaseClass.LSL_STATUS_OK; 8424 return ScriptBaseClass.LSL_STATUS_OK;
8363 } 8425 }
@@ -8366,18 +8428,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8366 { 8428 {
8367 m_host.AddScriptLPS(1); 8429 m_host.AddScriptLPS(1);
8368 ScriptSleep(1000); 8430 ScriptSleep(1000);
8431 return ClearPrimMedia(m_host, face);
8432 }
8369 8433
8434 public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face)
8435 {
8436 m_host.AddScriptLPS(1);
8437 ScriptSleep(1000);
8438 if (link == ScriptBaseClass.LINK_ROOT)
8439 return ClearPrimMedia(m_host.ParentGroup.RootPart, face);
8440 else if (link == ScriptBaseClass.LINK_THIS)
8441 return ClearPrimMedia(m_host, face);
8442 else
8443 {
8444 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link);
8445 if (null != part)
8446 return ClearPrimMedia(part, face);
8447 }
8448
8449 return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
8450 }
8451
8452 private LSL_Integer ClearPrimMedia(SceneObjectPart part, LSL_Integer face)
8453 {
8370 // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid 8454 // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid
8371 // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. 8455 // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this.
8372 // FIXME: Don't perform the media check directly 8456 // FIXME: Don't perform the media check directly
8373 if (face < 0 || face > m_host.GetNumberOfSides() - 1) 8457 if (face < 0 || face > part.GetNumberOfSides() - 1)
8374 return ScriptBaseClass.LSL_STATUS_OK; 8458 return ScriptBaseClass.LSL_STATUS_NOT_FOUND;
8375 8459
8376 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>(); 8460 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
8377 if (null == module) 8461 if (null == module)
8378 throw new Exception("Media on a prim functions not available"); 8462 return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED;
8379 8463
8380 module.ClearMediaEntry(m_host, face); 8464 module.ClearMediaEntry(part, face);
8381 8465
8382 return ScriptBaseClass.LSL_STATUS_OK; 8466 return ScriptBaseClass.LSL_STATUS_OK;
8383 } 8467 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index c55e2ae..ff1f5fd 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2740,7 +2740,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2740 CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); 2740 CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed");
2741 m_host.AddScriptLPS(1); 2741 m_host.AddScriptLPS(1);
2742 ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); 2742 ScenePresence avatar = World.GetScenePresence(new UUID(UUID));
2743 avatar.SpeedModifier = (float)SpeedModifier; 2743
2744 if (avatar != null)
2745 avatar.SpeedModifier = (float)SpeedModifier;
2744 } 2746 }
2745 2747
2746 public void osKickAvatar(string FirstName,string SurName,string alert) 2748 public void osKickAvatar(string FirstName,string SurName,string alert)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index 6106a65..0f53bc3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -64,6 +64,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
64 LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options); 64 LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options);
65 LSL_Integer llCeil(double f); 65 LSL_Integer llCeil(double f);
66 void llClearCameraParams(); 66 void llClearCameraParams();
67 LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face);
67 LSL_Integer llClearPrimMedia(LSL_Integer face); 68 LSL_Integer llClearPrimMedia(LSL_Integer face);
68 void llCloseRemoteDataChannel(string channel); 69 void llCloseRemoteDataChannel(string channel);
69 LSL_Float llCloud(LSL_Vector offset); 70 LSL_Float llCloud(LSL_Vector offset);
@@ -139,7 +140,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
139 LSL_String llGetLinkName(int linknum); 140 LSL_String llGetLinkName(int linknum);
140 LSL_Integer llGetLinkNumber(); 141 LSL_Integer llGetLinkNumber();
141 LSL_Integer llGetLinkNumberOfSides(int link); 142 LSL_Integer llGetLinkNumberOfSides(int link);
142 LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules); 143 LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules);
144 LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules);
143 LSL_Integer llGetListEntryType(LSL_List src, int index); 145 LSL_Integer llGetListEntryType(LSL_List src, int index);
144 LSL_Integer llGetListLength(LSL_List src); 146 LSL_Integer llGetListLength(LSL_List src);
145 LSL_Vector llGetLocalPos(); 147 LSL_Vector llGetLocalPos();
@@ -218,6 +220,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
218 LSL_String llGetDisplayName(string id); 220 LSL_String llGetDisplayName(string id);
219 LSL_String llRequestDisplayName(string id); 221 LSL_String llRequestDisplayName(string id);
220 void llLinkParticleSystem(int linknum, LSL_List rules); 222 void llLinkParticleSystem(int linknum, LSL_List rules);
223 void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot);
221 LSL_String llList2CSV(LSL_List src); 224 LSL_String llList2CSV(LSL_List src);
222 LSL_Float llList2Float(LSL_List src, int index); 225 LSL_Float llList2Float(LSL_List src, int index);
223 LSL_Integer llList2Integer(LSL_List src, int index); 226 LSL_Integer llList2Integer(LSL_List src, int index);
@@ -334,6 +337,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
334 void llSetInventoryPermMask(string item, int mask, int value); 337 void llSetInventoryPermMask(string item, int mask, int value);
335 void llSetLinkAlpha(int linknumber, double alpha, int face); 338 void llSetLinkAlpha(int linknumber, double alpha, int face);
336 void llSetLinkColor(int linknumber, LSL_Vector color, int face); 339 void llSetLinkColor(int linknumber, LSL_Vector color, int face);
340 LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules);
337 void llSetLinkPrimitiveParams(int linknumber, LSL_List rules); 341 void llSetLinkPrimitiveParams(int linknumber, LSL_List rules);
338 void llSetLinkTexture(int linknumber, string texture, int face); 342 void llSetLinkTexture(int linknumber, string texture, int face);
339 void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate); 343 void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate);
@@ -344,7 +348,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
344 void llSetParcelMusicURL(string url); 348 void llSetParcelMusicURL(string url);
345 void llSetPayPrice(int price, LSL_List quick_pay_buttons); 349 void llSetPayPrice(int price, LSL_List quick_pay_buttons);
346 void llSetPos(LSL_Vector pos); 350 void llSetPos(LSL_Vector pos);
347 LSL_Integer llSetPrimMediaParams(int face, LSL_List rules); 351 LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules);
348 void llSetPrimitiveParams(LSL_List rules); 352 void llSetPrimitiveParams(LSL_List rules);
349 void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules); 353 void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules);
350 void llSetPrimURL(string url); 354 void llSetPrimURL(string url);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
index bb498b5..5a53e15 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
@@ -378,6 +378,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
378 public const int PRIM_SCULPT_TYPE_TORUS = 2; 378 public const int PRIM_SCULPT_TYPE_TORUS = 2;
379 public const int PRIM_SCULPT_TYPE_PLANE = 3; 379 public const int PRIM_SCULPT_TYPE_PLANE = 3;
380 public const int PRIM_SCULPT_TYPE_CYLINDER = 4; 380 public const int PRIM_SCULPT_TYPE_CYLINDER = 4;
381 public const int PRIM_SCULPT_FLAG_INVERT = 64;
382 public const int PRIM_SCULPT_FLAG_MIRROR = 128;
381 383
382 public const int MASK_BASE = 0; 384 public const int MASK_BASE = 0;
383 public const int MASK_OWNER = 1; 385 public const int MASK_OWNER = 1;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index 83550a5..f8e3c36 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -1688,6 +1688,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
1688 m_LSL_Functions.llSitTarget(offset, rot); 1688 m_LSL_Functions.llSitTarget(offset, rot);
1689 } 1689 }
1690 1690
1691 public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot)
1692 {
1693 m_LSL_Functions.llLinkSitTarget(link, offset, rot);
1694 }
1695
1691 public void llSleep(double sec) 1696 public void llSleep(double sec)
1692 { 1697 {
1693 m_LSL_Functions.llSleep(sec); 1698 m_LSL_Functions.llSleep(sec);
@@ -1882,17 +1887,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
1882 { 1887 {
1883 return m_LSL_Functions.llGetPrimMediaParams(face, rules); 1888 return m_LSL_Functions.llGetPrimMediaParams(face, rules);
1884 } 1889 }
1885 1890
1891 public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
1892 {
1893 return m_LSL_Functions.llGetLinkMedia(link, face, rules);
1894 }
1895
1886 public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules) 1896 public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules)
1887 { 1897 {
1888 return m_LSL_Functions.llSetPrimMediaParams(face, rules); 1898 return m_LSL_Functions.llSetPrimMediaParams(face, rules);
1889 } 1899 }
1890 1900
1901 public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules)
1902 {
1903 return m_LSL_Functions.llSetLinkMedia(link, face, rules);
1904 }
1905
1891 public LSL_Integer llClearPrimMedia(LSL_Integer face) 1906 public LSL_Integer llClearPrimMedia(LSL_Integer face)
1892 { 1907 {
1893 return m_LSL_Functions.llClearPrimMedia(face); 1908 return m_LSL_Functions.llClearPrimMedia(face);
1894 } 1909 }
1895 1910
1911 public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face)
1912 {
1913 return m_LSL_Functions.llClearLinkMedia(link, face);
1914 }
1915
1896 public void print(string str) 1916 public void print(string str)
1897 { 1917 {
1898 m_LSL_Functions.print(str); 1918 m_LSL_Functions.print(str);