Update page navigation

Add Achievement page
This commit is contained in:
2023-05-07 14:55:50 +08:00
parent c7d3e5021c
commit b8cfaf308d
22 changed files with 2599 additions and 2145 deletions

View File

@ -30,31 +30,56 @@ namespace GrasscutterTools.Forms
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
this.NavContainer = new System.Windows.Forms.SplitContainer();
this.ListPages = new System.Windows.Forms.ListBox();
this.TCMain = new System.Windows.Forms.TabControl();
this.CmbCommand = new System.Windows.Forms.ComboBox();
this.BtnCopy = new System.Windows.Forms.Button();
this.ChkAutoCopy = new System.Windows.Forms.CheckBox();
this.GrpCommand = new System.Windows.Forms.GroupBox();
this.BtnInvokeOpenCommand = new System.Windows.Forms.Button();
this.TPRemoteCall = new System.Windows.Forms.TabPage();
this.TPAbout = new System.Windows.Forms.TabPage();
this.TPManage = new System.Windows.Forms.TabPage();
this.TPScene = new System.Windows.Forms.TabPage();
this.TPItem = new System.Windows.Forms.TabPage();
this.TPWeapon = new System.Windows.Forms.TabPage();
this.TPAvatar = new System.Windows.Forms.TabPage();
this.TPSpawn = new System.Windows.Forms.TabPage();
this.TPQuest = new System.Windows.Forms.TabPage();
this.TPArtifact = new System.Windows.Forms.TabPage();
this.TPCustom = new System.Windows.Forms.TabPage();
this.TPHome = new System.Windows.Forms.TabPage();
this.TCMain = new System.Windows.Forms.TabControl();
this.TPMail = new System.Windows.Forms.TabPage();
this.TPLoopTasks = new System.Windows.Forms.TabPage();
this.MenuSpawnEntityFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).BeginInit();
this.NavContainer.Panel1.SuspendLayout();
this.NavContainer.Panel2.SuspendLayout();
this.NavContainer.SuspendLayout();
this.GrpCommand.SuspendLayout();
this.TCMain.SuspendLayout();
this.SuspendLayout();
//
// NavContainer
//
resources.ApplyResources(this.NavContainer, "NavContainer");
this.NavContainer.Name = "NavContainer";
//
// NavContainer.Panel1
//
resources.ApplyResources(this.NavContainer.Panel1, "NavContainer.Panel1");
this.NavContainer.Panel1.Controls.Add(this.ListPages);
//
// NavContainer.Panel2
//
resources.ApplyResources(this.NavContainer.Panel2, "NavContainer.Panel2");
this.NavContainer.Panel2.Controls.Add(this.TCMain);
//
// ListPages
//
resources.ApplyResources(this.ListPages, "ListPages");
this.ListPages.BackColor = System.Drawing.Color.WhiteSmoke;
this.ListPages.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.ListPages.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
this.ListPages.FormattingEnabled = true;
this.ListPages.Name = "ListPages";
this.ListPages.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ListPages_DrawItem);
this.ListPages.SelectedIndexChanged += new System.EventHandler(this.ListPages_SelectedIndexChanged);
//
// TCMain
//
resources.ApplyResources(this.TCMain, "TCMain");
this.TCMain.Multiline = true;
this.TCMain.Name = "TCMain";
this.TCMain.SelectedIndex = 0;
this.TCMain.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
//
// CmbCommand
//
resources.ApplyResources(this.CmbCommand, "CmbCommand");
@ -93,110 +118,6 @@ namespace GrasscutterTools.Forms
this.BtnInvokeOpenCommand.UseVisualStyleBackColor = true;
this.BtnInvokeOpenCommand.Click += new System.EventHandler(this.BtnInvokeOpenCommand_Click);
//
// TPRemoteCall
//
resources.ApplyResources(this.TPRemoteCall, "TPRemoteCall");
this.TPRemoteCall.Name = "TPRemoteCall";
this.TPRemoteCall.UseVisualStyleBackColor = true;
//
// TPAbout
//
resources.ApplyResources(this.TPAbout, "TPAbout");
this.TPAbout.Name = "TPAbout";
this.TPAbout.UseVisualStyleBackColor = true;
//
// TPManage
//
resources.ApplyResources(this.TPManage, "TPManage");
this.TPManage.Name = "TPManage";
this.TPManage.UseVisualStyleBackColor = true;
//
// TPScene
//
resources.ApplyResources(this.TPScene, "TPScene");
this.TPScene.Name = "TPScene";
this.TPScene.UseVisualStyleBackColor = true;
//
// TPItem
//
resources.ApplyResources(this.TPItem, "TPItem");
this.TPItem.Name = "TPItem";
this.TPItem.UseVisualStyleBackColor = true;
//
// TPWeapon
//
resources.ApplyResources(this.TPWeapon, "TPWeapon");
this.TPWeapon.Name = "TPWeapon";
this.TPWeapon.UseVisualStyleBackColor = true;
//
// TPAvatar
//
resources.ApplyResources(this.TPAvatar, "TPAvatar");
this.TPAvatar.Name = "TPAvatar";
this.TPAvatar.UseVisualStyleBackColor = true;
//
// TPSpawn
//
resources.ApplyResources(this.TPSpawn, "TPSpawn");
this.TPSpawn.Name = "TPSpawn";
this.TPSpawn.UseVisualStyleBackColor = true;
//
// TPQuest
//
resources.ApplyResources(this.TPQuest, "TPQuest");
this.TPQuest.Name = "TPQuest";
this.TPQuest.UseVisualStyleBackColor = true;
//
// TPArtifact
//
resources.ApplyResources(this.TPArtifact, "TPArtifact");
this.TPArtifact.Name = "TPArtifact";
this.TPArtifact.UseVisualStyleBackColor = true;
//
// TPCustom
//
resources.ApplyResources(this.TPCustom, "TPCustom");
this.TPCustom.Name = "TPCustom";
this.TPCustom.UseVisualStyleBackColor = true;
//
// TPHome
//
resources.ApplyResources(this.TPHome, "TPHome");
this.TPHome.Name = "TPHome";
this.TPHome.UseVisualStyleBackColor = true;
//
// TCMain
//
resources.ApplyResources(this.TCMain, "TCMain");
this.TCMain.Controls.Add(this.TPHome);
this.TCMain.Controls.Add(this.TPRemoteCall);
this.TCMain.Controls.Add(this.TPCustom);
this.TCMain.Controls.Add(this.TPArtifact);
this.TCMain.Controls.Add(this.TPSpawn);
this.TCMain.Controls.Add(this.TPItem);
this.TCMain.Controls.Add(this.TPAvatar);
this.TCMain.Controls.Add(this.TPWeapon);
this.TCMain.Controls.Add(this.TPManage);
this.TCMain.Controls.Add(this.TPMail);
this.TCMain.Controls.Add(this.TPLoopTasks);
this.TCMain.Controls.Add(this.TPQuest);
this.TCMain.Controls.Add(this.TPScene);
this.TCMain.Controls.Add(this.TPAbout);
this.TCMain.Name = "TCMain";
this.TCMain.SelectedIndex = 0;
//
// TPMail
//
resources.ApplyResources(this.TPMail, "TPMail");
this.TPMail.Name = "TPMail";
this.TPMail.UseVisualStyleBackColor = true;
//
// TPLoopTasks
//
resources.ApplyResources(this.TPLoopTasks, "TPLoopTasks");
this.TPLoopTasks.Name = "TPLoopTasks";
this.TPLoopTasks.UseVisualStyleBackColor = true;
//
// MenuSpawnEntityFilter
//
resources.ApplyResources(this.MenuSpawnEntityFilter, "MenuSpawnEntityFilter");
@ -206,16 +127,19 @@ namespace GrasscutterTools.Forms
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.TCMain);
this.Controls.Add(this.NavContainer);
this.Controls.Add(this.GrpCommand);
this.KeyPreview = true;
this.Name = "FormMain";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormMain_FormClosed);
this.Load += new System.EventHandler(this.FormMain_Load);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormMain_KeyDown);
this.NavContainer.Panel1.ResumeLayout(false);
this.NavContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).EndInit();
this.NavContainer.ResumeLayout(false);
this.GrpCommand.ResumeLayout(false);
this.GrpCommand.PerformLayout();
this.TCMain.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -227,21 +151,9 @@ namespace GrasscutterTools.Forms
private System.Windows.Forms.CheckBox ChkAutoCopy;
private System.Windows.Forms.GroupBox GrpCommand;
private System.Windows.Forms.Button BtnInvokeOpenCommand;
private System.Windows.Forms.TabPage TPRemoteCall;
private System.Windows.Forms.TabPage TPAbout;
private System.Windows.Forms.TabPage TPManage;
private System.Windows.Forms.TabPage TPScene;
private System.Windows.Forms.TabPage TPItem;
private System.Windows.Forms.TabPage TPWeapon;
private System.Windows.Forms.TabPage TPAvatar;
private System.Windows.Forms.TabPage TPSpawn;
private System.Windows.Forms.TabPage TPQuest;
private System.Windows.Forms.TabPage TPArtifact;
private System.Windows.Forms.TabPage TPCustom;
private System.Windows.Forms.TabPage TPHome;
private System.Windows.Forms.TabControl TCMain;
private System.Windows.Forms.TabPage TPMail;
private System.Windows.Forms.ContextMenuStrip MenuSpawnEntityFilter;
private System.Windows.Forms.TabPage TPLoopTasks;
private System.Windows.Forms.ListBox ListPages;
private System.Windows.Forms.SplitContainer NavContainer;
}
}

