diff --git a/Source/GrasscutterTools/App.config b/Source/GrasscutterTools/App.config
index 6e22014..33800ae 100644
--- a/Source/GrasscutterTools/App.config
+++ b/Source/GrasscutterTools/App.config
@@ -58,6 +58,9 @@
0, 0
+
+
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.Designer.cs b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.Designer.cs
new file mode 100644
index 0000000..d55fe4a
--- /dev/null
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.Designer.cs
@@ -0,0 +1,771 @@
+
+namespace GrasscutterTools.Forms
+{
+ partial class FormGachaBannersEditor3
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGachaBannersEditor3));
+ System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+ System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+ System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ this.GrpBannerValues = new System.Windows.Forms.GroupBox();
+ this.CmbTitlePath = new System.Windows.Forms.ComboBox();
+ this.LblTitlePath = new System.Windows.Forms.Label();
+ this.NUDCostItemAmount10 = new System.Windows.Forms.NumericUpDown();
+ this.LblCostItemAmount10 = new System.Windows.Forms.Label();
+ this.NUDCostItemAmount1 = new System.Windows.Forms.NumericUpDown();
+ this.LblCostItemAmount1 = new System.Windows.Forms.Label();
+ this.ChkAutoStripRateUpFromFallback = new System.Windows.Forms.CheckBox();
+ this.LblOptions = new System.Windows.Forms.Label();
+ this.ChkRemoveC6FormPool = new System.Windows.Forms.CheckBox();
+ this.LnkOpenOldEditor = new System.Windows.Forms.LinkLabel();
+ this.DTPEndTime = new System.Windows.Forms.DateTimePicker();
+ this.DTPBeginTime = new System.Windows.Forms.DateTimePicker();
+ this.CmbPrefab = new System.Windows.Forms.ComboBox();
+ this.LblEventChance4Tip = new System.Windows.Forms.Label();
+ this.LblEventChance5Tip = new System.Windows.Forms.Label();
+ this.NUDEventChance4 = new System.Windows.Forms.NumericUpDown();
+ this.NUDEventChance5 = new System.Windows.Forms.NumericUpDown();
+ this.LblGachaType = new System.Windows.Forms.Label();
+ this.LblEventChance4 = new System.Windows.Forms.Label();
+ this.LblEventChance5 = new System.Windows.Forms.Label();
+ this.LblSortId = new System.Windows.Forms.Label();
+ this.NUDGachaType = new System.Windows.Forms.NumericUpDown();
+ this.NUDSortId = new System.Windows.Forms.NumericUpDown();
+ this.LblGachaTypeTip = new System.Windows.Forms.Label();
+ this.LblEndTime = new System.Windows.Forms.Label();
+ this.LblScheduleId = new System.Windows.Forms.Label();
+ this.LblBeginTime = new System.Windows.Forms.Label();
+ this.NUDScheduleId = new System.Windows.Forms.NumericUpDown();
+ this.LblScheduleIdTip = new System.Windows.Forms.Label();
+ this.CmbBannerType = new System.Windows.Forms.ComboBox();
+ this.LblSortIdTip = new System.Windows.Forms.Label();
+ this.LblBannerType = new System.Windows.Forms.Label();
+ this.RbCostItem224 = new System.Windows.Forms.RadioButton();
+ this.LblCostItem = new System.Windows.Forms.Label();
+ this.LblPrefabPath = new System.Windows.Forms.Label();
+ this.RbCostItem223 = new System.Windows.Forms.RadioButton();
+ this.GrpFallbackPool = new System.Windows.Forms.GroupBox();
+ this.ListFallbackItems = new System.Windows.Forms.ListView();
+ this.ColFallbackId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.ColFallbackName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.GrpUpPool = new System.Windows.Forms.GroupBox();
+ this.ListUpItems = new System.Windows.Forms.ListView();
+ this.ColUpId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.ColUpName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.GrpWeights = new System.Windows.Forms.GroupBox();
+ this.LnkWeightHelp = new System.Windows.Forms.LinkLabel();
+ this.TxtWeight4 = new System.Windows.Forms.TextBox();
+ this.TxtWeight5 = new System.Windows.Forms.TextBox();
+ this.LblWeight4 = new System.Windows.Forms.Label();
+ this.LblWeight5 = new System.Windows.Forms.Label();
+ this.GrpBalance = new System.Windows.Forms.GroupBox();
+ this.TxtPoolWeight4 = new System.Windows.Forms.TextBox();
+ this.TxtPoolWeight5 = new System.Windows.Forms.TextBox();
+ this.LblPoolWeight4 = new System.Windows.Forms.Label();
+ this.LblPoolWeight5 = new System.Windows.Forms.Label();
+ this.ChartWeights = new System.Windows.Forms.DataVisualization.Charting.Chart();
+ this.GrpBanners = new System.Windows.Forms.GroupBox();
+ this.ListBanners = new System.Windows.Forms.ListBox();
+ this.FLPBannersControl = new System.Windows.Forms.FlowLayoutPanel();
+ this.BtnAddOrUpdate = new System.Windows.Forms.Button();
+ this.BtnDelete = new System.Windows.Forms.Button();
+ this.label1 = new System.Windows.Forms.Label();
+ this.TxtBannersJsonPath = new System.Windows.Forms.TextBox();
+ this.BtnLoad = new System.Windows.Forms.Button();
+ this.BtnSave = new System.Windows.Forms.Button();
+ this.BtnClear = new System.Windows.Forms.Button();
+ this.GrpBannerValues.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount10)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDEventChance4)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDEventChance5)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDGachaType)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDSortId)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).BeginInit();
+ this.GrpFallbackPool.SuspendLayout();
+ this.GrpUpPool.SuspendLayout();
+ this.GrpWeights.SuspendLayout();
+ this.GrpBalance.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).BeginInit();
+ this.GrpBanners.SuspendLayout();
+ this.FLPBannersControl.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // GrpBannerValues
+ //
+ resources.ApplyResources(this.GrpBannerValues, "GrpBannerValues");
+ this.GrpBannerValues.Controls.Add(this.BtnAddOrUpdate);
+ this.GrpBannerValues.Controls.Add(this.CmbTitlePath);
+ this.GrpBannerValues.Controls.Add(this.LblTitlePath);
+ this.GrpBannerValues.Controls.Add(this.NUDCostItemAmount10);
+ this.GrpBannerValues.Controls.Add(this.LblCostItemAmount10);
+ this.GrpBannerValues.Controls.Add(this.NUDCostItemAmount1);
+ this.GrpBannerValues.Controls.Add(this.LblCostItemAmount1);
+ this.GrpBannerValues.Controls.Add(this.ChkAutoStripRateUpFromFallback);
+ this.GrpBannerValues.Controls.Add(this.LblOptions);
+ this.GrpBannerValues.Controls.Add(this.ChkRemoveC6FormPool);
+ this.GrpBannerValues.Controls.Add(this.LnkOpenOldEditor);
+ this.GrpBannerValues.Controls.Add(this.DTPEndTime);
+ this.GrpBannerValues.Controls.Add(this.DTPBeginTime);
+ this.GrpBannerValues.Controls.Add(this.CmbPrefab);
+ this.GrpBannerValues.Controls.Add(this.LblEventChance4Tip);
+ this.GrpBannerValues.Controls.Add(this.LblEventChance5Tip);
+ this.GrpBannerValues.Controls.Add(this.NUDEventChance4);
+ this.GrpBannerValues.Controls.Add(this.NUDEventChance5);
+ this.GrpBannerValues.Controls.Add(this.LblGachaType);
+ this.GrpBannerValues.Controls.Add(this.LblEventChance4);
+ this.GrpBannerValues.Controls.Add(this.LblEventChance5);
+ this.GrpBannerValues.Controls.Add(this.LblSortId);
+ this.GrpBannerValues.Controls.Add(this.NUDGachaType);
+ this.GrpBannerValues.Controls.Add(this.NUDSortId);
+ this.GrpBannerValues.Controls.Add(this.LblGachaTypeTip);
+ this.GrpBannerValues.Controls.Add(this.LblEndTime);
+ this.GrpBannerValues.Controls.Add(this.LblScheduleId);
+ this.GrpBannerValues.Controls.Add(this.LblBeginTime);
+ this.GrpBannerValues.Controls.Add(this.NUDScheduleId);
+ this.GrpBannerValues.Controls.Add(this.LblScheduleIdTip);
+ this.GrpBannerValues.Controls.Add(this.CmbBannerType);
+ this.GrpBannerValues.Controls.Add(this.LblSortIdTip);
+ this.GrpBannerValues.Controls.Add(this.LblBannerType);
+ this.GrpBannerValues.Controls.Add(this.RbCostItem224);
+ this.GrpBannerValues.Controls.Add(this.LblCostItem);
+ this.GrpBannerValues.Controls.Add(this.LblPrefabPath);
+ this.GrpBannerValues.Controls.Add(this.RbCostItem223);
+ this.GrpBannerValues.Name = "GrpBannerValues";
+ this.GrpBannerValues.TabStop = false;
+ //
+ // CmbTitlePath
+ //
+ this.CmbTitlePath.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.CmbTitlePath.FormattingEnabled = true;
+ resources.ApplyResources(this.CmbTitlePath, "CmbTitlePath");
+ this.CmbTitlePath.Name = "CmbTitlePath";
+ //
+ // LblTitlePath
+ //
+ resources.ApplyResources(this.LblTitlePath, "LblTitlePath");
+ this.LblTitlePath.Name = "LblTitlePath";
+ //
+ // NUDCostItemAmount10
+ //
+ resources.ApplyResources(this.NUDCostItemAmount10, "NUDCostItemAmount10");
+ this.NUDCostItemAmount10.Maximum = new decimal(new int[] {
+ 2147483647,
+ 0,
+ 0,
+ 0});
+ this.NUDCostItemAmount10.Name = "NUDCostItemAmount10";
+ this.NUDCostItemAmount10.Value = new decimal(new int[] {
+ 10,
+ 0,
+ 0,
+ 0});
+ //
+ // LblCostItemAmount10
+ //
+ resources.ApplyResources(this.LblCostItemAmount10, "LblCostItemAmount10");
+ this.LblCostItemAmount10.Name = "LblCostItemAmount10";
+ //
+ // NUDCostItemAmount1
+ //
+ resources.ApplyResources(this.NUDCostItemAmount1, "NUDCostItemAmount1");
+ this.NUDCostItemAmount1.Maximum = new decimal(new int[] {
+ 2147483647,
+ 0,
+ 0,
+ 0});
+ this.NUDCostItemAmount1.Name = "NUDCostItemAmount1";
+ this.NUDCostItemAmount1.Value = new decimal(new int[] {
+ 1,
+ 0,
+ 0,
+ 0});
+ //
+ // LblCostItemAmount1
+ //
+ resources.ApplyResources(this.LblCostItemAmount1, "LblCostItemAmount1");
+ this.LblCostItemAmount1.Name = "LblCostItemAmount1";
+ //
+ // ChkAutoStripRateUpFromFallback
+ //
+ resources.ApplyResources(this.ChkAutoStripRateUpFromFallback, "ChkAutoStripRateUpFromFallback");
+ this.ChkAutoStripRateUpFromFallback.Name = "ChkAutoStripRateUpFromFallback";
+ this.ChkAutoStripRateUpFromFallback.UseVisualStyleBackColor = true;
+ //
+ // LblOptions
+ //
+ resources.ApplyResources(this.LblOptions, "LblOptions");
+ this.LblOptions.Name = "LblOptions";
+ //
+ // ChkRemoveC6FormPool
+ //
+ resources.ApplyResources(this.ChkRemoveC6FormPool, "ChkRemoveC6FormPool");
+ this.ChkRemoveC6FormPool.Name = "ChkRemoveC6FormPool";
+ this.ChkRemoveC6FormPool.UseVisualStyleBackColor = true;
+ //
+ // LnkOpenOldEditor
+ //
+ resources.ApplyResources(this.LnkOpenOldEditor, "LnkOpenOldEditor");
+ this.LnkOpenOldEditor.Name = "LnkOpenOldEditor";
+ this.LnkOpenOldEditor.TabStop = true;
+ this.LnkOpenOldEditor.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkOpenOldEditor_LinkClicked);
+ //
+ // DTPEndTime
+ //
+ resources.ApplyResources(this.DTPEndTime, "DTPEndTime");
+ this.DTPEndTime.MaxDate = new System.DateTime(2038, 1, 19, 0, 0, 0, 0);
+ this.DTPEndTime.MinDate = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
+ this.DTPEndTime.Name = "DTPEndTime";
+ //
+ // DTPBeginTime
+ //
+ resources.ApplyResources(this.DTPBeginTime, "DTPBeginTime");
+ this.DTPBeginTime.MaxDate = new System.DateTime(2038, 1, 19, 0, 0, 0, 0);
+ this.DTPBeginTime.MinDate = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
+ this.DTPBeginTime.Name = "DTPBeginTime";
+ //
+ // CmbPrefab
+ //
+ this.CmbPrefab.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.CmbPrefab.FormattingEnabled = true;
+ resources.ApplyResources(this.CmbPrefab, "CmbPrefab");
+ this.CmbPrefab.Name = "CmbPrefab";
+ //
+ // LblEventChance4Tip
+ //
+ resources.ApplyResources(this.LblEventChance4Tip, "LblEventChance4Tip");
+ this.LblEventChance4Tip.Name = "LblEventChance4Tip";
+ //
+ // LblEventChance5Tip
+ //
+ resources.ApplyResources(this.LblEventChance5Tip, "LblEventChance5Tip");
+ this.LblEventChance5Tip.Name = "LblEventChance5Tip";
+ //
+ // NUDEventChance4
+ //
+ resources.ApplyResources(this.NUDEventChance4, "NUDEventChance4");
+ this.NUDEventChance4.Name = "NUDEventChance4";
+ this.NUDEventChance4.Value = new decimal(new int[] {
+ 50,
+ 0,
+ 0,
+ 0});
+ //
+ // NUDEventChance5
+ //
+ resources.ApplyResources(this.NUDEventChance5, "NUDEventChance5");
+ this.NUDEventChance5.Name = "NUDEventChance5";
+ this.NUDEventChance5.Value = new decimal(new int[] {
+ 50,
+ 0,
+ 0,
+ 0});
+ //
+ // LblGachaType
+ //
+ resources.ApplyResources(this.LblGachaType, "LblGachaType");
+ this.LblGachaType.Name = "LblGachaType";
+ //
+ // LblEventChance4
+ //
+ resources.ApplyResources(this.LblEventChance4, "LblEventChance4");
+ this.LblEventChance4.Name = "LblEventChance4";
+ //
+ // LblEventChance5
+ //
+ resources.ApplyResources(this.LblEventChance5, "LblEventChance5");
+ this.LblEventChance5.Name = "LblEventChance5";
+ //
+ // LblSortId
+ //
+ resources.ApplyResources(this.LblSortId, "LblSortId");
+ this.LblSortId.Name = "LblSortId";
+ //
+ // NUDGachaType
+ //
+ resources.ApplyResources(this.NUDGachaType, "NUDGachaType");
+ this.NUDGachaType.Maximum = new decimal(new int[] {
+ 10000,
+ 0,
+ 0,
+ 0});
+ this.NUDGachaType.Name = "NUDGachaType";
+ this.NUDGachaType.Value = new decimal(new int[] {
+ 400,
+ 0,
+ 0,
+ 0});
+ //
+ // NUDSortId
+ //
+ resources.ApplyResources(this.NUDSortId, "NUDSortId");
+ this.NUDSortId.Maximum = new decimal(new int[] {
+ 9999,
+ 0,
+ 0,
+ 0});
+ this.NUDSortId.Name = "NUDSortId";
+ this.NUDSortId.Value = new decimal(new int[] {
+ 1000,
+ 0,
+ 0,
+ 0});
+ //
+ // LblGachaTypeTip
+ //
+ resources.ApplyResources(this.LblGachaTypeTip, "LblGachaTypeTip");
+ this.LblGachaTypeTip.Name = "LblGachaTypeTip";
+ //
+ // LblEndTime
+ //
+ resources.ApplyResources(this.LblEndTime, "LblEndTime");
+ this.LblEndTime.Name = "LblEndTime";
+ //
+ // LblScheduleId
+ //
+ resources.ApplyResources(this.LblScheduleId, "LblScheduleId");
+ this.LblScheduleId.Name = "LblScheduleId";
+ //
+ // LblBeginTime
+ //
+ resources.ApplyResources(this.LblBeginTime, "LblBeginTime");
+ this.LblBeginTime.Name = "LblBeginTime";
+ //
+ // NUDScheduleId
+ //
+ resources.ApplyResources(this.NUDScheduleId, "NUDScheduleId");
+ this.NUDScheduleId.Maximum = new decimal(new int[] {
+ 10000,
+ 0,
+ 0,
+ 0});
+ this.NUDScheduleId.Name = "NUDScheduleId";
+ this.NUDScheduleId.Value = new decimal(new int[] {
+ 800,
+ 0,
+ 0,
+ 0});
+ //
+ // LblScheduleIdTip
+ //
+ resources.ApplyResources(this.LblScheduleIdTip, "LblScheduleIdTip");
+ this.LblScheduleIdTip.Name = "LblScheduleIdTip";
+ //
+ // CmbBannerType
+ //
+ this.CmbBannerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.CmbBannerType.FormattingEnabled = true;
+ this.CmbBannerType.Items.AddRange(new object[] {
+ resources.GetString("CmbBannerType.Items"),
+ resources.GetString("CmbBannerType.Items1"),
+ resources.GetString("CmbBannerType.Items2")});
+ resources.ApplyResources(this.CmbBannerType, "CmbBannerType");
+ this.CmbBannerType.Name = "CmbBannerType";
+ //
+ // LblSortIdTip
+ //
+ resources.ApplyResources(this.LblSortIdTip, "LblSortIdTip");
+ this.LblSortIdTip.Name = "LblSortIdTip";
+ //
+ // LblBannerType
+ //
+ resources.ApplyResources(this.LblBannerType, "LblBannerType");
+ this.LblBannerType.Name = "LblBannerType";
+ //
+ // RbCostItem224
+ //
+ resources.ApplyResources(this.RbCostItem224, "RbCostItem224");
+ this.RbCostItem224.Checked = true;
+ this.RbCostItem224.Name = "RbCostItem224";
+ this.RbCostItem224.TabStop = true;
+ this.RbCostItem224.UseVisualStyleBackColor = true;
+ //
+ // LblCostItem
+ //
+ resources.ApplyResources(this.LblCostItem, "LblCostItem");
+ this.LblCostItem.Name = "LblCostItem";
+ //
+ // LblPrefabPath
+ //
+ resources.ApplyResources(this.LblPrefabPath, "LblPrefabPath");
+ this.LblPrefabPath.Name = "LblPrefabPath";
+ //
+ // RbCostItem223
+ //
+ resources.ApplyResources(this.RbCostItem223, "RbCostItem223");
+ this.RbCostItem223.Name = "RbCostItem223";
+ this.RbCostItem223.TabStop = true;
+ this.RbCostItem223.UseVisualStyleBackColor = true;
+ //
+ // GrpFallbackPool
+ //
+ resources.ApplyResources(this.GrpFallbackPool, "GrpFallbackPool");
+ this.GrpFallbackPool.Controls.Add(this.ListFallbackItems);
+ this.GrpFallbackPool.Name = "GrpFallbackPool";
+ this.GrpFallbackPool.TabStop = false;
+ //
+ // ListFallbackItems
+ //
+ this.ListFallbackItems.CheckBoxes = true;
+ this.ListFallbackItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.ColFallbackId,
+ this.ColFallbackName});
+ resources.ApplyResources(this.ListFallbackItems, "ListFallbackItems");
+ this.ListFallbackItems.FullRowSelect = true;
+ this.ListFallbackItems.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups1"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups2"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups3"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups4")))});
+ this.ListFallbackItems.HideSelection = false;
+ this.ListFallbackItems.Name = "ListFallbackItems";
+ this.ListFallbackItems.UseCompatibleStateImageBehavior = false;
+ this.ListFallbackItems.View = System.Windows.Forms.View.Details;
+ //
+ // ColFallbackId
+ //
+ resources.ApplyResources(this.ColFallbackId, "ColFallbackId");
+ //
+ // ColFallbackName
+ //
+ resources.ApplyResources(this.ColFallbackName, "ColFallbackName");
+ //
+ // GrpUpPool
+ //
+ resources.ApplyResources(this.GrpUpPool, "GrpUpPool");
+ this.GrpUpPool.Controls.Add(this.ListUpItems);
+ this.GrpUpPool.Name = "GrpUpPool";
+ this.GrpUpPool.TabStop = false;
+ //
+ // ListUpItems
+ //
+ this.ListUpItems.CheckBoxes = true;
+ this.ListUpItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.ColUpId,
+ this.ColUpName});
+ resources.ApplyResources(this.ListUpItems, "ListUpItems");
+ this.ListUpItems.FullRowSelect = true;
+ this.ListUpItems.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups1"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups2"))),
+ ((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups3")))});
+ this.ListUpItems.HideSelection = false;
+ this.ListUpItems.Name = "ListUpItems";
+ this.ListUpItems.UseCompatibleStateImageBehavior = false;
+ this.ListUpItems.View = System.Windows.Forms.View.Details;
+ //
+ // ColUpId
+ //
+ resources.ApplyResources(this.ColUpId, "ColUpId");
+ //
+ // ColUpName
+ //
+ resources.ApplyResources(this.ColUpName, "ColUpName");
+ //
+ // GrpWeights
+ //
+ resources.ApplyResources(this.GrpWeights, "GrpWeights");
+ this.GrpWeights.Controls.Add(this.LnkWeightHelp);
+ this.GrpWeights.Controls.Add(this.TxtWeight4);
+ this.GrpWeights.Controls.Add(this.TxtWeight5);
+ this.GrpWeights.Controls.Add(this.LblWeight4);
+ this.GrpWeights.Controls.Add(this.LblWeight5);
+ this.GrpWeights.Name = "GrpWeights";
+ this.GrpWeights.TabStop = false;
+ //
+ // LnkWeightHelp
+ //
+ resources.ApplyResources(this.LnkWeightHelp, "LnkWeightHelp");
+ this.LnkWeightHelp.Name = "LnkWeightHelp";
+ this.LnkWeightHelp.TabStop = true;
+ this.LnkWeightHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkWeightHelp_LinkClicked);
+ //
+ // TxtWeight4
+ //
+ resources.ApplyResources(this.TxtWeight4, "TxtWeight4");
+ this.TxtWeight4.Name = "TxtWeight4";
+ //
+ // TxtWeight5
+ //
+ resources.ApplyResources(this.TxtWeight5, "TxtWeight5");
+ this.TxtWeight5.Name = "TxtWeight5";
+ //
+ // LblWeight4
+ //
+ resources.ApplyResources(this.LblWeight4, "LblWeight4");
+ this.LblWeight4.Name = "LblWeight4";
+ //
+ // LblWeight5
+ //
+ resources.ApplyResources(this.LblWeight5, "LblWeight5");
+ this.LblWeight5.Name = "LblWeight5";
+ //
+ // GrpBalance
+ //
+ resources.ApplyResources(this.GrpBalance, "GrpBalance");
+ this.GrpBalance.Controls.Add(this.TxtPoolWeight4);
+ this.GrpBalance.Controls.Add(this.TxtPoolWeight5);
+ this.GrpBalance.Controls.Add(this.LblPoolWeight4);
+ this.GrpBalance.Controls.Add(this.LblPoolWeight5);
+ this.GrpBalance.Name = "GrpBalance";
+ this.GrpBalance.TabStop = false;
+ //
+ // TxtPoolWeight4
+ //
+ resources.ApplyResources(this.TxtPoolWeight4, "TxtPoolWeight4");
+ this.TxtPoolWeight4.Name = "TxtPoolWeight4";
+ //
+ // TxtPoolWeight5
+ //
+ resources.ApplyResources(this.TxtPoolWeight5, "TxtPoolWeight5");
+ this.TxtPoolWeight5.Name = "TxtPoolWeight5";
+ //
+ // LblPoolWeight4
+ //
+ resources.ApplyResources(this.LblPoolWeight4, "LblPoolWeight4");
+ this.LblPoolWeight4.Name = "LblPoolWeight4";
+ //
+ // LblPoolWeight5
+ //
+ resources.ApplyResources(this.LblPoolWeight5, "LblPoolWeight5");
+ this.LblPoolWeight5.Name = "LblPoolWeight5";
+ //
+ // ChartWeights
+ //
+ chartArea1.AxisX.Minimum = 0D;
+ chartArea1.AxisY.Maximum = 100D;
+ chartArea1.AxisY.Minimum = 0D;
+ chartArea1.AxisY.Title = "%";
+ chartArea1.Name = "ChartArea1";
+ this.ChartWeights.ChartAreas.Add(chartArea1);
+ legend1.Name = "Legend1";
+ this.ChartWeights.Legends.Add(legend1);
+ resources.ApplyResources(this.ChartWeights, "ChartWeights");
+ this.ChartWeights.Name = "ChartWeights";
+ series1.ChartArea = "ChartArea1";
+ series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+ series1.Color = System.Drawing.Color.OrangeRed;
+ series1.Label = "(#VALX, #VAL)";
+ series1.Legend = "Legend1";
+ series1.LegendText = "5*";
+ series1.Name = "SeriesWeight5";
+ series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
+ series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
+ series2.ChartArea = "ChartArea1";
+ series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+ series2.Color = System.Drawing.Color.Purple;
+ series2.Label = "(#VALX, #VAL)";
+ series2.Legend = "Legend1";
+ series2.LegendText = "4*";
+ series2.Name = "SeriesWeight4";
+ series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
+ series2.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
+ this.ChartWeights.Series.Add(series1);
+ this.ChartWeights.Series.Add(series2);
+ //
+ // GrpBanners
+ //
+ resources.ApplyResources(this.GrpBanners, "GrpBanners");
+ this.GrpBanners.Controls.Add(this.ListBanners);
+ this.GrpBanners.Controls.Add(this.FLPBannersControl);
+ this.GrpBanners.Name = "GrpBanners";
+ this.GrpBanners.TabStop = false;
+ //
+ // ListBanners
+ //
+ resources.ApplyResources(this.ListBanners, "ListBanners");
+ this.ListBanners.FormattingEnabled = true;
+ this.ListBanners.Name = "ListBanners";
+ this.ListBanners.SelectedIndexChanged += new System.EventHandler(this.ListBanners_SelectedIndexChanged);
+ //
+ // FLPBannersControl
+ //
+ this.FLPBannersControl.Controls.Add(this.BtnDelete);
+ this.FLPBannersControl.Controls.Add(this.BtnClear);
+ resources.ApplyResources(this.FLPBannersControl, "FLPBannersControl");
+ this.FLPBannersControl.Name = "FLPBannersControl";
+ //
+ // BtnAddOrUpdate
+ //
+ resources.ApplyResources(this.BtnAddOrUpdate, "BtnAddOrUpdate");
+ this.BtnAddOrUpdate.Name = "BtnAddOrUpdate";
+ this.BtnAddOrUpdate.UseVisualStyleBackColor = true;
+ this.BtnAddOrUpdate.Click += new System.EventHandler(this.BtnAddOrUpdate_Click);
+ //
+ // BtnDelete
+ //
+ resources.ApplyResources(this.BtnDelete, "BtnDelete");
+ this.BtnDelete.Name = "BtnDelete";
+ this.BtnDelete.UseVisualStyleBackColor = true;
+ this.BtnDelete.Click += new System.EventHandler(this.BtnDelete_Click);
+ //
+ // label1
+ //
+ resources.ApplyResources(this.label1, "label1");
+ this.label1.Name = "label1";
+ //
+ // TxtBannersJsonPath
+ //
+ resources.ApplyResources(this.TxtBannersJsonPath, "TxtBannersJsonPath");
+ this.TxtBannersJsonPath.Name = "TxtBannersJsonPath";
+ //
+ // BtnLoad
+ //
+ resources.ApplyResources(this.BtnLoad, "BtnLoad");
+ this.BtnLoad.Name = "BtnLoad";
+ this.BtnLoad.UseVisualStyleBackColor = true;
+ this.BtnLoad.Click += new System.EventHandler(this.BtnLoad_Click);
+ //
+ // BtnSave
+ //
+ resources.ApplyResources(this.BtnSave, "BtnSave");
+ this.BtnSave.Name = "BtnSave";
+ this.BtnSave.UseVisualStyleBackColor = true;
+ this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click);
+ //
+ // BtnClear
+ //
+ resources.ApplyResources(this.BtnClear, "BtnClear");
+ this.BtnClear.Name = "BtnClear";
+ this.BtnClear.UseVisualStyleBackColor = true;
+ this.BtnClear.Click += new System.EventHandler(this.BtnClear_Click);
+ //
+ // FormGachaBannersEditor3
+ //
+ resources.ApplyResources(this, "$this");
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.ChartWeights);
+ this.Controls.Add(this.BtnSave);
+ this.Controls.Add(this.BtnLoad);
+ this.Controls.Add(this.TxtBannersJsonPath);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.GrpBanners);
+ this.Controls.Add(this.GrpBalance);
+ this.Controls.Add(this.GrpWeights);
+ this.Controls.Add(this.GrpFallbackPool);
+ this.Controls.Add(this.GrpUpPool);
+ this.Controls.Add(this.GrpBannerValues);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+ this.Name = "FormGachaBannersEditor3";
+ this.GrpBannerValues.ResumeLayout(false);
+ this.GrpBannerValues.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount10)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDEventChance4)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDEventChance5)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDGachaType)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDSortId)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).EndInit();
+ this.GrpFallbackPool.ResumeLayout(false);
+ this.GrpUpPool.ResumeLayout(false);
+ this.GrpWeights.ResumeLayout(false);
+ this.GrpWeights.PerformLayout();
+ this.GrpBalance.ResumeLayout(false);
+ this.GrpBalance.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).EndInit();
+ this.GrpBanners.ResumeLayout(false);
+ this.FLPBannersControl.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.GroupBox GrpBannerValues;
+ private System.Windows.Forms.Label LblEventChance5Tip;
+ private System.Windows.Forms.NumericUpDown NUDEventChance5;
+ private System.Windows.Forms.Label LblGachaType;
+ private System.Windows.Forms.Label LblEventChance5;
+ private System.Windows.Forms.Label LblSortId;
+ private System.Windows.Forms.NumericUpDown NUDGachaType;
+ private System.Windows.Forms.NumericUpDown NUDSortId;
+ private System.Windows.Forms.Label LblGachaTypeTip;
+ private System.Windows.Forms.Label LblEndTime;
+ private System.Windows.Forms.Label LblScheduleId;
+ private System.Windows.Forms.Label LblBeginTime;
+ private System.Windows.Forms.NumericUpDown NUDScheduleId;
+ private System.Windows.Forms.Label LblScheduleIdTip;
+ private System.Windows.Forms.ComboBox CmbBannerType;
+ private System.Windows.Forms.Label LblSortIdTip;
+ private System.Windows.Forms.Label LblBannerType;
+ private System.Windows.Forms.RadioButton RbCostItem224;
+ private System.Windows.Forms.Label LblCostItem;
+ private System.Windows.Forms.Label LblPrefabPath;
+ private System.Windows.Forms.RadioButton RbCostItem223;
+ private System.Windows.Forms.GroupBox GrpFallbackPool;
+ private System.Windows.Forms.GroupBox GrpUpPool;
+ private System.Windows.Forms.ComboBox CmbPrefab;
+ private System.Windows.Forms.Label LblEventChance4;
+ private System.Windows.Forms.Label LblEventChance4Tip;
+ private System.Windows.Forms.NumericUpDown NUDEventChance4;
+ private System.Windows.Forms.DateTimePicker DTPEndTime;
+ private System.Windows.Forms.DateTimePicker DTPBeginTime;
+ private System.Windows.Forms.ListView ListFallbackItems;
+ private System.Windows.Forms.ListView ListUpItems;
+ private System.Windows.Forms.ColumnHeader ColFallbackId;
+ private System.Windows.Forms.ColumnHeader ColFallbackName;
+ private System.Windows.Forms.ColumnHeader ColUpId;
+ private System.Windows.Forms.ColumnHeader ColUpName;
+ private System.Windows.Forms.GroupBox GrpWeights;
+ private System.Windows.Forms.GroupBox GrpBalance;
+ private System.Windows.Forms.TextBox TxtWeight4;
+ private System.Windows.Forms.TextBox TxtWeight5;
+ private System.Windows.Forms.Label LblWeight4;
+ private System.Windows.Forms.Label LblWeight5;
+ private System.Windows.Forms.LinkLabel LnkWeightHelp;
+ private System.Windows.Forms.LinkLabel LnkOpenOldEditor;
+ private System.Windows.Forms.TextBox TxtPoolWeight4;
+ private System.Windows.Forms.TextBox TxtPoolWeight5;
+ private System.Windows.Forms.Label LblPoolWeight4;
+ private System.Windows.Forms.Label LblPoolWeight5;
+ private System.Windows.Forms.CheckBox ChkRemoveC6FormPool;
+ private System.Windows.Forms.CheckBox ChkAutoStripRateUpFromFallback;
+ private System.Windows.Forms.Label LblOptions;
+ private System.Windows.Forms.DataVisualization.Charting.Chart ChartWeights;
+ private System.Windows.Forms.GroupBox GrpBanners;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox TxtBannersJsonPath;
+ private System.Windows.Forms.Button BtnLoad;
+ private System.Windows.Forms.Button BtnSave;
+ private System.Windows.Forms.FlowLayoutPanel FLPBannersControl;
+ private System.Windows.Forms.Button BtnAddOrUpdate;
+ private System.Windows.Forms.Button BtnDelete;
+ private System.Windows.Forms.NumericUpDown NUDCostItemAmount10;
+ private System.Windows.Forms.Label LblCostItemAmount10;
+ private System.Windows.Forms.NumericUpDown NUDCostItemAmount1;
+ private System.Windows.Forms.Label LblCostItemAmount1;
+ private System.Windows.Forms.ListBox ListBanners;
+ private System.Windows.Forms.ComboBox CmbTitlePath;
+ private System.Windows.Forms.Label LblTitlePath;
+ private System.Windows.Forms.Button BtnClear;
+ }
+}
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs
new file mode 100644
index 0000000..25a14ea
--- /dev/null
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.cs
@@ -0,0 +1,505 @@
+/**
+ * Grasscutter Tools
+ * Copyright (C) 2022 jie65535
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ *
+ **/
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+using GrasscutterTools.Game;
+using GrasscutterTools.Game.Drop;
+using GrasscutterTools.Game.Gacha;
+using GrasscutterTools.Properties;
+
+using Newtonsoft.Json;
+
+namespace GrasscutterTools.Forms
+{
+ ///
+ /// 卡池编辑器
+ ///
+ public partial class FormGachaBannersEditor3 : Form
+ {
+ #region - 成员 -
+
+ private List Banners;
+
+ #endregion
+
+ #region - 构造与窗体事件 -
+
+ public FormGachaBannersEditor3()
+ {
+ InitializeComponent();
+
+ Icon = Resources.IconGrasscutter;
+ CmbBannerType.SelectedIndex = 0;
+ InitBannerPrefab();
+ InitCheckedListBoxs();
+
+ ShowBanner(new GachaBanner3());
+ }
+
+ private void InitBannerPrefab()
+ {
+ CmbPrefab.Items.Clear();
+ CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
+ CmbTitlePath.Items.Clear();
+ CmbTitlePath.Items.AddRange(GameData.GachaBannerTitles.Names);
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ try
+ {
+ // 加载文件路径
+ var path = Settings.Default.BannersJsonPath;
+ TxtBannersJsonPath.Text = path;
+ if (!string.IsNullOrEmpty(path) && File.Exists(path))
+ LoadBanners(File.ReadAllText(path));
+ else
+ LoadBanners(Encoding.UTF8.GetString(Resources.Banners));
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ protected override void OnFormClosed(FormClosedEventArgs e)
+ {
+ // 保存文件路径
+ Settings.Default.BannersJsonPath = TxtBannersJsonPath.Text;
+ Settings.Default.Save();
+
+ base.OnFormClosed(e);
+ }
+
+ private void LnkWeightHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ System.Diagnostics.Process.Start("https://github.com/Grasscutters/Grasscutter/pull/639");
+ }
+
+ private void LnkOpenOldEditor_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ new FormGachaBannerEditor().ShowDialog();
+ }
+
+ #endregion
+
+ #region - Banners.json 文件相关 -
+
+
+ ///
+ /// 加载按钮点击时触发
+ ///
+ private void BtnLoad_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ var path = TxtBannersJsonPath.Text.Trim();
+ if (path == string.Empty)
+ {
+ var dialog = new OpenFileDialog
+ {
+ FileName = "Banners.json",
+ Filter = "Banners.Json (*.json)|*.json|All files (*.*)|*.*",
+ };
+ var result = dialog.ShowDialog();
+ if (result == DialogResult.OK)
+ path = TxtBannersJsonPath.Text = dialog.FileName;
+ else
+ return;
+ }
+
+ LoadBanners(File.ReadAllText(path));
+ MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ ///
+ /// 保存按钮点击时触发
+ ///
+ private void BtnSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ var path = TxtBannersJsonPath.Text.Trim();
+ if (path == string.Empty)
+ {
+ var dialog = new SaveFileDialog
+ {
+ FileName = "Banners.json",
+ Filter = "Banners.json (*.json)|*.json|All files (*.*)|*.*",
+ };
+ var result = dialog.ShowDialog();
+ if (result == DialogResult.OK)
+ path = TxtBannersJsonPath.Text = dialog.FileName;
+ else
+ return;
+ }
+
+ var json = JsonConvert.SerializeObject(Banners, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore })
+ .Replace(",\"", ",\r\n \"").Replace("{\"", "{\r\n \"").Replace("\"}", "\"\r\n}");
+ File.WriteAllText(path, json);
+ MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ #endregion
+
+ #region - 卡池列表 -
+
+ ///
+ /// 从指定Json中加载卡池
+ ///
+ /// Banner.json 内容
+ private void LoadBanners(string bannersJson)
+ {
+ // 反序列化
+ Banners = JsonConvert.DeserializeObject>(bannersJson);
+ ShowBanners();
+ }
+
+ ///
+ /// 显示当前卡池列表
+ ///
+ private void ShowBanners()
+ {
+ ListBanners.BeginUpdate();
+ ListBanners.Items.Clear();
+ ListBanners.Items.AddRange(Banners.ToArray());
+ ListBanners.EndUpdate();
+ }
+
+ ///
+ /// 卡池列表选中项改变时触发
+ ///
+ private void ListBanners_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (ListBanners.SelectedIndex < 0) return;
+ ShowBanner(ListBanners.SelectedItem as GachaBanner3);
+ }
+
+ ///
+ /// 点击添加或更新卡池按钮时触发
+ ///
+ private void BtnAddOrUpdate_Click(object sender, EventArgs e)
+ {
+ var banner = ParseBanner();
+ var i = Banners.FindIndex(it => it.GachaType == banner.GachaType && it.ScheduleId == banner.ScheduleId);
+ if (i >= 0)
+ {
+ Banners[i] = banner;
+ ListBanners.Items[i] = banner;
+ }
+ else
+ {
+ Banners.Add(banner);
+ ListBanners.Items.Add(banner);
+ }
+ }
+
+ ///
+ /// 点击删除卡池按钮时触发
+ ///
+ private void BtnDelete_Click(object sender, EventArgs e)
+ {
+ if (ListBanners.SelectedIndex < 0) return;
+ if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
+ {
+ Banners.RemoveAt(ListBanners.SelectedIndex);
+ ListBanners.Items.RemoveAt(ListBanners.SelectedIndex);
+ }
+ }
+
+ ///
+ /// 点击清空卡池按钮时触发
+ ///
+ private void BtnClear_Click(object sender, EventArgs e)
+ {
+ if (ListBanners.Items.Count < 0) return;
+ if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
+ {
+ Banners.Clear();
+ ListBanners.Items.Clear();
+ }
+ }
+
+ #endregion
+
+ #region - 卡池 -
+
+ private void InitCheckedListBoxs()
+ {
+ ListFallbackItems.BeginUpdate();
+ var a5 = ListFallbackItems.Groups["GroupA5"];
+ var a4 = ListFallbackItems.Groups["GroupA4"];
+ var w5 = ListFallbackItems.Groups["GroupW5"];
+ var w4 = ListFallbackItems.Groups["GroupW4"];
+ var w3 = ListFallbackItems.Groups["GroupW3"];
+ var avatars = GetAvatarsByColor("5")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a5) { ForeColor = Color.OrangeRed })
+ .Concat(GetAvatarsByColor("4")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a4) { ForeColor = Color.Purple }));
+ var weapons = GetWeaponsByColor("yellow")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w5) { ForeColor = Color.OrangeRed })
+ .Concat(GetWeaponsByColor("purple")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w4) { ForeColor = Color.Purple }))
+ .Concat(GetWeaponsByColor("blue")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w3) { ForeColor = Color.Blue }));
+ ListFallbackItems.Items.Clear();
+ ListFallbackItems.Items.AddRange(avatars.Concat(weapons).ToArray());
+
+ ListUpItems.BeginUpdate();
+ var ua5 = ListUpItems.Groups["GroupUpA5"];
+ var ua4 = ListUpItems.Groups["GroupUpA4"];
+ var uw5 = ListUpItems.Groups["GroupUpW5"];
+ var uw4 = ListUpItems.Groups["GroupUpW4"];
+ var upAvatars = GetAvatarsByColor("5")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua5) { ForeColor = Color.OrangeRed })
+ .Concat(GetAvatarsByColor("4")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua4) { ForeColor = Color.Purple }));
+ var upWeapons = GetWeaponsByColor("yellow")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, uw5) { ForeColor = Color.OrangeRed })
+ .Concat(GetWeaponsByColor("purple")
+ .Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, uw4) { ForeColor = Color.Purple }));
+ ListUpItems.Items.Clear();
+ ListUpItems.Items.AddRange(upAvatars.Concat(upWeapons).ToArray());
+
+ ListFallbackItems.EndUpdate();
+ ListUpItems.EndUpdate();
+ }
+
+ private IEnumerable<(int, string)> GetAvatarsByColor(string color)
+ {
+ for (int i = 0; i < GameData.AvatarColors.Count; i++)
+ {
+ if (GameData.AvatarColors.Names[i] == color)
+ {
+ var id = GameData.AvatarColors.Ids[i];
+ var index = Array.IndexOf(GameData.Avatars.Ids, id);
+ if (index >= 0)
+ yield return (id, GameData.Avatars.Names[index]);
+ }
+ }
+ }
+
+ private IEnumerable<(int, string)> GetWeaponsByColor(string color)
+ {
+ for (int i = 0; i < GameData.WeaponColors.Count; i++)
+ {
+ if (GameData.WeaponColors.Names[i] == color)
+ {
+ var id = GameData.WeaponColors.Ids[i];
+ var index = Array.IndexOf(GameData.Weapons.Ids, id);
+ if (index >= 0)
+ yield return (id, GameData.Weapons.Names[index]);
+ }
+ }
+ }
+
+ private void InitItems(GachaBanner3 banner)
+ {
+ var f = banner.FallbackItems3
+ .Concat(banner.FallbackItems4Pool1)
+ .Concat(banner.FallbackItems4Pool2)
+ .Concat(banner.FallbackItems5Pool1)
+ .Concat(banner.FallbackItems5Pool2)
+ .ToArray();
+ foreach (ListViewItem item in ListFallbackItems.Items)
+ item.Checked = Array.IndexOf(f, int.Parse(item.Text)) >= 0;
+
+ var u = banner.RateUpItems4.Concat(banner.RateUpItems5).ToArray();
+ foreach (ListViewItem item in ListUpItems.Items)
+ item.Checked = Array.IndexOf(u, int.Parse(item.Text)) >= 0;
+ }
+
+ private IEnumerable GetCheckedItems(ListView list, ListViewGroup group)
+ {
+ foreach (ListViewItem item in list.CheckedItems)
+ if (item.Group == group)
+ yield return int.Parse(item.Text);
+ }
+
+ #endregion - 卡池 -
+
+ #region - 权重 -
+
+ private struct GachaWeight
+ {
+ public int Count;
+ public int Weight;
+
+ public GachaWeight(int count, int weight)
+ {
+ Count = count;
+ Weight = weight;
+ }
+ }
+
+ private void InitWeights(GachaBanner3 banner)
+ {
+ TxtWeight5.Text = '[' + string.Join(", ", SelectWeights(banner.Weights5).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
+ TxtWeight4.Text = '[' + string.Join(", ", SelectWeights(banner.Weights4).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
+ TxtPoolWeight5.Text = '[' + string.Join(", ", SelectWeights(banner.PoolBalanceWeights5).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
+ TxtPoolWeight4.Text = '[' + string.Join(", ", SelectWeights(banner.PoolBalanceWeights4).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
+
+ ChartWeights.SuspendLayout();
+ ChartWeights.Series[0].Points.Clear();
+ foreach (var w in SelectWeights(banner.Weights5))
+ ChartWeights.Series[0].Points.AddXY(w.Count, w.Weight / 100.0);
+ ChartWeights.Series[1].Points.Clear();
+ foreach (var w in SelectWeights(banner.Weights4))
+ ChartWeights.Series[1].Points.AddXY(w.Count, w.Weight / 100.0);
+ ChartWeights.ResumeLayout();
+ }
+
+ private IEnumerable SelectWeights(int[,] weights)
+ {
+ for (int i = 0; i < weights.GetLength(0); i++)
+ yield return new GachaWeight(weights[i, 0], weights[i, 1]);
+ }
+
+ private int[,] GetWeights(string weights)
+ {
+ return JsonConvert.DeserializeObject(weights);
+ }
+
+ #endregion - 权重 -
+
+ #region - 卡池参数 -
+
+ ///
+ /// 显示指定卡池参数
+ ///
+ /// 卡池对象
+ private void ShowBanner(GachaBanner3 banner)
+ {
+ try
+ {
+ 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))
+ 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))
+ CmbTitlePath.SelectedIndex = -1;
+ else
+ CmbTitlePath.SelectedIndex = Array.IndexOf(GameData.GachaBannerTitles.Ids, titleId);
+ RbCostItem224.Checked = banner.CostItemId == 224;
+ RbCostItem223.Checked = banner.CostItemId == 223;
+ NUDCostItemAmount1.Value = banner.CoseItemAmount;
+ NUDCostItemAmount10.Value = banner.CoseItemAmount10;
+ DTPBeginTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.BeginTime).DateTime;
+ DTPEndTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.EndTime).DateTime;
+ NUDSortId.Value = banner.SortId;
+ NUDEventChance5.Value = banner.EventChance5;
+ NUDEventChance4.Value = banner.EventChance4;
+ ChkRemoveC6FormPool.Checked = banner.RemoveC6FromPool;
+ ChkAutoStripRateUpFromFallback.Checked = banner.AutoStripRateUpFromFallback;
+ InitItems(banner);
+ InitWeights(banner);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("UI更新失败:" + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private GachaBanner3 ParseBanner()
+ {
+ if (CmbBannerType.SelectedIndex < 0)
+ {
+ MessageBox.Show("请选择奖池类型", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return null;
+ }
+
+ if (CmbPrefab.SelectedIndex < 0 || CmbTitlePath.SelectedIndex < 0)
+ {
+ MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return null;
+ }
+
+ var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
+ var titleId = GameData.GachaBannerTitles.Ids[CmbTitlePath.SelectedIndex];
+ 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",
+ CostItemId = RbCostItem224.Checked ? 224 : 223,
+ CoseItemAmount = (int)NUDCostItemAmount1.Value,
+ CostItemId10 = RbCostItem224.Checked ? 224 : 223,
+ CoseItemAmount10 = (int)NUDCostItemAmount10.Value,
+ BeginTime = (int)new DateTimeOffset(DTPBeginTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
+ EndTime = (int)new DateTimeOffset(DTPEndTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
+ SortId = (int)NUDSortId.Value,
+ EventChance5 = (int)NUDEventChance5.Value,
+ EventChance4 = (int)NUDEventChance4.Value,
+
+ RateUpItems4 = GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpA4"])
+ .Concat(GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpW4"]))
+ .ToArray(),
+ RateUpItems5 = GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpA5"])
+ .Concat(GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpW5"]))
+ .ToArray(),
+
+ FallbackItems3 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupA3"])
+ .Concat(GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupW3"]))
+ .ToArray(),
+ FallbackItems4Pool1 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupA4"]).ToArray(),
+ FallbackItems4Pool2 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupW4"]).ToArray(),
+ FallbackItems5Pool1 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupA5"]).ToArray(),
+ FallbackItems5Pool2 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupW5"]).ToArray(),
+
+ RemoveC6FromPool = ChkRemoveC6FormPool.Checked,
+ AutoStripRateUpFromFallback = ChkAutoStripRateUpFromFallback.Checked,
+
+ Weights4 = GetWeights(TxtWeight4.Text),
+ Weights5 = GetWeights(TxtWeight5.Text),
+ PoolBalanceWeights4 = GetWeights(TxtPoolWeight4.Text),
+ PoolBalanceWeights5 = GetWeights(TxtPoolWeight5.Text),
+ };
+ return banner;
+ }
+
+
+ #endregion - 卡池参数 -
+
+ }
+}
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.en-us.resx b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.en-us.resx
new file mode 100644
index 0000000..3bfa4d2
--- /dev/null
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.en-us.resx
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ 112, 287
+
+
+ 225, 21
+
+
+ Auto Strip Rate Up From Fall back
+
+
+ 60, 260
+
+
+ 46, 17
+
+
+ Optins
+
+
+ 157, 21
+
+
+ Remove C6 Form Pool
+
+
+ 102, 17
+
+
+ Open old editor
+
+
+ 200, 233
+
+
+ 96, 17
+
+
+ Event Chance 4
+
+
+ 10, 233
+
+
+ 96, 17
+
+
+ Event Chance 5
+
+
+ 72, 204
+
+
+ Sort
+
+
+ 123, 17
+
+
+ Increment from 400
+
+
+ 62, 17
+
+
+ End Time
+
+
+ 32, 175
+
+
+ 73, 17
+
+
+ Begin Time
+
+
+ 49, 17
+
+
+ Unique
+
+
+ Standard Wish
+
+
+ Character Event Wish
+
+
+ Weapon Event Wish
+
+
+ 76, 17
+
+
+ Show order
+
+
+ 25, 87
+
+
+ 81, 17
+
+
+ Banner Type
+
+
+ 104, 21
+
+
+ Acquaint Fate
+
+
+ 41, 148
+
+
+ 64, 17
+
+
+ Cost Item
+
+
+ 59, 118
+
+
+ 46, 17
+
+
+ Prefab
+
+
+ 222, 146
+
+
+ 119, 21
+
+
+ Intertwined Fate
+
+
+ Banner
+
+
+ Fallback Pool
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA0zLXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
+
+
+
+ Up Pool
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
+
+
+
+ 85, 23
+
+
+ Gen Json
+
+
+ 409, 201
+
+
+ 85, 23
+
+
+ Parse Json
+
+
+ Gacha weights
+
+
+ 399, 0
+
+
+ 35, 17
+
+
+ Help
+
+
+ 40, 61
+
+
+ 66, 17
+
+
+ Weights 4
+
+
+ 40, 32
+
+
+ 66, 17
+
+
+ Weights 5
+
+
+ Character and weapon balance (only mixed pools work)
+
+
+ 16, 61
+
+
+ 90, 17
+
+
+ Pool Weight 4
+
+
+ 16, 32
+
+
+ 90, 17
+
+
+ Pool Weight 5
+
+
+ Weight Chart
+
+
+ Gacha Banner Editor
+
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.resx b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.resx
new file mode 100644
index 0000000..2661897
--- /dev/null
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.resx
@@ -0,0 +1,1896 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ Top, Bottom, Right
+
+
+
+ 170, 328
+
+
+ 100, 23
+
+
+
+ 35
+
+
+ √ 添加或更新
+
+
+ BtnAddOrUpdate
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 0
+
+
+ 302, 115
+
+
+ 110, 25
+
+
+ 11
+
+
+ CmbTitlePath
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 1
+
+
+ True
+
+
+ 240, 118
+
+
+ 56, 17
+
+
+ 10
+
+
+ 封面标题
+
+
+ LblTitlePath
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 2
+
+
+ 302, 173
+
+
+ 110, 23
+
+
+ 18
+
+
+ NUDCostItemAmount10
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 3
+
+
+ True
+
+
+ 240, 175
+
+
+ 56, 17
+
+
+ 17
+
+
+ 十连消耗
+
+
+ LblCostItemAmount10
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 4
+
+
+ 112, 173
+
+
+ 110, 23
+
+
+ 16
+
+
+ NUDCostItemAmount1
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 5
+
+
+ True
+
+
+ 50, 175
+
+
+ 56, 17
+
+
+ 15
+
+
+ 单抽消耗
+
+
+ LblCostItemAmount1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 6
+
+
+ True
+
+
+ 217, 289
+
+
+ 151, 21
+
+
+ 34
+
+
+ 自动避免UP被基础抽中
+
+
+ ChkAutoStripRateUpFromFallback
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 7
+
+
+ True
+
+
+ 74, 290
+
+
+ 32, 17
+
+
+ 32
+
+
+ 选项
+
+
+ LblOptions
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 8
+
+
+ True
+
+
+ 112, 289
+
+
+ 99, 21
+
+
+ 33
+
+
+ 避免命座溢出
+
+
+ ChkRemoveC6FormPool
+
+
+ System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 9
+
+
+ True
+
+
+ 6, 331
+
+
+ 104, 17
+
+
+ 36
+
+
+ 打开旧版本编辑器
+
+
+ LnkOpenOldEditor
+
+
+ System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 10
+
+
+ 302, 202
+
+
+ 110, 23
+
+
+ 22
+
+
+ DTPEndTime
+
+
+ System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 11
+
+
+ 112, 202
+
+
+ 110, 23
+
+
+ 20
+
+
+ DTPBeginTime
+
+
+ System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 12
+
+
+ 112, 115
+
+
+ 110, 25
+
+
+ 9
+
+
+ CmbPrefab
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 13
+
+
+ True
+
+
+ NoControl
+
+
+ 371, 262
+
+
+ 19, 17
+
+
+ 31
+
+
+ %
+
+
+ LblEventChance4Tip
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 14
+
+
+ True
+
+
+ 181, 262
+
+
+ 19, 17
+
+
+ 28
+
+
+ %
+
+
+ LblEventChance5Tip
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 15
+
+
+ 302, 260
+
+
+ 63, 23
+
+
+ 30
+
+
+ NUDEventChance4
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 16
+
+
+ 112, 260
+
+
+ 63, 23
+
+
+ 27
+
+
+ NUDEventChance5
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 17
+
+
+ True
+
+
+ 34, 28
+
+
+ 72, 17
+
+
+ 0
+
+
+ GachaType
+
+
+ LblGachaType
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 18
+
+
+ True
+
+
+ NoControl
+
+
+ 221, 262
+
+
+ 75, 17
+
+
+ 29
+
+
+ 4星活动爆率
+
+
+ LblEventChance4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 19
+
+
+ True
+
+
+ 31, 262
+
+
+ 75, 17
+
+
+ 26
+
+
+ 5星活动爆率
+
+
+ LblEventChance5
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 20
+
+
+ True
+
+
+ 74, 233
+
+
+ 32, 17
+
+
+ 23
+
+
+ 顺序
+
+
+ LblSortId
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 21
+
+
+ 112, 26
+
+
+ 100, 23
+
+
+ 1
+
+
+ NUDGachaType
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 22
+
+
+ 112, 231
+
+
+ 100, 23
+
+
+ 24
+
+
+ NUDSortId
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 23
+
+
+ True
+
+
+ 218, 28
+
+
+ 125, 17
+
+
+ 2
+
+
+ 从400开始,顺序递增
+
+
+ LblGachaTypeTip
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 24
+
+
+ True
+
+
+ 240, 205
+
+
+ 56, 17
+
+
+ 21
+
+
+ 结束时间
+
+
+ LblEndTime
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 25
+
+
+ True
+
+
+ 34, 57
+
+
+ 72, 17
+
+
+ 3
+
+
+ ScheduleId
+
+
+ LblScheduleId
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 26
+
+
+ True
+
+
+ 50, 205
+
+
+ 56, 17
+
+
+ 19
+
+
+ 开始时间
+
+
+ LblBeginTime
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 27
+
+
+ 112, 55
+
+
+ 100, 23
+
+
+ 4
+
+
+ NUDScheduleId
+
+
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 28
+
+
+ True
+
+
+ 218, 57
+
+
+ 69, 17
+
+
+ 5
+
+
+ ID要求唯一
+
+
+ LblScheduleIdTip
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 29
+
+
+ 常驻池
+
+
+ 限时角色祈愿池
+
+
+ 限时武器祈愿池
+
+
+ 112, 84
+
+
+ 300, 25
+
+
+ 7
+
+
+ CmbBannerType
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 30
+
+
+ True
+
+
+ 218, 233
+
+
+ 116, 17
+
+
+ 25
+
+
+ 客户端中显示的顺序
+
+
+ LblSortIdTip
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 31
+
+
+ True
+
+
+ 50, 87
+
+
+ 56, 17
+
+
+ 6
+
+
+ 奖池类型
+
+
+ LblBannerType
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 32
+
+
+ True
+
+
+ 112, 146
+
+
+ 74, 21
+
+
+ 13
+
+
+ 相遇之缘
+
+
+ RbCostItem224
+
+
+ System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 33
+
+
+ True
+
+
+ 50, 148
+
+
+ 56, 17
+
+
+ 12
+
+
+ 祈愿道具
+
+
+ LblCostItem
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 34
+
+
+ True
+
+
+ 50, 118
+
+
+ 56, 17
+
+
+ 8
+
+
+ 封面预制
+
+
+ LblPrefabPath
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 35
+
+
+ True
+
+
+ 192, 146
+
+
+ 74, 21
+
+
+ 14
+
+
+ 纠缠之缘
+
+
+ RbCostItem223
+
+
+ System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBannerValues
+
+
+ 36
+
+
+ 294, 41
+
+
+ 440, 351
+
+
+ 5
+
+
+ 卡池参数
+
+
+ GrpBannerValues
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 10
+
+
+ Top, Bottom, Right
+
+
+ ID
+
+
+ 65
+
+
+ Name
+
+
+ 110
+
+
+ Fill
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAoz5pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
+
+
+
+ 3, 19
+
+
+ 204, 329
+
+
+ 0
+
+
+ ListFallbackItems
+
+
+ System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpFallbackPool
+
+
+ 0
+
+
+ 962, 41
+
+
+ 210, 351
+
+
+ 7
+
+
+ 基础池
+
+
+ GrpFallbackPool
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 8
+
+
+ Top, Bottom, Right
+
+
+ ID
+
+
+ 65
+
+
+ Name
+
+
+ 110
+
+
+ Fill
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
+
+
+
+ 3, 19
+
+
+ 204, 329
+
+
+ 0
+
+
+ ListUpItems
+
+
+ System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpUpPool
+
+
+ 0
+
+
+ 740, 41
+
+
+ 210, 351
+
+
+ 6
+
+
+ UP池
+
+
+ GrpUpPool
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 9
+
+
+ Bottom, Right
+
+
+ True
+
+
+ 402, 0
+
+
+ 32, 17
+
+
+ 2
+
+
+ 帮助
+
+
+ LnkWeightHelp
+
+
+ System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpWeights
+
+
+ 0
+
+
+ 112, 58
+
+
+ 300, 23
+
+
+ 3
+
+
+ TxtWeight4
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpWeights
+
+
+ 1
+
+
+ 112, 29
+
+
+ 300, 23
+
+
+ 1
+
+
+ TxtWeight5
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpWeights
+
+
+ 2
+
+
+ True
+
+
+ 55, 61
+
+
+ 51, 17
+
+
+ 2
+
+
+ 4星权重
+
+
+ LblWeight4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpWeights
+
+
+ 3
+
+
+ True
+
+
+ 55, 32
+
+
+ 51, 17
+
+
+ 0
+
+
+ 5星权重
+
+
+ LblWeight5
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpWeights
+
+
+ 4
+
+
+ 294, 398
+
+
+ 440, 100
+
+
+ 8
+
+
+ 卡池权重与保底机制
+
+
+ GrpWeights
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 7
+
+
+ Bottom, Right
+
+
+ 112, 58
+
+
+ 300, 23
+
+
+ 3
+
+
+ TxtPoolWeight4
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBalance
+
+
+ 0
+
+
+ 112, 29
+
+
+ 300, 23
+
+
+ 1
+
+
+ TxtPoolWeight5
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBalance
+
+
+ 1
+
+
+ True
+
+
+ NoControl
+
+
+ 43, 61
+
+
+ 63, 17
+
+
+ 2
+
+
+ 4星池权重
+
+
+ LblPoolWeight4
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBalance
+
+
+ 2
+
+
+ True
+
+
+ NoControl
+
+
+ 43, 32
+
+
+ 63, 17
+
+
+ 0
+
+
+ 5星池权重
+
+
+ LblPoolWeight5
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBalance
+
+
+ 3
+
+
+ 294, 504
+
+
+ 440, 100
+
+
+ 9
+
+
+ 角色和武器平衡机制(仅混合池有效)
+
+
+ GrpBalance
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 6
+
+
+ 740, 401
+
+
+ 432, 203
+
+
+ 0
+
+
+ chart1
+
+
+ ChartWeights
+
+
+ System.Windows.Forms.DataVisualization.Charting.Chart, System.Windows.Forms.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
+
+
+ $this
+
+
+ 0
+
+
+ Top, Bottom, Left, Right
+
+
+ Fill
+
+
+ 17
+
+
+ 3, 19
+
+
+ 270, 512
+
+
+ 2
+
+
+ ListBanners
+
+
+ System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBanners
+
+
+ 0
+
+
+ 3, 3
+
+
+ 100, 23
+
+
+ 1
+
+
+ 删除
+
+
+ BtnDelete
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ FLPBannersControl
+
+
+ 0
+
+
+ 109, 3
+
+
+ 100, 23
+
+
+ 2
+
+
+ 清空
+
+
+ BtnClear
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ FLPBannersControl
+
+
+ 1
+
+
+ Bottom
+
+
+ 3, 531
+
+
+ 270, 29
+
+
+ 1
+
+
+ FLPBannersControl
+
+
+ System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ GrpBanners
+
+
+ 1
+
+
+ 12, 41
+
+
+ 276, 563
+
+
+ 4
+
+
+ 卡池列表
+
+
+ GrpBanners
+
+
+ System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 5
+
+
+ True
+
+
+ 12, 15
+
+
+ 122, 17
+
+
+ 0
+
+
+ Banners.json 路径:
+
+
+ label1
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 4
+
+
+ Top, Left, Right
+
+
+ 140, 12
+
+
+ 820, 23
+
+
+ 1
+
+
+ TxtBannersJsonPath
+
+
+ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 3
+
+
+ Top, Right
+
+
+ 966, 12
+
+
+ 100, 23
+
+
+ 2
+
+
+ 加载
+
+
+ BtnLoad
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 2
+
+
+ Top, Right
+
+
+ 1072, 12
+
+
+ 100, 23
+
+
+ 3
+
+
+ 保存
+
+
+ BtnSave
+
+
+ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 1
+
+
+ True
+
+
+ 7, 17
+
+
+ 1184, 616
+
+
+ 微软雅黑, 9pt
+
+
+ NoControl
+
+
+ 3, 4, 3, 4
+
+
+ 1200, 655
+
+
+ CenterScreen
+
+
+ 卡池编辑器
+
+
+ ColFallbackId
+
+
+ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ ColFallbackName
+
+
+ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ ColUpId
+
+
+ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ ColUpName
+
+
+ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ FormGachaBannersEditor3
+
+
+ System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.ru-ru.resx b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.ru-ru.resx
new file mode 100644
index 0000000..94b2599
--- /dev/null
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.ru-ru.resx
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ 112, 287
+
+
+ 288, 21
+
+
+ Авто возврат шанса выпадения с баннера
+
+
+ 56, 261
+
+
+ 50, 17
+
+
+ Опции
+
+
+ 157, 21
+
+
+ Удалить пул форм C6
+
+
+ 167, 17
+
+
+ Открыть старый редактор
+
+
+ 43, 28
+
+
+ 63, 17
+
+
+ Тип Гачи
+
+
+ 210, 233
+
+
+ 86, 17
+
+
+ Шанс соб. 4*
+
+
+ 20, 233
+
+
+ 86, 17
+
+
+ Шанс соб. 5*
+
+
+ 66, 204
+
+
+ 40, 17
+
+
+ Сорт.
+
+
+ 116, 17
+
+
+ Увеличение с 400
+
+
+ 234, 176
+
+
+ 47, 17
+
+
+ Конец
+
+
+ 8, 57
+
+
+ 98, 17
+
+
+ ID расписания
+
+
+ 53, 176
+
+
+ 53, 17
+
+
+ Начало
+
+
+ 84, 17
+
+
+ Уникальный
+
+
+ Стандартная Молитва
+
+
+ Молитва события персонажа
+
+
+ Молитва события с оружием
+
+
+ 121, 17
+
+
+ Показать порядок
+
+
+ 18, 87
+
+
+ 88, 17
+
+
+ Тип баннера
+
+
+ 116, 21
+
+
+ Судьбоносные
+
+
+ 34, 148
+
+
+ 72, 17
+
+
+ Стоимость
+
+
+ 47, 118
+
+
+ 59, 17
+
+
+ Готовый
+
+
+ 234, 146
+
+
+ 141, 21
+
+
+ Переплетающиеся
+
+
+ Баннер
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA0zLXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
+
+
+
+ Запасной Пул
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
+ bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
+
+
+
+ Верхний Пул
+
+
+ 85, 23
+
+
+ Сген. Json
+
+
+ 409, 201
+
+
+ 85, 23
+
+
+ Загр. Json
+
+
+ 375, 0
+
+
+ 60, 17
+
+
+ Помощь
+
+
+ 54, 61
+
+
+ 52, 17
+
+
+ Веса 5*
+
+
+ 54, 32
+
+
+ 52, 17
+
+
+ Веса 5*
+
+
+ Gacha Веса
+
+
+ 28, 61
+
+
+ 78, 17
+
+
+ Пул Веса 4*
+
+
+ 28, 29
+
+
+ 78, 17
+
+
+ Пул Веса 5*
+
+
+ Баланс персонажа и оружия (работают только смешанные пулы)
+
+
+ Таблица веса
+
+
+ Редактор баннеров Gacha
+
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.zh-TW.resx b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.zh-TW.resx
new file mode 100644
index 0000000..8fe4a48
--- /dev/null
+++ b/Source/GrasscutterTools/Forms/FormGachaBannersEditor3.zh-TW.resx
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 自動避免UP被基礎抽中
+
+
+ 選項
+
+
+ 打開舊版本編輯器
+
+
+ 4星活動爆率
+
+
+ 5星活動爆率
+
+
+ 順序
+
+
+ 從400開始,順序遞增
+
+
+ 結束時間
+
+
+ 開始時間
+
+
+ 客戶端中顯示的順序
+
+
+ 獎池類型
+
+
+ 相遇之緣
+
+
+ 祈願道具
+
+
+ 預製
+
+
+ 糾纏之緣
+
+
+ 卡池參數
+
+
+ 基礎池
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAoz5pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
+ ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
+ AwAAAAo05pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
+ dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
+
+
+
+ 卡池權重與保底機制
+
+
+ 幫助
+
+
+ 4星權重
+
+
+ 5星權重
+
+
+ 角色和武器平衡機制(僅混合池有效)
+
+
+ 4星池權重
+
+
+ 5星池權重
+
+
+ 權重圖表
+
+
+ 卡池編輯器
+
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Forms/FormMain.cs b/Source/GrasscutterTools/Forms/FormMain.cs
index d363709..3a1a6df 100644
--- a/Source/GrasscutterTools/Forms/FormMain.cs
+++ b/Source/GrasscutterTools/Forms/FormMain.cs
@@ -264,86 +264,43 @@ namespace GrasscutterTools.Forms
form.TopMost = false;
}
- ///
- /// 卡池编辑器窗口实例
- ///
- private Form GachaBannerEditor;
+ private readonly Dictionary MyForms = new Dictionary();
+
+ private void ShowForm(string tag) where T : Form, new()
+ {
+ if (!MyForms.TryGetValue(tag, out var form) || form.IsDisposed)
+ form = new T();
+ MyForms[tag] = form;
+ if (form.IsHandleCreated)
+ ToTop(form);
+ else
+ form.Show();
+ }
+
///
/// 点击打开卡池编辑器时触发
///
private void BtnOpenGachaBannerEditor_Click(object sender, EventArgs e)
- {
- if (GachaBannerEditor == null || GachaBannerEditor.IsDisposed)
- {
- GachaBannerEditor = new FormGachaBannerEditor2();
- GachaBannerEditor.Show();
- }
- else
- {
- ToTop(GachaBannerEditor);
- }
- }
+ => ShowForm("BannersEditor");
///
- /// 文本浏览器窗口实例
+ /// 点击打开文本浏览器时触发
///
- private FormTextMapBrowser TextMapBrowser;
-
private void BtnOpenTextMap_Click(object sender, EventArgs e)
- {
- if (TextMapBrowser == null || TextMapBrowser.IsDisposed)
- {
- TextMapBrowser = new FormTextMapBrowser();
- TextMapBrowser.Show();
- }
- else
- {
- ToTop(TextMapBrowser);
- }
- }
-
- ///
- /// 掉落物编辑器窗口实例
- ///
- private FormDropEditor DropEditor;
+ => ShowForm("TextMapBrowser");
///
/// 点击打开掉落物编辑器时触发
///
private void BtnOpenDropEditor_Click(object sender, EventArgs e)
- {
- if (DropEditor == null || DropEditor.IsDisposed)
- {
- DropEditor = new FormDropEditor();
- DropEditor.Show();
- }
- else
- {
- ToTop(DropEditor);
- }
- }
-
- ///
- /// 商店编辑器窗口实例
- ///
- private FormShopEditor ShopEditor;
+ => ShowForm("DropEditor");
///
/// 点击打开商店编辑器时触发
///
private void BtnOpenShopEditor_Click(object sender, EventArgs e)
- {
- if (ShopEditor == null || ShopEditor.IsDisposed)
- {
- ShopEditor = new FormShopEditor();
- ShopEditor.Show();
- }
- else
- {
- ToTop(ShopEditor);
- }
- }
+ => ShowForm("ShopEditor");
///
/// 语言选中项改变时触发
diff --git a/Source/GrasscutterTools/Game/Gacha/GachaBanner3.cs b/Source/GrasscutterTools/Game/Gacha/GachaBanner3.cs
new file mode 100644
index 0000000..f0265bb
--- /dev/null
+++ b/Source/GrasscutterTools/Game/Gacha/GachaBanner3.cs
@@ -0,0 +1,230 @@
+/**
+ * Grasscutter Tools
+ * Copyright (C) 2022 jie65535
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ *
+ **/
+using System.ComponentModel;
+using System.Linq;
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+
+namespace GrasscutterTools.Game.Gacha
+{
+ ///
+ /// https://github.com/Grasscutters/Grasscutter/pull/639
+ ///
+ public class GachaBanner3
+ {
+ ///
+ /// 备注
+ ///
+ [JsonProperty("comment")]
+ public string Comment { get; set; }
+
+ ///
+ /// 添加卡池请从400开始增加id数值进行添加,这个id需要每个池子不一样,
+ /// 如果你想添加大量卡池,请按照每次增加固定数值的id进行添加,比如:411,412,413....
+ ///
+ [JsonProperty("gachaType")]
+ public int GachaType { get; set; } = 400;
+
+ ///
+ /// 这个id需要每个池子不一样,如果你想添加大量卡池,
+ /// 请按照每次增加固定数值的id进行添加,比如:2100,2200,2300....
+ ///
+ [JsonProperty("scheduleId")]
+ public int ScheduleId { get; set; } = 800;
+
+ ///
+ /// 这个是卡池的预制路径id
+ ///
+ [JsonProperty("prefabPath")]
+ public string PrefabPath { get; set; } = "GachaShowPanel_A007";
+
+ ///
+ /// 这个是抽卡的预览背景路径id
+ ///
+ [JsonProperty("previewPrefabPath")]
+ public string PreviewPrefabPath { get; set; } = "UI_Tab_GachaShowPanel_A007";
+
+ ///
+ /// 这个是抽卡的标题路径id,有可能与之前两项的id不同
+ /// (一般这3项的id只需保持一致即可,就是A0xx,xx为同一id)
+ ///
+ [JsonProperty("titlePath")]
+ public string TitlePath { get; set; } = "UI_GACHA_SHOW_PANEL_A007_TITLE";
+
+ ///
+ /// 这个表示祈愿用的道具,224是相遇之缘,223是纠缠之缘 - 选择一个作为该卡池的抽卡道具
+ /// (提示:请不要随便修改祈愿道具除了蓝球和粉球,有可能会引发bug,比如修改成摩拉抽卡可能导致卡住)
+ ///
+ [JsonProperty("costItemId")]
+ public int CostItemId { get; set; } = 224;
+
+ ///
+ /// 抽卡消耗
+ ///
+ [JsonProperty("coseItemAmount"), DefaultValue(1)]
+ public int CoseItemAmount { get; set; } = 1;
+
+ ///
+ /// 这个表示十连祈愿用的道具,224是相遇之缘,223是纠缠之缘 - 选择一个作为该卡池的抽卡道具
+ /// (提示:请不要随便修改祈愿道具除了蓝球和粉球,有可能会引发bug,比如修改成摩拉抽卡可能导致卡住)
+ ///
+ [JsonProperty("costItemId10")]
+ public int CostItemId10 { get; set; }
+
+ ///
+ /// 十连抽卡消耗
+ ///
+ [JsonProperty("coseItemAmount10"), DefaultValue(10)]
+ public int CoseItemAmount10 { get; set; } = 10;
+
+ ///
+ /// 开始时间(Unix时间戳)
+ ///
+ [JsonProperty("beginTime")]
+ public int BeginTime { get; set; } = 0;
+
+ ///
+ /// 结束时间(Unix时间戳)
+ ///
+ [JsonProperty("endTime")]
+ public int EndTime { get; set; } = 1924992000;
+
+ ///
+ /// 卡池顺序
+ ///
+ [JsonProperty("sortId")]
+ public int SortId { get; set; } = 1000;
+
+ ///
+ /// 抽卡次数限制
+ ///
+ [JsonProperty("gachaTimesLimit"), DefaultValue(int.MaxValue)]
+ public int GachaTimesLimit { get; set; } = int.MaxValue;
+
+ ///
+ /// 4星的up角色或物品
+ ///
+ [JsonProperty("rateUpItems4")]
+ public int[] RateUpItems4 { get; set; } = { };
+
+ ///
+ /// 5星的up物品或者角色
+ ///
+ [JsonProperty("rateUpItems5")]
+ public int[] RateUpItems5 { get; set; } = { };
+
+ ///
+ /// 3星普通池
+ ///
+ [JsonProperty("fallbackItems3")]
+ public int[] FallbackItems3 { get; set; } = { 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 };
+
+ ///
+ /// 4星普通角色池
+ ///
+ [JsonProperty("fallbackItems4Pool1")]
+ public int[] FallbackItems4Pool1 { get; set; } = { 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 };
+
+ ///
+ /// 4星普通武器池
+ ///
+ [JsonProperty("fallbackItems4Pool2")]
+ public int[] FallbackItems4Pool2 { get; set; } = { 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 };
+
+ ///
+ /// 5星普通角色池
+ ///
+ [JsonProperty("fallbackItems5Pool1")]
+ public int[] FallbackItems5Pool1 { get; set; } = { 1003, 1016, 1042, 1035, 1041 };
+
+ ///
+ /// 5星普通角色池
+ ///
+ [JsonProperty("fallbackItems5Pool2")]
+ public int[] FallbackItems5Pool2 { get; set; } = { 11501, 11502, 12501, 12502, 13502, 13505, 14501, 14502, 15501, 15502 };
+
+ ///
+ /// 是否从奖池中移除玩家星座等级6级以上的角色
+ ///
+ [JsonProperty("removeC6FromPool"), DefaultValue(false)]
+ public bool RemoveC6FromPool { get; set; } = false;
+
+ ///
+ /// 自动从普通池中移除UP池物品或角色
+ ///
+ [JsonProperty("autoStripRateUpFromFallback"), DefaultValue(true)]
+ public bool AutoStripRateUpFromFallback { get; set; } = true;
+
+ ///
+ /// 4星权重
+ ///
+ [JsonProperty("weights4")]
+ public int[,] Weights4 { get; set; } = { { 1, 510 }, { 8, 510 }, { 10, 10000 } };
+
+ ///
+ /// 5星权重
+ ///
+ [JsonProperty("weights5")]
+ public int[,] Weights5 { get; set; } = { { 1, 75 }, { 73, 150 }, { 90, 10000 } };
+
+ ///
+ /// 4星平衡奖池权重(即中的是武器还是角色)
+ ///
+ [JsonProperty("poolBalanceWeights4")]
+ public int[,] PoolBalanceWeights4 { get; set; } = { { 1, 255 }, { 17, 255 }, { 21, 10455 } };
+
+ ///
+ /// 5星平衡奖池权重(即中的是武器还是角色)
+ ///
+ [JsonProperty("poolBalanceWeights5")]
+ public int[,] PoolBalanceWeights5 { get; set; } = { { 1, 30 }, { 147, 150 }, { 181, 10230 } };
+
+ ///
+ /// 4星事件概率(抽中后,摇1~100随机数,如果大于该值则抽中up池)
+ ///
+ [JsonProperty("eventChance4"), DefaultValue(50)]
+ public int EventChance4 { get; set; } = 50;
+
+ ///
+ /// 5星事件概率(抽中后,摇1~100随机数,如果大于该值则抽中up池)
+ ///
+ [JsonProperty("eventChance5"), DefaultValue(50)]
+ public int EventChance5 { get; set; } = 50;
+
+ ///
+ /// 这个有3种类型,standard表示常驻池,event表示限时角色祈愿池,
+ /// weapon表示限时武器祈愿池,选择一种类型的卡池
+ ///
+ [JsonProperty("bannerType"), JsonConverter(typeof(StringEnumConverter)), DefaultValue(BannerType.STANDARD)]
+ public BannerType BannerType { get; set; } = BannerType.STANDARD;
+
+
+ public override string ToString()
+ {
+ return $"[{GachaType}|{ScheduleId}] 5*:[{string.Join(",", RateUpItems5.Select(GetName))}] 4*:[{string.Join(",", RateUpItems4.Select(GetName))}]";
+ }
+
+ private static string GetName(int id)
+ {
+ var a = GameData.Avatars[id];
+ return a == ItemMap.EmptyName ? GameData.Weapons[id] : a;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Game/GameData.cs b/Source/GrasscutterTools/Game/GameData.cs
index b115442..8a0b253 100644
--- a/Source/GrasscutterTools/Game/GameData.cs
+++ b/Source/GrasscutterTools/Game/GameData.cs
@@ -37,6 +37,7 @@ namespace GrasscutterTools.Game
Weapons = new ItemMap(Resources.Weapon);
WeaponColors = new ItemMap(Resources.WeaponColor);
GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
+ GachaBannerTitles = new ItemMap(Resources.GachaBannerTitle);
Quests = new ItemMap(Resources.Quest);
ShopType = new ItemMap(Resources.ShopType);
}
@@ -67,6 +68,7 @@ namespace GrasscutterTools.Game
public static ItemMap WeaponColors { get; private set; }
public static ItemMap GachaBannerPrefabs { get; private set; }
+ public static ItemMap GachaBannerTitles { get; private set; }
public static ItemMap Quests { get; private set; }
diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj
index a8c0f88..3880ab2 100644
--- a/Source/GrasscutterTools/GrasscutterTools.csproj
+++ b/Source/GrasscutterTools/GrasscutterTools.csproj
@@ -96,6 +96,12 @@
FormDropEditor.cs
+
+ Form
+
+
+ FormGachaBannersEditor3.cs
+
Form
@@ -129,6 +135,7 @@
+
@@ -176,6 +183,20 @@
FormDropEditor.cs
+
+ FormGachaBannersEditor3.cs
+
+
+ FormGachaBannersEditor3.cs
+ Designer
+
+
+ FormGachaBannersEditor3.cs
+ Designer
+
+
+ FormGachaBannersEditor3.cs
+
FormGachaBannerEditor2.cs
@@ -284,6 +305,7 @@
Settings.settings
True
+
@@ -299,6 +321,7 @@
+
@@ -314,6 +337,7 @@
+
@@ -333,6 +357,7 @@
+
@@ -347,6 +372,7 @@
+
diff --git a/Source/GrasscutterTools/Properties/Resources.Designer.cs b/Source/GrasscutterTools/Properties/Resources.Designer.cs
index ef38cb2..a7436ac 100644
--- a/Source/GrasscutterTools/Properties/Resources.Designer.cs
+++ b/Source/GrasscutterTools/Properties/Resources.Designer.cs
@@ -401,6 +401,16 @@ namespace GrasscutterTools.Properties {
}
}
+ ///
+ /// 查找 System.Byte[] 类型的本地化资源。
+ ///
+ internal static byte[] Banners {
+ get {
+ object obj = ResourceManager.GetObject("Banners", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+
///
/// 查找类似 浏览器打开失败,你可以通过以下链接手动访问: 的本地化字符串。
///
@@ -554,6 +564,59 @@ namespace GrasscutterTools.Properties {
}
}
+ ///
+ /// 查找类似 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:深秘之息-阿贝多
+ ///101:神铸赋形-圣显绿箭 的本地化字符串。
+ ///
+ internal static string GachaBannerTitle {
+ get {
+ return ResourceManager.GetString("GachaBannerTitle", resourceCulture);
+ }
+ }
+
///
/// 查找类似 007:初行者推荐祈愿
///008:奔行世间
diff --git a/Source/GrasscutterTools/Properties/Resources.en-us.resx b/Source/GrasscutterTools/Properties/Resources.en-us.resx
index d87ea2e..4e75465 100644
--- a/Source/GrasscutterTools/Properties/Resources.en-us.resx
+++ b/Source/GrasscutterTools/Properties/Resources.en-us.resx
@@ -285,4 +285,7 @@ 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
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Properties/Resources.resx b/Source/GrasscutterTools/Properties/Resources.resx
index 590fae6..caf6e74 100644
--- a/Source/GrasscutterTools/Properties/Resources.resx
+++ b/Source/GrasscutterTools/Properties/Resources.resx
@@ -294,4 +294,10 @@
仅允许以 Shop.json 格式保存!确定要覆盖当前指定文件吗?
+
+ ..\Resources\zh-cn\GachaBannerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
+
+ ..\Resources\Banners.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx
index 387236d..d1aa5fa 100644
--- a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx
+++ b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx
@@ -273,4 +273,7 @@
Разрешено сохранять только в формате Shop.json! Вы уверены, что хотите перезаписать текущий указанный файл?
+
+ ..\Resources\ru-ru\GachaBennerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx
index 017e060..9557515 100644
--- a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx
+++ b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx
@@ -279,4 +279,7 @@
僅允許以 Shop.json 格式保存!確定要覆蓋當前指定文件嗎?
+
+ ..\Resources\zh-tw\GachaBennerTitle.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Properties/Settings.Designer.cs b/Source/GrasscutterTools/Properties/Settings.Designer.cs
index c55d6ff..ed05a22 100644
--- a/Source/GrasscutterTools/Properties/Settings.Designer.cs
+++ b/Source/GrasscutterTools/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace GrasscutterTools.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -214,5 +214,17 @@ namespace GrasscutterTools.Properties {
this["MainFormSize"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string BannersJsonPath {
+ get {
+ return ((string)(this["BannersJsonPath"]));
+ }
+ set {
+ this["BannersJsonPath"] = value;
+ }
+ }
}
}
diff --git a/Source/GrasscutterTools/Properties/Settings.settings b/Source/GrasscutterTools/Properties/Settings.settings
index cb4375f..f407dcc 100644
--- a/Source/GrasscutterTools/Properties/Settings.settings
+++ b/Source/GrasscutterTools/Properties/Settings.settings
@@ -50,5 +50,8 @@
0, 0
+
+
+
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/Banners.json b/Source/GrasscutterTools/Resources/Banners.json
new file mode 100644
index 0000000..636577c
--- /dev/null
+++ b/Source/GrasscutterTools/Resources/Banners.json
@@ -0,0 +1,773 @@
+[
+ //新手
+ {
+ "comment": "Beginner's Banner. Do not change for no reason.",
+ "gachaType": 100,
+ "scheduleId": 803,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A016",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A016_TITLE",
+ "costItemId": 224,
+ "costItemAmount10": 8,
+ "gachaTimesLimit": 20,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 100,
+ "rateUpItems5": [],
+ "rateUpItems4": [ 1034 ]
+ },
+ //常驻1
+ {
+ "comment": "Standard",
+ "gachaType": 200,
+ "scheduleId": 2000,
+ "bannerType": "STANDARD",
+ "prefabPath": "GachaShowPanel_A022",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A022_TITLE",
+ "costItemId": 224,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 1,
+ "fallbackItems4Pool1": [ 1006, 1014, 1015, 1020, 1021, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
+ "weights5": [
+ [ 1, 75 ],
+ [ 73, 150 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //常驻2
+ {
+ "comment": "Standard",
+ "gachaType": 201,
+ "scheduleId": 2001,
+ "bannerType": "STANDARD",
+ "prefabPath": "GachaShowPanel_A017",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A017_TITLE",
+ "costItemId": 224,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 1,
+ "fallbackItems4Pool1": [ 1006, 1014, 1015, 1020, 1021, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
+ "weights5": [
+ [ 1, 75 ],
+ [ 73, 150 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.0上角色-杯装之诗:温迪、菲谢尔、香菱、芭芭拉
+ {
+ "comment": "1.0",
+ "gachaType": 400,
+ "scheduleId": 800,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A019",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A019_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 1000,
+ "rateUpItems4": [ 1023, 1031, 1014 ],
+ "rateUpItems5": [ 1022 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.0下角色-闪焰的驻足:可莉、行秋、诺艾尔、砂糖
+ {
+ "comment": "1.0",
+ "gachaType": 401,
+ "scheduleId": 801,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A018",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A018_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 999,
+ "rateUpItems4": [ 1025, 1034, 1043 ],
+ "rateUpItems5": [ 1029 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.1上角色-暂别冬都:达达利亚、迪奥娜、北斗、凝光
+ {
+ "comment": "1.0",
+ "gachaType": 402,
+ "scheduleId": 802,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A023",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A023_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 998,
+ "rateUpItems4": [ 1027, 1024, 1039 ],
+ "rateUpItems5": [ 1033 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.1下角色-陵薮市朝:钟离、辛焱、雷泽、重云
+ {
+ "comment": "1.0",
+ "gachaType": 403,
+ "scheduleId": 803,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A024",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A024_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 997,
+ "rateUpItems4": [ 1044, 1020, 1036 ],
+ "rateUpItems5": [ 1030 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.2上角色-深秘之息:阿贝多、菲谢尔、砂糖、班尼特
+ {
+ "comment": "1.0",
+ "gachaType": 404,
+ "scheduleId": 804,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A027",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A027_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 996,
+ "rateUpItems4": [ 1031, 1043, 1032 ],
+ "rateUpItems5": [ 1038 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.2下角色-浮生孰来:甘雨,香菱,行秋,诺艾尔
+ {
+ "comment": "1.0",
+ "gachaType": 405,
+ "scheduleId": 805,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A028",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A028_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 995,
+ "rateUpItems4": [ 1023, 1025, 1034 ],
+ "rateUpItems5": [ 1037 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.3上角色-烟火之邀:魈、迪奥娜、北斗、辛焱
+ {
+ "comment": "1.0",
+ "gachaType": 406,
+ "scheduleId": 806,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A031",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A031_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 994,
+ "rateUpItems4": [ 1039, 1024, 1044 ],
+ "rateUpItems5": [ 1026 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.3中角色-鱼龙灯昼:刻晴、凝光、班尼特、芭芭拉
+ {
+ "comment": "1.0",
+ "gachaType": 407,
+ "scheduleId": 807,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A032",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A032_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 993,
+ "rateUpItems4": [ 1027, 1032, 1014 ],
+ "rateUpItems5": [ 1042 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.3下角色-赤团开时:胡桃、行秋、重云、香菱
+ {
+ "comment": "1.0",
+ "gachaType": 408,
+ "scheduleId": 808,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A033",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A033_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 992,
+ "rateUpItems4": [ 1025, 1036, 1023 ],
+ "rateUpItems5": [ 1046 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.4上角色-杯装之诗:温迪、砂糖、雷泽、诺艾尔
+ {
+ "comment": "1.0",
+ "gachaType": 409,
+ "scheduleId": 809,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A036",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A036_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 991,
+ "rateUpItems4": [ 1043, 1020, 1034 ],
+ "rateUpItems5": [ 1022 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.4下角色-暂别冬都:达达利亚、罗莎莉亚、芭芭拉,菲谢尔
+ {
+ "comment": "1.0",
+ "gachaType": 410,
+ "scheduleId": 810,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A037",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A037_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 990,
+ "rateUpItems4": [ 1045, 1014, 1031 ],
+ "rateUpItems5": [ 1033 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.5上角色-陵薮市朝:钟离、烟绯、诺艾尔、迪奥娜
+ {
+ "comment": "1.0",
+ "gachaType": 411,
+ "scheduleId": 811,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A040",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A040_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 989,
+ "rateUpItems4": [ 1048, 1034, 1039 ],
+ "rateUpItems5": [ 1030 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.5下角色-浪涌之瞬:优菈、辛焱、行秋、北斗
+ {
+ "comment": "1.0",
+ "gachaType": 412,
+ "scheduleId": 812,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A041",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A041_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 988,
+ "rateUpItems4": [ 1044, 1025, 1024 ],
+ "rateUpItems5": [ 1051 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.6上角色-闪焰的驻足:可莉、芭芭拉、砂糖、菲谢尔
+ {
+ "comment": "1.0",
+ "gachaType": 413,
+ "scheduleId": 813,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A044",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A044_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 987,
+ "rateUpItems4": [ 1014, 1043, 1031 ],
+ "rateUpItems5": [ 1029 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //1.6下角色-叶落风随:枫原万叶、罗莎莉亚、班尼特、雷泽
+ {
+ "comment": "1.0",
+ "gachaType": 414,
+ "scheduleId": 814,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A045",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A045_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 986,
+ "rateUpItems4": [ 1045, 1032, 1020 ],
+ "rateUpItems5": [ 1047 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.0上角色-白鹭之庭:神里绫华、 凝光、 重云、 烟绯
+ {
+ "comment": "2.0",
+ "gachaType": 415,
+ "scheduleId": 815,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A048",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A048_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 985,
+ "rateUpItems4": [ 1027, 1036, 1048 ],
+ "rateUpItems5": [ 1002 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.0下角色-焰色天河:宵宫、早柚、迪奥娜、辛焱
+ {
+ "comment": "2.0",
+ "gachaType": 416,
+ "scheduleId": 816,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A049",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A049_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 984,
+ "rateUpItems4": [ 1053, 1039, 1044 ],
+ "rateUpItems5": [ 1049 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.1上角色-影寂天下人:雷电将军、九条裟罗、香菱、砂糖
+ {
+ "comment": "2.0",
+ "gachaType": 417,
+ "scheduleId": 817,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A052",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A052_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 983,
+ "rateUpItems4": [ 1056, 1023, 1043 ],
+ "rateUpItems5": [ 1052 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.1下角色-浮岳虹珠:珊瑚宫心海、罗莎莉亚、北斗、行秋
+ {
+ "comment": "2.0",
+ "gachaType": 418,
+ "scheduleId": 818,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A053",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A053_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 982,
+ "rateUpItems4": [ 1045, 1024, 1025 ],
+ "rateUpItems5": [ 1054 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.2上角色-暂别冬都:达达利亚、凝光、重云、烟绯
+ {
+ "comment": "2.0",
+ "gachaType": 419,
+ "scheduleId": 819,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A056",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A056_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 981,
+ "rateUpItems4": [ 1027, 1036, 1048 ],
+ "rateUpItems5": [ 1033 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.2下角色-赤团开时:胡桃、托马、迪奥娜、早柚
+ {
+ "comment": "2.0",
+ "gachaType": 420,
+ "scheduleId": 820,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A057",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A057_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 980,
+ "rateUpItems4": [ 1050, 1039, 1053 ],
+ "rateUpItems5": [ 1046 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.3上角色1-浪涌之瞬:优菈、班尼特、诺艾尔、罗莎莉亚
+ {
+ "comment": "2.0",
+ "gachaType": 421,
+ "scheduleId": 821,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A062",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A062_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 979,
+ "rateUpItems4": [ 1032, 1034, 1045 ],
+ "rateUpItems5": [ 1051 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.3上角色2-深秘之息:阿贝多、班尼特、诺艾尔、罗莎莉亚
+ {
+ "comment": "2.0",
+ "gachaType": 422,
+ "scheduleId": 822,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A060",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A060_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 978,
+ "rateUpItems4": [ 1032, 1034, 1045 ],
+ "rateUpItems5": [ 1038 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.3下角色-鬼门斗宴:荒泷一斗、五郎、芭芭拉、香菱
+ {
+ "comment": "2.0",
+ "gachaType": 423,
+ "scheduleId": 823,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A061",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A061_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 977,
+ "rateUpItems4": [ 1055, 1014, 1023 ],
+ "rateUpItems5": [ 1057 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.4上角色1-烟火之邀:魈、云堇、凝光、重云
+ //2.4上角色2-出尘入世:申鹤、云堇、凝光、重云
+ {
+ "comment": "2.0",
+ "gachaType": 424,
+ "scheduleId": 824,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A065",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A065_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 976,
+ "rateUpItems4": [ 1027, 1036, 1064 ],
+ "rateUpItems5": [ 1063 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.4下角色1-浮生孰来:甘雨、行秋、北斗、烟绯(复刻不放卡池)
+ //2.4下角色2-陵薮市朝:钟离、行秋、北斗、烟绯(复刻不放卡池)
+ //2.5上角色-华紫樱绯:八重神子、菲谢尔、迪奥娜、托马
+ {
+ "comment": "2.0",
+ "gachaType": 425,
+ "scheduleId": 825,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A071",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A071_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 975,
+ "rateUpItems4": [ 1031, 1039, 1050 ],
+ "rateUpItems5": [ 1058 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.5下角色1-影寂天下人:雷电将军、九条裟罗、辛焱、班尼特(复刻不放卡池)
+ //2.5下角色2-浮岳虹珠:珊瑚宫心海、九条裟罗、辛焱、班尼特(复刻不放卡池)
+ //2.6上角色1-苍流踏花:神里绫人、砂糖、香菱、云堇
+ {
+ "comment": "2.0",
+ "gachaType": 426,
+ "scheduleId": 826,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A076",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A076_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 974,
+ "rateUpItems4": [ 1043, 1023, 1064 ],
+ "rateUpItems5": [ 1066 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.6上角色2-杯装之诗:神里绫人、砂糖、香菱、云堇(复刻不放卡池)
+ //2.6下角色-白鹭之庭:神里绫华、雷泽、罗莎莉亚、早柚(复刻不放卡池)
+ //2.7上角色1-素霓伣天:夜兰、诺艾尔、烟绯、芭芭拉
+ {
+ "comment": "2.0",
+ "gachaType": 427,
+ "scheduleId": 827,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A081",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A081_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 973,
+ "rateUpItems4": [ 1034, 1048, 1014 ],
+ "rateUpItems5": [ 1060 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //2.7上角色2-烟火之邀:魈、诺艾尔、烟绯、芭芭拉(复刻不放卡池)
+ //2.7下角色-鬼门斗宴:荒泷一斗、久岐忍、五郎、重云(复刻不放卡池)
+ //2.8上角色1-闪焰的驻足:可莉、凝光、托马、鹿野原平藏(复刻不放卡池)
+ //2.8上角色2-叶落风随:枫原万叶、凝光、托马、鹿野原平藏(复刻不放卡池)
+ //2.8下角色-焰色天河:宵宫、班尼特、云堇、辛焱(复刻不放卡池)
+ //3.0上角色1-巡御蘙荟:提纳里、柯莱、迪奥娜、菲谢尔
+ {
+ "comment": "3.0",
+ "gachaType": 428,
+ "scheduleId": 828,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A091",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A091_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 972,
+ "rateUpItems4": [ 1031, 1039, 1067 ],
+ "rateUpItems5": [ 1069 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //3.0上角色2-陵薮市朝:钟离、柯莱、迪奥娜、菲谢尔(复刻不放卡池)
+ //3.0下角色1-浮岳虹珠:珊瑚宫心海、多莉、砂糖、行秋(复刻不放卡池)
+ //3.0下角色2-浮生孰来:甘雨、多莉、砂糖、行秋(复刻不放卡池)
+ //3.1上角色1-杯装之诗:温迪、早柚、坎蒂丝、久岐忍(复刻不放卡池)
+ //3.1上角色2-雳裁冥昭:温迪、早柚、坎蒂丝、久岐忍
+ {
+ "comment": "3.0",
+ "gachaType": 429,
+ "scheduleId": 829,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A097",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A097_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 971,
+ "rateUpItems4": [ 1053, 1065, 1072 ],
+ "rateUpItems5": [ 1071 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //3.1下角色1-翩舞歈莲:妮露、芭芭拉、北斗、香菱
+ /*{
+ "comment": "3.0",
+ "gachaType": 430,
+ "scheduleId": 830,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A100",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A0100_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 970,
+ "rateUpItems4": [1014,1023,1024],
+ "rateUpItems5": [1070],
+ "fallbackItems5Pool2": [],
+ "weights5": [[1,80], [73,80], [90,10000]]
+ },*/
+ //3.2上角色1-月草的赐慧:纳西妲、诺艾尔、班尼特、雷泽
+ {
+ "comment": "Character Event Banner 1",
+ "gachaType": 431,
+ "scheduleId": 831,
+ "bannerType": "EVENT",
+ "prefabPath": "GachaShowPanel_A103",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A0103_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 969,
+ "rateUpItems4": [ 1034, 1020, 1032 ],
+ "rateUpItems5": [ 1073 ],
+ "fallbackItems5Pool2": [],
+ "weights5": [
+ [ 1, 80 ],
+ [ 73, 80 ],
+ [ 90, 10000 ]
+ ]
+ },
+ //3.2上角色-焰色天河:宵宫、诺艾尔、班尼特、雷泽(复刻不放卡池)
+ //3.2上武器-神铸赋形:飞雷之弦振、
+ {
+ "comment": "Weapon Event Banner",
+ "gachaType": 502,
+ "scheduleId": 602,
+ "bannerType": "WEAPON",
+ "prefabPath": "GachaShowPanel_A105",
+ "titlePath": "UI_GACHA_SHOW_PANEL_A020_TITLE",
+ "costItemId": 223,
+ "beginTime": 0,
+ "endTime": 1924992000,
+ "sortId": 2,
+ "rateUpItems4": [ 15405, 11402, 14402, 13407, 12403 ],
+ "rateUpItems5": [ 114511, 15509 ],
+ "fallbackItems5Pool1": [],
+ "weights4": [
+ [ 1, 600 ],
+ [ 7, 600 ],
+ [ 8, 6600 ],
+ [ 10, 12600 ]
+ ],
+ "weights5": [
+ [ 1, 100 ],
+ [ 62, 100 ],
+ [ 73, 7800 ],
+ [ 80, 10000 ]
+ ],
+ "eventChance4": 75,
+ "eventChance5": 75
+ }
+ //3.1下角色2-深秘之息:阿贝多、芭芭拉、北斗、香菱(复刻不放卡池)
+]
diff --git a/Source/GrasscutterTools/Resources/en-us/GachaBennerTitle.txt b/Source/GrasscutterTools/Resources/en-us/GachaBennerTitle.txt
new file mode 100644
index 0000000..7fd0312
--- /dev/null
+++ b/Source/GrasscutterTools/Resources/en-us/GachaBennerTitle.txt
@@ -0,0 +1,55 @@
+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
+101:Secretorum Secretorum
+102:Epitome Invocation
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/ru-ru/GachaBennerTitle.txt b/Source/GrasscutterTools/Resources/ru-ru/GachaBennerTitle.txt
new file mode 100644
index 0000000..699cb98
--- /dev/null
+++ b/Source/GrasscutterTools/Resources/ru-ru/GachaBennerTitle.txt
@@ -0,0 +1,45 @@
+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:Staff of the Scarlet Sands
+100:Twirling Lotus
+101:Secretorum Secretorum
+102:Epitome Invocation
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt b/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt
new file mode 100644
index 0000000..d284c69
--- /dev/null
+++ b/Source/GrasscutterTools/Resources/zh-cn/GachaBannerTitle.txt
@@ -0,0 +1,45 @@
+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:深秘之息-阿贝多
+101:神铸赋形-圣显绿箭
\ No newline at end of file
diff --git a/Source/GrasscutterTools/Resources/zh-tw/GachaBennerTitle.txt b/Source/GrasscutterTools/Resources/zh-tw/GachaBennerTitle.txt
new file mode 100644
index 0000000..8481ed7
--- /dev/null
+++ b/Source/GrasscutterTools/Resources/zh-tw/GachaBennerTitle.txt
@@ -0,0 +1,45 @@
+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:深秘之息-阿貝多
+101:神鑄賦形-聖顯綠箭
\ No newline at end of file