Catch and display an error if CallLuaFunc throws.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user