diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index dae7c00207..93930ce43b 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -74,6 +74,14 @@ namespace OpenSim.Region.Framework.Interfaces
///
void RegisterScriptInvocation(Type target, string[] methods);
+ ///
+ /// Automatically register script invocations by checking for methods
+ /// with . Should only check
+ /// public methods.
+ ///
+ ///
+ void RegisterScriptInvocations(IRegionModuleBase target);
+
///
/// Returns an array of all registered script calls
///
@@ -96,11 +104,43 @@ namespace OpenSim.Region.Framework.Interfaces
///
void DispatchReply(UUID scriptId, int code, string text, string key);
- /// For constants
+ ///
+ /// Operation to for a region module to register a constant to be used
+ /// by the script engine
+ ///
+ ///
+ /// The name of the constant. LSL convention is for constant names to
+ /// be uppercase.
+ ///
+ ///
+ /// The value of the constant. Should be of a type that can be
+ /// converted to one of
+ ///
void RegisterConstant(string cname, object value);
+
+ ///
+ /// Automatically register all constants on a region module by
+ /// checking for fields with .
+ ///
+ ///
+ void RegisterConstants(IRegionModuleBase target);
+
+ ///
+ /// Operation to check for a registered constant
+ ///
+ /// Name of constant
+ /// Value of constant or null if none found.
object LookupModConstant(string cname);
// For use ONLY by the script API
void RaiseEvent(UUID script, string id, string module, string command, string key);
}
+
+ [AttributeUsage(AttributeTargets.Method)]
+ public class ScriptInvocationAttribute : Attribute
+ { }
+
+ [AttributeUsage(AttributeTargets.Field)]
+ public class ScriptConstantAttribute : Attribute
+ { }
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 23cc633bfc..98396ff803 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -211,6 +211,23 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms
RegisterScriptInvocation(target, mi);
}
}
+
+ public void RegisterScriptInvocations(IRegionModuleBase target)
+ {
+ foreach(MethodInfo method in target.GetType().GetMethods(
+ BindingFlags.Public | BindingFlags.Instance |
+ BindingFlags.Static))
+ {
+ if(method.GetCustomAttributes(
+ typeof(ScriptInvocationAttribute), true).Any())
+ {
+ if(method.IsStatic)
+ RegisterScriptInvocation(target.GetType(), method);
+ else
+ RegisterScriptInvocation(target, method);
+ }
+ }
+ }
public Delegate[] GetScriptInvocationList()
{
@@ -313,6 +330,20 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms
}
}
+ public void RegisterConstants(IRegionModuleBase target)
+ {
+ foreach (FieldInfo field in target.GetType().GetFields(
+ BindingFlags.Public | BindingFlags.Static |
+ BindingFlags.Instance))
+ {
+ if (field.GetCustomAttributes(
+ typeof(ScriptConstantAttribute), true).Any())
+ {
+ RegisterConstant(field.Name, field.GetValue(target));
+ }
+ }
+ }
+
///
/// Operation to check for a registered constant
///