Use AOT-safe MemoryPack config generation
This commit is contained in:
parent
75bbc0131e
commit
972956323d
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ namespace ExcelConfig
|
||||
|
||||
public override byte[] GetData()
|
||||
{
|
||||
return MemoryPackSerializer.Serialize(Dict);
|
||||
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, (ConfigName)>), Dict);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ namespace ExcelConfig
|
||||
|
||||
public override byte[] GetData()
|
||||
{
|
||||
return MemoryPackSerializer.Serialize(Dict);
|
||||
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, AIConfig>), Dict);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ namespace ExcelConfig
|
||||
|
||||
public override byte[] GetData()
|
||||
{
|
||||
return MemoryPackSerializer.Serialize(Dict);
|
||||
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, GeoDesc>), Dict);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ namespace ExcelConfig
|
||||
|
||||
public override byte[] GetData()
|
||||
{
|
||||
return MemoryPackSerializer.Serialize(Dict);
|
||||
return MemoryPackSerializer.Serialize(typeof(Dictionary<int, Moment>), Dict);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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)!;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user