Compare commits

...

36 Commits

Author SHA1 Message Date
8d42ddee10 Update README and Screenshots 2022-10-28 22:47:29 +08:00
2a3100c822 Fix mail item name issue 2022-10-28 22:31:46 +08:00
97bc9d8f6a Fix open command help format error 2022-10-28 22:22:00 +08:00
f2c4bfb7d3 Fix stat event not firing issue 2022-10-28 22:10:47 +08:00
d84f8036f7 Update translate
Remove ImgHome.jpg
2022-10-28 22:00:30 +08:00
16a57f38d3 Fix mail item list
Add /setConst to Avatar tab
Update translates
2022-10-28 21:54:04 +08:00
88031a79d0 Update translations 2022-10-28 13:06:35 +08:00
a36ce1af0f Fix mail player id limit issue 2022-10-28 12:19:41 +08:00
397ec8472b Update import avatar skill level to min 2022-10-28 08:39:17 +08:00
160b49d752 Fix mail item issue 2022-10-28 08:36:43 +08:00
fd515b18cf Implement send mail and mail list
Optimize duplicate code
2022-10-28 00:22:15 +08:00
5c7c64ea6c Add Command Version v1.4.2 2022-10-27 22:36:40 +08:00
64626ad065 Fix GOOD Import issues 2022-10-27 22:33:00 +08:00
8a65120e47 Add Mail editor (WIP)
Update Drop editor indexes
2022-10-27 13:11:58 +08:00
150e3a1132 Update README_zh-cn.md
Add QQ Group link
2022-10-27 10:27:43 +08:00
fbe53a7a0b Update README.md
Add QQ Group link
2022-10-27 10:27:24 +08:00
641d130a72 Update Screenshots(en) 2022-10-27 00:17:13 +08:00
6313373283 Add DropEditor screenshots 2022-10-26 23:58:45 +08:00
f70e61c686 Update translations 2022-10-26 23:48:35 +08:00
7d19876072 Implement drop editor functions 2022-10-26 23:30:57 +08:00
74613a809d DropEditor: Implement multiple selection and display intersection 2022-10-26 21:56:30 +08:00
60e54b1c91 Add Drop.json Path Setting
Update Drop.json Editor UI
2022-10-26 13:03:54 +08:00
c860180564 Add Drop Editor (WIP) 2022-10-25 23:36:30 +08:00
f0885a1fee Update README
Add run commands screenshot
2022-10-23 11:17:39 +08:00
641a4b0006 Update version to v1.7.0 2022-10-23 11:13:47 +08:00
fec144cb64 Implement command combination
Update command version
Add set all skill levels
Add skill level in avatar
2022-10-23 11:13:35 +08:00
c6b2c0ea65 Update 3.1.5 ids(EN) 2022-10-05 18:37:14 +08:00
8c42aca027 Update Version to v1.6.8 2022-10-05 18:19:43 +08:00
d84a34b268 Update Item.txt
Add 3.1.5 ids
2022-10-05 18:17:54 +08:00
Syca
eb6f15f078 Add 3.1.5 Monsters(Only CHS)
Do not ask me for 3.1.5X client!
I don't have it!
2022-10-02 12:38:52 +08:00
Syca
bd7aac6fcf Update All Avatar&Weapon
为什么这么久了,有的地方都没更新?
2022-10-02 12:38:52 +08:00
346a68ddb4 Merge pull request #122 from Halo1620/patch-2
3.1 changes
2022-09-29 21:40:17 +08:00
e8736c997a Merge pull request #123 from Halo1620/patch-3
3.1 eneimes
2022-09-29 21:39:49 +08:00
Halo1620
5d383ad72f 3.1 eneimes 2022-09-29 15:26:19 +02:00
Halo1620
0ec942275e 3.1 changes 2022-09-29 15:25:35 +02:00
EgorBron
24a38cbdf4 ru translation (from #119) (#120)
* Fixed some translations on Russian.
* Updated readme screenshots
2022-09-22 20:16:35 +08:00
95 changed files with 13337 additions and 5786 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -3,6 +3,7 @@
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
English | [简体中文](README_zh-cn.md) | [Русский](README_ru-RU.md)
@@ -14,6 +15,15 @@ Support 简体中文, 繁体中文, English and Русский languages.
Welcome everyone to improve the [ID Resource](/Source/GrasscutterTools/Resources/en-us).
## Update log
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots-en/15-DropEditor.png)
![Mail Editor](Doc/Screenshots-en/16-MailEditor.png)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
@@ -52,8 +62,6 @@ The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-openco
![Change Scene Screenshort](Doc/Screenshots-en/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots-en/8-CustomStats.png)
![Management](Doc/Screenshots-en/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-en/10-GachaBannerEditor.png)

View File

@@ -4,31 +4,40 @@
[![GitHub звёзды](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github ВСЕ выпуски](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[English](README.md) | [简体中文](README_zh-cn.md) | Русский - Перевод Юрий Дворецкий (с исправлениями от EgorBron)
[English](README.md) | [简体中文](README_zh-cn.md) | Русский - Перевод [Юрий Дворецкий](https://github.com/yurikenjx) (с исправлениями от [EgorBron](https://github.com/EgorBron))
## Генератор команд
## Генератор команд (GCG)
Пожалуйста, загрузите последнюю версию из вкладки [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
Загрузите последнюю версию из вкладки [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases).
Поддерживает 简体中文 (китайский упр.), 繁体中文 (китайский трад.), English (английский) и Русский языки.
GCG поддерживает 简体中文 (китайский упр.), 繁体中文 (китайский трад.), English (английский) и Русский языки.
Приглашаем всех улучшить [ресурс ID](/Source/GrasscutterTools/Resources/ru-ru)
Приглашаем всех улучшить [ID ресурсов и перевод](/Source/GrasscutterTools/Resources/ru-ru)
## Удаленная команда
## Update log
### GrasscutterTools-v1.7.0
Для этого серверу требуется плагин [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin)
![Run Commands](Doc/Screenshots/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots-ru/15-DropEditor.png)
![Mail Editor](Doc/Screenshots-ru/16-MailEditor.png)
## Удаленная команда (OpenCommand)
Чтобы использовать команды прямо из GCG, серверу требуется плагин [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin).
![Open Command](Doc/Screenshots/OpenCommand.gif)
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
>
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (в файле config.json):
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
>
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность.
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
>
> Если вы не указали порт `80` в конфиге, вам нужно указать его в URL-адресе: http://127.0.0.1:443
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
---
@@ -38,28 +47,30 @@
![Главная](Doc/Screenshots-ru/0-Home.png)
![Run Command](Doc/Screenshots/RunMultipleCommands.png)
![Скриншот пользовательских команд](Doc/Screenshots-ru/1-CustomCommands.png)
![Скриншот Пользовательского артефакта](Doc/Screenshots-ru/2-CustomArtifact.png)
![Скриншот артефактов](Doc/Screenshots-ru/2-CustomArtifact.png)
![Скриншот Пользовательского оружия](Doc/Screenshots-ru/3-CustomWeapon.png)
![Скриншот квестов](Doc/Screenshots-ru/3-Quest.png)
![Скриншот Дать предмет](Doc/Screenshots-ru/4-GiveItem.png)
![Скриншот спавна сущностей](Doc/Screenshots-ru/4-SpawnEntity.png)
![Скриншот Дать Персонажа Screenshort](Doc/Screenshots-ru/5-GiveAvatar.png)
![Скриншот выдачи персонажа](Doc/Screenshots-ru/5-GiveAvatar.png)
![Скриншот Спавн Сущности](Doc/Screenshots-ru/6-SpawnEntity.png)
![Скриншот выдачи оружия](Doc/Screenshots-ru/7-CustomWeapon.png)
![Скриншот Изменить сцену](Doc/Screenshots-ru/7-ChangeScene.png)
![Скриншот выдачи предметов](Doc/Screenshots-ru/8-GiveItem.png)
![Скриншот Пользовательская статистика](Doc/Screenshots-ru/8-CustomStats.png)
![Скриншот смены сцены](Doc/Screenshots-ru/9-ChangeScene.png)
![Управление](Doc/Screenshots-ru/9-Manage.png)
![Скриншот управления аккаунтом](Doc/Screenshots-ru/11-Manage.png)
![Редактор баннеров Gacha](Doc/Screenshots-ru/10-GachaBannerEditor.png)
![Скриншот Credits](Doc/Screenshots-ru/12-Credits.png)
![Текстоый Браузер карт](Doc/Screenshots-ru/11-TextMapBrowser.png)
![Скриншот OpenCommand](Doc/Screenshots-ru/13-Remote.png)
![Скриншот Удаленного доступа](Doc/Screenshots-ru/12-Remote.png)
![Редактор баннеров](Doc/Screenshots-ru/14-GachaBannerEditor.png)
![Скриншот Квесты](Doc/Screenshots-ru/13-Quest.png)
![Текстоый браузер карт](Doc/Screenshots-ru/15-TextMapBrowser.png)

View File

@@ -3,6 +3,7 @@
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
[English](README.md) | 简体中文 | [Русский](README_ru-RU.md)
@@ -14,6 +15,15 @@
欢迎大家一起来完善工具的[内置资源](/Source/GrasscutterTools/Resources/zh-cn)。
## Update log
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots/15-DropEditor.png)
![Mail Editor](Doc/Screenshots/16-MailEditor.png)
## 远程执行
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
@@ -51,8 +61,6 @@
![Change Scene Screenshort](Doc/Screenshots/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots/8-CustomStats.png)
![Management](Doc/Screenshots/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots/10-GachaBannerEditor.png)

View File

@@ -43,6 +43,12 @@
<setting name="IsTopMost" serializeAs="String">
<value>False</value>
</setting>
<setting name="DropJsonPath" serializeAs="String">
<value />
</setting>
<setting name="DefaultMailSender" serializeAs="String">
<value>GrasscutterTools</value>
</setting>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -0,0 +1,366 @@
namespace GrasscutterTools.Forms
{
partial class FormDropEditor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormDropEditor));
this.LblDropPathLabel = new System.Windows.Forms.Label();
this.TxtDropJsonPath = new System.Windows.Forms.TextBox();
this.BtnLoad = new System.Windows.Forms.Button();
this.BtnSave = new System.Windows.Forms.Button();
this.ListMonsters = new System.Windows.Forms.ListBox();
this.TxtMonsterFilter = new System.Windows.Forms.TextBox();
this.TxtItemFilter = new System.Windows.Forms.TextBox();
this.ListDropData = new System.Windows.Forms.ListBox();
this.GrpDropList = new System.Windows.Forms.GroupBox();
this.BtnCopyAll = new System.Windows.Forms.Button();
this.BtnClear = new System.Windows.Forms.Button();
this.BtnPaste = new System.Windows.Forms.Button();
this.BtnCopy = new System.Windows.Forms.Button();
this.TxtItem = new System.Windows.Forms.TextBox();
this.BtnDelete = new System.Windows.Forms.Button();
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
this.LblItemLabel = new System.Windows.Forms.Label();
this.LblTilde2 = new System.Windows.Forms.Label();
this.LblTilde1 = new System.Windows.Forms.Label();
this.NUDMaxWeight = new System.Windows.Forms.NumericUpDown();
this.NUDMinWeight = new System.Windows.Forms.NumericUpDown();
this.NUDMaxCount = new System.Windows.Forms.NumericUpDown();
this.NUDMinCount = new System.Windows.Forms.NumericUpDown();
this.LblWeightLabel = new System.Windows.Forms.Label();
this.LblCountLabel = new System.Windows.Forms.Label();
this.ListItems = new System.Windows.Forms.ListBox();
this.GrpMonsterList = new System.Windows.Forms.GroupBox();
this.GrpItemList = new System.Windows.Forms.GroupBox();
this.GrpDropList.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDMaxWeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMinWeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMaxCount)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMinCount)).BeginInit();
this.GrpMonsterList.SuspendLayout();
this.GrpItemList.SuspendLayout();
this.SuspendLayout();
//
// LblDropPathLabel
//
resources.ApplyResources(this.LblDropPathLabel, "LblDropPathLabel");
this.LblDropPathLabel.Name = "LblDropPathLabel";
//
// TxtDropJsonPath
//
resources.ApplyResources(this.TxtDropJsonPath, "TxtDropJsonPath");
this.TxtDropJsonPath.Name = "TxtDropJsonPath";
//
// BtnLoad
//
resources.ApplyResources(this.BtnLoad, "BtnLoad");
this.BtnLoad.Name = "BtnLoad";
this.BtnLoad.UseVisualStyleBackColor = true;
this.BtnLoad.Click += new System.EventHandler(this.BtnLoad_Click);
//
// BtnSave
//
resources.ApplyResources(this.BtnSave, "BtnSave");
this.BtnSave.Name = "BtnSave";
this.BtnSave.UseVisualStyleBackColor = true;
this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click);
//
// ListMonsters
//
resources.ApplyResources(this.ListMonsters, "ListMonsters");
this.ListMonsters.FormattingEnabled = true;
this.ListMonsters.Name = "ListMonsters";
this.ListMonsters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.ListMonsters.SelectedIndexChanged += new System.EventHandler(this.ListMonsters_SelectedIndexChanged);
//
// TxtMonsterFilter
//
resources.ApplyResources(this.TxtMonsterFilter, "TxtMonsterFilter");
this.TxtMonsterFilter.Name = "TxtMonsterFilter";
this.TxtMonsterFilter.TextChanged += new System.EventHandler(this.TxtMonsterFilter_TextChanged);
//
// TxtItemFilter
//
resources.ApplyResources(this.TxtItemFilter, "TxtItemFilter");
this.TxtItemFilter.Name = "TxtItemFilter";
this.TxtItemFilter.TextChanged += new System.EventHandler(this.TxtItemFilter_TextChanged);
//
// ListDropData
//
resources.ApplyResources(this.ListDropData, "ListDropData");
this.ListDropData.FormattingEnabled = true;
this.ListDropData.Name = "ListDropData";
this.ListDropData.SelectedIndexChanged += new System.EventHandler(this.ListDropData_SelectedIndexChanged);
//
// GrpDropList
//
resources.ApplyResources(this.GrpDropList, "GrpDropList");
this.GrpDropList.Controls.Add(this.BtnCopyAll);
this.GrpDropList.Controls.Add(this.BtnClear);
this.GrpDropList.Controls.Add(this.BtnPaste);
this.GrpDropList.Controls.Add(this.BtnCopy);
this.GrpDropList.Controls.Add(this.TxtItem);
this.GrpDropList.Controls.Add(this.BtnDelete);
this.GrpDropList.Controls.Add(this.BtnAddOrUpdate);
this.GrpDropList.Controls.Add(this.LblItemLabel);
this.GrpDropList.Controls.Add(this.LblTilde2);
this.GrpDropList.Controls.Add(this.LblTilde1);
this.GrpDropList.Controls.Add(this.NUDMaxWeight);
this.GrpDropList.Controls.Add(this.NUDMinWeight);
this.GrpDropList.Controls.Add(this.NUDMaxCount);
this.GrpDropList.Controls.Add(this.NUDMinCount);
this.GrpDropList.Controls.Add(this.LblWeightLabel);
this.GrpDropList.Controls.Add(this.LblCountLabel);
this.GrpDropList.Controls.Add(this.ListDropData);
this.GrpDropList.Name = "GrpDropList";
this.GrpDropList.TabStop = false;
//
// BtnCopyAll
//
resources.ApplyResources(this.BtnCopyAll, "BtnCopyAll");
this.BtnCopyAll.Name = "BtnCopyAll";
this.BtnCopyAll.UseVisualStyleBackColor = true;
this.BtnCopyAll.Click += new System.EventHandler(this.BtnCopyAll_Click);
//
// BtnClear
//
resources.ApplyResources(this.BtnClear, "BtnClear");
this.BtnClear.Name = "BtnClear";
this.BtnClear.UseVisualStyleBackColor = true;
this.BtnClear.Click += new System.EventHandler(this.BtnClear_Click);
//
// BtnPaste
//
resources.ApplyResources(this.BtnPaste, "BtnPaste");
this.BtnPaste.Name = "BtnPaste";
this.BtnPaste.UseVisualStyleBackColor = true;
this.BtnPaste.Click += new System.EventHandler(this.BtnPaste_Click);
//
// BtnCopy
//
resources.ApplyResources(this.BtnCopy, "BtnCopy");
this.BtnCopy.Name = "BtnCopy";
this.BtnCopy.UseVisualStyleBackColor = true;
this.BtnCopy.Click += new System.EventHandler(this.BtnCopy_Click);
//
// TxtItem
//
resources.ApplyResources(this.TxtItem, "TxtItem");
this.TxtItem.Name = "TxtItem";
//
// BtnDelete
//
resources.ApplyResources(this.BtnDelete, "BtnDelete");
this.BtnDelete.Name = "BtnDelete";
this.BtnDelete.UseVisualStyleBackColor = true;
this.BtnDelete.Click += new System.EventHandler(this.BtnDelete_Click);
//
// BtnAddOrUpdate
//
resources.ApplyResources(this.BtnAddOrUpdate, "BtnAddOrUpdate");
this.BtnAddOrUpdate.Name = "BtnAddOrUpdate";
this.BtnAddOrUpdate.UseVisualStyleBackColor = true;
this.BtnAddOrUpdate.Click += new System.EventHandler(this.BtnAddOrUpdate_Click);
//
// LblItemLabel
//
resources.ApplyResources(this.LblItemLabel, "LblItemLabel");
this.LblItemLabel.Name = "LblItemLabel";
//
// LblTilde2
//
resources.ApplyResources(this.LblTilde2, "LblTilde2");
this.LblTilde2.Name = "LblTilde2";
//
// LblTilde1
//
resources.ApplyResources(this.LblTilde1, "LblTilde1");
this.LblTilde1.Name = "LblTilde1";
//
// NUDMaxWeight
//
resources.ApplyResources(this.NUDMaxWeight, "NUDMaxWeight");
this.NUDMaxWeight.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.NUDMaxWeight.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.NUDMaxWeight.Name = "NUDMaxWeight";
this.NUDMaxWeight.Value = new decimal(new int[] {
10000,
0,
0,
0});
//
// NUDMinWeight
//
resources.ApplyResources(this.NUDMinWeight, "NUDMinWeight");
this.NUDMinWeight.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.NUDMinWeight.Name = "NUDMinWeight";
//
// NUDMaxCount
//
resources.ApplyResources(this.NUDMaxCount, "NUDMaxCount");
this.NUDMaxCount.Maximum = new decimal(new int[] {
1000000,
0,
0,
0});
this.NUDMaxCount.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.NUDMaxCount.Name = "NUDMaxCount";
this.NUDMaxCount.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// NUDMinCount
//
resources.ApplyResources(this.NUDMinCount, "NUDMinCount");
this.NUDMinCount.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.NUDMinCount.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.NUDMinCount.Name = "NUDMinCount";
this.NUDMinCount.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// LblWeightLabel
//
resources.ApplyResources(this.LblWeightLabel, "LblWeightLabel");
this.LblWeightLabel.Name = "LblWeightLabel";
//
// LblCountLabel
//
resources.ApplyResources(this.LblCountLabel, "LblCountLabel");
this.LblCountLabel.Name = "LblCountLabel";
//
// ListItems
//
resources.ApplyResources(this.ListItems, "ListItems");
this.ListItems.FormattingEnabled = true;
this.ListItems.Name = "ListItems";
this.ListItems.SelectedIndexChanged += new System.EventHandler(this.ListItems_SelectedIndexChanged);
//
// GrpMonsterList
//
resources.ApplyResources(this.GrpMonsterList, "GrpMonsterList");
this.GrpMonsterList.Controls.Add(this.ListMonsters);
this.GrpMonsterList.Controls.Add(this.TxtMonsterFilter);
this.GrpMonsterList.Name = "GrpMonsterList";
this.GrpMonsterList.TabStop = false;
//
// GrpItemList
//
resources.ApplyResources(this.GrpItemList, "GrpItemList");
this.GrpItemList.Controls.Add(this.TxtItemFilter);
this.GrpItemList.Controls.Add(this.ListItems);
this.GrpItemList.Name = "GrpItemList";
this.GrpItemList.TabStop = false;
//
// FormDropEditor
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.GrpItemList);
this.Controls.Add(this.GrpMonsterList);
this.Controls.Add(this.GrpDropList);
this.Controls.Add(this.BtnSave);
this.Controls.Add(this.BtnLoad);
this.Controls.Add(this.TxtDropJsonPath);
this.Controls.Add(this.LblDropPathLabel);
this.Name = "FormDropEditor";
this.GrpDropList.ResumeLayout(false);
this.GrpDropList.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDMaxWeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMinWeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMaxCount)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMinCount)).EndInit();
this.GrpMonsterList.ResumeLayout(false);
this.GrpMonsterList.PerformLayout();
this.GrpItemList.ResumeLayout(false);
this.GrpItemList.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label LblDropPathLabel;
private System.Windows.Forms.TextBox TxtDropJsonPath;
private System.Windows.Forms.Button BtnLoad;
private System.Windows.Forms.Button BtnSave;
private System.Windows.Forms.ListBox ListMonsters;
private System.Windows.Forms.TextBox TxtMonsterFilter;
private System.Windows.Forms.TextBox TxtItemFilter;
private System.Windows.Forms.ListBox ListDropData;
private System.Windows.Forms.GroupBox GrpDropList;
private System.Windows.Forms.Label LblTilde2;
private System.Windows.Forms.Label LblTilde1;
private System.Windows.Forms.NumericUpDown NUDMaxWeight;
private System.Windows.Forms.NumericUpDown NUDMinWeight;
private System.Windows.Forms.NumericUpDown NUDMaxCount;
private System.Windows.Forms.NumericUpDown NUDMinCount;
private System.Windows.Forms.Label LblWeightLabel;
private System.Windows.Forms.Label LblCountLabel;
private System.Windows.Forms.Label LblItemLabel;
private System.Windows.Forms.ListBox ListItems;
private System.Windows.Forms.GroupBox GrpMonsterList;
private System.Windows.Forms.GroupBox GrpItemList;
private System.Windows.Forms.Button BtnDelete;
private System.Windows.Forms.Button BtnAddOrUpdate;
private System.Windows.Forms.TextBox TxtItem;
private System.Windows.Forms.Button BtnCopy;
private System.Windows.Forms.Button BtnPaste;
private System.Windows.Forms.Button BtnClear;
private System.Windows.Forms.Button BtnCopyAll;
}
}

