diff --git a/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Lua/init.lua b/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Lua/init.lua index a3252fc85..45348369b 100644 --- a/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Lua/init.lua +++ b/Barotrauma/BarotraumaShared/LocalMods/[DebugOnlyTest]TestLuaMod/Lua/init.lua @@ -22,4 +22,18 @@ end) Hook.Add("missionsEnded", "test", function() print("missionsEnded") -end) \ No newline at end of file +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) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs index d0b97c785..841511c49 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs @@ -1,7 +1,9 @@ #nullable enable -using Barotrauma.LuaCs.Data; +using Barotrauma.LuaCs; using Barotrauma.LuaCs.Compatibility; +using Barotrauma.LuaCs.Data; +using Barotrauma.LuaCs.Events; using Barotrauma.Networking; using FluentResults; using Microsoft.CodeAnalysis; @@ -13,17 +15,16 @@ using MoonSharp.Interpreter.Interop; using MoonSharp.Interpreter.Loaders; using RestSharp.Validation; using System; +using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; -using System.Threading.Tasks; -using Barotrauma.LuaCs; -using Barotrauma.LuaCs.Events; -using System.Diagnostics; using System.Reflection; +using System.Threading.Tasks; namespace Barotrauma.LuaCs; @@ -384,19 +385,44 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService, typeof(ISettingBase), typeof(ISettingBase), typeof(ISettingBase), - typeof(ISettingRangeBase) + + typeof(ISettingRangeBase), + typeof(ISettingRangeBase), + + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), + typeof(ISettingList), ]; - Table settingsTable = new Table(_script); + Dictionary> settingsTable = []; foreach (Type type in settingBaseTypes) { 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(); + } + + 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)); #if CLIENT