From d547c97c801e347c5b68dd546cdecfd067808ece Mon Sep 17 00:00:00 2001 From: peelz Date: Sat, 20 Aug 2022 10:56:50 -0400 Subject: [PATCH] Fix Hook.Add compatibility with C# mods --- .../SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs | 9 +++++++-- .../BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs | 10 +++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs index 5f4a3f1ad..10b8a34b0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs @@ -409,8 +409,13 @@ namespace Barotrauma () => { if (getValidArgs == null) return null; - return getValidArgs().ToObject(); - }, isCheat); + var validArgs = getValidArgs(); + if (validArgs is DynValue luaValue) + { + return luaValue.ToObject(); + } + return (string[][])validArgs; + }, isCheat); luaAddedCommand.Add(cmd); DebugConsole.Commands.Add(cmd); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs index 2101af8b8..08729c8f2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs @@ -18,7 +18,7 @@ using Sigil.NonGeneric; namespace Barotrauma { public delegate void LuaCsAction(params object[] args); - public delegate DynValue LuaCsFunc(params object[] args); + public delegate object LuaCsFunc(params object[] args); public delegate DynValue LuaCsPatchFunc(object instance, LuaCsHook.ParameterTable ptable); internal static class SigilExtensions @@ -777,9 +777,13 @@ namespace Barotrauma var result = tuple.Item1.func(args); // TODO(BREAKING): change this to !result.IsVoid() - if (result != null && !result.IsNil()) + if (result is DynValue luaResult && !luaResult.IsNil()) { - lastResult = result.ToObject(); + lastResult = luaResult.ToObject(); + } + else + { + lastResult = (T)result; } if (luaCs.PerformanceCounter.EnablePerformanceCounter)