View File

@ -85,27 +85,69 @@ namespace GrasscutterTools.Forms
TCMain.SuspendLayout();
var ph = CreatePage<PageHome>();
ph.OnLanguageChanged = () => FormMain_Load(this, EventArgs.Empty);
TPHome.Controls.Add(ph);
var poc = CreatePage<PageOpenCommand>();
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
TPRemoteCall.Controls.Add(poc);
TPCustom.Controls.Add(CreatePage<PageCustomCommands>());
TPArtifact.Controls.Add(CreatePage<PageGiveArtifact>());
TPSpawn.Controls.Add(CreatePage<PageSpawn>());
TPItem.Controls.Add(CreatePage<PageGiveItem>());
TPAvatar.Controls.Add(CreatePage<PageAvatar>());
TPWeapon.Controls.Add(CreatePage<PageGiveWeapon>());
TPManage.Controls.Add(CreatePage<PageManagement>());
TPMail.Controls.Add(CreatePage<PageMail>());
TPLoopTasks.Controls.Add(CreatePage<PageTasks>());
TPQuest.Controls.Add(CreatePage<PageQuest>());
TPScene.Controls.Add(CreatePage<PageScene>());
TPAbout.Controls.Add(CreatePage<PageAbout>());
//TPAbout.Controls.Add(CreatePage<PageTools>());
CreatePage<PageCustomCommands>();
CreatePage<PageGiveArtifact>();
CreatePage<PageSpawn>();
CreatePage<PageGiveItem>();
CreatePage<PageAvatar>();
CreatePage<PageGiveWeapon>();
CreatePage<PageManagement>();
CreatePage<PageMail>();
CreatePage<PageTasks>();
CreatePage<PageQuest>();
CreatePage<PageScene>();
CreatePage<PageAchievement>();
CreatePage<PageAbout>();
//AddPageToGui(CreatePage<PageTools>("Tools"));
TCMain.ResumeLayout();
Logger.I(TAG, "InitPages completed");
}
/// <summary>
/// 初始化页面导航
/// </summary>
private void InitPagesNav()
{
ListPages.Items.Clear();
ListPages.Items.AddRange(new object[]
{
Resources.PageHomeTitle,
Resources.PageOpenCommandTitle,
Resources.PageCustomCommandsTitle,
Resources.PageGetArtifactTitle,
Resources.PageSpawnTitle,
Resources.PageGiveItemTitle,
Resources.PageAvatarTitle,
Resources.PageGiveWeaponTitle,
Resources.PageManagementTitle,
Resources.PageMailTitle,
Resources.PageTasksTitle,
Resources.PageQuestTitle,
Resources.PageSceneTitle,
Resources.PageAchievementTitle,
Resources.PageAboutTitle,
});
}
/// <summary>
/// 导航列表项居中绘制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ListPages_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
var strFmt = new StringFormat
{
Alignment = StringAlignment.Center, //文本垂直居中
LineAlignment = StringAlignment.Center //文本水平居中
};
e.Graphics.DrawString(ListPages.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, strFmt);
}
/// <summary>
/// 创建指定类型页面
/// </summary>
@ -121,8 +163,16 @@ namespace GrasscutterTools.Forms
Dock = DockStyle.Fill,
Name = typeof(T).Name,
};
var tp = new TabPage();
TCMain.TabPages.Add(tp);
tp.Controls.Add(page);
return page;
}
private void ListPages_SelectedIndexChanged(object sender, EventArgs e)
{
TCMain.SelectedIndex = ListPages.SelectedIndex;
}
/// <summary>
/// 窗体载入时触发(切换语言时会重新载入)
@ -136,6 +186,9 @@ namespace GrasscutterTools.Forms
#endif
if (DesignMode) return;
// 加载页面导航
InitPagesNav();
// 加载游戏ID资源
GameData.LoadResources();
@ -326,7 +379,16 @@ namespace GrasscutterTools.Forms
if (Common.OC == null || !Common.OC.CanInvoke)
{
ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand);
TCMain.SelectedTab = TPRemoteCall;
//TCMain.SelectedTab = TPRemoteCall;
for (var i = 0; i < TCMain.Controls.Count; i++)
{
if (TCMain.Controls[i].Controls[0] is PageOpenCommand)
{
ListPages.SelectedIndex = i;
break;
}
}
return false;
}
@ -447,5 +509,6 @@ namespace GrasscutterTools.Forms
}
#endregion - General -
}
}