View File

@@ -0,0 +1,498 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Drop;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
namespace GrasscutterTools.Forms
{
public partial class FormDropEditor : Form
{
#region - -
/// <summary>
/// 掉落池
/// Key:怪物ID
/// Value:掉落列表
/// </summary>
private Dictionary<int, List<DropData>> Banners;
/// <summary>
/// 怪物集
/// </summary>
private readonly string[] Monsters;
/// <summary>
/// 当前选中项的掉落列表
/// (当选中多条时,数据为交集)
/// </summary>
private readonly List<DropData> SelectedDropList = new List<DropData>();
/// <summary>
/// 掉落物剪贴板
/// </summary>
private readonly List<DropData> DropClipboard = new List<DropData>();
#endregion - -
#region - -
public FormDropEditor()
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
Monsters = new string[GameData.Monsters.Lines.Length + GameData.Animals.Lines.Length];
GameData.Monsters.Lines.CopyTo(Monsters, 0);
GameData.Animals.Lines.CopyTo(Monsters, GameData.Monsters.Lines.Length);
Array.Sort(Monsters);
ListMonsters.Items.AddRange(Monsters);
ListItems.Items.AddRange(GameData.Items.Lines);
Banners = new Dictionary<int, List<DropData>>();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
// 加载文件路径
var path = Settings.Default.DropJsonPath;
TxtDropJsonPath.Text = path;
if (!string.IsNullOrEmpty(path) && File.Exists(path))
LoadBanners(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
// 保存文件路径
Settings.Default.DropJsonPath = TxtDropJsonPath.Text;
Settings.Default.Save();
base.OnFormClosed(e);
}
#endregion - -
#region - Drop.json -
/// <summary>
/// 加载按钮点击时触发
/// </summary>
private void BtnLoad_Click(object sender, EventArgs e)
{
try
{
var path = TxtDropJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new OpenFileDialog
{
FileName = "Drop.json",
Filter = "Drop.Json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = TxtDropJsonPath.Text = dialog.FileName;
else
return;
}
// 反序列化
LoadBanners(path);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadBanners(string path)
{
// 反序列化
var banners = JsonConvert.DeserializeObject<List<DropInfo>>(File.ReadAllText(path));
Banners = new Dictionary<int, List<DropData>>(banners.Count);
foreach (var item in banners)
Banners.Add(item.MonsterId, item.DropDataList);
}
/// <summary>
/// 保存按钮点击时触发
/// </summary>
private void BtnSave_Click(object sender, EventArgs e)
{
try
{
var path = TxtDropJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new SaveFileDialog
{
FileName = "Drop.json",
Filter = "Drop.json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = TxtDropJsonPath.Text = dialog.FileName;
else
return;
}
// 序列化
var banners = new List<DropInfo>(Banners.Count);
foreach (var item in Banners)
{
banners.Add(new DropInfo
{
MonsterId = item.Key,
DropDataList = item.Value,
});
}
File.WriteAllText(path, JsonConvert.SerializeObject(banners));
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - Drop.json -
#region - -
/// <summary>
/// 怪物列表过滤器文本改变时触发
/// </summary>
private void TxtMonsterFilter_TextChanged(object sender, EventArgs e)
{
UIUtil.ListBoxFilter(ListMonsters, Monsters, TxtMonsterFilter.Text);
}
/// <summary>
/// 遍历选中项怪物Id集合
/// </summary>
private IEnumerable<int> SelectedMonsterIds()
{
foreach (string item in ListMonsters.SelectedItems)
yield return ItemMap.ToId(item);
}
/// <summary>
/// 怪物列表选中项改变时触发
/// </summary>
private void ListMonsters_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListMonsters.SelectedItems.Count == 0) return;
// 掉落物列表标题显示
var sp = GrpDropList.Text.IndexOf(" | ");
if (sp >= 0) GrpDropList.Text = GrpDropList.Text.Remove(sp);
if (ListMonsters.SelectedItems.Count == 1)
{
var item = ListMonsters.SelectedItem as string;
GrpDropList.Text += " | " + item;
}
else
{
GrpDropList.Text += " | Monsters x" + ListMonsters.SelectedItems.Count.ToString();
}
// 获取选中项中相同的掉落物集合(仅物品、掉落数量、掉落概率完全一致的显示)
SelectedDropList.Clear();
var first = true;
foreach (var monsterId in SelectedMonsterIds())
{
if (Banners.TryGetValue(monsterId, out List<DropData> dropList))
{
if (first)
{
SelectedDropList.AddRange(dropList);
first = false;
}
else if (SelectedDropList.Count > 0)
{
// 仅保留交集
var intersect = SelectedDropList.Intersect(dropList).ToList();
SelectedDropList.Clear();
SelectedDropList.AddRange(intersect);
}
else
{
break;
}
}
else
{
SelectedDropList.Clear();
break;
}
}
ShowDropList(SelectedDropList);
}
/// <summary>
/// 显示指定掉落列表
/// </summary>
/// <param name="dropList">掉落物列表</param>
private void ShowDropList(List<DropData> dropList)
{
// 显示到列表
ListDropData.BeginUpdate();
ListDropData.Items.Clear();
if (dropList.Count > 0)
{
ListDropData.Items.AddRange(dropList.Select(it => it.ToString()).ToArray());
ListDropData.SelectedIndex = 0;
}
ListDropData.EndUpdate();
}
#endregion - -
#region - -
/// <summary>
/// 掉落列表选中项改变时触发
/// </summary>
private void ListDropData_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListDropData.SelectedIndex == -1) return;
var dropData = SelectedDropList[ListDropData.SelectedIndex];
TxtItem.Text = $"{dropData.ItemId} : {GameData.Items[dropData.ItemId]}";
NUDMinCount.Value = dropData.MinCount;
NUDMaxCount.Value = dropData.MaxCount;
NUDMinWeight.Value = dropData.MinWeight;
NUDMaxWeight.Value = dropData.MaxWeight;
//BtnCopy.Enabled = true;
//BtnDelete.Enabled = true;
//BtnAddOrUpdate.Enabled = true;
}
/// <summary>
/// 点击复制按钮时触发
/// </summary>
private async void BtnCopy_Click(object sender, EventArgs e)
{
if (ListDropData.SelectedIndex == -1) return;
DropClipboard.Clear();
DropClipboard.Add(SelectedDropList[ListDropData.SelectedIndex]);
await UIUtil.ButtonComplete(BtnCopy);
}
/// <summary>
/// 点击复制全部按钮时触发
/// </summary>
private async void BtnCopyAll_Click(object sender, EventArgs e)
{
if (SelectedDropList.Count == 0) return;
DropClipboard.Clear();
DropClipboard.AddRange(SelectedDropList);
await UIUtil.ButtonComplete(BtnCopyAll);
}
/// <summary>
/// 点击粘贴按钮时触发
/// </summary>
private void BtnPaste_Click(object sender, EventArgs e)
{
if (DropClipboard.Count == 0) return;
foreach (var item in DropClipboard)
AddOrUpdateDrop(item);
ShowDropList(SelectedDropList);
}
/// <summary>
/// 点击删除按钮时触发
/// </summary>
private void BtnDelete_Click(object sender, EventArgs e)
{
if (ListDropData.SelectedIndex == -1) return;
var dropData = SelectedDropList[ListDropData.SelectedIndex];
RemoveDrop(dropData);
ShowDropList(SelectedDropList);
}
/// <summary>
/// 点击清空按钮时触发
/// </summary>
private void BtnClear_Click(object sender, EventArgs e)
{
if (SelectedDropList.Count == 0)
return;
if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
for (int i = SelectedDropList.Count - 1; i >= 0; i--)
RemoveDrop(SelectedDropList[i]);
ShowDropList(SelectedDropList);
}
}
/// <summary>
/// 点击添加或更新按钮时触发
/// </summary>
private void BtnAddOrUpdate_Click(object sender, EventArgs e)
{
if (ListMonsters.SelectedItems.Count == 0)
return;
try
{
AddOrUpdateDrop(GetInput());
}
catch (FormatException ex)
{
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
ShowDropList(SelectedDropList);
}
/// <summary>
/// 获取输入
/// </summary>
/// <returns>掉落物信息</returns>
private DropData GetInput()
{
var dropData = new DropData();
var item = TxtItem.Text;
dropData.ItemId = ItemMap.ToId(item);
//if (int.TryParse(item.Substring(0, item.IndexOf(':')).Trim(), out int itemId))
//{
// dropData.ItemId = itemId;
//}
if (NUDMaxCount.Value < NUDMinCount.Value)
{
dropData.MinCount = (int)NUDMaxCount.Value;
dropData.MaxCount = (int)NUDMinCount.Value;
}
else
{
dropData.MinCount = (int)NUDMinCount.Value;
dropData.MaxCount = (int)NUDMaxCount.Value;
}
if (NUDMaxWeight.Value < NUDMinWeight.Value)
{
dropData.MinWeight = (int)NUDMaxWeight.Value;
dropData.MaxWeight = (int)NUDMinWeight.Value;
}
else
{
dropData.MinWeight = (int)NUDMinWeight.Value;
dropData.MaxWeight = (int)NUDMaxWeight.Value;
}
return dropData;
}
/// <summary>
/// 添加或更新掉落物到当前选中项
/// </summary>
/// <param name="data">掉落物信息</param>
private void AddOrUpdateDrop(DropData data)
{
if (ListMonsters.SelectedItems.Count == 0)
return;
foreach (var monsterId in SelectedMonsterIds())
{
if (!Banners.TryGetValue(monsterId, out List<DropData> dropList))
{
dropList = new List<DropData>();
Banners[monsterId] = dropList;
}
AddOrUpdateDrop(dropList, data);
}
AddOrUpdateDrop(SelectedDropList, data);
}
/// <summary>
/// 从当前选中项移除掉落物
/// </summary>
/// <param name="data">掉落物信息</param>
private void RemoveDrop(DropData data)
{
if (ListMonsters.SelectedItems.Count == 0)
return;
foreach (var monsterId in SelectedMonsterIds())
{
if (!Banners.TryGetValue(monsterId, out List<DropData> dropList))
{
dropList = new List<DropData>();
Banners[monsterId] = dropList;
}
dropList.Remove(data);
}
SelectedDropList.Remove(data);
}
/// <summary>
/// 添加或更新掉落物到指定列表中
/// </summary>
/// <param name="dropList">掉落物列表</param>
/// <param name="data">掉落物信息</param>
private void AddOrUpdateDrop(List<DropData> dropList, DropData data)
{
int i = 0;
for (; i < dropList.Count; i++)
if (dropList[i].ItemId == data.ItemId)
break;
if (i == dropList.Count)
dropList.Add(data);
else
dropList[i] = data;
}
#endregion - -
#region - -
/// <summary>
/// 物品列表过滤器文本改变时触发
/// </summary>
private void TxtItemFilter_TextChanged(object sender, EventArgs e)
{
UIUtil.ListBoxFilter(ListItems, GameData.Items.Lines, TxtItemFilter.Text);
}
/// <summary>
/// 物品列表选中项改变时触发
/// </summary>
private void ListItems_SelectedIndexChanged(object sender, EventArgs e)
{
TxtItem.Text = ListItems.SelectedItem as string;
}
#endregion - -
}
}

View File

@@ -0,0 +1,178 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblDropPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 17</value>
</data>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json Path:</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Load</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<data name="GrpDropList.Text" xml:space="preserve">
<value>Drop list</value>
</data>
<data name="BtnCopyAll.Text" xml:space="preserve">
<value>Copy all</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>× Clear</value>
</data>
<data name="BtnPaste.Text" xml:space="preserve">
<value>Paste</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>Copy</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Remove</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Add or Update</value>
</data>
<data name="LblItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 17</value>
</data>
<data name="LblItemLabel.Text" xml:space="preserve">
<value>Item:</value>
</data>
<data name="LblWeightLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblWeightLabel.Text" xml:space="preserve">
<value>Weight:</value>
</data>
<data name="LblCountLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="LblCountLabel.Text" xml:space="preserve">
<value>Count:</value>
</data>
<data name="GrpMonsterList.Text" xml:space="preserve">
<value>Monster list</value>
</data>
<data name="GrpItemList.Text" xml:space="preserve">
<value>Item list</value>
</data>
</root>

View File

