Compare commits

...

115 Commits

Author SHA1 Message Date
eef4687ed6 Clean up all code using CodeMaid 2023-08-02 17:43:01 +08:00
e9a3f4014e Remove debug code 2023-08-02 17:27:50 +08:00
749aae02ca Add GC v1.6.3 2023-08-02 17:26:14 +08:00
fc3fd10081 Add Server connection records (close #199) 2023-08-02 17:25:31 +08:00
65e664f35f Add shortcut keys Alt+[0~9] to switch pages (close #201) 2023-07-28 21:21:57 +08:00
ab9a617619 Allows setting individual key as HotKey 2023-07-25 21:17:02 +08:00
f629bc9993 Add HotKey Screenshot 2023-07-22 00:21:06 +08:00
dc7f48139e Update Command versions 2023-07-22 00:14:01 +08:00
da8c511d60 Update version to v1.11.0 2023-07-22 00:11:14 +08:00
eb60f402a4 Add Setting Upgrade 2023-07-22 00:11:01 +08:00
c82ce1ea35 Add HotKey Page (close #190) 2023-07-22 00:10:40 +08:00
9524ea5ab4 Update connection failure text (close #196) 2023-07-21 22:02:53 +08:00
caf18eaa7a Merge branch 'main' of https://github.com/jie65535/GrasscutterCommandGenerator 2023-07-21 21:41:20 +08:00
2cdcb4a599 Update spawn level maximum to 200 (close #198) 2023-07-21 21:41:00 +08:00
Deuteriunt
3407ca61fd Update 3.8 Activity ID (#195)
* main

* Update WeaponColor.txt

* Update 3.8 Activity ID and untranslated sentences

* Remove redundant changes

* Update Weapon.txt

---------

Co-authored-by: jie65535 <jie65535@qq.com>
2023-07-07 23:40:56 +08:00
964b7ced8b Merge pull request #194 from TomyJan/main
add new skins for custom command `All skins`
2023-06-28 21:02:20 +08:00
TomyJan
702267003b add new skins for custom command All skins 2023-06-28 20:52:20 +08:00
abf970b783 Update host url check 2023-06-26 22:56:32 +08:00
6855b6299f Add Kot key utils from https://github.com/jie65535/KeyGo 2023-06-18 18:19:51 +08:00
b77d242bd9 Update version to v1.10.1 2023-06-18 18:02:49 +08:00
01016b1fa1 Fix tips 2023-06-18 18:02:39 +08:00
b2b656b6cb Support for command line arguments (#155) 2023-06-18 18:02:02 +08:00
aabe6664b4 Update Cutscene translates(CHT) 2023-06-10 11:28:19 +08:00
馬良※チノ
5869a72645 Cutscenes translation (#189)
* 200201

* i forgot xd

* 区分渊下宫与三界路飨祭

* 踏鞴砂

* 沙漠书 激活小塔柱子

* 3.6小活动(风沙轰鸣) 打沙虫动画

* 甘露池

* i forget x2 xd

* idk x3 lmao

* Update Cutscene.txt
2023-06-10 10:11:11 +08:00
df3ab12165 Update Activity editor screenshots 2023-06-09 23:59:47 +08:00
03fe8909d0 Update Activity Translates 2023-06-09 23:54:10 +08:00
2ec4bc9333 Remove unused dependencies 2023-06-09 23:07:48 +08:00
c1b89a2b9a Update Tools page 2023-06-09 22:42:33 +08:00
6706525e77 Update Dungeon resources 2023-06-09 22:42:11 +08:00
981b8377d8 Add /troubleshoot to custom commands 2023-06-09 21:52:00 +08:00
945329d109 Link https://github.com/Zhaokugua/Grasscutter_Banners 2023-06-09 21:47:06 +08:00
304f3484e3 Update 3.7.2 banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-06-09 21:38:24 +08:00
47ad6dae6a Update Cutscene screenshot 2023-06-09 21:35:42 +08:00
0448bb0ea9 Update Cutscene Translates 2023-06-09 21:35:16 +08:00
moux23333
5009d148a1 Cutscenes translation 3 (#188) 2023-06-09 14:00:15 +08:00
馬良※チノ
8427103a7e Cutscenes translation 2 (#187)
* 116 117

* 75-86

* Update Cutscene.txt
2023-06-09 13:23:01 +08:00
2767cb44d7 Fix cutscene encoding 2023-06-09 00:18:57 +08:00
moux23333
416ffd6435 Cutscenes translation (#186)
* Cutscenes translation 1

* Cutscene translation 2
2023-06-08 23:52:41 +08:00
ff554ce369 Update PageScene localization 2023-06-08 22:52:27 +08:00
0698671c05 Update Cutscene.txt 2023-06-08 22:51:56 +08:00
67468cf28b Throw ping exception 2023-06-08 21:21:03 +08:00
058a6b7ab2 Update version to v1.10.0 2023-06-08 21:19:36 +08:00
1ccb3656c2 Add Cutscene command to Scene page 2023-06-08 21:19:26 +08:00
6da7e1d4d0 Fix Artifact MainAttribution changes without refreshing 2023-05-30 20:20:18 +08:00
119c8c87ee Remove temp file 2023-05-30 20:03:23 +08:00
2758b4d896 Update version to v1.9.1 2023-05-30 19:58:31 +08:00
d8c7f0ad56 Update 3.7 Resources 2023-05-30 19:58:00 +08:00
0d8b51f199 Update PageAbout.resx 2023-05-29 20:12:52 +08:00
6e296edf11 Update README.md 2023-05-29 20:08:18 +08:00
072066ac87 Update README_zh-tw.md 2023-05-29 20:08:08 +08:00
a359dea603 Update README_zh-cn.md 2023-05-29 20:07:56 +08:00
29decd4899 Update README.md 2023-05-29 20:06:44 +08:00
92a5d53d35 Update 3.7 first half banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-05-25 19:25:29 +08:00
40e33dcb1c Update All activity ids-3.7 from https://github.com/dplek/Genshin-Activity-ids 2023-05-25 19:23:00 +08:00
Deuteriunt
2b2757ccff Add 3.7 Avatar and Weapon id (#182)
* main

* Update WeaponColor.txt

---------

Co-authored-by: jie65535 <jie65535@qq.com>
2023-05-25 12:39:44 +08:00
f57f4097ac Fix UI issue 2023-05-14 19:05:42 +08:00
5865441074 Fix activity id not set 2023-05-14 18:54:03 +08:00
2d916392c1 Fix CHS and CHT Achievement 2023-05-14 18:52:50 +08:00
dec3b2261f Fix Activity add issue 2023-05-14 18:52:25 +08:00
5b0cb912e4 Fix null ptr 2023-05-14 18:33:37 +08:00
5cbdaa7134 Add Activity Editor Translates 2023-05-14 15:33:31 +08:00
b2f59431a6 Update page title resource 2023-05-14 10:25:35 +08:00
04ec214714 Add SetProp Translates 2023-05-13 23:49:55 +08:00
196b56ab71 Add Set Prop Page 2023-05-13 21:57:57 +08:00
226742776f Add Activity Config Editor (CHS Only) 2023-05-08 22:53:40 +08:00
f4ec2ee5fa Update indexes 2023-05-08 00:02:51 +08:00
f33d37cd90 Add achievement page screenshots 2023-05-07 16:49:34 +08:00
2394ec7f5d Add achievement page translations 2023-05-07 16:43:47 +08:00
8baa61b72c Fix index offset error 2023-05-07 16:35:31 +08:00
f35ea79475 Add prompt to download from Action 2023-05-07 16:25:26 +08:00
46b8ca0b63 Add NavContainer splitter distance record
Fix not redrawing when Nav list size changed
2023-05-07 15:27:30 +08:00
b8cfaf308d Update page navigation
Add Achievement page
2023-05-07 14:55:50 +08:00
c7d3e5021c Update version to v1.9.0 2023-05-07 12:59:53 +08:00
a689b425ca Update RU translations from @EgorBron fork 2023-05-07 11:42:02 +08:00
9bd45157a4 Update 3.6 Resources 2023-05-07 11:36:10 +08:00
止语语哦~
169b8997ec 添加3.6角色、武器、一些物品 (#181) 2023-04-20 21:38:36 +08:00
Lefengisbee
aa6ea882d9 (For CHT) Added README_zh-tw.md 新增繁中Readme 檔案 Added Gadget.txt to zh-tw folder 新增Gadget.txt繁中版 (#180)
* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* Remove Gadget.txt

* added Gadget.txt to zh-tw folder(from zh-cn folder), added README_zh-tw.md

* Screenshot Improvement

* Modify md files, added CHT option

* Warning to CHT

* Revert "Warning to CHT"

This reverts commit 9459c7910a.
2023-03-16 23:07:11 +08:00
Lefengisbee
c86b275096 (For CHT) CHS strings to CHT遺漏簡中轉繁中 (#179)
* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* Remove Gadget.txt
2023-03-16 21:19:17 +08:00
moux23333
a81985549e Full 3.5.0 Quest ids (#178) 2023-03-06 22:04:52 +08:00
ighlES
f4e9409afa 添加自定义指令 诚哥壶信任值升到10级 (#177)
* 添加自定义指令 诚哥壶信任值升到10级
2023-02-20 21:32:53 +08:00
6647e5bd37 Add OpenChat Ad 2023-02-18 16:27:22 +08:00
64b7c25de5 Update 3.4 Resources (Item/Monsters/Quest/Scene/Weapon) 2023-02-18 15:00:02 +08:00
7c562228c6 Update version to v1.8.1 2023-02-08 11:50:33 +08:00
91a194c948 Fix /drop command 2023-02-08 11:50:08 +08:00
50a30331e5 Fix /scene command 2023-02-08 11:49:33 +08:00
TomyJan
da47941564 (CHS Only)修改item分类名为中文&修改部分物品id排序&添加新的卡池id&增加两个自定义命令 (#175)
* 优化物品id&增加两个自定义命令

* del duplicate ids

* replenish gacha title/prefab to 3.4

* Update Item.txt
2023-01-31 18:22:26 +08:00
Syca
6e999f92a0 Add some ids(3.4.5) (CHS only) 2023-01-27 15:31:54 +08:00
f4fc0ef3c5 Fix the command is cleared after repeated 2023-01-12 14:22:40 +08:00
Syca
2dc8dc734b Add 3.4beta Dungeon&Scene IDs(CHS only) (#172)
* Add 3.4beta DungeonIDs&SceneIDs(CHS only)

* Fix Scene Names(3.3)(CHS only)

* Update Scene.txt

* Fix Scene Names(3.2)(CHS only)

* Add files via upload
2022-12-26 21:01:55 +08:00
Syca
98663240de Add Some 3.4beta IDs(CHS Only) (#169)
* add 3.4beta weapon

* Add Some 3.4bata items

* Add 3.4beta monsters
2022-12-17 21:49:48 +08:00
ba782c85d4 fix screenshots 2022-12-15 20:55:45 +08:00
dea067b21f Add task page screenshot 2022-12-15 20:43:51 +08:00
d56c73e2a3 Add Test page 2022-12-15 20:32:01 +08:00
5d208d1220 Update SceneIds and MonsterIds 2022-12-15 20:31:29 +08:00
47a3a1c7ab Add 3.3.50 avatar ids (from Sakura616 res)
Update quest text
2022-12-15 20:03:47 +08:00
56059b4f4f Update 3.3 Artifacts and avatar/weapon colors 2022-12-14 20:24:48 +08:00
09577d5403 Update Banners.json Ignore PreviewPrefabPath 2022-12-12 20:26:48 +08:00
fb77f9432a Add CI Badge 2022-12-10 23:56:12 +08:00
0f70405041 Update build.yml 2022-12-10 23:37:22 +08:00
399888f976 Update Task page translates 2022-12-10 18:14:54 +08:00
a8a0a14713 fix connect command issue 2022-12-10 17:57:51 +08:00
59af1e468d Add Task Page (#166) 2022-12-10 17:57:51 +08:00
0d1bad5551 Update version to v1.8.0 2022-12-10 17:57:50 +08:00
7eb2ff1624 Add categories to item page 2022-12-10 17:57:50 +08:00
72351ba60f Update 3.3 Resources (Items/Avatars/Weapons) 2022-12-10 17:57:50 +08:00
7dc2dcc9db Update build.yml 2022-12-08 17:17:15 +08:00
5b4a7d784d Create build.yml 2022-12-08 16:43:30 +08:00
1d8d199af7 Fix the problem that the next time it cannot be started when it is closed when it is minimized 2022-12-03 11:41:09 +08:00
c4e29dc000 Update version to v1.7.6 2022-12-03 11:32:53 +08:00
72ec031f8a Fix window location issue (#161) 2022-12-03 11:27:51 +08:00
2300b8d5db Add program log 2022-12-02 20:50:12 +08:00
7ec81ab146 Check the data directory only once 2022-12-01 19:50:05 +08:00
cf3ffeb8c6 Fix data file dir does not exist (#164) 2022-12-01 19:41:45 +08:00
118a7fe0f1 Update version to v1.7.5 2022-11-29 13:11:58 +08:00
005c68cc5b Optimize search(#149 #163) 2022-11-29 13:10:00 +08:00
223 changed files with 66801 additions and 27786 deletions

32
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
name: Build project
on:
push:
branches:
- main
paths:
- Source/**
pull_request:
branches:
- main
paths:
- Source/**
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v1.1.3
- name: Build release
run: msbuild Source/GrasscutterTools.sln /p:Configuration=Release /t:build /restore
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: GrasscutterTools
path: Source/GrasscutterTools/bin/Release/GrasscutterTools.exe

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -3,19 +3,51 @@
[![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)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=fBizzp6RwJsIY7gFlmd4L-WG0V3aF8X3&authKey=mTjf%2B7jCIZess1HTRi05e5yi%2FHKA1auMwE8%2FJ960PFWk8WMATST654gWPi4OTHTZ&noverify=0&group_code=835489603)
English | [简体中文](README_zh-cn.md) | [Русский](README_ru-RU.md)
English | [简体中文](README_zh-cn.md) | [繁體中文](README_zh-tw.md) | [Русский](README_ru-RU.md)
## Commands Generator
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
Please download the latest committed automated build from [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml), or a release from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) (may be behind)
Support 简体中文, 繁中文, English and Русский languages.
Support 简体中文, 繁中文, English and Русский languages.
> **Warning**: app look may be different rather than on screenshots. It may also contain translation errors and a lack of certain resources. **We're welcome everyone to contribute to their [improvement](/Source/GrasscutterTools/Resources/en-us)**
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> If you cannot connect to the server, please make sure the server address is correct.
>
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
>
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
## Update log
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots-en/21-HotKey.png)
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-en/7-ChangeScene.png)
![Activity Editor](Doc/Screenshots-en/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots-en/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots-en/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Gadget](Doc/Screenshots-en/6-SpawnEntity.png)
@@ -37,21 +69,6 @@ Added [AttackModifier](https://github.com/NotThorny/AttackModifier), [AttackInfu
![Mail Editor](Doc/Screenshots-en/16-MailEditor.png)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> If you cannot connect to the server, please make sure the server address is correct.
>
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
>
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
---

View File

@@ -3,18 +3,52 @@
[![GitHub лицензия](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![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)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[English](README.md) | [简体中文](README_zh-cn.md) | Русский - Перевод [Юрий Дворецкий](https://github.com/yurikenjx) (с исправлениями от [EgorBron](https://github.com/EgorBron))
[English](README.md) | [简体中文](README_zh-cn.md) | [繁體中文](README_zh-tw.md) | Русский - Перевод [Юрий Дворецкий](https://github.com/yurikenjx) (с исправлениями от [EgorBron](https://github.com/EgorBron))
## Генератор команд (GCG)
Загрузите последнюю версию из вкладки [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases).
Пожалуйста, загрузите последнюю подтвержденную автоматизированную сборку из [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml) или выпуск из [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) (может отставать)
GCG поддерживает 简体中文 (китайский упр.), 繁中文 (китайский трад.), English (английский) и Русский языки.
GCG поддерживает 简体中文 (китайский упр.), 繁中文 (китайский трад.), English (английский) и Русский языки.
> **Warning**: вид приложения может отличаться от скриншотов. Также в нём могут присутствовать ошибки в переводе и отсутсвие некоторых ресурсов. **Мы приглашаем всех сделать вклад в их [улучшение](/Source/GrasscutterTools/Resources/ru-ru)**
## Удаленная команда (OpenCommand)
Чтобы использовать команды прямо из GCG, серверу требуется плагин [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin).
![Open Command](Doc/Screenshots/OpenCommand.gif)
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
>
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
>
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
>
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
## Лог обновлений
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots-en/21-HotKey.png)
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-ru/12-Scenes.png)
![Activity Editor](Doc/Screenshots-ru/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots-ru/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots-ru/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Улучшенный спавн](Doc/Screenshots-ru/5-Spawn.png)
@@ -36,22 +70,6 @@ GCG поддерживает 简体中文 (китайский упр.), 繁体
![Редактор писем](Doc/Screenshots-ru/10-Mail.png)
## Удаленная команда (OpenCommand)
Чтобы использовать команды прямо из GCG, серверу требуется плагин [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin).
![Open Command](Doc/Screenshots/OpenCommand.gif)
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
>
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
>
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
>
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
---
## Скриншоты

View File

@@ -3,19 +3,51 @@
[![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)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=fBizzp6RwJsIY7gFlmd4L-WG0V3aF8X3&authKey=mTjf%2B7jCIZess1HTRi05e5yi%2FHKA1auMwE8%2FJ960PFWk8WMATST654gWPi4OTHTZ&noverify=0&group_code=835489603)
[English](README.md) | 简体中文 | [Русский](README_ru-RU.md)
[English](README.md) | 简体中文 | [繁體中文](README_zh-tw.md) | [Русский](README_ru-RU.md)
## Commands Generator
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
请从 [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml) 中下载最新提交的自动构建版本,或者从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中下载发布版本(可能落后)
本工具支持 简体中文, 繁中文, English 与 Русский 语言。
本工具支持 简体中文, 繁中文, English 与 Русский 语言。
> **Warning**: 应用程序的外观可能与截图上的不同。它也可能包含翻译错误和缺乏某些资源。我们欢迎大家为他们的<a href="./Source/GrasscutterTools/Resources/zh-cn">改进</a>作出贡献。
> **Warning**: 应用程序的外观可能与截图上的不同。它也可能包含翻译错误和缺乏某些资源。**我们欢迎各位为此工具做出贡献并<a href="./Source/GrasscutterTools/Resources/zh-cn">改进</a> : )**
## Update log
## 远程执行
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
>
> 建议配置服务器为HTTP模式如图所示(config.json)
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
>
> 如果使用的不是`80`端口则要在url中指定访问的端口号http://127.0.0.1:443
## 更新概要
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots/21-HotKey.png)
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots/7-ChangeScene.png)
![Activity Editor](Doc/Screenshots/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Spawns](Doc/Screenshots/6-SpawnEntity.png)
@@ -42,21 +74,6 @@
![Mail Editor](Doc/Screenshots/16-MailEditor.png)
## 远程执行
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
>
> 建议配置服务器为HTTP模式如图所示(config.json)
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
>
> 如果使用的不是`80`端口则要在url中指定访问的端口号http://127.0.0.1:443
---
## 软件截图

107
README_zh-tw.md Normal file
View File

@@ -0,0 +1,107 @@
# Grasscutter Tools
[![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)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=fBizzp6RwJsIY7gFlmd4L-WG0V3aF8X3&authKey=mTjf%2B7jCIZess1HTRi05e5yi%2FHKA1auMwE8%2FJ960PFWk8WMATST654gWPi4OTHTZ&noverify=0&group_code=835489603)
[English](README.md) | [简体中文](README_zh-cn.md) | 繁體中文 | [Русский](README_ru-RU.md)
## 指令產生工具
請從 [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml) 中下載最新提交的自動構建版本,或者從 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中下載發布版本(可能落後)
本工具支援 简体中文、繁體中文、English 及 Русский 上述語言。
> **Warning**: 程式中的實際外觀可能會與截圖中的內容不同。其中也可能包含翻譯錯誤及缺乏特定資源。**我們歡迎各位為此工具做出貢獻並[改進](/Source/GrasscutterTools/Resources/zh-tw)**
## 遠端控制
伺服器需要安裝 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件
![OpenCommand](Doc/Screenshots-tw/OpenCommand.gif)
> 如果你無法連接至伺服器,請確認輸入的伺服器位址是否正確。
>
> 建議將伺服器調整為HTTP模式如下圖所示(config.json):
> ![ConfigHttp](Doc/Screenshots-tw/ConfigHttp.png)
>
> 你可藉由任何瀏覽器輸入網址 http://127.0.0.1/status/server 以測試伺服器是否正常運作。
>
> 如果你並非使用`80`端口, 則須在網址後輸入指定端口: http://127.0.0.1:443
## 更新日誌
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots/21-HotKey.png)
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-tw/7-ChangeScene.png)
![Activity Editor](Doc/Screenshots-tw/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots-tw/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots-tw/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Spawns](Doc/Screenshots-tw/6-SpawnEntity.png)
![AttackMod](Doc/Screenshots-tw/6.1-AttackMod.png)
![AttackInfuse](Doc/Screenshots-tw/6.2-AttackInfuse.png)
新增 [攻擊修改](https://github.com/NotThorny/AttackModifier)、[攻擊注入](https://github.com/snoobi-seggs/AttackInfusedWithItem)、[主角切換元素](https://github.com/Penelopeep/SwitchElementTraveller)等插件指令產生
![AttackInfusedWithItem Gif](Doc/Screenshots-tw/AttackMod.gif)
### GrasscutterTools-v1.7.2
![Shop Editor](Doc/Screenshots-tw/17-ShopEditor.png)
### GrasscutterTools-v1.7.1
- 新增 Gadgets
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots-tw/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots-tw/15-DropEditor.png)
![Mail Editor](Doc/Screenshots-tw/16-MailEditor.png)
---
## 工具截圖
![Logo](Doc/Screenshots-tw/GrasscutterLogo.png)
![Home](Doc/Screenshots-tw/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots-tw/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots-tw/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots-tw/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots-tw/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots-tw/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots-tw/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots-tw/7-ChangeScene.png)
![Management](Doc/Screenshots-tw/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-tw/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-tw/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots-tw/12-Remote.png)
![Quest Screenshort](Doc/Screenshots-tw/13-Quest.png)

View File

@@ -64,6 +64,18 @@
<setting name="IsIncludeUID" serializeAs="String">
<value>False</value>
</setting>
<setting name="NavContainerSplitterDistance" serializeAs="String">
<value>0</value>
</setting>
<setting name="ActivityConfigJsonPath" serializeAs="String">
<value />
</setting>
<setting name="ProjectResourcePath" serializeAs="String">
<value />
</setting>
<setting name="IsUpgraded" serializeAs="String">
<value>False</value>
</setting>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -0,0 +1,346 @@
namespace GrasscutterTools.Forms
{
partial class FormActivityEditor
{
/// <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(FormActivityEditor));
this.BtnSave = new System.Windows.Forms.Button();
this.BtnLoad = new System.Windows.Forms.Button();
this.ActivityConfigJsonPath = new System.Windows.Forms.TextBox();
this.LblActivityConfigJsonPath = new System.Windows.Forms.Label();
this.GrpAllActivity = new System.Windows.Forms.GroupBox();
this.ListAllActivity = new System.Windows.Forms.ListView();
this.ColumnActivityId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColumnActivityName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpFileActivity = new System.Windows.Forms.GroupBox();
this.ListActivityConfigItems = new System.Windows.Forms.ListView();
this.ColActivityId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColActivityTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColActivityBeginTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColActivityEndTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpActivityInfo = new System.Windows.Forms.GroupBox();
this.LblActivityTitle = new System.Windows.Forms.Label();
this.LblActivityParmEditTip = new System.Windows.Forms.Label();
this.BtnDelete = new System.Windows.Forms.Button();
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
this.DTPEndTime = new System.Windows.Forms.DateTimePicker();
this.DTPBeginTime = new System.Windows.Forms.DateTimePicker();
this.TxtMeetCondList = new System.Windows.Forms.TextBox();
this.NUDScheduleId = new System.Windows.Forms.NumericUpDown();
this.NUDActivityType = new System.Windows.Forms.NumericUpDown();
this.NUDActivityId = new System.Windows.Forms.NumericUpDown();
this.LblEndTime = new System.Windows.Forms.Label();
this.LblBeginTime = new System.Windows.Forms.Label();
this.LblMeetCondList = new System.Windows.Forms.Label();
this.LblScheduleId = new System.Windows.Forms.Label();
this.LblActivityType = new System.Windows.Forms.Label();
this.LblActivityId = new System.Windows.Forms.Label();
this.GrpAllActivity.SuspendLayout();
this.GrpFileActivity.SuspendLayout();
this.GrpActivityInfo.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityType)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityId)).BeginInit();
this.SuspendLayout();
//
// BtnSave
//
resources.ApplyResources(this.BtnSave, "BtnSave");
this.BtnSave.Name = "BtnSave";
this.BtnSave.UseVisualStyleBackColor = true;
this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click);
//
// BtnLoad
//
resources.ApplyResources(this.BtnLoad, "BtnLoad");
this.BtnLoad.Name = "BtnLoad";
this.BtnLoad.UseVisualStyleBackColor = true;
this.BtnLoad.Click += new System.EventHandler(this.BtnLoad_Click);
//
// ActivityConfigJsonPath
//
resources.ApplyResources(this.ActivityConfigJsonPath, "ActivityConfigJsonPath");
this.ActivityConfigJsonPath.Name = "ActivityConfigJsonPath";
//
// LblActivityConfigJsonPath
//
resources.ApplyResources(this.LblActivityConfigJsonPath, "LblActivityConfigJsonPath");
this.LblActivityConfigJsonPath.Name = "LblActivityConfigJsonPath";
//
// GrpAllActivity
//
resources.ApplyResources(this.GrpAllActivity, "GrpAllActivity");
this.GrpAllActivity.Controls.Add(this.ListAllActivity);
this.GrpAllActivity.Name = "GrpAllActivity";
this.GrpAllActivity.TabStop = false;
//
// ListAllActivity
//
resources.ApplyResources(this.ListAllActivity, "ListAllActivity");
this.ListAllActivity.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColumnActivityId,
this.ColumnActivityName});
this.ListAllActivity.FullRowSelect = true;
this.ListAllActivity.HideSelection = false;
this.ListAllActivity.MultiSelect = false;
this.ListAllActivity.Name = "ListAllActivity";
this.ListAllActivity.UseCompatibleStateImageBehavior = false;
this.ListAllActivity.View = System.Windows.Forms.View.Details;
this.ListAllActivity.SelectedIndexChanged += new System.EventHandler(this.ListAllActivity_SelectedIndexChanged);
//
// ColumnActivityId
//
resources.ApplyResources(this.ColumnActivityId, "ColumnActivityId");
//
// ColumnActivityName
//
resources.ApplyResources(this.ColumnActivityName, "ColumnActivityName");
//
// GrpFileActivity
//
resources.ApplyResources(this.GrpFileActivity, "GrpFileActivity");
this.GrpFileActivity.Controls.Add(this.ListActivityConfigItems);
this.GrpFileActivity.Name = "GrpFileActivity";
this.GrpFileActivity.TabStop = false;
//
// ListActivityConfigItems
//
resources.ApplyResources(this.ListActivityConfigItems, "ListActivityConfigItems");
this.ListActivityConfigItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColActivityId,
this.ColActivityTitle,
this.ColActivityBeginTime,
this.ColActivityEndTime});
this.ListActivityConfigItems.FullRowSelect = true;
this.ListActivityConfigItems.HideSelection = false;
this.ListActivityConfigItems.MultiSelect = false;
this.ListActivityConfigItems.Name = "ListActivityConfigItems";
this.ListActivityConfigItems.UseCompatibleStateImageBehavior = false;
this.ListActivityConfigItems.View = System.Windows.Forms.View.Details;
this.ListActivityConfigItems.SelectedIndexChanged += new System.EventHandler(this.ListActivityConfigItems_SelectedIndexChanged);
//
// ColActivityId
//
resources.ApplyResources(this.ColActivityId, "ColActivityId");
//
// ColActivityTitle
//
resources.ApplyResources(this.ColActivityTitle, "ColActivityTitle");
//
// ColActivityBeginTime
//
resources.ApplyResources(this.ColActivityBeginTime, "ColActivityBeginTime");
//
// ColActivityEndTime
//
resources.ApplyResources(this.ColActivityEndTime, "ColActivityEndTime");
//
// GrpActivityInfo
//
resources.ApplyResources(this.GrpActivityInfo, "GrpActivityInfo");
this.GrpActivityInfo.Controls.Add(this.LblActivityTitle);
this.GrpActivityInfo.Controls.Add(this.LblActivityParmEditTip);
this.GrpActivityInfo.Controls.Add(this.BtnDelete);
this.GrpActivityInfo.Controls.Add(this.BtnAddOrUpdate);
this.GrpActivityInfo.Controls.Add(this.DTPEndTime);
this.GrpActivityInfo.Controls.Add(this.DTPBeginTime);
this.GrpActivityInfo.Controls.Add(this.TxtMeetCondList);
this.GrpActivityInfo.Controls.Add(this.NUDScheduleId);
this.GrpActivityInfo.Controls.Add(this.NUDActivityType);
this.GrpActivityInfo.Controls.Add(this.NUDActivityId);
this.GrpActivityInfo.Controls.Add(this.LblEndTime);
this.GrpActivityInfo.Controls.Add(this.LblBeginTime);
this.GrpActivityInfo.Controls.Add(this.LblMeetCondList);
this.GrpActivityInfo.Controls.Add(this.LblScheduleId);
this.GrpActivityInfo.Controls.Add(this.LblActivityType);
this.GrpActivityInfo.Controls.Add(this.LblActivityId);
this.GrpActivityInfo.Name = "GrpActivityInfo";
this.GrpActivityInfo.TabStop = false;
//
// LblActivityTitle
//
resources.ApplyResources(this.LblActivityTitle, "LblActivityTitle");
this.LblActivityTitle.AutoEllipsis = true;
this.LblActivityTitle.ForeColor = System.Drawing.SystemColors.GrayText;
this.LblActivityTitle.Name = "LblActivityTitle";
//
// LblActivityParmEditTip
//
resources.ApplyResources(this.LblActivityParmEditTip, "LblActivityParmEditTip");
this.LblActivityParmEditTip.ForeColor = System.Drawing.SystemColors.GrayText;
this.LblActivityParmEditTip.Name = "LblActivityParmEditTip";
//
// 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);
//
// DTPEndTime
//
resources.ApplyResources(this.DTPEndTime, "DTPEndTime");
this.DTPEndTime.Name = "DTPEndTime";
//
// DTPBeginTime
//
resources.ApplyResources(this.DTPBeginTime, "DTPBeginTime");
this.DTPBeginTime.Name = "DTPBeginTime";
//
// TxtMeetCondList
//
resources.ApplyResources(this.TxtMeetCondList, "TxtMeetCondList");
this.TxtMeetCondList.Name = "TxtMeetCondList";
//
// NUDScheduleId
//
resources.ApplyResources(this.NUDScheduleId, "NUDScheduleId");
this.NUDScheduleId.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDScheduleId.Name = "NUDScheduleId";
//
// NUDActivityType
//
resources.ApplyResources(this.NUDActivityType, "NUDActivityType");
this.NUDActivityType.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDActivityType.Name = "NUDActivityType";
//
// NUDActivityId
//
resources.ApplyResources(this.NUDActivityId, "NUDActivityId");
this.NUDActivityId.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDActivityId.Name = "NUDActivityId";
this.NUDActivityId.ValueChanged += new System.EventHandler(this.NUDActivityId_ValueChanged);
//
// LblEndTime
//
resources.ApplyResources(this.LblEndTime, "LblEndTime");
this.LblEndTime.Name = "LblEndTime";
//
// LblBeginTime
//
resources.ApplyResources(this.LblBeginTime, "LblBeginTime");
this.LblBeginTime.Name = "LblBeginTime";
//
// LblMeetCondList
//
resources.ApplyResources(this.LblMeetCondList, "LblMeetCondList");
this.LblMeetCondList.Name = "LblMeetCondList";
//
// LblScheduleId
//
resources.ApplyResources(this.LblScheduleId, "LblScheduleId");
this.LblScheduleId.Name = "LblScheduleId";
//
// LblActivityType
//
resources.ApplyResources(this.LblActivityType, "LblActivityType");
this.LblActivityType.Name = "LblActivityType";
//
// LblActivityId
//
resources.ApplyResources(this.LblActivityId, "LblActivityId");
this.LblActivityId.Name = "LblActivityId";
//
// FormActivityEditor
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.GrpAllActivity);
this.Controls.Add(this.GrpActivityInfo);
this.Controls.Add(this.GrpFileActivity);
this.Controls.Add(this.BtnSave);
this.Controls.Add(this.BtnLoad);
this.Controls.Add(this.ActivityConfigJsonPath);
this.Controls.Add(this.LblActivityConfigJsonPath);
this.Name = "FormActivityEditor";
this.GrpAllActivity.ResumeLayout(false);
this.GrpFileActivity.ResumeLayout(false);
this.GrpActivityInfo.ResumeLayout(false);
this.GrpActivityInfo.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityType)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityId)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button BtnSave;
private System.Windows.Forms.Button BtnLoad;
private System.Windows.Forms.TextBox ActivityConfigJsonPath;
private System.Windows.Forms.Label LblActivityConfigJsonPath;
private System.Windows.Forms.GroupBox GrpAllActivity;
private System.Windows.Forms.GroupBox GrpFileActivity;
private System.Windows.Forms.GroupBox GrpActivityInfo;
private System.Windows.Forms.ListView ListAllActivity;
private System.Windows.Forms.Label LblEndTime;
private System.Windows.Forms.Label LblBeginTime;
private System.Windows.Forms.Label LblMeetCondList;
private System.Windows.Forms.Label LblScheduleId;
private System.Windows.Forms.Label LblActivityType;
private System.Windows.Forms.Label LblActivityId;
private System.Windows.Forms.Button BtnDelete;
private System.Windows.Forms.Button BtnAddOrUpdate;
private System.Windows.Forms.DateTimePicker DTPEndTime;
private System.Windows.Forms.DateTimePicker DTPBeginTime;
private System.Windows.Forms.TextBox TxtMeetCondList;
private System.Windows.Forms.NumericUpDown NUDScheduleId;
private System.Windows.Forms.NumericUpDown NUDActivityType;
private System.Windows.Forms.NumericUpDown NUDActivityId;
private System.Windows.Forms.Label LblActivityParmEditTip;
private System.Windows.Forms.Label LblActivityTitle;
private System.Windows.Forms.ColumnHeader ColumnActivityId;
private System.Windows.Forms.ColumnHeader ColumnActivityName;
private System.Windows.Forms.ListView ListActivityConfigItems;
private System.Windows.Forms.ColumnHeader ColActivityId;
private System.Windows.Forms.ColumnHeader ColActivityTitle;
private System.Windows.Forms.ColumnHeader ColActivityBeginTime;
private System.Windows.Forms.ColumnHeader ColActivityEndTime;
}
}

View File

@@ -0,0 +1,310 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Activity;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Forms
{
public partial class FormActivityEditor : Form
{
#region - -
private List<ActivityConfigItem> ActivityConfigItems = new List<ActivityConfigItem>();
#endregion - -
#region - -
public FormActivityEditor()
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
DTPBeginTime.Value = DateTime.Today;
DTPEndTime.Value = DateTime.Today.AddMonths(1);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
LoadAllActivity();
try
{
// 加载文件路径
var path = Settings.Default.ActivityConfigJsonPath;
ActivityConfigJsonPath.Text = path;
if (!string.IsNullOrEmpty(path) && File.Exists(path))
LoadActivityConfig(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
Settings.Default.ActivityConfigJsonPath = ActivityConfigJsonPath.Text;
base.OnFormClosed(e);
}
#endregion - -
#region - ActivityConfig.json -
/// <summary>
/// 加载按钮点击时触发
/// </summary>
private void BtnLoad_Click(object sender, EventArgs e)
{
try
{
var path = ActivityConfigJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new OpenFileDialog
{
FileName = "ActivityConfig.json",
Filter = "ActivityConfig.Json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = ActivityConfigJsonPath.Text = dialog.FileName;
else
return;
}
// 反序列化
LoadActivityConfig(path);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 加载活动配置
/// </summary>
/// <param name="path">ActivityConfig.json 文件路径</param>
private void LoadActivityConfig(string path)
{
ActivityConfigItems = JsonConvert.DeserializeObject<List<ActivityConfigItem>>(File.ReadAllText(path)) ?? new List<ActivityConfigItem>();
ListActivityConfigItems.BeginUpdate();
ListActivityConfigItems.Items.Clear();
ListActivityConfigItems.Items.AddRange(ActivityConfigItems.Select(Convert).ToArray());
ListActivityConfigItems.EndUpdate();
}
private ListViewItem Convert(ActivityConfigItem item)
{
return new ListViewItem(new[]
{
item.ActivityId.ToString(),
GameData.Activity[item.ActivityId],
item.BeginTime.ToShortDateString(),
item.EndTime.ToShortDateString(),
});
}
/// <summary>
/// 保存按钮点击时触发
/// </summary>
private void BtnSave_Click(object sender, EventArgs e)
{
try
{
var path = ActivityConfigJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new SaveFileDialog
{
FileName = "ActivityConfig.json",
Filter = "ActivityConfig.json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = ActivityConfigJsonPath.Text = dialog.FileName;
else
return;
}
// 序列化
File.WriteAllText(path, JsonConvert.SerializeObject(ActivityConfigItems, Formatting.Indented));
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - ActivityConfig.json -
#region - -
/// <summary>
/// 加载所有活动
/// </summary>
private void LoadAllActivity()
{
ListAllActivity.BeginUpdate();
foreach (var grp in GameData.Activity)
{
var grpControl = ListAllActivity.Groups.Add(grp.Key, grp.Key);
for (var i = 0; i < grp.Value.Count; i++)
{
ListAllActivity.Items.Add(new ListViewItem(new[]
{
grp.Value.Ids[i].ToString(), grp.Value.Names[i]
}, grpControl));
}
}
ListAllActivity.EndUpdate();
}
/// <summary>
/// 所有活动列表选中项改变时触发
/// </summary>
private void ListAllActivity_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (ListAllActivity.SelectedItems.Count == 0)
return;
NUDActivityId.Text = ListAllActivity.SelectedItems[0].Text;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 活动ID改变时触发
/// </summary>
private void NUDActivityId_ValueChanged(object sender, EventArgs e)
{
// 更新活动名称到提示文本
var activityId = (int)NUDActivityId.Value;
LblActivityTitle.Text = GameData.Activity[activityId];
// 检查是否在列表中,允许删除
var item = ActivityConfigItems.Find(it => it.ActivityId == activityId);
BtnDelete.Enabled = item != null;
}
/// <summary>
/// 点击添加或更新按钮时触发
/// </summary>
private async void BtnAddOrUpdate_Click(object sender, EventArgs e)
{
var activityId = (int)NUDActivityId.Value;
var isNew = false;
var item = ActivityConfigItems.Find(it => it.ActivityId == activityId);
if (item == null)
{
item = new ActivityConfigItem();
isNew = true;
}
item.ActivityId = activityId;
item.ActivityType = (int)NUDActivityType.Value;
item.ScheduleId = (int)NUDScheduleId.Value;
try
{
item.MeetCondList = !string.IsNullOrEmpty(TxtMeetCondList.Text)
? TxtMeetCondList.Text.Split(',').Select(it => int.Parse(it.Trim())).ToList()
: new List<int>();
}
catch (Exception)
{
item.MeetCondList = new List<int>();
}
if (DTPBeginTime.Value > DTPEndTime.Value)
{
// ?
}
item.BeginTime = DTPBeginTime.Value.Date;
item.EndTime = DTPEndTime.Value.Date.AddDays(1).AddSeconds(-1);
if (isNew)
{
ActivityConfigItems.Add(item);
ListActivityConfigItems.Items.Add(Convert(item));
}
BtnDelete.Enabled = true;
await UIUtil.ButtonComplete(BtnAddOrUpdate);
}
/// <summary>
/// 点击删除按钮时触发
/// </summary>
private void BtnDelete_Click(object sender, EventArgs e)
{
var activityId = (int)NUDActivityId.Value;
var index = ActivityConfigItems.FindIndex(it => it.ActivityId == activityId);
if (index != -1)
{
ListActivityConfigItems.Items.RemoveAt(index);
ActivityConfigItems.RemoveAt(index);
}
BtnDelete.Enabled = false;
}
/// <summary>
/// 当前文件活动配置列表选中项改变时触发
/// </summary>
private void ListActivityConfigItems_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListActivityConfigItems.SelectedItems.Count == 0)
return;
var index = ListActivityConfigItems.SelectedIndices[0];
var configItem = ActivityConfigItems[index];
NUDActivityId.Value = configItem.ActivityId;
NUDActivityType.Value = configItem.ActivityType;
NUDScheduleId.Value = configItem.ScheduleId;
TxtMeetCondList.Text = configItem.MeetCondList?.Count > 0
? string.Join(",", configItem.MeetCondList)
: string.Empty;
DTPBeginTime.Value = configItem.BeginTime;
DTPEndTime.Value = configItem.EndTime;
}
#endregion - -
}
}

View File

@@ -0,0 +1,208 @@
<?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="BtnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Load</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>145, 17</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json Path:</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>All Activity by dplek</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>File</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>Begin time</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>End time</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>Activity info</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="LblActivityParmEditTip.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 251</value>
</data>
<data name="LblActivityParmEditTip.Size" type="System.Drawing.Size, System.Drawing">
<value>314, 17</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>Tip: Usually you only need to modify the activity time</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Add or Update</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>End Time</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Begin Time</value>
</data>
<data name="LblMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>MeetCondList</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>Schedule ID</value>
</data>
<data name="LblActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>Activity Type</value>
</data>
<data name="LblActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 17</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>Activity ID</value>
</data>
</root>

View File

@@ -0,0 +1,858 @@
<?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="&gt;&gt;LblActivityId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListAllActivity.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="GrpActivityInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>278, 41</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json 路径:</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ColActivityEndTime.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="ListActivityConfigItems.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;LblActivityType.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;LblActivityTitle.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;NUDActivityId.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="LblActivityParmEditTip.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="NUDActivityType.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="BtnLoad.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="NUDScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 101</value>
</data>
<data name="BtnAddOrUpdate.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;NUDScheduleId.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="ListAllActivity.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="LblScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 103</value>
</data>
<data name="&gt;&gt;LblBeginTime.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;TxtMeetCondList.Name" xml:space="preserve">
<value>TxtMeetCondList</value>
</data>
<data name="LblBeginTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnLoad.Location" type="System.Drawing.Point, System.Drawing">
<value>671, 12</value>
</data>
<data name="&gt;&gt;ColActivityEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnDelete.Name" xml:space="preserve">
<value>BtnDelete</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Name" xml:space="preserve">
<value>NUDScheduleId</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="&gt;&gt;ListAllActivity.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;LblActivityType.Name" xml:space="preserve">
<value>LblActivityType</value>
</data>
<data name="LblActivityId.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>活动类型</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;GrpFileActivity.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 193</value>
</data>
<data name="&gt;&gt;NUDActivityId.Name" xml:space="preserve">
<value>NUDActivityId</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>活动开始时间</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</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="BtnSave.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;GrpAllActivity.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;ColumnActivityId.Name" xml:space="preserve">
<value>ColumnActivityId</value>
</data>
<data name="&gt;&gt;BtnSave.Name" xml:space="preserve">
<value>BtnSave</value>
</data>
<data name="&gt;&gt;LblBeginTime.Name" xml:space="preserve">
<value>LblBeginTime</value>
</data>
<data name="&gt;&gt;DTPEndTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;GrpAllActivity.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblEndTime.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;LblScheduleId.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;LblEndTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>开始时间</value>
</data>
<data name="GrpActivityInfo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="&gt;&gt;GrpAllActivity.Name" xml:space="preserve">
<value>GrpAllActivity</value>
</data>
<data name="NUDActivityId.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 43</value>
</data>
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 164</value>
</data>
<data name="BtnSave.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>199, 271</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ColActivityId.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>活动结束时间</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 删除</value>
</data>
<data name="ActivityConfigJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>176, 12</value>
</data>
<data name="LblActivityTitle.Size" type="System.Drawing.Size, System.Drawing">
<value>134, 17</value>
</data>
<data name="LblActivityTitle.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="LblActivityId.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="ColumnActivityId.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="&gt;&gt;NUDScheduleId.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;LblActivityConfigJsonPath.Name" xml:space="preserve">
<value>LblActivityConfigJsonPath</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.Name" xml:space="preserve">
<value>ListActivityConfigItems</value>
</data>
<data name="GrpAllActivity.Location" type="System.Drawing.Point, System.Drawing">
<value>612, 41</value>
</data>
<data name="&gt;&gt;BtnDelete.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;ColActivityId.Name" xml:space="preserve">
<value>ColActivityId</value>
</data>
<data name="BtnLoad.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;NUDActivityType.Name" xml:space="preserve">
<value>NUDActivityType</value>
</data>
<data name="GrpFileActivity.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="LblActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="GrpAllActivity.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>提示:通常情况下你只需要修改活动进行时间</value>
</data>
<data name="DTPBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
</data>
<data name="&gt;&gt;LblActivityId.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="LblScheduleId.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblActivityType.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="DTPEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 188</value>
</data>
<data name="&gt;&gt;LblActivityId.Name" xml:space="preserve">
<value>LblActivityId</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>900, 420</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>当前文件</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;LblMeetCondList.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ActivityConfig.json Editor</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.Parent" xml:space="preserve">
<value>GrpFileActivity</value>
</data>
<data name="DTPBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 159</value>
</data>
<data name="BtnLoad.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpAllActivity.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="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 9pt</value>
</data>
<data name="ColActivityId.Width" type="System.Int32, mscorlib">
<value>50</value>
</data>
<data name="&gt;&gt;LblMeetCondList.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="NUDActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="&gt;&gt;NUDActivityId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;LblEndTime.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="LblActivityParmEditTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="NUDActivityId.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="BtnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 30</value>
</data>
<data name="BtnDelete.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="&gt;&gt;BtnLoad.Name" xml:space="preserve">
<value>BtnLoad</value>
</data>
<data name="&gt;&gt;LblEndTime.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="NUDActivityType.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 72</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.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;NUDActivityType.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.Name" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;ColActivityId.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpFileActivity.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="LblActivityId.Text" xml:space="preserve">
<value>活动ID</value>
</data>
<data name="ColumnActivityId.Width" type="System.Int32, mscorlib">
<value>50</value>
</data>
<data name="LblActivityConfigJsonPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="ColActivityBeginTime.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
<data name="GrpFileActivity.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;DTPBeginTime.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;LblActivityTitle.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;LblActivityType.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;DTPBeginTime.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 30</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>结束时间</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.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;GrpFileActivity.Name" xml:space="preserve">
<value>GrpFileActivity</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ActivityConfigJsonPath.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="ActivityConfigJsonPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;BtnLoad.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblEndTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblBeginTime.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加载</value>
</data>
<data name="&gt;&gt;LblActivityTitle.Name" xml:space="preserve">
<value>LblActivityTitle</value>
</data>
<data name="GrpAllActivity.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;DTPBeginTime.Name" xml:space="preserve">
<value>DTPBeginTime</value>
</data>
<data name="TxtMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
</data>
<data name="ListActivityConfigItems.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 306</value>
</data>
<data name="LblActivityConfigJsonPath.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormActivityEditor</value>
</data>
<data name="&gt;&gt;LblScheduleId.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="LblActivityConfigJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>17, 15</value>
</data>
<data name="&gt;&gt;LblActivityId.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;ListAllActivity.Parent" xml:space="preserve">
<value>GrpAllActivity</value>
</data>
<data name="LblActivityType.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 74</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>活动名称</value>
</data>
<data name="&gt;&gt;BtnSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ColumnActivityName.Width" type="System.Int32, mscorlib">
<value>300</value>
</data>
<data name="ListActivityConfigItems.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LblActivityParmEditTip.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 17</value>
</data>
<data name="&gt;&gt;NUDActivityType.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="BtnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>776, 12</value>
</data>
<data name="LblMeetCondList.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblActivityTitle.Location" type="System.Drawing.Point, System.Drawing">
<value>173, 45</value>
</data>
<data name="ActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>489, 23</value>
</data>
<data name="&gt;&gt;NUDActivityType.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="LblActivityConfigJsonPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>884, 381</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="GrpAllActivity.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 328</value>
</data>
<data name="BtnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="LblActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="BtnLoad.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="GrpFileActivity.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 328</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>保存</value>
</data>
<data name="DTPEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
</data>
<data name="ColActivityTitle.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="&gt;&gt;DTPEndTime.Name" xml:space="preserve">
<value>DTPEndTime</value>
</data>
<data name="&gt;&gt;DTPBeginTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;ColumnActivityName.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ListAllActivity.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 306</value>
</data>
<data name="&gt;&gt;LblScheduleId.Name" xml:space="preserve">
<value>LblScheduleId</value>
</data>
<data name="&gt;&gt;ListAllActivity.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.Name" xml:space="preserve">
<value>LblActivityParmEditTip</value>
</data>
<data name="&gt;&gt;BtnLoad.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="LblBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.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="GrpActivityInfo.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>计划ID</value>
</data>
<data name="LblMeetCondList.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 133</value>
</data>
<data name="GrpFileActivity.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>活动信息</value>
</data>
<data name="BtnDelete.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="NUDActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="&gt;&gt;LblActivityTitle.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;LblMeetCondList.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="LblActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 17</value>
</data>
<data name="ListAllActivity.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve">
<value>BtnAddOrUpdate</value>
</data>
<data name="GrpActivityInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>328, 328</value>
</data>
<data name="&gt;&gt;ColumnActivityId.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DTPEndTime.ZOrder" xml:space="preserve">
<value>4</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="GrpAllActivity.Text" xml:space="preserve">
<value>已知活动 by dplek</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>活动名称</value>
</data>
<data name="&gt;&gt;LblScheduleId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.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="NUDScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 23</value>
</data>
<data name="&gt;&gt;ColActivityEndTime.Name" xml:space="preserve">
<value>ColActivityEndTime</value>
</data>
<data name="&gt;&gt;BtnSave.ZOrder" xml:space="preserve">
<value>3</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;GrpFileActivity.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LblMeetCondList.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="TxtMeetCondList.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 130</value>
</data>
<data name="&gt;&gt;LblBeginTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;ColActivityTitle.Name" xml:space="preserve">
<value>ColActivityTitle</value>
</data>
<data name="LblActivityType.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblActivityType.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="&gt;&gt;DTPEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnDelete.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="LblMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="&gt;&gt;LblEndTime.Name" xml:space="preserve">
<value>LblEndTime</value>
</data>
<data name="LblActivityId.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 45</value>
</data>
<data name="BtnSave.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="DTPEndTime.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="NUDScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ColActivityTitle.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="&gt;&gt;NUDActivityId.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="&gt;&gt;LblMeetCondList.Name" xml:space="preserve">
<value>LblMeetCondList</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>活动名称</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 271</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.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;ColActivityBeginTime.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TxtMeetCondList.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.Name" xml:space="preserve">
<value>ActivityConfigJsonPath</value>
</data>
<data name="DTPBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="LblActivityParmEditTip.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 251</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="LblScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;ColActivityBeginTime.Name" xml:space="preserve">
<value>ColActivityBeginTime</value>
</data>
<data name="&gt;&gt;ColumnActivityName.Name" xml:space="preserve">
<value>ColumnActivityName</value>
</data>
<data name="&gt;&gt;ListAllActivity.Name" xml:space="preserve">
<value>ListAllActivity</value>
</data>
<data name="ListActivityConfigItems.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>满足条件列表</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,221 @@
<?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="BtnSave.Text" xml:space="preserve">
<value>Сохранить</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Загрузить</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 17</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json Путь:</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>Вся деятельность by dplek</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>Текущий файл</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>Begin time</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>End time</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>Информация об активности</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>Название деятельности</value>
</data>
<data name="LblActivityParmEditTip.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 8pt</value>
</data>
<data name="LblActivityParmEditTip.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 236</value>
</data>
<data name="LblActivityParmEditTip.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 32</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>Совет: обычно вам нужно изменить только
время активности</value>
</data>
<data name="BtnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>213, 271</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 271</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 30</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Добавить или обновить</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>End time</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Begin time</value>
</data>
<data name="LblMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>MeetCondList</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 17</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>Scheduled ID</value>
</data>
<data name="LblActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>Activty Type</value>
</data>
<data name="LblActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 17</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>Activity ID</value>
</data>
</root>

View File

@@ -0,0 +1,174 @@
<?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="BtnLoad.Text" xml:space="preserve">
<value>加載</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json 路徑:</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>已知活動 by dplek</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>活動名稱</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>當前文件</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>活動名稱</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>開始時間</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>結束時間</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>活動信息</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>活動名稱</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>提示:通常情況下你只需要修改活動進行時間</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>活動結束時間</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>活動開始時間</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>滿足條件列表</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>計劃ID</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>活動類型</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>活動ID</value>
</data>
</root>

View File

@@ -30,10 +30,10 @@ namespace GrasscutterTools.Forms
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGachaBannersEditor3));
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea9 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend9 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series17 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.Series series18 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.GrpBannerValues = new System.Windows.Forms.GroupBox();
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
this.CmbTitlePath = new System.Windows.Forms.ComboBox();
@@ -59,7 +59,6 @@ namespace GrasscutterTools.Forms
this.LblSortId = new System.Windows.Forms.Label();
this.NUDGachaType = new System.Windows.Forms.NumericUpDown();
this.NUDSortId = new System.Windows.Forms.NumericUpDown();
this.LblGachaTypeTip = new System.Windows.Forms.Label();
this.LblEndTime = new System.Windows.Forms.Label();
this.LblScheduleId = new System.Windows.Forms.Label();
this.LblBeginTime = new System.Windows.Forms.Label();
@@ -93,6 +92,7 @@ namespace GrasscutterTools.Forms
this.LblPoolWeight5 = new System.Windows.Forms.Label();
this.ChartWeights = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.GrpBanners = new System.Windows.Forms.GroupBox();
this.LnkCheckLatestBanners = new System.Windows.Forms.LinkLabel();
this.ListBanners = new System.Windows.Forms.ListBox();
this.FLPBannersControl = new System.Windows.Forms.FlowLayoutPanel();
this.BtnDelete = new System.Windows.Forms.Button();
@@ -145,7 +145,6 @@ namespace GrasscutterTools.Forms
this.GrpBannerValues.Controls.Add(this.LblSortId);
this.GrpBannerValues.Controls.Add(this.NUDGachaType);
this.GrpBannerValues.Controls.Add(this.NUDSortId);
this.GrpBannerValues.Controls.Add(this.LblGachaTypeTip);
this.GrpBannerValues.Controls.Add(this.LblEndTime);
this.GrpBannerValues.Controls.Add(this.LblScheduleId);
this.GrpBannerValues.Controls.Add(this.LblBeginTime);
@@ -345,11 +344,6 @@ namespace GrasscutterTools.Forms
0,
0});
//
// LblGachaTypeTip
//
resources.ApplyResources(this.LblGachaTypeTip, "LblGachaTypeTip");
this.LblGachaTypeTip.Name = "LblGachaTypeTip";
//
// LblEndTime
//
resources.ApplyResources(this.LblEndTime, "LblEndTime");
@@ -569,44 +563,52 @@ namespace GrasscutterTools.Forms
// ChartWeights
//
resources.ApplyResources(this.ChartWeights, "ChartWeights");
chartArea9.AxisX.Minimum = 0D;
chartArea9.AxisY.Maximum = 100D;
chartArea9.AxisY.Minimum = 0D;
chartArea9.AxisY.Title = "%";
chartArea9.Name = "ChartArea1";
this.ChartWeights.ChartAreas.Add(chartArea9);
legend9.Name = "Legend1";
this.ChartWeights.Legends.Add(legend9);
chartArea2.AxisX.Minimum = 0D;
chartArea2.AxisY.Maximum = 100D;
chartArea2.AxisY.Minimum = 0D;
chartArea2.AxisY.Title = "%";
chartArea2.Name = "ChartArea1";
this.ChartWeights.ChartAreas.Add(chartArea2);
legend2.Name = "Legend1";
this.ChartWeights.Legends.Add(legend2);
this.ChartWeights.Name = "ChartWeights";
series17.ChartArea = "ChartArea1";
series17.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series17.Color = System.Drawing.Color.OrangeRed;
series17.Label = "(#VALX, #VAL)";
series17.Legend = "Legend1";
series17.LegendText = "5*";
series17.Name = "SeriesWeight5";
series17.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series17.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
series18.ChartArea = "ChartArea1";
series18.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series18.Color = System.Drawing.Color.Purple;
series18.Label = "(#VALX, #VAL)";
series18.Legend = "Legend1";
series18.LegendText = "4*";
series18.Name = "SeriesWeight4";
series18.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series18.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
this.ChartWeights.Series.Add(series17);
this.ChartWeights.Series.Add(series18);
series3.ChartArea = "ChartArea1";
series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series3.Color = System.Drawing.Color.OrangeRed;
series3.Label = "(#VALX, #VAL)";
series3.Legend = "Legend1";
series3.LegendText = "5*";
series3.Name = "SeriesWeight5";
series3.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series3.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
series4.ChartArea = "ChartArea1";
series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series4.Color = System.Drawing.Color.Purple;
series4.Label = "(#VALX, #VAL)";
series4.Legend = "Legend1";
series4.LegendText = "4*";
series4.Name = "SeriesWeight4";
series4.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series4.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
this.ChartWeights.Series.Add(series3);
this.ChartWeights.Series.Add(series4);
//
// GrpBanners
//
resources.ApplyResources(this.GrpBanners, "GrpBanners");
this.GrpBanners.Controls.Add(this.LnkCheckLatestBanners);
this.GrpBanners.Controls.Add(this.ListBanners);
this.GrpBanners.Controls.Add(this.FLPBannersControl);
this.GrpBanners.Name = "GrpBanners";
this.GrpBanners.TabStop = false;
//
// LnkCheckLatestBanners
//
resources.ApplyResources(this.LnkCheckLatestBanners, "LnkCheckLatestBanners");
this.LnkCheckLatestBanners.Name = "LnkCheckLatestBanners";
this.LnkCheckLatestBanners.TabStop = true;
this.LnkCheckLatestBanners.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkCheckLatestBanners_LinkClicked);
//
// ListBanners
//
resources.ApplyResources(this.ListBanners, "ListBanners");
@@ -693,6 +695,7 @@ namespace GrasscutterTools.Forms
this.GrpBalance.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).EndInit();
this.GrpBanners.ResumeLayout(false);
this.GrpBanners.PerformLayout();
this.FLPBannersControl.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@@ -708,7 +711,6 @@ namespace GrasscutterTools.Forms
private System.Windows.Forms.Label LblSortId;
private System.Windows.Forms.NumericUpDown NUDGachaType;
private System.Windows.Forms.NumericUpDown NUDSortId;
private System.Windows.Forms.Label LblGachaTypeTip;
private System.Windows.Forms.Label LblEndTime;
private System.Windows.Forms.Label LblScheduleId;
private System.Windows.Forms.Label LblBeginTime;
@@ -767,5 +769,6 @@ namespace GrasscutterTools.Forms
private System.Windows.Forms.ComboBox CmbTitlePath;
private System.Windows.Forms.Label LblTitlePath;
private System.Windows.Forms.Button BtnClear;
private System.Windows.Forms.LinkLabel LnkCheckLatestBanners;
}
}

View File

@@ -28,6 +28,7 @@ using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Gacha;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
@@ -259,6 +260,11 @@ namespace GrasscutterTools.Forms
#region - -
private void LnkCheckLatestBanners_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
UIUtil.OpenURL("https://github.com/Zhaokugua/Grasscutter_Banners");
}
private void InitCheckedListBoxs()
{
ListFallbackItems.BeginUpdate();

View File

@@ -206,12 +206,6 @@
<data name="LblSortId.Text" xml:space="preserve">
<value>Sort</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>123, 17</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>Increment from 400</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
@@ -443,6 +437,15 @@
<data name="GrpBanners.Text" xml:space="preserve">
<value>Banners</value>
</data>
<data name="LnkCheckLatestBanners.Location" type="System.Drawing.Point, System.Drawing">
<value>141, -1</value>
</data>
<data name="LnkCheckLatestBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 17</value>
</data>
<data name="LnkCheckLatestBanners.Text" xml:space="preserve">
<value>Check latest Banners</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>Delete</value>
</data>

View File

@@ -144,6 +144,9 @@
<data name="&gt;&gt;ChkRemoveC6FormPool.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblEventChance4.Text" xml:space="preserve">
<value>4星活动爆率</value>
</data>
<data name="&gt;&gt;DTPEndTime.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
@@ -166,25 +169,25 @@
<value>34, 28</value>
</data>
<data name="&gt;&gt;LblSortIdTip.ZOrder" xml:space="preserve">
<value>31</value>
<value>30</value>
</data>
<data name="ColUpId.Width" type="System.Int32, mscorlib">
<value>65</value>
</data>
<data name="&gt;&gt;LblGachaTypeTip.ZOrder" xml:space="preserve">
<value>24</value>
</data>
<data name="LblCostItemAmount1.Text" xml:space="preserve">
<value>单抽消耗</value>
</data>
<data name="&gt;&gt;LblSortIdTip.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;LnkCheckLatestBanners.Parent" xml:space="preserve">
<value>GrpBanners</value>
</data>
<data name="LblCostItem.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="&gt;&gt;NUDEventChance5.Name" xml:space="preserve">
<value>NUDEventChance5</value>
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>卡池参数</value>
</data>
<data name="&gt;&gt;NUDGachaType.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -222,8 +225,8 @@
<data name="&gt;&gt;LblBeginTime.Name" xml:space="preserve">
<value>LblBeginTime</value>
</data>
<data name="&gt;&gt;ColUpName.Name" xml:space="preserve">
<value>ColUpName</value>
<data name="LnkCheckLatestBanners.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="ListBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>270, 512</value>
@@ -246,6 +249,9 @@
<data name="LblCostItem.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LnkCheckLatestBanners.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ListFallbackItems.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@@ -343,9 +349,6 @@
<data name="GrpBalance.Location" type="System.Drawing.Point, System.Drawing">
<value>294, 504</value>
</data>
<data name="&gt;&gt;GrpWeights.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="RbCostItem223.Text" xml:space="preserve">
<value>纠缠之缘</value>
</data>
@@ -385,6 +388,9 @@
<data name="&gt;&gt;LblBannersJson.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LnkCheckLatestBanners.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;BtnClear.Name" xml:space="preserve">
<value>BtnClear</value>
</data>
@@ -400,8 +406,11 @@
<data name="LblWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>55, 32</value>
</data>
<data name="NUDEventChance5.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 23</value>
</data>
<data name="&gt;&gt;LblScheduleIdTip.ZOrder" xml:space="preserve">
<value>29</value>
<value>28</value>
</data>
<data name="ChkRemoveC6FormPool.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -439,8 +448,8 @@
<data name="TxtWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 23</value>
</data>
<data name="&gt;&gt;NUDGachaType.ZOrder" xml:space="preserve">
<value>22</value>
<data name="&gt;&gt;LnkOpenOldEditor.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDCostItemAmount10.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
@@ -466,6 +475,9 @@
<data name="&gt;&gt;ListBanners.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;BtnLoad.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblCostItemAmount10.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
@@ -559,6 +571,9 @@
<data name="&gt;&gt;LblCostItemAmount10.Name" xml:space="preserve">
<value>LblCostItemAmount10</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>保存</value>
</data>
<data name="LblCostItemAmount1.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
@@ -579,7 +594,7 @@
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblBeginTime.ZOrder" xml:space="preserve">
<value>27</value>
<value>26</value>
</data>
<data name="&gt;&gt;NUDSortId.Name" xml:space="preserve">
<value>NUDSortId</value>
@@ -632,7 +647,7 @@
<value>ChartWeights</value>
</data>
<data name="&gt;&gt;RbCostItem224.ZOrder" xml:space="preserve">
<value>33</value>
<value>32</value>
</data>
<data name="GrpUpPool.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 351</value>
@@ -653,7 +668,7 @@
<value>740, 401</value>
</data>
<data name="&gt;&gt;FLPBannersControl.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="&gt;&gt;FLPBannersControl.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -673,6 +688,9 @@
<data name="LnkWeightHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>402, 0</value>
</data>
<data name="&gt;&gt;NUDGachaType.ZOrder" xml:space="preserve">
<value>22</value>
</data>
<data name="&gt;&gt;LblOptions.ZOrder" xml:space="preserve">
<value>8</value>
</data>
@@ -691,8 +709,8 @@
<data name="BtnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="&gt;&gt;BtnDelete.Name" xml:space="preserve">
<value>BtnDelete</value>
<data name="GrpFallbackPool.Location" type="System.Drawing.Point, System.Drawing">
<value>962, 41</value>
</data>
<data name="LblWeight5.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -718,20 +736,20 @@
<data name="LblOptions.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
</data>
<data name="NUDCostItemAmount10.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 23</value>
</data>
<data name="&gt;&gt;NUDEventChance5.Name" xml:space="preserve">
<value>NUDEventChance5</value>
</data>
<data name="CmbPrefab.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="GrpFallbackPool.Location" type="System.Drawing.Point, System.Drawing">
<value>962, 41</value>
<data name="&gt;&gt;GrpWeights.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;ListFallbackItems.Name" xml:space="preserve">
<value>ListFallbackItems</value>
@@ -761,7 +779,7 @@
<value>204, 329</value>
</data>
<data name="&gt;&gt;LblPrefabPath.ZOrder" xml:space="preserve">
<value>35</value>
<value>34</value>
</data>
<data name="&gt;&gt;LblSortIdTip.Name" xml:space="preserve">
<value>LblSortIdTip</value>
@@ -779,7 +797,7 @@
<value>29</value>
</data>
<data name="&gt;&gt;LblCostItem.ZOrder" xml:space="preserve">
<value>34</value>
<value>33</value>
</data>
<data name="&gt;&gt;ColFallbackName.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -796,9 +814,6 @@
<data name="ListFallbackItems.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 329</value>
</data>
<data name="&gt;&gt;LblGachaTypeTip.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="&gt;&gt;LblSortId.Name" xml:space="preserve">
<value>LblSortId</value>
</data>
@@ -835,25 +850,12 @@
<data name="LblTitlePath.Text" xml:space="preserve">
<value>封面标题</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblBannerType.ZOrder" xml:space="preserve">
<value>32</value>
<value>31</value>
</data>
<data name="GrpBannerValues.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="ListUpItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
</value>
</data>
<data name="LblEventChance5.Text" xml:space="preserve">
<value>5星活动爆率</value>
</data>
@@ -873,7 +875,7 @@
<value>RbCostItem223</value>
</data>
<data name="&gt;&gt;LblEndTime.ZOrder" xml:space="preserve">
<value>25</value>
<value>24</value>
</data>
<data name="&gt;&gt;BtnDelete.ZOrder" xml:space="preserve">
<value>0</value>
@@ -884,8 +886,8 @@
<data name="LblEventChance5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="TxtPoolWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 29</value>
<data name="LnkCheckLatestBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="GrpFallbackPool.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 351</value>
@@ -921,8 +923,8 @@
<data name="&gt;&gt;NUDEventChance4.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="&gt;&gt;RbCostItem223.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
<data name="BtnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="&gt;&gt;BtnSave.Name" xml:space="preserve">
<value>BtnSave</value>
@@ -939,9 +941,6 @@
<data name="&gt;&gt;LblWeight4.Name" xml:space="preserve">
<value>LblWeight4</value>
</data>
<data name="LblTitlePath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -954,8 +953,8 @@
<data name="NUDSortId.TabIndex" type="System.Int32, mscorlib">
<value>24</value>
</data>
<data name="LblEventChance4Tip.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
<data name="&gt;&gt;GrpBannerValues.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="GrpBannerValues.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
@@ -976,7 +975,7 @@
<value>2</value>
</data>
<data name="&gt;&gt;ListBanners.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="&gt;&gt;LnkOpenOldEditor.ZOrder" xml:space="preserve">
<value>10</value>
@@ -1002,9 +1001,6 @@
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="ListFallbackItems.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="ChkRemoveC6FormPool.TabIndex" type="System.Int32, mscorlib">
<value>33</value>
</data>
@@ -1044,8 +1040,8 @@
<data name="LblWeight4.Location" type="System.Drawing.Point, System.Drawing">
<value>55, 61</value>
</data>
<data name="&gt;&gt;LnkOpenOldEditor.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="LblEventChance4Tip.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LblPoolWeight4.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -1080,8 +1076,8 @@
<data name="LblCostItemAmount1.Location" type="System.Drawing.Point, System.Drawing">
<value>50, 175</value>
</data>
<data name="GrpBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>276, 563</value>
<data name="ChkAutoStripRateUpFromFallback.Size" type="System.Drawing.Size, System.Drawing">
<value>151, 21</value>
</data>
<data name="&gt;&gt;BtnSave.ZOrder" xml:space="preserve">
<value>1</value>
@@ -1113,11 +1109,8 @@
<data name="&gt;&gt;CmbTitlePath.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="&gt;&gt;GrpBannerValues.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;NUDScheduleId.ZOrder" xml:space="preserve">
<value>28</value>
<value>27</value>
</data>
<data name="&gt;&gt;LblPoolWeight4.Parent" xml:space="preserve">
<value>GrpBalance</value>
@@ -1125,6 +1118,9 @@
<data name="BtnLoad.Text" xml:space="preserve">
<value>加载</value>
</data>
<data name="LnkCheckLatestBanners.Text" xml:space="preserve">
<value>查看最新卡池</value>
</data>
<data name="NUDSortId.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
@@ -1146,6 +1142,9 @@
<data name="&gt;&gt;LblEventChance4.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="LnkCheckLatestBanners.Location" type="System.Drawing.Point, System.Drawing">
<value>190, 0</value>
</data>
<data name="&gt;&gt;LblPoolWeight5.Parent" xml:space="preserve">
<value>GrpBalance</value>
</data>
@@ -1170,8 +1169,8 @@
<data name="LblEventChance5Tip.TabIndex" type="System.Int32, mscorlib">
<value>28</value>
</data>
<data name="&gt;&gt;LblCostItemAmount1.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
<data name="LblSortIdTip.Location" type="System.Drawing.Point, System.Drawing">
<value>218, 233</value>
</data>
<data name="&gt;&gt;LnkWeightHelp.Name" xml:space="preserve">
<value>LnkWeightHelp</value>
@@ -1182,6 +1181,9 @@
<data name="&gt;&gt;RbCostItem224.Name" xml:space="preserve">
<value>RbCostItem224</value>
</data>
<data name="TxtPoolWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 29</value>
</data>
<data name="&gt;&gt;ChkRemoveC6FormPool.Name" xml:space="preserve">
<value>ChkRemoveC6FormPool</value>
</data>
@@ -1239,6 +1241,9 @@
<data name="LblBannersJson.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;RbCostItem223.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="&gt;&gt;LblEventChance4Tip.ZOrder" xml:space="preserve">
<value>14</value>
</data>
@@ -1368,6 +1373,9 @@
<data name="GrpUpPool.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="LnkCheckLatestBanners.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnLoad.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
@@ -1383,8 +1391,8 @@
<data name="LblPoolWeight5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblGachaTypeTip.Location" type="System.Drawing.Point, System.Drawing">
<value>218, 28</value>
<data name="GrpBalance.Size" type="System.Drawing.Size, System.Drawing">
<value>440, 100</value>
</data>
<data name="CmbBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 84</value>
@@ -1392,14 +1400,11 @@
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>50, 87</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 17</value>
</data>
<data name="&gt;&gt;GrpUpPool.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="LblEventChance4.Text" xml:space="preserve">
<value>4星活动爆率</value>
<data name="&gt;&gt;LnkWeightHelp.Parent" xml:space="preserve">
<value>GrpWeights</value>
</data>
<data name="LblEventChance4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -1410,8 +1415,8 @@
<data name="&gt;&gt;BtnClear.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Size" type="System.Drawing.Size, System.Drawing">
<value>151, 21</value>
<data name="&gt;&gt;BtnDelete.Name" xml:space="preserve">
<value>BtnDelete</value>
</data>
<data name="&gt;&gt;LnkOpenOldEditor.Name" xml:space="preserve">
<value>LnkOpenOldEditor</value>
@@ -1425,8 +1430,8 @@
<data name="&gt;&gt;RbCostItem224.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, 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 name="LblScheduleIdTip.Text" xml:space="preserve">
<value>ID要求唯一</value>
</data>
<data name="LblWeight4.Text" xml:space="preserve">
<value>4星权重</value>
@@ -1467,30 +1472,27 @@
<data name="NUDCostItemAmount1.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 173</value>
</data>
<data name="NUDEventChance5.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 23</value>
<data name="&gt;&gt;LblCostItemAmount1.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="&gt;&gt;LnkWeightHelp.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>微软雅黑, 9pt</value>
<data name="&gt;&gt;LblCostItemAmount1.Name" xml:space="preserve">
<value>LblCostItemAmount1</value>
</data>
<data name="GrpBanners.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="&gt;&gt;CmbBannerType.ZOrder" xml:space="preserve">
<value>29</value>
</data>
<data name="&gt;&gt;GrpWeights.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblCostItemAmount1.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;LblGachaTypeTip.Name" xml:space="preserve">
<value>LblGachaTypeTip</value>
</data>
<data name="&gt;&gt;LblCostItemAmount1.Name" xml:space="preserve">
<value>LblCostItemAmount1</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>1200, 655</value>
</data>
@@ -1542,14 +1544,14 @@
<data name="&gt;&gt;ListFallbackItems.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblPoolWeight4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>微软雅黑, 9pt</value>
</data>
<data name="LblPoolWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 32</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>从400开始顺序递增</value>
<data name="&gt;&gt;ChkAutoStripRateUpFromFallback.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="LblTitlePath.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
@@ -1560,8 +1562,8 @@
<data name="&gt;&gt;LblCostItemAmount1.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="FLPBannersControl.Size" type="System.Drawing.Size, System.Drawing">
<value>270, 29</value>
<data name="&gt;&gt;ColUpName.Name" xml:space="preserve">
<value>ColUpName</value>
</data>
<data name="&gt;&gt;TxtWeight4.ZOrder" xml:space="preserve">
<value>1</value>
@@ -1614,9 +1616,6 @@
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 23</value>
</data>
<data name="LblScheduleIdTip.Text" xml:space="preserve">
<value>ID要求唯一</value>
</data>
<data name="&gt;&gt;LblEventChance5.ZOrder" xml:space="preserve">
<value>20</value>
</data>
@@ -1656,14 +1655,11 @@
<data name="&gt;&gt;GrpBalance.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="LblGachaTypeTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>删除</value>
</data>
<data name="LblGachaTypeTip.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<data name="ListFallbackItems.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="NUDCostItemAmount1.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
@@ -1674,8 +1670,8 @@
<data name="&gt;&gt;LblPoolWeight4.Name" xml:space="preserve">
<value>LblPoolWeight4</value>
</data>
<data name="&gt;&gt;ChkAutoStripRateUpFromFallback.ZOrder" xml:space="preserve">
<value>7</value>
<data name="FLPBannersControl.Size" type="System.Drawing.Size, System.Drawing">
<value>270, 29</value>
</data>
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
@@ -1704,9 +1700,6 @@
<data name="ChkAutoStripRateUpFromFallback.TabIndex" type="System.Int32, mscorlib">
<value>34</value>
</data>
<data name="&gt;&gt;LblGachaTypeTip.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="LblEventChance5Tip.Text" xml:space="preserve">
<value>%</value>
</data>
@@ -1737,14 +1730,14 @@
<data name="&gt;&gt;LblBannersJson.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;LnkWeightHelp.Parent" xml:space="preserve">
<value>GrpWeights</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblEventChance4.Location" type="System.Drawing.Point, System.Drawing">
<value>221, 262</value>
</data>
<data name="GrpBalance.Size" type="System.Drawing.Size, System.Drawing">
<value>440, 100</value>
<data name="GrpBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>276, 563</value>
</data>
<data name="LblGachaType.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -1759,7 +1752,7 @@
<value>8</value>
</data>
<data name="&gt;&gt;RbCostItem223.ZOrder" xml:space="preserve">
<value>36</value>
<value>35</value>
</data>
<data name="&gt;&gt;LblWeight5.Parent" xml:space="preserve">
<value>GrpWeights</value>
@@ -1800,8 +1793,8 @@
<data name="LblEventChance4.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 17</value>
</data>
<data name="LblSortIdTip.Location" type="System.Drawing.Point, System.Drawing">
<value>218, 233</value>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 17</value>
</data>
<data name="NUDScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
@@ -1824,8 +1817,8 @@
<data name="&gt;&gt;NUDCostItemAmount10.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="BtnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
<data name="&gt;&gt;LnkCheckLatestBanners.Name" xml:space="preserve">
<value>LnkCheckLatestBanners</value>
</data>
<data name="NUDEventChance4.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 23</value>
@@ -1834,7 +1827,7 @@
<value>CmbPrefab</value>
</data>
<data name="&gt;&gt;LblScheduleId.ZOrder" xml:space="preserve">
<value>26</value>
<value>25</value>
</data>
<data name="GrpBannerValues.Location" type="System.Drawing.Point, System.Drawing">
<value>294, 41</value>
@@ -1869,14 +1862,21 @@
<data name="&gt;&gt;LblEventChance4Tip.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>保存</value>
<data name="ListUpItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
</value>
</data>
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>卡池参数</value>
<data name="&gt;&gt;LblPoolWeight4.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;CmbBannerType.ZOrder" xml:space="preserve">
<value>30</value>
<data name="LblTitlePath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ListUpItems.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>

View File

@@ -217,12 +217,6 @@
<data name="LblSortId.Text" xml:space="preserve">
<value>Сорт.</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 17</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>Увеличение с 400</value>
</data>
<data name="LblEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>249, 204</value>
</data>
@@ -466,6 +460,15 @@
<data name="GrpBanners.Text" xml:space="preserve">
<value>Banners</value>
</data>
<data name="LnkCheckLatestBanners.Location" type="System.Drawing.Point, System.Drawing">
<value>73, 0</value>
</data>
<data name="LnkCheckLatestBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 17</value>
</data>
<data name="LnkCheckLatestBanners.Text" xml:space="preserve">
<value>Проверьте последние баннеры</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Удалить</value>
</data>

View File

@@ -144,9 +144,6 @@
<data name="LblSortId.Text" xml:space="preserve">
<value>順序</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>從400開始順序遞增</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>結束時間</value>
</data>
@@ -178,9 +175,6 @@
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>卡池參數</value>
</data>
<data name="GrpFallbackPool.Text" xml:space="preserve">
<value>基礎池</value>
</data>
<data name="ListFallbackItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
@@ -231,6 +225,9 @@
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
</value>
</data>
<data name="GrpFallbackPool.Text" xml:space="preserve">
<value>基礎池</value>
</data>
<data name="ListUpItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
@@ -271,9 +268,6 @@
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
</value>
</data>
<data name="GrpWeights.Text" xml:space="preserve">
<value>卡池權重與保底機制</value>
</data>
<data name="LnkWeightHelp.Text" xml:space="preserve">
<value>幫助</value>
</data>
@@ -283,8 +277,8 @@
<data name="LblWeight5.Text" xml:space="preserve">
<value>5星權重</value>
</data>
<data name="GrpBalance.Text" xml:space="preserve">
<value>角色和武器平衡機制(僅混合池有效)</value>
<data name="GrpWeights.Text" xml:space="preserve">
<value>卡池權重與保底機制</value>
</data>
<data name="LblPoolWeight4.Text" xml:space="preserve">
<value>4星池權重</value>
@@ -292,12 +286,12 @@
<data name="LblPoolWeight5.Text" xml:space="preserve">
<value>5星池權重</value>
</data>
<data name="GrpBalance.Text" xml:space="preserve">
<value>角色和武器平衡機制(僅混合池有效)</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>刪除</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Banners.json 路徑:</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加載</value>
</data>

View File

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

View File

@@ -34,41 +34,69 @@ namespace GrasscutterTools.Forms
{
#region - Init -
private const string TAG = "FormMain";
public FormMain()
{
Console.WriteLine("FormMain ctor enter");
Logger.I(TAG, "FormMain ctor enter");
InitializeComponent();
Icon = Resources.IconGrasscutter;
if (DesignMode) return;
Common.KeyGo = new KeyGo(Handle);
Common.KeyGo.HotKeyTriggerEvent += OnHotKeyTrigger;
try
{
if (!Settings.Default.IsUpgraded)
{
Settings.Default.Upgrade();
Settings.Default.IsUpgraded = true;
}
}
catch (Exception ex)
{
Logger.W(TAG, "Upgrade Settings failed.", ex);
}
try
{
var location = Settings.Default.MainFormLocation;
// 还原窗体位置
if (Settings.Default.MainFormLocation != default)
if (location.X > 0 && location.Y > 0)
{
StartPosition = FormStartPosition.Manual;
Location = Settings.Default.MainFormLocation;
Console.WriteLine("Restore window location: " + Location.ToString());
Location = location;
Logger.I(TAG, "Restore window location: " + Location);
}
// 还原窗体大小
if (Settings.Default.MainFormSize != default)
{
Size = Settings.Default.MainFormSize;
Console.WriteLine("Restore window size: " + Size.ToString());
Logger.I(TAG, "Restore window size: " + Size);
}
// 还原导航容器间隔位置
if (Settings.Default.NavContainerSplitterDistance >= NavContainer.Panel1MinSize)
{
NavContainer.SplitterDistance = Settings.Default.NavContainerSplitterDistance;
Logger.I(TAG, "Restore NavContainer SplitterDistance: " + NavContainer.SplitterDistance);
}
// 恢复自动复制选项状态
ChkAutoCopy.Checked = Settings.Default.AutoCopy;
// 初始化页面
InitPages();
// 恢复自动复制选项状态
ChkAutoCopy.Checked = Settings.Default.AutoCopy;
}
catch (Exception ex)
{
Logger.E(TAG, "Loading settings error", ex);
MessageBox.Show(Resources.SettingLoadError + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Console.WriteLine("FormMain ctor completed");
Logger.I(TAG, "FormMain ctor completed");
}
/// <summary>
@@ -76,27 +104,102 @@ namespace GrasscutterTools.Forms
/// </summary>
private void InitPages()
{
Console.WriteLine("InitPages enter");
Logger.I(TAG, "InitPages enter");
TCMain.SuspendLayout();
var ph = CreatePage<PageHome>();
ph.OnLanguageChanged = () => FormMain_Load(this, EventArgs.Empty);
TPHome.Controls.Add(ph);
var poc = CreatePage<PageOpenCommand>();
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
TPRemoteCall.Controls.Add(poc);
TPCustom.Controls.Add(CreatePage<PageCustomCommands>());
TPArtifact.Controls.Add(CreatePage<PageGiveArtifact>());
TPSpawn.Controls.Add(CreatePage<PageSpawn>());
TPItem.Controls.Add(CreatePage<PageGiveItem>());
TPAvatar.Controls.Add(CreatePage<PageAvatar>());
TPWeapon.Controls.Add(CreatePage<PageGiveWeapon>());
TPManage.Controls.Add(CreatePage<PageManagement>());
TPMail.Controls.Add(CreatePage<PageMail>());
TPQuest.Controls.Add(CreatePage<PageQuest>());
TPScene.Controls.Add(CreatePage<PageScene>());
TPAbout.Controls.Add(CreatePage<PageAbout>());
var pcc = CreatePage<PageCustomCommands>();
var phk = CreatePage<PageHotKey>();
pcc.OnAddHotKey = tag =>
{
phk.AddNewHotKey(tag);
// 跳转到快捷键界面
for (var i = 0; i < TCMain.Controls.Count; i++)
{
if (TCMain.Controls[i].Controls[0] == phk)
{
ListPages.SelectedIndex = i;
break;
}
}
};
CreatePage<PageGiveArtifact>();
CreatePage<PageSpawn>();
CreatePage<PageGiveItem>();
CreatePage<PageAvatar>();
CreatePage<PageGiveWeapon>();
CreatePage<PageManagement>();
CreatePage<PageMail>();
CreatePage<PageTasks>();
CreatePage<PageQuest>();
CreatePage<PageScene>();
CreatePage<PageAchievement>();
CreatePage<PageSetProp>();
CreatePage<PageAbout>();
#if DEBUG
CreatePage<PageTools>();
#endif
TCMain.ResumeLayout();
Console.WriteLine("InitPages completed");
Logger.I(TAG, "InitPages completed");
}
/// <summary>
/// 初始化页面导航
/// </summary>
private void InitPagesNav()
{
ListPages.Items.Clear();
ListPages.Items.AddRange(new object[]
{
Resources.PageHomeTitle,
Resources.PageOpenCommandTitle,
Resources.PageCustomCommandsTitle,
Resources.PageHotKey,
Resources.PageGetArtifactTitle,
Resources.PageSpawnTitle,
Resources.PageGiveItemTitle,
Resources.PageAvatarTitle,
Resources.PageGiveWeaponTitle,
Resources.PageManagementTitle,
Resources.PageMailTitle,
Resources.PageTasksTitle,
Resources.PageQuestTitle,
Resources.PageSceneTitle,
Resources.PageAchievementTitle,
Resources.PageSetPropTitle,
Resources.PageAboutTitle,
#if DEBUG
"Tools",
#endif
});
}
/// <summary>
/// 导航列表项居中绘制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ListPages_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
var strFmt = new StringFormat
{
Alignment = StringAlignment.Center, //文本垂直居中
LineAlignment = StringAlignment.Center //文本水平居中
};
e.Graphics.DrawString(ListPages.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, strFmt);
}
/// <summary>
/// 导航列表大小改变时触发
/// </summary>
private void ListPages_SizeChanged(object sender, EventArgs e)
{
// 立刻重绘列表项
ListPages.Refresh();
}
/// <summary>
@@ -112,23 +215,34 @@ namespace GrasscutterTools.Forms
RunCommands = RunCommands,
GetCommand = () => CmbCommand.Text,
Dock = DockStyle.Fill,
Name = nameof(T)
Name = typeof(T).Name,
};
var tp = new TabPage();
TCMain.TabPages.Add(tp);
tp.Controls.Add(page);
return page;
}
private void ListPages_SelectedIndexChanged(object sender, EventArgs e)
{
TCMain.SelectedIndex = ListPages.SelectedIndex;
}
/// <summary>
/// 窗体载入时触发(切换语言时会重新载入)
/// </summary>
private void FormMain_Load(object sender, EventArgs e)
{
Console.WriteLine("FormMain_Load enter");
Logger.I(TAG, "FormMain_Load enter");
Text += " - by jie65535 - v" + Common.AppVersion.ToString(3);
#if DEBUG
Text += "-debug";
#endif
if (DesignMode) return;
// 加载页面导航
InitPagesNav();
// 加载游戏ID资源
GameData.LoadResources();
@@ -137,12 +251,12 @@ namespace GrasscutterTools.Forms
{
if (tp.Controls.Count > 0 && tp.Controls[0] is BasePage page)
{
Console.WriteLine($"{page.Name} OnLoad enter");
Logger.I(TAG, $"{page.Name} OnLoad enter");
page.OnLoad();
Console.WriteLine($"{page.Name} OnLoad completed");
Logger.I(TAG, $"{page.Name} OnLoad completed");
}
}
Console.WriteLine("FormMain_Load completed");
Logger.I(TAG, "FormMain_Load completed");
}
/// <summary>
@@ -150,7 +264,7 @@ namespace GrasscutterTools.Forms
/// </summary>
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
{
Console.WriteLine("FormMain FormClosed enter");
Logger.I(TAG, "FormMain FormClosed enter");
// 遍历每一个页面,通知关闭
foreach (TabPage tp in TCMain.Controls)
{
@@ -160,7 +274,7 @@ namespace GrasscutterTools.Forms
// 保存当前设置
SaveSettings();
Console.WriteLine("FormMain FormClosed completed");
Logger.I(TAG, "FormMain FormClosed completed");
}
/// <summary>
@@ -172,24 +286,51 @@ namespace GrasscutterTools.Forms
{
// 记录界面状态
Settings.Default.AutoCopy = ChkAutoCopy.Checked;
Settings.Default.MainFormLocation = Location;
// 记录窗口位置
if (WindowState == FormWindowState.Normal)
Settings.Default.MainFormLocation = Location;
// 如果命令窗口已经弹出了,则不要保存多余的高度
if (TxtCommandRunLog != null)
Settings.Default.MainFormSize = new Size(Width, Height - TxtCommandRunLogMinHeight);
else
Settings.Default.MainFormSize = Size;
Settings.Default.MainFormSize = TxtCommandRunLog != null ? new Size(Width, Height - TxtCommandRunLogMinHeight) : Size;
// 记录导航容器分隔位置
Settings.Default.NavContainerSplitterDistance = NavContainer.SplitterDistance;
// 保存设置
Settings.Default.Save();
}
catch (Exception ex)
{
Logger.E(TAG, "Save settings failed.", ex);
MessageBox.Show(Resources.SettingSaveError + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - Init -
#region - HotKey -
/// <summary>
/// 快捷键触发时执行
/// </summary>
private void OnHotKeyTrigger(object sender, HotKeyTriggerEventArgs e)
{
BeginInvoke(new Func<Task>(() => RunRawCommands(e.HotKeyItem.Commands)));
e.Handle = true;
}
private const int WM_HOTKEY = 0x312;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_HOTKEY:
Common.KeyGo.ProcessHotKey(m.WParam.ToInt32());
break;
}
}
#endregion - HotKey -
#region - Command -
/// <summary>
@@ -198,12 +339,13 @@ namespace GrasscutterTools.Forms
/// <param name="command">命令</param>
private void SetCommand(string command)
{
Console.WriteLine($"SetCommand(\"{command}\")");
Logger.I(TAG, $"SetCommand(\"{command}\")");
var oldCommand = CmbCommand.Text;
CmbCommand.Text = (ModifierKeys == Keys.Shift) ? $"{oldCommand} | {command}" : command;
if (ModifierKeys == Keys.Shift && !string.IsNullOrEmpty(oldCommand))
command = $"{oldCommand} | {command}";
AddCommandToList(command);
if (ChkAutoCopy.Checked)
CopyCommand();
AddCommandToList(command);
if (ModifierKeys == Keys.Control)
{
@@ -223,12 +365,12 @@ namespace GrasscutterTools.Forms
{
if (string.IsNullOrEmpty(command))
command = CmbCommand.Text;
if (!string.IsNullOrEmpty(command))
{
if (CmbCommand.Items.Count > 19)
CmbCommand.Items.RemoveAt(0);
CmbCommand.Items.Add(command);
}
if (string.IsNullOrEmpty(command))
return;
if (CmbCommand.Items.Count > 19)
CmbCommand.Items.RemoveAt(0);
CmbCommand.Items.Add(command);
CmbCommand.SelectedIndex = CmbCommand.Items.Count - 1;
}
/// <summary>
@@ -290,10 +432,20 @@ namespace GrasscutterTools.Forms
ShowTip(Resources.CommandContentCannotBeEmpty, CmbCommand);
return;
}
if (cmd.IndexOf('|') == -1)
await RunCommands(FormatCommand(cmd));
else
await RunCommands(cmd.Split('|').Select(it => FormatCommand(it)).ToArray());
await RunRawCommands(cmd);
}
/// <summary>
/// 运行原始命令
/// </summary>
/// <param name="commands">命令字符串</param>
/// <returns>是否执行成功</returns>
private async Task<bool> RunRawCommands(string commands)
{
if (commands.IndexOf('|') == -1)
return await RunCommands(FormatCommand(commands));
return await RunCommands(commands.Split('|').Select(FormatCommand).ToArray());
}
/// <summary>
@@ -317,7 +469,16 @@ namespace GrasscutterTools.Forms
if (Common.OC == null || !Common.OC.CanInvoke)
{
ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand);
TCMain.SelectedTab = TPRemoteCall;
//TCMain.SelectedTab = TPRemoteCall;
for (var i = 0; i < TCMain.Controls.Count; i++)
{
if (TCMain.Controls[i].Controls[0] is PageOpenCommand)
{
ListPages.SelectedIndex = i;
break;
}
}
return false;
}
@@ -337,14 +498,14 @@ namespace GrasscutterTools.Forms
var cmd = command.TrimStart('/');
try
{
Console.WriteLine("RunCommand:" + cmd);
Logger.I(TAG, "RunCommand:" + cmd);
var msg = await Common.OC.Invoke(cmd);
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg);
TxtCommandRunLog.AppendText(Environment.NewLine);
}
catch (Exception ex)
{
Console.WriteLine("RunCommand Error:" + ex.ToString());
Logger.W(TAG, "RunCommand Error:", ex);
TxtCommandRunLog.AppendText("Error: ");
TxtCommandRunLog.AppendText(ex.Message);
TxtCommandRunLog.AppendText(Environment.NewLine);
@@ -381,11 +542,11 @@ namespace GrasscutterTools.Forms
{
if (WindowState == FormWindowState.Maximized)
WindowState = FormWindowState.Normal;
TCMain.Anchor &= ~AnchorStyles.Bottom;
NavContainer.Anchor &= ~AnchorStyles.Bottom;
GrpCommand.Anchor |= AnchorStyles.Top;
Size = new Size(Width, Height + TxtCommandRunLogMinHeight);
MinimumSize = new Size(MinimumSize.Width, MinimumSize.Height + TxtCommandRunLogMinHeight);
TCMain.Anchor |= AnchorStyles.Bottom;
NavContainer.Anchor |= AnchorStyles.Bottom;
GrpCommand.Anchor &= ~AnchorStyles.Top;
}
@@ -420,6 +581,13 @@ namespace GrasscutterTools.Forms
// F5 为执行命令
OnOpenCommandInvoke();
}
else if (e.Alt && e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
{
// Alt+数字键 = 跳转到对应页面
var i = e.KeyCode == Keys.D0 ? 9 : e.KeyCode - Keys.D1;
if (i < ListPages.Items.Count)
ListPages.SelectedIndex = i;
}
}
/// <summary>
@@ -434,6 +602,11 @@ namespace GrasscutterTools.Forms
/// <param name="control">控件</param>
private void ShowTip(string message, Control control)
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => ShowTip(message, control)));
return;
}
TTip.Show(message, control, 0, control.Size.Height, 3000);
}

View File

@@ -133,173 +133,8 @@
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command - [Ctrl] Autorun - [Shift] Append - [Alt] Only run - [|] Split multiple commands</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>Remote</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>387, 102</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>Grasscutter Tools
This is a free and open source project.
If you think this is helpful to you, you can give me a free Star.
If there is a problem with the command generation,
or there is a new feature request, you can file an issue on Github.</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>About</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>Manage</value>
</data>
<data name="RbListDungeons.Location" type="System.Drawing.Point, System.Drawing">
<value>255, 7</value>
</data>
<data name="RbListDungeons.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 21</value>
</data>
<data name="RbListDungeons.Text" xml:space="preserve">
<value>Dungeons</value>
</data>
<data name="RbListScene.Location" type="System.Drawing.Point, System.Drawing">
<value>183, 7</value>
</data>
<data name="RbListScene.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 21</value>
</data>
<data name="RbListScene.Text" xml:space="preserve">
<value>Scenes</value>
</data>
<data name="ChkIncludeSceneId.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 213</value>
</data>
<data name="ChkIncludeSceneId.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 21</value>
</data>
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>Include scene Id</value>
</data>
<data name="LblTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 184</value>
</data>
<data name="LblTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 184</value>
</data>
<data name="BtnTeleport.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 211</value>
</data>
<data name="BtnTeleport.Text" xml:space="preserve">
<value>Teleport</value>
</data>
<data name="LblTpX.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 184</value>
</data>
<data name="NUDTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>239, 182</value>
</data>
<data name="NUDTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>133, 182</value>
</data>
<data name="NUDTpX.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 182</value>
</data>
<data name="CmbClimateType.Location" type="System.Drawing.Point, System.Drawing">
<value>66, 61</value>
</data>
<data name="LblClimateType.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 64</value>
</data>
<data name="LblClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>54, 17</value>
</data>
<data name="LblClimateType.Text" xml:space="preserve">
<value>weather</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblSceneDescription.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblSceneDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>287, 55</value>
</data>
<data name="LblSceneDescription.Text" xml:space="preserve">
<value>Scene control</value>
</data>
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblTp.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 89</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>337, 90</value>
</data>
<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 ~N to indicate the relative current N</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>Scene</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Items</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>Weapons</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Spawn</value>
</data>
<data name="ChkQuestFilterTEST.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
</data>
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
<value>Test</value>
</data>
<data name="ChkQuestFilterUNRELEASED.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 21</value>
</data>
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
<value>Unreleased</value>
</data>
<data name="ChkQuestFilterHIDDEN.Size" type="System.Drawing.Size, System.Drawing">
<value>69, 21</value>
</data>
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
<value>Hidden</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>List Filter</value>
</data>
<data name="BtnFinishQuest.Text" xml:space="preserve">
<value>Finish</value>
</data>
<data name="BtnAddQuest.Text" xml:space="preserve">
<value>Add</value>
</data>
<data name="LblQuestDescription.Text" xml:space="preserve">
<value>Add or Finish Quest
Tip: Many quest require server-side scripting support
Therefore, the quest can be added and finished, but not necessarily work.</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>Quest</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Artifacts</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>Custom</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>Home</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Mail</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
</root>

View File

@@ -118,17 +118,137 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="NavContainer.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="NavContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
</data>
<data name="ListPages.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="ListPages.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 10pt</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListPages.ItemHeight" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="ListPages.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="ListPages.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 275</value>
</data>
<data name="ListPages.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;ListPages.Name" xml:space="preserve">
<value>ListPages</value>
</data>
<data name="&gt;&gt;ListPages.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ListPages.Parent" xml:space="preserve">
<value>NavContainer.Panel1</value>
</data>
<data name="&gt;&gt;ListPages.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.Name" xml:space="preserve">
<value>NavContainer.Panel1</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.Parent" xml:space="preserve">
<value>NavContainer</value>
</data>
<data name="&gt;&gt;NavContainer.Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="NavContainer.Panel1MinSize" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="TCMain.Appearance" type="System.Windows.Forms.TabAppearance, System.Windows.Forms">
<value>FlatButtons</value>
</data>
<data name="TCMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="TCMain.ItemSize" type="System.Drawing.Size, System.Drawing">
<value>0, 1</value>
</data>
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 275</value>
</data>
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
<value>656, 275</value>
</data>
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;TCMain.Name" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TCMain.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TCMain.Parent" xml:space="preserve">
<value>NavContainer.Panel2</value>
</data>
<data name="&gt;&gt;TCMain.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.Name" xml:space="preserve">
<value>NavContainer.Panel2</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.Parent" xml:space="preserve">
<value>NavContainer</value>
</data>
<data name="&gt;&gt;NavContainer.Panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="NavContainer.Panel2MinSize" type="System.Int32, mscorlib">
<value>610</value>
</data>
<data name="NavContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>810, 275</value>
</data>
<data name="NavContainer.SplitterDistance" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="NavContainer.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;NavContainer.Name" xml:space="preserve">
<value>NavContainer</value>
</data>
<data name="&gt;&gt;NavContainer.Type" xml:space="preserve">
<value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NavContainer.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;NavContainer.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="CmbCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="CmbCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 21</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>450, 25</value>
<value>600, 25</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="CmbCommand.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
@@ -151,7 +271,7 @@
<value>NoControl</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>543, 22</value>
<value>693, 22</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
@@ -184,7 +304,7 @@
<value>NoControl</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>599, 24</value>
<value>749, 24</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
@@ -244,7 +364,7 @@
<value>610, 56</value>
</data>
<data name="GrpCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 56</value>
<value>810, 56</value>
</data>
<data name="GrpCommand.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@@ -264,387 +384,6 @@
<data name="&gt;&gt;GrpCommand.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="TPRemoteCall.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPRemoteCall.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPRemoteCall.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPRemoteCall.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>远程</value>
</data>
<data name="&gt;&gt;TPRemoteCall.Name" xml:space="preserve">
<value>TPRemoteCall</value>
</data>
<data name="&gt;&gt;TPRemoteCall.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPRemoteCall.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPRemoteCall.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="TPAbout.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPAbout.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPAbout.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPAbout.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>关于</value>
</data>
<data name="&gt;&gt;TPAbout.Name" xml:space="preserve">
<value>TPAbout</value>
</data>
<data name="&gt;&gt;TPAbout.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPAbout.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPAbout.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="TPManage.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPManage.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPManage.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPManage.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>管理</value>
</data>
<data name="&gt;&gt;TPManage.Name" xml:space="preserve">
<value>TPManage</value>
</data>
<data name="&gt;&gt;TPManage.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPManage.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPManage.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="TPScene.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPScene.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPScene.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPScene.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>场景</value>
</data>
<data name="&gt;&gt;TPScene.Name" xml:space="preserve">
<value>TPScene</value>
</data>
<data name="&gt;&gt;TPScene.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPScene.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPScene.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="TPItem.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPItem.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPItem.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPItem.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>物品</value>
</data>
<data name="&gt;&gt;TPItem.Name" xml:space="preserve">
<value>TPItem</value>
</data>
<data name="&gt;&gt;TPItem.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPItem.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPItem.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="TPWeapon.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPWeapon.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="TPWeapon.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPWeapon.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPWeapon.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>武器</value>
</data>
<data name="&gt;&gt;TPWeapon.Name" xml:space="preserve">
<value>TPWeapon</value>
</data>
<data name="&gt;&gt;TPWeapon.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPWeapon.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPWeapon.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="TPAvatar.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPAvatar.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPAvatar.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>角色</value>
</data>
<data name="&gt;&gt;TPAvatar.Name" xml:space="preserve">
<value>TPAvatar</value>
</data>
<data name="&gt;&gt;TPAvatar.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPAvatar.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPAvatar.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="TPSpawn.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPSpawn.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPSpawn.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPSpawn.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>生成</value>
</data>
<data name="&gt;&gt;TPSpawn.Name" xml:space="preserve">
<value>TPSpawn</value>
</data>
<data name="&gt;&gt;TPSpawn.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPSpawn.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPSpawn.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="TPQuest.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPQuest.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPQuest.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPQuest.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>任务</value>
</data>
<data name="&gt;&gt;TPQuest.Name" xml:space="preserve">
<value>TPQuest</value>
</data>
<data name="&gt;&gt;TPQuest.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPQuest.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPQuest.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="TPArtifact.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPArtifact.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPArtifact.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPArtifact.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>圣遗物</value>
</data>
<data name="&gt;&gt;TPArtifact.Name" xml:space="preserve">
<value>TPArtifact</value>
</data>
<data name="&gt;&gt;TPArtifact.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPArtifact.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPArtifact.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="TPCustom.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPCustom.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPCustom.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPCustom.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定义</value>
</data>
<data name="&gt;&gt;TPCustom.Name" xml:space="preserve">
<value>TPCustom</value>
</data>
<data name="&gt;&gt;TPCustom.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPCustom.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPCustom.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="TPHome.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPHome.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPHome.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPHome.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>主页</value>
</data>
<data name="&gt;&gt;TPHome.Name" xml:space="preserve">
<value>TPHome</value>
</data>
<data name="&gt;&gt;TPHome.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPHome.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPHome.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="TCMain.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="TPMail.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 26</value>
</data>
<data name="TPMail.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="TPMail.Size" type="System.Drawing.Size, System.Drawing">
<value>652, 245</value>
</data>
<data name="TPMail.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>邮件</value>
</data>
<data name="&gt;&gt;TPMail.Name" xml:space="preserve">
<value>TPMail</value>
</data>
<data name="&gt;&gt;TPMail.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TPMail.Parent" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TPMail.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
</data>
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>610, 275</value>
</data>
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
<value>660, 275</value>
</data>
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;TCMain.Name" xml:space="preserve">
<value>TCMain</value>
</data>
<data name="&gt;&gt;TCMain.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TCMain.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TCMain.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="MenuSpawnEntityFilter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
@@ -664,7 +403,7 @@
<value>7, 17</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>684, 361</value>
<value>834, 361</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 9pt</value>
@@ -673,7 +412,7 @@
<value>3, 4, 3, 4</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>700, 400</value>
<value>850, 400</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>

View File

@@ -122,10 +122,10 @@
<value>132, 21</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 25</value>
<value>513, 25</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>497, 22</value>
<value>651, 21</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>92, 23</value>
@@ -134,7 +134,7 @@
<value>Копировать</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>595, 24</value>
<value>749, 23</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
@@ -142,190 +142,17 @@
<data name="ChkAutoCopy.Text" xml:space="preserve">
<value>Авто</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Команды - [Ctrl] Запуск и замена - [Shift] Добавить - [Alt] Только запустить - [|] Разделитель</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 23</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Выполнить (F5)</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Команды - [Ctrl] Запуск и замена - [Shift] Добавить - [Alt] Только запустить - [|] Разделитель</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>OpenCommand</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>552, 170</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>Grasscutter Tools - основной перевод Юрий Дворецкий (с исправлениями от EgorBron)
Это бесплатный проект с открытым исходным кодом.
Если вы считаете, что это полезно для вас,
вы можете дать мне звезду на Github.
Если возникла проблема с генерацией команды или
есть запрос на новую функцию,
вы можете написать в Issues на Github.
Спасибо: Dhar_Jinxed
</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>Справка</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>Аккаунты</value>
</data>
<data name="RbListDungeons.Location" type="System.Drawing.Point, System.Drawing">
<value>243, 7</value>
</data>
<data name="RbListDungeons.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 21</value>
</data>
<data name="RbListDungeons.Text" xml:space="preserve">
<value>Подземелья</value>
</data>
<data name="RbListScene.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 7</value>
</data>
<data name="RbListScene.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 21</value>
</data>
<data name="RbListScene.Text" xml:space="preserve">
<value>Сцены</value>
</data>
<data name="ChkIncludeSceneId.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 213</value>
</data>
<data name="ChkIncludeSceneId.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 21</value>
</data>
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>Включить идентификатор сцены</value>
</data>
<data name="LblTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 184</value>
</data>
<data name="LblTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 184</value>
</data>
<data name="BtnTeleport.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 211</value>
</data>
<data name="BtnTeleport.Text" xml:space="preserve">
<value>Телепорт</value>
</data>
<data name="LblTpX.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 184</value>
</data>
<data name="NUDTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>239, 182</value>
</data>
<data name="NUDTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>133, 182</value>
</data>
<data name="NUDTpX.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 182</value>
</data>
<data name="CmbClimateType.Location" type="System.Drawing.Point, System.Drawing">
<value>66, 61</value>
</data>
<data name="LblClimateType.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 64</value>
</data>
<data name="LblClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblClimateType.Text" xml:space="preserve">
<value>Погода</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblSceneDescription.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblSceneDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>287, 55</value>
</data>
<data name="LblSceneDescription.Text" xml:space="preserve">
<value>Управление сценами.</value>
</data>
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblTp.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 8pt</value>
</data>
<data name="LblTp.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 84</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>337, 100</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>Телепортация
Подсказка: вы можете быстро телепортироваться через отметку «рыболовный крючок» на миникарте в игре.
В команде вы можете использовать ~, чтобы указать текущую позицию, и ~N, чтобы указать смещение на N относительно текущей позиции</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>Сцена</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Предметы</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>Оружие</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Персонаж</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Спавн</value>
</data>
<data name="ChkQuestFilterTEST.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 21</value>
</data>
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
<value>Тест</value>
</data>
<data name="ChkQuestFilterUNRELEASED.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 21</value>
</data>
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
<value>Неизданное</value>
</data>
<data name="ChkQuestFilterHIDDEN.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 21</value>
</data>
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
<value>Скрытый</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>Фильтр списка</value>
</data>
<data name="BtnFinishQuest.Text" xml:space="preserve">
<value>Завершить</value>
</data>
<data name="BtnAddQuest.Text" xml:space="preserve">
<value>Добавить</value>
</data>
<data name="LblQuestDescription.Text" xml:space="preserve">
<value>Добавить или завершить задание.
Внимание: для многих квестов требуются скрипты таковых на стороне сервера.
Поэтому квест может быть добавлен или отозван через консоль, но завершён игроком - вряд ли.</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>Квест</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Артефакт</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>Кастомное</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>Главная</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Почта</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
</root>

View File

@@ -129,89 +129,8 @@
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令 - [Ctrl] 自動執行 - [Shift] 拼接命令 - [Alt] 僅執行 - [|] 分割多條命令</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>遠程</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>334, 102</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>割草機工具箱
這是一個免費且開源的項目
如果覺得這對你很有幫助可以為我點一個免費的Star
如果願意請我喝一杯奶茶,那就更好了 : )
指令生成有問題或者有新的功能請求都可以來Github提出</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>關於</value>
</data>
<data name="RbListDungeons.Text" xml:space="preserve">
<value>祕境</value>
</data>
<data name="RbListScene.Text" xml:space="preserve">
<value>場景</value>
</data>
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>含場景ID</value>
</data>
<data name="BtnTeleport.Text" xml:space="preserve">
<value>傳送</value>
</data>
<data name="LblClimateType.Text" xml:space="preserve">
<value>設置天氣</value>
</data>
<data name="LblSceneDescription.Text" xml:space="preserve">
<value>場景控制</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>座標傳送
提示:遊戲內可以通過小地圖的'魚鉤'標記來快捷傳送
命令中可以用~表示當前位置,~N 表示相對當前N</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>場景</value>
</data>
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
<value>測試任務</value>
</data>
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
<value>未發佈的任務</value>
</data>
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
<value>隱藏的任務</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>列表過濾</value>
</data>
<data name="BtnFinishQuest.Text" xml:space="preserve">
<value>完成任務</value>
</data>
<data name="BtnAddQuest.Text" xml:space="preserve">
<value>添加任務</value>
</data>
<data name="LblQuestDescription.Text" xml:space="preserve">
<value>添加或完成任務
提示:許多任務需要服務端腳本支持
囙此任務可以接,可以完成,但是不一定可以做</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>任務</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>聖遺物</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定義</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>主頁</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>郵件</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
</root>

View File

@@ -0,0 +1,65 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Activity
{
public class ActivityConfigItem
{
/// <summary>
/// 活动ID
/// </summary>
[JsonProperty("activityId")]
public int ActivityId { get; set; }
/// <summary>
/// 活动类型
/// </summary>
[JsonProperty("activityType")]
public int ActivityType { get; set; }
/// <summary>
/// 调度ID
/// </summary>
[JsonProperty("scheduleId")]
public int ScheduleId { get; set; }
/// <summary>
/// 满足条件列表
/// </summary>
[JsonProperty("meetCondList")]
public List<int> MeetCondList { get; set; }
/// <summary>
/// 活动开始时间
/// </summary>
[JsonProperty("beginTime")]
public DateTime BeginTime { get; set; }
/// <summary>
/// 活动结束时间
/// </summary>
[JsonProperty("endTime")]
public DateTime EndTime { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Activity
{
internal class NewActivityItem
{
[JsonProperty("activityId")]
public int ActivityId { get; set; }
[JsonProperty("nameTextMapHash")]
public string NameTextMapHash { get; set; }
}
}

View File

@@ -132,11 +132,41 @@ namespace GrasscutterTools.Game
/// </summary>
public static readonly Version V1_4_3 = new Version(1, 4, 3);
/// <summary>
/// 2023/4/1
/// </summary>
public static readonly Version V1_4_7 = new Version(1, 4, 7);
/// <summary>
/// 2023/4/1
/// </summary>
public static readonly Version V1_5_0 = new Version(1, 5, 0);
/// <summary>
/// 2023/6/1
/// </summary>
public static readonly Version V1_6_0 = new Version(1, 6, 0);
/// <summary>
/// 2023/6/2
/// </summary>
public static readonly Version V1_6_1 = new Version(1, 6, 1);
/// <summary>
/// 2023/7/1
/// </summary>
public static readonly Version V1_6_2 = new Version(1, 6, 2);
/// <summary>
/// 2023/8/1
/// </summary>
public static readonly Version V1_6_3 = new Version(1, 6, 3);
// More...
/// <summary>
/// Date
/// </summary>
//public static readonly Version V1_4_4 = new Version(1, 4, 4);
//public static readonly Version V1_6_3 = new Version(1, 6, 3);
public static Version[] List { get; } = new Version[] {
V1_2_1,
@@ -148,7 +178,12 @@ namespace GrasscutterTools.Game
V1_4_1,
V1_4_2,
V1_4_3,
//V1_4_4,
V1_4_7,
V1_5_0,
V1_6_0,
V1_6_1,
V1_6_2,
V1_6_3,
};
#endregion - Version List -

View File

@@ -0,0 +1,32 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.CutScene
{
internal class CutSceneItem
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("path")]
public string Path { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Dungeon
{
internal class DungeonItem
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("nameTextMapHash")]
public string NameTextMapHash { get; set; }
}
}

View File

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

View File

@@ -25,13 +25,16 @@ namespace GrasscutterTools.Game
{
public static void LoadResources()
{
Achievements = new ItemMap(Resources.Achievement);
Activity = new ItemMapGroup(Resources.Activity);
Artifacts = new ItemMap(Resources.Artifact);
ArtifactCats = new ItemMap(Resources.ArtifactCat);
ArtifactMainAttribution = new ItemMap(Resources.ArtifactMainAttribution);
ArtifactSubAttribution = new ItemMap(Resources.ArtifactSubAttribution);
Avatars = new ItemMap(Resources.Avatar);
AvatarColors = new ItemMap(Resources.AvatarColor);
Items = new ItemMap(Resources.Item);
CutScenes = new ItemMap(Resources.Cutscene);
Items = new ItemMapGroup(Resources.Item);
Monsters = new ItemMapGroup(Resources.Monsters);
Gadgets = new ItemMapGroup(Resources.Gadget);
Scenes = new ItemMap(Resources.Scene);
@@ -44,6 +47,10 @@ namespace GrasscutterTools.Game
ShopType = new ItemMap(Resources.ShopType);
}
public static ItemMap Achievements { get; private set; }
public static ItemMapGroup Activity { get; private set; }
public static ItemMap Artifacts { get; private set; }
public static ItemMap ArtifactCats { get; private set; }
@@ -56,7 +63,9 @@ namespace GrasscutterTools.Game
public static ItemMap AvatarColors { get; private set; }
public static ItemMap Items { get; private set; }
public static ItemMap CutScenes { get; private set; }
public static ItemMapGroup Items { get; private set; }
public static ItemMapGroup Monsters { get; private set; }

View File

@@ -38,7 +38,7 @@ namespace GrasscutterTools.Game
if (categoryLineEndIndex == -1)
break;
var category = idNamePairs.Substring(categoryLineStartIndex + 2, categoryLineEndIndex - categoryLineStartIndex - 3).Trim();
var category = idNamePairs.Substring(categoryLineStartIndex + 2, categoryLineEndIndex - categoryLineStartIndex - 2).Trim();
var nextStartIndex = idNamePairs.IndexOf("//", categoryLineEndIndex);
if (nextStartIndex == -1)
@@ -63,5 +63,22 @@ namespace GrasscutterTools.Game
/// 获取所有行
/// </summary>
public IEnumerable<string> AllLines => Values.SelectMany(it => it.Lines);
private string[] lines;
public string[] Lines => lines ?? (lines = AllLines.ToArray());
public string this[int id]
{
get
{
foreach (var map in Values)
{
var n = map[id];
if (n != ItemMap.EmptyName)
return n;
}
return ItemMap.EmptyName;
}
}
}
}

View File

@@ -0,0 +1,85 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
namespace GrasscutterTools.Game.Props
{
internal class PlayerProperty
{
public static List<PlayerProperty> Values { get; } = new List<PlayerProperty> {
new PlayerProperty("EXP", 0),
new PlayerProperty("BREAK_LEVEL"),
new PlayerProperty("SATIATION_VAL"),
new PlayerProperty("SATIATION_PENALTY_TIME"),
new PlayerProperty("LEVEL", 0, 90),
new PlayerProperty("LAST_CHANGE_AVATAR_TIME"),
new PlayerProperty("MAX_SPRING_VOLUME", 0, 8_500_000, description: "Maximum volume of the Statue of the Seven for the player [0, 8500000]"),
new PlayerProperty("CUR_SPRING_VOLUME", description: "Current volume of the Statue of the Seven [0, MAX_SPRING_VOLUME]"),
new PlayerProperty("IS_SPRING_AUTO_USE", 0, 1, description: "Auto HP recovery when approaching the Statue of the Seven [0, 1]"),
new PlayerProperty("SPRING_AUTO_USE_PERCENT", 0, 100, description: "Auto HP recovery percentage [0, 100]"),
new PlayerProperty("IS_FLYABLE", 0, 1, description: "Are you in a state that disables your flying ability? e.g. new player [0, 1]"),
new PlayerProperty("IS_WEATHER_LOCKED", 0, 1),
new PlayerProperty("IS_GAME_TIME_LOCKED", 0, 1),
new PlayerProperty("IS_TRANSFERABLE", 0, 1),
new PlayerProperty("MAX_STAMINA", 0, 24_000, description: "Maximum stamina of the player (0 - 24000)"),
new PlayerProperty("CUR_PERSIST_STAMINA", description: "Used stamina of the player (0 - MAX_STAMINA)"),
new PlayerProperty("CUR_TEMPORARY_STAMINA"),
new PlayerProperty("PLAYER_LEVEL", 1, 60),
new PlayerProperty("PLAYER_EXP"),
new PlayerProperty("PLAYER_HCOIN", description: "Primogem (-inf, +inf)"), // It is known that Mihoyo will make Primogem negative in the cases that a player spends his gems and then got a money refund, so negative is allowed.
new PlayerProperty("PLAYER_SCOIN", 0, description: "Mora [0, +inf)"),
new PlayerProperty("PLAYER_MP_SETTING_TYPE", 0, 2, description: "Do you allow other players to join your game? [0=no 1=direct 2=approval]"),
new PlayerProperty("IS_MP_MODE_AVAILABLE", 0, 1, description: "0 if in quest or something that disables MP [0, 1]"),
new PlayerProperty("PLAYER_WORLD_LEVEL", 0, 8, description: "[0, 8]"),
new PlayerProperty("PLAYER_RESIN", 0, 2000, description: "Original Resin [0, 2000] - note that values above 160 require refills"),
new PlayerProperty("PLAYER_WAIT_SUB_HCOIN"),
new PlayerProperty("PLAYER_WAIT_SUB_SCOIN"),
new PlayerProperty("IS_ONLY_MP_WITH_PS_PLAYER", 0, 1, description: "Is only MP with PlayStation players? [0, 1]"),
new PlayerProperty("PLAYER_MCOIN", description: "Genesis Crystal (-inf, +inf) see 10015"),
new PlayerProperty("PLAYER_WAIT_SUB_MCOIN"),
new PlayerProperty("PLAYER_LEGENDARY_KEY", 0),
new PlayerProperty("IS_HAS_FIRST_SHARE"),
new PlayerProperty("PLAYER_FORGE_POINT", 0, 300_000),
new PlayerProperty("CUR_CLIMATE_METER"),
new PlayerProperty("CUR_CLIMATE_TYPE"),
new PlayerProperty("CUR_CLIMATE_AREA_ID"),
new PlayerProperty("CUR_CLIMATE_AREA_CLIMATE_TYPE"),
new PlayerProperty("PLAYER_WORLD_LEVEL_LIMIT"),
new PlayerProperty("PLAYER_WORLD_LEVEL_ADJUST_CD"),
new PlayerProperty("PLAYER_LEGENDARY_DAILY_TASK_NUM"),
new PlayerProperty("PLAYER_HOME_COIN", 0, description: "Realm currency [0, +inf)"),
new PlayerProperty("PLAYER_WAIT_SUB_HOME_COIN")
};
public string Id { get; }
public string Name { get; set; }
public int Min { get; }
public int Max { get; }
public string Description { get; set; }
private PlayerProperty(string id, int min = int.MinValue, int max = int.MaxValue, string description = "")
{
Id = id;
Min = min;
Max = max;
Description = description;
}
}
}

View File

@@ -17,6 +17,7 @@
*
**/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -31,9 +32,12 @@ namespace GrasscutterTools.Game
{
LoadManualTextMap(Path.Combine(resourcesDirPath, "ExcelBinOutput", "ManualTextMapConfigData.json"));
LoadTextMaps(Path.Combine(resourcesDirPath, "TextMap"));
LoadTextMap(TextMapFilePaths[Array.IndexOf(TextMapFiles, "TextMapCHS")]);
DefaultTextMap = TextMap;
}
public Dictionary<string, string> ManualTextMap;
public Dictionary<string, string> DefaultTextMap;
public Dictionary<string, string> TextMap;
public string[] TextMapFilePaths;
public string[] TextMapFiles;
@@ -81,5 +85,12 @@ namespace GrasscutterTools.Game
}
}
}
public string GetText(string textMapHash)
{
return TextMap.TryGetValue(textMapHash, out var text) ? text
: DefaultTextMap.TryGetValue(textMapHash, out text) ? text
: "???";
}
}
}

View File

@@ -87,6 +87,12 @@
<ItemGroup>
<Compile Include="DispatchServer\DispatchServerAPI.cs" />
<Compile Include="DispatchServer\Model\ServerStatus.cs" />
<Compile Include="Forms\FormActivityEditor.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FormActivityEditor.Designer.cs">
<DependentUpon>FormActivityEditor.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FormDropEditor.cs">
<SubType>Form</SubType>
</Compile>
@@ -129,9 +135,13 @@
<Compile Include="Forms\FormTextMapBrowser.Designer.cs">
<DependentUpon>FormTextMapBrowser.cs</DependentUpon>
</Compile>
<Compile Include="Game\Activity\ActivityConfigItem.cs" />
<Compile Include="Game\Activity\NewActivityItem.cs" />
<Compile Include="Game\CommandVersion.cs" />
<Compile Include="Game\CutScene\CutSceneItem.cs" />
<Compile Include="Game\Drop\DropData.cs" />
<Compile Include="Game\Drop\DropInfo.cs" />
<Compile Include="Game\Dungeon\DungeonItem.cs" />
<Compile Include="Game\Gacha\GachaBanner3.cs" />
<Compile Include="Game\Gacha\GachaBanner2.cs" />
<Compile Include="Game\GameCommand.cs" />
@@ -143,6 +153,7 @@
<Compile Include="Game\Mail\Mail.cs" />
<Compile Include="Game\Mail\MailItem.cs" />
<Compile Include="Game\Player\PlayerData.cs" />
<Compile Include="Game\Props\PlayerProperty.cs" />
<Compile Include="Game\SetStatsCommand.cs" />
<Compile Include="Game\Shop\ItemParamData.cs" />
<Compile Include="Game\Shop\ShopGoodsData.cs" />
@@ -166,6 +177,12 @@
<Compile Include="Pages\PageAbout.Designer.cs">
<DependentUpon>PageAbout.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageAchievement.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageAchievement.Designer.cs">
<DependentUpon>PageAchievement.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageAvatar.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -202,6 +219,12 @@
<Compile Include="Pages\PageHome.Designer.cs">
<DependentUpon>PageHome.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageHotKey.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageHotKey.Designer.cs">
<DependentUpon>PageHotKey.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageMail.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -232,12 +255,30 @@
<Compile Include="Pages\PageScene.Designer.cs">
<DependentUpon>PageScene.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageSetProp.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageSetProp.Designer.cs">
<DependentUpon>PageSetProp.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageSpawn.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageSpawn.Designer.cs">
<DependentUpon>PageSpawn.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageTasks.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageTasks.Designer.cs">
<DependentUpon>PageTasks.cs</DependentUpon>
</Compile>
<Compile Include="Pages\PageTools.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Pages\PageTools.Designer.cs">
<DependentUpon>PageTools.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.zh-TW.Designer.cs">
@@ -245,11 +286,29 @@
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="Utils\AppHotKey.cs" />
<Compile Include="Utils\ArtifactUtils.cs" />
<Compile Include="Utils\Common.cs" />
<Compile Include="Utils\GuiRedirect.cs" />
<Compile Include="Utils\KeyGo.cs" />
<Compile Include="Utils\HotKeyItem.cs" />
<Compile Include="Utils\HttpHelper.cs" />
<Compile Include="Utils\ReleaseAPI.cs" />
<Compile Include="Utils\Logger.cs" />
<Compile Include="Utils\GithubHelper.cs" />
<Compile Include="Utils\ToggleParser.cs" />
<Compile Include="Utils\UIUtil.cs" />
<EmbeddedResource Include="Forms\FormActivityEditor.en-US.resx">
<DependentUpon>FormActivityEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormActivityEditor.resx">
<DependentUpon>FormActivityEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormActivityEditor.ru-RU.resx">
<DependentUpon>FormActivityEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormActivityEditor.zh-TW.resx">
<DependentUpon>FormActivityEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FormDropEditor.en-US.resx">
<DependentUpon>FormDropEditor.cs</DependentUpon>
</EmbeddedResource>
@@ -351,6 +410,18 @@
<EmbeddedResource Include="Pages\PageAbout.zh-TW.resx">
<DependentUpon>PageAbout.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAchievement.en-US.resx">
<DependentUpon>PageAchievement.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAchievement.resx">
<DependentUpon>PageAchievement.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAchievement.ru-RU.resx">
<DependentUpon>PageAchievement.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAchievement.zh-TW.resx">
<DependentUpon>PageAchievement.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageAvatar.en-US.resx">
<DependentUpon>PageAvatar.cs</DependentUpon>
</EmbeddedResource>
@@ -380,6 +451,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageGiveArtifact.resx">
<DependentUpon>PageGiveArtifact.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageGiveArtifact.ru-RU.resx">
<DependentUpon>PageGiveArtifact.cs</DependentUpon>
@@ -413,6 +485,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageHome.en-US.resx">
<DependentUpon>PageHome.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageHome.resx">
<DependentUpon>PageHome.cs</DependentUpon>
@@ -423,6 +496,18 @@
<EmbeddedResource Include="Pages\PageHome.zh-TW.resx">
<DependentUpon>PageHome.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageHotKey.en-US.resx">
<DependentUpon>PageHotKey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageHotKey.resx">
<DependentUpon>PageHotKey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageHotKey.ru-RU.resx">
<DependentUpon>PageHotKey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageHotKey.zh-TW.resx">
<DependentUpon>PageHotKey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageMail.en-US.resx">
<DependentUpon>PageMail.cs</DependentUpon>
</EmbeddedResource>
@@ -483,6 +568,18 @@
<EmbeddedResource Include="Pages\PageScene.zh-TW.resx">
<DependentUpon>PageScene.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSetProp.en-US.resx">
<DependentUpon>PageSetProp.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSetProp.resx">
<DependentUpon>PageSetProp.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSetProp.ru-RU.resx">
<DependentUpon>PageSetProp.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSetProp.zh-TW.resx">
<DependentUpon>PageSetProp.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSpawn.en-US.resx">
<DependentUpon>PageSpawn.cs</DependentUpon>
</EmbeddedResource>
@@ -495,6 +592,21 @@
<EmbeddedResource Include="Pages\PageSpawn.zh-TW.resx">
<DependentUpon>PageSpawn.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageTasks.en-US.resx">
<DependentUpon>PageTasks.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageTasks.resx">
<DependentUpon>PageTasks.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageTasks.ru-RU.resx">
<DependentUpon>PageTasks.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageTasks.zh-TW.resx">
<DependentUpon>PageTasks.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageTools.resx">
<DependentUpon>PageTools.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.zh-TW.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.zh-TW.Designer.cs</LastGenOutput>
@@ -549,6 +661,8 @@
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\en-us\Achievement.txt" />
<Content Include="Resources\en-us\Activity.txt" />
<Content Include="Resources\en-us\Artifact.txt" />
<Content Include="Resources\en-us\ArtifactCat.txt" />
<Content Include="Resources\en-us\ArtifactMainAttribution.txt" />
@@ -556,16 +670,21 @@
<Content Include="Resources\en-us\Avatar.txt" />
<Content Include="Resources\en-us\CustomCommands.txt" />
<None Include="Resources\en-us\Dungeon.txt" />
<Content Include="Resources\en-us\Cutscene.txt" />
<Content Include="Resources\en-us\GachaBennerTitle.txt" />
<Content Include="Resources\en-us\GachaBennerPrefab.txt" />
<Content Include="Resources\en-us\Gadget.txt" />
<Content Include="Resources\en-us\Item.txt" />
<Content Include="Resources\en-us\Monsters.txt" />
<Content Include="Resources\en-us\PlayerProperty.txt" />
<Content Include="Resources\en-us\Quest.txt" />
<Content Include="Resources\en-us\Scene.txt" />
<Content Include="Resources\en-us\ShopType.txt" />
<Content Include="Resources\en-us\Weapon.txt" />
<None Include="Resources\Newtonsoft.Json.dll" />
<Content Include="Resources\MyTools.java" />
<Content Include="Resources\ru-ru\Achievement.txt" />
<Content Include="Resources\ru-ru\Activity.txt" />
<Content Include="Resources\ru-ru\Artifact.txt" />
<Content Include="Resources\ru-ru\ArtifactCat.txt" />
<Content Include="Resources\ru-ru\ArtifactMainAttribution.txt" />
@@ -573,11 +692,13 @@
<Content Include="Resources\ru-ru\Avatar.txt" />
<Content Include="Resources\ru-ru\CustomCommands.txt" />
<None Include="Resources\ru-ru\Dungeon.txt" />
<Content Include="Resources\ru-ru\Cutscene.txt" />
<Content Include="Resources\ru-ru\GachaBennerTitle.txt" />
<Content Include="Resources\ru-ru\GachaBennerPrefab.txt" />
<Content Include="Resources\ru-ru\Gadget.txt" />
<Content Include="Resources\ru-ru\Item.txt" />
<Content Include="Resources\ru-ru\Monsters.txt" />
<Content Include="Resources\ru-ru\PlayerProperty.txt" />
<Content Include="Resources\ru-ru\Quest.txt" />
<Content Include="Resources\ru-ru\Scene.txt" />
<Content Include="Resources\ru-ru\ShopType.txt" />
@@ -587,6 +708,8 @@
<None Include="Resources\ImgSupport.png" />
<Content Include="Resources\Permissions.txt" />
<Content Include="Resources\WeaponColor.txt" />
<Content Include="Resources\zh-cn\Achievement.txt" />
<Content Include="Resources\zh-cn\Activity.txt" />
<Content Include="Resources\zh-cn\ArtifactCat.txt" />
<Content Include="Resources\zh-cn\ArtifactMainAttribution.txt" />
<Content Include="Resources\zh-cn\Artifact.txt" />
@@ -595,15 +718,19 @@
<Content Include="Resources\zh-cn\CustomCommands.txt" />
<Content Include="Resources\AvatarColor.txt" />
<None Include="Resources\zh-cn\Dungeon.txt" />
<Content Include="Resources\zh-cn\Cutscene.txt" />
<Content Include="Resources\zh-cn\GachaBannerTitle.txt" />
<Content Include="Resources\zh-cn\GachaBennerPrefab.txt" />
<Content Include="Resources\zh-cn\Gadget.txt" />
<Content Include="Resources\zh-cn\Item.txt" />
<Content Include="Resources\zh-cn\Monsters.txt" />
<Content Include="Resources\zh-cn\PlayerProperty.txt" />
<Content Include="Resources\zh-cn\Quest.txt" />
<Content Include="Resources\zh-cn\Scene.txt" />
<Content Include="Resources\zh-cn\ShopType.txt" />
<Content Include="Resources\zh-cn\Weapon.txt" />
<Content Include="Resources\zh-tw\Achievement.txt" />
<Content Include="Resources\zh-tw\Activity.txt" />
<Content Include="Resources\zh-tw\ArtifactCat.txt" />
<Content Include="Resources\zh-tw\ArtifactMainAttribution.txt" />
<Content Include="Resources\zh-tw\Artifact.txt" />
@@ -611,10 +738,12 @@
<Content Include="Resources\zh-tw\Avatar.txt" />
<Content Include="Resources\zh-tw\CustomCommands.txt" />
<None Include="Resources\zh-tw\Dungeon.txt" />
<Content Include="Resources\zh-tw\Cutscene.txt" />
<Content Include="Resources\zh-tw\GachaBennerTitle.txt" />
<Content Include="Resources\zh-tw\GachaBennerPrefab.txt" />
<Content Include="Resources\zh-tw\Item.txt" />
<Content Include="Resources\zh-tw\Monsters.txt" />
<Content Include="Resources\zh-tw\PlayerProperty.txt" />
<Content Include="Resources\zh-tw\Quest.txt" />
<Content Include="Resources\zh-tw\Scene.txt" />
<Content Include="Resources\zh-tw\ShopType.txt" />
@@ -637,5 +766,6 @@
<Version>2.2.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -46,15 +46,15 @@ namespace GrasscutterTools.OpenCommand
public async Task<bool> Ping()
{
try
{
var response = await DoRequest("ping");
return response.RetCode == 200;
}
catch (Exception)
{
return false;
}
//try
//{
var response = await DoRequest("ping");
return response.RetCode == 200;
//}
//catch (Exception)
//{
// return false;
//}
}
public async Task SendCode(int playerId)

View File

@@ -19,6 +19,7 @@
using System;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -51,7 +52,7 @@ namespace GrasscutterTools.Pages
/// <param name="args">参数</param>
public SetCommandHandler SetCommand { get; set; }
public delegate Task<bool> RunCommandsHandler(string[] commands);
public delegate Task<bool> RunCommandsHandler(params string[] commands);
/// <summary>
/// 运行命令
@@ -63,6 +64,30 @@ namespace GrasscutterTools.Pages
/// </summary>
public Func<string> GetCommand { get; set; }
/// <summary>
/// 运行原始命令(未处理的竖线分割命令文本)
/// </summary>
/// <param name="commands">未处理的竖线分割命令文本</param>
/// <returns>是否运行成功</returns>
protected async Task<bool> RunRawCommands(string commands)
{
if (commands.IndexOf('|') == -1)
return await RunCommands(FormatCommand(commands));
else
return await RunCommands(commands.Split('|').Select(FormatCommand).ToArray());
}
/// <summary>
/// 格式化命令
/// (去除收尾空白,替换换行)
/// </summary>
/// <param name="raw">原始输入</param>
/// <returns>格式化后可执行命令</returns>
private static string FormatCommand(string raw)
{
return raw.Trim().Replace("\\r", "\r").Replace("\\n", "\n");
}
#endregion - -
#region - -

View File

@@ -32,6 +32,7 @@
this.GrasscutterToolsSupport = new System.Windows.Forms.PictureBox();
this.LnkGithub = new System.Windows.Forms.LinkLabel();
this.LblSupportDescription = new System.Windows.Forms.Label();
this.LnkOpenChat = new System.Windows.Forms.LinkLabel();
((System.ComponentModel.ISupportInitialize)(this.GrasscutterToolsSupport)).BeginInit();
this.SuspendLayout();
//
@@ -54,10 +55,18 @@
resources.ApplyResources(this.LblSupportDescription, "LblSupportDescription");
this.LblSupportDescription.Name = "LblSupportDescription";
//
// LnkOpenChat
//
resources.ApplyResources(this.LnkOpenChat, "LnkOpenChat");
this.LnkOpenChat.Name = "LnkOpenChat";
this.LnkOpenChat.TabStop = true;
this.LnkOpenChat.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkOpenChat_LinkClicked);
//
// PageAbout
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.LnkOpenChat);
this.Controls.Add(this.GrasscutterToolsSupport);
this.Controls.Add(this.LnkGithub);
this.Controls.Add(this.LblSupportDescription);
@@ -73,5 +82,6 @@
private System.Windows.Forms.PictureBox GrasscutterToolsSupport;
private System.Windows.Forms.LinkLabel LnkGithub;
private System.Windows.Forms.Label LblSupportDescription;
private System.Windows.Forms.LinkLabel LnkOpenChat;
}
}

View File

@@ -37,5 +37,13 @@ namespace GrasscutterTools.Pages
{
UIUtil.OpenURL("https://github.com/jie65535/GrasscutterCommandGenerator");
}
/// <summary>
/// 点击查看服务器聊天插件时触发
/// </summary>
private void LnkOpenChat_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
UIUtil.OpenURL("https://github.com/jie65535/gc-openchat-plugin");
}
}
}

View File

@@ -130,4 +130,7 @@ If there is a problem with the command generation,
or there is a new feature request, you can file an issue on Github.
</value>
</data>
<data name="LnkOpenChat.Text" xml:space="preserve">
<value>Click to view server chat plugin</value>
</data>
</root>

View File

@@ -117,89 +117,21 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="GrasscutterToolsSupport.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="GrasscutterToolsSupport.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="GrasscutterToolsSupport.Location" type="System.Drawing.Point, System.Drawing">
<value>498, 86</value>
</data>
<data name="GrasscutterToolsSupport.MaximumSize" type="System.Drawing.Size, System.Drawing">
<value>280, 280</value>
</data>
<data name="GrasscutterToolsSupport.Size" type="System.Drawing.Size, System.Drawing">
<value>140, 140</value>
</data>
<data name="GrasscutterToolsSupport.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="GrasscutterToolsSupport.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.Name" xml:space="preserve">
<value>GrasscutterToolsSupport</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.ZOrder" xml:space="preserve">
<data name="&gt;&gt;LnkOpenChat.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;LblSupportDescription.Parent" xml:space="preserve">
<value>$this</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LnkGithub.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LnkGithub.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkGithub.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LnkGithub.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 209</value>
</data>
<data name="LnkGithub.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 17</value>
</data>
<data name="LnkGithub.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="LnkGithub.Text" xml:space="preserve">
<value>Github</value>
</data>
<data name="&gt;&gt;LnkGithub.Name" xml:space="preserve">
<value>LnkGithub</value>
</data>
<data name="&gt;&gt;LnkGithub.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LnkGithub.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LnkGithub.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="LblSupportDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblSupportDescription.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LblSupportDescription.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 12</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>334, 136</value>
</data>
<data name="LblSupportDescription.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<data name="LnkOpenChat.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>割草机工具箱
@@ -209,30 +141,131 @@
如果愿意请我喝一杯奶茶,那就更好了 : )
指令生成有问题或者有新的功能请求都可以来Github提出
欢迎加入内测Q群: 457427536 (需要回答正确答案)</value>
欢迎加入内测Q群: 835489603 (需要回答正确答案)</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LnkGithub.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LnkOpenChat.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
</data>
<data name="LblSupportDescription.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="GrasscutterToolsSupport.Location" type="System.Drawing.Point, System.Drawing">
<value>498, 86</value>
</data>
<data name="&gt;&gt;LnkGithub.Parent" xml:space="preserve">
<value>$this</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblSupportDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkGithub.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="GrasscutterToolsSupport.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageAbout</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>334, 136</value>
</data>
<data name="&gt;&gt;LnkOpenChat.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LnkOpenChat.Location" type="System.Drawing.Point, System.Drawing">
<value>198, 207</value>
</data>
<data name="GrasscutterToolsSupport.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;LnkOpenChat.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.8.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
<data name="&gt;&gt;LnkOpenChat.Name" xml:space="preserve">
<value>LnkOpenChat</value>
</data>
<data name="&gt;&gt;LblSupportDescription.Name" xml:space="preserve">
<value>LblSupportDescription</value>
</data>
<data name="&gt;&gt;LnkGithub.Name" xml:space="preserve">
<value>LnkGithub</value>
</data>
<data name="LnkGithub.Text" xml:space="preserve">
<value>Github</value>
</data>
<data name="LnkOpenChat.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 20</value>
</data>
<data name="GrasscutterToolsSupport.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="LnkOpenChat.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="GrasscutterToolsSupport.Size" type="System.Drawing.Size, System.Drawing">
<value>140, 140</value>
</data>
<data name="GrasscutterToolsSupport.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;GrasscutterToolsSupport.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrasscutterToolsSupport.MaximumSize" type="System.Drawing.Size, System.Drawing">
<value>280, 280</value>
</data>
<data name="LnkGithub.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblSupportDescription.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="LnkOpenChat.Text" xml:space="preserve">
<value>点击查看服务器聊天插件</value>
</data>
<data name="LblSupportDescription.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 12</value>
</data>
<data name="LblSupportDescription.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LnkGithub.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 209</value>
</data>
<data name="LnkGithub.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 17</value>
</data>
<data name="&gt;&gt;LblSupportDescription.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;LblSupportDescription.Parent" xml:space="preserve">
<value>$this</value>
<data name="LnkGithub.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;LblSupportDescription.ZOrder" xml:space="preserve">
<data name="&gt;&gt;GrasscutterToolsSupport.Name" xml:space="preserve">
<value>GrasscutterToolsSupport</value>
</data>
<data name="&gt;&gt;LnkGithub.ZOrder" xml:space="preserve">
<value>2</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="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageAbout</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>ru-RU</value>
</metadata>
</root>

View File

@@ -135,4 +135,7 @@
</value>
</data>
<data name="LnkOpenChat.Text" xml:space="preserve">
<value>[OpenChat] Плагин серверного чата</value>
</data>
</root>

View File

@@ -130,4 +130,7 @@
指令生成有問題或者有新的功能請求都可以來Github提出
</value>
</data>
<data name="LnkOpenChat.Text" xml:space="preserve">
<value>點擊查看伺服器聊天插件</value>
</data>
</root>

View File

@@ -0,0 +1,158 @@
namespace GrasscutterTools.Pages
{
partial class PageAchievement
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PageAchievement));
this.ListAchievements = new System.Windows.Forms.ListBox();
this.GrpAchievements = new System.Windows.Forms.GroupBox();
this.TxtAchievementFilter = new System.Windows.Forms.TextBox();
this.LnkRevokeAll = new System.Windows.Forms.LinkLabel();
this.LnkGrantAll = new System.Windows.Forms.LinkLabel();
this.GrpAchievementCommands = new System.Windows.Forms.GroupBox();
this.NUDProgress = new System.Windows.Forms.NumericUpDown();
this.BtnProgress = new System.Windows.Forms.Button();
this.BtnRevoke = new System.Windows.Forms.Button();
this.BtnGrant = new System.Windows.Forms.Button();
this.GrpAchievements.SuspendLayout();
this.GrpAchievementCommands.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDProgress)).BeginInit();
this.SuspendLayout();
//
// ListAchievements
//
resources.ApplyResources(this.ListAchievements, "ListAchievements");
this.ListAchievements.FormattingEnabled = true;
this.ListAchievements.Name = "ListAchievements";
this.ListAchievements.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
//
// GrpAchievements
//
resources.ApplyResources(this.GrpAchievements, "GrpAchievements");
this.GrpAchievements.Controls.Add(this.TxtAchievementFilter);
this.GrpAchievements.Controls.Add(this.LnkRevokeAll);
this.GrpAchievements.Controls.Add(this.ListAchievements);
this.GrpAchievements.Controls.Add(this.LnkGrantAll);
this.GrpAchievements.Name = "GrpAchievements";
this.GrpAchievements.TabStop = false;
//
// TxtAchievementFilter
//
resources.ApplyResources(this.TxtAchievementFilter, "TxtAchievementFilter");
this.TxtAchievementFilter.Name = "TxtAchievementFilter";
this.TxtAchievementFilter.TextChanged += new System.EventHandler(this.TxtAchievementFilter_TextChanged);
//
// LnkRevokeAll
//
resources.ApplyResources(this.LnkRevokeAll, "LnkRevokeAll");
this.LnkRevokeAll.Name = "LnkRevokeAll";
this.LnkRevokeAll.TabStop = true;
this.LnkRevokeAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkRevokeAll_LinkClicked);
//
// LnkGrantAll
//
resources.ApplyResources(this.LnkGrantAll, "LnkGrantAll");
this.LnkGrantAll.Name = "LnkGrantAll";
this.LnkGrantAll.TabStop = true;
this.LnkGrantAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkGrantAll_LinkClicked);
//
// GrpAchievementCommands
//
resources.ApplyResources(this.GrpAchievementCommands, "GrpAchievementCommands");
this.GrpAchievementCommands.Controls.Add(this.NUDProgress);
this.GrpAchievementCommands.Controls.Add(this.BtnProgress);
this.GrpAchievementCommands.Controls.Add(this.BtnRevoke);
this.GrpAchievementCommands.Controls.Add(this.BtnGrant);
this.GrpAchievementCommands.Name = "GrpAchievementCommands";
this.GrpAchievementCommands.TabStop = false;
//
// NUDProgress
//
resources.ApplyResources(this.NUDProgress, "NUDProgress");
this.NUDProgress.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDProgress.Name = "NUDProgress";
this.NUDProgress.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// BtnProgress
//
resources.ApplyResources(this.BtnProgress, "BtnProgress");
this.BtnProgress.Name = "BtnProgress";
this.BtnProgress.UseVisualStyleBackColor = true;
this.BtnProgress.Click += new System.EventHandler(this.BtnProgress_Click);
//
// BtnRevoke
//
resources.ApplyResources(this.BtnRevoke, "BtnRevoke");
this.BtnRevoke.Name = "BtnRevoke";
this.BtnRevoke.UseVisualStyleBackColor = true;
this.BtnRevoke.Click += new System.EventHandler(this.BtnRevoke_Click);
//
// BtnGrant
//
resources.ApplyResources(this.BtnGrant, "BtnGrant");
this.BtnGrant.Name = "BtnGrant";
this.BtnGrant.UseVisualStyleBackColor = true;
this.BtnGrant.Click += new System.EventHandler(this.BtnGrant_Click);
//
// PageAchievement
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.GrpAchievementCommands);
this.Controls.Add(this.GrpAchievements);
this.Name = "PageAchievement";
this.GrpAchievements.ResumeLayout(false);
this.GrpAchievements.PerformLayout();
this.GrpAchievementCommands.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.NUDProgress)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListBox ListAchievements;
private System.Windows.Forms.GroupBox GrpAchievements;
private System.Windows.Forms.GroupBox GrpAchievementCommands;
private System.Windows.Forms.Button BtnProgress;
private System.Windows.Forms.Button BtnRevoke;
private System.Windows.Forms.Button BtnGrant;
private System.Windows.Forms.NumericUpDown NUDProgress;
private System.Windows.Forms.TextBox TxtAchievementFilter;
private System.Windows.Forms.LinkLabel LnkRevokeAll;
private System.Windows.Forms.LinkLabel LnkGrantAll;
}
}

View File

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

View File

@@ -0,0 +1,154 @@
<?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="GrpAchievements.Text" xml:space="preserve">
<value>Achievements (since GC v1.4.7)</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LnkRevokeAll.Location" type="System.Drawing.Point, System.Drawing">
<value>565, 0</value>
</data>
<data name="LnkRevokeAll.Size" type="System.Drawing.Size, System.Drawing">
<value>69, 17</value>
</data>
<data name="LnkRevokeAll.Text" xml:space="preserve">
<value>Revoke All</value>
</data>
<data name="LnkGrantAll.Location" type="System.Drawing.Point, System.Drawing">
<value>501, 0</value>
</data>
<data name="LnkGrantAll.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 17</value>
</data>
<data name="LnkGrantAll.Text" xml:space="preserve">
<value>Grant All</value>
</data>
<data name="GrpAchievementCommands.Text" xml:space="preserve">
<value>Achievement control (select target item in list)</value>
</data>
<data name="BtnProgress.Text" xml:space="preserve">
<value>Progress</value>
</data>
<data name="BtnRevoke.Text" xml:space="preserve">
<value>Revoke</value>
</data>
<data name="BtnGrant.Text" xml:space="preserve">
<value>Grant</value>
</data>
</root>

View File

@@ -0,0 +1,399 @@
<?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.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListAchievements.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListAchievements.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ListAchievements.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 51</value>
</data>
<data name="ListAchievements.Size" type="System.Drawing.Size, System.Drawing">
<value>628, 106</value>
</data>
<data name="ListAchievements.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;ListAchievements.Name" xml:space="preserve">
<value>ListAchievements</value>
</data>
<data name="&gt;&gt;ListAchievements.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;ListAchievements.Parent" xml:space="preserve">
<value>GrpAchievements</value>
</data>
<data name="&gt;&gt;ListAchievements.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="GrpAchievements.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="TxtAchievementFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="TxtAchievementFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="TxtAchievementFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>628, 23</value>
</data>
<data name="TxtAchievementFilter.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;TxtAchievementFilter.Name" xml:space="preserve">
<value>TxtAchievementFilter</value>
</data>
<data name="&gt;&gt;TxtAchievementFilter.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;TxtAchievementFilter.Parent" xml:space="preserve">
<value>GrpAchievements</value>
</data>
<data name="&gt;&gt;TxtAchievementFilter.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="LnkRevokeAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="LnkRevokeAll.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkRevokeAll.Location" type="System.Drawing.Point, System.Drawing">
<value>578, 0</value>
</data>
<data name="LnkRevokeAll.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LnkRevokeAll.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="LnkRevokeAll.Text" xml:space="preserve">
<value>全部撤销</value>
</data>
<data name="&gt;&gt;LnkRevokeAll.Name" xml:space="preserve">
<value>LnkRevokeAll</value>
</data>
<data name="&gt;&gt;LnkRevokeAll.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LnkRevokeAll.Parent" xml:space="preserve">
<value>GrpAchievements</value>
</data>
<data name="&gt;&gt;LnkRevokeAll.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="LnkGrantAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="LnkGrantAll.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkGrantAll.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 0</value>
</data>
<data name="LnkGrantAll.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LnkGrantAll.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LnkGrantAll.Text" xml:space="preserve">
<value>全部达成</value>
</data>
<data name="&gt;&gt;LnkGrantAll.Name" xml:space="preserve">
<value>LnkGrantAll</value>
</data>
<data name="&gt;&gt;LnkGrantAll.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LnkGrantAll.Parent" xml:space="preserve">
<value>GrpAchievements</value>
</data>
<data name="&gt;&gt;LnkGrantAll.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="GrpAchievements.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="GrpAchievements.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 167</value>
</data>
<data name="GrpAchievements.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="GrpAchievements.Text" xml:space="preserve">
<value>成就列表GC v1.4.7 起)</value>
</data>
<data name="&gt;&gt;GrpAchievements.Name" xml:space="preserve">
<value>GrpAchievements</value>
</data>
<data name="&gt;&gt;GrpAchievements.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;GrpAchievements.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpAchievements.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpAchievementCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="NUDProgress.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="NUDProgress.Location" type="System.Drawing.Point, System.Drawing">
<value>579, 25</value>
</data>
<data name="NUDProgress.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 23</value>
</data>
<data name="NUDProgress.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;NUDProgress.Name" xml:space="preserve">
<value>NUDProgress</value>
</data>
<data name="&gt;&gt;NUDProgress.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;NUDProgress.Parent" xml:space="preserve">
<value>GrpAchievementCommands</value>
</data>
<data name="&gt;&gt;NUDProgress.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="BtnProgress.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnProgress.Location" type="System.Drawing.Point, System.Drawing">
<value>473, 25</value>
</data>
<data name="BtnProgress.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnProgress.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="BtnProgress.Text" xml:space="preserve">
<value>修改进度</value>
</data>
<data name="&gt;&gt;BtnProgress.Name" xml:space="preserve">
<value>BtnProgress</value>
</data>
<data name="&gt;&gt;BtnProgress.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;BtnProgress.Parent" xml:space="preserve">
<value>GrpAchievementCommands</value>
</data>
<data name="&gt;&gt;BtnProgress.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="BtnRevoke.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 25</value>
</data>
<data name="BtnRevoke.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnRevoke.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="BtnRevoke.Text" xml:space="preserve">
<value>撤销</value>
</data>
<data name="&gt;&gt;BtnRevoke.Name" xml:space="preserve">
<value>BtnRevoke</value>
</data>
<data name="&gt;&gt;BtnRevoke.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;BtnRevoke.Parent" xml:space="preserve">
<value>GrpAchievementCommands</value>
</data>
<data name="&gt;&gt;BtnRevoke.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="BtnGrant.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 25</value>
</data>
<data name="BtnGrant.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnGrant.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="BtnGrant.Text" xml:space="preserve">
<value>达成</value>
</data>
<data name="&gt;&gt;BtnGrant.Name" xml:space="preserve">
<value>BtnGrant</value>
</data>
<data name="&gt;&gt;BtnGrant.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;BtnGrant.Parent" xml:space="preserve">
<value>GrpAchievementCommands</value>
</data>
<data name="&gt;&gt;BtnGrant.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="GrpAchievementCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 176</value>
</data>
<data name="GrpAchievementCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 60</value>
</data>
<data name="GrpAchievementCommands.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="GrpAchievementCommands.Text" xml:space="preserve">
<value>成就控制(在列表中选择目标项)</value>
</data>
<data name="&gt;&gt;GrpAchievementCommands.Name" xml:space="preserve">
<value>GrpAchievementCommands</value>
</data>
<data name="&gt;&gt;GrpAchievementCommands.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;GrpAchievementCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpAchievementCommands.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="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageAchievement</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.9.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>

View File

@@ -0,0 +1,154 @@
<?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="GrpAchievements.Text" xml:space="preserve">
<value>Список достижений (начиная с GC v1.4.7)</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LnkRevokeAll.Location" type="System.Drawing.Point, System.Drawing">
<value>543, 0</value>
</data>
<data name="LnkRevokeAll.Size" type="System.Drawing.Size, System.Drawing">
<value>91, 17</value>
</data>
<data name="LnkRevokeAll.Text" xml:space="preserve">
<value>Отменить все</value>
</data>
<data name="LnkGrantAll.Location" type="System.Drawing.Point, System.Drawing">
<value>455, 0</value>
</data>
<data name="LnkGrantAll.Size" type="System.Drawing.Size, System.Drawing">
<value>82, 17</value>
</data>
<data name="LnkGrantAll.Text" xml:space="preserve">
<value>Достичь все</value>
</data>
<data name="GrpAchievementCommands.Text" xml:space="preserve">
<value>Контроль достижений (выберите целевой элемент в списке)</value>
</data>
<data name="BtnProgress.Text" xml:space="preserve">
<value>Прогресс</value>
</data>
<data name="BtnRevoke.Text" xml:space="preserve">
<value>Отменить</value>
</data>
<data name="BtnGrant.Text" xml:space="preserve">
<value>Достичь</value>
</data>
</root>

View File

@@ -0,0 +1,138 @@
<?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="LnkRevokeAll.Text" xml:space="preserve">
<value>全部撤銷</value>
</data>
<data name="LnkGrantAll.Text" xml:space="preserve">
<value>全部達成</value>
</data>
<data name="GrpAchievementCommands.Text" xml:space="preserve">
<value>成就控制(在列表中選擇目標項)</value>
</data>
<data name="BtnProgress.Text" xml:space="preserve">
<value>修改進度</value>
</data>
<data name="BtnRevoke.Text" xml:space="preserve">
<value>撤銷</value>
</data>
<data name="BtnGrant.Text" xml:space="preserve">
<value>達成</value>
</data>
</root>

View File

@@ -38,6 +38,7 @@
this.BtnRemoveCustomCommand = new System.Windows.Forms.Button();
this.BtnSaveCustomCommand = new System.Windows.Forms.Button();
this.TxtCustomName = new System.Windows.Forms.TextBox();
this.BtnAddHotKey = new System.Windows.Forms.Button();
this.GrpCustomCommands.SuspendLayout();
this.SuspendLayout();
//
@@ -100,10 +101,18 @@
this.TxtCustomName.Name = "TxtCustomName";
this.TxtCustomName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtCustomName_KeyDown);
//
// BtnAddHotKey
//
resources.ApplyResources(this.BtnAddHotKey, "BtnAddHotKey");
this.BtnAddHotKey.Name = "BtnAddHotKey";
this.BtnAddHotKey.UseVisualStyleBackColor = true;
this.BtnAddHotKey.Click += new System.EventHandler(this.BtnAddHotKey_Click);
//
// PageCustomCommands
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.BtnAddHotKey);
this.Controls.Add(this.BtnExportCustomCommands);
this.Controls.Add(this.BtnLoadCustomCommands);
this.Controls.Add(this.LblCustomName);
@@ -130,5 +139,6 @@
private System.Windows.Forms.Button BtnRemoveCustomCommand;
private System.Windows.Forms.Button BtnSaveCustomCommand;
private System.Windows.Forms.TextBox TxtCustomName;
private System.Windows.Forms.Button BtnAddHotKey;
}
}

