diff options
author | Alan M Webb | 2009-09-16 10:33:42 -0400 |
---|---|---|
committer | dr scofield (aka dirk husemann) | 2009-09-16 17:07:53 +0200 |
commit | 9cbb8659858b5d460c178e128a0b2818ef460209 (patch) | |
tree | 31575f151a71cad3b912b508637e9c973ea9509f /OpenSim/Region/ScriptEngine | |
parent | This fix adds a stand-alone compilation environment (diff) | |
download | opensim-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.cs | 119 |
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; |