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 Eluant;
using OpenRA.Scripting;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
{
public sealed class CallLuaFunc : Activity, IDisposable
{
readonly ScriptContext context;
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)
{
if (function != null)
function.Call().Dispose();
try
{
if (function != null)
function.Call().Dispose();
}
catch (Exception ex)
{
context.FatalError(ex.Message);
}
Dispose();
return NextActivity;
@@ -40,7 +50,9 @@ namespace OpenRA.Mods.RA.Activities
public void Dispose()
{
if (function == null) return;
if (function == null)
return;
function.Dispose();
function = null;
}

View File

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