View File

@@ -248,5 +248,18 @@ namespace GrasscutterTools.Pages
LoadCustomCommandControls(Resources.CustomCommands);
}
}
public Action<string> OnAddHotKey;
private void BtnAddHotKey_Click(object sender, EventArgs e)
{
var name = TxtCustomName.Text.Trim();
if (string.IsNullOrEmpty(name))
{
MessageBox.Show(Resources.CommandTagCannotBeEmpty, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
OnAddHotKey?.Invoke(name);
}
}
}

View File

@@ -119,19 +119,19 @@
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>573, 209</value>
<value>573, 206</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
<value>70, 30</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>Export</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>497, 209</value>
<value>497, 206</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
<value>70, 30</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>Load</value>
@@ -155,24 +155,30 @@
<value>Restore</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>421, 209</value>
<value>421, 206</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
<value>70, 30</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× Delete</value>
</data>
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>345, 209</value>
<value>345, 206</value>
</data>
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
<value>70, 30</value>
</data>
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
<value>√ Save</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>298, 23</value>
<value>217, 23</value>
</data>
<data name="BtnAddHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>264, 206</value>
</data>
<data name="BtnAddHotKey.Text" xml:space="preserve">
<value>HotKey</value>
</data>
</root>

View File

@@ -117,283 +117,310 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnExportCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnExportCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>590, 209</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnExportCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>导出</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.Name" xml:space="preserve">
<value>BtnExportCustomCommands</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.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;BtnExportCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="BtnLoadCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnLoadCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>534, 209</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
</data>
<data name="BtnLoadCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>载入</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Name" xml:space="preserve">
<value>BtnLoadCustomCommands</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.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;BtnLoadCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="LblCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblCustomName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblCustomName.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LblCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 212</value>
</data>
<data name="LblCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="LblCustomName.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="LblCustomName.Text" xml:space="preserve">
<value>标签</value>
</data>
<data name="&gt;&gt;LblCustomName.Name" xml:space="preserve">
<value>LblCustomName</value>
</data>
<data name="&gt;&gt;LblCustomName.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;LblCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblCustomName.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="GrpCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="LnkResetCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="LnkResetCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkResetCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LnkResetCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>602, -1</value>
</data>
<data name="LnkResetCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="LnkResetCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<data name="BtnAddHotKey.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="LnkResetCustomCommands.Text" xml:space="preserve">
<value>重置</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Name" xml:space="preserve">
<value>LnkResetCustomCommands</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="FLPCustomCommands.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="FLPCustomCommands.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="FLPCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="FLPCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 174</value>
</data>
<data name="FLPCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Name" xml:space="preserve">
<value>FLPCustomCommands</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 7</value>
</data>
<data name="GrpCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 196</value>
</data>
<data name="GrpCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="GrpCustomCommands.Text" xml:space="preserve">
<value>列表</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Name" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.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;GrpCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="BtnRemoveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnRemoveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>468, 209</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="BtnRemoveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 删除</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Name" xml:space="preserve">
<value>BtnRemoveCustomCommand</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.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;BtnRemoveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnSaveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnSaveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>402, 209</value>
</data>
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="BtnSaveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
<value>√ 保存</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Name" xml:space="preserve">
<value>BtnSaveCustomCommand</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.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;BtnSaveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="TxtCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="TxtCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 209</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>355, 23</value>
</data>
<data name="TxtCustomName.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;TxtCustomName.Name" xml:space="preserve">
<value>TxtCustomName</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.11.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
<data name="&gt;&gt;TxtCustomName.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>405, 206</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>471, 206</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnLoadCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="LnkResetCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.Name" xml:space="preserve">
<value>BtnExportCustomCommands</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>537, 206</value>
</data>
<data name="LnkResetCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="GrpCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 30</value>
</data>
<data name="TxtCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 210</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="LnkResetCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.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="BtnExportCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Name" xml:space="preserve">
<value>BtnLoadCustomCommands</value>
</data>
<data name="BtnRemoveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="FLPCustomCommands.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="LblCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnAddHotKey.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.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;LblCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="TxtCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>导出</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Name" xml:space="preserve">
<value>LnkResetCustomCommands</value>
</data>
<data name="LblCustomName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkResetCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.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="LblCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 30</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnLoadCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="LblCustomName.Text" xml:space="preserve">
<value>标签</value>
</data>
<data name="&gt;&gt;TxtCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtCustomName.ZOrder" xml:space="preserve">
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 30</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Name" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Name" xml:space="preserve">
<value>BtnRemoveCustomCommand</value>
</data>
<data name="BtnAddHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 30</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Name" xml:space="preserve">
<value>FLPCustomCommands</value>
</data>
<data name="BtnExportCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>593, 206</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="FLPCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.ZOrder" xml:space="preserve">
<value>6</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="LblCustomName.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.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="FLPCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>277, 23</value>
</data>
<data name="LnkResetCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>602, -1</value>
</data>
<data name="GrpCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
<value>√ 保存</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="BtnAddHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 30</value>
</data>
<data name="&gt;&gt;LblCustomName.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;TxtCustomName.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnAddHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>324, 206</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LnkResetCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnExportCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="FLPCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 178</value>
</data>
<data name="GrpCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 200</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageCustomCommands</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<data name="GrpCustomCommands.Text" xml:space="preserve">
<value>列表</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 删除</value>
</data>
<data name="&gt;&gt;LblCustomName.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;BtnExportCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;TxtCustomName.Name" xml:space="preserve">
<value>TxtCustomName</value>
</data>
<data name="TxtCustomName.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="FLPCustomCommands.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.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="BtnSaveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="BtnSaveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnRemoveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.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="LblCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 213</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Name" xml:space="preserve">
<value>BtnSaveCustomCommand</value>
</data>
<data name="BtnRemoveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>载入</value>
</data>
<data name="GrpCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="BtnSaveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LblCustomName.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="BtnLoadCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;LblCustomName.Name" xml:space="preserve">
<value>LblCustomName</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Name" xml:space="preserve">
<value>BtnAddHotKey</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -119,19 +119,19 @@
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>545, 209</value>
<value>548, 206</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 23</value>
<value>95, 30</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>Экспорт</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>444, 209</value>
<value>447, 206</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 23</value>
<value>95, 30</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>Загрузить</value>
@@ -155,24 +155,33 @@
<value>Сбросить</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>343, 209</value>
<value>346, 206</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 23</value>
<value>95, 30</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>x Удалить</value>
</data>
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>242, 209</value>
<value>245, 206</value>
</data>
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 23</value>
<value>95, 30</value>
</data>
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
<value>√ Сохранить</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 23</value>
<value>120, 23</value>
</data>
<data name="BtnAddHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>167, 206</value>
</data>
<data name="BtnAddHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 30</value>
</data>
<data name="BtnAddHotKey.Text" xml:space="preserve">
<value>Горячая.</value>
</data>
</root>