@@ -0,0 +1,891 @@
<?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>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblDropPathLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblDropPathLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>17, 15</value>
</data>
<data name="LblDropPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 17</value>
</data>
<data name="LblDropPathLabel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json 路径:</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.Name" xml:space="preserve">
<value>LblDropPathLabel</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="TxtDropJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 12</value>
</data>
<data name="TxtDropJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>487, 23</value>
</data>
<data name="TxtDropJsonPath.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.Name" xml:space="preserve">
<value>TxtDropJsonPath</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="BtnLoad.Location" type="System.Drawing.Point, System.Drawing">
<value>621, 12</value>
</data>
<data name="BtnLoad.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnLoad.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加载</value>
</data>
<data name="&gt;&gt;BtnLoad.Name" xml:space="preserve">
<value>BtnLoad</value>
</data>
<data name="&gt;&gt;BtnLoad.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;BtnLoad.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnLoad.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>726, 12</value>
</data>
<data name="BtnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnSave.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>保存</value>
</data>
<data name="&gt;&gt;BtnSave.Name" xml:space="preserve">
<value>BtnSave</value>
</data>
<data name="&gt;&gt;BtnSave.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;BtnSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSave.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListMonsters.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ListMonsters.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="ListMonsters.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 51</value>
</data>
<data name="ListMonsters.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 344</value>
</data>
<data name="ListMonsters.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;ListMonsters.Name" xml:space="preserve">
<value>ListMonsters</value>
</data>
<data name="&gt;&gt;ListMonsters.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;ListMonsters.Parent" xml:space="preserve">
<value>GrpMonsterList</value>
</data>
<data name="&gt;&gt;ListMonsters.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="TxtMonsterFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="TxtMonsterFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="TxtMonsterFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 23</value>
</data>
<data name="TxtMonsterFilter.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.Name" xml:space="preserve">
<value>TxtMonsterFilter</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.Parent" xml:space="preserve">
<value>GrpMonsterList</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="TxtItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="TxtItemFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="TxtItemFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 23</value>
</data>
<data name="TxtItemFilter.TabIndex" type="System.Int32, mscorlib">
<value>21</value>
</data>
<data name="&gt;&gt;TxtItemFilter.Name" xml:space="preserve">
<value>TxtItemFilter</value>
</data>
<data name="&gt;&gt;TxtItemFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtItemFilter.Parent" xml:space="preserve">
<value>GrpItemList</value>
</data>
<data name="&gt;&gt;TxtItemFilter.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="ListDropData.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ListDropData.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="ListDropData.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="ListDropData.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 174</value>
</data>
<data name="ListDropData.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;ListDropData.Name" xml:space="preserve">
<value>ListDropData</value>
</data>
<data name="&gt;&gt;ListDropData.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;ListDropData.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;ListDropData.ZOrder" xml:space="preserve">
<value>16</value>
</data>
<data name="GrpDropList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="BtnCopyAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnCopyAll.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 202</value>
</data>
<data name="BtnCopyAll.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnCopyAll.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="BtnCopyAll.Text" xml:space="preserve">
<value>复制全部</value>
</data>
<data name="&gt;&gt;BtnCopyAll.Name" xml:space="preserve">
<value>BtnCopyAll</value>
</data>
<data name="&gt;&gt;BtnCopyAll.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;BtnCopyAll.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnCopyAll.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="BtnClear.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnClear.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 230</value>
</data>
<data name="BtnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnClear.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>× 清空</value>
</data>
<data name="&gt;&gt;BtnClear.Name" xml:space="preserve">
<value>BtnClear</value>
</data>
<data name="&gt;&gt;BtnClear.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;BtnClear.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnClear.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="BtnPaste.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnPaste.Location" type="System.Drawing.Point, System.Drawing">
<value>193, 202</value>
</data>
<data name="BtnPaste.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnPaste.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="BtnPaste.Text" xml:space="preserve">
<value>粘贴</value>
</data>
<data name="&gt;&gt;BtnPaste.Name" xml:space="preserve">
<value>BtnPaste</value>
</data>
<data name="&gt;&gt;BtnPaste.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;BtnPaste.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnPaste.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 202</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>复制</value>
</data>
<data name="&gt;&gt;BtnCopy.Name" xml:space="preserve">
<value>BtnCopy</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;BtnCopy.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnCopy.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="TxtItem.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="TxtItem.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 280</value>
</data>
<data name="TxtItem.Size" type="System.Drawing.Size, System.Drawing">
<value>137, 23</value>
</data>
<data name="TxtItem.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;TxtItem.Name" xml:space="preserve">
<value>TxtItem</value>
</data>
<data name="&gt;&gt;TxtItem.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtItem.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;TxtItem.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnDelete.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 230</value>
</data>
<data name="BtnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnDelete.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 删除</value>
</data>
<data name="&gt;&gt;BtnDelete.Name" xml:space="preserve">
<value>BtnDelete</value>
</data>
<data name="&gt;&gt;BtnDelete.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;BtnDelete.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnDelete.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="BtnAddOrUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>54, 371</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 23</value>
</data>
<data name="BtnAddOrUpdate.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve">
<value>BtnAddOrUpdate</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.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;BtnAddOrUpdate.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="LblItemLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblItemLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblItemLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 283</value>
</data>
<data name="LblItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LblItemLabel.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="LblItemLabel.Text" xml:space="preserve">
<value>掉落物:</value>
</data>
<data name="&gt;&gt;LblItemLabel.Name" xml:space="preserve">
<value>LblItemLabel</value>
</data>
<data name="&gt;&gt;LblItemLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblItemLabel.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblItemLabel.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="LblTilde2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblTilde2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblTilde2.Location" type="System.Drawing.Point, System.Drawing">
<value>167, 342</value>
</data>
<data name="LblTilde2.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
</data>
<data name="LblTilde2.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="LblTilde2.Text" xml:space="preserve">
<value>~</value>
</data>
<data name="&gt;&gt;LblTilde2.Name" xml:space="preserve">
<value>LblTilde2</value>
</data>
<data name="&gt;&gt;LblTilde2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTilde2.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblTilde2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="LblTilde1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblTilde1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblTilde1.Location" type="System.Drawing.Point, System.Drawing">
<value>167, 313</value>
</data>
<data name="LblTilde1.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
</data>
<data name="LblTilde1.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="LblTilde1.Text" xml:space="preserve">
<value>~</value>
</data>
<data name="&gt;&gt;LblTilde1.Name" xml:space="preserve">
<value>LblTilde1</value>
</data>
<data name="&gt;&gt;LblTilde1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTilde1.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblTilde1.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="NUDMaxWeight.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMaxWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>190, 340</value>
</data>
<data name="NUDMaxWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMaxWeight.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.Name" xml:space="preserve">
<value>NUDMaxWeight</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="NUDMinWeight.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMinWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 342</value>
</data>
<data name="NUDMinWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMinWeight.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="&gt;&gt;NUDMinWeight.Name" xml:space="preserve">
<value>NUDMinWeight</value>
</data>
<data name="&gt;&gt;NUDMinWeight.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMinWeight.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMinWeight.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="NUDMaxCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMaxCount.Location" type="System.Drawing.Point, System.Drawing">
<value>190, 311</value>
</data>
<data name="NUDMaxCount.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMaxCount.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;NUDMaxCount.Name" xml:space="preserve">
<value>NUDMaxCount</value>
</data>
<data name="&gt;&gt;NUDMaxCount.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMaxCount.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMaxCount.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="NUDMinCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMinCount.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 311</value>
</data>
<data name="NUDMinCount.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMinCount.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="&gt;&gt;NUDMinCount.Name" xml:space="preserve">
<value>NUDMinCount</value>
</data>
<data name="&gt;&gt;NUDMinCount.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMinCount.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMinCount.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="LblWeightLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblWeightLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblWeightLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 344</value>
</data>
<data name="LblWeightLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblWeightLabel.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="LblWeightLabel.Text" xml:space="preserve">
<value>权重:</value>
</data>
<data name="&gt;&gt;LblWeightLabel.Name" xml:space="preserve">
<value>LblWeightLabel</value>
</data>
<data name="&gt;&gt;LblWeightLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblWeightLabel.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblWeightLabel.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="LblCountLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblCountLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblCountLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 313</value>
</data>
<data name="LblCountLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblCountLabel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="LblCountLabel.Text" xml:space="preserve">
<value>数量:</value>
</data>
<data name="&gt;&gt;LblCountLabel.Name" xml:space="preserve">
<value>LblCountLabel</value>
</data>
<data name="&gt;&gt;LblCountLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblCountLabel.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblCountLabel.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="GrpDropList.Location" type="System.Drawing.Point, System.Drawing">
<value>270, 41</value>
</data>
<data name="GrpDropList.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 400</value>
</data>
<data name="GrpDropList.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="GrpDropList.Text" xml:space="preserve">
<value>掉落列表</value>
</data>
<data name="&gt;&gt;GrpDropList.Name" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;GrpDropList.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="&gt;&gt;GrpDropList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpDropList.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="ListItems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ListItems.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="ListItems.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 51</value>
</data>
<data name="ListItems.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 344</value>
</data>
<data name="ListItems.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="&gt;&gt;ListItems.Name" xml:space="preserve">
<value>ListItems</value>
</data>
<data name="&gt;&gt;ListItems.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;ListItems.Parent" xml:space="preserve">
<value>GrpItemList</value>
</data>
<data name="&gt;&gt;ListItems.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpMonsterList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left</value>
</data>
<data name="GrpMonsterList.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="GrpMonsterList.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 400</value>
</data>
<data name="GrpMonsterList.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="GrpMonsterList.Text" xml:space="preserve">
<value>怪物列表</value>
</data>
<data name="&gt;&gt;GrpMonsterList.Name" xml:space="preserve">
<value>GrpMonsterList</value>
</data>
<data name="&gt;&gt;GrpMonsterList.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="&gt;&gt;GrpMonsterList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpMonsterList.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpItemList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="GrpItemList.Location" type="System.Drawing.Point, System.Drawing">
<value>576, 41</value>
</data>
<data name="GrpItemList.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 400</value>
</data>
<data name="GrpItemList.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="GrpItemList.Text" xml:space="preserve">
<value>物品列表</value>
</data>
<data name="&gt;&gt;GrpItemList.Name" xml:space="preserve">
<value>GrpItemList</value>
</data>
<data name="&gt;&gt;GrpItemList.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="&gt;&gt;GrpItemList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpItemList.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>839, 450</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>微软雅黑, 9pt</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>855, 489</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Drop.json Editor</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormDropEditor</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>
</root>

View File

@@ -0,0 +1,193 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblDropPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 17</value>
</data>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json Путь:</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Нагрузка</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>Сохранять</value>
</data>
<data name="GrpDropList.Text" xml:space="preserve">
<value>Drop list</value>
</data>
<data name="BtnCopyAll.Location" type="System.Drawing.Point, System.Drawing">
<value>94, 202</value>
</data>
<data name="BtnCopyAll.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 23</value>
</data>
<data name="BtnCopyAll.Text" xml:space="preserve">
<value>Скопировать все</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>× Очистить</value>
</data>
<data name="BtnPaste.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 202</value>
</data>
<data name="BtnPaste.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="BtnPaste.Text" xml:space="preserve">
<value>Вставить</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>Копировать</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Добавить или обновить</value>
</data>
<data name="LblItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblItemLabel.Text" xml:space="preserve">
<value>предмет:</value>
</data>
<data name="LblWeightLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 17</value>
</data>
<data name="LblWeightLabel.Text" xml:space="preserve">
<value>Веса:</value>
</data>
<data name="LblCountLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 17</value>
</data>
<data name="LblCountLabel.Text" xml:space="preserve">
<value>Считать:</value>
</data>
<data name="GrpMonsterList.Text" xml:space="preserve">
<value>Список монстров</value>
</data>
<data name="GrpItemList.Text" xml:space="preserve">
<value>Список предметов</value>
</data>
</root>

View File

@@ -0,0 +1,144 @@
<?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>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json 路徑:</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加載</value>
</data>
<data name="BtnCopyAll.Text" xml:space="preserve">
<value>複製全部</value>
</data>
<data name="BtnPaste.Text" xml:space="preserve">
<value>粘貼</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>複製</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="LblWeightLabel.Text" xml:space="preserve">
<value>權重:</value>
</data>
<data name="LblCountLabel.Text" xml:space="preserve">
<value>數量:</value>
</data>
</root>

View File

@@ -189,7 +189,7 @@ namespace GrasscutterTools.Forms
else
{
var item = list.Items[i] as string;
var id = int.Parse(item.Substring(0, item.IndexOf(':')));
var id = ItemMap.ToId(item);
list.SetItemChecked(i, Array.IndexOf(checkedIds, id) != -1);
}
}
@@ -217,7 +217,7 @@ namespace GrasscutterTools.Forms
{
StringBuilder builder = new StringBuilder();
foreach (string item in list.CheckedItems)
builder.Append(item.Substring(0, item.IndexOf(':')))
builder.Append(ItemMap.ToId(item))
.Append(", ");
txt.Text = builder.ToString(0, builder.Length - 2);
}

File diff suppressed because it is too large Load Diff

View File

