diff --git a/Source/GrasscutterTools/Forms/FormGachaBannerEditor.cs b/Source/GrasscutterTools/Forms/FormGachaBannerEditor.cs
index 6f383dd..edef737 100644
--- a/Source/GrasscutterTools/Forms/FormGachaBannerEditor.cs
+++ b/Source/GrasscutterTools/Forms/FormGachaBannerEditor.cs
@@ -50,8 +50,10 @@ namespace GrasscutterTools.Forms
private void InitBannerPrefab()
{
- CmbPrefab.Items.Clear();
- CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
+ CmbPrefab.DisplayMember = "Value";
+ CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
+ //CmbPrefab.Items.Clear();
+ //CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
}
private void InitCheckedListBoxs()
@@ -96,6 +98,11 @@ namespace GrasscutterTools.Forms
#region - UI -
+ private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
+ {
+ return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
+ }
+
private void ShowBanner(GachaBanner banner)
{
try
@@ -103,10 +110,17 @@ namespace GrasscutterTools.Forms
NUDGachaType.Value = banner.GachaType;
NUDScheduleId.Value = banner.ScheduleId;
CmbBannerType.SelectedIndex = (int)banner.BannerType;
- if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
+ const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
+ const string suffix = "_TITLE";
+ if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
+ {
CmbPrefab.SelectedIndex = -1;
+ }
else
- CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
+ {
+ var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
+ CmbPrefab.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
+ }
RbCostItem224.Checked = banner.CostItem == 224;
RbCostItem223.Checked = banner.CostItem == 223;
NUDBeginTime.Value = banner.BeginTime;
@@ -153,15 +167,15 @@ namespace GrasscutterTools.Forms
else
purpleIds = TxtRateUpItems2.Text.Split(',').Select(s => int.Parse(s.Trim())).ToArray();
- var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
+ var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
GachaBanner banner = new GachaBanner
{
GachaType = (int)NUDGachaType.Value,
ScheduleId = (int)NUDScheduleId.Value,
BannerType = (BannerType)CmbBannerType.SelectedIndex,
- PrefabPath = $"GachaShowPanel_A{prefabId:000}",
- PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
- TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
+ PrefabPath = $"GachaShowPanel_{prefabId}",
+ PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
+ TitlePath = $"UI_GACHA_SHOW_PANEL_{prefabId}_TITLE",
CostItem = RbCostItem224.Checked ? 224 : 223,
BeginTime = (int)NUDBeginTime.Value,
EndTime = (int)NUDEndTime.Value,
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannerEditor2.cs b/Source/GrasscutterTools/Forms/FormGachaBannerEditor2.cs
index e6c809d..ee9d840 100644
--- a/Source/GrasscutterTools/Forms/FormGachaBannerEditor2.cs
+++ b/Source/GrasscutterTools/Forms/FormGachaBannerEditor2.cs
@@ -50,8 +50,11 @@ namespace GrasscutterTools.Forms
private void InitBannerPrefab()
{
- CmbPrefab.Items.Clear();
- CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
+ CmbPrefab.DisplayMember = "Value";
+ CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
+
+ //CmbPrefab.Items.Clear();
+ //CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
}
private void LnkWeightHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
@@ -206,6 +209,10 @@ namespace GrasscutterTools.Forms
#region - 序列化 -
+ private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
+ {
+ return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
+ }
private void ShowBanner(GachaBanner2 banner)
{
try
@@ -213,10 +220,17 @@ namespace GrasscutterTools.Forms
NUDGachaType.Value = banner.GachaType;
NUDScheduleId.Value = banner.ScheduleId;
CmbBannerType.SelectedIndex = (int)banner.BannerType;
- if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
+ const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
+ const string suffix = "_TITLE";
+ if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
+ {
CmbPrefab.SelectedIndex = -1;
+ }
else
- CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
+ {
+ var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
+ CmbPrefab.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
+ }
RbCostItem224.Checked = banner.CostItem == 224;
RbCostItem223.Checked = banner.CostItem == 223;
DTPBeginTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.BeginTime).DateTime;
@@ -248,16 +262,16 @@ namespace GrasscutterTools.Forms
MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
-
- var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
+
+ var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
var banner = new GachaBanner2
{
GachaType = (int)NUDGachaType.Value,
ScheduleId = (int)NUDScheduleId.Value,
BannerType = (BannerType)CmbBannerType.SelectedIndex,
- PrefabPath = $"GachaShowPanel_A{prefabId:000}",
- PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
- TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
+ PrefabPath = $"GachaShowPanel_{prefabId}",
+ PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
+ TitlePath = $"UI_GACHA_SHOW_PANEL_{prefabId}_TITLE",
CostItem = RbCostItem224.Checked ? 224 : 223,
BeginTime = (int)new DateTimeOffset(DTPBeginTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
EndTime = (int)new DateTimeOffset(DTPEndTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs
index 6e379ad..725dc93 100644
--- a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs
@@ -61,10 +61,10 @@ namespace GrasscutterTools.Forms
private void InitBannerPrefab()
{
- CmbPrefab.Items.Clear();
- CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
- CmbTitlePath.Items.Clear();
- CmbTitlePath.Items.AddRange(GameData.GachaBannerTitles.Names);
+ CmbPrefab.DisplayMember = "Value";
+ CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
+ CmbTitlePath.DisplayMember = "Value";
+ CmbTitlePath.DataSource = GameData.GachaBannerTitles;
}
protected override void OnLoad(EventArgs e)
@@ -405,6 +405,12 @@ namespace GrasscutterTools.Forms
#region - 卡池参数 -
+ private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
+ {
+ return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
+ }
+
+
///
/// 显示指定卡池参数
///
@@ -416,14 +422,28 @@ namespace GrasscutterTools.Forms
NUDGachaType.Value = banner.GachaType;
NUDScheduleId.Value = banner.ScheduleId;
CmbBannerType.SelectedIndex = (int)banner.BannerType;
- if (string.IsNullOrEmpty(banner.PrefabPath) || !int.TryParse(banner.PrefabPath.Substring("GachaShowPanel_A".Length, 3), out int prefabId))
+ const string prefabPrefix = "GachaShowPanel_";
+ if (string.IsNullOrEmpty(banner.PrefabPath) || banner.PrefabPath.Length <= prefabPrefix.Length)
+ {
CmbPrefab.SelectedIndex = -1;
+ }
else
- CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
- if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int titleId))
+ {
+ var prefabKey = banner.PrefabPath.Substring(prefabPrefix.Length);
+ CmbPrefab.SelectedIndex = GameData.GachaBannerPrefabs.FindIndex(it => it.Key == prefabKey);
+ }
+
+ const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
+ const string suffix = "_TITLE";
+ if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
+ {
CmbTitlePath.SelectedIndex = -1;
+ }
else
- CmbTitlePath.SelectedIndex = Array.IndexOf(GameData.GachaBannerTitles.Ids, titleId);
+ {
+ var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
+ CmbTitlePath.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
+ }
RbCostItem224.Checked = banner.CostItemId == 224;
RbCostItem223.Checked = banner.CostItemId == 223;
NUDCostItemAmount1.Value = banner.CoseItemAmount;
@@ -458,16 +478,16 @@ namespace GrasscutterTools.Forms
return null;
}
- var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
- var titleId = GameData.GachaBannerTitles.Ids[CmbTitlePath.SelectedIndex];
+ var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
+ var titleId = GameData.GachaBannerTitles[CmbTitlePath.SelectedIndex].Key;
var banner = new GachaBanner3
{
GachaType = (int)NUDGachaType.Value,
ScheduleId = (int)NUDScheduleId.Value,
BannerType = (BannerType)CmbBannerType.SelectedIndex,
- PrefabPath = $"GachaShowPanel_A{prefabId:000}",
- PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
- TitlePath = $"UI_GACHA_SHOW_PANEL_A{titleId:000}_TITLE",
+ PrefabPath = $"GachaShowPanel_{prefabId}",
+ PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
+ TitlePath = $"UI_GACHA_SHOW_PANEL_{titleId}_TITLE",
CostItemId = RbCostItem224.Checked ? 224 : 223,
CoseItemAmount = (int)NUDCostItemAmount1.Value,
CostItemId10 = RbCostItem224.Checked ? 224 : 223,
diff --git a/Source/GrasscutterTools/Game/GameData.cs b/Source/GrasscutterTools/Game/GameData.cs
index 52c9d66..fcc0dbb 100644
--- a/Source/GrasscutterTools/Game/GameData.cs
+++ b/Source/GrasscutterTools/Game/GameData.cs
@@ -17,6 +17,7 @@
*
**/
+using System.Collections.Generic;
using GrasscutterTools.Properties;
namespace GrasscutterTools.Game
@@ -42,13 +43,28 @@ namespace GrasscutterTools.Game
Dungeons = new ItemMap(Resources.Dungeon);
Weapons = new ItemMap(Resources.Weapon);
WeaponColors = new ItemMap(Resources.WeaponColor);
- GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
- GachaBannerTitles = new ItemMap(Resources.GachaBannerTitle);
+ GachaBannerPrefabs = ToDictionary(Resources.GachaBannerPrefab);
+ GachaBannerTitles = ToDictionary(Resources.GachaBannerTitle);
Quests = new ItemMap(Resources.Quest);
ShopType = new ItemMap(Resources.ShopType);
Weathers = new ItemMapGroup(Resources.Weather);
}
+ private static List> ToDictionary(string file)
+ {
+ var lines = file.Split('\n');
+ var dic = new List>(lines.Length);
+ foreach (var line in lines)
+ {
+ var i = line.IndexOf(':');
+ if (i <= 0) continue;
+ var key = line.Substring(0, i).Trim();
+ var value = line.Substring(i + 1).Trim();
+ dic.Add(new KeyValuePair(key, value));
+ }
+ return dic;
+ }
+
public static ItemMap Achievements { get; private set; }
public static ItemMapGroup Activity { get; private set; }
@@ -83,9 +99,9 @@ namespace GrasscutterTools.Game
public static ItemMap WeaponColors { get; private set; }
- public static ItemMap GachaBannerPrefabs { get; private set; }
+ public static List> GachaBannerPrefabs { get; private set; }
- public static ItemMap GachaBannerTitles { get; private set; }
+ public static List> GachaBannerTitles { get; private set; }
public static ItemMap Quests { get; private set; }
diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj
index 186aa74..f1a6b02 100644
--- a/Source/GrasscutterTools/GrasscutterTools.csproj
+++ b/Source/GrasscutterTools/GrasscutterTools.csproj
@@ -787,8 +787,8 @@
-
-
+
+
@@ -810,8 +810,8 @@
-
-
+
+
@@ -839,7 +839,7 @@
-
+
@@ -858,8 +858,8 @@
-
-
+
+
diff --git a/Source/GrasscutterTools/Pages/PageTools.Designer.cs b/Source/GrasscutterTools/Pages/PageTools.Designer.cs
index 445c806..841ee12 100644
--- a/Source/GrasscutterTools/Pages/PageTools.Designer.cs
+++ b/Source/GrasscutterTools/Pages/PageTools.Designer.cs
@@ -36,6 +36,7 @@
this.TxtGcResRoot = new System.Windows.Forms.TextBox();
this.BtnUpdateAllResources = new System.Windows.Forms.Button();
this.BtnUpdateActivity = new System.Windows.Forms.Button();
+ this.BtnUpdateBannerTitles = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// BtnUpdateResources
@@ -110,6 +111,16 @@
this.BtnUpdateActivity.UseVisualStyleBackColor = true;
this.BtnUpdateActivity.Click += new System.EventHandler(this.BtnUpdateActivity_Click);
//
+ // BtnUpdateBannerTitles
+ //
+ this.BtnUpdateBannerTitles.Location = new System.Drawing.Point(353, 100);
+ this.BtnUpdateBannerTitles.Name = "BtnUpdateBannerTitles";
+ this.BtnUpdateBannerTitles.Size = new System.Drawing.Size(150, 30);
+ this.BtnUpdateBannerTitles.TabIndex = 0;
+ this.BtnUpdateBannerTitles.Text = "Update Banner Titles";
+ this.BtnUpdateBannerTitles.UseVisualStyleBackColor = true;
+ this.BtnUpdateBannerTitles.Click += new System.EventHandler(this.BtnUpdateBannerTitles_Click);
+ //
// PageTools
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
@@ -118,6 +129,7 @@
this.Controls.Add(this.LblGcResRoot);
this.Controls.Add(this.TxtProjectResRoot);
this.Controls.Add(this.LblProjectResRoot);
+ this.Controls.Add(this.BtnUpdateBannerTitles);
this.Controls.Add(this.BtnUpdateActivity);
this.Controls.Add(this.BtnUpdateAllResources);
this.Controls.Add(this.BtnConvertCutScene);
@@ -138,5 +150,6 @@
private System.Windows.Forms.TextBox TxtGcResRoot;
private System.Windows.Forms.Button BtnUpdateAllResources;
private System.Windows.Forms.Button BtnUpdateActivity;
+ private System.Windows.Forms.Button BtnUpdateBannerTitles;
}
}
diff --git a/Source/GrasscutterTools/Pages/PageTools.cs b/Source/GrasscutterTools/Pages/PageTools.cs
index fad8200..b250398 100644
--- a/Source/GrasscutterTools/Pages/PageTools.cs
+++ b/Source/GrasscutterTools/Pages/PageTools.cs
@@ -22,6 +22,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
using System.Windows.Forms;
using GrasscutterTools.Game;
@@ -151,10 +152,8 @@ namespace GrasscutterTools.Pages
{
if (!CheckInputPaths()) return;
- if (TextMapData == null)
- TextMapData = new TextMapData(TxtGcResRoot.Text);
- if (GameResources == null)
- GameResources = new GameResources(TxtGcResRoot.Text, TextMapData);
+ TextMapData ??= new TextMapData(TxtGcResRoot.Text);
+ GameResources ??= new GameResources(TxtGcResRoot.Text, TextMapData);
GameResources.ConvertResources(TxtProjectResRoot.Text);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
@@ -176,8 +175,7 @@ namespace GrasscutterTools.Pages
Encoding.UTF8);
var activityItems = JsonConvert.DeserializeObject>(json);
- if (TextMapData == null)
- TextMapData = new TextMapData(TxtGcResRoot.Text);
+ TextMapData ??= new TextMapData(TxtGcResRoot.Text);
UpdateActivityForLanguage(activityItems, "TextMapCHS", "zh-cn");
UpdateActivityForLanguage(activityItems, "TextMapCHT", "zh-tw");
@@ -218,5 +216,51 @@ namespace GrasscutterTools.Pages
// activityItems.Select(it => $"{it.ActivityId}:{TextMapData.GetText(it.NameTextMapHash)}"),
// Encoding.UTF8);
}
+
+
+
+ private void UpdateGachaResourceForLanguage(string textMap, string language)
+ {
+ var i = Array.IndexOf(TextMapData.TextMapFiles, textMap);
+ TextMapData.LoadTextMap(TextMapData.TextMapFilePaths[i]);
+
+ var titleBuffer = new StringBuilder();
+ const string titlePattern = "UI_GACHA_SHOW_PANEL_([^_]+?)_TITLE";
+ const string markPattern = "<[^>]+>";
+
+ foreach (var kv in TextMapData.ManualTextMap)
+ {
+ var titleId = Regex.Match(kv.Value, titlePattern);
+ if (!titleId.Success) continue;
+ var text = TextMapData.TextMap[kv.Key];
+ titleBuffer.Append(titleId.Groups[1].Captures[0].Value)
+ .Append(":")
+ .AppendLine(Regex.Replace(text, markPattern, ""));
+ }
+
+ var titleFilePath = Path.Combine(TxtProjectResRoot.Text, language, "GachaBannerTitle.txt");
+ File.WriteAllText(titleFilePath, titleBuffer.ToString(), Encoding.UTF8);
+
+ }
+
+ private void BtnUpdateBannerTitles_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (!CheckInputPaths()) return;
+
+ TextMapData ??= new TextMapData(TxtGcResRoot.Text);
+
+ UpdateGachaResourceForLanguage("TextMapCHS", "zh-cn");
+ UpdateGachaResourceForLanguage("TextMapCHT", "zh-tw");
+ UpdateGachaResourceForLanguage("TextMapEN", "en-us");
+ UpdateGachaResourceForLanguage("TextMapRU", "ru-ru");
+ MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Properties/Resources.Designer.cs b/Source/GrasscutterTools/Properties/Resources.Designer.cs
index 1bfd81f..a074236 100644
--- a/Source/GrasscutterTools/Properties/Resources.Designer.cs
+++ b/Source/GrasscutterTools/Properties/Resources.Designer.cs
@@ -837,9 +837,9 @@ namespace GrasscutterTools.Properties {
///103:月草的赐慧-纳西妲
///104 [字符串的其余部分被截断]"; 的本地化字符串。
///
- internal static string GachaBennerPrefab {
+ internal static string GachaBannerPrefab {
get {
- return ResourceManager.GetString("GachaBennerPrefab", resourceCulture);
+ return ResourceManager.GetString("GachaBannerPrefab", resourceCulture);
}
}
diff --git a/Source/GrasscutterTools/Properties/Resources.en-us.resx b/Source/GrasscutterTools/Properties/Resources.en-us.resx
index 060ad2c..666eecf 100644
--- a/Source/GrasscutterTools/Properties/Resources.en-us.resx
+++ b/Source/GrasscutterTools/Properties/Resources.en-us.resx
@@ -181,8 +181,8 @@
Error
-
- ..\Resources\en-us\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+ ..\Resources\en-us\GachaBannerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
Help
@@ -285,8 +285,8 @@ Improvement suggestions have been submitted, please use caution to send emails t
Only allowed to save in Shop.json format! Are you sure you want to overwrite the currently specified file?
-
- ..\Resources\en-us\GachaBennerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312
+
+ ..\Resources\en-us\GachaBannerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312
..\Resources\en-us\Dungeon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
diff --git a/Source/GrasscutterTools/Properties/Resources.resx b/Source/GrasscutterTools/Properties/Resources.resx
index 86d84a5..694f7b6 100644
--- a/Source/GrasscutterTools/Properties/Resources.resx
+++ b/Source/GrasscutterTools/Properties/Resources.resx
@@ -178,8 +178,8 @@
错误
-
- ..\Resources\zh-cn\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+ ..\Resources\zh-cn\GachaBannerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
保存设置时异常:
diff --git a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx
index 3b8ba5e..1fffd59 100644
--- a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx
+++ b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx
@@ -181,8 +181,8 @@
Ошибка
-
- ..\Resources\ru-ru\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+ ..\Resources\ru-ru\GachaBannerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
Помощь
@@ -273,8 +273,8 @@
Разрешено сохранять только в формате Shop.json! Вы уверены, что хотите перезаписать текущий файл?
-
- ..\Resources\ru-ru\GachaBennerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+ ..\Resources\ru-ru\GachaBannerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
..\Resources\ru-ru\Dungeon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
diff --git a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx
index 09e360e..4b6f24a 100644
--- a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx
+++ b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx
@@ -178,8 +178,8 @@
錯誤
-
- ..\Resources\zh-tw\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+ ..\Resources\zh-tw\GachaBannerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
幫助
@@ -279,8 +279,8 @@
僅允許以 Shop.json 格式保存!確定要覆蓋當前指定文件嗎?
-
- ..\Resources\zh-tw\GachaBennerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+ ..\Resources\zh-tw\GachaBannerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
..\Resources\zh-tw\Dungeon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
diff --git a/Source/GrasscutterTools/Resources/en-us/GachaBannerPrefab.txt b/Source/GrasscutterTools/Resources/en-us/GachaBannerPrefab.txt
index 3ed596d..ecb332c 100644
--- a/Source/GrasscutterTools/Resources/en-us/GachaBannerPrefab.txt
+++ b/Source/GrasscutterTools/Resources/en-us/GachaBannerPrefab.txt
@@ -1,55 +1,139 @@
-007:Beginners' wish
-008:Wanderlust Invocation
-009:Ballad in Goblets
-010:Dawn Pilgrimage
-011:Grace of Southwind
-012:Bane of All Evil
-013:Epitome Invocation
-015:Sparkling Steps
-016:Beginners' wish
-017:Wanderlust Invocation
-018:Sparkling Steps
-019:Ballad in Goblets
-020:Amos' Bow and Aquila Favonia
-021:Lost Prayer to the Sacred Winds and Wolf's Gravestone
-022:Wanderlust Invocation
-023:Farewell of Snezhnaya
-024:Gentry of Hermitage
-025:Skyward Harp and Memory of Dust
-026:Vortex Vanquisher and The Unforged
-027:Secretum Secretorum
-028:Adrift in the Harbor
-029:Summit Shaper and Skyward Atlas
-030:Amos' Bow and Skyward Pride
-031:Invitation to Mundane Life
-032:Dance of Lanterns
-033:Moment of Bloom
-034:Primordial Jade Winged-Spear and Primordial Jade Cutter
-035:Staff of Homa and Wolf's Gravestone
-036:Ballad in Goblets
-037:Farewell of Snezhnaya
-038:Elegy for the End and Skyward Blade
-039:Skyward Harp and Lost Prayer to the Sacred Winds
-040:Gentry of Hermitage
-041:Born of Ocean Swell
-042:Summit Shaper and Memory of Dust
-043:Aquila Favonia and Song of Broken Pines
-045:Leaves in the Wind
-048:The Heron's Court
-049:Tapestry of Golden Flames
-052:Reign of Serenity
-053:Drifting Luminescence
-061:Oni's Royale
-065:The Transcendent One Returns
-071:Everbloom Violet
-076:Azure Excursion
-081:Discerner of Enigmas
-091:Tighnari
-092:Zhongli
-093:Hunter's Path
-097:Cyno
-098:Venti
-099:Staff of the Scarlet Sands
-//100:Twirling Lotus // Error
-101:Secretorum Secretorum
-102:Epitome Invocation
\ No newline at end of file
+A007:Beginners' wish
+A008:Wanderlust Invocation
+A009:Ballad in Goblets
+A010:Dawn Pilgrimage
+A011:Grace of Southwind
+A012:Bane of All Evil
+A013:Epitome Invocation
+A015:Sparkling Steps
+A016:Beginners' wish
+A017:Wanderlust Invocation
+A018:Sparkling Steps
+A019:Ballad in Goblets
+A020:Amos' Bow and Aquila Favonia
+A021:Lost Prayer to the Sacred Winds and Wolf's Gravestone
+A022:Wanderlust Invocation
+A023:Farewell of Snezhnaya
+A024:Gentry of Hermitage
+A025:Skyward Harp and Memory of Dust
+A026:Vortex Vanquisher and The Unforged
+A027:Secretum Secretorum
+A028:Adrift in the Harbor
+A029:Summit Shaper and Skyward Atlas
+A030:Amos' Bow and Skyward Pride
+A031:Invitation to Mundane Life
+A032:Dance of Lanterns
+A033:Moment of Bloom
+A034:Primordial Jade Winged-Spear and Primordial Jade Cutter
+A035:Staff of Homa and Wolf's Gravestone
+A036:Ballad in Goblets
+A037:Farewell of Snezhnaya
+A038:Elegy for the End and Skyward Blade
+A039:Skyward Harp and Lost Prayer to the Sacred Winds
+A040:Gentry of Hermitage
+A041:Born of Ocean Swell
+A042:Summit Shaper and Memory of Dust
+A043:Aquila Favonia and Song of Broken Pines
+A045:Leaves in the Wind
+A048:The Heron's Court
+A049:Tapestry of Golden Flames
+A052:Reign of Serenity
+A053:Drifting Luminescence
+A061:Oni's Royale
+A065:The Transcendent One Returns
+A071:Everbloom Violet
+A076:Azure Excursion
+A081:Discerner of Enigmas
+A091:Tighnari
+A092:Zhongli
+A093:Hunter's Path
+A097:Cyno
+A098:Venti
+A099:Staff of the Scarlet Sands
+A100:Q-¶
+A101:֮Ϣ-
+A102:-ʥ̼
+A103:²ݵĴͻ-
+A104:ɫ-
+A105:-ǧҹ
+A106:ӣ-
+A107:ݱ-
+A108:-ֶ
+A109:-
+A110:Ŷ-һ
+A111:-ͼ
+A112:Ӱ-罫
+A113:̤-
+A114:-Sݲ
+A115:뷽ı-ɭ
+A116:̻֮-
+A117:-Ҷ
+A118:ſʱ-
+A119:ށ-ҹ
+A120:-Ħˮ
+A121:ϣ
+A122:ŵ
+A123:έű/ɳ֮
+A124:
+A125:类
+A126:֮ع/Ϣ
+A127:
+A128:¶
+A129:ǧҹ/ʥ֮Կ
+A130:
+A131:
+A132:֮/Ī˹֮
+A133:
+A134:
+A135:֮/֮
+A136:ɭ
+A137:ԭҶ
+A138:Թ֮/Ҷ
+A139:lj
+A140:
+A141:֮ʱ/ķԭ
+A142:ɺĺ
+A143:
+A144:»/ͼĻ
+A145:
+A146:ҹ
+A147:Ĵħ/ˮ
+A148:
+A149:
+A150:֮/
+A151:ά
+A152:
+A153:ӿ/Ħ֮
+A154:ŷ˹
+A155:µ
+A156:ල/δ֮̾ʫ
+A157:ܽ
+A158:
+A159:ˮӿ֮/֮
+A160:ŵ
+A161:
+A162:°/ɳ֮
+A163:ά
+A164:类
+A165:ö/֮ع
+A166:罫
+A167:
+A168:S֮/֮
+A169:
+A170:
+A171:/ǧҹ
+A172:
+A173:
+A174:/֮
+A175:ǧ֯
+A176:һ
+A177:/ʯ
+A178:ά
+A179:ԭҶ
+A180:ӿ/Թ֮
+A181:ŵ
+A182:
+A183:֮/Ĵħ
+A184:
+A185:
+A186:ͼĻ/֮
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/en-us/GachaBannerTitle.txt b/Source/GrasscutterTools/Resources/en-us/GachaBannerTitle.txt
index 3ed596d..a266cc3 100644
--- a/Source/GrasscutterTools/Resources/en-us/GachaBannerTitle.txt
+++ b/Source/GrasscutterTools/Resources/en-us/GachaBannerTitle.txt
@@ -1,55 +1,53 @@
-007:Beginners' wish
-008:Wanderlust Invocation
-009:Ballad in Goblets
-010:Dawn Pilgrimage
-011:Grace of Southwind
-012:Bane of All Evil
-013:Epitome Invocation
-015:Sparkling Steps
-016:Beginners' wish
-017:Wanderlust Invocation
-018:Sparkling Steps
-019:Ballad in Goblets
-020:Amos' Bow and Aquila Favonia
-021:Lost Prayer to the Sacred Winds and Wolf's Gravestone
-022:Wanderlust Invocation
-023:Farewell of Snezhnaya
-024:Gentry of Hermitage
-025:Skyward Harp and Memory of Dust
-026:Vortex Vanquisher and The Unforged
-027:Secretum Secretorum
-028:Adrift in the Harbor
-029:Summit Shaper and Skyward Atlas
-030:Amos' Bow and Skyward Pride
-031:Invitation to Mundane Life
-032:Dance of Lanterns
-033:Moment of Bloom
-034:Primordial Jade Winged-Spear and Primordial Jade Cutter
-035:Staff of Homa and Wolf's Gravestone
-036:Ballad in Goblets
-037:Farewell of Snezhnaya
-038:Elegy for the End and Skyward Blade
-039:Skyward Harp and Lost Prayer to the Sacred Winds
-040:Gentry of Hermitage
-041:Born of Ocean Swell
-042:Summit Shaper and Memory of Dust
-043:Aquila Favonia and Song of Broken Pines
-045:Leaves in the Wind
-048:The Heron's Court
-049:Tapestry of Golden Flames
-052:Reign of Serenity
-053:Drifting Luminescence
-061:Oni's Royale
-065:The Transcendent One Returns
-071:Everbloom Violet
-076:Azure Excursion
-081:Discerner of Enigmas
-091:Tighnari
-092:Zhongli
-093:Hunter's Path
-097:Cyno
-098:Venti
-099:Staff of the Scarlet Sands
-//100:Twirling Lotus // Error
-101:Secretorum Secretorum
-102:Epitome Invocation
\ No newline at end of file
+A007:Beginners' wish
+A008:Wanderlust Invocation
+A009:Ballad in Goblets
+A010:Dawn Pilgrimage
+A011:Grace of Southwind
+A012:Bane of All Evil
+A013:Epitome Invocation
+A015:Sparkling Steps
+A016:Beginners' wish
+A017:Wanderlust Invocation
+A018:Sparkling Steps
+A019:Ballad in Goblets
+A020:Epitome Invocation
+A021:Epitome Invocation
+A022:Wanderlust Invocation
+A023:Farewell of Snezhnaya
+A024:Gentry of Hermitage
+A027:Secretum Secretorum
+A028:Adrift in the Harbor
+A031:Invitation to Mundane Life
+A032:Dance of Lanterns
+A033:Moment of Bloom
+A036:Ballad in Goblets
+A037:Farewell of Snezhnaya
+A040:Gentry of Hermitage
+A041:Born of Ocean Swell
+A045:Leaves in the Wind
+A048:The Heron's Court
+A049:Tapestry of Golden Flames
+A052:Reign of Serenity
+A053:Drifting Luminescence
+A061:Oni's Royale
+A065:The Transcendent One Returns
+A071:Everbloom Violet
+A076:Azure Excursion
+A081:Discerner of Enigmas
+A091:Viridescent Vigil
+A097:Twilight Arbiter
+A0100:Twirling Lotus
+A0103:The Moongrass' Enlightenment
+A0109:From Ashes Reborn
+A0115:Caution in Confidence
+A0121:Auric Blaze
+A0130:Immaculate Pulse
+A0145:Conjuring Chiaroscuro
+A0151:Decree of the Deeps
+A0154:Tempestuous Destiny
+A0157:Chanson of Many Waters
+A0163:In the Name of the Rosula
+A0169:The Crane Soars Skyward
+A0175:Of Silken Clouds Woven
+A0181:The Hearth's Ashen Shadow
+B001:Ode to the Dawn Breeze
diff --git a/Source/GrasscutterTools/Resources/ru-ru/GachaBannerPrefab.txt b/Source/GrasscutterTools/Resources/ru-ru/GachaBannerPrefab.txt
index 5379204..426d505 100644
--- a/Source/GrasscutterTools/Resources/ru-ru/GachaBannerPrefab.txt
+++ b/Source/GrasscutterTools/Resources/ru-ru/GachaBannerPrefab.txt
@@ -1,45 +1,129 @@
-007:Молитва новичка
-008:Жажда странствий
-009:Стихи из винного кубка
-010:Рассветное паломничество
-011:Благоволение южного ветра
-012:Истребление всего зла
-013:Воплощение божества
-015:Сверкающая поступь
-016:Молитва новичка
-017:Жажда странствий
-018:Сверкающая поступь
-019:Стихи из винного кубка
-020:Воплощение божества
-021:Воплощение божества
-022:Жажда странствий
-023:Зимнее расставание
-024:Горы и рынки
-027:Таинственные секреты
-028:Эфемерное недоверие
-031:Приглашение к мирской жизни
-032:Танец фонарей
-033:Момент цветения
-036:Стихи из винного кубка
-037:Зимнее расставание
-040:Горы и рынки
-041:Рождённая морской пеной
-045:Листья на ветру
-048:Сад белой цапли
-049:Гобелен золотого пламени
-052:Господство безмятежности
-053:Дрейфующее свечение
-061:Пиршество óни
-065:Возвращение в мир смертных
-071:Вечноцветущий пурпур
-076:Лазурный поход
-081:Белая радуга
-091:Патруль лесной чащи
-092:Горы и рынки
-093:Охотничья тропа
-097:Сумеречный вершитель
-098:Стихи из винного кубка
-099:Посох алых песков
-//100:Кружащийся лотос // Error
-101:Таинственные секреты
-102:Воплощение божества
\ No newline at end of file
+A007:Молитва новичка
+A008:Жажда странствий
+A009:Стихи из винного кубка
+A010:Рассветное паломничество
+A011:Благоволение южного ветра
+A012:Истребление всего зла
+A013:Воплощение божества
+A015:Сверкающая поступь
+A016:Молитва новичка
+A017:Жажда странствий
+A018:Сверкающая поступь
+A019:Стихи из винного кубка
+A020:Воплощение божества
+A021:Воплощение божества
+A022:Жажда странствий
+A023:Зимнее расставание
+A024:Горы и рынки
+A027:Таинственные секреты
+A028:Эфемерное недоверие
+A031:Приглашение к мирской жизни
+A032:Танец фонарей
+A033:Момент цветения
+A036:Стихи из винного кубка
+A037:Зимнее расставание
+A040:Горы и рынки
+A041:Рождённая морской пеной
+A045:Листья на ветру
+A048:Сад белой цапли
+A049:Гобелен золотого пламени
+A052:Господство безмятежности
+A053:Дрейфующее свечение
+A061:Пиршество óни
+A065:Возвращение в мир смертных
+A071:Вечноцветущий пурпур
+A076:Лазурный поход
+A081:Белая радуга
+A091:Патруль лесной чащи
+A092:Горы и рынки
+A093:Охотничья тропа
+A097:Сумеречный вершитель
+A098:Стихи из винного кубка
+A099:Посох алых песков
+A100:翩舞歈莲-妮露
+A101:深秘之息-阿贝多
+A102:神铸赋形-圣显绿箭
+A103:月草的赐慧-纳西妲
+A104:焰色天河-宵宫
+A105:神铸赋形-千夜飞雷
+A106:华紫樱绯-八重神子
+A107:暂别冬都-达达利亚
+A108:神铸赋形-神乐冬极
+A109:余火变相-流浪者
+A110:鬼门斗宴-荒泷一斗
+A111:神铸赋形-图莱杜拉赤角
+A112:影寂天下人-雷电将军
+A113:苍流踏花-神里绫人
+A114:神铸赋形-薙草波乱
+A115:敕诫枢谋-艾尔海森
+A116:烟火之邀-魈
+A117:神铸赋形-裁叶萃光和璞鸢
+A118:赤团开时-胡桃
+A119:素霓伣天-夜兰
+A120:神铸赋形-护摩若水
+A121:迪希雅
+A122:赛诺
+A123:苇海信标/赤沙之杖
+A124:申鹤
+A125:神里绫华
+A126:雾切之回光/息灾
+A127:纳西妲
+A128:妮露
+A129:千夜浮梦/圣显之钥
+A130:白术
+A131:甘雨
+A132:碧落之珑/阿莫斯之弓
+A133:宵宫
+A134:八重神子
+A135:飞雷之弦振/神乐之真意
+A136:艾尔海森
+A137:枫原万叶
+A138:苍古自由之誓/裁叶萃光
+A139:优菈
+A140:可莉
+A141:松籁响起之时/四风原典
+A142:珊瑚宫心海
+A143:流浪者
+A144:不灭月华/图莱杜拉的回忆
+A145:林尼
+A146:夜兰
+A147:最初的大魔术/若水
+A148:钟离
+A149:公子
+A150:贯虹之槊/冬极白星
+A151:那维莱特
+A152:胡桃
+A153:万世流涌大典/护摩之杖
+A154:莱欧斯利
+A155:温迪
+A156:金流监督/终未嗟叹之诗
+A157:芙宁娜
+A158:白术
+A159:静水流涌之辉/碧落之珑
+A160:赛诺
+A161:神里绫人
+A162:波乱月白经津/赤沙之杖
+A163:娜维娅
+A164:神里绫华
+A165:裁断/雾切之回光
+A166:雷电将军
+A167:宵宫
+A168:薙草之稻光/飞雷之弦振
+A169:闲云
+A170:纳西妲
+A171:鹤鸣余音/千夜浮梦
+A172:魈
+A173:八重神子
+A174:和璞鸢/神乐之真意
+A175:千织
+A176:荒泷一斗
+A177:有乐御簾切/赤角石溃杵
+A178:那维莱特
+A179:枫原万叶
+A180:万世流涌大典/苍古自由之誓
+A181:阿蕾奇诺
+A182:林尼
+A183:赤月之形/最初的大魔术
+A184:流浪者
+A185:白术
+A186:图莱杜拉的回忆/碧落之珑
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/ru-ru/GachaBannerTitle.txt b/Source/GrasscutterTools/Resources/ru-ru/GachaBannerTitle.txt
index 5379204..7ebfdd1 100644
--- a/Source/GrasscutterTools/Resources/ru-ru/GachaBannerTitle.txt
+++ b/Source/GrasscutterTools/Resources/ru-ru/GachaBannerTitle.txt
@@ -1,45 +1,53 @@
-007:Молитва новичка
-008:Жажда странствий
-009:Стихи из винного кубка
-010:Рассветное паломничество
-011:Благоволение южного ветра
-012:Истребление всего зла
-013:Воплощение божества
-015:Сверкающая поступь
-016:Молитва новичка
-017:Жажда странствий
-018:Сверкающая поступь
-019:Стихи из винного кубка
-020:Воплощение божества
-021:Воплощение божества
-022:Жажда странствий
-023:Зимнее расставание
-024:Горы и рынки
-027:Таинственные секреты
-028:Эфемерное недоверие
-031:Приглашение к мирской жизни
-032:Танец фонарей
-033:Момент цветения
-036:Стихи из винного кубка
-037:Зимнее расставание
-040:Горы и рынки
-041:Рождённая морской пеной
-045:Листья на ветру
-048:Сад белой цапли
-049:Гобелен золотого пламени
-052:Господство безмятежности
-053:Дрейфующее свечение
-061:Пиршество óни
-065:Возвращение в мир смертных
-071:Вечноцветущий пурпур
-076:Лазурный поход
-081:Белая радуга
-091:Патруль лесной чащи
-092:Горы и рынки
-093:Охотничья тропа
-097:Сумеречный вершитель
-098:Стихи из винного кубка
-099:Посох алых песков
-//100:Кружащийся лотос // Error
-101:Таинственные секреты
-102:Воплощение божества
\ No newline at end of file
+A007:Молитва новичка
+A008:Жажда странствий
+A009:Стихи из винного кубка
+A010:Рассветное паломничество
+A011:Благоволение южного ветра
+A012:Истребление всего зла
+A013:Воплощение божества
+A015:Сверкающая поступь
+A016:Молитва новичка
+A017:Жажда странствий
+A018:Сверкающая поступь
+A019:Стихи из винного кубка
+A020:Воплощение божества
+A021:Воплощение божества
+A022:Жажда странствий
+A023:Зимнее расставание
+A024:Горы и рынки
+A027:Таинственные секреты
+A028:Эфемерное недоверие
+A031:Приглашение к мирской жизни
+A032:Танец фонарей
+A033:Момент цветения
+A036:Стихи из винного кубка
+A037:Зимнее расставание
+A040:Горы и рынки
+A041:Рождённая морской пеной
+A045:Листья на ветру
+A048:Сад белой цапли
+A049:Гобелен золотого пламени
+A052:Господство безмятежности
+A053:Дрейфующее свечение
+A061:Пиршество óни
+A065:Возвращение в мир смертных
+A071:Вечноцветущий пурпур
+A076:Лазурный поход
+A081:Белая радуга
+A091:Патруль лесной чащи
+A097:Сумеречный вершитель
+A0100:Кружащийся лотос
+A0103:Озарение лунной травы
+A0109:Прах перерождённый
+A0115:Сдержанное благоразумие
+A0121:Пылающее золото
+A0130:Биение мудрого сердца
+A0145:Волшебство света и тени
+A0151:Завет глубин
+A0154:Бушующий рок
+A0157:Песнь водам мира
+A0163:Во имя розы
+A0169:Журавль взлетает в небеса
+A0175:Сплетение шёлковых облаков
+A0181:Пепельная тень очага
+B001:Стихи утреннего ветра
diff --git a/Source/GrasscutterTools/Resources/zh-cn/GachaBannerPrefab.txt b/Source/GrasscutterTools/Resources/zh-cn/GachaBannerPrefab.txt
index a53fab6..28f2e75 100644
--- a/Source/GrasscutterTools/Resources/zh-cn/GachaBannerPrefab.txt
+++ b/Source/GrasscutterTools/Resources/zh-cn/GachaBannerPrefab.txt
@@ -1,69 +1,129 @@
-007:初行者推荐祈愿
-008:奔行世间
-009:杯装之诗
-010:黎明巡礼
-011:南风之眷
-012:靖妖傩舞
-013:神铸赋形
-015:闪焰的驻足
-016:初行者推荐祈愿
-017:奔行世间
-018:闪焰的驻足
-019:杯装之诗
-020:神铸赋形
-021:神铸赋形
-022:奔行世间
-023:暂别冬都
-024:陵薮市朝
-027:深秘之息
-028:浮生孰来
-031:烟火之邀
-032:鱼龙灯昼
-033:赤团开时
-036:杯装之诗
-037:暂别冬都
-040:陵薮市朝
-041:浪涌之瞬
-045:叶落风随
-048:白鹭之庭
-049:焰色天河
-052:影寂天下人
-053:浮岳虹珠
-061:鬼门斗宴
-065:出尘入世
-071:华紫樱绯
-076:苍流踏花
-081:素霓伣天
-091:巡御蘙荟-提纳里
-092:陵薮市朝-钟离
-093:神铸赋形-猎人贯虹
-097:雳裁冥昭-赛诺
-098:杯装之诗-温迪
-099:神铸赋形-赤沙终末
-100:翩舞歈莲-妮露
-101:深秘之息-阿贝多
-102:神铸赋形-圣显绿箭
-103:月草的赐慧-纳西妲
-104:焰色天河-宵宫
-105:神铸赋形-千夜飞雷
-106:华紫樱绯-八重神子
-107:暂别冬都-达达利亚
-108:神铸赋形-神乐冬极
-109:余火变相-流浪者
-110:鬼门斗宴-荒泷一斗
-111:神铸赋形-图莱杜拉赤角
-112:影寂天下人-雷电将军
-113:苍流踏花-神里绫人
-114:神铸赋形-薙草波乱
-115:敕诫枢谋-艾尔海森
-116:烟火之邀-魈
-117:神铸赋形-裁叶萃光和璞鸢
-118:赤团开时-胡桃
-119:素霓伣天-夜兰
-120:神铸赋形-护摩若水
-121:迪希雅
-122:赛诺
-123:苇海信标/赤沙之杖
-124:申鹤
-125:神里绫华
-126:雾切之回光/息灾
\ No newline at end of file
+A007:初行者推荐祈愿
+A008:奔行世间
+A009:杯装之诗
+A010:黎明巡礼
+A011:南风之眷
+A012:靖妖傩舞
+A013:神铸赋形
+A015:闪焰的驻足
+A016:初行者推荐祈愿
+A017:奔行世间
+A018:闪焰的驻足
+A019:杯装之诗
+A020:神铸赋形
+A021:神铸赋形
+A022:奔行世间
+A023:暂别冬都
+A024:陵薮市朝
+A027:深秘之息
+A028:浮生孰来
+A031:烟火之邀
+A032:鱼龙灯昼
+A033:赤团开时
+A036:杯装之诗
+A037:暂别冬都
+A040:陵薮市朝
+A041:浪涌之瞬
+A045:叶落风随
+A048:白鹭之庭
+A049:焰色天河
+A052:影寂天下人
+A053:浮岳虹珠
+A061:鬼门斗宴
+A065:出尘入世
+A071:华紫樱绯
+A076:苍流踏花
+A081:素霓伣天
+A091:巡御蘙荟-提纳里
+A092:陵薮市朝-钟离
+A093:神铸赋形-猎人贯虹
+A097:雳裁冥昭-赛诺
+A098:杯装之诗-温迪
+A099:神铸赋形-赤沙终末
+A100:翩舞歈莲-妮露
+A101:深秘之息-阿贝多
+A102:神铸赋形-圣显绿箭
+A103:月草的赐慧-纳西妲
+A104:焰色天河-宵宫
+A105:神铸赋形-千夜飞雷
+A106:华紫樱绯-八重神子
+A107:暂别冬都-达达利亚
+A108:神铸赋形-神乐冬极
+A109:余火变相-流浪者
+A110:鬼门斗宴-荒泷一斗
+A111:神铸赋形-图莱杜拉赤角
+A112:影寂天下人-雷电将军
+A113:苍流踏花-神里绫人
+A114:神铸赋形-薙草波乱
+A115:敕诫枢谋-艾尔海森
+A116:烟火之邀-魈
+A117:神铸赋形-裁叶萃光和璞鸢
+A118:赤团开时-胡桃
+A119:素霓伣天-夜兰
+A120:神铸赋形-护摩若水
+A121:迪希雅
+A122:赛诺
+A123:苇海信标/赤沙之杖
+A124:申鹤
+A125:神里绫华
+A126:雾切之回光/息灾
+A127:纳西妲
+A128:妮露
+A129:千夜浮梦/圣显之钥
+A130:白术
+A131:甘雨
+A132:碧落之珑/阿莫斯之弓
+A133:宵宫
+A134:八重神子
+A135:飞雷之弦振/神乐之真意
+A136:艾尔海森
+A137:枫原万叶
+A138:苍古自由之誓/裁叶萃光
+A139:优菈
+A140:可莉
+A141:松籁响起之时/四风原典
+A142:珊瑚宫心海
+A143:流浪者
+A144:不灭月华/图莱杜拉的回忆
+A145:林尼
+A146:夜兰
+A147:最初的大魔术/若水
+A148:钟离
+A149:公子
+A150:贯虹之槊/冬极白星
+A151:那维莱特
+A152:胡桃
+A153:万世流涌大典/护摩之杖
+A154:莱欧斯利
+A155:温迪
+A156:金流监督/终未嗟叹之诗
+A157:芙宁娜
+A158:白术
+A159:静水流涌之辉/碧落之珑
+A160:赛诺
+A161:神里绫人
+A162:波乱月白经津/赤沙之杖
+A163:娜维娅
+A164:神里绫华
+A165:裁断/雾切之回光
+A166:雷电将军
+A167:宵宫
+A168:薙草之稻光/飞雷之弦振
+A169:闲云
+A170:纳西妲
+A171:鹤鸣余音/千夜浮梦
+A172:魈
+A173:八重神子
+A174:和璞鸢/神乐之真意
+A175:千织
+A176:荒泷一斗
+A177:有乐御簾切/赤角石溃杵
+A178:那维莱特
+A179:枫原万叶
+A180:万世流涌大典/苍古自由之誓
+A181:阿蕾奇诺
+A182:林尼
+A183:赤月之形/最初的大魔术
+A184:流浪者
+A185:白术
+A186:图莱杜拉的回忆/碧落之珑
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt b/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt
index 6b32345..f14e01d 100644
--- a/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt
+++ b/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt
@@ -1,49 +1,53 @@
-007:初行者推荐祈愿
-008:奔行世间
-009:杯装之诗
-010:黎明巡礼
-011:南风之眷
-012:靖妖傩舞
-013:神铸赋形
-015:闪焰的驻足
-016:初行者推荐祈愿
-017:奔行世间
-018:闪焰的驻足
-019:杯装之诗
-020:神铸赋形
-021:神铸赋形
-022:奔行世间
-023:暂别冬都
-024:陵薮市朝
-027:深秘之息
-028:浮生孰来
-031:烟火之邀
-032:鱼龙灯昼
-033:赤团开时
-036:杯装之诗
-037:暂别冬都
-040:陵薮市朝
-041:浪涌之瞬
-045:叶落风随
-048:白鹭之庭
-049:焰色天河
-052:影寂天下人
-053:浮岳虹珠
-061:鬼门斗宴
-065:出尘入世
-071:华紫樱绯
-076:苍流踏花
-081:素霓伣天
-091:巡御蘙荟-提纳里
-092:陵薮市朝-钟离
-093:神铸赋形-猎人贯虹
-097:雳裁冥昭-赛诺
-098:杯装之诗-温迪
-099:神铸赋形-赤沙终末
-0100:翩舞歈莲-妮露
-0103:月草的赐慧-纳西妲
-0109:余火变相-流浪者
-0115:敕诫枢谋-艾尔海森
-101:深秘之息-阿贝多
-101:神铸赋形-圣显绿箭
-121:迪希雅
\ No newline at end of file
+A007:初行者推荐祈愿
+A008:奔行世间
+A009:杯装之诗
+A010:黎明巡礼
+A011:南风之眷
+A012:靖妖傩舞
+A013:神铸赋形
+A015:闪焰的驻足
+A016:初行者推荐祈愿
+A017:奔行世间
+A018:闪焰的驻足
+A019:杯装之诗
+A020:神铸赋形
+A021:神铸赋形
+A022:奔行世间
+A023:暂别冬都
+A024:陵薮市朝
+A027:深秘之息
+A028:浮生孰来
+A031:烟火之邀
+A032:鱼龙灯昼
+A033:赤团开时
+A036:杯装之诗
+A037:暂别冬都
+A040:陵薮市朝
+A041:浪涌之瞬
+A045:叶落风随
+A048:白鹭之庭
+A049:焰色天河
+A052:影寂天下人
+A053:浮岳虹珠
+A061:鬼门斗宴
+A065:出尘入世
+A071:华紫樱绯
+A076:苍流踏花
+A081:素霓伣天
+A091:巡御蘙荟
+A097:雳裁冥昭
+A0100:翩舞歈莲
+A0103:月草的赐慧
+A0109:余火变相
+A0115:敕诫枢谋
+A0121:烈阳烁金
+A0130:心珠循琅
+A0145:光与影的戏术
+A0151:渊海界令
+A0154:劫中泛滥
+A0157:众水的颂诗
+A0163:刺玫的铭誓
+A0169:云府鹤行
+A0175:千云绘羽织
+A0181:炉边烬影
+B001:晨风之诗
diff --git a/Source/GrasscutterTools/Resources/zh-tw/GachaBannerPrefab.txt b/Source/GrasscutterTools/Resources/zh-tw/GachaBannerPrefab.txt
index 5a6678a..2edae03 100644
--- a/Source/GrasscutterTools/Resources/zh-tw/GachaBannerPrefab.txt
+++ b/Source/GrasscutterTools/Resources/zh-tw/GachaBannerPrefab.txt
@@ -1,45 +1,128 @@
-007:初行者推薦祈願
-008:奔行世間
-009:杯裝之詩
-010:黎明巡禮
-011:南風之眷
-012:靖妖儺舞
-013:神鑄賦形
-015:閃焰的駐足
-016:初行者推薦祈願
-017:奔行世間
-018:閃焰的駐足
-019:杯裝之詩
-020:神鑄賦形
-021:神鑄賦形
-022:奔行世間
-023:暫別冬都
-024:陵藪市朝
-027:深秘之息
-028:浮生孰來
-031:煙火之邀
-032:魚龍燈晝
-033:赤團開時
-036:杯裝之詩
-037:暫別冬都
-040:陵藪市朝
-041:浪湧之瞬
-045:葉落風隨
-048:白鷺之庭
-049:焰色天河
-052:影寂天下人
-053:浮岳虹珠
-061:鬼門斗宴
-065:出塵入世
-071:華紫櫻緋
-076:蒼流踏花
-081:素霓俔天
-091:巡禦蘙薈-提納里
-092:陵藪市朝-鍾離
-093:神鑄賦形-獵人貫虹
-097:靂裁冥昭-賽諾
-098:杯裝之詩-溫迪
-099:神鑄賦形-赤沙終末
-//100:翩舞歈蓮-妮露 // Error
-101:深秘之息-阿貝多
-101:神鑄賦形-聖顯綠箭
\ No newline at end of file
+A007:初行者推薦祈願
+A008:奔行世間
+A009:杯裝之詩
+A010:黎明巡禮
+A011:南風之眷
+A012:靖妖儺舞
+A013:神鑄賦形
+A015:閃焰的駐足
+A016:初行者推薦祈願
+A017:奔行世間
+A018:閃焰的駐足
+A019:杯裝之詩
+A020:神鑄賦形
+A021:神鑄賦形
+A022:奔行世間
+A023:暫別冬都
+A024:陵藪市朝
+A027:深秘之息
+A028:浮生孰來
+A031:煙火之邀
+A032:魚龍燈晝
+A033:赤團開時
+A036:杯裝之詩
+A037:暫別冬都
+A040:陵藪市朝
+A041:浪湧之瞬
+A045:葉落風隨
+A048:白鷺之庭
+A049:焰色天河
+A052:影寂天下人
+A053:浮岳虹珠
+A061:鬼門斗宴
+A065:出塵入世
+A071:華紫櫻緋
+A076:蒼流踏花
+A081:素霓俔天
+A091:巡禦蘙薈-提納里
+A092:陵藪市朝-鍾離
+A093:神鑄賦形-獵人貫虹
+A097:靂裁冥昭-賽諾
+A098:杯裝之詩-溫迪
+A099:神鑄賦形-赤沙終末
+A101:深秘之息-阿贝多
+A102:神铸赋形-圣显绿箭
+A103:月草的赐慧-纳西妲
+A104:焰色天河-宵宫
+A105:神铸赋形-千夜飞雷
+A106:华紫樱绯-八重神子
+A107:暂别冬都-达达利亚
+A108:神铸赋形-神乐冬极
+A109:余火变相-流浪者
+A110:鬼门斗宴-荒泷一斗
+A111:神铸赋形-图莱杜拉赤角
+A112:影寂天下人-雷电将军
+A113:苍流踏花-神里绫人
+A114:神铸赋形-薙草波乱
+A115:敕诫枢谋-艾尔海森
+A116:烟火之邀-魈
+A117:神铸赋形-裁叶萃光和璞鸢
+A118:赤团开时-胡桃
+A119:素霓伣天-夜兰
+A120:神铸赋形-护摩若水
+A121:迪希雅
+A122:赛诺
+A123:苇海信标/赤沙之杖
+A124:申鹤
+A125:神里绫华
+A126:雾切之回光/息灾
+A127:纳西妲
+A128:妮露
+A129:千夜浮梦/圣显之钥
+A130:白术
+A131:甘雨
+A132:碧落之珑/阿莫斯之弓
+A133:宵宫
+A134:八重神子
+A135:飞雷之弦振/神乐之真意
+A136:艾尔海森
+A137:枫原万叶
+A138:苍古自由之誓/裁叶萃光
+A139:优菈
+A140:可莉
+A141:松籁响起之时/四风原典
+A142:珊瑚宫心海
+A143:流浪者
+A144:不灭月华/图莱杜拉的回忆
+A145:林尼
+A146:夜兰
+A147:最初的大魔术/若水
+A148:钟离
+A149:公子
+A150:贯虹之槊/冬极白星
+A151:那维莱特
+A152:胡桃
+A153:万世流涌大典/护摩之杖
+A154:莱欧斯利
+A155:温迪
+A156:金流监督/终未嗟叹之诗
+A157:芙宁娜
+A158:白术
+A159:静水流涌之辉/碧落之珑
+A160:赛诺
+A161:神里绫人
+A162:波乱月白经津/赤沙之杖
+A163:娜维娅
+A164:神里绫华
+A165:裁断/雾切之回光
+A166:雷电将军
+A167:宵宫
+A168:薙草之稻光/飞雷之弦振
+A169:闲云
+A170:纳西妲
+A171:鹤鸣余音/千夜浮梦
+A172:魈
+A173:八重神子
+A174:和璞鸢/神乐之真意
+A175:千织
+A176:荒泷一斗
+A177:有乐御簾切/赤角石溃杵
+A178:那维莱特
+A179:枫原万叶
+A180:万世流涌大典/苍古自由之誓
+A181:阿蕾奇诺
+A182:林尼
+A183:赤月之形/最初的大魔术
+A184:流浪者
+A185:白术
+A186:图莱杜拉的回忆/碧落之珑
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/zh-tw/GachaBannerTitle.txt b/Source/GrasscutterTools/Resources/zh-tw/GachaBannerTitle.txt
index 5a6678a..320d399 100644
--- a/Source/GrasscutterTools/Resources/zh-tw/GachaBannerTitle.txt
+++ b/Source/GrasscutterTools/Resources/zh-tw/GachaBannerTitle.txt
@@ -1,45 +1,53 @@
-007:初行者推薦祈願
-008:奔行世間
-009:杯裝之詩
-010:黎明巡禮
-011:南風之眷
-012:靖妖儺舞
-013:神鑄賦形
-015:閃焰的駐足
-016:初行者推薦祈願
-017:奔行世間
-018:閃焰的駐足
-019:杯裝之詩
-020:神鑄賦形
-021:神鑄賦形
-022:奔行世間
-023:暫別冬都
-024:陵藪市朝
-027:深秘之息
-028:浮生孰來
-031:煙火之邀
-032:魚龍燈晝
-033:赤團開時
-036:杯裝之詩
-037:暫別冬都
-040:陵藪市朝
-041:浪湧之瞬
-045:葉落風隨
-048:白鷺之庭
-049:焰色天河
-052:影寂天下人
-053:浮岳虹珠
-061:鬼門斗宴
-065:出塵入世
-071:華紫櫻緋
-076:蒼流踏花
-081:素霓俔天
-091:巡禦蘙薈-提納里
-092:陵藪市朝-鍾離
-093:神鑄賦形-獵人貫虹
-097:靂裁冥昭-賽諾
-098:杯裝之詩-溫迪
-099:神鑄賦形-赤沙終末
-//100:翩舞歈蓮-妮露 // Error
-101:深秘之息-阿貝多
-101:神鑄賦形-聖顯綠箭
\ No newline at end of file
+A007:初行者推薦祈願
+A008:奔行世間
+A009:杯裝之詩
+A010:黎明巡禮
+A011:南風之眷
+A012:靖妖儺舞
+A013:神鑄賦形
+A015:閃焰的駐足
+A016:初行者推薦祈願
+A017:奔行世間
+A018:閃焰的駐足
+A019:杯裝之詩
+A020:神鑄賦形
+A021:神鑄賦形
+A022:奔行世間
+A023:暫別冬都
+A024:陵藪市朝
+A027:深秘之息
+A028:浮生孰來
+A031:煙火之邀
+A032:魚龍燈晝
+A033:赤團開時
+A036:杯裝之詩
+A037:暫別冬都
+A040:陵藪市朝
+A041:浪湧之瞬
+A045:葉落風隨
+A048:白鷺之庭
+A049:焰色天河
+A052:影寂天下人
+A053:浮嶽虹珠
+A061:鬼門鬥宴
+A065:出塵入世
+A071:華紫櫻緋
+A076:蒼流踏花
+A081:素霓俔天
+A091:巡禦翳薈
+A097:靂裁冥昭
+A0100:翩舞歈蓮
+A0103:月草的賜慧
+A0109:餘火變相
+A0115:敕誡樞謀
+A0121:烈陽爍金
+A0130:心珠循琅
+A0145:光與影的戲術
+A0151:淵海界令
+A0154:劫中泛濫
+A0157:眾水的頌詩
+A0163:刺玫的銘誓
+A0169:雲府鶴行
+A0175:千雲繪羽織
+A0181:爐邊燼影
+B001:晨風之詩