aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
authorAlan M Webb2009-09-16 10:33:42 -0400
committerdr scofield (aka dirk husemann)2009-09-16 17:07:53 +0200
commit9cbb8659858b5d460c178e128a0b2818ef460209 (patch)
tree31575f151a71cad3b912b508637e9c973ea9509f /OpenSim/Region/ScriptEngine
parent This fix adds a stand-alone compilation environment (diff)
downloadopensim-SC-9cbb8659858b5d460c178e128a0b2818ef460209.zip
opensim-SC-9cbb8659858b5d460c178e128a0b2818ef460209.tar.gz
opensim-SC-9cbb8659858b5d460c178e128a0b2818ef460209.tar.bz2
opensim-SC-9cbb8659858b5d460c178e128a0b2818ef460209.tar.xz
This fix allows you to configure a script-to-console-log channel
association. Then, whenever there is an llSay to that channel, the message is directed to the OpenSim console log (and NOT forwarded to the client). This is a great way to capture scripting events to the log. To enable, add ScriptConsoleChannel = -xxx to the ScriptEngine parameters in the .ini file. Note that the message is written using Console.WriteLine rather than the rather more fragile log4net service. The console channel is also not subjected to the 1024 character limit imposed on regular say traffic. Signed-off-by: dr scofield (aka dirk husemann) <drscofield@xyzzyxyzzy.net>
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs119
1 files changed, 70 insertions, 49 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 633cca8..ba42678 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -81,10 +81,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
81 protected float m_MinTimerInterval = 0.5f; 81 protected float m_MinTimerInterval = 0.5f;
82 82
83 protected DateTime m_timer = DateTime.Now; 83 protected DateTime m_timer = DateTime.Now;
84 protected bool m_waitingForScriptAnswer=false; 84 protected bool m_waitingForScriptAnswer = false;
85 protected bool m_automaticLinkPermission=false; 85 protected bool m_automaticLinkPermission = false;
86 protected IMessageTransferModule m_TransferModule = null; 86 protected IMessageTransferModule m_TransferModule = null;
87 protected int m_notecardLineReadCharsMax = 255; 87 protected int m_notecardLineReadCharsMax = 255;
88 protected int m_scriptConsoleChannel = 0;
89 protected bool m_scriptConsoleChannelEnabled = false;
88 protected IUrlModule m_UrlModule = null; 90 protected IUrlModule m_UrlModule = null;
89 91
90 public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID) 92 public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
@@ -94,21 +96,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
94 m_localID = localID; 96 m_localID = localID;
95 m_itemID = itemID; 97 m_itemID = itemID;
96 98
97 m_ScriptDelayFactor = 99 m_ScriptDelayFactor = m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f);
98 m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f); 100 m_ScriptDistanceFactor = m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f);
99 m_ScriptDistanceFactor = 101 m_MinTimerInterval = m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.5f);
100 m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f); 102 m_automaticLinkPermission = m_ScriptEngine.Config.GetBoolean("AutomaticLinkPermission", false);
101 m_MinTimerInterval = 103 m_scriptConsoleChannel = m_ScriptEngine.Config.GetInt("ScriptConsoleChannel", 0);
102 m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.5f); 104 m_scriptConsoleChannelEnabled = (m_scriptConsoleChannel != 0);
103 m_automaticLinkPermission = 105 m_notecardLineReadCharsMax = m_ScriptEngine.Config.GetInt("NotecardLineReadCharsMax", 255);
104 m_ScriptEngine.Config.GetBoolean("AutomaticLinkPermission", false);
105 m_notecardLineReadCharsMax =
106 m_ScriptEngine.Config.GetInt("NotecardLineReadCharsMax", 255);
107 if (m_notecardLineReadCharsMax > 65535) 106 if (m_notecardLineReadCharsMax > 65535)
108 m_notecardLineReadCharsMax = 65535; 107 m_notecardLineReadCharsMax = 65535;
109 108
110 m_TransferModule = 109 m_TransferModule = m_ScriptEngine.World.RequestModuleInterface<IMessageTransferModule>();
111 m_ScriptEngine.World.RequestModuleInterface<IMessageTransferModule>();
112 m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>(); 110 m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>();
113 if (m_UrlModule != null) 111 if (m_UrlModule != null)
114 { 112 {
@@ -565,10 +563,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
565 double s2 = Math.Sin(v.y * 0.5); 563 double s2 = Math.Sin(v.y * 0.5);
566 double s3 = Math.Sin(v.z * 0.5); 564 double s3 = Math.Sin(v.z * 0.5);
567 565
568 x = s1*c2*c3+c1*s2*s3; 566 x = s1 * c2 * c3 + c1 * s2 * s3;
569 y = c1*s2*c3-s1*c2*s3; 567 y = c1 * s2 * c3 - s1 * c2 * s3;
570 z = s1*s2*c3+c1*c2*s3; 568 z = s1 * s2 * c3 + c1 * c2 * s3;
571 s = c1*c2*c3-s1*s2*s3; 569 s = c1 * c2 * c3 - s1 * s2 * s3;
572 570
573 return new LSL_Rotation(x, y, z, s); 571 return new LSL_Rotation(x, y, z, s);
574 } 572 }
@@ -742,14 +740,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
742 { 740 {
743 m_host.AddScriptLPS(1); 741 m_host.AddScriptLPS(1);
744 742
745 if (text.Length > 1023) 743 if (m_scriptConsoleChannelEnabled && (channelID == m_scriptConsoleChannel))
746 text = text.Substring(0, 1023); 744 {
745 Console.WriteLine(text);
746 }
747 else
748 {
749 if (text.Length > 1023)
750 text = text.Substring(0, 1023);
747 751
748 World.SimChat(Utils.StringToBytes(text), 752 World.SimChat(Utils.StringToBytes(text),
749 ChatTypeEnum.Say, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); 753 ChatTypeEnum.Say, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false);
750 754
751 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 755 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
752 wComm.DeliverMessage(ChatTypeEnum.Say, channelID, m_host.Name, m_host.UUID, text); 756 wComm.DeliverMessage(ChatTypeEnum.Say, channelID, m_host.Name, m_host.UUID, text);
757 }
753 } 758 }
754 759
755 public void llShout(int channelID, string text) 760 public void llShout(int channelID, string text)
@@ -6316,11 +6321,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6316 UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, UUID.Zero); 6321 UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, UUID.Zero);
6317 IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface<IXmlRpcRouter>(); 6322 IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface<IXmlRpcRouter>();
6318 if (xmlRpcRouter != null) 6323 if (xmlRpcRouter != null)
6319 xmlRpcRouter.RegisterNewReceiver(m_ScriptEngine.ScriptModule, channelID, m_host.UUID, m_itemID, "http://"+System.Environment.MachineName+":"+xmlrpcMod.Port.ToString()+"/"); 6324 xmlRpcRouter.RegisterNewReceiver(m_ScriptEngine.ScriptModule, channelID, m_host.UUID,
6320 object[] resobj = new object[] { new LSL_Integer(1), new LSL_String(channelID.ToString()), new LSL_String(UUID.Zero.ToString()), new LSL_String(String.Empty), new LSL_Integer(0), new LSL_String(String.Empty) }; 6325 m_itemID, String.Format("http://{0}:{1}/", System.Environment.MachineName,
6321 m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( 6326 xmlrpcMod.Port.ToString()));
6322 "remote_data", resobj, 6327 object[] resobj = new object[]
6323 new DetectParams[0])); 6328 {
6329 new LSL_Integer(1),
6330 new LSL_String(channelID.ToString()),
6331 new LSL_String(UUID.Zero.ToString()),
6332 new LSL_String(String.Empty),
6333 new LSL_Integer(0),
6334 new LSL_String(String.Empty)
6335 };
6336 m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams("remote_data", resobj,
6337 new DetectParams[0]));
6324 } 6338 }
6325 ConditionalScriptSleep(1000); 6339 ConditionalScriptSleep(1000);
6326 } 6340 }
@@ -6352,7 +6366,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6352 public LSL_String llMD5String(string src, int nonce) 6366 public LSL_String llMD5String(string src, int nonce)
6353 { 6367 {
6354 m_host.AddScriptLPS(1); 6368 m_host.AddScriptLPS(1);
6355 return Util.Md5Hash(src + ":" + nonce.ToString()); 6369 return Util.Md5Hash(String.Format("{0}:{1}", src, nonce.ToString()));
6356 } 6370 }
6357 6371
6358 public LSL_String llSHA1String(string src) 6372 public LSL_String llSHA1String(string src)
@@ -6729,12 +6743,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6729 // try to let this work as in SL... 6743 // try to let this work as in SL...
6730 if (part.ParentID == 0) 6744 if (part.ParentID == 0)
6731 { 6745 {
6732 // special case: If we are root, rotate complete SOG to new rotation 6746 // special case: If we are root, rotate
6747 // complete SOG to new rotation
6733 SetRot(part, Rot2Quaternion(q)); 6748 SetRot(part, Rot2Quaternion(q));
6734 } 6749 }
6735 else 6750 else
6736 { 6751 {
6737 // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. 6752 // we are a child. The rotation values
6753 // will be set to the one of root modified
6754 // by rot, as in SL. Don't ask.
6738 SceneObjectGroup group = part.ParentGroup; 6755 SceneObjectGroup group = part.ParentGroup;
6739 if (group != null) // a bit paranoid, maybe 6756 if (group != null) // a bit paranoid, maybe
6740 { 6757 {
@@ -6840,7 +6857,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6840 radiusoffset = (float)rules.GetLSLFloatItem(idx++); 6857 radiusoffset = (float)rules.GetLSLFloatItem(idx++);
6841 skew = (float)rules.GetLSLFloatItem(idx++); 6858 skew = (float)rules.GetLSLFloatItem(idx++);
6842 part.Shape.PathCurve = (byte)Extrusion.Curve1; 6859 part.Shape.PathCurve = (byte)Extrusion.Curve1;
6843 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 0); 6860 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b,
6861 revolutions, radiusoffset, skew, 0);
6844 break; 6862 break;
6845 6863
6846 case (int)ScriptBaseClass.PRIM_TYPE_TUBE: 6864 case (int)ScriptBaseClass.PRIM_TYPE_TUBE:
@@ -6859,7 +6877,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6859 radiusoffset = (float)rules.GetLSLFloatItem(idx++); 6877 radiusoffset = (float)rules.GetLSLFloatItem(idx++);
6860 skew = (float)rules.GetLSLFloatItem(idx++); 6878 skew = (float)rules.GetLSLFloatItem(idx++);
6861 part.Shape.PathCurve = (byte)Extrusion.Curve1; 6879 part.Shape.PathCurve = (byte)Extrusion.Curve1;
6862 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 1); 6880 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b,
6881 revolutions, radiusoffset, skew, 1);
6863 break; 6882 break;
6864 6883
6865 case (int)ScriptBaseClass.PRIM_TYPE_RING: 6884 case (int)ScriptBaseClass.PRIM_TYPE_RING:
@@ -6878,7 +6897,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6878 radiusoffset = (float)rules.GetLSLFloatItem(idx++); 6897 radiusoffset = (float)rules.GetLSLFloatItem(idx++);
6879 skew = (float)rules.GetLSLFloatItem(idx++); 6898 skew = (float)rules.GetLSLFloatItem(idx++);
6880 part.Shape.PathCurve = (byte)Extrusion.Curve1; 6899 part.Shape.PathCurve = (byte)Extrusion.Curve1;
6881 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 3); 6900 SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b,
6901 revolutions, radiusoffset, skew, 3);
6882 break; 6902 break;
6883 6903
6884 case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: 6904 case (int)ScriptBaseClass.PRIM_TYPE_SCULPT:
@@ -7125,7 +7145,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7125 public LSL_Vector llGetRootPosition() 7145 public LSL_Vector llGetRootPosition()
7126 { 7146 {
7127 m_host.AddScriptLPS(1); 7147 m_host.AddScriptLPS(1);
7128 return new LSL_Vector(m_host.ParentGroup.AbsolutePosition.X, m_host.ParentGroup.AbsolutePosition.Y, m_host.ParentGroup.AbsolutePosition.Z); 7148 return new LSL_Vector(m_host.ParentGroup.AbsolutePosition.X, m_host.ParentGroup.AbsolutePosition.Y,
7149 m_host.ParentGroup.AbsolutePosition.Z);
7129 } 7150 }
7130 7151
7131 /// <summary> 7152 /// <summary>
@@ -7763,39 +7784,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7763 // -1 == invalid 7784 // -1 == invalid
7764 // 0 == padding 7785 // 0 == padding
7765 7786
7766 if ((digit=c2itable[str[0]])<=0) 7787 if ((digit = c2itable[str[0]]) <= 0)
7767 { 7788 {
7768 return digit<0?(int)0:number; 7789 return digit < 0 ? (int)0 : number;
7769 } 7790 }
7770 number += --digit<<26; 7791 number += --digit<<26;
7771 7792
7772 if ((digit=c2itable[str[1]])<=0) 7793 if ((digit = c2itable[str[1]]) <= 0)
7773 { 7794 {
7774 return digit<0?(int)0:number; 7795 return digit < 0 ? (int)0 : number;
7775 } 7796 }
7776 number += --digit<<20; 7797 number += --digit<<20;
7777 7798
7778 if ((digit=c2itable[str[2]])<=0) 7799 if ((digit = c2itable[str[2]]) <= 0)
7779 { 7800 {
7780 return digit<0?(int)0:number; 7801 return digit < 0 ? (int)0 : number;
7781 } 7802 }
7782 number += --digit<<14; 7803 number += --digit<<14;
7783 7804
7784 if ((digit=c2itable[str[3]])<=0) 7805 if ((digit = c2itable[str[3]]) <= 0)
7785 { 7806 {
7786 return digit<0?(int)0:number; 7807 return digit < 0 ? (int)0 : number;
7787 } 7808 }
7788 number += --digit<<8; 7809 number += --digit<<8;
7789 7810
7790 if ((digit=c2itable[str[4]])<=0) 7811 if ((digit = c2itable[str[4]]) <= 0)
7791 { 7812 {
7792 return digit<0?(int)0:number; 7813 return digit < 0 ? (int)0 : number;
7793 } 7814 }
7794 number += --digit<<2; 7815 number += --digit<<2;
7795 7816
7796 if ((digit=c2itable[str[5]])<=0) 7817 if ((digit = c2itable[str[5]]) <= 0)
7797 { 7818 {
7798 return digit<0?(int)0:number; 7819 return digit < 0 ? (int)0 : number;
7799 } 7820 }
7800 number += --digit>>4; 7821 number += --digit>>4;
7801 7822
@@ -7913,7 +7934,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7913 if (active[j]) 7934 if (active[j])
7914 { 7935 {
7915 // scan all of the markers 7936 // scan all of the markers
7916 if ((offset[j] = src.IndexOf(separray[j].ToString(),beginning)) == -1) 7937 if ((offset[j] = src.IndexOf(separray[j].ToString(), beginning)) == -1)
7917 { 7938 {
7918 // not present at all 7939 // not present at all
7919 active[j] = false; 7940 active[j] = false;