Fix activity update language contamination and duplicate group

This commit is contained in:
2026-05-28 16:19:45 +08:00
parent 717acc800f
commit 3295aff894

View File

@@ -155,6 +155,12 @@ namespace GrasscutterTools.Pages
TextMapData ??= new TextMapData(TxtGcResRoot.Text); TextMapData ??= new TextMapData(TxtGcResRoot.Text);
// 确保使用中文UI文化加载GameData防止ConvertResources留下的ru-ru状态
var savedCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-cn");
GameData.LoadResources();
System.Threading.Thread.CurrentThread.CurrentUICulture = savedCulture;
UpdateActivityForLanguage(activityItems, "zh-cn"); UpdateActivityForLanguage(activityItems, "zh-cn");
UpdateActivityForLanguage(activityItems, "zh-tw"); UpdateActivityForLanguage(activityItems, "zh-tw");
UpdateActivityForLanguage(activityItems, "en-us"); UpdateActivityForLanguage(activityItems, "en-us");
@@ -180,8 +186,15 @@ namespace GrasscutterTools.Pages
var processedIds = new HashSet<int>(); var processedIds = new HashSet<int>();
// 保持原有的分组结构(从 GameData.Activity 读取),保留人工整理的内容 // 保持原有的分组结构(从 GameData.Activity 读取),保留人工整理的内容
// 旧的 // New 分组跳过,统一在末尾合并输出
foreach (var group in GameData.Activity) foreach (var group in GameData.Activity)
{ {
if (group.Key == "New")
{
foreach (var id in group.Value.Ids)
processedIds.Add(id);
continue;
}
buffer.Append("// ").AppendLine(group.Key); buffer.Append("// ").AppendLine(group.Key);
foreach (var id in group.Value.Ids) foreach (var id in group.Value.Ids)
{ {
@@ -195,14 +208,23 @@ namespace GrasscutterTools.Pages
} }
} }
// 添加 JSON 中存在但旧文件中不存在的新活动 // 合并旧的 // New 和 JSON 中新增的活动
var newActivities = activityItems.Where(item => !processedIds.Contains(item.ActivityId)).OrderBy(item => item.ActivityId); var newIds = activityItems
if (newActivities.Any()) .Where(item => !processedIds.Contains(item.ActivityId))
.Select(item => item.ActivityId)
.Concat(GameData.Activity.TryGetValue("New", out var oldNewGroup)
? oldNewGroup.Ids : Enumerable.Empty<int>())
.Distinct()
.OrderBy(id => id)
.ToList();
if (newIds.Count > 0)
{ {
buffer.AppendLine("// New"); buffer.AppendLine("// New");
foreach (var item in newActivities) foreach (var id in newIds)
{ {
buffer.Append(item.ActivityId).Append(':').AppendLine(activityMap[item.ActivityId]); var name = activityMap.TryGetValue(id, out var title) ? title :
GameData.Activity.TryGetValue("New", out var ng) && ng[id] != ItemMap.EmptyName ? ng[id] : title;
buffer.Append(id).Append(':').AppendLine(name);
} }
} }