From 17003e47cddc7596814e445840bc06dd134e914f Mon Sep 17 00:00:00 2001 From: MapleWheels Date: Tue, 14 Apr 2026 12:17:12 -0400 Subject: [PATCH] - Fixed networking sync vars failing to sync initially. - Fixed lua failing to differentiate overloads ISettingBase. --- .../ClientSource/LuaCs/Data/SettingControl.cs | 4 ++-- .../_SettingsMenu/ModsGameplaySettingsMenu.cs | 2 +- .../LuaCs/_Services/NetworkingService.cs | 12 ++++++++---- .../SharedSource/LuaCs/Data/ISettingTypeDef.cs | 5 +++-- .../SharedSource/LuaCs/Data/SettingBase.cs | 3 ++- .../SharedSource/LuaCs/Data/SettingEntry.cs | 2 +- .../SharedSource/LuaCs/_Services/ConfigService.cs | 8 ++++---- .../LuaCs/_Services/LuaScriptManagementService.cs | 3 ++- 8 files changed, 23 insertions(+), 16 deletions(-) diff --git a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs index 65ed65ecd..0314c6c5d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/Data/SettingControl.cs @@ -24,7 +24,7 @@ public sealed class SettingControl : SettingBase, ISettingControl public SettingControl(IConfigInfo configInfo, Func, bool> valueChangePredicate) : base(configInfo) { _valueChangePredicate = valueChangePredicate; - TrySetValue(configInfo.Element); + TrySetSerializedValue(configInfo.Element); } protected override void OnDispose() @@ -37,7 +37,7 @@ public sealed class SettingControl : SettingBase, ISettingControl public override string GetStringValue() => Value.ToString(); public override string GetDefaultStringValue() => new KeyOrMouse(Keys.NumLock).ToString(); - public override bool TrySetValue(OneOf value) + public override bool TrySetSerializedValue(OneOf value) { var newVal = value.Match( (string v) => GetKeyOrMouse(v), diff --git a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/_Services/_SettingsMenu/ModsGameplaySettingsMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/_Services/_SettingsMenu/ModsGameplaySettingsMenu.cs index 8ff436ac3..bf58e2dd4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/_Services/_SettingsMenu/ModsGameplaySettingsMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/_Services/_SettingsMenu/ModsGameplaySettingsMenu.cs @@ -303,7 +303,7 @@ internal sealed class ModsGameplaySettingsMenu : ModsSettingsMenuBase continue; } - kvp.Key.TrySetValue(kvp.Value); + kvp.Key.TrySetSerializedValue(kvp.Value); ConfigService.SaveConfigValue(kvp.Key); } NewValuesCache.Clear(); diff --git a/Barotrauma/BarotraumaServer/ServerSource/LuaCs/_Services/NetworkingService.cs b/Barotrauma/BarotraumaServer/ServerSource/LuaCs/_Services/NetworkingService.cs index 661a99d2b..d3cb28157 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/LuaCs/_Services/NetworkingService.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/LuaCs/_Services/NetworkingService.cs @@ -159,11 +159,15 @@ partial class NetworkingService : INetworkingService, IEventClientRawNetMessageR SendToClient(message, client.Connection, DeliveryMethod.Reliable); - // TODO: when we move to using GUIDs for everything, this should combined into a single message - foreach (INetworkSyncVar netVar in netVars.Keys) + // delay by 1s to allow above id sync to reach the client. + CoroutineManager.Invoke(() => { - SendNetVar(netVar, client.Connection); - } + // TODO: when we move to using GUIDs for everything, this should combined into a single message + foreach (INetworkSyncVar netVar in netVars.Keys) + { + SendNetVar(netVar, client.Connection); + } + },1f); } public void SendToClient(IWriteMessage netMessage, NetworkConnection connection = null, DeliveryMethod deliveryMethod = DeliveryMethod.Reliable) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/ISettingTypeDef.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/ISettingTypeDef.cs index 49974fdc9..d82349eea 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/ISettingTypeDef.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/ISettingTypeDef.cs @@ -5,6 +5,7 @@ using System.Xml.Linq; using Barotrauma.LuaCs.Data; using Barotrauma.LuaCs; using Barotrauma.Networking; +using OneOf; namespace Barotrauma.LuaCs.Data; @@ -34,8 +35,8 @@ public partial interface ISettingBase : IDataInfo, IEquatable, IDi Type GetValueType(); string GetStringValue(); string GetDefaultStringValue(); - bool TrySetValue(OneOf.OneOf value); - event Action OnValueChanged; + bool TrySetSerializedValue(OneOf value); + event Action OnValueChanged; OneOf.OneOf GetSerializableValue(); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingBase.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingBase.cs index 2da3f046f..f9f9826de 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingBase.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Xml.Linq; using Barotrauma.LuaCs.Data; using Microsoft.Toolkit.Diagnostics; @@ -59,8 +60,8 @@ public abstract class SettingBase : ISettingBase public abstract Type GetValueType(); public abstract string GetStringValue(); public abstract string GetDefaultStringValue(); + public abstract bool TrySetSerializedValue(OneOf value); - public abstract bool TrySetValue(OneOf value); public abstract event Action OnValueChanged; public abstract OneOf GetSerializableValue(); #if CLIENT diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingEntry.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingEntry.cs index 83879b195..8d9046f93 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingEntry.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/SettingEntry.cs @@ -152,7 +152,7 @@ public partial class SettingEntry : SettingBase, ISettingBase, INetworkSyn public override string GetDefaultStringValue() => DefaultValue.ToString(); - public override bool TrySetValue(OneOf value) + public override bool TrySetSerializedValue(OneOf value) { bool isFailed = false; var typeConvertedValue = value.Match( diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ConfigService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ConfigService.cs index 442aa0185..b6a4732ec 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ConfigService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ConfigService.cs @@ -239,7 +239,7 @@ public sealed partial class ConfigService : IConfigService return; } - if (setting.TrySetValue(valueString)) + if (setting.TrySetSerializedValue(valueString)) { _logger.LogMessage($"Set config {internalName} value to {valueString}", Color.Green); if (SaveConfigValue(setting) is { IsFailed: true } res) @@ -445,7 +445,7 @@ public sealed partial class ConfigService : IConfigService { if (_settingsInstances.TryGetValue((info.OwnerPackage, value.SettingName), out var instance)) { - instance.TrySetValue(value.Element); + instance.TrySetSerializedValue(value.Element); } } } @@ -495,7 +495,7 @@ public sealed partial class ConfigService : IConfigService return FluentResults.Result.Ok(); } - return FluentResults.Result.OkIf(setting.TrySetValue(cfgValueElement), new Error($"Failed to set value for [{setting.OwnerPackage.Name}.{setting.InternalName}]")); + return FluentResults.Result.OkIf(setting.TrySetSerializedValue(cfgValueElement), new Error($"Failed to set value for [{setting.OwnerPackage.Name}.{setting.InternalName}]")); } public FluentResults.Result LoadSavedConfigsValues() @@ -544,7 +544,7 @@ public sealed partial class ConfigService : IConfigService continue; } - if (!instance.TrySetValue(profileValue.Element)) + if (!instance.TrySetSerializedValue(profileValue.Element)) { result.WithError(new Error($"{nameof(ApplyConfigProfile)}: Failed to set value for [{profileValue.SettingName}].")); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs index f0c197ade..784ba674a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs @@ -370,7 +370,8 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService, UserData.RegisterType(typeof(ILuaConfigService)); UserData.RegisterType(typeof(ILoggerService)); - //UserData.RegisterType(typeof(ISettingBase)); + UserData.RegisterType(typeof(ISettingBase)); + UserData.RegisterType(typeof(IDataInfo)); Type[] settingBaseTypes = [ typeof(ISettingBase),