From d547c97c801e347c5b68dd546cdecfd067808ece Mon Sep 17 00:00:00 2001 From: peelz Date: Sat, 20 Aug 2022 10:56:50 -0400 Subject: [PATCH 1/2] 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) From 13d0510d37ac4da608353de81667870ec04303de Mon Sep 17 00:00:00 2001 From: peelz Date: Sat, 20 Aug 2022 11:17:44 -0400 Subject: [PATCH 2/2] Make lua converters private --- ...uaCustomConverters.cs => LuaConverters.cs} | 22 +++++++------------ .../SharedSource/LuaCs/LuaCsSetup.cs | 2 +- 2 files changed, 9 insertions(+), 15 deletions(-) rename Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/{LuaCustomConverters.cs => LuaConverters.cs} (95%) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaCustomConverters.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs similarity index 95% rename from Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaCustomConverters.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs index da62d5785..74190eb7b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaCustomConverters.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs @@ -6,16 +6,10 @@ using LuaCsCompatPatchFunc = Barotrauma.LuaCsPatch; namespace Barotrauma { - public delegate DynValue CallLuaFunctionFunc(object function, params object[] args); - - internal static class LuaCustomConverters + partial class LuaCsSetup { - private static CallLuaFunctionFunc CallLuaFunction; - - public static void Initialize(CallLuaFunctionFunc callLuaFunction) + private void RegisterLuaConverters() { - CallLuaFunction = callLuaFunction; - RegisterAction(); RegisterAction(); RegisterAction(); @@ -194,7 +188,7 @@ namespace Barotrauma : throw new ScriptRuntimeException("use Double(value) to pass primitive type 'double' to C#")); } - public static void RegisterAction() + private void RegisterAction() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Action), v => { @@ -209,7 +203,7 @@ namespace Barotrauma }); } - public static void RegisterAction() + private void RegisterAction() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Action), v => { @@ -224,7 +218,7 @@ namespace Barotrauma }); } - public static void RegisterAction() + private void RegisterAction() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Action), v => { @@ -239,7 +233,7 @@ namespace Barotrauma }); } - public static void RegisterFunc() + private void RegisterFunc() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Func), v => { @@ -254,7 +248,7 @@ namespace Barotrauma }); } - public static void RegisterFunc() + private void RegisterFunc() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Func), v => { @@ -269,7 +263,7 @@ namespace Barotrauma }); } - public static void RegisterFunc() + private void RegisterFunc() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Func), v => { diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 3e2b5742e..d473f6a9d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -409,7 +409,7 @@ namespace Barotrauma LuaScriptLoader = new LuaScriptLoader(); LuaScriptLoader.ModulePaths = new string[] { }; - LuaCustomConverters.Initialize(CallLuaFunction); + RegisterLuaConverters(); lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.Debug); lua.Options.DebugPrint = PrintMessage;