View File

@ -127,52 +127,14 @@
<data name="ChkAutoCopy.Text" xml:space="preserve">
<value>Auto</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command - [Ctrl] Autorun - [Shift] Append - [Alt] Only run - [|] Split multiple commands</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Run(F5)</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>Remote</value>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command - [Ctrl] Autorun - [Shift] Append - [Alt] Only run - [|] Split multiple commands</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>About</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>Manage</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>Scene</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Items</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>Weapons</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Spawn</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>Quest</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Artifacts</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>Custom</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>Home</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Mail</value>
</data>
<data name="TPLoopTasks.Text" xml:space="preserve">
<value>Loop</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
</root>

View File

@ -118,397 +118,139 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="TPQuest.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>600, 25</value>
</data>
<data name="TPWeapon.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
<data name="&gt;&gt;TCMain.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPArtifact.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
<data name="&gt;&gt;GrpCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令 - [Ctrl] 自动执行 - [Shift] 拼接命令 - [Alt] 仅执行 - [|] 分割多条命令</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="TCMain.Appearance" type="System.Windows.Forms.TabAppearance, System.Windows.Forms">
<value>FlatButtons</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
<value>656, 275</value>
</data>
<data name="&gt;&gt;ChkAutoCopy.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>850, 400</value>
</data>
<data name="MenuSpawnEntityFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 4</value>
</data>
<data name="&gt;&gt;CmbCommand.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="&gt;&gt;GrpCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="ListPages.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnCopy.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ListPages.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="TPScene.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>管理</value>
</data>
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 275</value>
</data>
<data name="&gt;&gt;MenuSpawnEntityFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPSpawn.Name" xml:space="preserve">
<value>TPSpawn</value>
</data>
<data name="&gt;&gt;GrpCommand.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;TPAbout.Name" xml:space="preserve">
<value>TPAbout</value>
</data>
<data name="&gt;&gt;TPScene.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPCustom.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="&gt;&gt;TPSpawn.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPQuest.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="TPLoopTasks.Text" xml:space="preserve">
<value>循环</value>
</data>
<data name="&gt;&gt;TPRemoteCall.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPHome.Name" xml:space="preserve">
<value>TPHome</value>
</data>
<data name="&gt;&gt;BtnInvokeOpenCommand.ZOrder" xml:space="preserve">
<value>0</value>
<data name="GrpCommand.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 56</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="GrpCommand.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;BtnCopy.ZOrder" xml:space="preserve">
<value>1</value>
<data name="CmbCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 21</value>
</data>
<data name="&gt;&gt;TPHome.Parent" xml:space="preserve">
<value>TCMain</value>
<data name="ListPages.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 275</value>
</data>
<data name="&gt;&gt;TPRemoteCall.ZOrder" xml:space="preserve">
<value>1</value>
<data name="&gt;&gt;NavContainer.Panel2.Parent" xml:space="preserve">
<value>NavContainer</value>
</data>
<data name="TPHome.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
<data name="&gt;&gt;MenuSpawnEntityFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
<data name="GrpCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 293</value>
</data>
<data name="&gt;&gt;TPWeapon.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPSpawn.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ChkAutoCopy.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>生成</value>
</data>
<data name="&gt;&gt;TPAvatar.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;TPAvatar.Name" xml:space="preserve">
<value>TPAvatar</value>
<data name="&gt;&gt;CmbCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>执行(F5)</value>
</data>
<data name="TPMail.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
<data name="&gt;&gt;GrpCommand.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="TPManage.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPArtifact.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="&gt;&gt;TPArtifact.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPCustom.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 56</value>
</data>
<data name="TPAbout.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPWeapon.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
</data>
<data name="&gt;&gt;TPArtifact.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPMail.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPAbout.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="TPScene.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPSpawn.TabIndex" type="System.Int32, mscorlib">
<data name="NavContainer.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;BtnCopy.Parent" xml:space="preserve">
<data name="&gt;&gt;NavContainer.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpCommand.Name" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="&gt;&gt;TPCustom.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="TCMain.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>场景</value>
</data>
<data name="&gt;&gt;TPLoopTasks.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPAbout.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPLoopTasks.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPRemoteCall.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="&gt;&gt;ChkAutoCopy.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPAbout.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="TPLoopTasks.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="TPHome.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="&gt;&gt;ChkAutoCopy.Name" xml:space="preserve">
<value>ChkAutoCopy</value>
</data>
<data name="&gt;&gt;TPLoopTasks.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="&gt;&gt;TPArtifact.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>角色</value>
</data>
<data name="TPSpawn.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormMain</value>
</data>
<data name="&gt;&gt;TPAvatar.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>远程</value>
</data>
<data name="&gt;&gt;TPItem.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TCMain.Name" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="TPQuest.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 275</value>
</data>
<data name="TPManage.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="TPSpawn.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="BtnInvokeOpenCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>物品</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 9pt</value>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data>
<data name="ChkAutoCopy.Text" xml:space="preserve">
<value>自动</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>GrasscutterTools</value>
<data name="TCMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;TPWeapon.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="TPRemoteCall.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPAvatar.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="TPQuest.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>543, 22</value>
</data>
<data name="&gt;&gt;BtnInvokeOpenCommand.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="&gt;&gt;TPCustom.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="TPScene.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;TPWeapon.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>700, 400</value>
</data>
<data name="&gt;&gt;TPHome.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="TPRemoteCall.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="TPAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="&gt;&gt;TPManage.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpCommand.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 56</value>
<data name="ListPages.ItemHeight" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="ChkAutoCopy.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;GrpCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ChkAutoCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="TPHome.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="&gt;&gt;TPArtifact.Name" xml:space="preserve">
<value>TPArtifact</value>
</data>
<data name="&gt;&gt;TPQuest.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>邮件</value>
<data name="&gt;&gt;ChkAutoCopy.Name" xml:space="preserve">
<value>ChkAutoCopy</value>
</data>
<data name="ChkAutoCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnInvokeOpenCommand.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;TPScene.ZOrder" xml:space="preserve">
<value>12</value>
<data name="&gt;&gt;BtnInvokeOpenCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPItem.Name" xml:space="preserve">
<value>TPItem</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPQuest.Name" xml:space="preserve">
<value>TPQuest</value>
</data>
<data name="CmbCommand.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;TPAbout.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="TPWeapon.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="TPMail.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPCustom.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>复制</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>599, 24</value>
</data>
<data name="&gt;&gt;TPScene.Name" xml:space="preserve">
<value>TPScene</value>
</data>
<data name="TPItem.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
<data name="&gt;&gt;ChkAutoCopy.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;TPSpawn.ZOrder" xml:space="preserve">
<value>4</value>
<data name="BtnInvokeOpenCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="&gt;&gt;TCMain.Parent" xml:space="preserve">
<value>$this</value>
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;TPRemoteCall.Name" xml:space="preserve">
<value>TPRemoteCall</value>
</data>
<data name="TPItem.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>武器</value>
</data>
<data name="TPWeapon.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="CmbCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>圣遗物</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>主页</value>
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;BtnCopy.Name" xml:space="preserve">
<value>BtnCopy</value>
@ -516,197 +258,170 @@
<data name="&gt;&gt;BtnInvokeOpenCommand.Name" xml:space="preserve">
<value>BtnInvokeOpenCommand</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>任务</value>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>684, 361</value>
<data name="&gt;&gt;NavContainer.Name" xml:space="preserve">
<value>NavContainer</value>
</data>
<data name="TPCustom.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
<data name="$this.Text" xml:space="preserve">
<value>GrasscutterTools</value>
</data>
<data name="TPQuest.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPAvatar.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定义</value>
</data>
<data name="TPMail.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="&gt;&gt;TCMain.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="TPArtifact.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="TPWeapon.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPLoopTasks.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="&gt;&gt;TPWeapon.Name" xml:space="preserve">
<value>TPWeapon</value>
</data>
<data name="TPItem.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="&gt;&gt;TPManage.Name" xml:space="preserve">
<value>TPManage</value>
</data>
<data name="TPAvatar.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPAbout.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 4, 3, 4</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>关于</value>
</data>
<data name="&gt;&gt;GrpCommand.Name" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="&gt;&gt;TPScene.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="CmbCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 21</value>
</data>
<data name="&gt;&gt;TPQuest.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPAvatar.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;TPAbout.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="BtnInvokeOpenCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;TPItem.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="TPManage.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="&gt;&gt;CmbCommand.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="TPSpawn.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPArtifact.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPHome.TabIndex" type="System.Int32, mscorlib">
<data name="BtnInvokeOpenCommand.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;TPManage.Parent" xml:space="preserve">
<value>TCMain</value>
<data name="ListPages.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="TPLoopTasks.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="MenuSpawnEntityFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 4</value>
</data>
<data name="&gt;&gt;ChkAutoCopy.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="GrpCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 293</value>
</data>
<data name="&gt;&gt;TPItem.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="TPMail.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="&gt;&gt;TCMain.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPCustom.Name" xml:space="preserve">
<value>TPCustom</value>
</data>
<data name="&gt;&gt;TPRemoteCall.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnCopy.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPHome.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPCustom.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="&gt;&gt;CmbCommand.Name" xml:space="preserve">
<value>CmbCommand</value>
</data>
<data name="&gt;&gt;MenuSpawnEntityFilter.Name" xml:space="preserve">
<value>MenuSpawnEntityFilter</value>
</data>
<data name="&gt;&gt;CmbCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TPScene.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 275</value>
</data>
<data name="&gt;&gt;CmbCommand.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;TPMail.Name" xml:space="preserve">
<value>TPMail</value>
<data name="&gt;&gt;NavContainer.Panel1.Parent" xml:space="preserve">
<value>NavContainer</value>
</data>
<data name="TPManage.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
<data name="ChkAutoCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="TPRemoteCall.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
<data name="&gt;&gt;TCMain.Name" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPLoopTasks.Name" xml:space="preserve">
<value>TPLoopTasks</value>
<data name="&gt;&gt;BtnCopy.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="&gt;&gt;TPLoopTasks.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="NavContainer.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;TPManage.ZOrder" xml:space="preserve">
<value>8</value>
<data name="&gt;&gt;TCMain.Parent" xml:space="preserve">
<value>NavContainer.Panel2</value>
</data>
<data name="&gt;&gt;TPMail.ZOrder" xml:space="preserve">
<value>9</value>
<data name="ListPages.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 10pt</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>450, 25</value>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
</data>
<data name="TPItem.TabIndex" type="System.Int32, mscorlib">
<data name="&gt;&gt;NavContainer.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 9pt</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>834, 361</value>
</data>
<data name="&gt;&gt;ListPages.Parent" xml:space="preserve">
<value>NavContainer.Panel1</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="&gt;&gt;BtnCopy.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="NavContainer.SplitterDistance" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>693, 22</value>
</data>
<data name="BtnInvokeOpenCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;ListPages.Name" xml:space="preserve">
<value>ListPages</value>
</data>
<data name="NavContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
</data>
<data name="&gt;&gt;ListPages.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnInvokeOpenCommand.Parent" xml:space="preserve">
<value>GrpCommand</value>
</data>
<data name="TCMain.ItemSize" type="System.Drawing.Size, System.Drawing">
<value>0, 1</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令 - [Ctrl] 自动执行 - [Shift] 拼接命令 - [Alt] 仅执行 - [|] 分割多条命令</value>
</data>
<data name="&gt;&gt;TCMain.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="NavContainer.Panel2MinSize" type="System.Int32, mscorlib">
<value>610</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormMain</value>
</data>
<data name="CmbCommand.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="ListPages.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;ChkAutoCopy.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="CmbCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="NavContainer.Panel1MinSize" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="NavContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>810, 275</value>
</data>
<data name="&gt;&gt;MenuSpawnEntityFilter.Name" xml:space="preserve">
<value>MenuSpawnEntityFilter</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>749, 24</value>
</data>
<data name="BtnCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>复制</value>
</data>
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;BtnInvokeOpenCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="GrpCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>810, 56</value>
</data>
<data name="&gt;&gt;TPMail.Parent" xml:space="preserve">
<value>TCMain</value>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="&gt;&gt;BtnInvokeOpenCommand.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.Name" xml:space="preserve">
<value>NavContainer.Panel2</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.Name" xml:space="preserve">
<value>NavContainer.Panel1</value>
</data>
<data name="&gt;&gt;NavContainer.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;CmbCommand.Name" xml:space="preserve">
<value>CmbCommand</value>
</data>
<metadata name="MenuSpawnEntityFilter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>

