Use AOT-safe MemoryPack config generation

This commit is contained in:
wuwenbo 2026-06-11 11:09:11 +08:00
parent 75bbc0131e
commit 972956323d
12 changed files with 15 additions and 17 deletions

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, (ConfigName)>>(data);
Dict = (Dictionary<int, (ConfigName)>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, (ConfigName)>), data)!;
}
}

View File

@ -23,7 +23,7 @@ namespace ExcelConfig
public override byte[] GetData()
{
return MemoryPackSerializer.Serialize(Dict);
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, (ConfigName)>), Dict);
}
}

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, AIConfig>>(data);
Dict = (Dictionary<int, AIConfig>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, AIConfig>), data)!;
}
}

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, GeoDesc>>(data);
Dict = (Dictionary<int, GeoDesc>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, GeoDesc>), data)!;
}
}

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, Moment>>(data);
Dict = (Dictionary<int, Moment>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, Moment>), data)!;
}
}

View File

@ -23,7 +23,7 @@ namespace ExcelConfig
public override byte[] GetData()
{
return MemoryPackSerializer.Serialize(Dict);
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, AIConfig>), Dict);
}
}

View File

@ -23,7 +23,7 @@ namespace ExcelConfig
public override byte[] GetData()
{
return MemoryPackSerializer.Serialize(Dict);
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, GeoDesc>), Dict);
}
}

View File

@ -23,7 +23,7 @@ namespace ExcelConfig
public override byte[] GetData()
{
return MemoryPackSerializer.Serialize(Dict);
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, Moment>), Dict);
}
}

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, AIConfig>>(data);
Dict = (Dictionary<int, AIConfig>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, AIConfig>), data)!;
}
}

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, GeoDesc>>(data);
Dict = (Dictionary<int, GeoDesc>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, GeoDesc>), data)!;
}
}

View File

@ -14,7 +14,7 @@ namespace ExcelConfig
public override void Init(byte[] data)
{
Dict = MemoryPackSerializer.Deserialize<Dictionary<int, Moment>>(data);
Dict = (Dictionary<int, Moment>)MemoryPackSerializer.Deserialize(typeof(Dictionary<int, Moment>), data)!;
}
}

View File

@ -28,7 +28,7 @@ namespace Logic.Multilingual
// 原始翻译快照仅在游戏启动时拍照一次apply mod 之前的纯净数据)。
// 之后所有 mod apply / 重 apply 都基于"先 restore 再 apply",避免覆盖叠加。
// key = MultilingualItem.ID, value = 各语种字段的原始值
private Dictionary<uint, object> _originalSnapshot;
private Dictionary<uint, OriginalLangFields> _originalSnapshot;
// 跟踪 export 数据是否已经被 mod 改写过:用于在切语言时判断是否需要重新 apply
// (理论上只有 SaveAndApplyMods 会改写,所以这个标志只在那里翻转)
@ -114,7 +114,7 @@ namespace Logic.Multilingual
_multilingualData.RefreshDict();
if (_multilingualData.ItemDict == null) return;
_originalSnapshot = new Dictionary<uint, object>(_multilingualData.ItemDict.Count);
_originalSnapshot = new Dictionary<uint, OriginalLangFields>(_multilingualData.ItemDict.Count);
foreach (var kv in _multilingualData.ItemDict)
{
_originalSnapshot[kv.Key] = OriginalLangFields.From(kv.Value);
@ -131,9 +131,7 @@ namespace Logic.Multilingual
foreach (var kv in _originalSnapshot)
{
if (!_multilingualData.ItemDict.TryGetValue(kv.Key, out var item)) continue;
var fields = kv.Value as OriginalLangFields;
if (fields == null) continue;
fields.RestoreTo(item);
kv.Value.RestoreTo(item);
}
_modsApplied = false;
}
@ -373,7 +371,7 @@ namespace Logic.Multilingual
/// <summary>
/// 原始翻译快照行:仅保存 mod 会覆盖的字段(与 WorkshopModLoader.SetItemStr 列表对齐)
/// </summary>
internal sealed class OriginalLangFields
internal struct OriginalLangFields
{
public string ZH;
public string TDZH;