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