Compare commits

...

131 Commits

Author SHA1 Message Date
c94a7683e4 Update tab order 2023-08-25 19:53:40 +08:00
b407012bef Add FreezeTime and LockWeather to scene page 2023-08-25 19:47:23 +08:00
bb7d28153f Enlarge custom commands font size 2023-08-25 19:39:30 +08:00
627d9c7cd2 Add fly command 2023-08-25 19:37:14 +08:00
53a83fd7a7 Update version to v1.12.2 2023-08-24 19:51:49 +08:00
c2ca091662 Update Items filter 2023-08-24 19:51:30 +08:00
738a755353 Update All Gadgets
Update Spawn filter
2023-08-24 19:41:30 +08:00
dcbd946407 Fix console include @uid issue 2023-08-24 17:16:30 +08:00
2a8cebcbb5 Clean up all code 2023-08-24 15:18:12 +08:00
434ec7b2df Fix Jadefall's Splendor 2023-08-24 14:57:15 +08:00
c2ff37facf Update scene dungeon names 2023-08-24 13:49:15 +08:00
f48c9b4d0b Update 4.0 Quests 2023-08-24 00:02:19 +08:00
1d734479d1 Update filter button UI 2023-08-23 23:34:13 +08:00
a989581d59 Swap the run and copy button positions 2023-08-23 23:05:24 +08:00
6ab9d3842c Update version to v1.12.1 2023-08-23 22:40:42 +08:00
b69b2941b6 Fix auto check local server error 2023-08-23 22:39:40 +08:00
90deaa84b4 Update Scenes and avatar/weapon colors 2023-08-22 22:40:33 +08:00
403cc3fe52 Add GC 1.7 2023-08-22 22:24:01 +08:00
dd4eb36c17 Update Banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-08-22 22:23:08 +08:00
2645e16bee Add Resources update tool 2023-08-22 22:17:47 +08:00
82668c4c6a Update All 4.0 Ids 2023-08-22 22:17:18 +08:00
8fce4a8995 Update 4.0 Ids(Activity/Dungeon/Weapon) 2023-08-22 00:16:35 +08:00
Deuteriunt
4cfbebcc5a Update Activity/Avatar/Weapon ids(CHS) (#202) 2023-08-20 14:57:40 +08:00
40db4236ba Add Commandline Usages 2023-08-02 18:06:43 +08:00
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
267 changed files with 123513 additions and 52203 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,60 @@
[![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)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### 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 +78,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,61 @@
[![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)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### 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 +79,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,60 @@
[![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)
命令行用法:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### 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 +83,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
---
## 软件截图

116
README_zh-tw.md Normal file
View File

@@ -0,0 +1,116 @@
# 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)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### 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

@@ -29,7 +29,7 @@
<value>10001</value>
</setting>
<setting name="Host" serializeAs="String">
<value>https://127.0.0.1</value>
<value>http://127.0.0.1:443</value>
</setting>
<setting name="CheckedLastVersion" serializeAs="String">
<value />
@@ -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

@@ -24,7 +24,7 @@ using GrasscutterTools.Utils;
namespace GrasscutterTools.DispatchServer
{
public static class DispatchServerAPI
internal static class DispatchServerAPI
{
public static async Task<ServerStatus> QueryServerStatus(string host)
{

View File

@@ -21,7 +21,7 @@ using Newtonsoft.Json;
namespace GrasscutterTools.DispatchServer.Model
{
public class ServerStatus
internal class ServerStatus
{
[JsonProperty("playerCount")]
public int PlayerCount { get; set; }
@@ -33,7 +33,7 @@ namespace GrasscutterTools.DispatchServer.Model
public string Version { get; set; }
}
public class ServerStatusResponse
internal class ServerStatusResponse
{
[JsonProperty("retcode")]
public int RetCode { get; set; }

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

@@ -44,6 +44,22 @@ namespace GrasscutterTools.Forms
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;
@@ -52,14 +68,21 @@ namespace GrasscutterTools.Forms
{
StartPosition = FormStartPosition.Manual;
Location = location;
Logger.I(TAG, "Restore window location: " + Location.ToString());
Logger.I(TAG, "Restore window location: " + Location);
}
// 还原窗体大小
if (Settings.Default.MainFormSize != default)
{
Size = Settings.Default.MainFormSize;
Logger.I(TAG, "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);
}
// 恢复自动复制选项状态
@@ -85,25 +108,100 @@ namespace GrasscutterTools.Forms
TCMain.SuspendLayout();
var ph = CreatePage<PageHome>();
ph.OnLanguageChanged = () => FormMain_Load(this, EventArgs.Empty);
TPHome.Controls.Add(ph);
var poc = CreatePage<PageOpenCommand>();
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
TPRemoteCall.Controls.Add(poc);
TPCustom.Controls.Add(CreatePage<PageCustomCommands>());
TPArtifact.Controls.Add(CreatePage<PageGiveArtifact>());
TPSpawn.Controls.Add(CreatePage<PageSpawn>());
TPItem.Controls.Add(CreatePage<PageGiveItem>());
TPAvatar.Controls.Add(CreatePage<PageAvatar>());
TPWeapon.Controls.Add(CreatePage<PageGiveWeapon>());
TPManage.Controls.Add(CreatePage<PageManagement>());
TPMail.Controls.Add(CreatePage<PageMail>());
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<PageSetProp>();
CreatePage<PageSpawn>();
CreatePage<PageGiveItem>();
CreatePage<PageAvatar>();
CreatePage<PageGiveWeapon>();
CreatePage<PageScene>();
CreatePage<PageTasks>();
CreatePage<PageManagement>();
CreatePage<PageMail>();
CreatePage<PageQuest>();
CreatePage<PageAchievement>();
CreatePage<PageAbout>();
#if DEBUG
CreatePage<PageTools>();
#endif
TCMain.ResumeLayout();
Logger.I(TAG, "InitPages completed");
}
/// <summary>
/// 初始化页面导航
/// </summary>
private void InitPagesNav()
{
ListPages.Items.Clear();
ListPages.Items.AddRange(new object[]
{
Resources.PageHomeTitle,
Resources.PageOpenCommandTitle,
Resources.PageCustomCommandsTitle,
Resources.PageHotKey,
Resources.PageGetArtifactTitle,
Resources.PageSetPropTitle,
Resources.PageSpawnTitle,
Resources.PageGiveItemTitle,
Resources.PageAvatarTitle,
Resources.PageGiveWeaponTitle,
Resources.PageSceneTitle,
Resources.PageTasksTitle,
Resources.PageManagementTitle,
Resources.PageMailTitle,
Resources.PageQuestTitle,
Resources.PageAchievementTitle,
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>
/// 创建指定类型页面
/// </summary>
@@ -119,9 +217,17 @@ namespace GrasscutterTools.Forms
Dock = DockStyle.Fill,
Name = typeof(T).Name,
};
var tp = new TabPage();
TCMain.TabPages.Add(tp);
tp.Controls.Add(page);
return page;
}
private void ListPages_SelectedIndexChanged(object sender, EventArgs e)
{
TCMain.SelectedIndex = ListPages.SelectedIndex;
}
/// <summary>
/// 窗体载入时触发(切换语言时会重新载入)
/// </summary>
@@ -134,6 +240,9 @@ namespace GrasscutterTools.Forms
#endif
if (DesignMode) return;
// 加载页面导航
InitPagesNav();
// 加载游戏ID资源
GameData.LoadResources();
@@ -177,25 +286,51 @@ namespace GrasscutterTools.Forms
{
// 记录界面状态
Settings.Default.AutoCopy = ChkAutoCopy.Checked;
// 记录窗口位置
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>
@@ -206,10 +341,11 @@ namespace GrasscutterTools.Forms
{
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)
{
@@ -229,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>
@@ -244,10 +380,9 @@ namespace GrasscutterTools.Forms
/// <param name="args">参数</param>
private void SetCommand(string command, string args)
{
if (Settings.Default.IsIncludeUID)
SetCommand($"{command} @{Settings.Default.Uid} {args.Trim()}");
else
SetCommand($"{command} {args.Trim()}");
SetCommand(Settings.Default.IsIncludeUID
? $"{command} {args.Trim()} @{Settings.Default.Uid}"
: $"{command} {args.Trim()}");
}
/// <summary>
@@ -296,10 +431,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>
@@ -323,7 +468,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;
}
@@ -387,11 +541,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;
}
@@ -402,8 +556,8 @@ namespace GrasscutterTools.Forms
Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom,
Multiline = true,
Font = new Font("Consolas", 9F),
Location = new Point(BtnInvokeOpenCommand.Left, BtnInvokeOpenCommand.Bottom + 6),
Size = new Size(GrpCommand.Width - BtnInvokeOpenCommand.Left * 2, TxtCommandRunLogMinHeight),
Location = new Point(ChkAutoCopy.Left, ChkAutoCopy.Bottom + 6),
Size = new Size(GrpCommand.Width - ChkAutoCopy.Left * 2, TxtCommandRunLogMinHeight),
ReadOnly = true,
BackColor = Color.White,
ScrollBars = ScrollBars.Vertical,
@@ -426,6 +580,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>
@@ -440,6 +601,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>NoControl</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>
<value>115, 22</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>
@@ -144,17 +264,14 @@
<data name="&gt;&gt;CmbCommand.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>543, 22</value>
<value>59, 22</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
<value>50, 25</value>
</data>
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -174,9 +291,6 @@
<data name="&gt;&gt;BtnCopy.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ChkAutoCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -184,7 +298,7 @@
<value>NoControl</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>599, 24</value>
<value>10, 24</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
@@ -210,14 +324,17 @@
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="BtnInvokeOpenCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnInvokeOpenCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnInvokeOpenCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
<value>721, 22</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
<value>75, 25</value>
</data>
<data name="BtnInvokeOpenCommand.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -244,7 +361,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 +381,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 +400,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 +409,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

@@ -119,22 +119,22 @@
</resheader>
<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>132, 21</value>
<value>155, 21</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>359, 25</value>
<value>523, 25</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>497, 22</value>
<value>57, 21</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>92, 23</value>
<value>92, 25</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>Копировать</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>595, 24</value>
<value>6, 24</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
@@ -142,190 +142,20 @@
<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.Location" type="System.Drawing.Point, System.Drawing">
<value>684, 21</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 23</value>
<value>120, 25</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>NoControl</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>NoControl</value>
</data>
</root>

View File

@@ -26,7 +26,7 @@ namespace GrasscutterTools.GOOD
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Artifact.cs
/// </summary>
public class Artifact
internal class Artifact
{
/// <summary>
/// e.g. "GladiatorsFinale"

View File

@@ -26,7 +26,7 @@ namespace GrasscutterTools.GOOD
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Character.cs
/// </summary>
public class Character
internal class Character
{
/// <summary>
/// e.g. "Rosaria"

View File

@@ -38,7 +38,7 @@ namespace GrasscutterTools.GOOD
/// https://genshin.mingyulab.com/
/// https://genshin-center.com/
/// </summary>
public class GOOD
internal class GOOD
{
[JsonProperty("format")]
public string Format { get; set; }

View File

@@ -26,7 +26,7 @@ using GrasscutterTools.Properties;
namespace GrasscutterTools.GOOD
{
public static class GOODData
internal static class GOODData
{
static GOODData()
{

View File

@@ -28,7 +28,7 @@ namespace GrasscutterTools.GOOD
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Weapon.cs
/// </summary>
public class Weapon
internal class Weapon
{
/// <summary>
/// e.g. "CrescentPike"

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
{
internal 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,46 @@ 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);
/// <summary>
/// 2023/??
/// </summary>
public static readonly Version V1_7_0 = new Version(1, 7, 0);
// 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 +183,13 @@ 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,
V1_7_0,
};
#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.Data.Excels
{
[ResourceType("AchievementExcelConfigData.json")]
internal class AchievementData : GameResource
{
[JsonProperty("isDisuse")]
public bool IsDisuse { get; set; }
public bool IsUsed => !IsDisuse;
}
}

View File

@@ -0,0 +1,33 @@
/**
* 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 GrasscutterTools.Game.Props;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("AvatarExcelConfigData.json")]
internal class AvatarData : GameResource
{
[JsonProperty("qualityType"), JsonConverter(typeof(StringEnumConverter))]
public QualityType QualityType { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
/**
* 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.Data.Excels
{
[ResourceType("DungeonExcelConfigData.json")]
internal class DungeonData : GameResource
{
[JsonProperty("sceneId")]
public int SceneId { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
/**
* 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.Data.Excels
{
[ResourceType("GadgetExcelConfigData.json")]
internal class GadgetData : GameResource
{
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("jsonName")]
public string JsonName { get; set; }
[JsonProperty("interactNameTextMapHash")]
public long InteractNameTextMapHash { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
/**
* 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.Data.Excels
{
[ResourceType("GatherExcelConfigData.json")]
internal class GatherData
{
[JsonProperty("gadgetId")]
public int GadgetId { get; set; }
[JsonProperty("itemId")]
public int ItemId { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
/**
* 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.Data.Excels
{
[ResourceType("HomeWorldBgmExcelConfigData.json")]
internal class HomeWorldBgmData : GameResource
{
[JsonProperty("homeBgmId")]
public override int Id { get; set; }
[JsonProperty("bgmNameTextMapHash")]
public long BgmNameTextMapHash { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
/**
* 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.Data.Excels
{
[ResourceType("HomeWorldFurnitureExcelConfigData.json")]
internal class HomeWorldFurnitureData : GameResource
{
[JsonProperty("furnitureGadgetID")]
public int[] FurnitureGadgetId { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
/**
* 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/>.
*
**/
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("MainQuestExcelConfigData.json")]
internal class MainQuestData : GameResource
{
}
}

View File

@@ -0,0 +1,42 @@
/**
* 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;
using GrasscutterTools.Game.Inventory;
using GrasscutterTools.Game.Props;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("MaterialExcelConfigData.json")]
internal class MaterialData : GameResource
{
[JsonProperty("itemType"), JsonConverter(typeof(StringEnumConverter))]
public ItemType ItemType { get; set; }
[JsonProperty("materialType"), JsonConverter(typeof(StringEnumConverter))]
public MaterialType MaterialType { get; set; }
[JsonProperty("itemUse")]
public List<ItemUseData> ItemUse { get; set; }
}
}

View File

@@ -0,0 +1,35 @@
/**
* 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 GrasscutterTools.Game.Props;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("MonsterExcelConfigData.json")]
internal class MonsterData : GameResource
{
[JsonProperty("monsterName")]
public string MonsterName { get; set; }
[JsonProperty("type")]
public MonsterType Type { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
/**
* 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.Data.Excels
{
[ResourceType("QuestExcelConfigData.json")]
internal class QuestData : GameResource
{
[JsonProperty("subId")]
public override int Id { get; set; }
[JsonProperty("mainId")]
public int MainId { get; set; }
[JsonProperty("order")]
public int Order { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
/**
* 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/>.
*
**/
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("ReliquaryExcelConfigData.json")]
internal class ReliquaryData : GameResource
{
}
}

View File

@@ -0,0 +1,35 @@
/**
* 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 GrasscutterTools.Game.Props;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("SceneExcelConfigData.json")]
internal class SceneData : GameResource
{
[JsonProperty("type")]
public SceneType SceneType { get; set; }
[JsonProperty("scriptData")]
public string ScriptData { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
/**
* 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.Data.Excels
{
[ResourceType("WeaponExcelConfigData.json")]
internal class WeaponData : GameResource
{
[JsonProperty("rankLevel")]
public int RankLevel { get; set; }
}
}

View File

@@ -0,0 +1,38 @@
/**
* 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.Data
{
internal abstract class GameResource
{
[JsonProperty("id")]
public virtual int Id { get; set; }
[JsonProperty("nameTextMapHash")]
public long NameTextMapHash { get; set; }
[JsonProperty("titleTextMapHash")]
public long TitleTextMapHash { get; set; }
[JsonProperty("descTextMapHash")]
public long DescTextMapHash { get; set; }
}
}

View File

@@ -0,0 +1,433 @@
/**
* 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;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using GrasscutterTools.Game.Data.Excels;
using GrasscutterTools.Game.Inventory;
using GrasscutterTools.Game.Props;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data
{
internal class GameResources
{
public Dictionary<int, AchievementData> AchievementData { get; set; }
public Dictionary<int, AvatarData> AvatarData { get; set; }
public Dictionary<int, HomeWorldBgmData> HomeWorldBgmData { get; set; }
public Dictionary<int, DungeonData> DungeonData { get; set; }
public Dictionary<int, GadgetData> GadgetData { get; set; }
public List<GatherData> GatherData { get; set; }
public Dictionary<int, HomeWorldFurnitureData> HomeWorldFurnitureData { get; set; }
public Dictionary<int, MainQuestData> MainQuestData { get; set; }
public Dictionary<int, QuestData> QuestData { get; set; }
public Dictionary<int, MaterialData> MaterialData { get; set; }
public Dictionary<int, MonsterData> MonsterData { get; set; }
public Dictionary<int, ReliquaryData> ReliquaryData { get; set; }
public Dictionary<int, SceneData> SceneData { get; set; }
public Dictionary<int, WeaponData> WeaponData { get; set; }
public TextMapData TextMapData { get; set; }
public GameResources(string resourcesDirPath, TextMapData textMapData)
{
TextMapData = textMapData;
var properties = typeof(GameResources).GetProperties();
foreach (var property in properties)
{
var type = property.PropertyType;
if (!type.IsGenericType) continue;
var genericArguments = type.GetGenericArguments();
ResourceTypeAttribute attribute = null;
foreach (var it in genericArguments)
{
var attributes = it.GetCustomAttributes(typeof(ResourceTypeAttribute), true);
if (attributes.Length == 0) continue;
attribute = (ResourceTypeAttribute)attributes[0];
type = it;
}
if (attribute == null) continue;
var dataFile = Path.Combine(resourcesDirPath, "ExcelBinOutput", attribute.Name);
var data = LoadDataFile(type, dataFile);
property.SetValue(this, data, null);
}
var illegalWeaponIds = new SparseSet(
"10000-10008, 11411, 11506-11508, 12505, 12506, 12508, 12509," +
"13503, 13506, 14411, 14503, 14508, 15504-15506, 20001");
foreach (var id in WeaponData.Keys.Where(id => illegalWeaponIds.Contains(id)).ToList())
WeaponData.Remove(id);
var illegalRelicIds = new SparseSet(
"20002, 20004, 23300-24825"
);
//var illegalRelicIds = new SparseSet(
// "20001, 23300-23340, 23383-23385, 78310-78554, 99310-99554"
//);
foreach (var id in ReliquaryData.Keys.Where(id => illegalRelicIds.Contains(id)).ToList())
ReliquaryData.Remove(id);
var illegalItemIds = new SparseSet(
"3004-3008, 3018-3022"
);
//var illegalItemIds = new SparseSet(
// "3004-3008, 3018-3022, 100086, 100087, 100100-101000, 101106-101110, 101306, 101500-104000," +
// "105001, 105004, 106000-107000, 107011, 108000, 109000-110000," +
// "115000-130000, 200200-200899, 220050, 220054"
//);
foreach (var id in MaterialData.Keys.Where(id => illegalItemIds.Contains(id)).ToList())
MaterialData.Remove(id);
foreach (var id in AvatarData.Keys.Where(id => id < 10000002 || id >= 11000000).ToList())
AvatarData.Remove(id);
}
private static object LoadDataFile(Type type, string path)
{
var list = (IList)JsonConvert.DeserializeObject(File.ReadAllText(path), typeof(List<>).MakeGenericType(type));
if (list == null) return null;
if (!type.IsSubclassOf(typeof(GameResource))) return list;
var dicType = typeof(Dictionary<,>).MakeGenericType(typeof(int), type);
var dic = (IDictionary)Activator.CreateInstance(dicType);
foreach (GameResource gameResource in list)
dic.Add(gameResource.Id, gameResource);
return dic;
}
private Dictionary<string, string> Languages = new Dictionary<string, string>
{
["zh-cn"] = "TextMapCHS",
["zh-tw"] = "TextMapCHT",
["en-us"] = "TextMapEN",
["ru-ru"] = "TextMapRU",
};
public void ConvertResources(string projectResourcesDir)
{
var currentCultureInfo = Thread.CurrentThread.CurrentUICulture;
try
{
var sb = new StringBuilder(MaterialData.Count * 24);
foreach (var language in Languages)
{
var dir = Path.Combine(projectResourcesDir, language.Key);
TextMapData.LoadTextMap(TextMapData.TextMapFilePaths[Array.IndexOf(TextMapData.TextMapFiles, language.Value)]);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language.Key);
GameData.LoadResources();
#region Achievement
// Achievement
File.WriteAllLines(
Path.Combine(dir, "Achievement.txt"),
AchievementData.Values.Where(it => it.IsUsed)
.Select(it => $"{it.Id}:{TextMapData.GetText(it.TitleTextMapHash.ToString())} - {TextMapData.GetText(it.DescTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Achievement
#region Artifact
// Artifact
File.WriteAllLines(
Path.Combine(dir, "Artifact.txt"),
ReliquaryData.Values.OrderBy(it => it.Id).Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Artifact
#region Avatar
// Avatar
File.WriteAllLines(
Path.Combine(dir, "Avatar.txt"),
MaterialData.Values
.Where(it => it.MaterialType == MaterialType.MATERIAL_AVATAR)
.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Avatar
#region Dungeon
// Dungeon
File.WriteAllLines(
Path.Combine(dir, "Dungeon.txt"),
DungeonData.Values.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Dungeon
#region Gadget
// Gadget
sb.Clear();
var gatherMap = new Dictionary<int, int>(GatherData.Count);
foreach (var it in GatherData.Where(it => !gatherMap.ContainsKey(it.GadgetId)))
gatherMap.Add(it.GadgetId, it.ItemId);
var furnitureMap = new Dictionary<int, long>(HomeWorldFurnitureData.Count);
foreach (var it in HomeWorldFurnitureData.Values.Where(it => it.FurnitureGadgetId != null))
foreach (var gadgetId in it.FurnitureGadgetId.Where(id => id > 0 && !furnitureMap.ContainsKey(id)))
furnitureMap.Add(gadgetId, it.NameTextMapHash);
var oldFirst = language.Key.StartsWith("zh");
foreach (var gadgetTypes in GadgetData.Values.OrderBy(it => it.Id).GroupBy(it => it.Type))
{
sb.Append("// ").AppendLine(GadgetType.ToTranslatedString(gadgetTypes.Key, language.Key));
foreach (var it in gadgetTypes)
{
var name = oldFirst ? GameData.Gadgets[it.Id] : ItemMap.EmptyName;
if (name == ItemMap.EmptyName)
{
if (!TextMapData.TryGetText(it.NameTextMapHash.ToString(), out name)
&& !TextMapData.TryGetText(it.InteractNameTextMapHash.ToString(), out name))
{
if (gatherMap.TryGetValue(it.Id, out var itemId)
&& MaterialData.TryGetValue(itemId, out var item))
{
name = TextMapData.GetText(item.NameTextMapHash.ToString());
}
else if (furnitureMap.TryGetValue(it.Id, out var hash))
{
name = TextMapData.GetText(hash.ToString());
}
else if (!string.IsNullOrEmpty(it.JsonName))
{
name = it.JsonName;
}
else if (!oldFirst)
{
var temp = GameData.Gadgets[it.Id];
if (temp != ItemMap.EmptyName)
name = temp;
}
}
}
sb.AppendFormat("{0}:{1}", it.Id, name).AppendLine();
}
sb.AppendLine();
}
// 旧的数据
//var old = GameData.Gadgets.AllIds.Where(it => !GadgetData.ContainsKey(it));
//if (old.Any())
//{
// sb.AppendLine("// Old lines");
// foreach (var it in old)
// sb.AppendFormat("{0}:{1}", it, GameData.Gadgets[it]).AppendLine();
//}
File.WriteAllText(
Path.Combine(dir, "Gadget.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Gadget
#region Item
// Item
sb.Clear();
foreach (var itemTypes in MaterialData.Values.GroupBy(it => it.ItemType))
{
sb.Append("// ").AppendLine(itemTypes.Key.ToTranslatedString(language.Key));
if (itemTypes.Key == ItemType.ITEM_MATERIAL)
{
foreach (var m in itemTypes
.GroupBy(it => it.MaterialType)
.Where(it => it.Key != MaterialType.MATERIAL_NONE)
.OrderBy(it => it.Average(m => m.Id)))
{
sb.Append("// ").AppendLine(m.Key.ToTranslatedString(language.Key));
if (m.Key == MaterialType.MATERIAL_BGM)
{
foreach (var materialData in m)
sb.AppendFormat("{0}:{1} - {2}",
materialData.Id,
TextMapData.GetText(materialData.NameTextMapHash.ToString()),
TextMapData.GetText(HomeWorldBgmData[int.Parse(materialData.ItemUse[0].UseParam[0])].BgmNameTextMapHash.ToString())
).AppendLine();
}
else
{
foreach (var materialData in m)
sb.AppendFormat("{0}:{1}", materialData.Id, TextMapData.GetText(materialData.NameTextMapHash.ToString())).AppendLine();
}
sb.AppendLine();
}
}
else
{
foreach (var materialData in itemTypes)
sb.AppendFormat("{0}:{1}", materialData.Id, TextMapData.GetText(materialData.NameTextMapHash.ToString())).AppendLine();
sb.AppendLine();
}
}
sb.Append("// ").AppendLine(ItemType.ITEM_FURNITURE.ToTranslatedString(language.Key));
foreach (var value in HomeWorldFurnitureData.Values)
sb.AppendFormat("{0}:{1}", value.Id, TextMapData.GetText(value.NameTextMapHash.ToString())).AppendLine();
File.WriteAllText(Path.Combine(dir, "Item.txt"), sb.ToString(), Encoding.UTF8);
#endregion Item
#region Monsters
// Monsters
sb.Clear();
foreach (var monsterType in MonsterData.Values.OrderBy(it => it.Id)
.GroupBy(it => it.Type)
.OrderBy(it => it.Key))
{
sb.Append("// ").AppendLine(monsterType.Key.ToTranslatedString(language.Key));
foreach (var monsterData in monsterType)
{
if (TextMapData.TryGetText(monsterData.NameTextMapHash.ToString(), out var text))
{
sb.AppendFormat("{0}:{1}", monsterData.Id, text);
}
else
{
var name = GameData.Monsters[monsterData.Id];
if (name == ItemMap.EmptyName)
sb.AppendFormat("{0}:{1} - {2}", monsterData.Id, monsterData.MonsterName, text);
else
sb.AppendFormat("{0}:{1}", monsterData.Id, name);
}
sb.AppendLine();
}
sb.AppendLine();
}
File.WriteAllText(
Path.Combine(dir, "Monsters.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Monsters
#region Quest
// Quest
sb.Clear();
foreach (var it in QuestData.Values.OrderBy(it => it.Id))
{
var name = GameData.Quests[it.Id];
if (name == ItemMap.EmptyName)
{
sb.AppendFormat("{0}:{1} - {2}",
it.Id,
TextMapData.GetText(MainQuestData[it.MainId].TitleTextMapHash.ToString()),
TextMapData.GetText(it.DescTextMapHash.ToString()));
}
else
{
sb.AppendFormat("{0}:{1}", it.Id, name);
}
sb.AppendLine();
}
File.WriteAllText(
Path.Combine(dir, "Quest.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Quest
#region Scene
// Scene
sb.Clear();
foreach (var it in DungeonData.Values)
{
var scene = SceneData[it.SceneId];
scene.NameTextMapHash = it.NameTextMapHash;
}
foreach (var it in SceneData.Values.OrderBy(it => it.Id))
{
if (it.NameTextMapHash == 0 || !TextMapData.TryGetText(it.NameTextMapHash.ToString(), out var name))
{
name = GameData.Scenes[it.Id];
if (name == ItemMap.EmptyName)
name = it.ScriptData;
}
sb.AppendLine($"{it.Id}:{name}");
}
File.WriteAllText(
Path.Combine(dir, "Scene.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Scene
#region Weapon
// Weapon
File.WriteAllLines(
Path.Combine(dir, "Weapon.txt"),
WeaponData.Values.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Weapon
}
File.WriteAllLines(
Path.Combine(projectResourcesDir, "AvatarColor.txt"),
AvatarData.Values.Select(it => $"{it.Id % 1000 + 1000}:{(int)it.QualityType}"),
Encoding.UTF8);
File.WriteAllLines(
Path.Combine(projectResourcesDir, "WeaponColor.txt"),
WeaponData.Values.Select(it => $"{it.Id}:{(it.RankLevel >= 5 ? "yellow" : it.RankLevel >= 4 ? "purple" : "blue")}"),
Encoding.UTF8);
}
finally
{
Thread.CurrentThread.CurrentUICulture = currentCultureInfo;
}
}
}
}

View File

@@ -0,0 +1,34 @@
/**
* 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;
namespace GrasscutterTools.Game.Data
{
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
internal class ResourceTypeAttribute : Attribute
{
public string Name { get; set; }
public ResourceTypeAttribute(string name)
{
Name = name;
}
}
}

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

@@ -28,7 +28,7 @@ namespace GrasscutterTools.Game.Gacha
/// 使用这个只需替换掉你原来的的data/banner.json文件
/// 然后重启服务器和客户端,即可享受全卡池抽卡,卡池的选择方式是点击左右箭头进行切换
/// </summary>
public class GachaBanner
internal class GachaBanner
{
/// <summary>
/// 添加卡池请从400开始增加id数值进行添加这个id需要每个池子不一样

View File

@@ -25,7 +25,7 @@ namespace GrasscutterTools.Game.Gacha
/// <summary>
/// https://github.com/Grasscutters/Grasscutter/pull/639
/// </summary>
public class GachaBanner2
internal class GachaBanner2
{
/// <summary>
/// 添加卡池请从400开始增加id数值进行添加这个id需要每个池子不一样

View File

@@ -28,7 +28,7 @@ namespace GrasscutterTools.Game.Gacha
/// <summary>
/// https://github.com/Grasscutters/Grasscutter/pull/639
/// </summary>
public class GachaBanner3
internal class GachaBanner3
{
/// <summary>
/// 备注
@@ -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

@@ -22,7 +22,7 @@ using System.Text;
namespace GrasscutterTools.Game
{
public class GameCommand
internal class GameCommand
{
public GameCommand(string name, string command)
{

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

@@ -0,0 +1,48 @@

// ReSharper disable InconsistentNaming
using System.Collections.Generic;
namespace GrasscutterTools.Game.Inventory
{
internal enum ItemType
{
ITEM_NONE = 0,
ITEM_VIRTUAL = 1,
ITEM_MATERIAL = 2,
ITEM_RELIQUARY = 3,
ITEM_WEAPON = 4,
ITEM_DISPLAY = 5,
ITEM_FURNITURE = 6,
}
internal static class ItemTypeExtension
{
private static readonly Dictionary<ItemType, string> TextMapCHS = new Dictionary<ItemType, string>
{
[ItemType.ITEM_NONE] = "未分类",
[ItemType.ITEM_VIRTUAL] = "虚拟道具",
[ItemType.ITEM_MATERIAL] = "材料",
[ItemType.ITEM_RELIQUARY] = "圣遗物",
[ItemType.ITEM_WEAPON] = "物品",
[ItemType.ITEM_DISPLAY] = "任务",
[ItemType.ITEM_FURNITURE] = "尘歌壶摆设",
};
private static readonly Dictionary<ItemType, string> TextMapEN = new Dictionary<ItemType, string>
{
[ItemType.ITEM_NONE] = "None",
[ItemType.ITEM_VIRTUAL] = "Virtual",
[ItemType.ITEM_MATERIAL] = "Material",
[ItemType.ITEM_RELIQUARY] = "Reliquary",
[ItemType.ITEM_WEAPON] = "Weapon",
[ItemType.ITEM_DISPLAY] = "Display",
[ItemType.ITEM_FURNITURE] = "Furniture",
};
public static string ToTranslatedString(this ItemType materialType, string language)
{
return language.StartsWith("zh") ? TextMapCHS[materialType] : TextMapEN[materialType];
}
}
}

View File

@@ -0,0 +1,175 @@

// ReSharper disable InconsistentNaming
// ReSharper disable IdentifierTypo
using System;
using System.Collections.Generic;
namespace GrasscutterTools.Game.Inventory
{
/// <summary>
/// 材料类型
/// </summary>
internal enum MaterialType
{
MATERIAL_NONE = 0,
MATERIAL_FOOD = 1,
MATERIAL_QUEST = 2,
MATERIAL_EXCHANGE = 4,
MATERIAL_CONSUME = 5,
MATERIAL_EXP_FRUIT = 6,
MATERIAL_AVATAR = 7,
MATERIAL_ADSORBATE = 8,
MATERIAL_CRICKET = 9,
MATERIAL_ELEM_CRYSTAL = 10,
MATERIAL_WEAPON_EXP_STONE = 11,
MATERIAL_CHEST = 12,
MATERIAL_RELIQUARY_MATERIAL = 13,
MATERIAL_AVATAR_MATERIAL = 14,
MATERIAL_NOTICE_ADD_HP = 15,
MATERIAL_SEA_LAMP = 16,
MATERIAL_SELECTABLE_CHEST = 17,
MATERIAL_FLYCLOAK = 18,
MATERIAL_NAMECARD = 19,
MATERIAL_TALENT = 20,
MATERIAL_WIDGET = 21,
MATERIAL_CHEST_BATCH_USE = 22,
MATERIAL_FAKE_ABSORBATE = 23,
MATERIAL_CONSUME_BATCH_USE = 24,
MATERIAL_WOOD = 25,
MATERIAL_FURNITURE_FORMULA = 27,
MATERIAL_CHANNELLER_SLAB_BUFF = 28,
MATERIAL_FURNITURE_SUITE_FORMULA = 29,
MATERIAL_COSTUME = 30,
MATERIAL_HOME_SEED = 31,
MATERIAL_FISH_BAIT = 32,
MATERIAL_FISH_ROD = 33,
MATERIAL_SUMO_BUFF = 34, // sumo 活动道具never appear
MATERIAL_FIREWORKS = 35,
MATERIAL_BGM = 36,
MATERIAL_SPICE_FOOD = 37,
MATERIAL_ACTIVITY_ROBOT = 38,
MATERIAL_ACTIVITY_GEAR = 39,
MATERIAL_ACTIVITY_JIGSAW = 40,
MATERIAL_ARANARA = 41,
MATERIAL_GCG_CARD = 42,
MATERIAL_GCG_CARD_FACE = 43, // 影幻卡面
MATERIAL_GCG_CARD_BACK = 44,
MATERIAL_GCG_FIELD = 45,
MATERIAL_DESHRET_MANUAL = 46,
MATERIAL_RENAME_ITEM = 47,
MATERIAL_GCG_EXCHANGE_ITEM = 48,
MATERIAL_QUEST_EVENT_BOOK = 49,
}
internal static class MaterialTypeExtension
{
private static readonly Dictionary<MaterialType, string> TextMapCHS = new Dictionary<MaterialType, string>
{
[MaterialType.MATERIAL_NONE] = "空",
[MaterialType.MATERIAL_FOOD] = "食物",
[MaterialType.MATERIAL_QUEST] = "任务",
[MaterialType.MATERIAL_EXCHANGE] = "收集物",
[MaterialType.MATERIAL_CONSUME] = "消耗品",
[MaterialType.MATERIAL_EXP_FRUIT] = "经验书",
[MaterialType.MATERIAL_AVATAR] = "角色",
[MaterialType.MATERIAL_ADSORBATE] = "能量球",
[MaterialType.MATERIAL_CRICKET] = "蛐蛐",
[MaterialType.MATERIAL_ELEM_CRYSTAL] = "神瞳",
[MaterialType.MATERIAL_WEAPON_EXP_STONE] = "武器锻造矿",
[MaterialType.MATERIAL_CHEST] = "宝箱",
[MaterialType.MATERIAL_RELIQUARY_MATERIAL] = "圣遗物经验瓶",
[MaterialType.MATERIAL_AVATAR_MATERIAL] = "角色天赋材料",
[MaterialType.MATERIAL_NOTICE_ADD_HP] = "回血食物",
[MaterialType.MATERIAL_SEA_LAMP] = "海灯节",
[MaterialType.MATERIAL_SELECTABLE_CHEST] = "自选礼包",
[MaterialType.MATERIAL_FLYCLOAK] = "风之翼",
[MaterialType.MATERIAL_NAMECARD] = "名片卡",
[MaterialType.MATERIAL_TALENT] = "天赋材料",
[MaterialType.MATERIAL_WIDGET] = "装饰物",
[MaterialType.MATERIAL_CHEST_BATCH_USE] = "礼包",
[MaterialType.MATERIAL_FAKE_ABSORBATE] = "MATERIAL_FAKE_ABSORBATE",
[MaterialType.MATERIAL_CONSUME_BATCH_USE] = "树脂",
[MaterialType.MATERIAL_WOOD] = "树木",
[MaterialType.MATERIAL_FURNITURE_FORMULA] = "尘歌壶室内摆设",
[MaterialType.MATERIAL_CHANNELLER_SLAB_BUFF] = "增益Buff",
[MaterialType.MATERIAL_FURNITURE_SUITE_FORMULA] = "尘歌壶摆设套装",
[MaterialType.MATERIAL_COSTUME] = "皮肤",
[MaterialType.MATERIAL_HOME_SEED] = "种子",
[MaterialType.MATERIAL_FISH_BAIT] = "鱼饵",
[MaterialType.MATERIAL_FISH_ROD] = "鱼竿",
[MaterialType.MATERIAL_SUMO_BUFF] = "MATERIAL_SUMO_BUFF",
[MaterialType.MATERIAL_FIREWORKS] = "烟花",
[MaterialType.MATERIAL_BGM] = "旋曜玉帛",
[MaterialType.MATERIAL_SPICE_FOOD] = "香气四溢的食物",
[MaterialType.MATERIAL_ACTIVITY_ROBOT] = "活动-兑换券",
[MaterialType.MATERIAL_ACTIVITY_GEAR] = "活动-齿轮",
[MaterialType.MATERIAL_ACTIVITY_JIGSAW] = "活动-部件",
[MaterialType.MATERIAL_ARANARA] = "兰纳罗",
[MaterialType.MATERIAL_GCG_CARD] = "七圣召唤-卡片",
[MaterialType.MATERIAL_GCG_CARD_FACE] = "七圣召唤-卡片-正面",
[MaterialType.MATERIAL_GCG_CARD_BACK] = "七圣召唤-卡片-背面",
[MaterialType.MATERIAL_GCG_FIELD] = "七圣召唤-卡片-场地",
[MaterialType.MATERIAL_DESHRET_MANUAL] = "沙漠书",
[MaterialType.MATERIAL_RENAME_ITEM] = "改名卡",
[MaterialType.MATERIAL_GCG_EXCHANGE_ITEM] = "七圣召唤-特殊卡",
[MaterialType.MATERIAL_QUEST_EVENT_BOOK] = "案件记录册",
};
private static readonly Dictionary<MaterialType, string> TextMapEN = new Dictionary<MaterialType, string>
{
[MaterialType.MATERIAL_NONE] = "None",
[MaterialType.MATERIAL_FOOD] = "Food",
[MaterialType.MATERIAL_QUEST] = "Quest",
[MaterialType.MATERIAL_EXCHANGE] = "Exchange",
[MaterialType.MATERIAL_CONSUME] = "Consume",
[MaterialType.MATERIAL_EXP_FRUIT] = "Exp_fruit",
[MaterialType.MATERIAL_AVATAR] = "Avatar",
[MaterialType.MATERIAL_ADSORBATE] = "Adsorbate",
[MaterialType.MATERIAL_CRICKET] = "Cricket",
[MaterialType.MATERIAL_ELEM_CRYSTAL] = "Elem_crystal",
[MaterialType.MATERIAL_WEAPON_EXP_STONE] = "Weapon_exp_stone",
[MaterialType.MATERIAL_CHEST] = "Chest",
[MaterialType.MATERIAL_RELIQUARY_MATERIAL] = "Reliquary_material",
[MaterialType.MATERIAL_AVATAR_MATERIAL] = "Avatar_material",
[MaterialType.MATERIAL_NOTICE_ADD_HP] = "Notice_add_hp",
[MaterialType.MATERIAL_SEA_LAMP] = "Sea_lamp",
[MaterialType.MATERIAL_SELECTABLE_CHEST] = "Selectable_chest",
[MaterialType.MATERIAL_FLYCLOAK] = "Flycloak",
[MaterialType.MATERIAL_NAMECARD] = "Namecard",
[MaterialType.MATERIAL_TALENT] = "Talent",
[MaterialType.MATERIAL_WIDGET] = "Widget",
[MaterialType.MATERIAL_CHEST_BATCH_USE] = "Chest_batch_use",
[MaterialType.MATERIAL_FAKE_ABSORBATE] = "Fake_absorbate",
[MaterialType.MATERIAL_CONSUME_BATCH_USE] = "Consume_batch_use",
[MaterialType.MATERIAL_WOOD] = "Wood",
[MaterialType.MATERIAL_FURNITURE_FORMULA] = "Furniture_formula",
[MaterialType.MATERIAL_CHANNELLER_SLAB_BUFF] = "Channeller_slab_buff",
[MaterialType.MATERIAL_FURNITURE_SUITE_FORMULA] = "Furniture_suite_formula",
[MaterialType.MATERIAL_COSTUME] = "Costume",
[MaterialType.MATERIAL_HOME_SEED] = "Home_seed",
[MaterialType.MATERIAL_FISH_BAIT] = "Fish_bait",
[MaterialType.MATERIAL_FISH_ROD] = "Fish_rod",
[MaterialType.MATERIAL_SUMO_BUFF] = "Sumo_buff",
[MaterialType.MATERIAL_FIREWORKS] = "Fireworks",
[MaterialType.MATERIAL_BGM] = "Bgm",
[MaterialType.MATERIAL_SPICE_FOOD] = "Spice_food",
[MaterialType.MATERIAL_ACTIVITY_ROBOT] = "Activity_robot",
[MaterialType.MATERIAL_ACTIVITY_GEAR] = "Activity_gear",
[MaterialType.MATERIAL_ACTIVITY_JIGSAW] = "Activity_jigsaw",
[MaterialType.MATERIAL_ARANARA] = "Aranara",
[MaterialType.MATERIAL_GCG_CARD] = "Gcg_card",
[MaterialType.MATERIAL_GCG_CARD_FACE] = "Gcg_card_face",
[MaterialType.MATERIAL_GCG_CARD_BACK] = "Gcg_card_back",
[MaterialType.MATERIAL_GCG_FIELD] = "Gcg_field",
[MaterialType.MATERIAL_DESHRET_MANUAL] = "Deshret_manual",
[MaterialType.MATERIAL_RENAME_ITEM] = "Rename_item",
[MaterialType.MATERIAL_GCG_EXCHANGE_ITEM] = "Gcg_exchange_item",
[MaterialType.MATERIAL_QUEST_EVENT_BOOK] = "Quest_event_book",
};
public static string ToTranslatedString(this MaterialType materialType, string language)
{
return language.StartsWith("zh") ? TextMapCHS[materialType] : TextMapEN[materialType];
}
}
}

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