View File

@@ -129,4 +129,7 @@
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 刪除</value>
</data>
<data name="BtnAddHotKey.Text" xml:space="preserve">
<value>快捷鍵</value>
</data>
</root>

View File

@@ -172,6 +172,7 @@
this.CmbMainAttribution.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbMainAttribution.FormattingEnabled = true;
this.CmbMainAttribution.Name = "CmbMainAttribution";
this.CmbMainAttribution.SelectedIndexChanged += new System.EventHandler(this.ArtifactInputChanged);
//
// LblMainAttribution
//

View File

@@ -706,6 +706,6 @@
<value>PageGiveArtifact</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.9.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>

View File

@@ -28,6 +28,7 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PageGiveItem));
this.LblClearGiveItemLogs = new System.Windows.Forms.Label();
this.BtnSaveGiveItemLog = new System.Windows.Forms.Button();
@@ -42,6 +43,8 @@
this.NUDGameItemAmout = new System.Windows.Forms.NumericUpDown();
this.NUDGameItemLevel = new System.Windows.Forms.NumericUpDown();
this.LblGiveCommandDescription = new System.Windows.Forms.Label();
this.BtnFilterItem = new System.Windows.Forms.Button();
this.MenuItemFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
this.GrpGiveItemRecord.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDGameItemAmout)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDGameItemLevel)).BeginInit();
@@ -159,10 +162,23 @@
resources.ApplyResources(this.LblGiveCommandDescription, "LblGiveCommandDescription");
this.LblGiveCommandDescription.Name = "LblGiveCommandDescription";
//
// BtnFilterItem
//
resources.ApplyResources(this.BtnFilterItem, "BtnFilterItem");
this.BtnFilterItem.Name = "BtnFilterItem";
this.BtnFilterItem.UseVisualStyleBackColor = true;
this.BtnFilterItem.Click += new System.EventHandler(this.BtnFilterItem_Click);
//
// MenuItemFilter
//
this.MenuItemFilter.Name = "MenuSpawnEntityFilter";
resources.ApplyResources(this.MenuItemFilter, "MenuItemFilter");
//
// PageGiveItem
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.BtnFilterItem);
this.Controls.Add(this.LblClearGiveItemLogs);
this.Controls.Add(this.BtnSaveGiveItemLog);
this.Controls.Add(this.BtnRemoveGiveItemLog);
@@ -199,5 +215,7 @@
private System.Windows.Forms.NumericUpDown NUDGameItemAmout;
private System.Windows.Forms.NumericUpDown NUDGameItemLevel;
private System.Windows.Forms.Label LblGiveCommandDescription;
private System.Windows.Forms.Button BtnFilterItem;
private System.Windows.Forms.ContextMenuStrip MenuItemFilter;
}
}

