diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 5bade25..595dd8a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2470,8 +2470,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2470 | 2470 | ||
2471 | public LSL_Rotation llGetLocalRot() | 2471 | public LSL_Rotation llGetLocalRot() |
2472 | { | 2472 | { |
2473 | return GetPartLocalRot(m_host); | ||
2474 | } | ||
2475 | |||
2476 | private LSL_Rotation GetPartLocalRot(SceneObjectPart part) | ||
2477 | { | ||
2473 | m_host.AddScriptLPS(1); | 2478 | m_host.AddScriptLPS(1); |
2474 | Quaternion rot = m_host.RotationOffset; | 2479 | Quaternion rot = part.RotationOffset; |
2475 | return new LSL_Rotation(rot.X, rot.Y, rot.Z, rot.W); | 2480 | return new LSL_Rotation(rot.X, rot.Y, rot.Z, rot.W); |
2476 | } | 2481 | } |
2477 | 2482 | ||
@@ -8029,10 +8034,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8029 | 8034 | ||
8030 | LSL_Rotation localRot = ScriptBaseClass.ZERO_ROTATION; | 8035 | LSL_Rotation localRot = ScriptBaseClass.ZERO_ROTATION; |
8031 | LSL_Vector localPos = ScriptBaseClass.ZERO_VECTOR; | 8036 | LSL_Vector localPos = ScriptBaseClass.ZERO_VECTOR; |
8032 | if (llGetLinkNumber() > 1) | 8037 | if (part.LinkNum > 1) |
8033 | { | 8038 | { |
8034 | localRot = llGetLocalRot(); | 8039 | localRot = GetPartLocalRot(part); |
8035 | localPos = llGetLocalPos(); | 8040 | localPos = GetPartLocalPos(part); |
8036 | } | 8041 | } |
8037 | 8042 | ||
8038 | v -= localPos; | 8043 | v -= localPos; |
@@ -8054,17 +8059,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8054 | if (remain < 1) | 8059 | if (remain < 1) |
8055 | return; | 8060 | return; |
8056 | 8061 | ||
8062 | LSL_Rotation r; | ||
8063 | r = rules.GetQuaternionItem(idx++); | ||
8064 | |||
8065 | SceneObjectPart part = World.GetSceneObjectPart(av.ParentID); | ||
8066 | if (part == null) | ||
8067 | break; | ||
8068 | |||
8057 | LSL_Rotation localRot = ScriptBaseClass.ZERO_ROTATION; | 8069 | LSL_Rotation localRot = ScriptBaseClass.ZERO_ROTATION; |
8058 | LSL_Vector localPos = ScriptBaseClass.ZERO_VECTOR; | 8070 | LSL_Vector localPos = ScriptBaseClass.ZERO_VECTOR; |
8059 | 8071 | ||
8060 | if (llGetLinkNumber() > 1) | 8072 | if (part.LinkNum > 1) |
8061 | { | 8073 | localRot = GetPartLocalRot(part); |
8062 | localRot = llGetLocalRot(); | ||
8063 | localPos = llGetLocalPos(); | ||
8064 | } | ||
8065 | 8074 | ||
8066 | LSL_Rotation r; | ||
8067 | r = rules.GetQuaternionItem(idx++); | ||
8068 | r = r * llGetRootRotation() / localRot; | 8075 | r = r * llGetRootRotation() / localRot; |
8069 | av.Rotation = new Quaternion((float)r.x, (float)r.y, (float)r.z, (float)r.s); | 8076 | av.Rotation = new Quaternion((float)r.x, (float)r.y, (float)r.z, (float)r.s); |
8070 | av.SendAvatarDataToAllAgents(); | 8077 | av.SendAvatarDataToAllAgents(); |