From 5c6450c6a29936980d0849f4158e290591f40d6e Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Mon, 8 Nov 2021 22:27:27 -0300 Subject: [PATCH] provide instance in Hook Method --- .../SharedSource/Lua/LuaClasses.cs | 58 ++++++++++++++++--- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs index dcabc221f..88c980a46 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs @@ -740,9 +740,22 @@ namespace Barotrauma Before, After } - static bool HookLuaPatchPrefix(MethodBase __originalMethod, object[] __params) + static bool HookLuaPatchPrefix(MethodBase __originalMethod, object[] __params, object __instance) { - var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], __params)); + object[] parameters; + + if (__instance == null) + { + parameters = __params; + } + else + { + parameters = new object[__params.Length + 1]; + __params.CopyTo(parameters, 1); + parameters[0] = __instance; + } + + var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], parameters)); if (!result.IsNull()) { @@ -752,9 +765,22 @@ namespace Barotrauma return true; } - static bool HookLuaPatchRetPrefix(MethodBase __originalMethod, object[] __params, ref object __result) + static bool HookLuaPatchRetPrefix(MethodBase __originalMethod, object[] __params, ref object __result, object __instance) { - var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], __params)); + object[] parameters; + + if (__instance == null) + { + parameters = __params; + } + else + { + parameters = new object[__params.Length + 1]; + __params.CopyTo(parameters, 1); + parameters[0] = __instance; + } + + var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], parameters)); if (!result.IsNull()) { @@ -765,14 +791,30 @@ namespace Barotrauma return true; } - static void HookLuaPatchPostfix(MethodBase __originalMethod, object[] __params) + static void HookLuaPatchPostfix(MethodBase __originalMethod, object[] __params, object __instance) { - var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], __params)); + if (__instance == null) + luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], __params); + else + luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], __instance, __params); } - static void HookLuaPatchRetPostfix(MethodBase __originalMethod, object[] __params, ref object __result) + static void HookLuaPatchRetPostfix(MethodBase __originalMethod, object[] __params, ref object __result, object __instance) { - var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], __params)); + object[] parameters; + + if (__instance == null) + { + parameters = __params; + } + else + { + parameters = new object[__params.Length + 1]; + __params.CopyTo(parameters, 1); + parameters[0] = __instance; + } + + var result = new LuaResult(luaSetup.hook.Call(methodNameToHookName[__originalMethod.Name], parameters)); if (!result.IsNull()) __result = result.Object();