View File

@ -122,10 +122,10 @@
<value>132, 21</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 25</value>
<value>513, 25</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>497, 22</value>
<value>651, 21</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>92, 23</value>
@ -134,7 +134,7 @@
<value>Копировать</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>595, 24</value>
<value>749, 23</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
@ -151,46 +151,8 @@
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Выполнить (F5)</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>OpenCommand</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>Справка</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>Аккаунты</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>Сцена</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Предметы</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>Оружие</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Персонаж</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Спавн</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>Квест</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Артефакт</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>Кастомное</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>Главная</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Почта</value>
</data>
<data name="TPLoopTasks.Text" xml:space="preserve">
<value>Циклы</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
</root>

View File

@ -129,31 +129,8 @@
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令 - [Ctrl] 自動執行 - [Shift] 拼接命令 - [Alt] 僅執行 - [|] 分割多條命令</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>遠程</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>關於</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>場景</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>任務</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>聖遺物</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定義</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>主頁</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>郵件</value>
</data>
<data name="TPLoopTasks.Text" xml:space="preserve">
<value>循環</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
</root>

View File

@ -132,6 +132,16 @@ namespace GrasscutterTools.Game
/// </summary>
public static readonly Version V1_4_3 = new Version(1, 4, 3);
/// <summary>
/// 2023/4/1
/// </summary>
public static readonly Version V1_4_7 = new Version(1, 4, 7);
/// <summary>
/// 2023/4/1
/// </summary>
public static readonly Version V1_5_0 = new Version(1, 5, 0);
// More...
/// <summary>
/// Date
@ -148,7 +158,9 @@ namespace GrasscutterTools.Game
V1_4_1,
V1_4_2,
V1_4_3,
//V1_4_4,
V1_4_7,
V1_5_0,
//V1_5_1,
};
#endregion - Version List -

