aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs46
1 files changed, 32 insertions, 14 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 5316d08..61e8a28 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -7701,7 +7701,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7701 { 7701 {
7702 m_host.AddScriptLPS(1); 7702 m_host.AddScriptLPS(1);
7703 7703
7704 setLinkPrimParams(ScriptBaseClass.LINK_THIS, rules); 7704 setLinkPrimParams(ScriptBaseClass.LINK_THIS, rules, "llSetPrimitiveParams");
7705 7705
7706 ScriptSleep(200); 7706 ScriptSleep(200);
7707 } 7707 }
@@ -7710,10 +7710,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7710 { 7710 {
7711 m_host.AddScriptLPS(1); 7711 m_host.AddScriptLPS(1);
7712 7712
7713 setLinkPrimParams(linknumber, rules); 7713 setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast");
7714
7715 ScriptSleep(200);
7714 } 7716 }
7715 7717
7716 private void setLinkPrimParams(int linknumber, LSL_List rules) 7718 private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc)
7717 { 7719 {
7718 List<object> parts = new List<object>(); 7720 List<object> parts = new List<object>();
7719 List<SceneObjectPart> prims = GetLinkParts(linknumber); 7721 List<SceneObjectPart> prims = GetLinkParts(linknumber);
@@ -7724,15 +7726,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7724 parts.Add(p); 7726 parts.Add(p);
7725 7727
7726 LSL_List remaining = null; 7728 LSL_List remaining = null;
7729 uint rulesParsed = 0;
7727 7730
7728 if (parts.Count > 0) 7731 if (parts.Count > 0)
7729 { 7732 {
7730 foreach (object part in parts) 7733 foreach (object part in parts)
7731 { 7734 {
7732 if (part is SceneObjectPart) 7735 if (part is SceneObjectPart)
7733 remaining = SetPrimParams((SceneObjectPart)part, rules); 7736 remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed);
7734 else 7737 else
7735 remaining = SetPrimParams((ScenePresence)part, rules); 7738 remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed);
7736 } 7739 }
7737 7740
7738 while ((object)remaining != null && remaining.Length > 2) 7741 while ((object)remaining != null && remaining.Length > 2)
@@ -7750,9 +7753,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7750 foreach (object part in parts) 7753 foreach (object part in parts)
7751 { 7754 {
7752 if (part is SceneObjectPart) 7755 if (part is SceneObjectPart)
7753 remaining = SetPrimParams((SceneObjectPart)part, rules); 7756 remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed);
7754 else 7757 else
7755 remaining = SetPrimParams((ScenePresence)part, rules); 7758 remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed);
7756 } 7759 }
7757 } 7760 }
7758 } 7761 }
@@ -7790,6 +7793,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7790 7793
7791 public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) 7794 public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules)
7792 { 7795 {
7796 setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParams");
7793 llSetLinkPrimitiveParamsFast(linknumber, rules); 7797 llSetLinkPrimitiveParamsFast(linknumber, rules);
7794 ScriptSleep(200); 7798 ScriptSleep(200);
7795 } 7799 }
@@ -7817,12 +7821,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7817 return new Vector3((float)x, (float)y, (float)z); 7821 return new Vector3((float)x, (float)y, (float)z);
7818 } 7822 }
7819 7823
7820 protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules) 7824 protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed)
7821 { 7825 {
7822 if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) 7826 if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted)
7823 return null; 7827 return null;
7824 7828
7825 int idx = 0; 7829 int idx = 0;
7830 int idxStart = 0;
7826 7831
7827 SceneObjectGroup parentgrp = part.ParentGroup; 7832 SceneObjectGroup parentgrp = part.ParentGroup;
7828 7833
@@ -7833,9 +7838,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7833 { 7838 {
7834 while (idx < rules.Length) 7839 while (idx < rules.Length)
7835 { 7840 {
7841 ++rulesParsed;
7836 int code = rules.GetLSLIntegerItem(idx++); 7842 int code = rules.GetLSLIntegerItem(idx++);
7837 7843
7838 int remain = rules.Length - idx; 7844 int remain = rules.Length - idx;
7845 idxStart = idx;
7839 7846
7840 int face; 7847 int face;
7841 LSL_Vector v; 7848 LSL_Vector v;
@@ -8243,7 +8250,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8243 } 8250 }
8244 catch (InvalidCastException e) 8251 catch (InvalidCastException e)
8245 { 8252 {
8246 ShoutError(e.Message); 8253 ShoutError(string.Format(
8254 "{0} error running rule #{1}: arg #{2} ",
8255 originFunc, rulesParsed, idx - idxStart) + e.Message);
8247 } 8256 }
8248 finally 8257 finally
8249 { 8258 {
@@ -11660,7 +11669,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11660 return tid.ToString(); 11669 return tid.ToString();
11661 } 11670 }
11662 11671
11663 public void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) 11672 public void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc)
11664 { 11673 {
11665 SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); 11674 SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim));
11666 if (obj == null) 11675 if (obj == null)
@@ -11669,14 +11678,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
11669 if (obj.OwnerID != m_host.OwnerID) 11678 if (obj.OwnerID != m_host.OwnerID)
11670 return; 11679 return;
11671 11680
11672 LSL_List remaining = SetPrimParams(obj, rules); 11681 uint rulesParsed = 0;
11682 LSL_List remaining = SetPrimParams(obj, rules, originFunc, ref rulesParsed);
11673 11683
11674 while ((object)remaining != null && remaining.Length > 2) 11684 while ((object)remaining != null && remaining.Length > 2)
11675 { 11685 {
11676 LSL_Integer newLink = remaining.GetLSLIntegerItem(0); 11686 LSL_Integer newLink = remaining.GetLSLIntegerItem(0);
11677 LSL_List newrules = remaining.GetSublist(1, -1); 11687 LSL_List newrules = remaining.GetSublist(1, -1);
11678 foreach(SceneObjectPart part in GetLinkParts(obj, newLink)){ 11688 foreach(SceneObjectPart part in GetLinkParts(obj, newLink)){
11679 remaining = SetPrimParams(part, newrules); 11689 remaining = SetPrimParams(part, newrules, originFunc, ref rulesParsed);
11680 } 11690 }
11681 } 11691 }
11682 } 11692 }
@@ -12640,11 +12650,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12640 } 12650 }
12641 } 12651 }
12642 12652
12643 protected LSL_List SetPrimParams(ScenePresence av, LSL_List rules) 12653 protected LSL_List SetPrimParams(ScenePresence av, LSL_List rules, string originFunc, ref uint rulesParsed)
12644 { 12654 {
12645 //This is a special version of SetPrimParams to deal with avatars which are sat on the linkset. 12655 //This is a special version of SetPrimParams to deal with avatars which are sat on the linkset.
12646 12656
12647 int idx = 0; 12657 int idx = 0;
12658 int idxStart = 0;
12648 12659
12649 bool positionChanged = false; 12660 bool positionChanged = false;
12650 Vector3 finalPos = Vector3.Zero; 12661 Vector3 finalPos = Vector3.Zero;
@@ -12653,9 +12664,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12653 { 12664 {
12654 while (idx < rules.Length) 12665 while (idx < rules.Length)
12655 { 12666 {
12667 ++rulesParsed;
12656 int code = rules.GetLSLIntegerItem(idx++); 12668 int code = rules.GetLSLIntegerItem(idx++);
12657 12669
12658 int remain = rules.Length - idx; 12670 int remain = rules.Length - idx;
12671 idxStart = idx;
12659 12672
12660 switch (code) 12673 switch (code)
12661 { 12674 {
@@ -12809,7 +12822,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12809 } 12822 }
12810 } 12823 }
12811 } 12824 }
12812 12825 catch (InvalidCastException e)
12826 {
12827 ShoutError(string.Format(
12828 "{0} error running rule #{1}: arg #{2} ",
12829 originFunc, rulesParsed, idx - idxStart) + e.Message);
12830 }
12813 finally 12831 finally
12814 { 12832 {
12815 if (positionChanged) 12833 if (positionChanged)