@@ -29,6 +29,7 @@ using System.Windows.Forms;
using GrasscutterTools.DispatchServer;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Mail;
using GrasscutterTools.GOOD;
using GrasscutterTools.OpenCommand;
using GrasscutterTools.Properties;
@@ -61,10 +62,9 @@ namespace GrasscutterTools.Forms
private void FormMain_Load(object sender, EventArgs e)
{
#if DEBUG
Text += " - by jie65535 - v" + AppVersion.ToString(3) + "-debug";
#else
Text += " - by jie65535 - v" + AppVersion.ToString(3);
#if DEBUG
Text += "-debug";
#endif
GameData.LoadResources();
@@ -79,6 +79,7 @@ namespace GrasscutterTools.Forms
InitStatList();
InitPermList();
InitQuestList();
InitMailPage();
ChangeTPArtifact();
}
@@ -123,6 +124,9 @@ namespace GrasscutterTools.Forms
// 初始化开放命令
InitOpenCommand();
// 初始化邮件列表
InitMailList();
}
catch (Exception ex)
{
@@ -137,11 +141,18 @@ namespace GrasscutterTools.Forms
{
try
{
Settings.Default.AutoCopy = ChkAutoCopy.Checked;
Settings.Default.AutoCopy = ChkAutoCopy.Checked;
// 保存自定义命令
SaveCustomCommands();
SaveGiveItemRecord();
SaveSpawnRecord();
// 保存开放命令设置
SaveOpenCommand();
// 保存邮件设置
SaveMailSettings();
// 保存默认设置
Settings.Default.Save();
}
catch (Exception ex)
@@ -181,11 +192,6 @@ namespace GrasscutterTools.Forms
/// </summary>
private CommandVersion CommandVersion;
/// <summary>
/// 卡池编辑器窗口实例
/// </summary>
private Form GachaBannerEditor;
/// <summary>
/// 初始化首页设置
/// </summary>
@@ -223,6 +229,17 @@ namespace GrasscutterTools.Forms
CmbLanguage.SelectedIndexChanged += CmbLanguage_SelectedIndexChanged;
}
private static void ToTop(Form form)
{
form.TopMost = true;
form.TopMost = false;
}
/// <summary>
/// 卡池编辑器窗口实例
/// </summary>
private Form GachaBannerEditor;
/// <summary>
/// 点击打开卡池编辑器时触发
/// </summary>
@@ -235,8 +252,7 @@ namespace GrasscutterTools.Forms
}
else
{
GachaBannerEditor.TopMost = true;
GachaBannerEditor.TopMost = false;
ToTop(GachaBannerEditor);
}
}
@@ -254,8 +270,28 @@ namespace GrasscutterTools.Forms
}
else
{
TextMapBrowser.TopMost = true;
TextMapBrowser.TopMost = false;
ToTop(TextMapBrowser);
}
}
/// <summary>
/// 掉落物编辑器窗口实例
/// </summary>
private FormDropEditor DropEditor;
/// <summary>
/// 点击打开掉落物编辑器时触发
/// </summary>
private void BtnOpenDropEditor_Click(object sender, EventArgs e)
{
if (DropEditor == null || DropEditor.IsDisposed)
{
DropEditor = new FormDropEditor();
DropEditor.Show();
}
else
{
ToTop(DropEditor);
}
}
@@ -408,14 +444,14 @@ namespace GrasscutterTools.Forms
{
lnk.Tag = command;
CustomCommandsChanged = true;
await ButtonComplete(BtnSaveCustomCommand);
await UIUtil.ButtonComplete(BtnSaveCustomCommand);
return;
}
}
CustomCommandsChanged = true;
AddCustomCommand(name, command);
await ButtonComplete(BtnSaveCustomCommand);
await UIUtil.ButtonComplete(BtnSaveCustomCommand);
}
/// <summary>
@@ -455,7 +491,7 @@ namespace GrasscutterTools.Forms
CustomCommandsChanged = true;
//TxtCustomName.Text = "";
//TxtCommand.Text = "";
await ButtonComplete(BtnRemoveCustomCommand);
await UIUtil.ButtonComplete(BtnRemoveCustomCommand);
return;
}
}
@@ -664,15 +700,15 @@ namespace GrasscutterTools.Forms
else
{
var t = CmbMainAttribution.SelectedItem as string;
var mainAttr = t.Substring(0, t.IndexOf(':')).Trim();
var mainAttr = ItemMap.ToId(t);
var subAttrs = "";
if (ListSubAttributionChecked.Items.Count > 0)
{
var subAttrDir = new Dictionary<string, int>(ListSubAttributionChecked.Items.Count);
var subAttrDir = new Dictionary<int, int>(ListSubAttributionChecked.Items.Count);
foreach (string item in ListSubAttributionChecked.Items)
{
var subId = item.Substring(0, item.IndexOf(':')).Trim();
var subId = ItemMap.ToId(item);
var times = int.Parse(item.Substring(item.LastIndexOf('x') + 1));
if (subAttrDir.ContainsKey(subId))
subAttrDir[subId] += times;
@@ -756,11 +792,7 @@ namespace GrasscutterTools.Forms
/// </summary>
private void TxtWeaponFilter_TextChanged(object sender, EventArgs e)
{
var filter = TxtWeaponFilter.Text.Trim();
ListWeapons.BeginUpdate();
ListWeapons.Items.Clear();
ListWeapons.Items.AddRange(GameData.Weapons.Lines.Where(n => n.Contains(filter)).ToArray());
ListWeapons.EndUpdate();
UIUtil.ListBoxFilter(ListWeapons, GameData.Weapons.Lines, TxtWeaponFilter.Text);
}
/// <summary>
@@ -771,7 +803,7 @@ namespace GrasscutterTools.Forms
var name = ListWeapons.SelectedItem as string;
if (!string.IsNullOrEmpty(name))
{
var id = name.Substring(0, name.IndexOf(':')).Trim();
var id = ItemMap.ToId(name);
if (Check(CommandVersion.V1_2_2))
SetCommand("/give", $"{id} x{NUDWeaponAmout.Value} lv{NUDWeaponLevel.Value} r{NUDWeaponRefinement.Value}");
else
@@ -805,11 +837,7 @@ namespace GrasscutterTools.Forms
/// </summary>
private void TxtGameItemFilter_TextChanged(object sender, EventArgs e)
{
var filter = TxtGameItemFilter.Text.Trim();
ListGameItems.BeginUpdate();
ListGameItems.Items.Clear();
ListGameItems.Items.AddRange(GameData.Items.Lines.Where(n => n.Contains(filter)).ToArray());
ListGameItems.EndUpdate();
UIUtil.ListBoxFilter(ListGameItems, GameData.Items.Lines, TxtGameItemFilter.Text);
}
/// <summary>
@@ -821,7 +849,7 @@ namespace GrasscutterTools.Forms
var name = ListGameItems.SelectedItem as string;
if (!string.IsNullOrEmpty(name))
{
var id = name.Substring(0, name.IndexOf(':')).Trim();
var id = ItemMap.ToId(name);
if (ChkDrop.Checked)
{
@@ -911,6 +939,7 @@ namespace GrasscutterTools.Forms
var cmd = new GameCommand($"{ListGameItems.SelectedItem} x{NUDGameItemAmout.Value}", TxtCommand.Text);
GiveItemCommands.Add(cmd);
ListGiveItemLogs.Items.Add(cmd.Name);
SaveGiveItemRecord();
}
}
@@ -923,6 +952,7 @@ namespace GrasscutterTools.Forms
{
GiveItemCommands.RemoveAt(ListGiveItemLogs.SelectedIndex);
ListGiveItemLogs.Items.RemoveAt(ListGiveItemLogs.SelectedIndex);
SaveGiveItemRecord();
}
}
@@ -935,6 +965,7 @@ namespace GrasscutterTools.Forms
{
GiveItemCommands.Clear();
ListGiveItemLogs.Items.Clear();
SaveGiveItemRecord();
}
}
@@ -986,16 +1017,21 @@ namespace GrasscutterTools.Forms
private void AvatarInputChanged()
{
if (CmbAvatar.SelectedIndex >= 0)
GenAvatar((int)NUDAvatarLevel.Value, (int)NUDAvatarConstellation.Value);
GenAvatar((int)NUDAvatarLevel.Value, (int)NUDAvatarConstellation.Value, (int)NUDAvatarSkillLevel.Value);
}
/// <summary>
/// 获取角色命令
/// </summary>
/// <param name="level">等级</param>
private void GenAvatar(int level, int constellation)
private void GenAvatar(int level, int constellation, int skillLevel)
{
if (Check(CommandVersion.V1_2_2))
if (Check(CommandVersion.V1_4_1))
{
int avatarId = GameData.Avatars.Ids[CmbAvatar.SelectedIndex];
SetCommand("/give", $"{avatarId} lv{level} c{constellation} sl{skillLevel}");
}
else if (Check(CommandVersion.V1_2_2))
{
int avatarId = GameData.Avatars.Ids[CmbAvatar.SelectedIndex];
SetCommand("/give", $"{avatarId} lv{level} c{constellation}");
@@ -1016,7 +1052,76 @@ namespace GrasscutterTools.Forms
{
var level = NUDAvatarLevel.Value;
var constellation = NUDAvatarConstellation.Value;
SetCommand("/give avatars", $"lv{level} c{constellation}");
var skillLevel = NUDAvatarSkillLevel.Value;
if (Check(CommandVersion.V1_4_1))
SetCommand("/give avatars", $"lv{level} c{constellation} sl{skillLevel}");
else
SetCommand("/give avatars", $"lv{level} c{constellation}");
}
/// <summary>
/// 初始化数据列表
/// </summary>
private void InitStatList()
{
LblStatTip.Text = "";
SetStatsCommand.InitStats();
CmbStat.Items.Clear();
CmbStat.Items.AddRange(SetStatsCommand.Stats.Select(s => s.Name).ToArray());
}
/// <summary>
/// 数据页面输入改变时触发
/// </summary>
private void SetStatsInputChanged(object sender, EventArgs e)
{
if (CmbStat.SelectedIndex < 0)
return;
else
BtnLockStat.Enabled = BtnUnlockStat.Enabled = true;
var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex];
LblStatPercent.Visible = stat.Percent;
LblStatTip.Text = stat.Tip;
SetCommand("/setstats", $"{stat.ArgName} {NUDStat.Value}{(stat.Percent ? "%" : "")}");
}
/// <summary>
/// 点击锁定按钮时触发
/// </summary>
private void BtnLockStat_Click(object sender, EventArgs e)
{
var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex];
SetCommand("/setstats", $"lock {stat.ArgName} {NUDStat.Value}{(stat.Percent ? "%" : "")}");
}
/// <summary>
/// 点击解锁按钮时触发
/// </summary>
private void BtnUnlockStat_Click(object sender, EventArgs e)
{
var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex];
SetCommand("/setstats", $"unlock {stat.ArgName}");
}
/// <summary>
/// 点击设置技能按钮时触发
/// </summary>
private void LnkSetTalentClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetCommand("/talent", $"{(sender as LinkLabel).Tag} {NUDTalentLevel.Value}");
}
/// <summary>
/// 设置命座链接标签点击时触发
/// </summary>
private void LnkSetConst_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (NUDSetConstellation.Value >= 0)
SetCommand("/setConst", $"{NUDSetConstellation.Value}" + (sender == LnkSetAllConst ? " all" : string.Empty));
else
SetCommand("/resetConst", (sender == LnkSetAllConst ? "all" : string.Empty));
}
#endregion - Avatars -
@@ -1054,13 +1159,9 @@ namespace GrasscutterTools.Forms
/// </summary>
private void TxtEntityFilter_TextChanged(object sender, EventArgs e)
{
var filter = TxtEntityFilter.Text.Trim();
var rb = RbEntityAnimal.Checked ? RbEntityAnimal : RbEntityMonster;
var data = rb.Tag as string[];
ListEntity.BeginUpdate();
ListEntity.Items.Clear();
ListEntity.Items.AddRange(data.Where(n => n.Contains(filter)).ToArray());
ListEntity.EndUpdate();
UIUtil.ListBoxFilter(ListEntity, data, TxtEntityFilter.Text);
}
/// <summary>
@@ -1072,7 +1173,7 @@ namespace GrasscutterTools.Forms
var selectedItem = ListEntity.SelectedItem as string;
if (!string.IsNullOrEmpty(selectedItem))
{
var id = selectedItem.Substring(0, selectedItem.IndexOf(':')).Trim();
var id = ItemMap.ToId(selectedItem);
if (Check(CommandVersion.V1_3_1))
SetCommand("/spawn", $"{id} x{NUDEntityAmout.Value} lv{NUDEntityLevel.Value}" + (ChkInfiniteHP.Checked ? " hp0" : ""));
else
@@ -1160,6 +1261,7 @@ namespace GrasscutterTools.Forms
var cmd = new GameCommand($"{ListEntity.SelectedItem} Lv{NUDEntityLevel.Value} x{NUDEntityAmout.Value}", TxtCommand.Text);
SpawnCommands.Add(cmd);
ListSpawnLogs.Items.Add(cmd.Name);
SaveSpawnRecord();
}
}
@@ -1172,6 +1274,7 @@ namespace GrasscutterTools.Forms
{
SpawnCommands.RemoveAt(ListSpawnLogs.SelectedIndex);
ListSpawnLogs.Items.RemoveAt(ListSpawnLogs.SelectedIndex);
SaveSpawnRecord();
}
}
@@ -1184,6 +1287,7 @@ namespace GrasscutterTools.Forms
{
SpawnCommands.Clear();
ListSpawnLogs.Items.Clear();
SaveSpawnRecord();
}
}
@@ -1210,11 +1314,7 @@ namespace GrasscutterTools.Forms
/// </summary>
private void TxtSceneFilter_TextChanged(object sender, EventArgs e)
{
var filter = TxtSceneFilter.Text.Trim();
ListScenes.BeginUpdate();
ListScenes.Items.Clear();
ListScenes.Items.AddRange(GameData.Scenes.Lines.Where(n => n.Contains(filter)).ToArray());
ListScenes.EndUpdate();
UIUtil.ListBoxFilter(ListScenes, GameData.Scenes.Lines, TxtSceneFilter.Text);
}
/// <summary>
@@ -1231,7 +1331,7 @@ namespace GrasscutterTools.Forms
// 可以直接弃用 scene 命令
var name = ListScenes.SelectedItem as string;
var id = name.Substring(0, name.IndexOf(':')).Trim();
var id = ItemMap.ToId(name);
if (Check(CommandVersion.V1_2_2))
{
SetCommand("/scene", id.ToString());
@@ -1273,64 +1373,6 @@ namespace GrasscutterTools.Forms
#endregion - Scenes -
#region - Stats -
/// <summary>
/// 初始化数据列表
/// </summary>
private void InitStatList()
{
LblStatTip.Text = "";
SetStatsCommand.InitStats();
CmbStat.Items.Clear();
CmbStat.Items.AddRange(SetStatsCommand.Stats.Select(s => s.Name).ToArray());
}
/// <summary>
/// 数据页面输入改变时触发
/// </summary>
private void SetStatsInputChanged(object sender, EventArgs e)
{
if (CmbStat.SelectedIndex < 0)
return;
else
BtnLockStat.Enabled = BtnUnlockStat.Enabled = true;
var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex];
LblStatPercent.Visible = stat.Percent;
LblStatTip.Text = stat.Tip;
SetCommand("/setstats", $"{stat.ArgName} {NUDStat.Value}{(stat.Percent ? "%" : "")}");
}
/// <summary>
/// 点击锁定按钮时触发
/// </summary>
private void BtnLockStat_Click(object sender, EventArgs e)
{
var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex];
SetCommand("/setstats", $"lock {stat.ArgName} {NUDStat.Value}{(stat.Percent ? "%" : "")}");
}
/// <summary>
/// 点击解锁按钮时触发
/// </summary>
private void BtnUnlockStat_Click(object sender, EventArgs e)
{
var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex];
SetCommand("/setstats", $"unlock {stat.ArgName}");
}
/// <summary>
/// 点击设置技能按钮时触发
/// </summary>
private void LnkSetTalentClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
SetCommand("/talent", $"{(sender as LinkLabel).Tag} {NUDTalentLevel.Value}");
}
#endregion - Stats -
#region - Management -
/// <summary>
@@ -1403,6 +1445,253 @@ namespace GrasscutterTools.Forms
#endregion - Management -
#region - Mail -
/// <summary>
/// 初始化邮件页面
/// </summary>
private void InitMailPage()
{
TxtMailSender.Text = Settings.Default.DefaultMailSender;
LoadMailSelectableItems();
}
/// <summary>
/// 保存邮件设置
/// </summary>
private void SaveMailSettings()
{
Settings.Default.DefaultMailSender = TxtMailSender.Text;
}
/// <summary>
/// 点击清空邮件内容时触发
/// </summary>
private void LblClearMailContent_Click(object sender, EventArgs e)
{
TxtMailContent.Clear();
}
/// <summary>
/// 点击发送邮件时触发
/// </summary>
private void BtnSendMail_Click(object sender, EventArgs e)
{
var mail = new Mail
{
Title = TxtMailTitle.Text.Trim(),
Sender = TxtMailSender.Text.Trim(),
Content = TxtMailContent.Text.Trim(),
Recipient = RbMailSendToAll.Checked ? 0 : (int)NUDMailRecipient.Value,
ItemList = new List<MailItem>(MailItems),
SendTime = DateTime.Now,
};
if (mail.Title == "" || mail.Sender == "" || mail.Content == "")
{
MessageBox.Show(Resources.EmptyInputTip, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
var cmd = $"/sendMail {(mail.SendToAll ? "all" : mail.Recipient.ToString())} |" +
$"/sendMail {mail.Title} |" +
$"/sendMail {mail.Content.Replace("\r", "\\r").Replace("\n", "\\n")} |" +
$"/sendMail {mail.Sender} |";
foreach (var item in mail.ItemList)
cmd += $"/sendMail {item.ItemId} {item.ItemCount} {item.ItemLevel} |";
cmd += "/sendMail finish";
SetCommand(cmd);
AddMailToList(mail);
}
/// <summary>
/// 展示邮件
/// </summary>
/// <param name="mail"></param>
private void ShowMail(Mail mail)
{
TxtMailTitle.Text = mail.Title;
TxtMailSender.Text = mail.Sender;
TxtMailContent.Text = mail.Content;
NUDMailRecipient.Value = mail.Recipient;
RbMailSendToAll.Checked = mail.SendToAll;
RbMailSendToPlayer.Checked = !mail.SendToAll;
ShowMailItems(mail.ItemList);
}
#region -- Mail items --
/// <summary>
/// 当前邮件附件列表
/// </summary>
private readonly List<MailItem> MailItems = new List<MailItem>();
/// <summary>
/// 展示邮件附件列表
/// </summary>
/// <param name="items"></param>
private void ShowMailItems(List<MailItem> items)
{
MailItems.Clear();
MailItems.AddRange(items);
ListMailItems.BeginUpdate();
ListMailItems.Items.Clear();
ListMailItems.Items.AddRange(items.Select(it => it.ToString()).ToArray());
ListMailItems.EndUpdate();
}
/// <summary>
/// 点击添加邮件附件项时触发
/// </summary>
private void BtnAddMailItem_Click(object sender, EventArgs e)
{
if (ListMailSelectableItems.SelectedIndex == -1)
return;
var item = ListMailSelectableItems.SelectedItem as string;
var itemId = ItemMap.ToId(item);
var mailItem = new MailItem
{
ItemId = itemId,
ItemCount = (int)NUDMailItemCount.Value,
ItemLevel = (int)NUDMailItemLevel.Value,
};
MailItems.Add(mailItem);
ListMailItems.Items.Add(mailItem.ToString());
}
/// <summary>
/// 点击删除邮件附件项时触发
/// </summary>
private void BtnDeleteMailItem_Click(object sender, EventArgs e)
{
if (ListMailItems.SelectedIndex == -1) return;
MailItems.RemoveAt(ListMailItems.SelectedIndex);
ListMailItems.Items.RemoveAt(ListMailItems.SelectedIndex);
}
#endregion
#region -- Mail item selectable list --
private string[] MailSelectableItems;
/// <summary>
/// 加载附件可选项列表
/// </summary>
private void LoadMailSelectableItems()
{
MailSelectableItems = new string[GameData.Items.Count + GameData.Weapons.Count + GameData.Artifacts.Count];
int i = 0;
GameData.Items.Lines.CopyTo(MailSelectableItems, i); i += GameData.Items.Count;
GameData.Weapons.Lines.CopyTo(MailSelectableItems, i); i += GameData.Weapons.Count;
GameData.Artifacts.Lines.CopyTo(MailSelectableItems, i); i += GameData.Artifacts.Count;
Array.Sort(MailSelectableItems, (a, b) => ItemMap.ToId(a) - ItemMap.ToId(b));
ListMailSelectableItems.Items.Clear();
ListMailSelectableItems.Items.AddRange(MailSelectableItems);
}
/// <summary>
/// 邮件页面物品列表过滤器文本改变时触发
/// </summary>
private void TxtMailSelectableItemFilter_TextChanged(object sender, EventArgs e)
{
UIUtil.ListBoxFilter(ListMailSelectableItems, MailSelectableItems, TxtMailSelectableItemFilter.Text);
}
#endregion
#region -- Mail list --
/// <summary>
/// 获取物品记录文件路径
/// </summary>
private readonly string MailListPath = Path.Combine(Application.LocalUserAppDataPath, "MailList.json");
/// <summary>
/// 邮件列表
/// </summary>
private List<Mail> MailList = new List<Mail>();
/// <summary>
/// 初始化邮件列表
/// </summary>
private void InitMailList()
{
if (File.Exists(MailListPath))
{
MailList = JsonConvert.DeserializeObject<List<Mail>>(File.ReadAllText(MailListPath));
ListMailList.Items.AddRange(MailList.Select(it => it.ToString()).ToArray());
}
else
{
MailList = new List<Mail>();
}
}
/// <summary>
/// 保存邮件列表
/// </summary>
private void SaveMailList()
{
File.WriteAllText(MailListPath, JsonConvert.SerializeObject(MailList));
}
/// <summary>
/// 添加邮件到列表
/// </summary>
/// <param name="mail">邮件</param>
private void AddMailToList(Mail mail)
{
MailList.Add(mail);
ListMailList.Items.Add(mail.ToString());
SaveMailList();
}
/// <summary>
/// 邮件列表选中项改变时发生
/// </summary>
private void ListMailList_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListMailList.SelectedIndex == -1) return;
// 显示选中邮件
var mail = MailList[ListMailList.SelectedIndex];
ShowMail(mail);
}
/// <summary>
/// 点击删除邮件按钮时触发
/// </summary>
private void BtnRemoveMail_Click(object sender, EventArgs e)
{
if (ListMailList.SelectedIndex == -1) return;
MailList.RemoveAt(ListMailList.SelectedIndex);
ListMailList.Items.RemoveAt(ListMailList.SelectedIndex);
SaveMailList();
}
/// <summary>
/// 点击清空邮件列表按钮时触发
/// </summary>
private void BtnClearMail_Click(object sender, EventArgs e)
{
if (MailList.Count == 0) return;
if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
ListMailList.Items.Clear();
MailList.Clear();
SaveMailList();
}
}
#endregion
#endregion
#region - About -
/// <summary>
@@ -1449,7 +1738,7 @@ namespace GrasscutterTools.Forms
private async void BtnCopy_Click(object sender, EventArgs e)
{
CopyCommand();
await ButtonComplete(BtnCopy);
await UIUtil.ButtonComplete(BtnCopy);
}
/// <summary>
@@ -1480,7 +1769,21 @@ namespace GrasscutterTools.Forms
ShowTip(Resources.CommandContentCannotBeEmpty, TxtCommand);
return;
}
await RunCommands(TxtCommand.Text);
if (TxtCommand.Text.IndexOf('|') == -1)
await RunCommands(FormatCommand(TxtCommand.Text));
else
await RunCommands(TxtCommand.Text.Split('|').Select(it => FormatCommand(it)).ToArray());
}
/// <summary>
/// 格式化命令
/// (去除收尾空白,替换换行)
/// </summary>
/// <param name="raw">原始输入</param>
/// <returns>格式化后可执行命令</returns>
private string FormatCommand(string raw)
{
return raw.Trim().Replace("\\r", "\r").Replace("\\n", "\n");
}
/// <summary>
@@ -1510,7 +1813,7 @@ namespace GrasscutterTools.Forms
if (commands.Length > 1)
TxtCommandRunLog.AppendText($" ({++i}/{commands.Length})");
TxtCommandRunLog.AppendText(Environment.NewLine);
var cmd = command.Substring(1);
var cmd = command.TrimStart('/');
try
{
var msg = await OC.Invoke(cmd);
@@ -1584,21 +1887,6 @@ namespace GrasscutterTools.Forms
#region - General -
/// <summary>
/// 播放按钮完成动画
/// </summary>
/// <param name="btn"></param>
/// <returns></returns>
private async Task ButtonComplete(Button btn)
{
var t = btn.Text;
btn.Text = "√";
btn.Enabled = false;
await Task.Delay(300);
btn.Text = t;
btn.Enabled = true;
}
/// <summary>
/// 窗口按键按下时触发
/// </summary>
@@ -1981,7 +2269,16 @@ namespace GrasscutterTools.Forms
if (character.Name != "Traveler")
{
if (GOODData.Avatars.TryGetValue(character.Name, out var character_id))
commands_list.Add("/give " + character_id + " lv" + character.Level + "c" + character.Constellation);
{
if (Check(CommandVersion.V1_4_1))
{
// 取最低的技能等级
var skillLevel = Math.Min(Math.Min(character.Talents.Auto, character.Talents.Skill), character.Talents.Burst);
commands_list.Add($"/give {character_id} lv{character.Level} c{character.Constellation} sl{skillLevel}");
}
else
commands_list.Add($"/give {character_id} lv{character.Level} c{character.Constellation}");
}
else
missingItems.Add(character.Name);
// TODO: Implement command to set talent level when giving character in Grasscutter
@@ -1994,7 +2291,7 @@ namespace GrasscutterTools.Forms
foreach (var weapon in good.Weapons)
{
if (GOODData.Weapons.TryGetValue(weapon.Name, out var weapon_id))
commands_list.Add("/give " + weapon_id + " lv" + weapon.Level + "r" + weapon.RefinementLevel);
commands_list.Add($"/give {weapon_id} lv{weapon.Level} r{weapon.RefinementLevel}");
else
missingItems.Add(weapon.Name);
// TODO: Implement command to give weapon directly to character in Grasscutter
@@ -2011,7 +2308,18 @@ namespace GrasscutterTools.Forms
missingItems.Add(artifact.SetName);
continue;
}
var artifact_id = artifact_set_id.ToString() + artifact.Rarity.ToString() + GOODData.ArtifactSlotMap[artifact.GearSlot] + "4";
var artifact_id = artifact_set_id * 1000 + artifact.Rarity * 100 + GOODData.ArtifactSlotMap[artifact.GearSlot] * 10;
for (int i = 4; i > 0; i--)
{
if (Array.IndexOf(GameData.Artifacts.Ids, artifact_id + i) != -1)
{
artifact_id += i;
break;
}
}
if (artifact_id % 10 == 0)
artifact_id += 4;
var artifact_mainStat_id = GOODData.ArtifactMainAttribution[artifact.MainStat];
var artifact_substats = "";
var artifact_substat_prefix = artifact.Rarity + "0";
@@ -2034,7 +2342,7 @@ namespace GrasscutterTools.Forms
// HACK: Add def+2 substat to counteract Grasscutter automatically adding another substat
if (substat_count == 4)
artifact_substats += "101081 ";
commands_list.Add("/give " + artifact_id + " lv" + artifact.Level + " " + artifact_mainStat_id + " " + artifact_substats);
commands_list.Add($"/give {artifact_id} lv{artifact.Level} {artifact_mainStat_id} {artifact_substats}");
// TODO: Implement command to give artifact directly to character in Grasscutter
}
}
@@ -2119,7 +2427,7 @@ namespace GrasscutterTools.Forms
if (ListQuest.SelectedIndex == -1)
return;
var item = ListQuest.SelectedItem as string;
var id = item.Substring(0, item.IndexOf(':')).Trim();
var id = ItemMap.ToId(item);
SetCommand("/quest", $"{(sender as Button).Tag} {id}");
}

