From 8d4c1f028f069b63c64d66c158a64fddcb38ddd9 Mon Sep 17 00:00:00 2001 From: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Tue, 17 Jun 2025 20:56:35 +0800 Subject: [PATCH] feat: add handbook --- Common/Data/Excel/AvatarDataExcel.cs | 7 ++- Common/Data/Excel/ElfAstraMateDataExcel.cs | 1 + Common/Data/Excel/StigmataDataExcel.cs | 1 + Common/Data/Excel/WeaponDataExcel.cs | 1 + KianaBH/Tool/HandbookGenerator.cs | 64 +++++++++++++++++++++- 5 files changed, 71 insertions(+), 3 deletions(-) diff --git a/Common/Data/Excel/AvatarDataExcel.cs b/Common/Data/Excel/AvatarDataExcel.cs index c8da8c8..809b045 100644 --- a/Common/Data/Excel/AvatarDataExcel.cs +++ b/Common/Data/Excel/AvatarDataExcel.cs @@ -10,8 +10,8 @@ public class AvatarDataExcel : ExcelResource [JsonPropertyName("initialWeapon")] public int InitialWeapon { get; set; } [JsonPropertyName("skillList")] public List SkillList { get; set; } = []; public string FaceAnimationGroupName { get; set; } = ""; - public int DefaultDressId { get; set; } + [JsonPropertyName("fullName")] public HashName FullName { get; set; } = new(); public override int GetId() { @@ -26,4 +26,9 @@ public class AvatarDataExcel : ExcelResource } } +} + +public class HashName +{ + public long hash { get; set; } = 0; } \ No newline at end of file diff --git a/Common/Data/Excel/ElfAstraMateDataExcel.cs b/Common/Data/Excel/ElfAstraMateDataExcel.cs index bb88ad7..5c6fcc3 100644 --- a/Common/Data/Excel/ElfAstraMateDataExcel.cs +++ b/Common/Data/Excel/ElfAstraMateDataExcel.cs @@ -8,6 +8,7 @@ public class ElfAstraMateDataExcel : ExcelResource public int ElfID { get; set; } public int MaxLevel { get; set; } public int MaxRarity { get; set; } + public HashName FullName { get; set; } = new(); [JsonIgnore] public List SkillList = []; diff --git a/Common/Data/Excel/StigmataDataExcel.cs b/Common/Data/Excel/StigmataDataExcel.cs index a0a434d..032ba67 100644 --- a/Common/Data/Excel/StigmataDataExcel.cs +++ b/Common/Data/Excel/StigmataDataExcel.cs @@ -13,6 +13,7 @@ public class StigmataDataExcel : ExcelResource [JsonPropertyName("quality")] public int Quality { get; set; } [JsonPropertyName("isSecurityProtect")] public bool IsSecurityProtect { get; set; } [JsonPropertyName("protect")] public bool Protect { get; set; } + [JsonPropertyName("displayTitle")] public HashName DisplayTitle { get; set; } = new(); public override int GetId() { diff --git a/Common/Data/Excel/WeaponDataExcel.cs b/Common/Data/Excel/WeaponDataExcel.cs index 15c5def..1bc4f22 100644 --- a/Common/Data/Excel/WeaponDataExcel.cs +++ b/Common/Data/Excel/WeaponDataExcel.cs @@ -12,6 +12,7 @@ public class WeaponDataExcel : ExcelResource [JsonPropertyName("maxRarity")] public int MaxRarity { get; set; } [JsonPropertyName("evoID")] public int EvoID { get; set; } [JsonPropertyName("protect")] public bool Protect { get; set; } + [JsonPropertyName("displayTitle")] public HashName DisplayTitle { get; set; } = new(); public override int GetId() { diff --git a/KianaBH/Tool/HandbookGenerator.cs b/KianaBH/Tool/HandbookGenerator.cs index 8038d68..69fe2f9 100644 --- a/KianaBH/Tool/HandbookGenerator.cs +++ b/KianaBH/Tool/HandbookGenerator.cs @@ -49,15 +49,19 @@ public static class HandbookGenerator return; } - List textMap = JsonConvert.DeserializeObject>(File.ReadAllText(textMapPath))!; + List textMapList = JsonConvert.DeserializeObject>(File.ReadAllText(textMapPath))!; - if (textMap == null) + if (textMapList == null) { Logger.GetByClassName().Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath, I18NManager.Translate("Word.Error"))); return; } + Dictionary textMap = []; + + foreach (var map in textMapList) textMap.Add(map.Value!.Hash, map.Text!); + var builder = new StringBuilder(); builder.AppendLine("#Handbook generated in " + DateTime.Now.ToString("yyyy/MM/dd HH:mm")); builder.AppendLine(); @@ -65,6 +69,26 @@ public static class HandbookGenerator builder.AppendLine(); GenerateCmd(builder, lang); + builder.AppendLine(); + builder.AppendLine("#Valkyrie"); + builder.AppendLine(); + GenerateValk(builder, textMap); + + builder.AppendLine(); + builder.AppendLine("#Elf"); + builder.AppendLine(); + GenerateElf(builder, textMap); + + builder.AppendLine(); + builder.AppendLine("#Stigmata"); + builder.AppendLine(); + GenerateStigmata(builder, textMap); + + builder.AppendLine(); + builder.AppendLine("#Weapon"); + builder.AppendLine(); + GenerateWeapon(builder, textMap); + builder.AppendLine(); WriteToFile(lang, builder.ToString()); } @@ -83,6 +107,42 @@ public static class HandbookGenerator { File.WriteAllText($"{ConfigManager.Config.Path.HandbookPath}/Handbook{lang}.txt", content); } + + public static void GenerateValk(StringBuilder builder, Dictionary map) + { + foreach (var avatar in GameData.AvatarData.Values) + { + var name = map.TryGetValue(avatar.FullName.hash, out var value) ? value : $"[{avatar.FullName.hash}]"; + builder.AppendLine(avatar.AvatarID + ": " + name); + } + } + + public static void GenerateElf(StringBuilder builder, Dictionary map) + { + foreach (var elf in GameData.ElfAstraMateData.Values) + { + var name = map.TryGetValue(elf.FullName.hash, out var value) ? value : $"[{elf.FullName.hash}]"; + builder.AppendLine(elf.ElfID + ": " + name); + } + } + + public static void GenerateStigmata(StringBuilder builder, Dictionary map) + { + foreach (var stigmata in GameData.StigmataData.Values) + { + var name = map.TryGetValue(stigmata.DisplayTitle.hash, out var value) ? value : $"[{stigmata.DisplayTitle.hash}]"; + builder.AppendLine(stigmata.ID + ": " + name); + } + } + + public static void GenerateWeapon(StringBuilder builder, Dictionary map) + { + foreach (var weapon in GameData.WeaponData.Values) + { + var name = map.TryGetValue(weapon.DisplayTitle.hash, out var value) ? value : $"[{weapon.DisplayTitle.hash}]"; + builder.AppendLine(weapon.ID + ": " + name); + } + } } public class TextMapEntry