From 7ce7e6e763ba99f4098852f0a23ee28dc8c1171d Mon Sep 17 00:00:00 2001 From: peelz Date: Wed, 3 Aug 2022 21:34:41 -0400 Subject: [PATCH] Support resolving methods with ref/out parameters --- .../LuaCs/Lua/LuaClasses/LuaUserData.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs index 6736d9723..94b74963e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs @@ -11,20 +11,27 @@ namespace Barotrauma { public static Type GetType(string typeName) { + var byRef = false; + if (typeName.StartsWith("out ") || typeName.StartsWith("ref ")) + { + typeName = typeName.Remove(0, 4); + byRef = true; + } + var type = Type.GetType(typeName); - if (type != null) return type; + if (type != null) return byRef ? type.MakeByRefType() : type; foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { if (CsScriptBase.LoadedAssemblyName.Contains(a.GetName().Name)) - { + { var attrs = a.GetCustomAttributes(); var revision = attrs.FirstOrDefault(attr => attr.Key == "Revision")?.Value; if (revision != null && int.Parse(revision) != (int)CsScriptBase.Revision[a.GetName().Name]) { continue; } - } + } type = a.GetType(typeName); if (type != null) { - return type; + return byRef ? type.MakeByRefType() : type; } } return null;