View File

@@ -128,7 +128,7 @@
<value>Auto</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command (Press and hold Ctrl to run automatically)</value>
<value>Command - [Ctrl] Autorun - [|] Split multiple commands</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Run(F5)</value>
@@ -428,7 +428,7 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="LblTp.Text" xml:space="preserve">
<value>Teleporting
Tip: You can quickly teleport through the 'fishing hook' pin on the map in-game.
In the command, you can use ~ to indicate the current position, and ~100 to indicate the relative current 100</value>
In the command, you can use ~ to indicate the current position, and ~N to indicate the relative current N</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Items</value>
@@ -529,8 +529,23 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<data name="NUDWeaponLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>147, 216</value>
</data>
<data name="TPStats.Text" xml:space="preserve">
<value>Stats</value>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>Constellation</value>
</data>
<data name="LnkSetAllConst.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 17</value>
</data>
<data name="LnkSetAllConst.Text" xml:space="preserve">
<value>Set all</value>
</data>
<data name="LnkSetConst.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 17</value>
</data>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>Set current</value>
</data>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>Stats</value>
@@ -547,6 +562,15 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<data name="GrpTalentLevel.Text" xml:space="preserve">
<value>Talent Level</value>
</data>
<data name="LnkTalentAll.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 24</value>
</data>
<data name="LnkTalentAll.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
</data>
<data name="LnkTalentAll.Text" xml:space="preserve">
<value>All</value>
</data>
<data name="LnkTalentE.Location" type="System.Drawing.Point, System.Drawing">
<value>283, 24</value>
</data>
@@ -575,25 +599,22 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<value>NormalATK</value>
</data>
<data name="NUDTalentLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 23</value>
</data>
<data name="LblStatsDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>179, 17</value>
</data>
<data name="LblStatsDescription.Text" xml:space="preserve">
<value>Set current active Avatar data</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Avatar</value>
<value>96, 23</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>Give All Char</value>
</data>
<data name="LblAvatarConstellation.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
<data name="LblAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 17</value>
</data>
<data name="LblAvatarConstellation.Text" xml:space="preserve">
<value>Const.</value>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>Level</value>
</data>
<data name="LblAvatarSkillLevelLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 17</value>
</data>
<data name="LblAvatarSkillLevelLabel.Text" xml:space="preserve">
<value>Skill level</value>
</data>
<data name="LblAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
@@ -601,11 +622,11 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<data name="LblAvatar.Text" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="LblAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 17</value>
<data name="LblAvatarConstellation.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>Level</value>
<data name="LblAvatarConstellation.Text" xml:space="preserve">
<value>Const.</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Spawn</value>
@@ -837,6 +858,12 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<data name="TPHome.Text" xml:space="preserve">
<value>Home</value>
</data>
<data name="BtnOpenDropEditor.Location" type="System.Drawing.Point, System.Drawing">
<value>546, 216</value>
</data>
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
<value>Drop Editor</value>
</data>
<data name="LblAbout.Location" type="System.Drawing.Point, System.Drawing">
<value>74, 38</value>
</data>
@@ -870,4 +897,97 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<data name="ChkIncludeUID.Text" xml:space="preserve">
<value>Include UID</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Mail</value>
</data>
<data name="BtnAddMailItem.Text" xml:space="preserve">
<value>+ Add</value>
</data>
<data name="BtnDeleteMailItem.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>Items</value>
</data>
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 4</value>
</data>
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 4</value>
</data>
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 6</value>
</data>
<data name="LblMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="LblMailItemCount.Text" xml:space="preserve">
<value>Count:</value>
</data>
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>123, 6</value>
</data>
<data name="LblMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 17</value>
</data>
<data name="LblMailItemLevel.Text" xml:space="preserve">
<value>Level:</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>Mailbox</value>
</data>
<data name="BtnClearMail.Location" type="System.Drawing.Point, System.Drawing">
<value>84, 4</value>
</data>
<data name="BtnClearMail.Text" xml:space="preserve">
<value>× Clear</value>
</data>
<data name="BtnRemoveMail.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 4</value>
</data>
<data name="BtnRemoveMail.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="BtnSendMail.Text" xml:space="preserve">
<value>Send</value>
</data>
<data name="LblMailItemsLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 17</value>
</data>
<data name="LblMailItemsLabel.Text" xml:space="preserve">
<value>Items:</value>
</data>
<data name="RbMailSendToPlayer.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 21</value>
</data>
<data name="RbMailSendToPlayer.Text" xml:space="preserve">
<value>Player</value>
</data>
<data name="RbMailSendToAll.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 21</value>
</data>
<data name="RbMailSendToAll.Text" xml:space="preserve">
<value>All</value>
</data>
<data name="LblMailRecipientLabel.Text" xml:space="preserve">
<value>Send to:</value>
</data>
<data name="LblMailContentLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LblMailContentLabel.Text" xml:space="preserve">
<value>Content:</value>
</data>
<data name="LblMailTitleLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 17</value>
</data>
<data name="LblMailTitleLabel.Text" xml:space="preserve">
<value>Title:</value>
</data>
<data name="LblMailSenderLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblMailSenderLabel.Text" xml:space="preserve">
<value>Sender:</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -143,7 +143,7 @@
<value>Авто</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Команда (нажмите и удерживайте Ctrl для автоматического запуска)</value>
<value>Команды - [Ctrl] Автозапуск - [|] Разделить несколько команд</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 23</value>
@@ -276,7 +276,7 @@
</data>
<data name="LblConsoleTip.Text" xml:space="preserve">
<value>Обратите внимание, что обычные команды в состоянии консоли должны указывать цель
(установите "Включить UID")</value>
(установите галочку галочку "Включить UID")</value>
</data>
<data name="TxtHost.Location" type="System.Drawing.Point, System.Drawing">
<value>111, 36</value>
@@ -310,12 +310,12 @@
Это бесплатный проект с открытым исходным кодом.
Если вы считаете, что это полезно для вас,
вы можете дать мне бесплатную звезду.
вы можете дать мне звезду на Github.
Если возникла проблема с генерацией команды или
есть запрос на новую функцию,
вы можете написать в Issues на Github.
Спасибо:Dhar_Jinxed
Спасибо: Dhar_Jinxed
</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
@@ -545,7 +545,7 @@
<data name="LblTp.Text" xml:space="preserve">
<value>Телепортация
Подсказка: вы можете быстро телепортироваться через отметку «рыболовный крючок» на миникарте в игре.
В команде вы можете использовать ~, чтобы указать текущую позицию, и ~100, чтобы указать смещение на 100 относительно текущей позиции</value>
В команде вы можете использовать ~, чтобы указать текущую позицию, и ~N, чтобы указать смещение на N относительно текущей позиции</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Предметы</value>
@@ -563,7 +563,7 @@
<value>80, 23</value>
</data>
<data name="BtnSaveGiveItemLog.Text" xml:space="preserve">
<value>√ Запись</value>
<value>√ Сохр.</value>
</data>
<data name="BtnRemoveGiveItemLog.Location" type="System.Drawing.Point, System.Drawing">
<value>260, 77</value>
@@ -578,7 +578,7 @@
<value>244, 162</value>
</data>
<data name="GrpGiveItemRecord.Text" xml:space="preserve">
<value>Запись</value>
<value>Список предметов</value>
</data>
<data name="ListGiveItemLogs.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 140</value>
@@ -626,7 +626,7 @@
<value>Оружие</value>
</data>
<data name="BtnGiveAllWeapons.Text" xml:space="preserve">
<value>дать все оружие</value>
<value>Дать всё оружие</value>
</data>
<data name="LblWeaponDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 17</value>
@@ -638,10 +638,10 @@
<value>207, 218</value>
</data>
<data name="LblWeaponRefinement.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 17</value>
<value>115, 17</value>
</data>
<data name="LblWeaponRefinement.Text" xml:space="preserve">
<value>Улучшение</value>
<value>Ур. пробуждения</value>
</data>
<data name="LblWeaponAmount.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 17</value>
@@ -659,7 +659,7 @@
<value>Ур.</value>
</data>
<data name="NUDWeaponRefinement.Location" type="System.Drawing.Point, System.Drawing">
<value>288, 216</value>
<value>323, 216</value>
</data>
<data name="NUDWeaponAmout.Location" type="System.Drawing.Point, System.Drawing">
<value>63, 216</value>
@@ -667,8 +667,26 @@
<data name="NUDWeaponLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>151, 216</value>
</data>
<data name="TPStats.Text" xml:space="preserve">
<value>Статы</value>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Персонаж</value>
</data>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>Установить созвездие</value>
</data>
<data name="LnkSetAllConst.Location" type="System.Drawing.Point, System.Drawing">
<value>178, 24</value>
</data>
<data name="LnkSetAllConst.Size" type="System.Drawing.Size, System.Drawing">
<value>28, 17</value>
</data>
<data name="LnkSetAllConst.Text" xml:space="preserve">
<value>все</value>
</data>
<data name="LnkSetConst.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>текущий</value>
</data>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>Статистика</value>
@@ -688,6 +706,15 @@
<data name="GrpTalentLevel.Text" xml:space="preserve">
<value>Уровень таланта</value>
</data>
<data name="LnkTalentAll.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 24</value>
</data>
<data name="LnkTalentAll.Size" type="System.Drawing.Size, System.Drawing">
<value>28, 17</value>
</data>
<data name="LnkTalentAll.Text" xml:space="preserve">
<value>все</value>
</data>
<data name="LnkTalentE.Location" type="System.Drawing.Point, System.Drawing">
<value>309, 24</value>
</data>
@@ -716,28 +743,64 @@
<value>Обычная атака</value>
</data>
<data name="NUDTalentLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 23</value>
<value>94, 23</value>
</data>
<data name="LblStatsDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>316, 17</value>
<data name="GrpGiveAvatar.Text" xml:space="preserve">
<value>Дать Персонаж</value>
</data>
<data name="LblStatsDescription.Text" xml:space="preserve">
<value>Установите текущие активные данные персонажа</value>
<data name="CmbAvatar.Location" type="System.Drawing.Point, System.Drawing">
<value>111, 16</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Персонаж</value>
<data name="CmbAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>114, 25</value>
</data>
<data name="LblAvatarSkillLevelTip.Location" type="System.Drawing.Point, System.Drawing">
<value>160, 129</value>
</data>
<data name="NUDAvatarLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>111, 47</value>
</data>
<data name="NUDAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>114, 23</value>
</data>
<data name="BtnGiveAllChar.Location" type="System.Drawing.Point, System.Drawing">
<value>425, 182</value>
<value>26, 161</value>
</data>
<data name="BtnGiveAllChar.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 33</value>
<value>199, 33</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value> Дать ВСЕХ персонажей</value>
<value> Дать всех персонажей</value>
</data>
<data name="LblAvatarLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 49</value>
</data>
<data name="LblAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>Уровень</value>
</data>
<data name="LblAvatarSkillLevelLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 107</value>
</data>
<data name="LblAvatarSkillLevelLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>155, 17</value>
</data>
<data name="LblAvatarSkillLevelLabel.Text" xml:space="preserve">
<value>Уровень квалификации</value>
</data>
<data name="LblAvatar.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 19</value>
</data>
<data name="LblAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 17</value>
</data>
<data name="LblAvatar.Text" xml:space="preserve">
<value>Персонаж</value>
</data>
<data name="LblAvatarConstellation.Location" type="System.Drawing.Point, System.Drawing">
<value>428, 125</value>
<value>36, 78</value>
</data>
<data name="LblAvatarConstellation.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 17</value>
@@ -746,40 +809,16 @@
<value>Созвездия</value>
</data>
<data name="NUDAvatarConstellation.Location" type="System.Drawing.Point, System.Drawing">
<value>503, 122</value>
<value>111, 76</value>
</data>
<data name="NUDAvatarConstellation.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 23</value>
<value>114, 23</value>
</data>
<data name="LblAvatar.Location" type="System.Drawing.Point, System.Drawing">
<value>428, 31</value>
<data name="NUDAvatarSkillLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>39, 127</value>
</data>
<data name="LblAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 17</value>
</data>
<data name="LblAvatar.Text" xml:space="preserve">
<value>Персонаж</value>
</data>
<data name="LblAvatarLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>428, 78</value>
</data>
<data name="LblAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>Уровень</value>
</data>
<data name="NUDAvatarLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>503, 75</value>
</data>
<data name="NUDAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 23</value>
</data>
<data name="CmbAvatar.Location" type="System.Drawing.Point, System.Drawing">
<value>503, 28</value>
</data>
<data name="CmbAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 25</value>
<data name="NUDAvatarSkillLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>114, 23</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Спавн</value>
@@ -809,7 +848,7 @@
<value>80, 23</value>
</data>
<data name="BtnSaveSpawnLog.Text" xml:space="preserve">
<value>√ Запись</value>
<value>√ Сохр.</value>
</data>
<data name="BtnRemoveSpawnLog.Location" type="System.Drawing.Point, System.Drawing">
<value>266, 62</value>
@@ -824,7 +863,7 @@
<value>240, 184</value>
</data>
<data name="GrpSpawnRecord.Text" xml:space="preserve">
<value>Запись</value>
<value>Список мобов</value>
</data>
<data name="ListSpawnLogs.Size" type="System.Drawing.Size, System.Drawing">
<value>234, 162</value>
@@ -903,8 +942,8 @@
</data>
<data name="LblQuestDescription.Text" xml:space="preserve">
<value>Добавить или завершить задание.
Подсказка: для многих квестов требуется поддержка скриптов на стороне сервера.
Поэтому квест может быть добавлен или закончен, но завершён игроком - вряд ли.</value>
Внимание: для многих квестов требуются скрипты таковых на стороне сервера.
Поэтому квест может быть добавлен или отозван через консоль, но завершён игроком - вряд ли.</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Артефакт</value>
@@ -985,7 +1024,7 @@
<value>Кастомное</value>
</data>
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>526, 216</value>
<value>536, 216</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
@@ -997,16 +1036,16 @@
<value>450, 216</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
<value>80, 23</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>Загрузить</value>
</data>
<data name="LblCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 17</value>
<value>34, 17</value>
</data>
<data name="LblCustomName.Text" xml:space="preserve">
<value>Метка</value>
<value>Имя</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>Список</value>
@@ -1015,10 +1054,10 @@
<value>535, -1</value>
</data>
<data name="LnkResetCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 17</value>
<value>66, 17</value>
</data>
<data name="LnkResetCustomCommands.Text" xml:space="preserve">
<value>Перезагрузить</value>
<value>Сбросить</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>369, 216</value>
@@ -1047,6 +1086,15 @@
<data name="TPHome.Text" xml:space="preserve">
<value>Главная</value>
</data>
<data name="BtnOpenDropEditor.Location" type="System.Drawing.Point, System.Drawing">
<value>459, 216</value>
</data>
<data name="BtnOpenDropEditor.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 23</value>
</data>
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
<value>Редактор перетаскивания</value>
</data>
<data name="LblAbout.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
@@ -1057,7 +1105,7 @@
<value>Желаем приятно провести время!</value>
</data>
<data name="BtnOpenTextMap.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 99</value>
<value>526, 187</value>
</data>
<data name="BtnOpenTextMap.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 23</value>
@@ -1086,4 +1134,154 @@
<data name="ChkIncludeUID.Text" xml:space="preserve">
<value>Включить UID</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Почта</value>
</data>
<data name="BtnAddMailItem.Location" type="System.Drawing.Point, System.Drawing">
<value>304, 155</value>
</data>
<data name="BtnAddMailItem.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnAddMailItem.Text" xml:space="preserve">
<value>+ Добавить</value>
</data>
<data name="BtnDeleteMailItem.Location" type="System.Drawing.Point, System.Drawing">
<value>304, 184</value>
</data>
<data name="BtnDeleteMailItem.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnDeleteMailItem.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>Предметы</value>
</data>
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>172, 3</value>
</data>
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>49, 3</value>
</data>
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 5</value>
</data>
<data name="LblMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 17</value>
</data>
<data name="LblMailItemCount.Text" xml:space="preserve">
<value>Кол-во</value>
</data>
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>114, 6</value>
</data>
<data name="LblMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LblMailItemLevel.Text" xml:space="preserve">
<value>Уровень</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>Почтовый ящик</value>
</data>
<data name="BtnClearMail.Location" type="System.Drawing.Point, System.Drawing">
<value>114, 5</value>
</data>
<data name="BtnClearMail.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnClearMail.Text" xml:space="preserve">
<value>× Очистить</value>
</data>
<data name="BtnRemoveMail.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 5</value>
</data>
<data name="BtnRemoveMail.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnRemoveMail.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="BtnSendMail.Location" type="System.Drawing.Point, System.Drawing">
<value>304, 213</value>
</data>
<data name="BtnSendMail.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 29</value>
</data>
<data name="BtnSendMail.Text" xml:space="preserve">
<value>Отправить</value>
</data>
<data name="ListMailItems.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 155</value>
</data>
<data name="ListMailItems.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 89</value>
</data>
<data name="LblMailItemsLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 17</value>
</data>
<data name="LblMailItemsLabel.Text" xml:space="preserve">
<value>Вложение:</value>
</data>
<data name="RbMailSendToPlayer.Location" type="System.Drawing.Point, System.Drawing">
<value>213, 34</value>
</data>
<data name="RbMailSendToPlayer.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 21</value>
</data>
<data name="RbMailSendToPlayer.Text" xml:space="preserve">
<value>Игрок</value>
</data>
<data name="RbMailSendToAll.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 34</value>
</data>
<data name="RbMailSendToAll.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 21</value>
</data>
<data name="RbMailSendToAll.Text" xml:space="preserve">
<value>Все</value>
</data>
<data name="LblMailRecipientLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 17</value>
</data>
<data name="LblMailRecipientLabel.Text" xml:space="preserve">
<value>Получатель:</value>
</data>
<data name="TxtMailContent.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 93</value>
</data>
<data name="TxtMailContent.Size" type="System.Drawing.Size, System.Drawing">
<value>302, 56</value>
</data>
<data name="LblMailContentLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 17</value>
</data>
<data name="LblMailContentLabel.Text" xml:space="preserve">
<value>Содержание:</value>
</data>
<data name="TxtMailTitle.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 64</value>
</data>
<data name="TxtMailTitle.Size" type="System.Drawing.Size, System.Drawing">
<value>302, 23</value>
</data>
<data name="LblMailTitleLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 17</value>
</data>
<data name="LblMailTitleLabel.Text" xml:space="preserve">
<value>Название:</value>
</data>
<data name="TxtMailSender.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 6</value>
</data>
<data name="TxtMailSender.Size" type="System.Drawing.Size, System.Drawing">
<value>302, 23</value>
</data>
<data name="LblMailSenderLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 17</value>
</data>
<data name="LblMailSenderLabel.Text" xml:space="preserve">
<value>Отправитель:</value>
</data>
</root>

