aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs2
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs15
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs5
5 files changed, 25 insertions, 9 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index 2183c1c..34a4bfc 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -54,7 +54,7 @@ namespace OpenSim.Region.Framework.Interfaces
54 Type[] LookupTypeSignature(string fname); 54 Type[] LookupTypeSignature(string fname);
55 Type LookupReturnType(string fname); 55 Type LookupReturnType(string fname);
56 56
57 object InvokeOperation(UUID scriptId, string fname, params object[] parms); 57 object InvokeOperation(UUID hostId, UUID scriptId, string fname, params object[] parms);
58 58
59 /// <summary> 59 /// <summary>
60 /// Send a link_message event to an in-world script 60 /// Send a link_message event to an in-world script
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 7fc8759..1e755ba 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -130,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
130 130
131 public void RegisterScriptInvocation(object target, string meth) 131 public void RegisterScriptInvocation(object target, string meth)
132 { 132 {
133 MethodInfo mi = target.GetType()..GetMethod(meth, 133 MethodInfo mi = target.GetType().GetMethod(meth,
134 BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); 134 BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
135 Type delegateType; 135 Type delegateType;
136 136
@@ -153,13 +153,13 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
153 lock (m_scriptInvocation) 153 lock (m_scriptInvocation)
154 { 154 {
155 ParameterInfo[] parameters = fcall.Method.GetParameters (); 155 ParameterInfo[] parameters = fcall.Method.GetParameters ();
156 if (parameters.Length == 0) // Must have one UUID param 156 if (parameters.Length < 2) // Must have two UUID params
157 return; 157 return;
158 158
159 // Hide the first parameter 159 // Hide the first two parameters
160 Type[] parmTypes = new Type[parameters.Length - 1]; 160 Type[] parmTypes = new Type[parameters.Length - 2];
161 for (int i = 1 ; i < parameters.Length ; i++) 161 for (int i = 2 ; i < parameters.Length ; i++)
162 parmTypes[i - 1] = parameters[i].ParameterType; 162 parmTypes[i - 2] = parameters[i].ParameterType;
163 m_scriptInvocation[fcall.Method.Name] = new ScriptInvocationData(fcall.Method.Name, fcall, parmTypes, fcall.Method.ReturnType); 163 m_scriptInvocation[fcall.Method.Name] = new ScriptInvocationData(fcall.Method.Name, fcall, parmTypes, fcall.Method.ReturnType);
164 } 164 }
165 } 165 }
@@ -239,9 +239,10 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
239 return null; 239 return null;
240 } 240 }
241 241
242 public object InvokeOperation(UUID scriptid, string fname, params object[] parms) 242 public object InvokeOperation(UUID hostid, UUID scriptid, string fname, params object[] parms)
243 { 243 {
244 List<object> olist = new List<object>(); 244 List<object> olist = new List<object>();
245 olist.Add(hostid);
245 olist.Add(scriptid); 246 olist.Add(scriptid);
246 foreach (object o in parms) 247 foreach (object o in parms)
247 olist.Add(o); 248 olist.Add(o);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
index 1bcbcd3..7c07e15 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
@@ -122,6 +122,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
122 /// <param name="fname">The name of the function to invoke</param> 122 /// <param name="fname">The name of the function to invoke</param>
123 /// <param name="parms">List of parameters</param> 123 /// <param name="parms">List of parameters</param>
124 /// <returns>string result of the invocation</returns> 124 /// <returns>string result of the invocation</returns>
125 public void modInvokeN(string fname, params object[] parms)
126 {
127 Type returntype = m_comms.LookupReturnType(fname);
128 if (returntype != typeof(string))
129 MODError(String.Format("return type mismatch for {0}",fname));
130
131 modInvoke(fname,parms);
132 }
133
125 public LSL_String modInvokeS(string fname, params object[] parms) 134 public LSL_String modInvokeS(string fname, params object[] parms)
126 { 135 {
127 Type returntype = m_comms.LookupReturnType(fname); 136 Type returntype = m_comms.LookupReturnType(fname);
@@ -243,7 +252,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
243 // non-null but don't trust it completely 252 // non-null but don't trust it completely
244 try 253 try
245 { 254 {
246 object result = m_comms.InvokeOperation(m_itemID,fname,convertedParms); 255 object result = m_comms.InvokeOperation(m_host.UUID, m_itemID, fname, convertedParms);
247 if (result != null) 256 if (result != null)
248 return result; 257 return result;
249 258
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
index d258f76..aa78aaa 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
@@ -41,6 +41,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
41 public interface IMOD_Api 41 public interface IMOD_Api
42 { 42 {
43 // Invocation functions 43 // Invocation functions
44 void modInvokeN(string fname, params object[] parms);
44 LSL_String modInvokeS(string fname, params object[] parms); 45 LSL_String modInvokeS(string fname, params object[] parms);
45 LSL_Integer modInvokeI(string fname, params object[] parms); 46 LSL_Integer modInvokeI(string fname, params object[] parms);
46 LSL_Float modInvokeF(string fname, params object[] parms); 47 LSL_Float modInvokeF(string fname, params object[] parms);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
index e7a4b2b..1c47138 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
@@ -62,6 +62,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
62 m_MOD_Functions = (IMOD_Api)api; 62 m_MOD_Functions = (IMOD_Api)api;
63 } 63 }
64 64
65 public void modInvokeN(string fname, params object[] parms)
66 {
67 m_MOD_Functions.modInvokeN(fname, parms);
68 }
69
65 public LSL_String modInvokeS(string fname, params object[] parms) 70 public LSL_String modInvokeS(string fname, params object[] parms)
66 { 71 {
67 return m_MOD_Functions.modInvokeS(fname, parms); 72 return m_MOD_Functions.modInvokeS(fname, parms);