diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index dae7c00207..277c9ed618 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
///
@@ -98,9 +106,24 @@ namespace OpenSim.Region.Framework.Interfaces
/// For constants
void RegisterConstant(string cname, object value);
+
+ ///
+ /// Automatically register all constants on a region module by
+ /// checking for fields with .
+ ///
+ ///
+ void RegisterConstants(IRegionModuleBase target);
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
///