View File

@@ -124,7 +124,7 @@
<value>自動</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令(按住 Ctrl 自動執行</value>
<value>命令 - [Ctrl] 自動執行 - [|] 分割多條命令</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>執行(F5)</value>
@@ -194,6 +194,9 @@
<data name="TPAbout.Text" xml:space="preserve">
<value>關於</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>334, 102</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>割草機工具箱
@@ -246,10 +249,13 @@
提示:大部分場景沒有作用,無法進入。</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>290, 51</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>座標傳送
提示:遊戲內可以通過小地圖的'魚鉤'標記來快捷傳送
命令中可以用~表示當前位置,~100表示相對當前100</value>
命令中可以用~表示當前位置,~N 表示相對當前N</value>
</data>
<data name="BtnSaveGiveItemLog.Text" xml:space="preserve">
<value>√ 記錄</value>
@@ -293,8 +299,14 @@
<data name="LblWeaponLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="TPStats.Text" xml:space="preserve">
<value>數據</value>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>設置命座</value>
</data>
<data name="LnkSetAllConst.Text" xml:space="preserve">
<value>設置所有角色</value>
</data>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>設置當前角色</value>
</data>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>角色屬性</value>
@@ -311,15 +323,15 @@
<data name="LnkTalentNormalATK.Text" xml:space="preserve">
<value>普通攻擊</value>
</data>
<data name="LblStatsDescription.Text" xml:space="preserve">
<value>設置當前活躍角色數據</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>一鍵獲得所有角色</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="LblAvatarSkillLevelLabel.Text" xml:space="preserve">
<value>技能等級</value>
</data>
<data name="ChkInfiniteHP.Text" xml:space="preserve">
<value>無限血</value>
</data>
@@ -418,6 +430,9 @@
<data name="TPHome.Text" xml:space="preserve">
<value>主頁</value>
</data>
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
<value>掉落物編輯器</value>
</data>
<data name="BtnOpenTextMap.Text" xml:space="preserve">
<value>文本瀏覽器</value>
</data>
@@ -427,8 +442,50 @@
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置頂</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>郵件</value>
</data>
<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">
<data name="LblClearMailContent.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnDeleteMailItem.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 4</value>
</data>
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 4</value>
</data>
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>-3, 6</value>
</data>
<data name="LblMailItemCount.Text" xml:space="preserve">
<value>數量:</value>
</data>
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>123, 6</value>
</data>
<data name="LblMailItemLevel.Text" xml:space="preserve">
<value>等級:</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>郵件列表</value>
</data>
<data name="BtnRemoveMail.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="BtnSendMail.Text" xml:space="preserve">
<value>發送</value>
</data>
<data name="LblMailContentLabel.Text" xml:space="preserve">
<value>內容:</value>
</data>
<data name="LblMailTitleLabel.Text" xml:space="preserve">
<value>標題:</value>
</data>
<data name="LblMailSenderLabel.Text" xml:space="preserve">
<value>發件人:</value>
</data>
</root>

View File

@@ -59,8 +59,8 @@ namespace GrasscutterTools.GOOD
public static Dictionary<string, int> ArtifactCats { get; private set; }
public static Dictionary<string, string> ArtifactSlotMap = new Dictionary<string, string> {
{"goblet", "1"}, {"plume", "2"}, {"circlet", "3"}, {"flower", "4"}, {"sands", "5"}
public static Dictionary<string, int> ArtifactSlotMap = new Dictionary<string, int> {
{"goblet", 1}, {"plume", 2}, {"circlet", 3}, {"flower", 4}, {"sands", 5}
};
public static Dictionary<string, int> ArtifactMainAttribution { get; } = new Dictionary<string, int>

View File

@@ -105,12 +105,26 @@ namespace GrasscutterTools.Game
/// </summary>
public static readonly Version V1_3_1 = new Version(1, 3, 1);
/// <summary>
/// 2022/10/13
/// </summary>
public static readonly Version V1_4_0 = new Version(1, 4, 0);
/// <summary>
/// 2022/10/18
/// </summary>
public static readonly Version V1_4_1 = new Version(1, 4, 1);
/// <summary>
/// 2022/10/27
/// </summary>
public static readonly Version V1_4_2 = new Version(1, 4, 2);
// More...
/// <summary>
/// v1.2.3 -> v1.2.4 2022/7/21
/// git hash
/// 2022/10/18
/// </summary>
//public static readonly Version V1_2_4 = new Version(1, 2, 4);
//public static readonly Version V1_4_3 = new Version(1, 4, 2);
public static Version[] List { get; } = new Version[] {
V1_2_1,
@@ -118,7 +132,10 @@ namespace GrasscutterTools.Game
V1_2_3,
V1_3_0,
V1_3_1,
//V1_3_2,
V1_4_0,
V1_4_1,
V1_4_2,
//V1_4_3,
};
#endregion - Version List -

View File

@@ -0,0 +1,59 @@
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Drop
{
public struct DropData
{
/// <summary>
/// 物品ID
/// </summary>
[JsonProperty("itemId")]
public int ItemId { get; set; }
/// <summary>
/// 最小数量
/// </summary>
[JsonProperty("minCount")]
public int MinCount { get; set; }
/// <summary>
/// 最大数量
/// </summary>
[JsonProperty("maxCount")]
public int MaxCount { get; set; }
/// <summary>
/// 最小权重范围0~10000
/// </summary>
[JsonProperty("minWeight")]
public int MinWeight { get; set; }
/// <summary>
/// 最大权重范围0~10000
/// </summary>
[JsonProperty("maxWeight")]
public int MaxWeight { get; set; }
// 以下属性可用但没有必要
///// <summary>
///// 是否共享?
///// </summary>
//[JsonProperty("share")]
//public bool IsShare { get; set; }
///// <summary>
///// 是否直接给予
///// </summary>
//[JsonProperty("give")]
//public bool IsGive { get; set; }
public override string ToString()
{
if (MinCount != MaxCount)
return $"{ItemId}:{GameData.Items[ItemId]} | x[{MinCount}~{MaxCount}] w[{MinWeight}~{MaxWeight}]";
else
return $"{ItemId}:{GameData.Items[ItemId]} | x{MinCount} w[{MinWeight}~{MaxWeight}]";
}
}
}

View File

@@ -0,0 +1,21 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Drop
{
internal class DropInfo
{
/// <summary>
/// 怪物ID
/// </summary>
[JsonProperty("monsterId")]
public int MonsterId { get; set; }
/// <summary>
/// 掉落列表
/// </summary>
[JsonProperty("dropDataList")]
public List<DropData> DropDataList { get; set; } = new List<DropData>();
}
}

View File

@@ -27,7 +27,7 @@ namespace GrasscutterTools.Game
{
var lines = idNamePairs.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
var capacity = lines.Length;
//IdMap = new Dictionary<int, string>(capacity);
IdMap = new Dictionary<int, string>(capacity);
//NameMap = new Dictionary<string, int>(capacity);
var IdList = new List<int>(capacity);
var NameList = new List<string>(capacity);
@@ -41,7 +41,7 @@ namespace GrasscutterTools.Game
var name = line.Substring(si + 1).Trim();
if (!string.IsNullOrEmpty(name) && name != "null")
{
//IdMap[id] = name;
IdMap[id] = name;
//NameMap[name] = id;
IdList.Add(id);
NameList.Add(name);
@@ -55,15 +55,14 @@ namespace GrasscutterTools.Game
Lines = lineList.ToArray();
}
//Dictionary<int, string> IdMap;
//Dictionary<string, int> NameMap;
//List<int> IdList;
//List<string> NameList;
private readonly Dictionary<int, string> IdMap;
//private readonly Dictionary<string, int> NameMap;
public int Count => Ids.Length;
//public string this[int id] => IdMap[id];
public string this[int id] => IdMap.TryGetValue(id, out string name) ? name : EmptyName;
public static string EmptyName = "???";
//public int this[string name] => NameMap[name];
public int[] Ids { get; }
@@ -71,5 +70,7 @@ namespace GrasscutterTools.Game
public string[] Names { get; }
public string[] Lines { get; }
public static int ToId(string line) => int.Parse(line.Substring(0, line.IndexOf(':')).Trim());
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Mail
{
/// <summary>
/// 邮件
/// </summary>
public class Mail
{
/// <summary>
/// 发件人
/// </summary>
public string Sender { get; set; }
/// <summary>
/// 收件人 (0 表示发送给所有人)
/// </summary>
public int Recipient { get; set; }
/// <summary>
/// 是否发送给所有人
/// </summary>
[JsonIgnore]
public bool SendToAll => Recipient == 0;
/// <summary>
/// 邮件标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 邮件内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 附件列表
/// </summary>
public List<MailItem> ItemList { get; set; }
/// <summary>
/// 发送时间
/// </summary>
public DateTime SendTime { get; set; }
public override string ToString()
{
if (SendToAll)
return $"ToAll: [{Title}] {Content} | {SendTime}";
else
return $"To[{Recipient}]: [{Title}] {Content} | {SendTime}";
}
}
}

View File

@@ -0,0 +1,38 @@
namespace GrasscutterTools.Game.Mail
{
/// <summary>
/// 附件
/// </summary>
public struct MailItem
{
/// <summary>
/// 物品ID
/// </summary>
public int ItemId { get; set; }
/// <summary>
/// 物品数量
/// </summary>
public int ItemCount { get; set; }
/// <summary>
/// 物品等级
/// </summary>
public int ItemLevel { get; set; }
public override string ToString()
{
var name = GameData.Items[ItemId];
if (name == ItemMap.EmptyName)
name = GameData.Weapons[ItemId];
if (name == ItemMap.EmptyName)
name = GameData.Artifacts[ItemId];
if (ItemLevel > 1)
return $"{ItemId}:{name} x{ItemCount} lv{ItemLevel}";
else if (ItemCount > 1)
return $"{ItemId}:{name} x{ItemCount}";
else
return $"{ItemId}:{name}";
}
}
}

View File

@@ -90,6 +90,12 @@
</Compile>
<Compile Include="DispatchServer\DispatchServerAPI.cs" />
<Compile Include="DispatchServer\Model\ServerStatus.cs" />
<Compile Include="Forms\FormDropEditor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormDropEditor.Designer.cs">
<DependentUpon>FormDropEditor.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormGachaBannerEditor2.cs">
<SubType>Form</SubType>
</Compile>
@@ -115,12 +121,16 @@
<DependentUpon>FormTextMapBrowser.cs</DependentUpon>
</Compile>
<Compile Include="Game\CommandVersion.cs" />
<Compile Include="Game\Drop\DropData.cs" />
<Compile Include="Game\Drop\DropInfo.cs" />
<Compile Include="Game\Gacha\GachaBanner2.cs" />
<Compile Include="Game\GameCommand.cs" />
<Compile Include="Game\Gacha\BannerType.cs" />
<Compile Include="Game\Gacha\GachaBanner.cs" />
<Compile Include="Game\GameData.cs" />
<Compile Include="Game\ItemMap.cs" />
<Compile Include="Game\Mail\Mail.cs" />
<Compile Include="Game\Mail\MailItem.cs" />
<Compile Include="Game\SetStatsCommand.cs" />
<Compile Include="Game\TextMapData.cs" />
<Compile Include="GOOD\GOOD.cs" />
@@ -140,6 +150,19 @@
<Compile Include="Utils\ArtifactUtils.cs" />
<Compile Include="Utils\HttpHelper.cs" />
<Compile Include="Utils\ReleaseAPI.cs" />
<Compile Include="Utils\UIUtil.cs" />
<EmbeddedResource Include="Forms\FormDropEditor.en-US.resx">
<DependentUpon>FormDropEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormDropEditor.resx">
<DependentUpon>FormDropEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormDropEditor.ru-RU.resx">
<DependentUpon>FormDropEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormDropEditor.zh-TW.resx">
<DependentUpon>FormDropEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormGachaBannerEditor2.en-us.resx">
<DependentUpon>FormGachaBannerEditor2.cs</DependentUpon>
</EmbeddedResource>
@@ -275,7 +298,6 @@
<Content Include="Resources\IconGrasscutter.ico" />
<Content Include="Resources\IconGrasscutter.png" />
<None Include="Resources\ImgSupport.png" />
<Content Include="Resources\ImgHome.jpg" />
<Content Include="Resources\Permissions.txt" />
<Content Include="Resources\WeaponColor.txt" />
<Content Include="Resources\zh-cn\Animal.txt" />

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.6.7")]
[assembly: AssemblyFileVersion("1.6.7")]
[assembly: AssemblyVersion("1.7.0")]
[assembly: AssemblyFileVersion("1.7.0")]

View File

@@ -560,6 +560,15 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// 查找类似 输入不能为空! 的本地化字符串。
/// </summary>
internal static string EmptyInputTip {
get {
return ResourceManager.GetString("EmptyInputTip", resourceCulture);
}
}
/// <summary>
/// 查找类似 错误 的本地化字符串。
/// </summary>
@@ -662,16 +671,6 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgHome {
get {
object obj = ResourceManager.GetObject("ImgHome", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
@@ -740,10 +739,9 @@ namespace GrasscutterTools.Properties {
///148:营业收入
///149:可用资金
///150:巧策灵感
///201:原石
///202:摩拉
///203:创世结晶
///2 [字符串的其余部分被截断]&quot;; 的本地化字符串。
///151:蘑菇宝钱
///152:灵蕈奖章
///153:绮碎斑 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Item {
get {
@@ -816,7 +814,11 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// 查找类似 1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受 的本地化字符串。
/// 查找类似 1. 填写正确的UID
///2. 向玩家发送验证码
///3. 输入正确的验证码
///4. 连接
///5. 享受 的本地化字符串。
/// </summary>
internal static string OpenCommandHelp {
get {

View File

@@ -166,6 +166,9 @@
<data name="CommandContentCannotBeEmpty" xml:space="preserve">
<value>Command cannot be empty</value>
</data>
<data name="WaypointNameCannotBeEmpty" xml:space="preserve">
<value>Waypoint name cannot be empty</value>
</data>
<data name="CommandNotFound" xml:space="preserve">
<value>Command not found</value>
</data>
@@ -205,7 +208,11 @@ Update info :
Do you want to check for updates? Selecting No will no longer remind you of this version.</value>
</data>
<data name="OpenCommandHelp" xml:space="preserve">
<value>1. Fill in the correct uid\n2. Send verification code to player\n3. Enter the correct verification code\n4. Connection\n5. Enjoy</value>
<value>1. Fill in the correct UID
2. Send verification code to player
3. Enter the correct verification code
4. Connection
5. Enjoy</value>
</data>
<data name="PermissionCannotBeEmpty" xml:space="preserve">
<value>Permission cannot be empty!</value>
@@ -220,7 +227,7 @@ Do you want to check for updates? Selecting No will no longer remind you of this
<value>..\Resources\en-us\Quest.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="RequireOpenCommandTip" xml:space="preserve">
<value>Please connect to a server that supports [opencommand] first</value>
<value>Please connect to a server that supports [OpenCommand] first</value>
</data>
<data name="RestoreCustomCommands" xml:space="preserve">
<value>Are you sure you want to restore custom commands to defaults?</value>
@@ -252,14 +259,16 @@ Do you want to check for updates? Selecting No will no longer remind you of this
<data name="WeaponColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\WeaponColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODImportText" xml:space="preserve">
<value>Do you wish to import </value>
<value>Do you wish to import </value>
</data>
<data name="GOODImportTitle" xml:space="preserve">
<value>Import GOOD dump file</value>
<value>Import GOOD dump file</value>
</data>
<data name="GOODImportSuccess" xml:space="preserve">
<value>Import success!</value>
<value>Import success!</value>
</data>
<data name="EmptyInputTip" xml:space="preserve">
<value>Input cannot be empty!</value>
</data>
</root>

View File

@@ -193,9 +193,6 @@
<data name="IconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\IconGrasscutter.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ImgHome" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ImgHome.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ImgIconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\IconGrasscutter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -217,7 +214,11 @@
是否查看更新?选择否将不再提醒该版本。</value>
</data>
<data name="OpenCommandHelp" xml:space="preserve">
<value>1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受</value>
<value>1. 填写正确的UID
2. 向玩家发送验证码
3. 输入正确的验证码
4. 连接
5. 享受</value>
</data>
<data name="PermissionCannotBeEmpty" xml:space="preserve">
<value>要设置的权限不能为空!</value>
@@ -273,4 +274,7 @@
<data name="Newtonsoft_Json" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Newtonsoft.Json.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="EmptyInputTip" xml:space="preserve">
<value>输入不能为空!</value>
</data>
</root>

View File

@@ -137,7 +137,7 @@
<value>..\Resources\ru-ru\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="AskConfirmDeletion" xml:space="preserve">
<value>Are you sure you want to delete this command?</value>
<value>Вы точно хотите удалить эту команду?</value>
</data>
<data name="Avatar" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ru-ru\Avatar.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
@@ -149,7 +149,7 @@
<value>..\Resources\ru-ru\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BrowserOpenFailedTip" xml:space="preserve">
<value>Браузерe не удалось открыть. Вы можете вручную получить доступ к следующему адресу:</value>
<value>Не удалось открыть в браузере. Вы можете вручную получить доступ к следующему адресу:</value>
</data>
<data name="CheckToNewVersion" xml:space="preserve">
<value>Переход на новую версию</value>
@@ -161,7 +161,7 @@
<value>Повторная отправка через {0} секунд</value>
</data>
<data name="CodeSending" xml:space="preserve">
<value>отправка...</value>
<value>Отправка...</value>
</data>
<data name="CommandContentCannotBeEmpty" xml:space="preserve">
<value>Команда не может быть пустой</value>
@@ -170,7 +170,7 @@
<value>Команда не найдена</value>
</data>
<data name="CommandTagCannotBeEmpty" xml:space="preserve">
<value>Командный тег не может быть пустым</value>
<value>Тег команды не может быть пустым</value>
</data>
<data name="ConnectedTip" xml:space="preserve">
<value>Теперь вы можете выполнять команды удаленно!</value>
@@ -178,6 +178,9 @@
<data name="CustomCommands" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ru-ru\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="EmptyInputTip" xml:space="preserve">
<value>Ввод не может быть пустым!</value>
</data>
<data name="Error" xml:space="preserve">
<value>Ошибка</value>
</data>
@@ -185,7 +188,7 @@
<value>..\Resources\ru-ru\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="Help" xml:space="preserve">
<value>Help</value>
<value>Помощь</value>
</data>
<data name="IconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\IconGrasscutter.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -202,10 +205,14 @@
Информация об обновлении :
{2}
-------------------------------------------
Вы хотите проверить наличие обновлений? Выбор Нет больше не будет напоминать вам об этой версии.</value>
Вы хотите проверить наличие обновлений? Выбирая "Нет", программа больше не будет напоминать вам об этой версии.</value>
</data>
<data name="OpenCommandHelp" xml:space="preserve">
<value>1. Заполните правильный uid\n2. Отправьте проверочный код игроку\n3. Введите правильный проверочный код\n4. Соединение\n5. Наслаждаться</value>
<value>1. Введите правильный UID
2. Отправьте проверочный код игроку
3. Введите правильный проверочный код
4. Покдлючитесь
5. Наслаждайтесь!</value>
</data>
<data name="PermissionCannotBeEmpty" xml:space="preserve">
<value>Разрешение не может быть пустым!</value>
@@ -220,7 +227,7 @@
<value>..\Resources\ru-ru\Quest.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="RequireOpenCommandTip" xml:space="preserve">
<value>Пожалуйста, сначала подключитесь к серверу, который поддерживает [команду открытия]</value>
<value>Пожалуйста, сначала подключитесь к серверу, который поддерживает [OpenCommand]</value>
</data>
<data name="RestoreCustomCommands" xml:space="preserve">
<value>Вы уверены, что хотите восстановить пользовательские команды по умолчанию?</value>
@@ -235,7 +242,7 @@
<value>Не удалось сохранить настройки:</value>
</data>
<data name="Tips" xml:space="preserve">
<value>Совет</value>
<value>Внимание</value>
</data>
<data name="TokenCannotBeEmpty" xml:space="preserve">
<value>Токен не может быть пустым</value>

View File

@@ -202,7 +202,11 @@
是否查看更新?選擇否將不再提醒該版本。</value>
</data>
<data name="OpenCommandHelp" xml:space="preserve">
<value>1. 填寫正確的UID\n2. 向玩家發送驗證碼\n3. 輸入正確的驗證碼\n4. 連接\n5. 享受</value>
<value>1. 填寫正確的UID
2. 向玩家發送驗證碼
3. 輸入正確的驗證碼
4. 連接
5. 享受</value>
</data>
<data name="PermissionCannotBeEmpty" xml:space="preserve">
<value>要設置的權限不能為空!</value>
@@ -250,12 +254,15 @@
<value>..\Resources\WeaponColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODImportText" xml:space="preserve">
<value>是否導入 </value>
<value>是否導入 </value>
</data>
<data name="GOODImportTitle" xml:space="preserve">
<value>導入GOOD檔案</value>
<value>導入GOOD檔案</value>
</data>
<data name="GOODImportSuccess" xml:space="preserve">
<value>導入成功!</value>
<value>導入成功!</value>
</data>
<data name="EmptyInputTip" xml:space="preserve">
<value>輸入不能為空!</value>
</data>
</root>

View File

@@ -154,5 +154,29 @@ namespace GrasscutterTools.Properties {
this["IsTopMost"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string DropJsonPath {
get {
return ((string)(this["DropJsonPath"]));
}
set {
this["DropJsonPath"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("GrasscutterTools")]
public string DefaultMailSender {
get {
return ((string)(this["DefaultMailSender"]));
}
set {
this["DefaultMailSender"] = value;
}
}
}
}

View File

@@ -35,5 +35,11 @@
<Setting Name="IsTopMost" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="DropJsonPath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="DefaultMailSender" Type="System.String" Scope="User">
<Value Profile="(Default)">GrasscutterTools</Value>
</Setting>
</Settings>
</SettingsFile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

View File

@@ -52,4 +52,9 @@
1066:Kamisato Ayato
1067:Collei
1068:Dori
1069:Tighnari
1069:Tighnari
1070:Nilou
1071:Cyno
1072:Candace
1073:Nahida
1074:Layla

View File

@@ -41,6 +41,9 @@
143:Creative Note
144:Whimsical Draft
145:Ancient Iron Coin
151:Mushroom Currency
152:Fungus Medal
153:Shattered Phenocryst
201:Primogem
202:Mora
203:Genesis Crystal
@@ -2206,6 +2209,11 @@
108445:Suspicious Milky Mushroom Crisp Tower
108446:Milky Mushroom Crisp Tower
108447:Delicious Milky Mushroom Crisp Tower
108470:Suspicious Rose Custard
108471:Rose Custard
108472:Delicious Rose Custard
108473:Extravagant Slumber
108474:Halvamazd
109000:Recipe Item
109101:Recipe: Chicken-Mushroom Skewer
109102:Recipe: Fisherman's Toast
@@ -2334,6 +2342,7 @@
109508:Recipe: Meat Lovers' Mushroom Pizza
109509:Recipe: Sunset Berry Tea
109510:Recipe: Milky Mushroom Crisp Tower
109517:Recipe: Rose Custard
110000:Crafted Items
110001:Flour
110002:Cream
@@ -2478,6 +2487,10 @@
113035:Runic Fang
113036:Majestic Hooked Beak
113037:Thunderclap Fruitcore
113040:Quelled Creeper
113041:???
113042:???
113043:???
114001:Tile of Decarabian's Tower
114002:Debris of Decarabian's City
114003:Fragment of Decarabian's Epic
@@ -2633,6 +2646,17 @@
120041:Dissection Records
120042:Ragged Attendance Record
120059:An Elegantly-Written Note
120127:???
120152:???
120153:???
120154:???
120155:???
120156:???
120157:???
120158:???
120159:???
120160:???
120161:???
130001:Silk Flower Seed
130002:Sweet Flower Seed
130003:Cecilia Seed
@@ -2862,6 +2886,8 @@
200903:Narukawa Ukai
200904:Moonstringer
200905:Serendipity
207300:For All Knowledge, a Verse
207400:Dreaming Star
210001:Genshin Impact: A New World
210002:Travel Notes: Catch the Wind
210003:Amber: Bunny
@@ -2990,6 +3016,9 @@
210130:Sumeru: Shimmering Woods
210131:Sumeru: Observance
210132:Sumeru: Unsullied
210140:Nahida·???
210141:Layla·???
210142:Travel Notes: Fungus Land
220001:Anemoculus Resonance Stone
220002:Geoculus Resonance Stone
220003:Geo Treasure Compass
@@ -3053,6 +3082,8 @@
220066:Vintage Lyre
220070:"Bubbly Kamera"
220071:"Kusava"
220073:Wisdom Orb
222002:N/A
221001:Instructions: Anemoculus Resonance Stone
221002:Instructions: Geoculus Resonance Stone
221003:Diagram: Geo Treasure Compass

View File

@@ -24,6 +24,7 @@
20040401:Hydro Hypostasis
20040501:Cryo Hypostasis
20040601:Pyro Hypostasis
20040701:Dendro Hypostasis
20050102:Oceanid
20050201:Oceanid Boar
20050301:Oceanid Crane
@@ -203,6 +204,12 @@
29060101:Raiden Shogun
29060102:Raiden Ei
29060201:Magatsu Mitake Narukami no Mikoto
29070101:???(Scaramouche)
31010101:Hilichurl
31020101:Mitachurl shield
31020201:Axe Mitachurl
31020201:Axe Mitachurl
24030301 : BlightDrake
24040101 : Primal Construct: Repulsor
24040201 : Primal Construct: Reshaper
24040301 : Primal Construct: Prospector
24050101 : Semi-Perpetual Control Matrix

View File

@@ -21,6 +21,8 @@
11414:Amenoma Kageuchi
11415:Cinnabar Spindle
11416:Kagotsurube Isshin
11417:Sapwood Blade
11418:Xiphos Moonlight
11419:Prized Isshin Blade
11420:Prized Isshin Blade
11421:Prized Isshin Blade
@@ -33,6 +35,7 @@
11507:One Side
11509:Mistsplitter Reforged
11510:Haran Geppaku Futsu
11511:Key of Khaj-Nisut
12101:Waster Greatsword
12201:Old Merc's Pal
12301:Ferrous Shadow
@@ -54,7 +57,9 @@
12411:Snow-Tombed Starsilver
12412:Luxurious Sea-Lord
12414:Katsuragikiri Nagamasa
12415:Makhaira Aquamarine
12416:Akuoumaru
12417:Forest Regalia
12501:Skyward Pride
12502:Wolf's Gravestone
12503:Song of Broken Pines
@@ -80,6 +85,8 @@
13414:Kitain Cross Spear
13415:"The Catch"
13416:Wavebreaker's Fin
13417:Moonpiercer
13419:Missive Windspear
13501:Staff of Homa
13502:Skyward Spine
13504:Vortex Vanquisher
@@ -87,6 +94,7 @@
13506:Deicide
13507:Calamity Queller
13509:Engulfing Lightning
13511:Staff of the Scarlet Sands
14101:Apprentice's Notes
14201:Pocket Grimoire
14301:Magic Guide
@@ -109,6 +117,8 @@
14413:Dodoco Tales
14414:Hakushin Ring
14415:Oathsworn Eye
14416:Wandering Evenstar
14417:Fruit of Fulfillment
14501:Skyward Atlas
14502:Lost Prayer to the Sacred Winds
14503:Lost Ballade
@@ -116,6 +126,7 @@
14505:Primordial Jade Regalia
14506:Everlasting Moonglow
14509:Kagura's Verity
14511:A Thousand Floating Dreams
15101:Hunter's Bow
15201:Seasoned Hunter's Bow
15301:Raven Bow
@@ -140,6 +151,8 @@
15414:Hamayumi
15415:Predator
15416:Mouun's Moon
15417:King's Squire
15418:End of the Line
15501:Skyward Harp
15502:Amos' Bow
15503:Elegy for the End

View File

@@ -1,5 +1,5 @@
20:Deepwood Memories
21:Gilded Dreams
20:Воспоминания дремучего леса
21:Позолоченные сны
51:Решимость временщика
52:Душа храбреца
53:Воля защитника
@@ -26,7 +26,7 @@
81:Церемония древней знати
82:Рыцарь крови
83:Шаман огня
84:Prayers for Destiny
84:Шаман воды
85:Шаман молний
86:Шаман ветра
87:Шаман льда

View File

@@ -52,4 +52,9 @@
1066:Камисато Аято
1067:Коллеи
1068:Дори
1069:Тигнари
1069:Тигнари
1070:Нилу
1071:Сайно
1072:Кандакия
1073:Нахида
1074:Лайла

View File

@@ -10,7 +10,7 @@
/prop wl 8
Открыть всю карту
/prop unlockmap 1
Открыть всю Витую бездну
Открыть всю бездну
/prop ut 12
Макс. уровень БП
/prop bp 50
@@ -46,9 +46,9 @@
/clear art lv20 5*
Очистить только Материалы
/clear mat
Сброс Созвездия текущего персонажа (Требуется повторный вход в систему)
Сброс созвездия текущего персонажа (требуется перезаход)
/resetconst
Сброс Созвездия ВСЕХ персонажей (Требуется повторный вход в систему)
Сброс созвездия ВСЕХ персонажей (требуется перезаход)
/resetconst all
Убить всех монстров
/killall

View File

@@ -21,6 +21,8 @@
11414:Амэнома Кагэути
11415:Киноварное веретено
11416:Кагоцурубэ Иссин
11417:Деревянный клинок
11418:Лунное сияние ксифоса
11419:Легендарный клинок Иссин
11420:Легендарный клинок Иссин
11421:Легендарный клинок Иссин
@@ -33,6 +35,7 @@
11507:Одна Сторона
11509:Рассекающий туман
11510:Харан гэппаку фуцу
11511:Ключ Хадж-нисут
12101:Двуручный меч богатыря
12201:Лучший друг наёмника
12301:Металлическая тень
@@ -54,7 +57,9 @@
12411:Заснеженное звёздное серебро
12412:Благодатный владыка вод
12414:Кацурагикири Нагамаса
12415:Аквамарин Махайры
12416:Акуомару
12417:Регалия леса
12501:Небесное величие
12502:Волчья погибель
12503:Песнь разбитых сосен
@@ -80,6 +85,8 @@
13414:Крест-копьё Китаин
13415:«Улов»
13416:Режущий волны плавник
13417:Пронзающий луну
13419:Копьё послания ветров
13501:Посох Хомы
13502:Небесная ось
13504:Покоритель вихря
@@ -87,6 +94,7 @@
13506:Богоубийство
13507:Усмиритель бед
13509:Сияющая жатва
13511:Посох алых песков
14101:Записи ученика
14201:Карманный гримуар
14301:Руководство по магии
@@ -109,6 +117,8 @@
14413:Истории Додоко
14414:Кольцо Хакусин
14415:Око клятвы
14416:Скитающаяся звезда
14417:Плод восполнения
14501:Небесный атлас
14502:Молитва святым ветрам
14503:Утерянная Баллада
@@ -116,6 +126,7 @@
14505:Древняя Нефритовая Регалия
14506:Вечное лунное сияние
14509:Истина кагура
14511:Сновидения тысячи ночей
15101:Лук охотника
15201:Лук опытного охотника
15301:Лук ворона
@@ -140,6 +151,8 @@
15414:Хамаюми
15415:Хищник
15416:Луна Моун
15417:Приближённый короля
15418:Иссушитель
15501:Небесное крыло
15502:Лук Амоса
15503:Элегия погибели

View File

@@ -55,4 +55,6 @@
1069:提纳里
1070:妮露
1071:赛诺
1072:坎蒂丝
1072:坎蒂丝
1073:纳西妲
1074:莱依拉

View File

@@ -45,6 +45,9 @@
148:营业收入
149:可用资金
150:巧策灵感
151:蘑菇宝钱
152:灵蕈奖章
153:绮碎斑晶
201:原石
202:摩拉
203:创世结晶
@@ -130,6 +133,11 @@
1067:柯莱
1068:多莉
1069:提纳里
1070:妮露
1071:赛诺
1072:坎蒂丝
1073:纳西妲
1074:莱依拉
1102:神里绫华的命星
1103:琴的命星
1105:旅行者(男)的命星
@@ -185,9 +193,11 @@
1167:柯莱的命星
1168:多莉的命星
1169:提纳里的命星
1170:妮露
1171:赛诺
1172:坎蒂丝
1170:妮露的命星
1171:赛诺的命星
1172:坎蒂丝的命星
1173:纳西妲的命星
1174:莱依拉的命星
1201:珍珠纪行·初稿
1202:空月祝福·新月
2001:元素能量球(火)
@@ -2264,6 +2274,11 @@
108467:决斗之魂
108468:关怀备至
108469:
108470:奇怪的蔷薇奶糊
108471:蔷薇奶糊
108472:美味的蔷薇奶糊
108473:安眠奢想
108474:哈瓦玛玛兹
109000:食谱道具
109101:食谱:野菇鸡肉串
109102:食谱:渔人吐司
@@ -2398,6 +2413,7 @@
109514:食谱:帕蒂沙兰布丁
109515:食谱:阿如拌饭
109516:
109517:食谱:蔷薇奶糊
110000:合成产物
110001:面粉
110002:奶油
@@ -2547,6 +2563,10 @@
113037:藏雷野实
113038:永续机芯
113039:导光四面体
113040:灭诤草蔓
113041:(散兵周本材料)
113042:(散兵周本材料)
113043:(散兵周本材料)
114001:高塔孤王的破瓦
114002:高塔孤王的残垣
114003:高塔孤王的断片
@@ -2757,6 +2777,17 @@
120122:贾汉吉尔的收货单
120123:
120125:test赛芭的蔷薇
120127:
120152:
120153:
120154:
120155:
120156:
120157:
120158:
120159:
120160:
120161:
130001:「霓裳花」的种子
130002:「甜甜花」的种子
130003:「塞西莉亚花」的种子
@@ -2996,6 +3027,8 @@
207000:非花非雾
207100:衡断之心
207200:沙漠与夜
207300:万识一偈
207400:梦里星
210001:原神·印象
210002:纪行·捕风
210003:安柏·兔兔
@@ -3131,6 +3164,9 @@
210137:成就·七芒
210138:须弥·踏沙
210139:成就·镜梦
210140:纳西妲·???
210141:莱依拉·???
210142:纪行·蕈原
220001:风神瞳共鸣石
220002:岩神瞳共鸣石
220003:岩之寻宝罗盘
@@ -3198,6 +3234,7 @@
220069:赤沙石板
220070:「清冽水沫留影机」
220071:「苦舍桓」
220073:「意智宝珠」
220074:
221001:说明:风神瞳共鸣石
221002:说明:岩神瞳共鸣石
@@ -3232,6 +3269,7 @@
221057:说明:草神瞳共鸣石
221058:图谱:草之寻宝罗盘
222001:「绘绮之枕印」
222002:「烟林之真果」
223001:云山复沓百雨金
223002:银夜点注满天星
223003:霁青杳漫染寒英
@@ -4091,6 +4129,8 @@
368155:妮露
368156:赛诺
368157:坎蒂丝
368158:纳西妲
368159:莱依拉
369101:翠目猫
369102:北地犬
369103:野林猪
@@ -4852,4 +4892,148 @@
379027:暮云角鲀
379028:青金斧枪鱼
379029:翡玉斧枪鱼
3750102:璃月古宅-「画阁朱楼」
3750102:璃月古宅-「画阁朱楼」
350060:摆设套装图纸·test护林员
350061:摆设套装图纸·test珠宝店
350062:摆设套装图纸·test烤肉店
350063:摆设套装图纸·test教令院风格图书馆
350064:摆设套装图纸·test室内睡房
350065:摆设套装图纸·test阿如村室内
350066:摆设套装图纸·test大巴扎
350067:摆设套装图纸·test林中村落
350068:摆设套装图纸·test剧场
350069:摆设套装图纸·test维摩庄
350070:摆设套装图纸·test阿如村室外
350071:摆设套装图纸·test佣兵兵营
350072:摆设套装图纸·test花园
350073:摆设套装图纸·test须弥植被
360104:test须弥室内墙
360204:test须弥室内地板
360304:test须弥室内天花板
360422:test须弥城灯具1
360423:test须弥城灯具2
360424:test须弥城灯具3
360504:test须弥室内吊灯
361109:test须弥室内柜子1
361110:test须弥室内床头柜
361211:
361213:test教令院书架1
361214:test教令院书架2
361319:test烤肉店沙拉小桌
361320:test烤肉店桌子
361321:test须弥室内桌子
361404:test须弥室内床1BP
361405:test须弥卧室床
361506:test烤肉店吧台
362109:test须弥室内椅子1
362110:test须弥室内椅子2
362111:test烤肉店吧台椅
362232:test提纳里盆栽
362233:test提纳里仪器
362234:test柯莱行囊架
362235:test柯莱火炉与厨具
362236:test烤肉店烤肉炉
362237:test烤肉店烤肉架
363108:test须弥立灯家具
363333:
363334:test「意智宝珠」模型
363335:test珠宝店首饰盒
363336:test珠宝店彩饰盘
363337:test珠宝店酒具与瓶子组合
364216:test提纳里标本架
364304:test须弥室内房门
364404:test须弥室内转角阶梯
364505:
370711:test须弥辅建筑其一
370712:test须弥辅建筑其二
370713:test须弥辅建筑其三
370714:test须弥辅建筑其四
370715:test须弥辅建筑其五
370716:test须弥辅建筑其六
370717:test蕈兽活动舞台
370718:test银行建筑1
370719:test主城烤肉店
370720:test主城咖啡馆
370721:test主城铁匠铺
370722:test灯塔建筑1
370723:test花园亭子
370724:test寂静院亭子1
370725:test剧场建筑
370726:test下城区建筑1
370727:test下城区建筑2
370728:test下城区建筑3
370729:test城市通用建筑
371126:test剧场小喷泉
371127:test教令院喷泉
372335:test须弥森林特殊树1
372336:test须弥森林特殊树2
372337:test须弥森林特殊树3
372338:test须弥通用树1
372339:test须弥通用树2
372469:test剧场花卉
372470:test须弥通用灌木1
372471:test须弥通用灌木2
372472:test须弥通用灌木3
372473:test须弥通用灌木4
372474:test须弥通用灌木5
372606:test须弥浮空木桥其一
372607:test须弥浮空木桥其二
373147:
373209:test剧场花坛
373210:test寂静院花坛
373361:test佣兵团旗帜
375104:须弥穹居-「静虑寓所」
380104:test须弥室内墙
380204:test须弥室内地板
380304:test须弥室内天花板
380422:test须弥城灯具1
380423:test须弥城灯具2
380424:test须弥城灯具3
380504:test须弥室内吊灯
381109:test须弥室内柜子1
381110:test须弥室内床头柜
381213:test教令院书架1
381214:test教令院书架2
381319:test烤肉店沙拉小桌
381320:test烤肉店桌子
381321:test须弥室内桌子
381404:test须弥室内床1BP
381405:test须弥卧室床
381506:test烤肉店吧台
382109:test须弥室内椅子1
382110:test须弥室内椅子2
382111:test烤肉店吧台椅
382232:test提纳里盆栽
382233:test提纳里仪器
382234:test柯莱行囊架
382235:test柯莱火炉与厨具
382236:test烤肉店烤肉炉
382237:test烤肉店烤肉架
383108:test须弥立灯家具
383335:test珠宝店首饰盒
383336:test珠宝店彩饰盘
383337:test珠宝店酒具与瓶子组合
384216:test提纳里标本架
390711:test须弥辅建筑其一
390712:test须弥辅建筑其二
390713:test须弥辅建筑其三
390714:test须弥辅建筑其四
390715:test须弥辅建筑其五
390716:test须弥辅建筑其六
390718:test银行建筑1
390719:test主城烤肉店
390720:test主城咖啡馆
390721:test主城铁匠铺
390722:test灯塔建筑1
390723:test花园亭子
390724:test寂静院亭子1
390725:test剧场建筑
390726:test下城区建筑1
390727:test下城区建筑2
390728:test下城区建筑3
390729:test城市通用建筑
391126:test剧场小喷泉
391127:test教令院喷泉
393209:test剧场花坛
393210:test寂静院花坛
393361:test佣兵团旗帜

View File

@@ -51,6 +51,7 @@
20040401:无相之水
20040501:无相之冰
20040601:无相之火
20040701:无相之草
20050101:纯水精灵
20050102:纯水精灵
20050201:纯水之猪
@@ -338,6 +339,7 @@
29060201:祸津御建鸣神命
29060202:祸津御建鸣神命
29060203:祸津御建鸣神命
29070101:散兵·正机之神
20060701:草飘浮灵
24030201:遗迹龙兽·地巡
24030101:遗迹龙兽·空巡
@@ -370,4 +372,6 @@
26090301:浮游风蕈兽
26090601:旋转火蕈兽
26091001:伸缩雷蕈兽
26120401:陆行岩本真蕈
26120401:陆行岩本真蕈
20040701:无相之草
29070101:?????(散兵·正机之神)

View File

@@ -126,6 +126,7 @@
14505:定土玉圭
14506:不灭月华
14509:神乐之真意
14511:千夜浮梦
15101:猎弓
15201:历练的猎弓
15301:鸦羽弓

View File

@@ -52,4 +52,9 @@
1066:神里綾人
1067:柯萊
1068:多莉
1069:提納里
1069:提納里
1070:妮露
1071:賽諾
1072:坎蒂絲
1073:納西妲
1074:萊依拉

View File

@@ -21,6 +21,8 @@
11414:天目影打刀
11415:辰砂之紡錘
11416:籠釣瓶一心
11417:原木刀
11418:西福斯的月光
11419:「一心傳」名刀
11420:「一心傳」名刀
11421:「一心傳」名刀
@@ -33,6 +35,7 @@
11507:憑虛
11509:霧切之回光
11510:波亂月白經津
11511:聖顯之鑰
12101:訓練大劍
12201:傭兵重劍
12301:鐵影闊劍
@@ -54,7 +57,9 @@
12411:雪葬的星銀
12412:銜珠海皇
12414:桂木斬長正
12415:瑪海菈的水色
12416:惡王丸
12417:森林王器
12501:天空之傲
12502:狼的末路
12503:松籟響起之時
@@ -80,6 +85,8 @@
13414:喜多院十文字
13415:「漁獲」
13416:斷浪長鰭
13417:貫月矢
13419:風信之鋒
13501:護摩之杖
13502:天空之脊
13504:貫虹之槊
@@ -87,6 +94,7 @@
13506:弑主
13507:息災
13509:薙草之稻光
13511:赤沙之杖
14101:學徒筆記
14201:口袋魔導書
14301:魔導緒論
@@ -109,6 +117,8 @@
14413:嘟嘟可故事集
14414:白辰之環
14415:證誓之明瞳
14416:流浪的晚星
14417:盈滿之實
14501:天空之卷
14502:四風原典
14503:散佚的敘事詩
@@ -116,6 +126,7 @@
14505:定土玉圭
14506:不滅月華
14509:神樂之真意
14511:千夜浮夢
15101:獵弓
15201:歷練的獵弓
15301:鴉羽弓
@@ -140,6 +151,8 @@
15414:破魔之弓
15415:掠食者
15416:曚雲之月
15417:王下近侍
15418:竭澤
15501:天空之翼
15502:阿莫斯之弓
15503:終末嗟嘆之詩

View File

@@ -0,0 +1,39 @@
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GrasscutterTools.Utils
{
public static class UIUtil
{
/// <summary>
/// 播放按钮完成动画
/// </summary>
/// <param name="btn"></param>
/// <returns></returns>
public static async Task ButtonComplete(Button btn)
{
var t = btn.Text;
btn.Text = "√";
btn.Enabled = false;
await Task.Delay(300);
btn.Text = t;
btn.Enabled = true;
}
/// <summary>
/// 列表过滤
/// </summary>
/// <param name="listBox">列表控件</param>
/// <param name="source">数据源</param>
/// <param name="filter">过滤内容</param>
public static void ListBoxFilter(ListBox listBox, string[] source, string filter)
{
filter = filter.Trim();
listBox.BeginUpdate();
listBox.Items.Clear();
listBox.Items.AddRange(source.Where(n => n.Contains(filter)).ToArray());
listBox.EndUpdate();
}
}
}