View File

@@ -46,8 +46,52 @@ namespace GrasscutterTools.Pages
/// </summary>
public override void OnLoad()
{
ListGameItems.Items.Clear();
ListGameItems.Items.AddRange(GameData.Items.Lines);
MenuItemFilter.SuspendLayout();
MenuItemFilter.Items.Clear();
SelectedItemTypeLines = GameData.Items.Lines;
var all = new ToolStripMenuItem
{
Text = Resources.All,
Tag = SelectedItemTypeLines,
};
all.Click += OnItemFilterClick;
MenuItemFilter.Items.Add(all);
foreach (var kv in GameData.Items)
{
var item = new ToolStripMenuItem
{
Text = kv.Key,
Tag = kv.Value.Lines,
};
item.Click += OnItemFilterClick;
MenuItemFilter.Items.Add(item);
}
MenuItemFilter.ResumeLayout();
LoadItemList();
}
/// <summary>
/// 当前选中的物品类型行
/// </summary>
private string[] SelectedItemTypeLines;
/// <summary>
/// 物品类型过滤器类型选中时触发
/// </summary>
private void OnItemFilterClick(object sender, EventArgs e)
{
var btn = sender as ToolStripMenuItem;
SelectedItemTypeLines = btn.Tag as string[];
LoadItemList();
}
/// <summary>
/// 加载物品列表
/// </summary>
private void LoadItemList()
{
UIUtil.ListBoxFilter(ListGameItems, SelectedItemTypeLines, TxtGameItemFilter.Text);
}
/// <summary>
@@ -55,7 +99,7 @@ namespace GrasscutterTools.Pages
/// </summary>
private void TxtGameItemFilter_TextChanged(object sender, EventArgs e)
{
UIUtil.ListBoxFilter(ListGameItems, GameData.Items.Lines, TxtGameItemFilter.Text);
LoadItemList();
}
/// <summary>
@@ -69,14 +113,25 @@ namespace GrasscutterTools.Pages
{
var id = ItemMap.ToId(name);
NUDGameItemLevel.Enabled = true;
if (ChkDrop.Checked)
{
NUDGameItemLevel.Enabled = false;
SetCommand("/drop", $"{id} {NUDGameItemAmout.Value}");
if (CommandVersion.Check(CommandVersion.V1_3_1))
{
SetCommand("/spawn", $"{id} x{NUDGameItemAmout.Value} lv{NUDGameItemLevel.Value}");
}
else if (CommandVersion.Check(CommandVersion.V1_2_2))
{
SetCommand("/spawn", $"{id} {NUDGameItemAmout.Value} {NUDGameItemLevel.Value}");
}
else
{
NUDGameItemLevel.Enabled = false;
SetCommand("/drop", $"{id} {NUDGameItemAmout.Value}");
}
}
else
{
NUDGameItemLevel.Enabled = true;
if (CommandVersion.Check(CommandVersion.V1_2_2))
SetCommand("/give", $"{id} x{NUDGameItemAmout.Value} lv{NUDGameItemLevel.Value}");
else
@@ -95,6 +150,14 @@ namespace GrasscutterTools.Pages
GenGiveItemCommand();
}
/// <summary>
/// 点击过滤物品按钮时触发
/// </summary>
private void BtnFilterItem_Click(object sender, EventArgs e)
{
MenuItemFilter.Show(BtnFilterItem, 0, BtnFilterItem.Height);
}
#region -- --
/// <summary>

View File

@@ -151,7 +151,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;LblClearGiveItemLogs.ZOrder" xml:space="preserve">
<value>0</value>
<value>2</value>
</data>
<data name="BtnSaveGiveItemLog.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@@ -178,7 +178,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveGiveItemLog.ZOrder" xml:space="preserve">
<value>1</value>
<value>3</value>
</data>
<data name="BtnRemoveGiveItemLog.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
@@ -208,7 +208,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;BtnRemoveGiveItemLog.ZOrder" xml:space="preserve">
<value>2</value>
<value>4</value>
</data>
<data name="GrpGiveItemRecord.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left</value>
@@ -262,7 +262,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;GrpGiveItemRecord.ZOrder" xml:space="preserve">
<value>3</value>
<value>5</value>
</data>
<data name="ChkDrop.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -295,7 +295,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;ChkDrop.ZOrder" xml:space="preserve">
<value>4</value>
<value>6</value>
</data>
<data name="TxtGameItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@@ -304,7 +304,7 @@
<value>343, 3</value>
</data>
<data name="TxtGameItemFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 23</value>
<value>268, 23</value>
</data>
<data name="TxtGameItemFilter.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@@ -319,7 +319,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;TxtGameItemFilter.ZOrder" xml:space="preserve">
<value>5</value>
<value>7</value>
</data>
<data name="ListGameItems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
@@ -334,7 +334,7 @@
<value>300, 208</value>
</data>
<data name="ListGameItems.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
<value>11</value>
</data>
<data name="&gt;&gt;ListGameItems.Name" xml:space="preserve">
<value>ListGameItems</value>
@@ -346,7 +346,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;ListGameItems.ZOrder" xml:space="preserve">
<value>6</value>
<value>8</value>
</data>
<data name="LblGameItemAmount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -379,7 +379,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;LblGameItemAmount.ZOrder" xml:space="preserve">
<value>7</value>
<value>9</value>
</data>
<data name="LblGameItemLevel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -412,7 +412,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;LblGameItemLevel.ZOrder" xml:space="preserve">
<value>8</value>
<value>10</value>
</data>
<data name="NUDGameItemAmout.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -436,7 +436,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;NUDGameItemAmout.ZOrder" xml:space="preserve">
<value>9</value>
<value>11</value>
</data>
<data name="NUDGameItemLevel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -460,7 +460,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;NUDGameItemLevel.ZOrder" xml:space="preserve">
<value>10</value>
<value>12</value>
</data>
<data name="LblGiveCommandDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -491,7 +491,49 @@
<value>$this</value>
</data>
<data name="&gt;&gt;LblGiveCommandDescription.ZOrder" xml:space="preserve">
<value>11</value>
<value>13</value>
</data>
<data name="BtnFilterItem.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnFilterItem.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnFilterItem.Location" type="System.Drawing.Point, System.Drawing">
<value>617, 3</value>
</data>
<data name="BtnFilterItem.Size" type="System.Drawing.Size, System.Drawing">
<value>26, 24</value>
</data>
<data name="BtnFilterItem.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="BtnFilterItem.Text" xml:space="preserve">
<value>三</value>
</data>
<data name="&gt;&gt;BtnFilterItem.Name" xml:space="preserve">
<value>BtnFilterItem</value>
</data>
<data name="&gt;&gt;BtnFilterItem.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;BtnFilterItem.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnFilterItem.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="MenuItemFilter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="MenuItemFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 4</value>
</data>
<data name="&gt;&gt;MenuItemFilter.Name" xml:space="preserve">
<value>MenuItemFilter</value>
</data>
<data name="&gt;&gt;MenuItemFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
@@ -503,6 +545,6 @@
<value>PageGiveItem</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.4.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.6.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>

Some files were not shown because too many files have changed in this diff Show More