Files
2025-03-31 13:19:47 +02:00

75 lines
2.3 KiB
Lua

if CSActive then
return
end
local function IsAllowed(typeName)
if string.startsWith(typeName, "Barotrauma.Lua") or string.startsWith(typeName, "Barotrauma.Cs") or string.startsWith(typeName, "Barotrauma.LuaCs") then
return false
end
if string.startsWith(typeName, "System.Collections") then return true end
if string.startsWith(typeName, "Microsoft.Xna") then return true end
if string.startsWith(typeName, "Barotrauma.IO") then return false end
if string.startsWith(typeName, "Barotrauma.ToolBox") then return false end
if string.startsWith(typeName, "Barotrauma.SaveUtil") then return false end
if string.startsWith(typeName, "Barotrauma.") then return true end
return false
end
local function CanBeReRegistered(typeName)
if string.startsWith(typeName, "Barotrauma.Lua") or string.startsWith(typeName, "Barotrauma.Cs") or string.startsWith(typeName, "Barotrauma.LuaCs") then
return false
end
return true
end
local originalRegisterType = LuaUserData.RegisterType
LuaUserData.RegisterType = function (typeName)
if not (CanBeReRegistered(typeName) and LuaUserData.IsRegistered(typeName)) and not IsAllowed(typeName) then
error("Couldn't register type " .. typeName .. ".", 2)
end
local success, result = pcall(originalRegisterType, typeName)
if not success then
error(result, 2)
end
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
error("Couldn't create static type " .. typeName .. ".", 2)
end
local success, result = pcall(originalCreateStatic, typeName, addCallMethod)
if not success then
error(result, 2)
end
return result
end