Fix settings not being properly exposed to Lua

This commit is contained in:
Evil Factory
2026-04-08 19:44:16 -03:00
parent 2e656509a8
commit e161d92117
2 changed files with 50 additions and 10 deletions
@@ -22,4 +22,18 @@ end)
Hook.Add("missionsEnded", "test", function() Hook.Add("missionsEnded", "test", function()
print("missionsEnded") print("missionsEnded")
end) end)
local failed, package = trygetpackage("[DebugOnlyTest]TestLuaMod")
local success, config = ConfigService.TryGetConfig(SettingBase.Single, package, "TestFloat")
print("config ", success, " ", config)
local lastTime = 0
Hook.Add("think", "printconfig", function()
if lastTime > Timer.Time then return end
lastTime = Timer.Time + 10
print(config.Value)
end)
@@ -1,7 +1,9 @@
#nullable enable #nullable enable
using Barotrauma.LuaCs.Data; using Barotrauma.LuaCs;
using Barotrauma.LuaCs.Compatibility; using Barotrauma.LuaCs.Compatibility;
using Barotrauma.LuaCs.Data;
using Barotrauma.LuaCs.Events;
using Barotrauma.Networking; using Barotrauma.Networking;
using FluentResults; using FluentResults;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
@@ -13,17 +15,16 @@ using MoonSharp.Interpreter.Interop;
using MoonSharp.Interpreter.Loaders; using MoonSharp.Interpreter.Loaders;
using RestSharp.Validation; using RestSharp.Validation;
using System; using System;
using System.Collections;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Barotrauma.LuaCs;
using Barotrauma.LuaCs.Events;
using System.Diagnostics;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks;
namespace Barotrauma.LuaCs; namespace Barotrauma.LuaCs;
@@ -384,19 +385,44 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService,
typeof(ISettingBase<long>), typeof(ISettingBase<long>),
typeof(ISettingBase<float>), typeof(ISettingBase<float>),
typeof(ISettingBase<double>), typeof(ISettingBase<double>),
typeof(ISettingRangeBase<float>)
typeof(ISettingRangeBase<float>),
typeof(ISettingRangeBase<int>),
typeof(ISettingList<string>),
typeof(ISettingList<byte>),
typeof(ISettingList<sbyte>),
typeof(ISettingList<ushort>),
typeof(ISettingList<short>),
typeof(ISettingList<char>),
typeof(ISettingList<uint>),
typeof(ISettingList<int>),
typeof(ISettingList<ulong>),
typeof(ISettingList<long>),
typeof(ISettingList<float>),
typeof(ISettingList<double>),
]; ];
Table settingsTable = new Table(_script); Dictionary<string, Dictionary<string, object>> settingsTable = [];
foreach (Type type in settingBaseTypes) foreach (Type type in settingBaseTypes)
{ {
UserData.RegisterType(type); UserData.RegisterType(type);
settingsTable[type.GetGenericArguments()[0].Name] = UserData.CreateStatic(type); string baseName = type.Name.RemoveFromEnd("`1").Substring(1);
if (!settingsTable.ContainsKey(baseName))
{
settingsTable[baseName] = new Dictionary<string, object>();
}
settingsTable[baseName][type.GetGenericArguments()[0].Name] = UserData.CreateStatic(type);
} }
_script.Globals["Settings"] = settingsTable; foreach (var keyPair in settingsTable)
{
_script.Globals[keyPair.Key] = keyPair.Value;
}
UserData.RegisterType(typeof(ISettingRangeBase<int>)); UserData.RegisterType(typeof(ISettingRangeBase<int>));
#if CLIENT #if CLIENT