View File

@ -37,8 +37,12 @@ namespace GrasscutterTools.Game.Gacha
public string Comment { get; set; }
/// <summary>
/// 添加卡池请从400开始增加id数值进行添加这个id需要每个池子不一样
/// 如果你想添加大量卡池请按照每次增加固定数值的id进行添加比如411412413....
/// 卡池类型
/// 100 初行祈愿
/// 200 常驻祈愿
/// 301 角色活动祈愿1
/// 302 武器活动祈愿
/// 400 角色活动祈愿2
/// </summary>
[JsonProperty("gachaType")]
public int GachaType { get; set; } = 400;

View File

@ -25,6 +25,7 @@ namespace GrasscutterTools.Game
{
public static void LoadResources()
{
Achievements = new ItemMap(Resources.Achievement);
Artifacts = new ItemMap(Resources.Artifact);
ArtifactCats = new ItemMap(Resources.ArtifactCat);
ArtifactMainAttribution = new ItemMap(Resources.ArtifactMainAttribution);
@ -44,6 +45,7 @@ namespace GrasscutterTools.Game
ShopType = new ItemMap(Resources.ShopType);
}
public static ItemMap Achievements { get; private set; }
public static ItemMap Artifacts { get; private set; }
public static ItemMap ArtifactCats { get; private set; }

View File

@ -166,6 +166,12 @@
<Compile Include="Pages\PageAbout.Designer.cs">
<DependentUpon>PageAbout.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageAchievement.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageAchievement.Designer.cs">
<DependentUpon>PageAchievement.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageAvatar.cs">
<SubType>UserControl</SubType>
</Compile>
@ -261,7 +267,7 @@
<Compile Include="Utils\Common.cs" />
<Compile Include="Utils\HttpHelper.cs" />
<Compile Include="Utils\Logger.cs" />
<Compile Include="Utils\ReleaseAPI.cs" />
<Compile Include="Utils\GithubHelper.cs" />
<Compile Include="Utils\UIUtil.cs" />
<EmbeddedResource Include="Forms\FormDropEditor.en-US.resx">
<DependentUpon>FormDropEditor.cs</DependentUpon>
@ -364,6 +370,9 @@
<EmbeddedResource Include="Pages\PageAbout.zh-TW.resx">
<DependentUpon>PageAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAchievement.resx">
<DependentUpon>PageAchievement.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAvatar.en-US.resx">
<DependentUpon>PageAvatar.cs</DependentUpon>
</EmbeddedResource>
@ -577,6 +586,7 @@
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\en-us\Achievement.txt" />
<Content Include="Resources\en-us\Artifact.txt" />
<Content Include="Resources\en-us\ArtifactCat.txt" />
<Content Include="Resources\en-us\ArtifactMainAttribution.txt" />
@ -595,6 +605,7 @@
<Content Include="Resources\en-us\Weapon.txt" />
<None Include="Resources\Newtonsoft.Json.dll" />
<Content Include="Resources\MyTools.java" />
<Content Include="Resources\ru-ru\Achievement.txt" />
<Content Include="Resources\ru-ru\Artifact.txt" />
<Content Include="Resources\ru-ru\ArtifactCat.txt" />
<Content Include="Resources\ru-ru\ArtifactMainAttribution.txt" />
@ -616,6 +627,7 @@
<None Include="Resources\ImgSupport.png" />
<Content Include="Resources\Permissions.txt" />
<Content Include="Resources\WeaponColor.txt" />
<Content Include="Resources\zh-cn\Achievement.txt" />
<Content Include="Resources\zh-cn\ArtifactCat.txt" />
<Content Include="Resources\zh-cn\ArtifactMainAttribution.txt" />
<Content Include="Resources\zh-cn\Artifact.txt" />
@ -633,6 +645,7 @@
<Content Include="Resources\zh-cn\Scene.txt" />
<Content Include="Resources\zh-cn\ShopType.txt" />
<Content Include="Resources\zh-cn\Weapon.txt" />
<Content Include="Resources\zh-tw\Achievement.txt" />
<Content Include="Resources\zh-tw\ArtifactCat.txt" />
<Content Include="Resources\zh-tw\ArtifactMainAttribution.txt" />
<Content Include="Resources\zh-tw\Artifact.txt" />
@ -665,6 +678,9 @@
<PackageReference Include="Resource.Embedder">
<Version>2.2.0</Version>
</PackageReference>
<PackageReference Include="System.IO.Compression.ZipFile">
<Version>4.3.0</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -34,6 +34,7 @@ namespace GrasscutterTools.Pages
{
Font = new Font("Microsoft YaHei UI", 9, GraphicsUnit.Point);
//Size = new Size(652, 245);
Dock = DockStyle.Fill;
Size = new Size(646, 239);
BackColor = Color.FromArgb(0xF9, 0xF9, 0xF9);
Margin = new Padding(0);
@ -74,7 +75,7 @@ namespace GrasscutterTools.Pages
if (commands.IndexOf('|') == -1)
return await RunCommands(FormatCommand(commands));
else
return await RunCommands(commands.Split('|').Select(it => FormatCommand(it)).ToArray());
return await RunCommands(commands.Split('|').Select(FormatCommand).ToArray());
}
/// <summary>
@ -83,7 +84,7 @@ namespace GrasscutterTools.Pages
/// </summary>
/// <param name="raw">原始输入</param>
/// <returns>格式化后可执行命令</returns>
private string FormatCommand(string raw)
private static string FormatCommand(string raw)
{
return raw.Trim().Replace("\\r", "\r").Replace("\\n", "\n");
}

View File

@ -0,0 +1,201 @@
namespace GrasscutterTools.Pages
{
partial class PageAchievement
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ListAchievements = new System.Windows.Forms.ListBox();
this.GrpAchievements = new System.Windows.Forms.GroupBox();
this.TxtAchievementFilter = new System.Windows.Forms.TextBox();
this.LnkRevokeAll = new System.Windows.Forms.LinkLabel();
this.LnkGrantAll = new System.Windows.Forms.LinkLabel();
this.GrpAchievementCommands = new System.Windows.Forms.GroupBox();
this.NUDProgress = new System.Windows.Forms.NumericUpDown();
this.BtnProgress = new System.Windows.Forms.Button();
this.BtnRevoke = new System.Windows.Forms.Button();
this.BtnGrant = new System.Windows.Forms.Button();
this.GrpAchievements.SuspendLayout();
this.GrpAchievementCommands.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDProgress)).BeginInit();
this.SuspendLayout();
//
// ListAchievements
//
this.ListAchievements.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.ListAchievements.FormattingEnabled = true;
this.ListAchievements.ItemHeight = 17;
this.ListAchievements.Location = new System.Drawing.Point(6, 51);
this.ListAchievements.Name = "ListAchievements";
this.ListAchievements.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.ListAchievements.Size = new System.Drawing.Size(628, 106);
this.ListAchievements.TabIndex = 0;
//
// GrpAchievements
//
this.GrpAchievements.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.GrpAchievements.Controls.Add(this.TxtAchievementFilter);
this.GrpAchievements.Controls.Add(this.LnkRevokeAll);
this.GrpAchievements.Controls.Add(this.ListAchievements);
this.GrpAchievements.Controls.Add(this.LnkGrantAll);
this.GrpAchievements.Location = new System.Drawing.Point(3, 3);
this.GrpAchievements.Name = "GrpAchievements";
this.GrpAchievements.Size = new System.Drawing.Size(640, 167);
this.GrpAchievements.TabIndex = 1;
this.GrpAchievements.TabStop = false;
this.GrpAchievements.Text = "成就列表GC v1.4.7 起)";
//
// TxtAchievementFilter
//
this.TxtAchievementFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TxtAchievementFilter.Location = new System.Drawing.Point(6, 22);
this.TxtAchievementFilter.Name = "TxtAchievementFilter";
this.TxtAchievementFilter.Size = new System.Drawing.Size(628, 23);
this.TxtAchievementFilter.TabIndex = 8;
this.TxtAchievementFilter.TextChanged += new System.EventHandler(this.TxtAchievementFilter_TextChanged);
//
// LnkRevokeAll
//
this.LnkRevokeAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.LnkRevokeAll.AutoSize = true;
this.LnkRevokeAll.Location = new System.Drawing.Point(578, 0);
this.LnkRevokeAll.Name = "LnkRevokeAll";
this.LnkRevokeAll.Size = new System.Drawing.Size(56, 17);
this.LnkRevokeAll.TabIndex = 7;
this.LnkRevokeAll.TabStop = true;
this.LnkRevokeAll.Text = "全部撤销";
this.LnkRevokeAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkRevokeAll_LinkClicked);
//
// LnkGrantAll
//
this.LnkGrantAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.LnkGrantAll.AutoSize = true;
this.LnkGrantAll.Location = new System.Drawing.Point(516, 0);
this.LnkGrantAll.Name = "LnkGrantAll";
this.LnkGrantAll.Size = new System.Drawing.Size(56, 17);
this.LnkGrantAll.TabIndex = 6;
this.LnkGrantAll.TabStop = true;
this.LnkGrantAll.Text = "全部达成";
this.LnkGrantAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkGrantAll_LinkClicked);
//
// GrpAchievementCommands
//
this.GrpAchievementCommands.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.GrpAchievementCommands.Controls.Add(this.NUDProgress);
this.GrpAchievementCommands.Controls.Add(this.BtnProgress);
this.GrpAchievementCommands.Controls.Add(this.BtnRevoke);
this.GrpAchievementCommands.Controls.Add(this.BtnGrant);
this.GrpAchievementCommands.Location = new System.Drawing.Point(3, 176);
this.GrpAchievementCommands.Name = "GrpAchievementCommands";
this.GrpAchievementCommands.Size = new System.Drawing.Size(640, 60);
this.GrpAchievementCommands.TabIndex = 2;
this.GrpAchievementCommands.TabStop = false;
this.GrpAchievementCommands.Text = "成就控制(在列表中选择目标项)";
//
// NUDProgress
//
this.NUDProgress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.NUDProgress.Location = new System.Drawing.Point(579, 25);
this.NUDProgress.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDProgress.Name = "NUDProgress";
this.NUDProgress.Size = new System.Drawing.Size(55, 23);
this.NUDProgress.TabIndex = 5;
this.NUDProgress.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// BtnProgress
//
this.BtnProgress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.BtnProgress.Location = new System.Drawing.Point(473, 25);
this.BtnProgress.Name = "BtnProgress";
this.BtnProgress.Size = new System.Drawing.Size(100, 23);
this.BtnProgress.TabIndex = 4;
this.BtnProgress.Text = "修改进度";
this.BtnProgress.UseVisualStyleBackColor = true;
this.BtnProgress.Click += new System.EventHandler(this.BtnProgress_Click);
//
// BtnRevoke
//
this.BtnRevoke.Location = new System.Drawing.Point(112, 25);
this.BtnRevoke.Name = "BtnRevoke";
this.BtnRevoke.Size = new System.Drawing.Size(100, 23);
this.BtnRevoke.TabIndex = 1;
this.BtnRevoke.Text = "撤销";
this.BtnRevoke.UseVisualStyleBackColor = true;
this.BtnRevoke.Click += new System.EventHandler(this.BtnRevoke_Click);
//
// BtnGrant
//
this.BtnGrant.Location = new System.Drawing.Point(6, 25);
this.BtnGrant.Name = "BtnGrant";
this.BtnGrant.Size = new System.Drawing.Size(100, 23);
this.BtnGrant.TabIndex = 0;
this.BtnGrant.Text = "达成";
this.BtnGrant.UseVisualStyleBackColor = true;
this.BtnGrant.Click += new System.EventHandler(this.BtnGrant_Click);
//
// PageAchievement
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.GrpAchievementCommands);
this.Controls.Add(this.GrpAchievements);
this.Name = "PageAchievement";
this.GrpAchievements.ResumeLayout(false);
this.GrpAchievements.PerformLayout();
this.GrpAchievementCommands.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.NUDProgress)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListBox ListAchievements;
private System.Windows.Forms.GroupBox GrpAchievements;
private System.Windows.Forms.GroupBox GrpAchievementCommands;
private System.Windows.Forms.Button BtnProgress;
private System.Windows.Forms.Button BtnRevoke;
private System.Windows.Forms.Button BtnGrant;
private System.Windows.Forms.NumericUpDown NUDProgress;
private System.Windows.Forms.TextBox TxtAchievementFilter;
private System.Windows.Forms.LinkLabel LnkRevokeAll;
private System.Windows.Forms.LinkLabel LnkGrantAll;
}
}

