aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs52
1 files changed, 46 insertions, 6 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 667aa93..d230b24 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -7887,6 +7887,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7887 } 7887 }
7888 break; 7888 break;
7889 7889
7890 case (int)ScriptBaseClass.PRIM_POS_LOCAL:
7891 {
7892 if (remain < 1)
7893 return;
7894 LSL_Vector v;
7895 v = rules.GetVector3Item(idx++);
7896
7897 SceneObjectPart part = World.GetSceneObjectPart(av.ParentID);
7898 if (part == null)
7899 break;
7900
7901 LSL_Vector sitOffset = (llRot2Up(new LSL_Rotation(av.Rotation.X, av.Rotation.Y, av.Rotation.Z, av.Rotation.W)) * av.Appearance.AvatarHeight * 0.02638f);
7902
7903 v += 2 * sitOffset;
7904
7905 av.OffsetPosition = new Vector3((float)v.x, (float)v.y, (float)v.z);
7906 av.SendAvatarDataToAllAgents();
7907
7908 }
7909 break;
7910
7890 case (int)ScriptBaseClass.PRIM_ROTATION: 7911 case (int)ScriptBaseClass.PRIM_ROTATION:
7891 { 7912 {
7892 if (remain < 1) 7913 if (remain < 1)
@@ -7907,6 +7928,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7907 av.SendAvatarDataToAllAgents(); 7928 av.SendAvatarDataToAllAgents();
7908 } 7929 }
7909 break; 7930 break;
7931
7932 case (int)ScriptBaseClass.PRIM_ROT_LOCAL:
7933 {
7934 if (remain < 1)
7935 return;
7936
7937 LSL_Rotation r;
7938 r = rules.GetQuaternionItem(idx++);
7939 av.Rotation = new Quaternion((float)r.x, (float)r.y, (float)r.z, (float)r.s);
7940 av.SendAvatarDataToAllAgents();
7941 }
7942 break;
7943
7910 } 7944 }
7911 } 7945 }
7912 } 7946 }
@@ -7966,6 +8000,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7966 else 8000 else
7967 { 8001 {
7968 // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. 8002 // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask.
8003 // sounds like sl bug that we need to replicate
7969 SceneObjectPart rootPart = part.ParentGroup.RootPart; 8004 SceneObjectPart rootPart = part.ParentGroup.RootPart;
7970 SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q)); 8005 SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q));
7971 } 8006 }
@@ -8335,6 +8370,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8335 } 8370 }
8336 finally 8371 finally
8337 { 8372 {
8373/*
8338 if (positionChanged) 8374 if (positionChanged)
8339 { 8375 {
8340 if (part.ParentGroup.RootPart == part) 8376 if (part.ParentGroup.RootPart == part)
@@ -8352,23 +8388,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8352 parent.ScheduleGroupForTerseUpdate(); 8388 parent.ScheduleGroupForTerseUpdate();
8353 } 8389 }
8354 } 8390 }
8391 */
8355 } 8392 }
8356 8393
8357 if (positionChanged) 8394 if (positionChanged)
8358 { 8395 {
8359 if (part.ParentGroup.RootPart == part) 8396 SceneObjectGroup parentgrp = part.ParentGroup;
8397 if (parentgrp == null)
8398 return;
8399
8400 if (parentgrp.RootPart == part)
8360 { 8401 {
8361 SceneObjectGroup parent = part.ParentGroup; 8402
8362 Util.FireAndForget(delegate(object x) { 8403 Util.FireAndForget(delegate(object x) {
8363 parent.UpdateGroupPosition(new Vector3((float)currentPosition.x, (float)currentPosition.y, (float)currentPosition.z)); 8404 parentgrp.UpdateGroupPosition(new Vector3((float)currentPosition.x, (float)currentPosition.y, (float)currentPosition.z));
8364 }); 8405 });
8365 } 8406 }
8366 else 8407 else
8367 { 8408 {
8368 part.OffsetPosition = new Vector3((float)currentPosition.x, (float)currentPosition.y, (float)currentPosition.z); 8409 part.OffsetPosition = new Vector3((float)currentPosition.x, (float)currentPosition.y, (float)currentPosition.z);
8369 SceneObjectGroup parent = part.ParentGroup; 8410 parentgrp.HasGroupChanged = true;
8370 parent.HasGroupChanged = true; 8411 parentgrp.ScheduleGroupForTerseUpdate();
8371 parent.ScheduleGroupForTerseUpdate();
8372 } 8412 }
8373 } 8413 }
8374 } 8414 }