Catch and display an error if CallLuaFunc throws.

This commit is contained in:
Paul Chote
2014-10-25 14:59:00 +13:00
parent dd03ce02d3
commit 91854c52fa
2 changed files with 18 additions and 6 deletions

View File

@@ -10,23 +10,33 @@
using System; using System;
using Eluant; using Eluant;
using OpenRA.Scripting;
using OpenRA.Traits; using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
public sealed class CallLuaFunc : Activity, IDisposable public sealed class CallLuaFunc : Activity, IDisposable
{ {
readonly ScriptContext context;
LuaFunction function; LuaFunction function;
public CallLuaFunc(LuaFunction func) public CallLuaFunc(LuaFunction function, ScriptContext context)
{ {
function = (LuaFunction)func.CopyReference(); this.function = (LuaFunction)function.CopyReference();
this.context = context;
} }
public override Activity Tick(Actor self) public override Activity Tick(Actor self)
{ {
if (function != null) try
function.Call().Dispose(); {
if (function != null)
function.Call().Dispose();
}
catch (Exception ex)
{
context.FatalError(ex.Message);
}
Dispose(); Dispose();
return NextActivity; return NextActivity;
@@ -40,7 +50,9 @@ namespace OpenRA.Mods.RA.Activities
public void Dispose() public void Dispose()
{ {
if (function == null) return; if (function == null)
return;
function.Dispose(); function.Dispose();
function = null; function = null;
} }

View File

@@ -114,7 +114,7 @@ namespace OpenRA.Mods.RA.Scripting
[Desc("Run an arbitrary Lua function.")] [Desc("Run an arbitrary Lua function.")]
public void CallFunc(LuaFunction func) public void CallFunc(LuaFunction func)
{ {
self.QueueActivity(new CallLuaFunc(func)); self.QueueActivity(new CallLuaFunc(func, context));
} }
[ScriptActorPropertyActivity] [ScriptActorPropertyActivity]