diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs index 184dd852b..75671711d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs @@ -223,5 +223,19 @@ namespace Barotrauma var descriptor = (StandardUserDataDescriptor)IUUD; descriptor.RemoveMember(memberName); } + + /// + /// Converts a Lua value to a desired CLR type and wraps it in a userdata to avoid automatic conversions. + /// Example: a Lua script needs to pass a List`1 to a CLR method expecting System.Object, MoonSharp gets + /// in the way by converting the List`1 to a MoonSharp.Interpreter.Table and breaking everything. + /// Wrapping the value in a userdata preserves the original type during conversions. + /// + /// Lua value to conert and wrap in a userdata. + /// The CLR type of the object to convert the Lua value to. Uses MoonSharp ScriptToClr converters. Lua scripts can obtain Types from descriptors. + /// A userdata that wraps the Lua value converted to an object of the desired type. + public static DynValue CreateUserDataOfType(DynValue scriptObject, Type desiredType) + { + return UserData.Create(scriptObject.ToObject(desiredType)); + } } } \ No newline at end of file