diff --git a/Source/GrasscutterTools/App.config b/Source/GrasscutterTools/App.config index 53c7c69..23becb7 100644 --- a/Source/GrasscutterTools/App.config +++ b/Source/GrasscutterTools/App.config @@ -67,6 +67,9 @@ 0 + + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Forms/FormActivityEditor.Designer.cs b/Source/GrasscutterTools/Forms/FormActivityEditor.Designer.cs new file mode 100644 index 0000000..012dd7f --- /dev/null +++ b/Source/GrasscutterTools/Forms/FormActivityEditor.Designer.cs @@ -0,0 +1,448 @@ +namespace GrasscutterTools.Forms +{ + partial class FormActivityEditor + { + /// + /// 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() + { + this.BtnSave = new System.Windows.Forms.Button(); + this.BtnLoad = new System.Windows.Forms.Button(); + this.ActivityConfigJsonPath = new System.Windows.Forms.TextBox(); + this.LblActivityConfigJsonPath = new System.Windows.Forms.Label(); + this.GrpAllActivity = new System.Windows.Forms.GroupBox(); + this.ListAllActivity = new System.Windows.Forms.ListView(); + this.GrpFileActivity = new System.Windows.Forms.GroupBox(); + this.GrpActivityInfo = new System.Windows.Forms.GroupBox(); + this.LblActivityTitle = new System.Windows.Forms.Label(); + this.LblActivityParmEditTip = new System.Windows.Forms.Label(); + this.BtnDelete = new System.Windows.Forms.Button(); + this.BtnAddOrUpdate = new System.Windows.Forms.Button(); + this.DTPEndTime = new System.Windows.Forms.DateTimePicker(); + this.DTPBeginTime = new System.Windows.Forms.DateTimePicker(); + this.TxtMeetCondList = new System.Windows.Forms.TextBox(); + this.NUDScheduleId = new System.Windows.Forms.NumericUpDown(); + this.NUDActivityType = new System.Windows.Forms.NumericUpDown(); + this.NUDActivityId = new System.Windows.Forms.NumericUpDown(); + this.LblEndTime = new System.Windows.Forms.Label(); + this.LblBeginTime = new System.Windows.Forms.Label(); + this.LblMeetCondList = new System.Windows.Forms.Label(); + this.LblScheduleId = new System.Windows.Forms.Label(); + this.LblActivityType = new System.Windows.Forms.Label(); + this.LblActivityId = new System.Windows.Forms.Label(); + this.ColumnActivityName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ColumnActivityId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ListActivityConfigItems = new System.Windows.Forms.ListView(); + this.ColActivityId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ColActivityTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ColActivityBeginTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ColActivityEndTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.GrpAllActivity.SuspendLayout(); + this.GrpFileActivity.SuspendLayout(); + this.GrpActivityInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NUDActivityType)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NUDActivityId)).BeginInit(); + this.SuspendLayout(); + // + // BtnSave + // + this.BtnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BtnSave.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BtnSave.Location = new System.Drawing.Point(776, 12); + this.BtnSave.Name = "BtnSave"; + this.BtnSave.Size = new System.Drawing.Size(100, 23); + this.BtnSave.TabIndex = 3; + this.BtnSave.Text = "保存"; + this.BtnSave.UseVisualStyleBackColor = true; + this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click); + // + // BtnLoad + // + this.BtnLoad.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BtnLoad.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BtnLoad.Location = new System.Drawing.Point(671, 12); + this.BtnLoad.Name = "BtnLoad"; + this.BtnLoad.Size = new System.Drawing.Size(100, 23); + this.BtnLoad.TabIndex = 2; + this.BtnLoad.Text = "加载"; + this.BtnLoad.UseVisualStyleBackColor = true; + this.BtnLoad.Click += new System.EventHandler(this.BtnLoad_Click); + // + // ActivityConfigJsonPath + // + this.ActivityConfigJsonPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ActivityConfigJsonPath.Location = new System.Drawing.Point(176, 12); + this.ActivityConfigJsonPath.Name = "ActivityConfigJsonPath"; + this.ActivityConfigJsonPath.Size = new System.Drawing.Size(489, 23); + this.ActivityConfigJsonPath.TabIndex = 1; + // + // LblActivityConfigJsonPath + // + this.LblActivityConfigJsonPath.AutoSize = true; + this.LblActivityConfigJsonPath.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.LblActivityConfigJsonPath.Location = new System.Drawing.Point(17, 15); + this.LblActivityConfigJsonPath.Name = "LblActivityConfigJsonPath"; + this.LblActivityConfigJsonPath.Size = new System.Drawing.Size(153, 17); + this.LblActivityConfigJsonPath.TabIndex = 0; + this.LblActivityConfigJsonPath.Text = "ActivityConfig.json 路径:"; + // + // GrpAllActivity + // + this.GrpAllActivity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.GrpAllActivity.Controls.Add(this.ListAllActivity); + this.GrpAllActivity.Location = new System.Drawing.Point(612, 41); + this.GrpAllActivity.Name = "GrpAllActivity"; + this.GrpAllActivity.Size = new System.Drawing.Size(260, 328); + this.GrpAllActivity.TabIndex = 6; + this.GrpAllActivity.TabStop = false; + this.GrpAllActivity.Text = "已知活动 by dplek"; + // + // ListAllActivity + // + this.ListAllActivity.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.ColumnActivityId, + this.ColumnActivityName}); + this.ListAllActivity.Dock = System.Windows.Forms.DockStyle.Fill; + this.ListAllActivity.FullRowSelect = true; + this.ListAllActivity.HideSelection = false; + this.ListAllActivity.Location = new System.Drawing.Point(3, 19); + this.ListAllActivity.MultiSelect = false; + this.ListAllActivity.Name = "ListAllActivity"; + this.ListAllActivity.Size = new System.Drawing.Size(254, 306); + this.ListAllActivity.TabIndex = 0; + this.ListAllActivity.UseCompatibleStateImageBehavior = false; + this.ListAllActivity.View = System.Windows.Forms.View.Details; + this.ListAllActivity.SelectedIndexChanged += new System.EventHandler(this.ListAllActivity_SelectedIndexChanged); + // + // GrpFileActivity + // + this.GrpFileActivity.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.GrpFileActivity.Controls.Add(this.ListActivityConfigItems); + this.GrpFileActivity.Location = new System.Drawing.Point(12, 41); + this.GrpFileActivity.Name = "GrpFileActivity"; + this.GrpFileActivity.Size = new System.Drawing.Size(260, 328); + this.GrpFileActivity.TabIndex = 4; + this.GrpFileActivity.TabStop = false; + this.GrpFileActivity.Text = "当前文件"; + // + // GrpActivityInfo + // + this.GrpActivityInfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.GrpActivityInfo.Controls.Add(this.LblActivityTitle); + this.GrpActivityInfo.Controls.Add(this.LblActivityParmEditTip); + this.GrpActivityInfo.Controls.Add(this.BtnDelete); + this.GrpActivityInfo.Controls.Add(this.BtnAddOrUpdate); + this.GrpActivityInfo.Controls.Add(this.DTPEndTime); + this.GrpActivityInfo.Controls.Add(this.DTPBeginTime); + this.GrpActivityInfo.Controls.Add(this.TxtMeetCondList); + this.GrpActivityInfo.Controls.Add(this.NUDScheduleId); + this.GrpActivityInfo.Controls.Add(this.NUDActivityType); + this.GrpActivityInfo.Controls.Add(this.NUDActivityId); + this.GrpActivityInfo.Controls.Add(this.LblEndTime); + this.GrpActivityInfo.Controls.Add(this.LblBeginTime); + this.GrpActivityInfo.Controls.Add(this.LblMeetCondList); + this.GrpActivityInfo.Controls.Add(this.LblScheduleId); + this.GrpActivityInfo.Controls.Add(this.LblActivityType); + this.GrpActivityInfo.Controls.Add(this.LblActivityId); + this.GrpActivityInfo.Location = new System.Drawing.Point(278, 41); + this.GrpActivityInfo.Name = "GrpActivityInfo"; + this.GrpActivityInfo.Size = new System.Drawing.Size(328, 328); + this.GrpActivityInfo.TabIndex = 5; + this.GrpActivityInfo.TabStop = false; + this.GrpActivityInfo.Text = "活动信息"; + // + // LblActivityTitle + // + this.LblActivityTitle.AutoEllipsis = true; + this.LblActivityTitle.ForeColor = System.Drawing.SystemColors.GrayText; + this.LblActivityTitle.Location = new System.Drawing.Point(173, 45); + this.LblActivityTitle.Name = "LblActivityTitle"; + this.LblActivityTitle.Size = new System.Drawing.Size(134, 17); + this.LblActivityTitle.TabIndex = 2; + this.LblActivityTitle.Text = "活动名称"; + // + // LblActivityParmEditTip + // + this.LblActivityParmEditTip.AutoSize = true; + this.LblActivityParmEditTip.ForeColor = System.Drawing.SystemColors.GrayText; + this.LblActivityParmEditTip.Location = new System.Drawing.Point(40, 251); + this.LblActivityParmEditTip.Name = "LblActivityParmEditTip"; + this.LblActivityParmEditTip.Size = new System.Drawing.Size(248, 17); + this.LblActivityParmEditTip.TabIndex = 13; + this.LblActivityParmEditTip.Text = "提示:通常情况下你只需要修改活动进行时间"; + // + // BtnDelete + // + this.BtnDelete.Enabled = false; + this.BtnDelete.Location = new System.Drawing.Point(199, 271); + this.BtnDelete.Name = "BtnDelete"; + this.BtnDelete.Size = new System.Drawing.Size(89, 30); + this.BtnDelete.TabIndex = 15; + this.BtnDelete.Text = "- 删除"; + this.BtnDelete.UseVisualStyleBackColor = true; + this.BtnDelete.Click += new System.EventHandler(this.BtnDelete_Click); + // + // BtnAddOrUpdate + // + this.BtnAddOrUpdate.Location = new System.Drawing.Point(43, 271); + this.BtnAddOrUpdate.Name = "BtnAddOrUpdate"; + this.BtnAddOrUpdate.Size = new System.Drawing.Size(150, 30); + this.BtnAddOrUpdate.TabIndex = 14; + this.BtnAddOrUpdate.Text = "√ 添加或更新"; + this.BtnAddOrUpdate.UseVisualStyleBackColor = true; + this.BtnAddOrUpdate.Click += new System.EventHandler(this.BtnAddOrUpdate_Click); + // + // DTPEndTime + // + this.DTPEndTime.Location = new System.Drawing.Point(107, 188); + this.DTPEndTime.Name = "DTPEndTime"; + this.DTPEndTime.Size = new System.Drawing.Size(200, 23); + this.DTPEndTime.TabIndex = 12; + // + // DTPBeginTime + // + this.DTPBeginTime.Location = new System.Drawing.Point(107, 159); + this.DTPBeginTime.Name = "DTPBeginTime"; + this.DTPBeginTime.Size = new System.Drawing.Size(200, 23); + this.DTPBeginTime.TabIndex = 10; + // + // TxtMeetCondList + // + this.TxtMeetCondList.Location = new System.Drawing.Point(107, 130); + this.TxtMeetCondList.Name = "TxtMeetCondList"; + this.TxtMeetCondList.Size = new System.Drawing.Size(200, 23); + this.TxtMeetCondList.TabIndex = 8; + // + // NUDScheduleId + // + this.NUDScheduleId.Location = new System.Drawing.Point(107, 101); + this.NUDScheduleId.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.NUDScheduleId.Name = "NUDScheduleId"; + this.NUDScheduleId.Size = new System.Drawing.Size(80, 23); + this.NUDScheduleId.TabIndex = 6; + // + // NUDActivityType + // + this.NUDActivityType.Location = new System.Drawing.Point(107, 72); + this.NUDActivityType.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.NUDActivityType.Name = "NUDActivityType"; + this.NUDActivityType.Size = new System.Drawing.Size(60, 23); + this.NUDActivityType.TabIndex = 4; + // + // NUDActivityId + // + this.NUDActivityId.Location = new System.Drawing.Point(107, 43); + this.NUDActivityId.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.NUDActivityId.Name = "NUDActivityId"; + this.NUDActivityId.Size = new System.Drawing.Size(60, 23); + this.NUDActivityId.TabIndex = 1; + this.NUDActivityId.ValueChanged += new System.EventHandler(this.NUDActivityId_ValueChanged); + // + // LblEndTime + // + this.LblEndTime.AutoSize = true; + this.LblEndTime.Location = new System.Drawing.Point(21, 193); + this.LblEndTime.Name = "LblEndTime"; + this.LblEndTime.Size = new System.Drawing.Size(80, 17); + this.LblEndTime.TabIndex = 11; + this.LblEndTime.Text = "活动结束时间"; + // + // LblBeginTime + // + this.LblBeginTime.AutoSize = true; + this.LblBeginTime.Location = new System.Drawing.Point(21, 164); + this.LblBeginTime.Name = "LblBeginTime"; + this.LblBeginTime.Size = new System.Drawing.Size(80, 17); + this.LblBeginTime.TabIndex = 9; + this.LblBeginTime.Text = "活动开始时间"; + // + // LblMeetCondList + // + this.LblMeetCondList.AutoSize = true; + this.LblMeetCondList.Location = new System.Drawing.Point(21, 133); + this.LblMeetCondList.Name = "LblMeetCondList"; + this.LblMeetCondList.Size = new System.Drawing.Size(80, 17); + this.LblMeetCondList.TabIndex = 7; + this.LblMeetCondList.Text = "满足条件列表"; + // + // LblScheduleId + // + this.LblScheduleId.AutoSize = true; + this.LblScheduleId.Location = new System.Drawing.Point(21, 103); + this.LblScheduleId.Name = "LblScheduleId"; + this.LblScheduleId.Size = new System.Drawing.Size(45, 17); + this.LblScheduleId.TabIndex = 5; + this.LblScheduleId.Text = "计划ID"; + // + // LblActivityType + // + this.LblActivityType.AutoSize = true; + this.LblActivityType.Location = new System.Drawing.Point(21, 74); + this.LblActivityType.Name = "LblActivityType"; + this.LblActivityType.Size = new System.Drawing.Size(56, 17); + this.LblActivityType.TabIndex = 3; + this.LblActivityType.Text = "活动类型"; + // + // LblActivityId + // + this.LblActivityId.AutoSize = true; + this.LblActivityId.Location = new System.Drawing.Point(21, 45); + this.LblActivityId.Name = "LblActivityId"; + this.LblActivityId.Size = new System.Drawing.Size(45, 17); + this.LblActivityId.TabIndex = 0; + this.LblActivityId.Text = "活动ID"; + // + // ColumnActivityName + // + this.ColumnActivityName.Text = "活动名称"; + this.ColumnActivityName.Width = 300; + // + // ColumnActivityId + // + this.ColumnActivityId.Text = "ID"; + this.ColumnActivityId.Width = 50; + // + // ListActivityConfigItems + // + this.ListActivityConfigItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.ColActivityId, + this.ColActivityTitle, + this.ColActivityBeginTime, + this.ColActivityEndTime}); + this.ListActivityConfigItems.Dock = System.Windows.Forms.DockStyle.Fill; + this.ListActivityConfigItems.FullRowSelect = true; + this.ListActivityConfigItems.HideSelection = false; + this.ListActivityConfigItems.Location = new System.Drawing.Point(3, 19); + this.ListActivityConfigItems.MultiSelect = false; + this.ListActivityConfigItems.Name = "ListActivityConfigItems"; + this.ListActivityConfigItems.Size = new System.Drawing.Size(254, 306); + this.ListActivityConfigItems.TabIndex = 0; + this.ListActivityConfigItems.UseCompatibleStateImageBehavior = false; + this.ListActivityConfigItems.View = System.Windows.Forms.View.Details; + this.ListActivityConfigItems.SelectedIndexChanged += new System.EventHandler(this.ListActivityConfigItems_SelectedIndexChanged); + // + // ColActivityId + // + this.ColActivityId.Text = "ID"; + this.ColActivityId.Width = 50; + // + // ColActivityTitle + // + this.ColActivityTitle.Text = "活动名称"; + this.ColActivityTitle.Width = 150; + // + // ColActivityBeginTime + // + this.ColActivityBeginTime.Text = "开始时间"; + this.ColActivityBeginTime.Width = 120; + // + // ColActivityEndTime + // + this.ColActivityEndTime.Text = "结束时间"; + this.ColActivityEndTime.Width = 120; + // + // FormActivityEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 381); + this.Controls.Add(this.GrpAllActivity); + this.Controls.Add(this.GrpActivityInfo); + this.Controls.Add(this.GrpFileActivity); + this.Controls.Add(this.BtnSave); + this.Controls.Add(this.BtnLoad); + this.Controls.Add(this.ActivityConfigJsonPath); + this.Controls.Add(this.LblActivityConfigJsonPath); + this.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(900, 420); + this.Name = "FormActivityEditor"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ActivityConfig.json Editor"; + this.GrpAllActivity.ResumeLayout(false); + this.GrpFileActivity.ResumeLayout(false); + this.GrpActivityInfo.ResumeLayout(false); + this.GrpActivityInfo.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NUDActivityType)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NUDActivityId)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button BtnSave; + private System.Windows.Forms.Button BtnLoad; + private System.Windows.Forms.TextBox ActivityConfigJsonPath; + private System.Windows.Forms.Label LblActivityConfigJsonPath; + private System.Windows.Forms.GroupBox GrpAllActivity; + private System.Windows.Forms.GroupBox GrpFileActivity; + private System.Windows.Forms.GroupBox GrpActivityInfo; + private System.Windows.Forms.ListView ListAllActivity; + private System.Windows.Forms.Label LblEndTime; + private System.Windows.Forms.Label LblBeginTime; + private System.Windows.Forms.Label LblMeetCondList; + private System.Windows.Forms.Label LblScheduleId; + private System.Windows.Forms.Label LblActivityType; + private System.Windows.Forms.Label LblActivityId; + private System.Windows.Forms.Button BtnDelete; + private System.Windows.Forms.Button BtnAddOrUpdate; + private System.Windows.Forms.DateTimePicker DTPEndTime; + private System.Windows.Forms.DateTimePicker DTPBeginTime; + private System.Windows.Forms.TextBox TxtMeetCondList; + private System.Windows.Forms.NumericUpDown NUDScheduleId; + private System.Windows.Forms.NumericUpDown NUDActivityType; + private System.Windows.Forms.NumericUpDown NUDActivityId; + private System.Windows.Forms.Label LblActivityParmEditTip; + private System.Windows.Forms.Label LblActivityTitle; + private System.Windows.Forms.ColumnHeader ColumnActivityId; + private System.Windows.Forms.ColumnHeader ColumnActivityName; + private System.Windows.Forms.ListView ListActivityConfigItems; + private System.Windows.Forms.ColumnHeader ColActivityId; + private System.Windows.Forms.ColumnHeader ColActivityTitle; + private System.Windows.Forms.ColumnHeader ColActivityBeginTime; + private System.Windows.Forms.ColumnHeader ColActivityEndTime; + } +} \ No newline at end of file diff --git a/Source/GrasscutterTools/Forms/FormActivityEditor.cs b/Source/GrasscutterTools/Forms/FormActivityEditor.cs new file mode 100644 index 0000000..d3884e7 --- /dev/null +++ b/Source/GrasscutterTools/Forms/FormActivityEditor.cs @@ -0,0 +1,301 @@ +/** + * Grasscutter Tools + * Copyright (C) 2023 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.IO; +using System.Linq; +using System.Windows.Forms; + +using GrasscutterTools.Game; +using GrasscutterTools.Game.Activity; +using GrasscutterTools.Properties; +using GrasscutterTools.Utils; + +using Newtonsoft.Json; + +namespace GrasscutterTools.Forms +{ + public partial class FormActivityEditor : Form + { + #region - 成员 - + + private List ActivityConfigItems; + + #endregion - 成员 - + + #region - 构造与窗体事件 - + + public FormActivityEditor() + { + InitializeComponent(); + + Icon = Resources.IconGrasscutter; + + DTPBeginTime.Value = DateTime.Today; + DTPEndTime.Value = DateTime.Today.AddMonths(1); + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + LoadAllActivity(); + + try + { + // 加载文件路径 + var path = Settings.Default.ActivityConfigJsonPath; + ActivityConfigJsonPath.Text = path; + if (!string.IsNullOrEmpty(path) && File.Exists(path)) + LoadActivityConfig(path); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + protected override void OnFormClosed(FormClosedEventArgs e) + { + Settings.Default.ActivityConfigJsonPath = ActivityConfigJsonPath.Text; + + base.OnFormClosed(e); + } + + #endregion - 构造与窗体事件 - + + #region - ActivityConfig.json 文件相关 - + + /// + /// 加载按钮点击时触发 + /// + private void BtnLoad_Click(object sender, EventArgs e) + { + try + { + var path = ActivityConfigJsonPath.Text.Trim(); + if (path == string.Empty) + { + var dialog = new OpenFileDialog + { + FileName = "ActivityConfig.json", + Filter = "ActivityConfig.Json (*.json)|*.json|All files (*.*)|*.*", + }; + var result = dialog.ShowDialog(); + if (result == DialogResult.OK) + path = ActivityConfigJsonPath.Text = dialog.FileName; + else + return; + } + + // 反序列化 + LoadActivityConfig(path); + MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 加载活动配置 + /// + /// ActivityConfig.json 文件路径 + private void LoadActivityConfig(string path) + { + ActivityConfigItems = JsonConvert.DeserializeObject>(File.ReadAllText(path)) ?? new List(); + ListActivityConfigItems.BeginUpdate(); + ListActivityConfigItems.Items.Clear(); + ListActivityConfigItems.Items.AddRange(ActivityConfigItems.Select(Convert).ToArray()); + ListActivityConfigItems.EndUpdate(); + } + + private ListViewItem Convert(ActivityConfigItem item) + { + return new ListViewItem(new[] + { + item.ActivityId.ToString(), + GameData.Activity[item.ActivityId], + item.BeginTime.ToShortDateString(), + item.EndTime.ToShortDateString(), + }); + } + + /// + /// 保存按钮点击时触发 + /// + private void BtnSave_Click(object sender, EventArgs e) + { + try + { + var path = ActivityConfigJsonPath.Text.Trim(); + if (path == string.Empty) + { + var dialog = new SaveFileDialog + { + FileName = "ActivityConfig.json", + Filter = "ActivityConfig.json (*.json)|*.json|All files (*.*)|*.*", + }; + var result = dialog.ShowDialog(); + if (result == DialogResult.OK) + path = ActivityConfigJsonPath.Text = dialog.FileName; + else + return; + } + + // 序列化 + File.WriteAllText(path, JsonConvert.SerializeObject(ActivityConfigItems, Formatting.Indented)); + MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + #endregion - ActivityConfig.json 文件相关 - + + #region - 活动列表 - + + /// + /// 加载所有活动 + /// + private void LoadAllActivity() + { + ListAllActivity.BeginUpdate(); + foreach (var grp in GameData.Activity) + { + var grpControl = ListAllActivity.Groups.Add(grp.Key, grp.Key); + for (var i = 0; i < grp.Value.Count; i++) + { + ListAllActivity.Items.Add(new ListViewItem(new[] + { + grp.Value.Ids[i].ToString(), grp.Value.Names[i] + }, grpControl)); + } + } + ListAllActivity.EndUpdate(); + } + + /// + /// 所有活动列表选中项改变时触发 + /// + private void ListAllActivity_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (ListAllActivity.SelectedItems.Count == 0) + return; + NUDActivityId.Text = ListAllActivity.SelectedItems[0].Text; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 活动ID改变时触发 + /// + private void NUDActivityId_ValueChanged(object sender, EventArgs e) + { + // 更新活动名称到提示文本 + var activityId = (int)NUDActivityId.Value; + LblActivityTitle.Text = GameData.Activity[activityId]; + + // 检查是否在列表中,允许删除 + var item = ActivityConfigItems.Find(it => it.ActivityId == activityId); + BtnDelete.Enabled = item != null; + } + + /// + /// 点击添加或更新按钮时触发 + /// + private async void BtnAddOrUpdate_Click(object sender, EventArgs e) + { + var activityId = (int)NUDActivityId.Value; + var item = ActivityConfigItems.Find(it => it.ActivityId == activityId); + if (item == null) + { + item = new ActivityConfigItem(); + ActivityConfigItems.Add(item); + ListActivityConfigItems.Items.Add(Convert(item)); + } + + item.ActivityType = (int)NUDActivityType.Value; + item.ScheduleId = (int)NUDScheduleId.Value; + try + { + item.MeetCondList = TxtMeetCondList.Text.Split(',').Select(it => int.Parse(it.Trim())).ToList(); + } + catch (Exception ex) + { + item.MeetCondList = new List(); + } + + if (DTPBeginTime.Value > DTPEndTime.Value) + { + // ? + } + + item.BeginTime = DTPBeginTime.Value.Date; + item.EndTime = DTPEndTime.Value.Date.AddDays(1).AddSeconds(-1); + + BtnDelete.Enabled = true; + await UIUtil.ButtonComplete(BtnAddOrUpdate); + } + + /// + /// 点击删除按钮时触发 + /// + private void BtnDelete_Click(object sender, EventArgs e) + { + var activityId = (int)NUDActivityId.Value; + var index = ActivityConfigItems.FindIndex(it => it.ActivityId == activityId); + if (index != -1) + { + ListActivityConfigItems.Items.RemoveAt(index); + ActivityConfigItems.RemoveAt(index); + } + BtnDelete.Enabled = false; + } + + /// + /// 当前文件活动配置列表选中项改变时触发 + /// + private void ListActivityConfigItems_SelectedIndexChanged(object sender, EventArgs e) + { + if (ListActivityConfigItems.SelectedItems.Count == 0) + return; + var index = ListActivityConfigItems.SelectedIndices[0]; + var configItem = ActivityConfigItems[index]; + NUDActivityId.Value = configItem.ActivityId; + NUDActivityType.Value = configItem.ActivityType; + NUDScheduleId.Value = configItem.ScheduleId; + TxtMeetCondList.Text = configItem.MeetCondList?.Count > 0 + ? string.Join(",", configItem.MeetCondList) + : string.Empty; + DTPBeginTime.Value = configItem.BeginTime; + DTPEndTime.Value = configItem.EndTime; + } + + #endregion - 活动列表 - + } +} \ No newline at end of file diff --git a/Source/GrasscutterTools/Forms/FormActivityEditor.resx b/Source/GrasscutterTools/Forms/FormActivityEditor.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Source/GrasscutterTools/Forms/FormActivityEditor.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Game/Activity/ActivityConfigItem.cs b/Source/GrasscutterTools/Game/Activity/ActivityConfigItem.cs new file mode 100644 index 0000000..03c245a --- /dev/null +++ b/Source/GrasscutterTools/Game/Activity/ActivityConfigItem.cs @@ -0,0 +1,65 @@ +/** + * Grasscutter Tools + * Copyright (C) 2023 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 Newtonsoft.Json; + +namespace GrasscutterTools.Game.Activity +{ + public class ActivityConfigItem + { + /// + /// 活动ID + /// + [JsonProperty("activityId")] + public int ActivityId { get; set; } + + /// + /// 活动类型 + /// + [JsonProperty("activityType")] + public int ActivityType { get; set; } + + /// + /// 调度ID + /// + [JsonProperty("scheduleId")] + public int ScheduleId { get; set; } + + /// + /// 满足条件列表 + /// + [JsonProperty("meetCondList")] + public List MeetCondList { get; set; } + + /// + /// 活动开始时间 + /// + [JsonProperty("beginTime")] + public DateTime BeginTime { get; set; } + + /// + /// 活动结束时间 + /// + [JsonProperty("endTime")] + public DateTime EndTime { get; set; } + } +} diff --git a/Source/GrasscutterTools/Game/GameData.cs b/Source/GrasscutterTools/Game/GameData.cs index ee0fa6c..9f4a496 100644 --- a/Source/GrasscutterTools/Game/GameData.cs +++ b/Source/GrasscutterTools/Game/GameData.cs @@ -26,6 +26,7 @@ namespace GrasscutterTools.Game public static void LoadResources() { Achievements = new ItemMap(Resources.Achievement); + Activity = new ItemMapGroup(Resources.Activity); Artifacts = new ItemMap(Resources.Artifact); ArtifactCats = new ItemMap(Resources.ArtifactCat); ArtifactMainAttribution = new ItemMap(Resources.ArtifactMainAttribution); @@ -46,6 +47,9 @@ namespace GrasscutterTools.Game } public static ItemMap Achievements { get; private set; } + + public static ItemMapGroup Activity { get; private set; } + public static ItemMap Artifacts { get; private set; } public static ItemMap ArtifactCats { get; private set; } diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj index dcb9cb8..60b669a 100644 --- a/Source/GrasscutterTools/GrasscutterTools.csproj +++ b/Source/GrasscutterTools/GrasscutterTools.csproj @@ -87,6 +87,12 @@ + + Form + + + FormActivityEditor.cs + Form @@ -129,6 +135,7 @@ FormTextMapBrowser.cs + @@ -269,6 +276,9 @@ + + FormActivityEditor.cs + FormDropEditor.cs @@ -370,9 +380,18 @@ PageAbout.cs + + PageAchievement.cs + PageAchievement.cs + + PageAchievement.cs + + + PageAchievement.cs + PageAvatar.cs @@ -628,6 +647,7 @@ + @@ -682,5 +702,6 @@ 4.3.0 + \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageHome.Designer.cs b/Source/GrasscutterTools/Pages/PageHome.Designer.cs index 23708e8..ae57717 100644 --- a/Source/GrasscutterTools/Pages/PageHome.Designer.cs +++ b/Source/GrasscutterTools/Pages/PageHome.Designer.cs @@ -45,6 +45,7 @@ this.NUDUid = new System.Windows.Forms.NumericUpDown(); this.ChkIncludeUID = new System.Windows.Forms.CheckBox(); this.LblDefaultUid = new System.Windows.Forms.Label(); + this.BtnActivityEditor = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.GrasscutterToolsIcon)).BeginInit(); this.GrpSettings.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.NUDUid)).BeginInit(); @@ -118,9 +119,9 @@ // // CmbGcVersions // + resources.ApplyResources(this.CmbGcVersions, "CmbGcVersions"); this.CmbGcVersions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.CmbGcVersions.FormattingEnabled = true; - resources.ApplyResources(this.CmbGcVersions, "CmbGcVersions"); this.CmbGcVersions.Name = "CmbGcVersions"; // // ChkTopMost @@ -131,9 +132,9 @@ // // CmbLanguage // + resources.ApplyResources(this.CmbLanguage, "CmbLanguage"); this.CmbLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.CmbLanguage.FormattingEnabled = true; - resources.ApplyResources(this.CmbLanguage, "CmbLanguage"); this.CmbLanguage.Name = "CmbLanguage"; // // LblLanguage @@ -167,10 +168,18 @@ resources.ApplyResources(this.LblDefaultUid, "LblDefaultUid"); this.LblDefaultUid.Name = "LblDefaultUid"; // + // BtnActivityEditor + // + resources.ApplyResources(this.BtnActivityEditor, "BtnActivityEditor"); + this.BtnActivityEditor.Name = "BtnActivityEditor"; + this.BtnActivityEditor.UseVisualStyleBackColor = true; + this.BtnActivityEditor.Click += new System.EventHandler(this.BtnActivityEditor_Click); + // // PageHome // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BtnActivityEditor); this.Controls.Add(this.LblAbout); this.Controls.Add(this.BtnOpenTextMap); this.Controls.Add(this.BtnOpenGachaBannerEditor); @@ -207,5 +216,6 @@ private System.Windows.Forms.NumericUpDown NUDUid; private System.Windows.Forms.CheckBox ChkIncludeUID; private System.Windows.Forms.Label LblDefaultUid; + private System.Windows.Forms.Button BtnActivityEditor; } } diff --git a/Source/GrasscutterTools/Pages/PageHome.cs b/Source/GrasscutterTools/Pages/PageHome.cs index 96c9a26..3011b5b 100644 --- a/Source/GrasscutterTools/Pages/PageHome.cs +++ b/Source/GrasscutterTools/Pages/PageHome.cs @@ -152,6 +152,12 @@ namespace GrasscutterTools.Pages private void BtnOpenShopEditor_Click(object sender, EventArgs e) => ShowForm("ShopEditor"); + /// + /// 点击打开活动编辑器时触发 + /// + private void BtnActivityEditor_Click(object sender, EventArgs e) + => ShowForm("ActivityEditor"); + /// /// 当选中语言改变时触发 /// @@ -194,5 +200,6 @@ namespace GrasscutterTools.Pages LnkNewVersion.Visible = false; } } + } } \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageHome.en-US.resx b/Source/GrasscutterTools/Pages/PageHome.en-US.resx index b1ad1f7..8cdd852 100644 --- a/Source/GrasscutterTools/Pages/PageHome.en-US.resx +++ b/Source/GrasscutterTools/Pages/PageHome.en-US.resx @@ -136,9 +136,6 @@ Gacha Editor - - Settings - 109, 21 @@ -151,4 +148,13 @@ Include UID + + Settings + + + 542, 213 + + + Activity Editor + \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageHome.resx b/Source/GrasscutterTools/Pages/PageHome.resx index d68becb..6b142ef 100644 --- a/Source/GrasscutterTools/Pages/PageHome.resx +++ b/Source/GrasscutterTools/Pages/PageHome.resx @@ -117,577 +117,508 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom, Left - - - NoControl - - - 310, 184 - - - 100, 23 - - - - 3 - - - 商店编辑器 - - - BtnOpenShopEditor - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - Bottom, Left - - - NoControl - - - 416, 184 - - - 100, 23 - - - 4 - - - 掉落物编辑器 - - - BtnOpenDropEditor - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Bottom, Left - - - True - - - NoControl - - - 3, 105 - - - 104, 17 - - - 1 - - - New Version Tip - - - False - - - LnkNewVersion - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - Top, Bottom, Left - - - Microsoft YaHei UI, 13pt - - - NoControl - 3, 3 - - 320, 102 - - - 0 - - - 祝你玩得愉快! - - - MiddleCenter - - - LblAbout - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - Bottom, Left - - - NoControl - - - 416, 213 - - - 100, 23 - - - 6 - - - 文本浏览器 - - - BtnOpenTextMap - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Bottom, Left - - - NoControl - - - 310, 213 - - - 100, 23 - - - 5 - - - 奖池编辑器 - - - BtnOpenGachaBannerEditor - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Top, Bottom, Left, Right - - - NoControl - - - 310, 3 - - - 333, 175 - - - CenterImage - - - 14 - - - GrasscutterToolsIcon - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - Bottom, Left - - - LblGCVersion - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 0 - - - CmbGcVersions - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 1 - ChkTopMost - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + GrasscutterToolsIcon - - GrpSettings - - - 2 - - - CmbLanguage - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 3 - - - LblLanguage - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 4 - - - NUDUid - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 5 - - - ChkIncludeUID - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 6 - - - LblDefaultUid - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 7 - - - 3, 125 - - - 301, 111 - - - 2 - - - 设置 - - - GrpSettings - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - + + True - - NoControl + + 100, 23 - - 7, 83 - - - 25, 17 + + $this 5 + + GrpSettings + + + GrpSettings + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + UID + GC + + 语言/Language/язык + + + True + + + 310, 213 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + LblLanguage + + + 333, 175 + + + GrpSettings + + + 6 + + + 6 + + + 祝你玩得愉快! + + + 7 + + + 7 + + + + NoControl + + + 320, 102 + + + 301, 111 + + + True + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + Bottom, Left + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + GrpSettings + + + 310, 3 + + + 生成的命令包含UID + + + NoControl + + + PageHome + + + 147, 23 + + + Bottom, Left + + + Bottom, Left + + + 0 + + + ChkIncludeUID + + + CenterImage + + + BtnOpenShopEditor + + + 3 + + + 416, 213 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + LblAbout + + + 3 + + + 0 + + + GrpSettings + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + GrpSettings + + + 100, 23 + + + $this + + + BtnOpenDropEditor + + + Bottom, Left + + + True + + + NoControl + + + 4 + + + 3 + + + Microsoft YaHei UI, 13pt + + + 4 + + + 窗口置顶 + + + 3, 125 + + + $this + + + NoControl + + + 7, 17 + + + 100, 23 + + + 设置 + + + NoControl + + + $this + + + 133, 21 + + + 文本浏览器 + + + Bottom, Left + + + 7 + + + 1 + + + 30, 17 + + + LblDefaultUid + + + BtnOpenTextMap + + + MiddleCenter + + + GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.9.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923 + + + False + + + True + + + NoControl + + + 活动编辑器 + LblGCVersion - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 掉落物编辑器 + + GrpSettings - + + $this + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 + + True + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + 25, 17 + + + NoControl + 41, 80 100, 25 - - 6 - - - CmbGcVersions - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 1 - - - True - - - NoControl - - - 147, 82 - - - 75, 21 - - - 7 - - - 窗口置顶 - - - ChkTopMost - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 2 + + $this 41, 51 - - 100, 25 - - - 3 - - - CmbLanguage - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + GrpSettings - - 3 - - - True - - - NoControl - - - 147, 54 - - - 128, 17 - - - 4 - - - 语言/Language/язык - - - LblLanguage - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 4 - 41, 22 - - 100, 23 + + CmbLanguage - - 1 + + 75, 21 - - NUDUid + + CmbGcVersions - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 5 - - - True - - - NoControl - - - 147, 23 - - - 133, 21 - - + 2 - - 生成的命令包含UID + + New Version Tip - - ChkIncludeUID + + BtnOpenGachaBannerEditor - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 2 - - GrpSettings + + 147, 54 + + + 100, 23 + + + 14 6 - - True + + 8 - + NoControl + + 100, 23 + + + $this + + + 4 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + 2 + + + 522, 213 + + + 100, 23 + + + 416, 184 + + + 7 + + + 5 + + + 2 + + + NUDUid + + + 104, 17 + + + 128, 17 + + + $this + + + NoControl + + + Bottom, Left + + + GrpSettings + + + 奖池编辑器 + + + Top, Bottom, Left + + + 6 + + + 1 + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom, Left + + + NoControl + + + LnkNewVersion + + + 100, 25 + + + 商店编辑器 + + + 147, 82 + + + 5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top, Bottom, Left, Right + + + 0 + + + 310, 184 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + BtnActivityEditor + + + 7, 83 + + + 3, 105 + 7, 24 - - 30, 17 - - - 0 - - - UID - - - LblDefaultUid - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrpSettings - - - 7 + + NoControl True - - 7, 17 - - - PageHome - - - GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923 - \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageHome.ru-RU.resx b/Source/GrasscutterTools/Pages/PageHome.ru-RU.resx index a3acbe8..b7b1d27 100644 --- a/Source/GrasscutterTools/Pages/PageHome.ru-RU.resx +++ b/Source/GrasscutterTools/Pages/PageHome.ru-RU.resx @@ -121,6 +121,10 @@ 140, 23 + + + 4 + Редактор магазина @@ -130,6 +134,9 @@ 140, 23 + + 5 + Редактор дропа @@ -142,15 +149,31 @@ 140, 23 + + 7 + Браузер карт 140, 23 + + 6 + Редактор баннеров + + 333, 146 + + + + Zoom + + + Настройки + 140, 21 @@ -163,7 +186,16 @@ Включить UID - - Настройки + + 310, 155 + + + 150, 23 + + + 3 + + + Редактор активности \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageHome.zh-TW.resx b/Source/GrasscutterTools/Pages/PageHome.zh-TW.resx index 0a78fa7..ac43fe3 100644 --- a/Source/GrasscutterTools/Pages/PageHome.zh-TW.resx +++ b/Source/GrasscutterTools/Pages/PageHome.zh-TW.resx @@ -135,4 +135,7 @@ 窗口置頂 + + 活動編輯器 + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.Designer.cs b/Source/GrasscutterTools/Properties/Resources.Designer.cs index cb70edd..5f334a5 100644 --- a/Source/GrasscutterTools/Properties/Resources.Designer.cs +++ b/Source/GrasscutterTools/Properties/Resources.Designer.cs @@ -87,6 +87,53 @@ namespace GrasscutterTools.Properties { } } + /// + /// 查找类似 //[Activity ids-3.6 by dplek] + ///// Activity + ///2001:1.1未归的熄星 + ///2002:1.3海灯节 + ///2003:1.4风花节 + ///2004:1.5导能原盘-诸论 + ///2005:1.6盛夏!海岛?大冒险! + ///2006:2.0谒索雷痕 + ///2007:2.1韶光抚月 + ///2008:2.2雾海悬谜境 + ///2009:2.3皑尘与白雪 + ///2010:2.4飞彩镌流年 + ///2011:2.5三界路飨祭 + ///2012:2.6堇庭华彩 + ///2013:2.7荒梦藏虞渊 + ///2014:2.8远海诗夏游纪 + ///2015:3.0雕琢童心 + ///2016:3.1杯中遥吟之歌 + ///2017:3.2智巧灵蕈大竞逐 + ///2018:3.3秋津森夜试胆会 + ///2019:3.4磬弦奏华夜 + ///2020:3.5风花的呼吸 + ///// 1.0 + ///1001:海灯节 + ///5001:元素烘炉(test) + ///5002:且试身手 + ///5003:百货奇货 + ///// 1.1 + ///5004:映天之章 + ///5005:元素烘炉 + ///5006:佳肴尚温 + ///5007:飞行挑战 + ///// 1.2 + ///3001:白垩与黑龙 + ///5008:三清玲之章(废稿) + ///5009:古闻之章(钟离传说-1) + ///5010:鲸天之章(公子传说-1) + ///5011:秘宝迷踪 + ///5012:百 [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string Activity { + get { + return ResourceManager.GetString("Activity", resourceCulture); + } + } + /// /// 查找类似 全部 的本地化字符串。 /// diff --git a/Source/GrasscutterTools/Properties/Resources.resx b/Source/GrasscutterTools/Properties/Resources.resx index db0b7d9..705dfcb 100644 --- a/Source/GrasscutterTools/Properties/Resources.resx +++ b/Source/GrasscutterTools/Properties/Resources.resx @@ -360,4 +360,7 @@ 成就 + + ..\Resources\zh-cn\Activity.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 36a72e7..427b523 100644 --- a/Source/GrasscutterTools/Properties/Settings.Designer.cs +++ b/Source/GrasscutterTools/Properties/Settings.Designer.cs @@ -250,5 +250,17 @@ namespace GrasscutterTools.Properties { this["NavContainerSplitterDistance"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ActivityConfigJsonPath { + get { + return ((string)(this["ActivityConfigJsonPath"])); + } + set { + this["ActivityConfigJsonPath"] = value; + } + } } } diff --git a/Source/GrasscutterTools/Properties/Settings.settings b/Source/GrasscutterTools/Properties/Settings.settings index 49d7776..0d23e10 100644 --- a/Source/GrasscutterTools/Properties/Settings.settings +++ b/Source/GrasscutterTools/Properties/Settings.settings @@ -59,5 +59,8 @@ 0 + + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Resources/zh-cn/Activity.txt b/Source/GrasscutterTools/Resources/zh-cn/Activity.txt new file mode 100644 index 0000000..17160ad --- /dev/null +++ b/Source/GrasscutterTools/Resources/zh-cn/Activity.txt @@ -0,0 +1,203 @@ +//[Activity ids-3.6 by dplek] +// Activity +2001:1.1未归的熄星 +2002:1.3海灯节 +2003:1.4风花节 +2004:1.5导能原盘-诸论 +2005:1.6盛夏!海岛?大冒险! +2006:2.0谒索雷痕 +2007:2.1韶光抚月 +2008:2.2雾海悬谜境 +2009:2.3皑尘与白雪 +2010:2.4飞彩镌流年 +2011:2.5三界路飨祭 +2012:2.6堇庭华彩 +2013:2.7荒梦藏虞渊 +2014:2.8远海诗夏游纪 +2015:3.0雕琢童心 +2016:3.1杯中遥吟之歌 +2017:3.2智巧灵蕈大竞逐 +2018:3.3秋津森夜试胆会 +2019:3.4磬弦奏华夜 +2020:3.5风花的呼吸 +// 1.0 +1001:海灯节 +5001:元素烘炉(test) +5002:且试身手 +5003:百货奇货 +// 1.1 +5004:映天之章 +5005:元素烘炉 +5006:佳肴尚温 +5007:飞行挑战 +// 1.2 +3001:白垩与黑龙 +5008:三清玲之章(废稿) +5009:古闻之章(钟离传说-1) +5010:鲸天之章(公子传说-1) +5011:秘宝迷踪 +5012:百货奇货-2 +5014:无相交响诗 +// 1.3 +5015:仙麟之章(甘雨传说-1) +5016:福至五彩 +5017:龙蜥寻踪(显示漂浮秘灵) +6002:威撼山岳(古岩巨蜥) +6003:异乡食记 +5018:引蝶之章(胡桃传说-1) +5019:争斗激流 +// 1.4 +5020:纯水之愿 +5021:邀约事件-第一辑 +// 1.5 +5022:迷城战线 +5023:风行迷踪 +5024:折箭觅踪 +5025:古闻之章(钟离传说-2) +5026:刺骨幽寒(无相之冰) +5027:翠石砌玉壶(尘歌壶) +5028:邀约事件-第二辑 +5029:浪沫之章(优菈传说-1) +// 1.6 +5030:无尽骤战 +5031:风来人剑斗奇谭 +5032:砰砰魔球总动员 +5033:回声轻叙(芭芭拉皮肤) +6005:振袖秋风问红叶(主线) +// 2.0 +6003:筑机战阵(恒常机关阵列) +5034:幻影心流 +5035:秘宝迷踪-2 +5036:炽焰轰转(无相之火) +5037:机关奇谭-灵妙之局 +5038:琉金之章(宵宫传说-1) +5039:雪鹤之章-(神里绫华传说-1) +// 2.1 +5040:百人一揆-1 +5041:月中王国(钓鱼) +5042:狂浪谲波(无相之水) +5043:深空霆雷(雷音权现) +5044:漂浮秘灵 +5045:眠龙之章(珊瑚宫心海传说-1) +5046:天下人之章(雷电将军传说-1) +// 2.2 +5047:梦里生花 +5048:邀约事件-第三辑 +5049:古时孤影 +5050:镜花听世(音游) +// 2.3 +5051:万端珊瑚事件簿·犬武者 +5052:鱼群大爆发(钓鱼常驻) +5053:导能原盘-跋尾 +5054:迷城战线·光界篇 +5059:天牛之章(荒泷一斗传说-1) +5056:邀约事件-第四辑 +5060:兽境裂隙(兽境猎犬) +// 2.4 +5055:山海八所巡礼 +5057:邀约事件-第五辑 +5061:冰雷与共(渊下宫龙蜥) +5063:风起鹤归(主线) +5064:渊下宫(新地图开启) +// 2.5 +5062:曲生酌微梦 +5065:神工天巧 +5066:有香自西来-1 +5069:仙狐之章(八重神子传说-1) +5070:天下人之章(雷电将军传说-2) +5076:百人一揆 +// 2.6 +5067:振晶的研究 +5068:画外旅照-1 +5071:巨虺蟠渊(层岩巨渊巨蛇) +5074:邀约事件-第七辑 +5075:层岩巨渊(新地图) +5077:回响渊底的安魂曲(主线) +5078:神守柏之章(神里绫人传说-1) +// 2.7 +5080:炉心机造 +5081:幽客之章(夜兰传说任务-1) +5079:深泥奇谭 +5072:荒泷极上盛世豪鼓大祭典(音游) +5073:邀约事件-第六辑 +// 2.8 +5082:恒动械画 +5083:追想练行 +5084:幻声留形(菲谢尔) +5085:残象暗战(迪卢克) +5088:枫红之章(枫原万叶传说-1) +5097:邀约事件-第八辑 +// 3.0 +5086:幽林蕈雨(须弥草鸡) +5087:片剂深研 +5089:雷極之花(雷树) +5090:溢神的论证-1 +5091:秘宝迷踪-3 +5092:郭狐之章(提纳里传说-1) +5093:诸法丛林(新地图) +// 3.1 +5094:百人一揆 +5095:侚察五凤 +5096:寻星之旅 +5098:智巧灵蕈大竞逐(test) +5100:金狼之章(赛诺传说-1) +5101:睡莲之章(妮露传说-1) +5102:沙海热梦(新地图) +5103:永动龙兽(兆载永劫龙兽) +5104:统辖矩阵(会隐形的机关boss) +5105:迷梦与空幻与欺骗(主线) +// 3.2 +5098:智巧灵蕈大竞逐(test) +5099:冒险家试炼 +5107:无相交响诗-离调乐段 +5108:画外旅照-青植之篇 +5109:虚空鼓动,劫火高扬(主线) +5113:智慧主之章(纳西妲传说-1) +5106:草覆地法(无相之草) +// 3.3 +5110:骰子,猫与卡牌的战场(七圣召唤常驻) +5111:风行迷踪 +5112:跨野寻踪 +5114:迷城战线·沙域篇 +5115:倾落伽蓝 +// 3.4 +5116:蔷薇再开时(丽莎) +5117:演武传心(神里绫华) +5118:荒泷极意堂堂斗虫大试合 +5119:七圣召唤-热斗模式·全方位后援 +5121:天隼之章(艾尔海森传说-1) +5122:沙原之主(新怪物) +5126:千壑沙地(新地图) +5127:邀约事件-第九辑 +// 3.5 +5120:灵蕈棋阵 +5123:振晶的复核实验 +5124:卡利贝尔 +5125:有香自西来-寻味地北 +5130:迪希雅传说 +// 3.6 +5128:风沙轰鸣 +5129:合剂演进 +5131:苍漠囿图(新地图开启) +5132:忆昔诸途巡历(花神书前置) +5134:深罪施洗(新怪物展示) +5136:悬壶之章(白术传说任务) +5139:智慧主之章-2(纳西妲传说任务) +// 新手与特殊活动 +101:前路既定 +1014:送芭芭拉活动 +1023:打深渊送香菱活动 +8001:星之归还 +10001:(test)1.0签到 +10002:(test)高价值一次性签到 +10003:把握每日 +10004:把握每日 +10005:虹旅藏金 +10006:虹旅藏金 +10007:虹旅藏金 +10010:把握每日 +10011:富贵登门 +10012:异乡食记 +10013:云流星奔 +50001:万民同行 +50002:浅唱祈礼 \ No newline at end of file