From fe3d17d1d9f914abbdf210319ddfe0aa7480280d Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Sat, 23 Apr 2022 12:42:19 -0300 Subject: [PATCH] AddCallMetaTable for sub userdatas --- .../Lua/DefaultLib/LibShared.lua | 2 ++ .../BarotraumaShared/Lua/UserDataUtils.lua | 26 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua b/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua index c41427dd1..97e8a259b 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua @@ -1,5 +1,6 @@ local defaultLib = {} +local AddCallMetaTable = LuaSetup.AddCallMetaTable local CreateStatic = LuaSetup.CreateStatic local CreateEnum = LuaUserData.CreateEnumTable @@ -45,6 +46,7 @@ defaultLib["CharacterPrefab"] = CreateStatic("Barotrauma.CharacterPrefab") defaultLib["CharacterInfo"] = CreateStatic("Barotrauma.CharacterInfo", true) defaultLib["CharacterInfoPrefab"] = CreateStatic("Barotrauma.CharacterInfoPrefab") defaultLib["Item"] = CreateStatic("Barotrauma.Item", true) +AddCallMetaTable(defaultLib["Item"].ChangePropertyEventData) defaultLib["ItemPrefab"] = CreateStatic("Barotrauma.ItemPrefab", true) defaultLib["TalentTree"] = CreateStatic("Barotrauma.TalentTree", true) defaultLib["TalentPrefab"] = CreateStatic("Barotrauma.TalentPrefab", true) diff --git a/Barotrauma/BarotraumaShared/Lua/UserDataUtils.lua b/Barotrauma/BarotraumaShared/Lua/UserDataUtils.lua index e03b7f2f2..ff9f4af62 100644 --- a/Barotrauma/BarotraumaShared/Lua/UserDataUtils.lua +++ b/Barotrauma/BarotraumaShared/Lua/UserDataUtils.lua @@ -10,21 +10,25 @@ LuaSetup.RegisterBarotrauma = function(typeName) return LuaSetup.Register("Barotrauma." .. typeName) end +LuaSetup.AddCallMetaTable = function (userdata) + debug.setmetatable(userdata, { + __call = function(obj, ...) + local success, result = pcall(userdata.__new, ...) + + if not success then + error(result, 2) + end + + return result + end + }) +end + LuaSetup.CreateStatic = function(typeName, addCallMethod) local staticUserdata = LuaUserData.CreateStatic(typeName) if addCallMethod then - debug.setmetatable(staticUserdata, { - __call = function(obj, ...) - local success, result = pcall(staticUserdata.__new, ...) - - if not success then - error(result, 2) - end - - return result - end - }) + LuaSetup.AddCallMetaTable(staticUserdata) end return staticUserdata