- Added networking permission checks to SettingEntry.
- Removed error logging for missing save data for settings.
This commit is contained in:
@@ -51,6 +51,36 @@ public class SettingEntry<T> : SettingBase, ISettingBase<T>, INetworkSyncVar whe
|
|||||||
public T DefaultValue { get; protected set; }
|
public T DefaultValue { get; protected set; }
|
||||||
|
|
||||||
public virtual bool TrySetValue(T value)
|
public virtual bool TrySetValue(T value)
|
||||||
|
{
|
||||||
|
#if CLIENT
|
||||||
|
if (SyncType is NetSync.ServerAuthority && NetworkingService is not null
|
||||||
|
&& GameMain.IsMultiplayer
|
||||||
|
&& !GameMain.Client.HasPermission(this.WritePermissions))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!TrySetValueInternal(value))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if CLIENT
|
||||||
|
if (GameMain.IsMultiplayer && SyncType is NetSync.ClientOneWay or NetSync.TwoWay)
|
||||||
|
{
|
||||||
|
NetworkingService?.SendNetVar(this);
|
||||||
|
}
|
||||||
|
#elif SERVER
|
||||||
|
if (GameMain.IsMultiplayer && SyncType is NetSync.TwoWay or NetSync.ServerAuthority)
|
||||||
|
{
|
||||||
|
NetworkingService?.SendNetVar(this);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TrySetValueInternal(T value)
|
||||||
{
|
{
|
||||||
if (value is null)
|
if (value is null)
|
||||||
{
|
{
|
||||||
@@ -122,7 +152,8 @@ public class SettingEntry<T> : SettingBase, ISettingBase<T>, INetworkSyncVar whe
|
|||||||
|
|
||||||
public NetSync SyncType => ConfigInfo.NetSync;
|
public NetSync SyncType => ConfigInfo.NetSync;
|
||||||
// needs to be added IConfigInfo
|
// needs to be added IConfigInfo
|
||||||
public ClientPermissions WritePermissions => throw new NotImplementedException();
|
public ClientPermissions WritePermissions => ClientPermissions.ManageSettings;
|
||||||
|
|
||||||
public void ReadNetMessage(IReadMessage message)
|
public void ReadNetMessage(IReadMessage message)
|
||||||
{
|
{
|
||||||
if (SyncType == NetSync.None || NetworkingService is null)
|
if (SyncType == NetSync.None || NetworkingService is null)
|
||||||
@@ -134,7 +165,7 @@ public class SettingEntry<T> : SettingBase, ISettingBase<T>, INetworkSyncVar whe
|
|||||||
{
|
{
|
||||||
if (typeof(T).IsEnum)
|
if (typeof(T).IsEnum)
|
||||||
{
|
{
|
||||||
TrySetValue((T)(object)message.ReadInt32());
|
TrySetValueInternal((T)(object)message.ReadInt32());
|
||||||
}
|
}
|
||||||
|
|
||||||
// No...there's no better way to do this...
|
// No...there's no better way to do this...
|
||||||
@@ -142,42 +173,42 @@ public class SettingEntry<T> : SettingBase, ISettingBase<T>, INetworkSyncVar whe
|
|||||||
switch (typeCode)
|
switch (typeCode)
|
||||||
{
|
{
|
||||||
case TypeCode.Boolean:
|
case TypeCode.Boolean:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadBoolean(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadBoolean(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Byte:
|
case TypeCode.Byte:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadByte(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadByte(), typeCode));
|
||||||
return;
|
return;
|
||||||
// SByte not supported by interface
|
// SByte not supported by interface
|
||||||
case TypeCode.SByte:
|
case TypeCode.SByte:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadInt16(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadInt16(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Int16:
|
case TypeCode.Int16:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadInt16(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadInt16(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Char:
|
case TypeCode.Char:
|
||||||
case TypeCode.UInt16:
|
case TypeCode.UInt16:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadUInt16(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadUInt16(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Int32:
|
case TypeCode.Int32:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadInt32(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadInt32(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.UInt32:
|
case TypeCode.UInt32:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadUInt32(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadUInt32(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Int64:
|
case TypeCode.Int64:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadInt64(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadInt64(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.UInt64:
|
case TypeCode.UInt64:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadUInt64(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadUInt64(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Single:
|
case TypeCode.Single:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadSingle(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadSingle(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Double:
|
case TypeCode.Double:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadDouble(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadDouble(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.String:
|
case TypeCode.String:
|
||||||
TrySetValue((T)Convert.ChangeType(message.ReadString(), typeCode));
|
TrySetValueInternal((T)Convert.ChangeType(message.ReadString(), typeCode));
|
||||||
return;
|
return;
|
||||||
case TypeCode.Decimal:
|
case TypeCode.Decimal:
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -306,7 +306,12 @@ public sealed partial class ConfigService : IConfigService
|
|||||||
|
|
||||||
foreach (var settingBase in cfgValues)
|
foreach (var settingBase in cfgValues)
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
|
// log in debug only.
|
||||||
ret.WithReasons(LoadSavedValueForConfig(settingBase).Reasons);
|
ret.WithReasons(LoadSavedValueForConfig(settingBase).Reasons);
|
||||||
|
#else
|
||||||
|
LoadSavedValueForConfig(settingBase);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user