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/LSL_Api.cs48
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs8
2 files changed, 54 insertions, 2 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 91b49cd..ba22201 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -10084,6 +10084,53 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10084 part.UpdateSlice((float)slice.x, (float)slice.y); 10084 part.UpdateSlice((float)slice.x, (float)slice.y);
10085 break; 10085 break;
10086 10086
10087 case ScriptBaseClass.PRIM_SIT_TARGET:
10088 if (remain < 3)
10089 return new LSL_List();
10090
10091 int active;
10092 try
10093 {
10094 active = rules.GetLSLIntegerItem(idx++);
10095 }
10096 catch(InvalidCastException)
10097 {
10098 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SIT_TARGET: arg #{1} - parameter 1 must be integer", rulesParsed, idx - idxStart - 1));
10099 return new LSL_List();
10100 }
10101 LSL_Vector offset;
10102 try
10103 {
10104 offset = rules.GetVector3Item(idx++);
10105 }
10106 catch(InvalidCastException)
10107 {
10108 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SIT_TARGET: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1));
10109 return new LSL_List();
10110 }
10111 LSL_Rotation sitrot;
10112 try
10113 {
10114 sitrot = rules.GetQuaternionItem(idx++);
10115 }
10116 catch(InvalidCastException)
10117 {
10118 Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SIT_TARGET: arg #{1} - parameter 3 must be rotation", rulesParsed, idx - idxStart - 1));
10119 return new LSL_List();
10120 }
10121
10122 // not SL compatible since we don't have a independent flag to control active target but use the values of offset and rotation
10123 if(active == 1)
10124 {
10125 if(offset.x == 0 && offset.y == 0 && offset.z == 0 && sitrot.s == 1.0)
10126 offset.z = 1e-5f; // hack
10127 SitTarget(part,offset,sitrot);
10128 }
10129 else if(active == 0)
10130 SitTarget(part, Vector3.Zero , Quaternion.Identity);
10131
10132 break;
10133
10087 case ScriptBaseClass.PRIM_LINK_TARGET: 10134 case ScriptBaseClass.PRIM_LINK_TARGET:
10088 if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. 10135 if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless.
10089 return new LSL_List(); 10136 return new LSL_List();
@@ -15932,6 +15979,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
15932 case (int)ScriptBaseClass.PRIM_TEXT: 15979 case (int)ScriptBaseClass.PRIM_TEXT:
15933 case (int)ScriptBaseClass.PRIM_BUMP_SHINY: 15980 case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
15934 case (int)ScriptBaseClass.PRIM_OMEGA: 15981 case (int)ScriptBaseClass.PRIM_OMEGA:
15982 case (int)ScriptBaseClass.PRIM_SIT_TARGET:
15935 if (remain < 3) 15983 if (remain < 3)
15936 return new LSL_List(); 15984 return new LSL_List();
15937 idx += 3; 15985 idx += 3;
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 9fb1e2c..c36e7c6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -704,12 +704,16 @@ namespace OpenSim.Region.ScriptEngine.Shared
704 { 704 {
705 if (Data[itemIndex] is LSL_Types.Quaternion) 705 if (Data[itemIndex] is LSL_Types.Quaternion)
706 { 706 {
707 return (LSL_Types.Quaternion)Data[itemIndex]; 707 LSL_Types.Quaternion q = (LSL_Types.Quaternion)Data[itemIndex];
708 q.Normalize();
709 return q;
708 } 710 }
709 else if(Data[itemIndex] is OpenMetaverse.Quaternion) 711 else if(Data[itemIndex] is OpenMetaverse.Quaternion)
710 { 712 {
711 return new LSL_Types.Quaternion( 713 LSL_Types.Quaternion q = new LSL_Types.Quaternion(
712 (OpenMetaverse.Quaternion)Data[itemIndex]); 714 (OpenMetaverse.Quaternion)Data[itemIndex]);
715 q.Normalize();
716 return q;
713 } 717 }
714 else 718 else
715 { 719 {