diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua b/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua index 3845d782c..a06e6de63 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua @@ -1,4 +1,5 @@ local Register = LuaSetup.LuaUserData.RegisterType +local RegisterExtension = LuaSetup.LuaUserData.RegisterExtensionType local RegisterBarotrauma = LuaSetup.LuaUserData.RegisterTypeBarotrauma Register("System.TimeSpan") @@ -471,3 +472,6 @@ LuaUserData.RemoveMember(workshopItem, "RemoveFavorite") LuaUserData.RemoveMember(workshopItem, "Vote") LuaUserData.RemoveMember(workshopItem, "GetUserVote") LuaUserData.RemoveMember(workshopItem, "Edit") + +RegisterExtension("Barotrauma.MathUtils") +RegisterExtension("Barotrauma.XMLExtensions") \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua b/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua index 29e013dc2..387fc7f2b 100644 --- a/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua +++ b/Barotrauma/BarotraumaShared/Lua/LuaUserData.lua @@ -8,6 +8,7 @@ LuaSetup.LuaUserData = luaUserData luaUserData.IsRegistered = clrLuaUserData.IsRegistered luaUserData.UnregisterType = clrLuaUserData.UnregisterType luaUserData.RegisterGenericType = clrLuaUserData.RegisterGenericType +luaUserData.RegisterExtensionType = clrLuaUserData.RegisterExtensionType luaUserData.UnregisterGenericType = clrLuaUserData.UnregisterGenericType luaUserData.IsTargetType = clrLuaUserData.IsTargetType luaUserData.TypeOf = clrLuaUserData.TypeOf diff --git a/Barotrauma/BarotraumaShared/Lua/PostSetup.lua b/Barotrauma/BarotraumaShared/Lua/PostSetup.lua index 920cd6769..f54417259 100644 --- a/Barotrauma/BarotraumaShared/Lua/PostSetup.lua +++ b/Barotrauma/BarotraumaShared/Lua/PostSetup.lua @@ -44,6 +44,21 @@ LuaUserData.RegisterType = function (typeName) return result end +local originalRegisterGenericType = LuaUserData.RegisterType +LuaUserData.RegisterGenericType = function (typeName, ...) + if not (CanBeReRegistered(typeName) and LuaUserData.IsRegistered(typeName)) and not IsAllowed(typeName) then + error("Couldn't register generic type " .. typeName .. ".", 2) + end + + local success, result = pcall(originalRegisterGenericType, typeName, ...) + + if not success then + error(result, 2) + end + + return result +end + local originalCreateStatic = LuaUserData.CreateStatic LuaUserData.CreateStatic = function (typeName, addCallMethod) if not (CanBeReRegistered(typeName) and LuaUserData.IsRegistered(typeName)) and not IsAllowed(typeName) then diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs index 19c322872..a1e53d8eb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs @@ -23,6 +23,18 @@ namespace Barotrauma return UserData.RegisterType(type); } + public static void RegisterExtensionType(string typeName) + { + Type type = GetType(typeName); + + if (type == null) + { + throw new ScriptRuntimeException($"tried to register a type that doesn't exist: {typeName}."); + } + + UserData.RegisterExtensionType(type); + } + public static bool IsRegistered(string typeName) { Type type = GetType(typeName); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 7837163b3..9890b5c5a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -420,9 +420,6 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); - UserData.RegisterExtensionType(typeof(MathUtils)); - UserData.RegisterExtensionType(typeof(XMLExtensions)); - Lua.Globals["printerror"] = (DynValue o) => { LuaCsLogger.LogError(o.ToString(), LuaCsMessageOrigin.LuaMod); }; Lua.Globals["setmodulepaths"] = (Action)SetModulePaths; diff --git a/Libraries/moonsharp b/Libraries/moonsharp index 77c43a599..f67e9ee5a 160000 --- a/Libraries/moonsharp +++ b/Libraries/moonsharp @@ -1 +1 @@ -Subproject commit 77c43a5993a5e087ae89cb4170f836405626c48f +Subproject commit f67e9ee5a315ad0c1ba60199488df37f5ef09cf2