public bool ExecuteFunction(ScriptInvocation invocation, params object[] parameters) { if (Disabled) { return(false); } if (!Processor.Engine.Operations.IsCallable(invocation.Function)) { return(false); } if (invocation.Invoker is User) { Scope.SetVariable("invoker", new HybrasylUser(invocation.Invoker as User)); } else { Scope.SetVariable("invoker", new HybrasylWorldObject(invocation.Invoker as WorldObject)); } if (invocation.Associate is WorldObject) { Scope.SetVariable("npc", new HybrasylWorldObject(invocation.Associate as WorldObject)); } try { var ret = Processor.Engine.Operations.Invoke(invocation.Function, parameters); if (ret is bool) { return((bool)ret); } } catch (Exception e) { var pythonFrames = PythonOps.GetDynamicStackFrames(e); var exceptionString = Processor.Engine.GetService <ExceptionOperations>().FormatException(e); Logger.ErrorFormat("script {0} encountered error, Python stack follows", Path); Logger.ErrorFormat("{0}", exceptionString); Logger.ErrorFormat("script {0} now disabled", Path); LastRuntimeError = exceptionString; return(false); } return(true); }
public bool ExecuteFunction(ScriptInvocation invocation, params object[] parameters) { if (Disabled) return false; if (Processor.Engine.Operations.IsCallable(invocation.Function)) { if (invocation.Invoker is User) { Scope.SetVariable("invoker", new HybrasylUser(invocation.Invoker as User)); } else { Scope.SetVariable("invoker", new HybrasylWorldObject(invocation.Invoker as WorldObject)); } if (invocation.Associate is WorldObject) { Scope.SetVariable("npc", new HybrasylWorldObject(invocation.Associate as WorldObject)); } try { var ret = Processor.Engine.Operations.Invoke(invocation.Function, parameters); if (ret is bool) return (bool)ret; } catch (Exception e) { var pythonFrames = PythonOps.GetDynamicStackFrames(e); var exceptionString = Processor.Engine.GetService<ExceptionOperations>().FormatException(e); Logger.ErrorFormat("script {0} encountered error, Python stack follows", Path); Logger.ErrorFormat("{0}", exceptionString); Logger.ErrorFormat("script {0} now disabled", Path); LastRuntimeError = exceptionString; return false; } return true; } return false; }