View File

@ -0,0 +1,101 @@
using System;
using System.Linq;
using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
namespace GrasscutterTools.Pages
{
internal partial class PageAchievement : BasePage
{
public PageAchievement()
{
InitializeComponent();
}
public override void OnLoad()
{
base.OnLoad();
UpdateList();
}
/// <summary>
/// 点击全部达成时触发
/// </summary>
private void LnkGrantAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetCommand("/achievement grantall");
}
/// <summary>
/// 点击全部撤销时触发
/// </summary>
private void LnkRevokeAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetCommand("/achievement revokeall");
}
/// <summary>
/// 更新列表显示内容
/// </summary>
private void UpdateList()
{
UIUtil.ListBoxFilter(ListAchievements, GameData.Achievements.Lines, TxtAchievementFilter.Text);
}
/// <summary>
/// 过滤器输入改变时触发
/// </summary>
private void TxtAchievementFilter_TextChanged(object sender, EventArgs e)
{
UpdateList();
}
/// <summary>
/// 获取所有选中项ID
/// </summary>
/// <returns>所有选中项ID如未选中返回 null</returns>
private int[] GetSelectedIds()
{
if (ListAchievements.SelectedItems.Count == 0)
return null;
var selectedIds = new int[ListAchievements.SelectedItems.Count];
var i = 0;
foreach (string item in ListAchievements.SelectedItems)
selectedIds[i++] = int.Parse(item.Substring(0, item.IndexOf(':')));
return selectedIds;
}
private void GenSelected(string command, string args = "")
{
var selectedIds = GetSelectedIds();
if (selectedIds == null)
{
MessageBox.Show(Resources.SelectAnyItem, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (selectedIds.Length == 1)
SetCommand(args == "" ? $"{command} {selectedIds[0]}" : $"{command} {selectedIds[0]} {args}");
else
SetCommand(string.Join(" | ", selectedIds.Select(it => args == "" ? $"{command} {it}" : $"{command} {it} {args}")));
}
private void BtnGrant_Click(object sender, EventArgs e)
{
GenSelected("/achievement grant");
}
private void BtnRevoke_Click(object sender, EventArgs e)
{
GenSelected("/achievement revoke");
}
private void BtnProgress_Click(object sender, EventArgs e)
{
GenSelected("/achievement progress", NUDProgress.Text);
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -85,12 +85,12 @@ namespace GrasscutterTools.Pages
#region - Check update -
private ReleaseAPI.ReleaseInfo LastestInfo = null;
private GithubHelper.ReleaseInfo LastestInfo = null;
private Version lastestVersion = null;
private async Task LoadUpdate()
{
var info = await ReleaseAPI.GetReleasesLastest("jie65535", "GrasscutterCommandGenerator");
var info = await GithubHelper.GetReleasesLatest("jie65535", "GrasscutterCommandGenerator");
if (Version.TryParse(info.TagName.Substring(1), out lastestVersion) && Common.AppVersion < lastestVersion)
{
if (!string.IsNullOrEmpty(Settings.Default.CheckedLastVersion)
@ -179,7 +179,7 @@ namespace GrasscutterTools.Pages
if (LastestInfo != null)
{
var r = MessageBox.Show(
string.Format(Resources.NewVersionInfo, LastestInfo.Name, LastestInfo.CraeteTime.ToLocalTime(), LastestInfo.Body),
string.Format(Resources.NewVersionInfo, LastestInfo.Name, LastestInfo.CreateTime.ToLocalTime(), LastestInfo.Body),
Resources.CheckToNewVersion,
MessageBoxButtons.YesNo,
MessageBoxIcon.Information);

File diff suppressed because it is too large Load Diff

View File

@ -297,4 +297,55 @@ Improvement suggestions have been submitted, please use caution to send emails t
<data name="TaskRunningCannotOperated" xml:space="preserve">
<value>The task has already started and cannot be operated</value>
</data>
<data name="PageAboutTitle" xml:space="preserve">
<value>About</value>
</data>
<data name="PageAvatarTitle" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="PageCustomCommandsTitle" xml:space="preserve">
<value>Custom</value>
</data>
<data name="PageGetArtifactTitle" xml:space="preserve">
<value>Artifacts</value>
</data>
<data name="PageGiveItemTitle" xml:space="preserve">
<value>Items</value>
</data>
<data name="PageGiveWeaponTitle" xml:space="preserve">
<value>Weapons</value>
</data>
<data name="PageHomeTitle" xml:space="preserve">
<value>Home</value>
</data>
<data name="PageMailTitle" xml:space="preserve">
<value>Mail</value>
</data>
<data name="PageManagementTitle" xml:space="preserve">
<value>Manage</value>
</data>
<data name="PageOpenCommandTitle" xml:space="preserve">
<value>Remote</value>
</data>
<data name="PageQuestTitle" xml:space="preserve">
<value>Quest</value>
</data>
<data name="PageSceneTitle" xml:space="preserve">
<value>Scene</value>
</data>
<data name="PageSpawnTitle" xml:space="preserve">
<value>Spawn</value>
</data>
<data name="PageTasksTitle" xml:space="preserve">
<value>Loop</value>
</data>
<data name="Achievement" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\en-us\Achievement.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="SelectAnyItem" xml:space="preserve">
<value>Plase select any item first!</value>
</data>
<data name="PageAchievementTitle" xml:space="preserve">
<value>Achievement</value>
</data>
</root>

View File

@ -309,4 +309,55 @@
<data name="TaskRunningCannotOperated" xml:space="preserve">
<value>任务已经启动,无法操作</value>
</data>
<data name="PageAboutTitle" xml:space="preserve">
<value>关于</value>
</data>
<data name="PageAvatarTitle" xml:space="preserve">
<value>角色</value>
</data>
<data name="PageCustomCommandsTitle" xml:space="preserve">
<value>自定义</value>
</data>
<data name="PageGetArtifactTitle" xml:space="preserve">
<value>圣遗物</value>
</data>
<data name="PageGiveItemTitle" xml:space="preserve">
<value>物品</value>
</data>
<data name="PageGiveWeaponTitle" xml:space="preserve">
<value>武器</value>
</data>
<data name="PageHomeTitle" xml:space="preserve">
<value>主页</value>
</data>
<data name="PageMailTitle" xml:space="preserve">
<value>邮件</value>
</data>
<data name="PageManagementTitle" xml:space="preserve">
<value>管理</value>
</data>
<data name="PageOpenCommandTitle" xml:space="preserve">
<value>远程</value>
</data>
<data name="PageQuestTitle" xml:space="preserve">
<value>任务</value>
</data>
<data name="PageSceneTitle" xml:space="preserve">
<value>场景</value>
</data>
<data name="PageSpawnTitle" xml:space="preserve">
<value>生成</value>
</data>
<data name="PageTasksTitle" xml:space="preserve">
<value>循环</value>
</data>
<data name="Achievement" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\zh-cn\Achievement.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="SelectAnyItem" xml:space="preserve">
<value>请先选中任意项!</value>
</data>
<data name="PageAchievementTitle" xml:space="preserve">
<value>成就</value>
</data>
</root>

View File

@ -285,4 +285,55 @@
<data name="TaskRunningCannotOperated" xml:space="preserve">
<value>Задача уже запущена и не может быть выполнена</value>
</data>
<data name="PageAboutTitle" xml:space="preserve">
<value>Справка</value>
</data>
<data name="PageAvatarTitle" xml:space="preserve">
<value>Персонаж</value>
</data>
<data name="PageCustomCommandsTitle" xml:space="preserve">
<value>Кастомное</value>
</data>
<data name="PageGetArtifactTitle" xml:space="preserve">
<value>Артефакт</value>
</data>
<data name="PageGiveItemTitle" xml:space="preserve">
<value>Предметы</value>
</data>
<data name="PageGiveWeaponTitle" xml:space="preserve">
<value>Оружие</value>
</data>
<data name="PageHomeTitle" xml:space="preserve">
<value>Главная</value>
</data>
<data name="PageMailTitle" xml:space="preserve">
<value>Почта</value>
</data>
<data name="PageManagementTitle" xml:space="preserve">
<value>Аккаунты</value>
</data>
<data name="PageOpenCommandTitle" xml:space="preserve">
<value>OpenCommand</value>
</data>
<data name="PageQuestTitle" xml:space="preserve">
<value>Квест</value>
</data>
<data name="PageSceneTitle" xml:space="preserve">
<value>Сцена</value>
</data>
<data name="PageSpawnTitle" xml:space="preserve">
<value>Спавн</value>
</data>
<data name="PageTasksTitle" xml:space="preserve">
<value>Циклы</value>
</data>
<data name="Achievement" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ru-ru\Achievement.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="SelectAnyItem" xml:space="preserve">
<value>Сначала выберите любой элемент</value>
</data>
<data name="PageAchievementTitle" xml:space="preserve">
<value>Достижение</value>
</data>
</root>

View File

@ -291,4 +291,55 @@
<data name="TaskRunningCannotOperated" xml:space="preserve">
<value>任務已經啟動,無法操作</value>
</data>
<data name="PageAboutTitle" xml:space="preserve">
<value>關於</value>
</data>
<data name="PageAvatarTitle" xml:space="preserve">
<value>角色</value>
</data>
<data name="PageCustomCommandsTitle" xml:space="preserve">
<value>自定義</value>
</data>
<data name="PageGetArtifactTitle" xml:space="preserve">
<value>聖遺物</value>
</data>
<data name="PageGiveItemTitle" xml:space="preserve">
<value>物品</value>
</data>
<data name="PageGiveWeaponTitle" xml:space="preserve">
<value>武器</value>
</data>
<data name="PageHomeTitle" xml:space="preserve">
<value>主頁</value>
</data>
<data name="PageMailTitle" xml:space="preserve">
<value>郵件</value>
</data>
<data name="PageManagementTitle" xml:space="preserve">
<value>管理</value>
</data>
<data name="PageOpenCommandTitle" xml:space="preserve">
<value>遠程</value>
</data>
<data name="PageQuestTitle" xml:space="preserve">
<value>任務</value>
</data>
<data name="PageSceneTitle" xml:space="preserve">
<value>場景</value>
</data>
<data name="PageSpawnTitle" xml:space="preserve">
<value>生成</value>
</data>
<data name="PageTasksTitle" xml:space="preserve">
<value>循環</value>
</data>
<data name="Achievement" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\zh-tw\Achievement.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="SelectAnyItem" xml:space="preserve">
<value>請先選中任意項!</value>
</data>
<data name="PageAchievementTitle" xml:space="preserve">
<value>成就</value>
</data>
</root>

View File

@ -6,9 +6,9 @@ using Newtonsoft.Json;
namespace GrasscutterTools.Utils
{
internal class ReleaseAPI
internal class GithubHelper
{
public static async Task<ReleaseInfo> GetReleasesLastest(string username, string repo)
public static async Task<ReleaseInfo> GetReleasesLatest(string username, string repo)
{
var headerValue = new ProductInfoHeaderValue("GrasscutterTools", "1");
try
@ -29,6 +29,23 @@ namespace GrasscutterTools.Utils
}
}
public static async Task<byte[]> DownloadRepo(string username, string repo, string branch)
{
byte[] zipBytes;
try
{
zipBytes = await HttpHelper.GetDataAsync(
$"https://github.com/{username}/{repo}/archive/refs/heads/{branch}.zip");
}
catch
{
zipBytes = await HttpHelper.GetDataAsync(
$"https://hub.fastgit.org/{username}/{repo}/archive/refs/heads/{branch}.zip");
}
return zipBytes;
}
public class ReleaseInfo
{
[JsonProperty("tag_name")]
@ -38,7 +55,7 @@ namespace GrasscutterTools.Utils
public string Url { get; set; }
[JsonProperty("created_at")]
public DateTimeOffset CraeteTime { get; set; }
public DateTimeOffset CreateTime { get; set; }
[JsonProperty("name")]
public string Name { get; set; }

View File

@ -44,15 +44,27 @@ namespace GrasscutterTools.Utils
try
{
var responseMessage = await HttpClient.GetAsync(url);
if (responseMessage.IsSuccessStatusCode)
{
var responseString = await responseMessage.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseString);
}
else
{
if (!responseMessage.IsSuccessStatusCode)
throw new HttpRequestException(responseMessage.ReasonPhrase);
}
var responseString = await responseMessage.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseString);
}
catch (Exception ex)
{
if (ex.InnerException != null)
throw ex.InnerException;
throw;
}
}
public static async Task<byte[]> GetDataAsync(string url)
{
try
{
var responseMessage = await HttpClient.GetAsync(url);
if (!responseMessage.IsSuccessStatusCode)
throw new HttpRequestException(responseMessage.ReasonPhrase);
return await responseMessage.Content.ReadAsByteArrayAsync();
}
catch (Exception ex)
{
@ -68,15 +80,10 @@ namespace GrasscutterTools.Utils
{
var content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
var responseMessage = await HttpClient.PostAsync(url, content);
if (responseMessage.IsSuccessStatusCode)
{
var responseString = await responseMessage.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseString);
}
else
{
if (!responseMessage.IsSuccessStatusCode)
throw new HttpRequestException(responseMessage.ReasonPhrase);
}
var responseString = await responseMessage.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseString);
}
catch (Exception ex)
{