Compare commits
155 Commits
v1.8.1
...
e6a2d26671
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e6a2d26671 | ||
fafff8090f | |||
![]() |
b37016a49c | ||
6e8c1d4a15 | |||
92f5289576 | |||
![]() |
c62b46850c | ||
3d160f9b90 | |||
79efb9bd51 | |||
ef3c85c6d3 | |||
![]() |
e61fc45ad2 | ||
de53f682f0 | |||
3ddfa189e9 | |||
ddc588c792 | |||
984afbdf0b | |||
56a72ad940 | |||
b62c539bdd | |||
d9272acb44 | |||
5c89eb5a58 | |||
583041c295 | |||
ded10d175f | |||
380682d175 | |||
055bddc22c | |||
5b2442591f | |||
3eb1a08697 | |||
79283f4039 | |||
497b828f2d | |||
41dc3e8fc4 | |||
eb1be4cdb8 | |||
d4655c1e50 | |||
b1debe0aab | |||
f5780a4366 | |||
101e3c5ffc | |||
97b3a57ee1 | |||
0788a32158 | |||
f553ddddd8 | |||
07fb477c3a | |||
f8b920100d | |||
cfdca6f031 | |||
085669e43a | |||
eda70a2aae | |||
c2be92c41b | |||
4bcd23389d | |||
2a51fcb47d | |||
2c2f05c5b2 | |||
ab92469f11 | |||
749f324f7d | |||
1c49c41b71 | |||
1993d3d295 | |||
dce7e54675 | |||
41c644f2af | |||
78be273c7a | |||
c94a7683e4 | |||
b407012bef | |||
bb7d28153f | |||
627d9c7cd2 | |||
53a83fd7a7 | |||
c2ca091662 | |||
738a755353 | |||
dcbd946407 | |||
2a8cebcbb5 | |||
434ec7b2df | |||
c2ff37facf | |||
f48c9b4d0b | |||
1d734479d1 | |||
a989581d59 | |||
6ab9d3842c | |||
b69b2941b6 | |||
90deaa84b4 | |||
403cc3fe52 | |||
dd4eb36c17 | |||
2645e16bee | |||
82668c4c6a | |||
8fce4a8995 | |||
![]() |
4cfbebcc5a | ||
40db4236ba | |||
eef4687ed6 | |||
e9a3f4014e | |||
749aae02ca | |||
fc3fd10081 | |||
65e664f35f | |||
ab9a617619 | |||
f629bc9993 | |||
dc7f48139e | |||
da8c511d60 | |||
eb60f402a4 | |||
c82ce1ea35 | |||
9524ea5ab4 | |||
caf18eaa7a | |||
2cdcb4a599 | |||
![]() |
3407ca61fd | ||
964b7ced8b | |||
![]() |
702267003b | ||
abf970b783 | |||
6855b6299f | |||
b77d242bd9 | |||
01016b1fa1 | |||
b2b656b6cb | |||
aabe6664b4 | |||
![]() |
5869a72645 | ||
df3ab12165 | |||
03fe8909d0 | |||
2ec4bc9333 | |||
c1b89a2b9a | |||
6706525e77 | |||
981b8377d8 | |||
945329d109 | |||
304f3484e3 | |||
47ad6dae6a | |||
0448bb0ea9 | |||
![]() |
5009d148a1 | ||
![]() |
8427103a7e | ||
2767cb44d7 | |||
![]() |
416ffd6435 | ||
ff554ce369 | |||
0698671c05 | |||
67468cf28b | |||
058a6b7ab2 | |||
1ccb3656c2 | |||
6da7e1d4d0 | |||
119c8c87ee | |||
2758b4d896 | |||
d8c7f0ad56 | |||
0d8b51f199 | |||
6e296edf11 | |||
072066ac87 | |||
a359dea603 | |||
29decd4899 | |||
92a5d53d35 | |||
40e33dcb1c | |||
![]() |
2b2757ccff | ||
f57f4097ac | |||
5865441074 | |||
2d916392c1 | |||
dec3b2261f | |||
5b0cb912e4 | |||
5cbdaa7134 | |||
b2f59431a6 | |||
04ec214714 | |||
196b56ab71 | |||
226742776f | |||
f4ec2ee5fa | |||
f33d37cd90 | |||
2394ec7f5d | |||
8baa61b72c | |||
f35ea79475 | |||
46b8ca0b63 | |||
b8cfaf308d | |||
c7d3e5021c | |||
a689b425ca | |||
9bd45157a4 | |||
![]() |
169b8997ec | ||
![]() |
aa6ea882d9 | ||
![]() |
c86b275096 | ||
![]() |
a81985549e | ||
![]() |
f4e9409afa |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 37 KiB |
BIN
Doc/Screenshots-en/19-AchievementPage.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Doc/Screenshots-en/20-ActivityEditor.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Doc/Screenshots-en/21-HotKey.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
Doc/Screenshots-en/22-Proxy.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
Doc/Screenshots-en/23-SceneTag.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Doc/Screenshots-en/24-Weather.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
Doc/Screenshots-en/25-Settings.png
Normal file
After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 54 KiB |
BIN
Doc/Screenshots-ru/19-AchievementPage.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
Doc/Screenshots-ru/20-ActivityEditor.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
Doc/Screenshots-tw/0-Home.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
Doc/Screenshots-tw/1-CustomCommands.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
Doc/Screenshots-tw/10-GachaBannerEditor.png
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
Doc/Screenshots-tw/11-TextMapBrowser.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
Doc/Screenshots-tw/12-Remote.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
Doc/Screenshots-tw/13-Quest.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
Doc/Screenshots-tw/15-DropEditor.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
Doc/Screenshots-tw/16-MailEditor.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
Doc/Screenshots-tw/17-ShopEditor.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
Doc/Screenshots-tw/18-TaskPage.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Doc/Screenshots-tw/19-AchievementPage.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
Doc/Screenshots-tw/2-CustomArtifact.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Doc/Screenshots-tw/20-ActivityEditor.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
Doc/Screenshots-tw/3-CustomWeapon.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
Doc/Screenshots-tw/4-GiveItem.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Doc/Screenshots-tw/5-GiveAvatar.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Doc/Screenshots-tw/6-SpawnEntity.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
Doc/Screenshots-tw/6.1-AttackMod.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
Doc/Screenshots-tw/6.2-AttackInfuse.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Doc/Screenshots-tw/7-ChangeScene.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
Doc/Screenshots-tw/9-Manage.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Doc/Screenshots-tw/AttackMod.gif
Normal file
After Width: | Height: | Size: 3.6 MiB |
BIN
Doc/Screenshots-tw/ConfigHttp.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
Doc/Screenshots-tw/GrasscutterLogo.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
Doc/Screenshots-tw/OpenCommand.gif
Normal file
After Width: | Height: | Size: 821 KiB |
BIN
Doc/Screenshots-tw/RunMultipleCommands.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 41 KiB |
BIN
Doc/Screenshots/19-AchievementPage.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
Doc/Screenshots/20-ActivityEditor.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
Doc/Screenshots/21-HotKey.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
Doc/Screenshots/22-Proxy.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
Doc/Screenshots/23-SceneTag.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Doc/Screenshots/24-Weather.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Doc/Screenshots/25-Settings.png
Normal file
After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 48 KiB |
67
README.md
@@ -5,20 +5,64 @@
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
|
||||
[](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
|
||||
|
||||

|
||||
|
||||
> 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):
|
||||
> 
|
||||
>
|
||||
> 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.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
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
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.9
|
||||

|
||||
|
||||
### GrasscutterTools-v1.8
|
||||

|
||||
|
||||
@@ -43,21 +87,6 @@ Added [AttackModifier](https://github.com/NotThorny/AttackModifier), [AttackInfu
|
||||
|
||||

|
||||
|
||||
## Remote command
|
||||
|
||||
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
|
||||
|
||||

|
||||
|
||||
> 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):
|
||||
> 
|
||||
>
|
||||
> 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
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
@@ -6,18 +6,64 @@
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
|
||||
[](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).
|
||||
|
||||

|
||||
|
||||
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
|
||||
>
|
||||
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
|
||||
>
|
||||
> 
|
||||
>
|
||||
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
|
||||
>
|
||||
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
|
||||
|
||||
|
||||
## Лог обновлений
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
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
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.9
|
||||

|
||||
|
||||
### GrasscutterTools-v1.8
|
||||

|
||||
|
||||
@@ -42,22 +88,6 @@ GCG поддерживает 简体中文 (китайский упр.), 繁体
|
||||
|
||||

|
||||
|
||||
## Удаленная команда (OpenCommand)
|
||||
|
||||
Чтобы использовать команды прямо из GCG, серверу требуется плагин [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin).
|
||||
|
||||

|
||||
|
||||
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
|
||||
>
|
||||
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
|
||||
>
|
||||
> 
|
||||
>
|
||||
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
|
||||
>
|
||||
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
|
||||
|
||||
---
|
||||
|
||||
## Скриншоты
|
||||
|
@@ -5,19 +5,64 @@
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
|
||||
[](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) 插件支持
|
||||
|
||||

|
||||
|
||||
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
|
||||
>
|
||||
> 建议配置服务器为HTTP模式,如图所示(config.json):
|
||||
> 
|
||||
>
|
||||
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
|
||||
>
|
||||
> 如果使用的不是`80`端口,则要在url中指定访问的端口号:http://127.0.0.1:443
|
||||
|
||||
|
||||
## 更新概要
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
命令行用法:
|
||||
```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
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.9
|
||||

|
||||
|
||||
### GrasscutterTools-v1.8
|
||||

|
||||
@@ -47,21 +92,6 @@
|
||||
|
||||

|
||||
|
||||
## 远程执行
|
||||
|
||||
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
|
||||
|
||||

|
||||
|
||||
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
|
||||
>
|
||||
> 建议配置服务器为HTTP模式,如图所示(config.json):
|
||||
> 
|
||||
>
|
||||
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
|
||||
>
|
||||
> 如果使用的不是`80`端口,则要在url中指定访问的端口号:http://127.0.0.1:443
|
||||
|
||||
---
|
||||
|
||||
## 软件截图
|
||||
|
125
README_zh-tw.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Grasscutter Tools
|
||||
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
|
||||
[](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) 插件
|
||||
|
||||

|
||||
|
||||
> 如果你無法連接至伺服器,請確認輸入的伺服器位址是否正確。
|
||||
>
|
||||
> 建議將伺服器調整為HTTP模式,如下圖所示(config.json):
|
||||
> 
|
||||
>
|
||||
> 你可藉由任何瀏覽器輸入網址 http://127.0.0.1/status/server 以測試伺服器是否正常運作。
|
||||
>
|
||||
> 如果你並非使用`80`端口, 則須在網址後輸入指定端口: http://127.0.0.1:443
|
||||
|
||||
## 更新日誌
|
||||
|
||||
### GrasscutterTools-v1.13
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.11
|
||||

|
||||
|
||||
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
|
||||

|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.9
|
||||

|
||||
|
||||
### GrasscutterTools-v1.8
|
||||

|
||||
|
||||
### GrasscutterTools-v1.7.3
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
新增 [攻擊修改](https://github.com/NotThorny/AttackModifier)、[攻擊注入](https://github.com/snoobi-seggs/AttackInfusedWithItem)、[主角切換元素](https://github.com/Penelopeep/SwitchElementTraveller)等插件指令產生
|
||||
|
||||

|
||||
|
||||
### GrasscutterTools-v1.7.2
|
||||

|
||||
|
||||
### GrasscutterTools-v1.7.1
|
||||
- 新增 Gadgets
|
||||
|
||||
### GrasscutterTools-v1.7.0
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
|
||||
## 工具截圖
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
@@ -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,27 @@
|
||||
<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>
|
||||
<setting name="IsHotkeyEenabled" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="AutoStartProxy" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="WindowOpacity" serializeAs="String">
|
||||
<value>100</value>
|
||||
</setting>
|
||||
</GrasscutterTools.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
@@ -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)
|
||||
{
|
||||
|
@@ -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; }
|
||||
|
202
Source/GrasscutterTools/Eavesdrop/Certifier.cs
Normal file
@@ -0,0 +1,202 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace Eavesdrop;
|
||||
|
||||
public sealed class Certifier : IDisposable
|
||||
{
|
||||
private readonly X509Store _rootStore, _myStore;
|
||||
private readonly IDictionary<string, X509Certificate2> _certificateCache;
|
||||
|
||||
public string Issuer { get; }
|
||||
public string CertificateAuthorityName { get; }
|
||||
|
||||
public DateTime NotAfter { get; set; }
|
||||
public DateTime NotBefore { get; set; }
|
||||
public int KeyLength { get; set; } = 1024;
|
||||
public bool IsCachingSignedCertificates { get; set; }
|
||||
|
||||
public X509Certificate2? Authority { get; private set; }
|
||||
|
||||
public Certifier()
|
||||
: this("Eavesdrop")
|
||||
{ }
|
||||
public Certifier(string issuer)
|
||||
: this(issuer, $"{issuer} Root Certificate Authority", StoreLocation.CurrentUser)
|
||||
{ }
|
||||
public Certifier(string issuer, string certificateAuthorityName)
|
||||
: this(issuer, certificateAuthorityName, StoreLocation.CurrentUser)
|
||||
{ }
|
||||
public Certifier(string issuer, string certificateAuthorityName, StoreLocation location)
|
||||
{
|
||||
_myStore = new X509Store(StoreName.My, location);
|
||||
_rootStore = new X509Store(StoreName.Root, location);
|
||||
_certificateCache = new Dictionary<string, X509Certificate2>();
|
||||
|
||||
NotBefore = DateTime.Now;
|
||||
NotAfter = NotBefore.AddMonths(1);
|
||||
|
||||
Issuer = issuer;
|
||||
CertificateAuthorityName = certificateAuthorityName;
|
||||
}
|
||||
|
||||
public bool CreateTrustedRootCertificate()
|
||||
{
|
||||
return (Authority = InstallCertificate(_rootStore, CertificateAuthorityName)) != null;
|
||||
}
|
||||
public bool DestroyTrustedRootCertificate()
|
||||
{
|
||||
return DestroyCertificates(_rootStore);
|
||||
}
|
||||
public bool ExportTrustedRootCertificate(string path)
|
||||
{
|
||||
X509Certificate2? rootCertificate = InstallCertificate(_rootStore, CertificateAuthorityName);
|
||||
|
||||
path = Path.GetFullPath(path);
|
||||
if (rootCertificate != null)
|
||||
{
|
||||
byte[] data = rootCertificate.Export(X509ContentType.Cert);
|
||||
File.WriteAllBytes(path, data);
|
||||
}
|
||||
return File.Exists(path);
|
||||
}
|
||||
|
||||
public X509Certificate2? GenerateCertificate(string certificateName)
|
||||
{
|
||||
return InstallCertificate(_myStore, certificateName);
|
||||
}
|
||||
public X509Certificate2 CreateCertificate(string subjectName, string alternateName)
|
||||
{
|
||||
using var rsa = RSA.Create(KeyLength);
|
||||
var certificateRequest = new CertificateRequest(subjectName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
|
||||
if (Authority == null)
|
||||
{
|
||||
certificateRequest.CertificateExtensions.Add(new X509BasicConstraintsExtension(true, false, 0, true));
|
||||
certificateRequest.CertificateExtensions.Add(new X509SubjectKeyIdentifierExtension(certificateRequest.PublicKey, false));
|
||||
|
||||
using X509Certificate2 certificate = certificateRequest.CreateSelfSigned(NotBefore.ToUniversalTime(), NotAfter.ToUniversalTime());
|
||||
|
||||
certificate.FriendlyName = alternateName;
|
||||
return new X509Certificate2(certificate.Export(X509ContentType.Pfx, string.Empty), string.Empty, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
|
||||
}
|
||||
else
|
||||
{
|
||||
var sanBuilder = new SubjectAlternativeNameBuilder();
|
||||
sanBuilder.AddDnsName(alternateName);
|
||||
|
||||
certificateRequest.CertificateExtensions.Add(sanBuilder.Build());
|
||||
certificateRequest.CertificateExtensions.Add(new X509BasicConstraintsExtension(false, false, 0, false));
|
||||
certificateRequest.CertificateExtensions.Add(new X509SubjectKeyIdentifierExtension(certificateRequest.PublicKey, false));
|
||||
|
||||
using X509Certificate2 certificate = certificateRequest.Create(Authority, Authority.NotBefore, Authority.NotAfter, Guid.NewGuid().ToByteArray());
|
||||
using X509Certificate2 certificateWithPrivateKey = certificate.CopyWithPrivateKey(rsa);
|
||||
|
||||
certificateWithPrivateKey.FriendlyName = alternateName;
|
||||
return new X509Certificate2(certificateWithPrivateKey.Export(X509ContentType.Pfx, string.Empty), string.Empty, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
|
||||
}
|
||||
}
|
||||
private X509Certificate2? InstallCertificate(X509Store store, string certificateName)
|
||||
{
|
||||
if (_certificateCache.TryGetValue(certificateName, out X509Certificate2? certificate))
|
||||
{
|
||||
if (DateTime.Now >= certificate.NotAfter)
|
||||
{
|
||||
_certificateCache.Remove(certificateName);
|
||||
}
|
||||
else return certificate;
|
||||
}
|
||||
lock (store)
|
||||
{
|
||||
try
|
||||
{
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
string subjectName = $"CN={certificateName}, O={Issuer}";
|
||||
|
||||
certificate = FindCertificates(store, subjectName)?[0];
|
||||
if (certificate != null && DateTime.Now >= certificate.NotAfter)
|
||||
{
|
||||
if (Authority == null)
|
||||
{
|
||||
DestroyCertificates();
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
}
|
||||
else
|
||||
{
|
||||
store.Remove(certificate);
|
||||
}
|
||||
certificate = null;
|
||||
}
|
||||
|
||||
if (certificate == null)
|
||||
{
|
||||
certificate = CreateCertificate(subjectName, certificateName);
|
||||
if (certificate != null)
|
||||
{
|
||||
if (store == _rootStore || IsCachingSignedCertificates)
|
||||
{
|
||||
store.Add(certificate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return certificate;
|
||||
}
|
||||
catch { return certificate = null; }
|
||||
finally
|
||||
{
|
||||
store.Close();
|
||||
if (certificate != null && !_certificateCache.ContainsKey(certificateName))
|
||||
{
|
||||
_certificateCache.Add(certificateName, certificate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool DestroyCertificates(X509Store store)
|
||||
{
|
||||
lock (store)
|
||||
{
|
||||
try
|
||||
{
|
||||
store.Open(OpenFlags.ReadWrite);
|
||||
X509Certificate2Collection certificates = store.Certificates.Find(X509FindType.FindByIssuerName, Issuer, false);
|
||||
|
||||
store.RemoveRange(certificates);
|
||||
IEnumerable<string> subjectNames = certificates.Cast<X509Certificate2>().Select(c => c.GetNameInfo(X509NameType.SimpleName, false));
|
||||
|
||||
foreach (string subjectName in subjectNames)
|
||||
{
|
||||
if (!_certificateCache.ContainsKey(subjectName)) continue;
|
||||
_certificateCache.Remove(subjectName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch { return false; }
|
||||
finally { store.Close(); }
|
||||
}
|
||||
}
|
||||
public bool DestroyCertificates() => DestroyCertificates(_myStore) && DestroyCertificates(_rootStore);
|
||||
|
||||
private static X509Certificate2Collection? FindCertificates(X509Store store, string subjectName)
|
||||
{
|
||||
X509Certificate2Collection certificates = store.Certificates
|
||||
.Find(X509FindType.FindBySubjectDistinguishedName, subjectName, false);
|
||||
|
||||
return certificates.Count > 0 ? certificates : null;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_myStore.Close();
|
||||
_rootStore.Close();
|
||||
|
||||
_myStore.Dispose();
|
||||
_rootStore.Dispose();
|
||||
}
|
||||
}
|
200
Source/GrasscutterTools/Eavesdrop/Eavesdropper.cs
Normal file
@@ -0,0 +1,200 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Eavesdrop.Network;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public static class Eavesdropper
|
||||
{
|
||||
private static TcpListener _listener;
|
||||
private static readonly object _stateLock;
|
||||
|
||||
public delegate Task AsyncEventHandler<TEventArgs>(object sender, TEventArgs e);
|
||||
|
||||
public static event AsyncEventHandler<RequestInterceptedEventArgs> RequestInterceptedAsync;
|
||||
private static async Task OnRequestInterceptedAsync(RequestInterceptedEventArgs e)
|
||||
{
|
||||
Task interceptedTask = RequestInterceptedAsync?.Invoke(null, e);
|
||||
if (interceptedTask != null)
|
||||
{
|
||||
await interceptedTask;
|
||||
}
|
||||
}
|
||||
|
||||
public static event AsyncEventHandler<ResponseInterceptedEventArgs> ResponseInterceptedAsync;
|
||||
private static async Task OnResponseInterceptedAsync(ResponseInterceptedEventArgs e)
|
||||
{
|
||||
Task interceptedTask = ResponseInterceptedAsync?.Invoke(null, e);
|
||||
if (interceptedTask != null)
|
||||
{
|
||||
await interceptedTask;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<string> Overrides { get; }
|
||||
public static bool IsRunning { get; private set; }
|
||||
public static Certifier Certifier { get; set; }
|
||||
|
||||
static Eavesdropper()
|
||||
{
|
||||
_stateLock = new object();
|
||||
|
||||
ServicePointManager.Expect100Continue = true;
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
|
||||
|
||||
Overrides = new List<string>();
|
||||
Certifier = new Certifier("Eavesdrop", "Eavesdrop Root Certificate Authority");
|
||||
}
|
||||
|
||||
public static void Terminate()
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
ResetMachineProxy();
|
||||
IsRunning = false;
|
||||
|
||||
if (_listener != null)
|
||||
{
|
||||
_listener.Stop();
|
||||
_listener = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void Initiate(int port)
|
||||
{
|
||||
Initiate(port, Interceptors.Default);
|
||||
}
|
||||
public static void Initiate(int port, Interceptors interceptors)
|
||||
{
|
||||
Initiate(port, interceptors, true);
|
||||
}
|
||||
public static void Initiate(int port, Interceptors interceptors, bool setSystemProxy)
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
Terminate();
|
||||
|
||||
_listener = new TcpListener(IPAddress.Any, port);
|
||||
_listener.Start();
|
||||
|
||||
IsRunning = true;
|
||||
|
||||
Task.Factory.StartNew(InterceptRequestAsync, TaskCreationOptions.LongRunning);
|
||||
if (setSystemProxy)
|
||||
{
|
||||
SetMachineProxy(port, interceptors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task InterceptRequestAsync()
|
||||
{
|
||||
while (IsRunning && _listener != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
TcpClient client = await _listener.AcceptTcpClientAsync().ConfigureAwait(false);
|
||||
Task handleClientAsync = HandleClientAsync(client);
|
||||
}
|
||||
catch (ObjectDisposedException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task HandleClientAsync(TcpClient client)
|
||||
{
|
||||
using var local = new EavesNode(Certifier, client);
|
||||
WebRequest request = await local.ReadRequestAsync().ConfigureAwait(false);
|
||||
if (request == null) return;
|
||||
|
||||
HttpContent requestContent = null;
|
||||
var requestArgs = new RequestInterceptedEventArgs(request);
|
||||
try
|
||||
{
|
||||
requestArgs.Content = requestContent = await local.ReadRequestContentAsync(request).ConfigureAwait(false);
|
||||
await OnRequestInterceptedAsync(requestArgs).ConfigureAwait(false);
|
||||
if (requestArgs.Cancel) return;
|
||||
|
||||
request = requestArgs.Request;
|
||||
if (requestArgs.Content != null)
|
||||
{
|
||||
await local.WriteRequestContentAsync(request, requestArgs.Content).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
requestContent?.Dispose();
|
||||
requestArgs.Content?.Dispose();
|
||||
}
|
||||
|
||||
WebResponse response = null;
|
||||
try { response = await request.GetResponseAsync().ConfigureAwait(false); }
|
||||
catch (WebException ex) { response = ex.Response; }
|
||||
catch (ProtocolViolationException)
|
||||
{
|
||||
response?.Dispose();
|
||||
response = null;
|
||||
}
|
||||
|
||||
if (response == null) return;
|
||||
HttpContent responseContent = null;
|
||||
var responseArgs = new ResponseInterceptedEventArgs(request, response);
|
||||
try
|
||||
{
|
||||
responseArgs.Content = responseContent = EavesNode.ReadResponseContent(response);
|
||||
await OnResponseInterceptedAsync(responseArgs).ConfigureAwait(false);
|
||||
if (responseArgs.Cancel) return;
|
||||
|
||||
await local.SendResponseAsync(responseArgs.Response, responseArgs.Content).ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
response.Dispose();
|
||||
responseArgs.Response.Dispose();
|
||||
|
||||
responseContent?.Dispose();
|
||||
responseArgs.Content?.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private static void ResetMachineProxy()
|
||||
{
|
||||
INETOptions.Overrides.Clear();
|
||||
INETOptions.IsIgnoringLocalTraffic = false;
|
||||
|
||||
INETOptions.HTTPAddress = null;
|
||||
INETOptions.HTTPSAddress = null;
|
||||
INETOptions.IsProxyEnabled = false;
|
||||
|
||||
INETOptions.Save();
|
||||
}
|
||||
private static void SetMachineProxy(int port, Interceptors interceptors)
|
||||
{
|
||||
foreach (string @override in Overrides)
|
||||
{
|
||||
if (INETOptions.Overrides.Contains(@override)) continue;
|
||||
INETOptions.Overrides.Add(@override);
|
||||
}
|
||||
|
||||
string address = ("127.0.0.1:" + port);
|
||||
if (interceptors.HasFlag(Interceptors.HTTP))
|
||||
{
|
||||
INETOptions.HTTPAddress = address;
|
||||
}
|
||||
if (interceptors.HasFlag(Interceptors.HTTPS))
|
||||
{
|
||||
INETOptions.HTTPSAddress = address;
|
||||
}
|
||||
INETOptions.IsProxyEnabled = true;
|
||||
INETOptions.IsIgnoringLocalTraffic = true;
|
||||
|
||||
INETOptions.Save();
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public class RequestInterceptedEventArgs : CancelEventArgs
|
||||
{
|
||||
private HttpWebRequest _httpRequest;
|
||||
|
||||
public HttpContent Content { get; set; }
|
||||
|
||||
private WebRequest _request;
|
||||
public WebRequest Request
|
||||
{
|
||||
get => _request;
|
||||
set
|
||||
{
|
||||
_request = value;
|
||||
_httpRequest = (value as HttpWebRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public Uri Uri => Request?.RequestUri;
|
||||
public CookieContainer CookieContainer => _httpRequest?.CookieContainer;
|
||||
|
||||
public string Method
|
||||
{
|
||||
get => Request?.Method;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.Method = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public IWebProxy Proxy
|
||||
{
|
||||
get => Request?.Proxy;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.Proxy = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public string ContentType
|
||||
{
|
||||
get => Request?.ContentType;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.ContentType = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public WebHeaderCollection Headers
|
||||
{
|
||||
get => Request?.Headers;
|
||||
set
|
||||
{
|
||||
if (Request != null)
|
||||
{
|
||||
Request.Headers = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public RequestInterceptedEventArgs(WebRequest request)
|
||||
{
|
||||
Request = request;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,65 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.ComponentModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Eavesdrop.Network;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public class ResponseInterceptedEventArgs : CancelEventArgs
|
||||
{
|
||||
private WebResponse _response;
|
||||
public WebResponse Response
|
||||
{
|
||||
get => _response;
|
||||
set
|
||||
{
|
||||
_response = value;
|
||||
if (value is HttpWebResponse httpResponse)
|
||||
{
|
||||
CookieContainer = new CookieContainer();
|
||||
CookieContainer.Add(httpResponse.Cookies);
|
||||
}
|
||||
else CookieContainer = null;
|
||||
}
|
||||
}
|
||||
|
||||
public WebRequest Request { get; }
|
||||
public Uri Uri => Response?.ResponseUri;
|
||||
|
||||
public HttpContent Content { get; set; }
|
||||
public CookieContainer CookieContainer { get; private set; }
|
||||
|
||||
public string ContentType
|
||||
{
|
||||
get => Response?.ContentType;
|
||||
set
|
||||
{
|
||||
if (Response != null)
|
||||
{
|
||||
Response.ContentType = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
public WebHeaderCollection Headers
|
||||
{
|
||||
get => Response?.Headers;
|
||||
set
|
||||
{
|
||||
if (Response == null) return;
|
||||
foreach (string header in value.AllKeys)
|
||||
{
|
||||
Response.Headers[header] = value[header];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ResponseInterceptedEventArgs(WebRequest request, WebResponse response)
|
||||
{
|
||||
Request = request;
|
||||
Response = response;
|
||||
}
|
||||
}
|
||||
}
|
14
Source/GrasscutterTools/Eavesdrop/Interceptors.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
[Flags]
|
||||
public enum Interceptors
|
||||
{
|
||||
None = 0,
|
||||
HTTP = 1,
|
||||
HTTPS = 2,
|
||||
|
||||
Default = (HTTP | HTTPS)
|
||||
}
|
||||
}
|
241
Source/GrasscutterTools/Eavesdrop/Internals/INETOptions.cs
Normal file
@@ -0,0 +1,241 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
public static class INETOptions
|
||||
{
|
||||
private static readonly object _stateLock;
|
||||
private static readonly int _iNetOptionSize;
|
||||
private static readonly int _iNetPackageSize;
|
||||
private static readonly RegistryKey _proxyKey;
|
||||
|
||||
public static List<string> Overrides { get; }
|
||||
|
||||
public static string HTTPAddress { get; set; }
|
||||
public static string HTTPSAddress { get; set; }
|
||||
|
||||
public static bool IsProxyEnabled { get; set; }
|
||||
public static bool IsIgnoringLocalTraffic { get; set; }
|
||||
|
||||
static INETOptions()
|
||||
{
|
||||
_stateLock = new object();
|
||||
_iNetOptionSize = Marshal.SizeOf(typeof(INETOption));
|
||||
_iNetPackageSize = Marshal.SizeOf(typeof(INETPackage));
|
||||
_proxyKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
|
||||
|
||||
Overrides = new List<string>();
|
||||
Load();
|
||||
}
|
||||
|
||||
public static void Save()
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
var options = new List<INETOption>(3);
|
||||
string joinedAddresses = (IsProxyEnabled ? GetJoinedAddresses() : null);
|
||||
string joinedOverrides = (IsProxyEnabled ? GetJoinedOverrides() : null);
|
||||
|
||||
var kind = ProxyKind.PROXY_TYPE_DIRECT;
|
||||
if (!string.IsNullOrWhiteSpace(joinedAddresses))
|
||||
{
|
||||
options.Add(new INETOption(OptionKind.INTERNET_PER_CONN_PROXY_SERVER, joinedAddresses));
|
||||
if (!string.IsNullOrWhiteSpace(joinedOverrides))
|
||||
{
|
||||
options.Add(new INETOption(OptionKind.INTERNET_PER_CONN_PROXY_BYPASS, joinedOverrides));
|
||||
}
|
||||
kind |= ProxyKind.PROXY_TYPE_PROXY;
|
||||
}
|
||||
options.Insert(0, new INETOption(OptionKind.INTERNET_PER_CONN_FLAGS, (int)kind));
|
||||
|
||||
var inetPackage = new INETPackage
|
||||
{
|
||||
_optionError = 0,
|
||||
_size = _iNetPackageSize,
|
||||
_connection = IntPtr.Zero,
|
||||
_optionCount = options.Count
|
||||
};
|
||||
|
||||
IntPtr optionsPtr = Marshal.AllocCoTaskMem(_iNetOptionSize * options.Count);
|
||||
for (int i = 0; i < options.Count; ++i)
|
||||
{
|
||||
var optionPtr = new IntPtr((IntPtr.Size == 4 ? optionsPtr.ToInt32() : optionsPtr.ToInt64()) + (i * _iNetOptionSize));
|
||||
Marshal.StructureToPtr(options[i], optionPtr, false);
|
||||
}
|
||||
inetPackage._optionsPtr = optionsPtr;
|
||||
|
||||
IntPtr iNetPackagePtr = Marshal.AllocCoTaskMem(_iNetPackageSize);
|
||||
Marshal.StructureToPtr(inetPackage, iNetPackagePtr, false);
|
||||
|
||||
int returnvalue = (NativeMethods.InternetSetOption(IntPtr.Zero, 75, iNetPackagePtr, _iNetPackageSize) ? -1 : 0);
|
||||
if (returnvalue == 0)
|
||||
{
|
||||
returnvalue = Marshal.GetLastWin32Error();
|
||||
}
|
||||
|
||||
Marshal.FreeCoTaskMem(optionsPtr);
|
||||
Marshal.FreeCoTaskMem(iNetPackagePtr);
|
||||
if (returnvalue > 0)
|
||||
{
|
||||
throw new Win32Exception(Marshal.GetLastWin32Error());
|
||||
}
|
||||
|
||||
NativeMethods.InternetSetOption(IntPtr.Zero, 39, iNetPackagePtr, _iNetPackageSize);
|
||||
NativeMethods.InternetSetOption(IntPtr.Zero, 37, iNetPackagePtr, _iNetPackageSize);
|
||||
}
|
||||
}
|
||||
public static void Load()
|
||||
{
|
||||
lock (_stateLock)
|
||||
{
|
||||
LoadAddresses();
|
||||
LoadOverrides();
|
||||
IsProxyEnabled = (_proxyKey.GetValue("ProxyEnable")?.ToString() == "1");
|
||||
}
|
||||
}
|
||||
|
||||
private static void LoadOverrides()
|
||||
{
|
||||
string proxyOverride = _proxyKey.GetValue("ProxyOverride")?.ToString();
|
||||
if (string.IsNullOrWhiteSpace(proxyOverride)) return;
|
||||
|
||||
string[] overrides = proxyOverride.Split(';');
|
||||
foreach (string @override in overrides)
|
||||
{
|
||||
if (@override == "<local>")
|
||||
{
|
||||
IsIgnoringLocalTraffic = true;
|
||||
}
|
||||
else if (!Overrides.Contains(@override))
|
||||
{
|
||||
Overrides.Add(@override);
|
||||
}
|
||||
}
|
||||
}
|
||||
private static void LoadAddresses()
|
||||
{
|
||||
string proxyServer = _proxyKey.GetValue("ProxyServer")?.ToString();
|
||||
if (string.IsNullOrWhiteSpace(proxyServer)) return;
|
||||
|
||||
string[] values = proxyServer.Split(';');
|
||||
foreach (string value in values)
|
||||
{
|
||||
string[] pair = value.Split('=');
|
||||
if (pair.Length != 2)
|
||||
{
|
||||
HTTPAddress = value;
|
||||
HTTPSAddress = value;
|
||||
return;
|
||||
}
|
||||
|
||||
string address = pair[1];
|
||||
string protocol = pair[0];
|
||||
switch (protocol)
|
||||
{
|
||||
case "http": HTTPAddress = address; break;
|
||||
case "https": HTTPSAddress = address; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetJoinedAddresses()
|
||||
{
|
||||
var addresses = new List<string>(2);
|
||||
if (!string.IsNullOrWhiteSpace(HTTPAddress))
|
||||
{
|
||||
addresses.Add("http=" + HTTPAddress);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(HTTPSAddress))
|
||||
{
|
||||
addresses.Add("https=" + HTTPSAddress);
|
||||
}
|
||||
return string.Join(";", addresses);
|
||||
}
|
||||
private static string GetJoinedOverrides()
|
||||
{
|
||||
var overrides = new List<string>(Overrides);
|
||||
if (IsIgnoringLocalTraffic)
|
||||
{
|
||||
overrides.Add("<local>");
|
||||
}
|
||||
return string.Join(";", overrides);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||
private struct INETOption
|
||||
{
|
||||
private readonly OptionKind _kind;
|
||||
private readonly INETOptionValue _value;
|
||||
|
||||
public INETOption(OptionKind kind, int value)
|
||||
{
|
||||
_kind = kind;
|
||||
_value = CreateValue(value);
|
||||
}
|
||||
public INETOption(OptionKind kind, string value)
|
||||
{
|
||||
_kind = kind;
|
||||
_value = CreateValue(value);
|
||||
}
|
||||
|
||||
private static INETOptionValue CreateValue(int value)
|
||||
{
|
||||
return new INETOptionValue
|
||||
{
|
||||
_intValue = value
|
||||
};
|
||||
}
|
||||
private static INETOptionValue CreateValue(string value)
|
||||
{
|
||||
return new INETOptionValue
|
||||
{
|
||||
_stringPointer = Marshal.StringToHGlobalAuto(value)
|
||||
};
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
private struct INETOptionValue
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public int _intValue;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public IntPtr _stringPointer;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public System.Runtime.InteropServices.ComTypes.FILETIME _fileTime;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||
private struct INETPackage
|
||||
{
|
||||
public int _size;
|
||||
public IntPtr _connection;
|
||||
public int _optionCount;
|
||||
public int _optionError;
|
||||
public IntPtr _optionsPtr;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
private enum ProxyKind
|
||||
{
|
||||
PROXY_TYPE_DIRECT = 1,
|
||||
PROXY_TYPE_PROXY = 2,
|
||||
PROXY_TYPE_AUTO_PROXY_URL = 4,
|
||||
PROXY_TYPE_AUTO_DETECT = 8
|
||||
}
|
||||
private enum OptionKind
|
||||
{
|
||||
INTERNET_PER_CONN_FLAGS = 1,
|
||||
INTERNET_PER_CONN_PROXY_SERVER = 2,
|
||||
INTERNET_PER_CONN_PROXY_BYPASS = 3,
|
||||
INTERNET_PER_CONN_AUTOCONFIG_URL = 4
|
||||
}
|
||||
}
|
||||
}
|
12
Source/GrasscutterTools/Eavesdrop/Internals/NativeMethods.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Eavesdrop
|
||||
{
|
||||
internal static class NativeMethods
|
||||
{
|
||||
[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
|
||||
}
|
||||
}
|
21
Source/GrasscutterTools/Eavesdrop/LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 ArachisH
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
365
Source/GrasscutterTools/Eavesdrop/Network/EavesNode.cs
Normal file
@@ -0,0 +1,365 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Net.Http;
|
||||
using System.Net.Sockets;
|
||||
using System.Net.Security;
|
||||
using System.Globalization;
|
||||
using System.IO.Compression;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Authentication;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
//using BrotliSharpLib;
|
||||
|
||||
namespace Eavesdrop.Network
|
||||
{
|
||||
public class EavesNode : IDisposable
|
||||
{
|
||||
private SslStream _secureStream;
|
||||
private readonly TcpClient _client;
|
||||
private readonly Certifier _certifier;
|
||||
private static readonly Regex _responseCookieSplitter;
|
||||
|
||||
public bool IsSecure => (_secureStream != null);
|
||||
|
||||
static EavesNode()
|
||||
{
|
||||
_responseCookieSplitter = new Regex(",(?! )");
|
||||
}
|
||||
public EavesNode(Certifier certifier, TcpClient client)
|
||||
{
|
||||
_client = client;
|
||||
_certifier = certifier;
|
||||
|
||||
_client.NoDelay = true;
|
||||
}
|
||||
|
||||
public Task<HttpWebRequest> ReadRequestAsync()
|
||||
{
|
||||
return ReadRequestAsync(null);
|
||||
}
|
||||
private async Task<HttpWebRequest> ReadRequestAsync(Uri baseUri)
|
||||
{
|
||||
string method = null;
|
||||
var headers = new List<string>();
|
||||
string requestUrl = baseUri?.OriginalString;
|
||||
|
||||
string command = ReadNonBufferedLine();
|
||||
if (string.IsNullOrWhiteSpace(command)) return null;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(command)) return null;
|
||||
string[] values = command.Split(' ');
|
||||
|
||||
method = values[0];
|
||||
requestUrl += values[1];
|
||||
while (_client.Connected)
|
||||
{
|
||||
string header = ReadNonBufferedLine();
|
||||
if (string.IsNullOrWhiteSpace(header)) break;
|
||||
|
||||
headers.Add(header);
|
||||
}
|
||||
|
||||
if (method == "CONNECT")
|
||||
{
|
||||
baseUri = new Uri("https://" + requestUrl);
|
||||
await SendResponseAsync(HttpStatusCode.OK).ConfigureAwait(false);
|
||||
|
||||
if (!SecureTunnel(baseUri.Host)) return null;
|
||||
return await ReadRequestAsync(baseUri).ConfigureAwait(false);
|
||||
}
|
||||
else return CreateRequest(method, headers, new Uri(requestUrl));
|
||||
}
|
||||
|
||||
public async Task<ByteArrayContent> ReadRequestContentAsync(WebRequest request)
|
||||
{
|
||||
byte[] payload = await GetPayload(GetStream(), request.ContentLength).ConfigureAwait(false);
|
||||
if (payload == null) return null;
|
||||
|
||||
//if (request.Headers[HttpRequestHeader.ContentEncoding] == "br")
|
||||
//{
|
||||
// request.Headers[HttpRequestHeader.ContentEncoding] = ""; // No longer encoded.
|
||||
// payload = Brotli.DecompressBuffer(payload, 0, payload.Length);
|
||||
//}
|
||||
return new ByteArrayContent(payload);
|
||||
}
|
||||
public async Task WriteRequestContentAsync(WebRequest request, HttpContent content)
|
||||
{
|
||||
byte[] payload = null;
|
||||
if (content is StreamContent streamContent)
|
||||
{
|
||||
// TODO:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
else payload = await content.ReadAsByteArrayAsync().ConfigureAwait(false);
|
||||
|
||||
//if (request.Headers[HttpRequestHeader.ContentEncoding] == "br")
|
||||
//{
|
||||
// payload = Brotli.CompressBuffer(payload, 0, payload.Length);
|
||||
//}
|
||||
|
||||
request.ContentLength = payload.Length;
|
||||
using (Stream output = await request.GetRequestStreamAsync().ConfigureAwait(false))
|
||||
{
|
||||
await output.WriteAsync(payload, 0, payload.Length).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
public Task SendResponseAsync(WebResponse response, HttpContent content)
|
||||
{
|
||||
string description = "OK";
|
||||
var status = HttpStatusCode.OK;
|
||||
if (response is HttpWebResponse httpResponse)
|
||||
{
|
||||
status = httpResponse.StatusCode;
|
||||
description = httpResponse.StatusDescription;
|
||||
}
|
||||
return SendResponseAsync(status, description, response.Headers, content);
|
||||
}
|
||||
public Task SendResponseAsync(HttpStatusCode status, string description = null)
|
||||
{
|
||||
return SendResponseAsync(status, (description ?? status.ToString()), null, null);
|
||||
}
|
||||
public async Task SendResponseAsync(HttpStatusCode status, string description, WebHeaderCollection headers, HttpContent content)
|
||||
{
|
||||
var headerBuilder = new StringBuilder();
|
||||
headerBuilder.AppendLine($"HTTP/{HttpVersion.Version10} {(int)status} {description}");
|
||||
if (headers != null)
|
||||
{
|
||||
foreach (string header in headers.AllKeys)
|
||||
{
|
||||
if (header == "Transfer-Encoding") continue;
|
||||
|
||||
string value = headers[header];
|
||||
if (string.IsNullOrWhiteSpace(value)) continue;
|
||||
|
||||
if (header.Equals("Set-Cookie", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
foreach (string setCookie in _responseCookieSplitter.Split(value))
|
||||
{
|
||||
headerBuilder.AppendLine($"{header}: {setCookie}");
|
||||
}
|
||||
}
|
||||
else headerBuilder.AppendLine($"{header}: {value}");
|
||||
}
|
||||
}
|
||||
headerBuilder.AppendLine();
|
||||
|
||||
byte[] headerData = Encoding.UTF8.GetBytes(headerBuilder.ToString());
|
||||
await GetStream().WriteAsync(headerData, 0, headerData.Length).ConfigureAwait(false);
|
||||
if (content != null)
|
||||
{
|
||||
// TODO: If the Content-Encoding header has been changed, re-compress while writing?
|
||||
Stream input = await content.ReadAsStreamAsync().ConfigureAwait(false);
|
||||
|
||||
int bytesRead = 0;
|
||||
var buffer = new byte[8192];
|
||||
do
|
||||
{
|
||||
bytesRead = await input.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
|
||||
if (_client.Connected && bytesRead > 0)
|
||||
{
|
||||
await GetStream().WriteAsync(buffer, 0, bytesRead).ConfigureAwait(false);
|
||||
}
|
||||
else return;
|
||||
}
|
||||
while (input.CanRead && _client.Connected);
|
||||
}
|
||||
}
|
||||
|
||||
public Stream GetStream()
|
||||
{
|
||||
return ((Stream)_secureStream ?? _client.GetStream());
|
||||
}
|
||||
private StreamWriter WrapStreamWriter()
|
||||
{
|
||||
return new StreamWriter(GetStream(), Encoding.UTF8, 1024, true);
|
||||
}
|
||||
private StreamReader WrapStreamReader(int bufferSize = 1024)
|
||||
{
|
||||
return new StreamReader(GetStream(), Encoding.UTF8, true, bufferSize, true);
|
||||
}
|
||||
|
||||
private string ReadNonBufferedLine()
|
||||
{
|
||||
string line = string.Empty;
|
||||
try
|
||||
{
|
||||
using (var binaryInput = new BinaryReader(GetStream(), Encoding.UTF8, true))
|
||||
{
|
||||
do { line += binaryInput.ReadChar(); }
|
||||
while (!line.EndsWith("\r\n"));
|
||||
}
|
||||
}
|
||||
catch (EndOfStreamException) { line += "\r\n"; }
|
||||
return line.Substring(0, line.Length - 2);
|
||||
}
|
||||
private bool SecureTunnel(string host)
|
||||
{
|
||||
try
|
||||
{
|
||||
X509Certificate2 certificate = _certifier.GenerateCertificate(host);
|
||||
|
||||
_secureStream = new SslStream(GetStream());
|
||||
_secureStream.AuthenticateAsServer(certificate, false, SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch { return false; }
|
||||
}
|
||||
private IEnumerable<Cookie> GetCookies(string cookieHeader, string host)
|
||||
{
|
||||
foreach (string cookie in cookieHeader.Split(';'))
|
||||
{
|
||||
int nameEndIndex = cookie.IndexOf('=');
|
||||
if (nameEndIndex == -1) continue;
|
||||
|
||||
string name = cookie.Substring(0, nameEndIndex).Trim();
|
||||
string value = cookie.Substring(nameEndIndex + 1).Trim();
|
||||
|
||||
yield return new Cookie(name, value, "/", host);
|
||||
}
|
||||
}
|
||||
private HttpWebRequest CreateRequest(string method, List<string> headers, Uri requestUri)
|
||||
{
|
||||
HttpWebRequest request = WebRequest.CreateHttp(requestUri);
|
||||
request.ProtocolVersion = HttpVersion.Version10;
|
||||
request.CookieContainer = new CookieContainer();
|
||||
request.AllowAutoRedirect = false;
|
||||
request.KeepAlive = false;
|
||||
request.Method = method;
|
||||
request.Proxy = null;
|
||||
|
||||
foreach (string header in headers)
|
||||
{
|
||||
int delimiterIndex = header.IndexOf(':');
|
||||
if (delimiterIndex == -1) continue;
|
||||
|
||||
string name = header.Substring(0, delimiterIndex);
|
||||
string value = header.Substring(delimiterIndex + 2);
|
||||
switch (name.ToLower())
|
||||
{
|
||||
case "range":
|
||||
case "expect":
|
||||
case "keep-alive":
|
||||
case "connection":
|
||||
case "proxy-connection": break;
|
||||
|
||||
case "host": request.Host = value; break;
|
||||
case "accept": request.Accept = value; break;
|
||||
case "referer": request.Referer = value; break;
|
||||
case "user-agent": request.UserAgent = value; break;
|
||||
case "content-type": request.ContentType = value; break;
|
||||
|
||||
case "content-length":
|
||||
{
|
||||
request.ContentLength =
|
||||
long.Parse(value, CultureInfo.InvariantCulture);
|
||||
|
||||
break;
|
||||
}
|
||||
case "cookie":
|
||||
{
|
||||
foreach (Cookie cookie in GetCookies(value, request.Host))
|
||||
{
|
||||
try
|
||||
{
|
||||
request.CookieContainer.Add(cookie);
|
||||
}
|
||||
catch (CookieException) { }
|
||||
}
|
||||
request.Headers[name] = value;
|
||||
break;
|
||||
}
|
||||
case "if-modified-since":
|
||||
{
|
||||
request.IfModifiedSince = DateTime.Parse(
|
||||
value.Split(';')[0], CultureInfo.InvariantCulture);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "date":
|
||||
if (long.TryParse(value, out var timestamp))
|
||||
{
|
||||
request.Date = timestamp > 10_000_000_000L
|
||||
? DateTimeOffset.FromUnixTimeMilliseconds(timestamp).DateTime
|
||||
: DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
request.Date = DateTime.Parse(value);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
request.Headers[name] = value; break;
|
||||
}
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
}
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
GetStream().Dispose();
|
||||
_client.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public static StreamContent ReadResponseContent(WebResponse response)
|
||||
{
|
||||
if (response.ContentLength == 0)
|
||||
{
|
||||
response.GetResponseStream().Dispose();
|
||||
return null;
|
||||
}
|
||||
|
||||
Stream input = response.GetResponseStream();
|
||||
//if (response is HttpWebResponse httpResponse && !string.IsNullOrWhiteSpace(httpResponse.ContentEncoding))
|
||||
//{
|
||||
// switch (httpResponse.ContentEncoding)
|
||||
// {
|
||||
// //case "br": input = new BrotliStream(input, CompressionMode.Decompress); break;
|
||||
// case "gzip": input = new GZipStream(input, CompressionMode.Decompress); break;
|
||||
// case "deflate": input = new DeflateStream(input, CompressionMode.Decompress); break;
|
||||
// }
|
||||
// response.Headers.Remove(HttpResponseHeader.ContentLength);
|
||||
// response.Headers.Remove(HttpResponseHeader.ContentEncoding);
|
||||
// response.Headers.Add(HttpResponseHeader.TransferEncoding, "chunked");
|
||||
//}
|
||||
return new StreamContent(input, response.ContentLength > 0 ? (int)response.ContentLength : 4096);
|
||||
}
|
||||
public static async Task<byte[]> GetPayload(Stream input, long length)
|
||||
{
|
||||
if (length < 1) return null;
|
||||
|
||||
int totalBytesRead = 0;
|
||||
int nullBytesReadCount = 0;
|
||||
var payload = new byte[length];
|
||||
do
|
||||
{
|
||||
int bytesLeft = (payload.Length - totalBytesRead);
|
||||
int bytesRead = await input.ReadAsync(payload, totalBytesRead, bytesLeft).ConfigureAwait(false);
|
||||
|
||||
if (bytesRead > 0)
|
||||
{
|
||||
nullBytesReadCount = 0;
|
||||
totalBytesRead += bytesRead;
|
||||
}
|
||||
else if (++nullBytesReadCount >= 2) return null;
|
||||
}
|
||||
while (totalBytesRead != payload.Length);
|
||||
return payload;
|
||||
}
|
||||
}
|
||||
}
|
346
Source/GrasscutterTools/Forms/FormActivityEditor.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
310
Source/GrasscutterTools/Forms/FormActivityEditor.cs
Normal 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 - 活动列表 -
|
||||
}
|
||||
}
|
208
Source/GrasscutterTools/Forms/FormActivityEditor.en-US.resx
Normal 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>
|
858
Source/GrasscutterTools/Forms/FormActivityEditor.resx
Normal 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=">>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=">>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=">>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=">>LblActivityParmEditTip.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblActivityTitle.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>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=">>BtnDelete.Name" xml:space="preserve">
|
||||
<value>BtnDelete</value>
|
||||
</data>
|
||||
<data name=">>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=">>ListAllActivity.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>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=">>ListActivityConfigItems.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>GrpAllActivity.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>ColumnActivityId.Name" xml:space="preserve">
|
||||
<value>ColumnActivityId</value>
|
||||
</data>
|
||||
<data name=">>BtnSave.Name" xml:space="preserve">
|
||||
<value>BtnSave</value>
|
||||
</data>
|
||||
<data name=">>LblBeginTime.Name" xml:space="preserve">
|
||||
<value>LblBeginTime</value>
|
||||
</data>
|
||||
<data name=">>DTPEndTime.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>GrpAllActivity.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblEndTime.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>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=">>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=">>LblActivityConfigJsonPath.Name" xml:space="preserve">
|
||||
<value>LblActivityConfigJsonPath</value>
|
||||
</data>
|
||||
<data name=">>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=">>BtnDelete.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>ColActivityId.Name" xml:space="preserve">
|
||||
<value>ColActivityId</value>
|
||||
</data>
|
||||
<data name="BtnLoad.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>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=">>BtnAddOrUpdate.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>TxtMeetCondList.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>LblMeetCondList.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>ActivityConfig.json Editor</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>NUDActivityId.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>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=">>BtnLoad.Name" xml:space="preserve">
|
||||
<value>BtnLoad</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>NUDActivityType.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>GrpActivityInfo.Name" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>DTPBeginTime.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblActivityType.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>GrpFileActivity.Name" xml:space="preserve">
|
||||
<value>GrpFileActivity</value>
|
||||
</data>
|
||||
<data name=">>$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=">>LblActivityParmEditTip.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ActivityConfigJsonPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>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=">>BtnLoad.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblEndTime.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>LblBeginTime.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="BtnLoad.Text" xml:space="preserve">
|
||||
<value>加载</value>
|
||||
</data>
|
||||
<data name=">>LblActivityTitle.Name" xml:space="preserve">
|
||||
<value>LblActivityTitle</value>
|
||||
</data>
|
||||
<data name="GrpAllActivity.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>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=">>$this.Name" xml:space="preserve">
|
||||
<value>FormActivityEditor</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>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=">>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=">>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=">>DTPEndTime.Name" xml:space="preserve">
|
||||
<value>DTPEndTime</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>LblScheduleId.Name" xml:space="preserve">
|
||||
<value>LblScheduleId</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblActivityParmEditTip.Name" xml:space="preserve">
|
||||
<value>LblActivityParmEditTip</value>
|
||||
</data>
|
||||
<data name=">>BtnLoad.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="LblBeginTime.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>GrpActivityInfo.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblActivityTitle.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>DTPEndTime.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblScheduleId.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>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=">>ColActivityEndTime.Name" xml:space="preserve">
|
||||
<value>ColActivityEndTime</value>
|
||||
</data>
|
||||
<data name=">>BtnSave.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>LblBeginTime.Parent" xml:space="preserve">
|
||||
<value>GrpActivityInfo</value>
|
||||
</data>
|
||||
<data name=">>ColActivityTitle.Name" xml:space="preserve">
|
||||
<value>ColActivityTitle</value>
|
||||
</data>
|
||||
<data name="LblActivityType.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>LblActivityType.ZOrder" xml:space="preserve">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>GrpActivityInfo.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>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=">>NUDActivityId.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>ColActivityBeginTime.Name" xml:space="preserve">
|
||||
<value>ColActivityBeginTime</value>
|
||||
</data>
|
||||
<data name=">>ColumnActivityName.Name" xml:space="preserve">
|
||||
<value>ColumnActivityName</value>
|
||||
</data>
|
||||
<data name=">>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=">>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>
|
221
Source/GrasscutterTools/Forms/FormActivityEditor.ru-RU.resx
Normal 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>
|
174
Source/GrasscutterTools/Forms/FormActivityEditor.zh-TW.resx
Normal 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>
|
@@ -56,7 +56,9 @@
|
||||
this.LblCountLabel = new System.Windows.Forms.Label();
|
||||
this.ListItems = new System.Windows.Forms.ListBox();
|
||||
this.GrpMonsterList = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearMonsterFilter = new System.Windows.Forms.Label();
|
||||
this.GrpItemList = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearItemFilter = new System.Windows.Forms.Label();
|
||||
this.GrpDropList.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDMaxWeight)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDMinWeight)).BeginInit();
|
||||
@@ -292,19 +294,37 @@
|
||||
// GrpMonsterList
|
||||
//
|
||||
resources.ApplyResources(this.GrpMonsterList, "GrpMonsterList");
|
||||
this.GrpMonsterList.Controls.Add(this.LblClearMonsterFilter);
|
||||
this.GrpMonsterList.Controls.Add(this.ListMonsters);
|
||||
this.GrpMonsterList.Controls.Add(this.TxtMonsterFilter);
|
||||
this.GrpMonsterList.Name = "GrpMonsterList";
|
||||
this.GrpMonsterList.TabStop = false;
|
||||
//
|
||||
// LblClearMonsterFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearMonsterFilter, "LblClearMonsterFilter");
|
||||
this.LblClearMonsterFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearMonsterFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearMonsterFilter.Name = "LblClearMonsterFilter";
|
||||
this.LblClearMonsterFilter.Click += new System.EventHandler(this.LblClearMonsterFilter_Click);
|
||||
//
|
||||
// GrpItemList
|
||||
//
|
||||
resources.ApplyResources(this.GrpItemList, "GrpItemList");
|
||||
this.GrpItemList.Controls.Add(this.LblClearItemFilter);
|
||||
this.GrpItemList.Controls.Add(this.TxtItemFilter);
|
||||
this.GrpItemList.Controls.Add(this.ListItems);
|
||||
this.GrpItemList.Name = "GrpItemList";
|
||||
this.GrpItemList.TabStop = false;
|
||||
//
|
||||
// LblClearItemFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearItemFilter, "LblClearItemFilter");
|
||||
this.LblClearItemFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearItemFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearItemFilter.Name = "LblClearItemFilter";
|
||||
this.LblClearItemFilter.Click += new System.EventHandler(this.LblClearItemFilter_Click);
|
||||
//
|
||||
// FormDropEditor
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
@@ -362,5 +382,7 @@
|
||||
private System.Windows.Forms.Button BtnPaste;
|
||||
private System.Windows.Forms.Button BtnClear;
|
||||
private System.Windows.Forms.Button BtnCopyAll;
|
||||
private System.Windows.Forms.Label LblClearMonsterFilter;
|
||||
private System.Windows.Forms.Label LblClearItemFilter;
|
||||
}
|
||||
}
|
@@ -199,6 +199,15 @@ namespace GrasscutterTools.Forms
|
||||
private void TxtMonsterFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListMonsters, Monsters, TxtMonsterFilter.Text);
|
||||
LblClearMonsterFilter.Visible = TxtMonsterFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空怪物过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearMonsterFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtMonsterFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -496,6 +505,15 @@ namespace GrasscutterTools.Forms
|
||||
private void TxtItemFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListItems, GameData.Items.Lines, TxtItemFilter.Text);
|
||||
LblClearItemFilter.Visible = TxtItemFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空物品列表过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearItemFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtItemFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -507,5 +525,7 @@ namespace GrasscutterTools.Forms
|
||||
}
|
||||
|
||||
#endregion - 物品列表 -
|
||||
|
||||
|
||||
}
|
||||
}
|
@@ -241,7 +241,7 @@
|
||||
<value>GrpMonsterList</value>
|
||||
</data>
|
||||
<data name=">>ListMonsters.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TxtMonsterFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
@@ -265,7 +265,7 @@
|
||||
<value>GrpMonsterList</value>
|
||||
</data>
|
||||
<data name=">>TxtMonsterFilter.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TxtItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
@@ -289,7 +289,7 @@
|
||||
<value>GrpItemList</value>
|
||||
</data>
|
||||
<data name=">>TxtItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="ListDropData.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
@@ -802,11 +802,47 @@
|
||||
<value>GrpItemList</value>
|
||||
</data>
|
||||
<data name=">>ListItems.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="GrpMonsterList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>228, 25</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearMonsterFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.Name" xml:space="preserve">
|
||||
<value>LblClearMonsterFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.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=">>LblClearMonsterFilter.Parent" xml:space="preserve">
|
||||
<value>GrpMonsterList</value>
|
||||
</data>
|
||||
<data name=">>LblClearMonsterFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="GrpMonsterList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 41</value>
|
||||
</data>
|
||||
@@ -834,6 +870,42 @@
|
||||
<data name="GrpItemList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Right</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>227, 25</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>23</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearItemFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.Name" xml:space="preserve">
|
||||
<value>LblClearItemFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.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=">>LblClearItemFilter.Parent" xml:space="preserve">
|
||||
<value>GrpItemList</value>
|
||||
</data>
|
||||
<data name=">>LblClearItemFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="GrpItemList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>576, 41</value>
|
||||
</data>
|
||||
|
@@ -50,8 +50,10 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
CmbPrefab.DisplayMember = "Value";
|
||||
CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
|
||||
//CmbPrefab.Items.Clear();
|
||||
//CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
}
|
||||
|
||||
private void InitCheckedListBoxs()
|
||||
@@ -96,6 +98,11 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#region - UI -
|
||||
|
||||
private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
|
||||
{
|
||||
return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
|
||||
}
|
||||
|
||||
private void ShowBanner(GachaBanner banner)
|
||||
{
|
||||
try
|
||||
@@ -103,10 +110,17 @@ namespace GrasscutterTools.Forms
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
|
||||
const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
|
||||
const string suffix = "_TITLE";
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
|
||||
{
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
{
|
||||
var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
|
||||
CmbPrefab.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
|
||||
}
|
||||
RbCostItem224.Checked = banner.CostItem == 224;
|
||||
RbCostItem223.Checked = banner.CostItem == 223;
|
||||
NUDBeginTime.Value = banner.BeginTime;
|
||||
@@ -153,15 +167,15 @@ namespace GrasscutterTools.Forms
|
||||
else
|
||||
purpleIds = TxtRateUpItems2.Text.Split(',').Select(s => int.Parse(s.Trim())).ToArray();
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
|
||||
GachaBanner banner = new GachaBanner
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
|
||||
PrefabPath = $"GachaShowPanel_{prefabId}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_{prefabId}_TITLE",
|
||||
CostItem = RbCostItem224.Checked ? 224 : 223,
|
||||
BeginTime = (int)NUDBeginTime.Value,
|
||||
EndTime = (int)NUDEndTime.Value,
|
||||
|
@@ -50,8 +50,11 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
CmbPrefab.DisplayMember = "Value";
|
||||
CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
|
||||
|
||||
//CmbPrefab.Items.Clear();
|
||||
//CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
}
|
||||
|
||||
private void LnkWeightHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
@@ -206,6 +209,10 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#region - 序列化 -
|
||||
|
||||
private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
|
||||
{
|
||||
return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
|
||||
}
|
||||
private void ShowBanner(GachaBanner2 banner)
|
||||
{
|
||||
try
|
||||
@@ -213,10 +220,17 @@ namespace GrasscutterTools.Forms
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
|
||||
const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
|
||||
const string suffix = "_TITLE";
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
|
||||
{
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
{
|
||||
var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
|
||||
CmbPrefab.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
|
||||
}
|
||||
RbCostItem224.Checked = banner.CostItem == 224;
|
||||
RbCostItem223.Checked = banner.CostItem == 223;
|
||||
DTPBeginTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.BeginTime).DateTime;
|
||||
@@ -248,16 +262,16 @@ namespace GrasscutterTools.Forms
|
||||
MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
|
||||
var banner = new GachaBanner2
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
|
||||
PrefabPath = $"GachaShowPanel_{prefabId}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_{prefabId}_TITLE",
|
||||
CostItem = RbCostItem224.Checked ? 224 : 223,
|
||||
BeginTime = (int)new DateTimeOffset(DTPBeginTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
|
||||
EndTime = (int)new DateTimeOffset(DTPEndTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -28,6 +28,7 @@ using System.Windows.Forms;
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Game.Gacha;
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
@@ -60,10 +61,10 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
CmbTitlePath.Items.Clear();
|
||||
CmbTitlePath.Items.AddRange(GameData.GachaBannerTitles.Names);
|
||||
CmbPrefab.DisplayMember = "Value";
|
||||
CmbPrefab.DataSource = GameData.GachaBannerPrefabs;
|
||||
CmbTitlePath.DisplayMember = "Value";
|
||||
CmbTitlePath.DataSource = GameData.GachaBannerTitles;
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
@@ -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();
|
||||
@@ -399,6 +405,12 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
#region - 卡池参数 -
|
||||
|
||||
private static string TrimPrefixAndSuffix(string text, int prefixLength, int suffixLength)
|
||||
{
|
||||
return text.Substring(prefixLength, text.Length - prefixLength - suffixLength);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 显示指定卡池参数
|
||||
/// </summary>
|
||||
@@ -410,14 +422,28 @@ namespace GrasscutterTools.Forms
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.PrefabPath) || !int.TryParse(banner.PrefabPath.Substring("GachaShowPanel_A".Length, 3), out int prefabId))
|
||||
const string prefabPrefix = "GachaShowPanel_";
|
||||
if (string.IsNullOrEmpty(banner.PrefabPath) || banner.PrefabPath.Length <= prefabPrefix.Length)
|
||||
{
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int titleId))
|
||||
{
|
||||
var prefabKey = banner.PrefabPath.Substring(prefabPrefix.Length);
|
||||
CmbPrefab.SelectedIndex = GameData.GachaBannerPrefabs.FindIndex(it => it.Key == prefabKey);
|
||||
}
|
||||
|
||||
const string titlePrefix = "UI_GACHA_SHOW_PANEL_";
|
||||
const string suffix = "_TITLE";
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || banner.TitlePath.Length <= titlePrefix.Length + suffix.Length)
|
||||
{
|
||||
CmbTitlePath.SelectedIndex = -1;
|
||||
}
|
||||
else
|
||||
CmbTitlePath.SelectedIndex = Array.IndexOf(GameData.GachaBannerTitles.Ids, titleId);
|
||||
{
|
||||
var titleKey = TrimPrefixAndSuffix(banner.TitlePath, titlePrefix.Length, suffix.Length);
|
||||
CmbTitlePath.SelectedIndex = GameData.GachaBannerTitles.FindIndex(it => it.Key == titleKey);
|
||||
}
|
||||
RbCostItem224.Checked = banner.CostItemId == 224;
|
||||
RbCostItem223.Checked = banner.CostItemId == 223;
|
||||
NUDCostItemAmount1.Value = banner.CoseItemAmount;
|
||||
@@ -452,16 +478,16 @@ namespace GrasscutterTools.Forms
|
||||
return null;
|
||||
}
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
var titleId = GameData.GachaBannerTitles.Ids[CmbTitlePath.SelectedIndex];
|
||||
var prefabId = GameData.GachaBannerPrefabs[CmbPrefab.SelectedIndex].Key;
|
||||
var titleId = GameData.GachaBannerTitles[CmbTitlePath.SelectedIndex].Key;
|
||||
var banner = new GachaBanner3
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{titleId:000}_TITLE",
|
||||
PrefabPath = $"GachaShowPanel_{prefabId}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_{prefabId}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_{titleId}_TITLE",
|
||||
CostItemId = RbCostItem224.Checked ? 224 : 223,
|
||||
CoseItemAmount = (int)NUDCostItemAmount1.Value,
|
||||
CostItemId10 = RbCostItem224.Checked ? 224 : 223,
|
||||
|
@@ -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>
|
||||
|
@@ -144,6 +144,9 @@
|
||||
<data name=">>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=">>DTPEndTime.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
</data>
|
||||
@@ -166,25 +169,25 @@
|
||||
<value>34, 28</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblGachaTypeTip.ZOrder" xml:space="preserve">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="LblCostItemAmount1.Text" xml:space="preserve">
|
||||
<value>单抽消耗</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>NUDEventChance5.Name" xml:space="preserve">
|
||||
<value>NUDEventChance5</value>
|
||||
<data name="GrpBannerValues.Text" xml:space="preserve">
|
||||
<value>卡池参数</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblBeginTime.Name" xml:space="preserve">
|
||||
<value>LblBeginTime</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>LblBannersJson.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LnkCheckLatestBanners.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>NUDGachaType.ZOrder" xml:space="preserve">
|
||||
<value>22</value>
|
||||
<data name=">>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=">>NUDCostItemAmount10.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
@@ -466,6 +475,9 @@
|
||||
<data name=">>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=">>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=">>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=">>LblBeginTime.ZOrder" xml:space="preserve">
|
||||
<value>27</value>
|
||||
<value>26</value>
|
||||
</data>
|
||||
<data name=">>NUDSortId.Name" xml:space="preserve">
|
||||
<value>NUDSortId</value>
|
||||
@@ -632,7 +647,7 @@
|
||||
<value>ChartWeights</value>
|
||||
</data>
|
||||
<data name=">>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=">>FLPBannersControl.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>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=">>NUDGachaType.ZOrder" xml:space="preserve">
|
||||
<value>22</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>GrpWeights.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>ListFallbackItems.Name" xml:space="preserve">
|
||||
<value>ListFallbackItems</value>
|
||||
@@ -761,7 +779,7 @@
|
||||
<value>204, 329</value>
|
||||
</data>
|
||||
<data name=">>LblPrefabPath.ZOrder" xml:space="preserve">
|
||||
<value>35</value>
|
||||
<value>34</value>
|
||||
</data>
|
||||
<data name=">>LblSortIdTip.Name" xml:space="preserve">
|
||||
<value>LblSortIdTip</value>
|
||||
@@ -779,7 +797,7 @@
|
||||
<value>29</value>
|
||||
</data>
|
||||
<data name=">>LblCostItem.ZOrder" xml:space="preserve">
|
||||
<value>34</value>
|
||||
<value>33</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblGachaTypeTip.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
</data>
|
||||
<data name=">>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=">>$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=">>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=">>LblEndTime.ZOrder" xml:space="preserve">
|
||||
<value>25</value>
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name=">>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=">>NUDEventChance4.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
</data>
|
||||
<data name=">>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=">>BtnSave.Name" xml:space="preserve">
|
||||
<value>BtnSave</value>
|
||||
@@ -939,9 +941,6 @@
|
||||
<data name=">>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=">>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=">>ListBanners.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>BtnSave.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
@@ -1113,11 +1109,8 @@
|
||||
<data name=">>CmbTitlePath.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
</data>
|
||||
<data name=">>GrpBannerValues.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>NUDScheduleId.ZOrder" xml:space="preserve">
|
||||
<value>28</value>
|
||||
<value>27</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>LnkWeightHelp.Name" xml:space="preserve">
|
||||
<value>LnkWeightHelp</value>
|
||||
@@ -1182,6 +1181,9 @@
|
||||
<data name=">>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=">>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=">>RbCostItem223.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>BtnDelete.Name" xml:space="preserve">
|
||||
<value>BtnDelete</value>
|
||||
</data>
|
||||
<data name=">>LnkOpenOldEditor.Name" xml:space="preserve">
|
||||
<value>LnkOpenOldEditor</value>
|
||||
@@ -1425,8 +1430,8 @@
|
||||
<data name=">>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=">>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=">>LblCostItemAmount1.Parent" xml:space="preserve">
|
||||
<value>GrpBannerValues</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>CmbBannerType.ZOrder" xml:space="preserve">
|
||||
<value>29</value>
|
||||
</data>
|
||||
<data name=">>GrpWeights.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblCostItemAmount1.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>LblGachaTypeTip.Name" xml:space="preserve">
|
||||
<value>LblGachaTypeTip</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>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=">>ColUpName.Name" xml:space="preserve">
|
||||
<value>ColUpName</value>
|
||||
</data>
|
||||
<data name=">>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=">>LblEventChance5.ZOrder" xml:space="preserve">
|
||||
<value>20</value>
|
||||
</data>
|
||||
@@ -1656,14 +1655,11 @@
|
||||
<data name=">>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=">>LblPoolWeight4.Name" xml:space="preserve">
|
||||
<value>LblPoolWeight4</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>LnkWeightHelp.Parent" xml:space="preserve">
|
||||
<value>GrpWeights</value>
|
||||
<data name=">>$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=">>RbCostItem223.ZOrder" xml:space="preserve">
|
||||
<value>36</value>
|
||||
<value>35</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>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=">>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=">>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=">>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=">>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>
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
185
Source/GrasscutterTools/Forms/FormMain.Designer.cs
generated
@@ -30,37 +30,50 @@ 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.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.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.BtnInvokeOpenCommand = new System.Windows.Forms.Button();
|
||||
this.TPRemoteCall = new System.Windows.Forms.TabPage();
|
||||
this.TPAbout = new System.Windows.Forms.TabPage();
|
||||
this.TPManage = new System.Windows.Forms.TabPage();
|
||||
this.TPScene = new System.Windows.Forms.TabPage();
|
||||
this.TPItem = new System.Windows.Forms.TabPage();
|
||||
this.TPWeapon = new System.Windows.Forms.TabPage();
|
||||
this.TPAvatar = new System.Windows.Forms.TabPage();
|
||||
this.TPSpawn = new System.Windows.Forms.TabPage();
|
||||
this.TPQuest = new System.Windows.Forms.TabPage();
|
||||
this.TPArtifact = new System.Windows.Forms.TabPage();
|
||||
this.TPCustom = new System.Windows.Forms.TabPage();
|
||||
this.TPHome = new System.Windows.Forms.TabPage();
|
||||
this.TCMain = new System.Windows.Forms.TabControl();
|
||||
this.TPMail = new System.Windows.Forms.TabPage();
|
||||
this.TPLoopTasks = new System.Windows.Forms.TabPage();
|
||||
this.MenuSpawnEntityFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).BeginInit();
|
||||
this.NavContainer.Panel1.SuspendLayout();
|
||||
this.NavContainer.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);
|
||||
//
|
||||
// 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.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.ListPages_MeasureItem);
|
||||
this.ListPages.SelectedIndexChanged += new System.EventHandler(this.ListPages_SelectedIndexChanged);
|
||||
this.ListPages.SizeChanged += new System.EventHandler(this.ListPages_SizeChanged);
|
||||
//
|
||||
// CmbCommand
|
||||
//
|
||||
resources.ApplyResources(this.CmbCommand, "CmbCommand");
|
||||
this.CmbCommand.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
|
||||
this.CmbCommand.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.CmbCommand.Name = "CmbCommand";
|
||||
this.CmbCommand.TextChanged += new System.EventHandler(this.CmbCommand_TextChanged);
|
||||
this.CmbCommand.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtCommand_KeyDown);
|
||||
//
|
||||
// BtnCopy
|
||||
@@ -79,6 +92,7 @@ namespace GrasscutterTools.Forms
|
||||
// GrpCommand
|
||||
//
|
||||
resources.ApplyResources(this.GrpCommand, "GrpCommand");
|
||||
this.GrpCommand.Controls.Add(this.LblClearFilter);
|
||||
this.GrpCommand.Controls.Add(this.BtnInvokeOpenCommand);
|
||||
this.GrpCommand.Controls.Add(this.BtnCopy);
|
||||
this.GrpCommand.Controls.Add(this.ChkAutoCopy);
|
||||
@@ -86,6 +100,14 @@ namespace GrasscutterTools.Forms
|
||||
this.GrpCommand.Name = "GrpCommand";
|
||||
this.GrpCommand.TabStop = false;
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// BtnInvokeOpenCommand
|
||||
//
|
||||
resources.ApplyResources(this.BtnInvokeOpenCommand, "BtnInvokeOpenCommand");
|
||||
@@ -93,129 +115,28 @@ namespace GrasscutterTools.Forms
|
||||
this.BtnInvokeOpenCommand.UseVisualStyleBackColor = true;
|
||||
this.BtnInvokeOpenCommand.Click += new System.EventHandler(this.BtnInvokeOpenCommand_Click);
|
||||
//
|
||||
// TPRemoteCall
|
||||
//
|
||||
resources.ApplyResources(this.TPRemoteCall, "TPRemoteCall");
|
||||
this.TPRemoteCall.Name = "TPRemoteCall";
|
||||
this.TPRemoteCall.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPAbout
|
||||
//
|
||||
resources.ApplyResources(this.TPAbout, "TPAbout");
|
||||
this.TPAbout.Name = "TPAbout";
|
||||
this.TPAbout.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPManage
|
||||
//
|
||||
resources.ApplyResources(this.TPManage, "TPManage");
|
||||
this.TPManage.Name = "TPManage";
|
||||
this.TPManage.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPScene
|
||||
//
|
||||
resources.ApplyResources(this.TPScene, "TPScene");
|
||||
this.TPScene.Name = "TPScene";
|
||||
this.TPScene.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPItem
|
||||
//
|
||||
resources.ApplyResources(this.TPItem, "TPItem");
|
||||
this.TPItem.Name = "TPItem";
|
||||
this.TPItem.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPWeapon
|
||||
//
|
||||
resources.ApplyResources(this.TPWeapon, "TPWeapon");
|
||||
this.TPWeapon.Name = "TPWeapon";
|
||||
this.TPWeapon.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPAvatar
|
||||
//
|
||||
resources.ApplyResources(this.TPAvatar, "TPAvatar");
|
||||
this.TPAvatar.Name = "TPAvatar";
|
||||
this.TPAvatar.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPSpawn
|
||||
//
|
||||
resources.ApplyResources(this.TPSpawn, "TPSpawn");
|
||||
this.TPSpawn.Name = "TPSpawn";
|
||||
this.TPSpawn.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPQuest
|
||||
//
|
||||
resources.ApplyResources(this.TPQuest, "TPQuest");
|
||||
this.TPQuest.Name = "TPQuest";
|
||||
this.TPQuest.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPArtifact
|
||||
//
|
||||
resources.ApplyResources(this.TPArtifact, "TPArtifact");
|
||||
this.TPArtifact.Name = "TPArtifact";
|
||||
this.TPArtifact.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPCustom
|
||||
//
|
||||
resources.ApplyResources(this.TPCustom, "TPCustom");
|
||||
this.TPCustom.Name = "TPCustom";
|
||||
this.TPCustom.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPHome
|
||||
//
|
||||
resources.ApplyResources(this.TPHome, "TPHome");
|
||||
this.TPHome.Name = "TPHome";
|
||||
this.TPHome.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TCMain
|
||||
//
|
||||
resources.ApplyResources(this.TCMain, "TCMain");
|
||||
this.TCMain.Controls.Add(this.TPHome);
|
||||
this.TCMain.Controls.Add(this.TPRemoteCall);
|
||||
this.TCMain.Controls.Add(this.TPCustom);
|
||||
this.TCMain.Controls.Add(this.TPArtifact);
|
||||
this.TCMain.Controls.Add(this.TPSpawn);
|
||||
this.TCMain.Controls.Add(this.TPItem);
|
||||
this.TCMain.Controls.Add(this.TPAvatar);
|
||||
this.TCMain.Controls.Add(this.TPWeapon);
|
||||
this.TCMain.Controls.Add(this.TPManage);
|
||||
this.TCMain.Controls.Add(this.TPMail);
|
||||
this.TCMain.Controls.Add(this.TPLoopTasks);
|
||||
this.TCMain.Controls.Add(this.TPQuest);
|
||||
this.TCMain.Controls.Add(this.TPScene);
|
||||
this.TCMain.Controls.Add(this.TPAbout);
|
||||
this.TCMain.Name = "TCMain";
|
||||
this.TCMain.SelectedIndex = 0;
|
||||
//
|
||||
// TPMail
|
||||
//
|
||||
resources.ApplyResources(this.TPMail, "TPMail");
|
||||
this.TPMail.Name = "TPMail";
|
||||
this.TPMail.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TPLoopTasks
|
||||
//
|
||||
resources.ApplyResources(this.TPLoopTasks, "TPLoopTasks");
|
||||
this.TPLoopTasks.Name = "TPLoopTasks";
|
||||
this.TPLoopTasks.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// MenuSpawnEntityFilter
|
||||
//
|
||||
resources.ApplyResources(this.MenuSpawnEntityFilter, "MenuSpawnEntityFilter");
|
||||
this.MenuSpawnEntityFilter.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.MenuSpawnEntityFilter.Name = "MenuSpawnEntityFilter";
|
||||
resources.ApplyResources(this.MenuSpawnEntityFilter, "MenuSpawnEntityFilter");
|
||||
//
|
||||
// FormMain
|
||||
//
|
||||
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);
|
||||
((System.ComponentModel.ISupportInitialize)(this.NavContainer)).EndInit();
|
||||
this.NavContainer.ResumeLayout(false);
|
||||
this.GrpCommand.ResumeLayout(false);
|
||||
this.GrpCommand.PerformLayout();
|
||||
this.TCMain.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
@@ -227,21 +148,9 @@ namespace GrasscutterTools.Forms
|
||||
private System.Windows.Forms.CheckBox ChkAutoCopy;
|
||||
private System.Windows.Forms.GroupBox GrpCommand;
|
||||
private System.Windows.Forms.Button BtnInvokeOpenCommand;
|
||||
private System.Windows.Forms.TabPage TPRemoteCall;
|
||||
private System.Windows.Forms.TabPage TPAbout;
|
||||
private System.Windows.Forms.TabPage TPManage;
|
||||
private System.Windows.Forms.TabPage TPScene;
|
||||
private System.Windows.Forms.TabPage TPItem;
|
||||
private System.Windows.Forms.TabPage TPWeapon;
|
||||
private System.Windows.Forms.TabPage TPAvatar;
|
||||
private System.Windows.Forms.TabPage TPSpawn;
|
||||
private System.Windows.Forms.TabPage TPQuest;
|
||||
private System.Windows.Forms.TabPage TPArtifact;
|
||||
private System.Windows.Forms.TabPage TPCustom;
|
||||
private System.Windows.Forms.TabPage TPHome;
|
||||
private System.Windows.Forms.TabControl TCMain;
|
||||
private System.Windows.Forms.TabPage TPMail;
|
||||
private System.Windows.Forms.ContextMenuStrip MenuSpawnEntityFilter;
|
||||
private System.Windows.Forms.TabPage TPLoopTasks;
|
||||
private System.Windows.Forms.ListBox ListPages;
|
||||
private System.Windows.Forms.SplitContainer NavContainer;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
}
|
||||
}
|
||||
|
@@ -18,6 +18,8 @@
|
||||
**/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
@@ -30,20 +32,41 @@ using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Forms
|
||||
{
|
||||
public partial class FormMain : Form
|
||||
internal partial class FormMain : Form
|
||||
{
|
||||
#region - 初始化 Init -
|
||||
private const string TAG = nameof(FormMain);
|
||||
|
||||
private const string TAG = "FormMain";
|
||||
public static FormMain Instance { get; private set; }
|
||||
|
||||
#region - 初始化 Init -
|
||||
|
||||
public FormMain()
|
||||
{
|
||||
Logger.I(TAG, "FormMain ctor enter");
|
||||
|
||||
Instance = this;
|
||||
|
||||
InitializeComponent();
|
||||
Icon = Resources.IconGrasscutter;
|
||||
|
||||
if (DesignMode) return;
|
||||
|
||||
Common.KeyGo = new KeyGo(Handle);
|
||||
Common.KeyGo.HotKeyTriggerEvent += OnHotKeyTrigger;
|
||||
|
||||
try
|
||||
{
|
||||
if (!Settings.Default.IsUpgraded)
|
||||
{
|
||||
Settings.Default.Upgrade();
|
||||
Settings.Default.IsUpgraded = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.W(TAG, "Upgrade Settings failed.", ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var location = Settings.Default.MainFormLocation;
|
||||
@@ -52,14 +75,28 @@ 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);
|
||||
}
|
||||
|
||||
// 还原窗口的不透明度
|
||||
if (Settings.Default.WindowOpacity < 100)
|
||||
{
|
||||
Opacity = Settings.Default.WindowOpacity / 100.0;
|
||||
Logger.I(TAG, "Restore window opacity: " + Opacity);
|
||||
}
|
||||
|
||||
// 恢复自动复制选项状态
|
||||
@@ -76,36 +113,322 @@ namespace GrasscutterTools.Forms
|
||||
Logger.I(TAG, "FormMain ctor completed");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 重载界面
|
||||
/// </summary>
|
||||
public void Reload()
|
||||
{
|
||||
FormMain_Load(this, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗体载入时触发(切换语言时会重新载入)
|
||||
/// </summary>
|
||||
private void FormMain_Load(object sender, EventArgs e)
|
||||
{
|
||||
Logger.I(TAG, "FormMain_Load enter");
|
||||
Text += " - by jie65535 - v" + Common.AppVersion.ToString(3);
|
||||
#if DEBUG
|
||||
Text += "-debug";
|
||||
#endif
|
||||
if (DesignMode) return;
|
||||
|
||||
// 加载页面导航
|
||||
UpdatePagesNav();
|
||||
|
||||
// 加载游戏ID资源
|
||||
GameData.LoadResources();
|
||||
|
||||
// 遍历每一个页面重新加载
|
||||
foreach (var page in Pages.Values)
|
||||
{
|
||||
Logger.I(TAG, $"{page.Name} OnLoad enter");
|
||||
page.OnLoad();
|
||||
Logger.I(TAG, $"{page.Name} OnLoad completed");
|
||||
}
|
||||
|
||||
// 默认选中首页
|
||||
if (ListPages.SelectedIndex == -1)
|
||||
ListPages.SelectedIndex = 0;
|
||||
|
||||
Logger.I(TAG, "FormMain_Load completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗口关闭后触发
|
||||
/// </summary>
|
||||
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
Logger.I(TAG, "FormMain FormClosed enter");
|
||||
// 遍历每一个页面,通知关闭
|
||||
foreach (var page in Pages.Values)
|
||||
{
|
||||
Logger.I(TAG, $"{page.Name} OnClosed enter");
|
||||
page.OnClosed();
|
||||
Logger.I(TAG, $"{page.Name} OnClosed completed");
|
||||
}
|
||||
|
||||
// 保存当前设置
|
||||
SaveSettings();
|
||||
Logger.I(TAG, "FormMain FormClosed completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存设置
|
||||
/// </summary>
|
||||
private void SaveSettings()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 记录界面状态
|
||||
Settings.Default.AutoCopy = ChkAutoCopy.Checked;
|
||||
// 记录窗口位置
|
||||
if (WindowState == FormWindowState.Normal)
|
||||
Settings.Default.MainFormLocation = Location;
|
||||
// 如果命令窗口已经弹出了,则不要保存多余的高度
|
||||
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 - 页面导航 Nav -
|
||||
|
||||
public Dictionary<string, BasePage> Pages { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 初始化并创建所有页面
|
||||
/// </summary>
|
||||
private void InitPages()
|
||||
{
|
||||
Logger.I(TAG, "InitPages enter");
|
||||
TCMain.SuspendLayout();
|
||||
var ph = CreatePage<PageHome>();
|
||||
ph.OnLanguageChanged = () => FormMain_Load(this, EventArgs.Empty);
|
||||
TPHome.Controls.Add(ph);
|
||||
Pages = new Dictionary<string, BasePage>(32);
|
||||
CreatePage<PageHome>();
|
||||
var poc = CreatePage<PageOpenCommand>();
|
||||
poc.ShowTipInRunButton = msg => ShowTip(msg, BtnInvokeOpenCommand);
|
||||
TPRemoteCall.Controls.Add(poc);
|
||||
TPCustom.Controls.Add(CreatePage<PageCustomCommands>());
|
||||
TPArtifact.Controls.Add(CreatePage<PageGiveArtifact>());
|
||||
TPSpawn.Controls.Add(CreatePage<PageSpawn>());
|
||||
TPItem.Controls.Add(CreatePage<PageGiveItem>());
|
||||
TPAvatar.Controls.Add(CreatePage<PageAvatar>());
|
||||
TPWeapon.Controls.Add(CreatePage<PageGiveWeapon>());
|
||||
TPManage.Controls.Add(CreatePage<PageManagement>());
|
||||
TPMail.Controls.Add(CreatePage<PageMail>());
|
||||
TPLoopTasks.Controls.Add(CreatePage<PageTasks>());
|
||||
TPQuest.Controls.Add(CreatePage<PageQuest>());
|
||||
TPScene.Controls.Add(CreatePage<PageScene>());
|
||||
TPAbout.Controls.Add(CreatePage<PageAbout>());
|
||||
//TPAbout.Controls.Add(CreatePage<PageTools>());
|
||||
TCMain.ResumeLayout();
|
||||
CreatePage<PageProxy>();
|
||||
CreatePage<PageCustomCommands>();
|
||||
CreatePage<PageHotKey>();
|
||||
CreatePage<PageGiveArtifact>();
|
||||
CreatePage<PageSetProp>();
|
||||
CreatePage<PageSpawn>();
|
||||
CreatePage<PageGiveItem>();
|
||||
CreatePage<PageAvatar>();
|
||||
CreatePage<PageGiveWeapon>();
|
||||
CreatePage<PageScene>();
|
||||
CreatePage<PageSceneTag>();
|
||||
CreatePage<PageWeather>();
|
||||
CreatePage<PageTasks>();
|
||||
CreatePage<PageManagement>();
|
||||
CreatePage<PageMail>();
|
||||
CreatePage<PageQuest>();
|
||||
CreatePage<PageAchievement>();
|
||||
CreatePage<PageSettings>();
|
||||
CreatePage<PageAbout>();
|
||||
#if DEBUG
|
||||
CreatePage<PageTools>();
|
||||
#endif
|
||||
Logger.I(TAG, "InitPages completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当前的页面选项卡顺序
|
||||
/// string Item1 = Page Name(Key)
|
||||
/// bool Item2 = IsVisible
|
||||
/// </summary>
|
||||
public List<Tuple<string, bool>> PageTabOrders { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 加载页面选项卡顺序
|
||||
/// </summary>
|
||||
private List<Tuple<string, bool>> LoadPageTabOrders()
|
||||
{
|
||||
if (PageTabOrders != null) return PageTabOrders;
|
||||
List<Tuple<string, bool>> tabOrders;
|
||||
if (!(Settings.Default.PageOrders?.Count > 0))
|
||||
{
|
||||
tabOrders = new List<Tuple<string, bool>>(Pages.Count);
|
||||
// 默认状态
|
||||
foreach (var tab in Pages)
|
||||
tabOrders.Add(new Tuple<string, bool>(tab.Key, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
tabOrders = new List<Tuple<string, bool>>(Settings.Default.PageOrders.Count);
|
||||
// 从设置中读取
|
||||
foreach (var item in Settings.Default.PageOrders)
|
||||
{
|
||||
// 冒号分隔的项 "PageHome:1" 0=隐藏 1=显示
|
||||
var sp = item.IndexOf(':');
|
||||
if (sp == -1 || !int.TryParse(item.Substring(sp + 1), out var isVisible)) continue;
|
||||
tabOrders.Add(new Tuple<string, bool>(item.Substring(0, sp), isVisible != 0));
|
||||
}
|
||||
}
|
||||
|
||||
return tabOrders;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置页面选项卡顺序
|
||||
/// </summary>
|
||||
public void ResetPageTabOrders()
|
||||
{
|
||||
PageTabOrders = new List<Tuple<string, bool>>(Pages.Count);
|
||||
// 默认状态
|
||||
foreach (var tab in Pages)
|
||||
PageTabOrders.Add(new Tuple<string, bool>(tab.Key, true));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存页面选项卡顺序
|
||||
/// </summary>
|
||||
public void SavePageTabOrders()
|
||||
{
|
||||
if (PageTabOrders == null || PageTabOrders.Count == 0)
|
||||
{
|
||||
Settings.Default.PageOrders = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var setting = new StringCollection();
|
||||
// 冒号分隔的项 "PageHome:1" 0=隐藏 1=显示
|
||||
foreach (var pageOrder in PageTabOrders)
|
||||
setting.Add($"{pageOrder.Item1}:{(pageOrder.Item2?'1':'0')}");
|
||||
Settings.Default.PageOrders = setting;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化页面导航
|
||||
/// </summary>
|
||||
public void UpdatePagesNav()
|
||||
{
|
||||
ListPages.BeginUpdate();
|
||||
ListPages.Items.Clear();
|
||||
|
||||
// 以下代码主要是为了加载用户自定义顺序的选项卡
|
||||
var tabOrders = LoadPageTabOrders();
|
||||
// 程序更新后增加或减少了界面的情况
|
||||
if (tabOrders.Count != Pages.Count)
|
||||
{
|
||||
PageTabOrders = new List<Tuple<string, bool>>(Pages.Count);
|
||||
var i = 0;
|
||||
var pageKeys = Pages.Keys.ToList();
|
||||
foreach (var pageOrder in tabOrders)
|
||||
{
|
||||
// 新增页面优先显示
|
||||
if (tabOrders.All(it => it.Item1 != pageKeys[i]))
|
||||
{
|
||||
PageTabOrders.Add(new Tuple<string, bool>(pageKeys[i], true));
|
||||
ListPages.Items.Add(Pages[pageKeys[i]].Text);
|
||||
}
|
||||
// 尝试获取页面标题
|
||||
if (Pages.TryGetValue(pageOrder.Item1, out var page))
|
||||
{
|
||||
// 仅设置为可见时添加
|
||||
if (pageOrder.Item2)
|
||||
ListPages.Items.Add(page.Text);
|
||||
PageTabOrders.Add(new Tuple<string, bool>(pageOrder.Item1, pageOrder.Item2));
|
||||
}
|
||||
// 如果获取不到页面标题,说明在本次更新中这个页面被删掉了,因此设置项也随之更新
|
||||
i++;
|
||||
}
|
||||
// 加上新增在最后的页面
|
||||
if (ListPages.Items.Count == i)
|
||||
{
|
||||
while (i < Pages.Count)
|
||||
{
|
||||
PageTabOrders.Add(new Tuple<string, bool>(pageKeys[i], true));
|
||||
ListPages.Items.Add(Pages[pageKeys[i]].Text);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
// 保存页面顺序
|
||||
SavePageTabOrders();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 按照设定顺序显示
|
||||
foreach (var pageOrder in tabOrders)
|
||||
{
|
||||
if (pageOrder.Item2)
|
||||
ListPages.Items.Add(Pages[pageOrder.Item1].Text);
|
||||
}
|
||||
|
||||
PageTabOrders = tabOrders;
|
||||
}
|
||||
|
||||
ListPages.EndUpdate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表选中项改变时触发
|
||||
/// </summary>
|
||||
private void ListPages_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (ListPages.SelectedIndex == -1) return;
|
||||
// 根据选中索引反查选中页面Key
|
||||
var key = PageTabOrders.Where(it => it.Item2)
|
||||
.ElementAt(ListPages.SelectedIndex)
|
||||
.Item1;
|
||||
// 通过Key找到页面的父节点也就是TabPage,设置为选中项
|
||||
ShowPage(Pages[key]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 展示页面
|
||||
/// </summary>
|
||||
/// <param name="page">页面实例</param>
|
||||
private void ShowPage(BasePage page)
|
||||
{
|
||||
NavContainer.Panel2.SuspendLayout();
|
||||
NavContainer.Panel2.Controls.Clear();
|
||||
NavContainer.Panel2.Controls.Add(page);
|
||||
NavContainer.Panel2.ResumeLayout();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表项居中绘制
|
||||
/// </summary>
|
||||
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_MeasureItem(object sender, MeasureItemEventArgs e)
|
||||
{
|
||||
// 列表项高度为字体高度1.5倍
|
||||
e.ItemHeight = ListPages.Font.Height * 3 / 2;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航列表大小改变时触发
|
||||
/// </summary>
|
||||
private void ListPages_SizeChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 立刻重绘列表项
|
||||
ListPages.Refresh();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建指定类型页面
|
||||
/// </summary>
|
||||
@@ -121,82 +444,37 @@ namespace GrasscutterTools.Forms
|
||||
Dock = DockStyle.Fill,
|
||||
Name = typeof(T).Name,
|
||||
};
|
||||
Pages.Add(page.Name, page);
|
||||
return page;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region - 快捷键执行 HotKey -
|
||||
|
||||
/// <summary>
|
||||
/// 窗体载入时触发(切换语言时会重新载入)
|
||||
/// 快捷键触发时执行
|
||||
/// </summary>
|
||||
private void FormMain_Load(object sender, EventArgs e)
|
||||
private void OnHotKeyTrigger(object sender, HotKeyTriggerEventArgs e)
|
||||
{
|
||||
Logger.I(TAG, "FormMain_Load enter");
|
||||
Text += " - by jie65535 - v" + Common.AppVersion.ToString(3);
|
||||
#if DEBUG
|
||||
Text += "-debug";
|
||||
#endif
|
||||
if (DesignMode) return;
|
||||
|
||||
// 加载游戏ID资源
|
||||
GameData.LoadResources();
|
||||
|
||||
// 遍历每一个页面重新加载
|
||||
foreach (TabPage tp in TCMain.Controls)
|
||||
{
|
||||
if (tp.Controls.Count > 0 && tp.Controls[0] is BasePage page)
|
||||
{
|
||||
Logger.I(TAG, $"{page.Name} OnLoad enter");
|
||||
page.OnLoad();
|
||||
Logger.I(TAG, $"{page.Name} OnLoad completed");
|
||||
}
|
||||
}
|
||||
Logger.I(TAG, "FormMain_Load completed");
|
||||
BeginInvoke(new Func<Task>(() => RunRawCommands(e.HotKeyItem.Commands)));
|
||||
e.Handle = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗口关闭后触发
|
||||
/// </summary>
|
||||
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
|
||||
private const int WM_HOTKEY = 0x312;
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
Logger.I(TAG, "FormMain FormClosed enter");
|
||||
// 遍历每一个页面,通知关闭
|
||||
foreach (TabPage tp in TCMain.Controls)
|
||||
base.WndProc(ref m);
|
||||
switch (m.Msg)
|
||||
{
|
||||
if (tp.Controls.Count > 0 && tp.Controls[0] is BasePage page)
|
||||
page.OnClosed();
|
||||
}
|
||||
|
||||
// 保存当前设置
|
||||
SaveSettings();
|
||||
Logger.I(TAG, "FormMain FormClosed completed");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存设置
|
||||
/// </summary>
|
||||
private void SaveSettings()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 记录界面状态
|
||||
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.Save();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(Resources.SettingSaveError + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
case WM_HOTKEY:
|
||||
Common.KeyGo.ProcessHotKey(m.WParam.ToInt32());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion - 初始化 Init -
|
||||
#endregion - 快捷键执行 HotKey -
|
||||
|
||||
#region - 命令 Command -
|
||||
|
||||
@@ -247,10 +525,12 @@ namespace GrasscutterTools.Forms
|
||||
/// <param name="args">参数</param>
|
||||
private void SetCommand(string command, string args)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(args))
|
||||
command = $"{command} {args}";
|
||||
command = command.Trim();
|
||||
if (Settings.Default.IsIncludeUID)
|
||||
SetCommand($"{command} @{Settings.Default.Uid} {args.Trim()}");
|
||||
else
|
||||
SetCommand($"{command} {args.Trim()}");
|
||||
command = $"{command} @{Settings.Default.Uid}";
|
||||
SetCommand(command);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -299,10 +579,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 || Common.OC?.CanInvokeMultipleCmd == true)
|
||||
return await RunCommands(FormatCommand(commands));
|
||||
return await RunCommands(commands.Split('|').Select(FormatCommand).ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -326,7 +616,7 @@ namespace GrasscutterTools.Forms
|
||||
if (Common.OC == null || !Common.OC.CanInvoke)
|
||||
{
|
||||
ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand);
|
||||
TCMain.SelectedTab = TPRemoteCall;
|
||||
NavigateTo<PageOpenCommand>();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -348,7 +638,7 @@ namespace GrasscutterTools.Forms
|
||||
{
|
||||
Logger.I(TAG, "RunCommand:" + cmd);
|
||||
var msg = await Common.OC.Invoke(cmd);
|
||||
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg);
|
||||
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg.Replace("\n", "\r\n"));
|
||||
TxtCommandRunLog.AppendText(Environment.NewLine);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -390,11 +680,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;
|
||||
}
|
||||
|
||||
@@ -405,8 +695,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,
|
||||
@@ -429,6 +719,42 @@ namespace GrasscutterTools.Forms
|
||||
// F5 为执行命令
|
||||
OnOpenCommandInvoke();
|
||||
}
|
||||
else if ((e.Alt || e.Control) && e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
|
||||
{
|
||||
// Alt|Ctrl+数字键 = 跳转到对应页面
|
||||
var i = e.KeyCode == Keys.D0 ? 9 : e.KeyCode - Keys.D1;
|
||||
if (i < ListPages.Items.Count)
|
||||
ListPages.SelectedIndex = i;
|
||||
}
|
||||
else if (e.Control && e.KeyCode == Keys.Tab)
|
||||
{
|
||||
// 切换到下一个页面
|
||||
ListPages.SelectedIndex = (ListPages.SelectedIndex + 1) % ListPages.Items.Count;
|
||||
}
|
||||
else if (Common.KeyGo.IsEnabled == false)
|
||||
{
|
||||
foreach (var hotkeyItem in Common.KeyGo.Items)
|
||||
{
|
||||
if (!hotkeyItem.IsEnabled) continue;
|
||||
|
||||
var t = hotkeyItem.HotKey.LastIndexOf('+');
|
||||
var key = (t >= 0) ? hotkeyItem.HotKey.Substring(t+1) : hotkeyItem.HotKey;
|
||||
if (e.KeyCode != (Keys)Enum.Parse(typeof(Keys), key.Trim()))
|
||||
continue;
|
||||
|
||||
if (t >= 0)
|
||||
{
|
||||
if (hotkeyItem.HotKey.Contains("Ctrl") && !e.Control)
|
||||
continue;
|
||||
if (hotkeyItem.HotKey.Contains("Shift") && !e.Shift)
|
||||
continue;
|
||||
if (hotkeyItem.HotKey.Contains("Alt") && !e.Alt)
|
||||
continue;
|
||||
}
|
||||
BeginInvoke(new Func<Task>(() => RunRawCommands(hotkeyItem.Commands)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -443,9 +769,54 @@ 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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导航到目标页面并返回该页面实例
|
||||
/// </summary>
|
||||
/// <typeparam name="TPage">页面类型</typeparam>
|
||||
public TPage NavigateTo<TPage>() where TPage : BasePage
|
||||
{
|
||||
var key = typeof(TPage).Name;
|
||||
var page = Pages[key] as TPage;
|
||||
var i = 0;
|
||||
foreach (var it in PageTabOrders.Where(it => it.Item2))
|
||||
{
|
||||
if (it.Item1 == key)
|
||||
{
|
||||
ListPages.SelectedIndex = i;
|
||||
return page;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
ShowPage(page);
|
||||
return page;
|
||||
}
|
||||
|
||||
#endregion - 通用 General -
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 命令栏文本改变时触发
|
||||
/// </summary>
|
||||
private void CmbCommand_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LblClearFilter.Visible = CmbCommand.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空命令栏标签时触发
|
||||
/// </summary>
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
CmbCommand.Text = "";
|
||||
}
|
||||
}
|
||||
}
|
@@ -127,52 +127,14 @@
|
||||
<data name="ChkAutoCopy.Text" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Text" xml:space="preserve">
|
||||
<value>Command - [Ctrl] Autorun - [Shift] Append - [Alt] Only run - [|] Split multiple commands</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
|
||||
<value>Run(F5)</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Text" xml:space="preserve">
|
||||
<value>Remote</value>
|
||||
<data name="GrpCommand.Text" xml:space="preserve">
|
||||
<value>Command - [Ctrl] Autorun - [Shift] Append - [Alt] Only run - [|] Split multiple commands</value>
|
||||
</data>
|
||||
<data name="TPAbout.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name="TPManage.Text" xml:space="preserve">
|
||||
<value>Manage</value>
|
||||
</data>
|
||||
<data name="TPScene.Text" xml:space="preserve">
|
||||
<value>Scene</value>
|
||||
</data>
|
||||
<data name="TPItem.Text" xml:space="preserve">
|
||||
<value>Items</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Text" xml:space="preserve">
|
||||
<value>Weapons</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Text" xml:space="preserve">
|
||||
<value>Avatar</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Text" xml:space="preserve">
|
||||
<value>Spawn</value>
|
||||
</data>
|
||||
<data name="TPQuest.Text" xml:space="preserve">
|
||||
<value>Quest</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Text" xml:space="preserve">
|
||||
<value>Artifacts</value>
|
||||
</data>
|
||||
<data name="TPCustom.Text" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="TPHome.Text" xml:space="preserve">
|
||||
<value>Home</value>
|
||||
</data>
|
||||
<data name="TPMail.Text" xml:space="preserve">
|
||||
<value>Mail</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Text" xml:space="preserve">
|
||||
<value>Loop</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
</root>
|
@@ -117,601 +117,313 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="TPQuest.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Text" xml:space="preserve">
|
||||
<value>命令 - [Ctrl] 自动执行 - [Shift] 拼接命令 - [Alt] 仅执行 - [|] 分割多条命令</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="BtnCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="TPScene.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="TPManage.Text" xml:space="preserve">
|
||||
<value>管理</value>
|
||||
</data>
|
||||
<data name="TCMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 275</value>
|
||||
</data>
|
||||
<data name=">>MenuSpawnEntityFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TPSpawn.Name" xml:space="preserve">
|
||||
<value>TPSpawn</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>TPAbout.Name" xml:space="preserve">
|
||||
<value>TPAbout</value>
|
||||
</data>
|
||||
<data name=">>TPScene.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="TPCustom.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name=">>TPSpawn.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TPQuest.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Text" xml:space="preserve">
|
||||
<value>循环</value>
|
||||
</data>
|
||||
<data name=">>TPRemoteCall.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TPHome.Name" xml:space="preserve">
|
||||
<value>TPHome</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="GrpCommand.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>TPHome.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TPRemoteCall.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TPHome.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name=">>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=">>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=">>ChkAutoCopy.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Text" xml:space="preserve">
|
||||
<value>生成</value>
|
||||
</data>
|
||||
<data name=">>TPAvatar.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>TPAvatar.Name" xml:space="preserve">
|
||||
<value>TPAvatar</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
|
||||
<value>执行(F5)</value>
|
||||
</data>
|
||||
<data name="TPMail.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>16</value>
|
||||
</data>
|
||||
<data name="TPManage.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name=">>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=">>TPCustom.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 56</value>
|
||||
</data>
|
||||
<data name="TPAbout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 23</value>
|
||||
</data>
|
||||
<data name=">>TPArtifact.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TPMail.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="TPAbout.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="TPScene.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TPSpawn.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>TPCustom.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TCMain.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<data name="NavContainer.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="TPScene.Text" xml:space="preserve">
|
||||
<value>场景</value>
|
||||
</data>
|
||||
<data name=">>TPLoopTasks.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TPAbout.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoCopy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="TPAbout.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="TPHome.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoCopy.Name" xml:space="preserve">
|
||||
<value>ChkAutoCopy</value>
|
||||
</data>
|
||||
<data name=">>TPLoopTasks.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name=">>TPArtifact.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Text" xml:space="preserve">
|
||||
<value>角色</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormMain</value>
|
||||
</data>
|
||||
<data name=">>TPAvatar.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Text" xml:space="preserve">
|
||||
<value>远程</value>
|
||||
</data>
|
||||
<data name=">>TPItem.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name=">>TCMain.Name" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TPQuest.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TCMain.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>610, 275</value>
|
||||
</data>
|
||||
<data name="TPManage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="TPItem.Text" xml:space="preserve">
|
||||
<value>物品</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft YaHei UI, 9pt</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.Text" xml:space="preserve">
|
||||
<value>自动</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
<data name=">>TPWeapon.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TPAvatar.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="TPQuest.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>543, 22</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>TPCustom.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TPScene.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>TPWeapon.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>700, 400</value>
|
||||
</data>
|
||||
<data name=">>TPHome.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name=">>TPManage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="GrpCommand.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>610, 56</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="TPHome.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name=">>TPArtifact.Name" xml:space="preserve">
|
||||
<value>TPArtifact</value>
|
||||
</data>
|
||||
<data name=">>TPQuest.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TPMail.Text" xml:space="preserve">
|
||||
<value>邮件</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>TPScene.ZOrder" xml:space="preserve">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name=">>TPItem.Name" xml:space="preserve">
|
||||
<value>TPItem</value>
|
||||
</data>
|
||||
<data name=">>$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=">>TPQuest.Name" xml:space="preserve">
|
||||
<value>TPQuest</value>
|
||||
</data>
|
||||
<data name="CmbCommand.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>TPAbout.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="TPMail.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="TPCustom.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TCMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<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="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
<data name="ListPages.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="BtnCopy.Text" xml:space="preserve">
|
||||
<value>复制</value>
|
||||
<data name="ListPages.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft YaHei UI, 10pt</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>599, 24</value>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="ListPages.ItemHeight" type="System.Int32, mscorlib">
|
||||
<value>25</value>
|
||||
</data>
|
||||
<data name=">>TPScene.Name" xml:space="preserve">
|
||||
<value>TPScene</value>
|
||||
<data name="ListPages.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="TPItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
<data name="ListPages.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>150, 275</value>
|
||||
</data>
|
||||
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
<data name="ListPages.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>TPSpawn.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
<data name=">>ListPages.Name" xml:space="preserve">
|
||||
<value>ListPages</value>
|
||||
</data>
|
||||
<data name=">>TCMain.Parent" xml:space="preserve">
|
||||
<data name=">>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=">>ListPages.Parent" xml:space="preserve">
|
||||
<value>NavContainer.Panel1</value>
|
||||
</data>
|
||||
<data name=">>ListPages.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>NavContainer.Panel1.Name" xml:space="preserve">
|
||||
<value>NavContainer.Panel1</value>
|
||||
</data>
|
||||
<data name=">>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=">>NavContainer.Panel1.Parent" xml:space="preserve">
|
||||
<value>NavContainer</value>
|
||||
</data>
|
||||
<data name=">>NavContainer.Panel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="NavContainer.Panel1MinSize" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name=">>NavContainer.Panel2.Name" xml:space="preserve">
|
||||
<value>NavContainer.Panel2</value>
|
||||
</data>
|
||||
<data name=">>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=">>NavContainer.Panel2.Parent" xml:space="preserve">
|
||||
<value>NavContainer</value>
|
||||
</data>
|
||||
<data name=">>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=">>NavContainer.Name" xml:space="preserve">
|
||||
<value>NavContainer</value>
|
||||
</data>
|
||||
<data name=">>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=">>NavContainer.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TPRemoteCall.Name" xml:space="preserve">
|
||||
<value>TPRemoteCall</value>
|
||||
</data>
|
||||
<data name="TPItem.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Text" xml:space="preserve">
|
||||
<value>武器</value>
|
||||
</data>
|
||||
<data name="TPWeapon.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<data name=">>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>
|
||||
<data name="TPArtifact.Text" xml:space="preserve">
|
||||
<value>圣遗物</value>
|
||||
</data>
|
||||
<data name="TPHome.Text" xml:space="preserve">
|
||||
<value>主页</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.Name" xml:space="preserve">
|
||||
<value>BtnCopy</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.Name" xml:space="preserve">
|
||||
<value>BtnInvokeOpenCommand</value>
|
||||
</data>
|
||||
<data name="TPQuest.Text" xml:space="preserve">
|
||||
<value>任务</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>684, 361</value>
|
||||
</data>
|
||||
<data name="TPCustom.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TPQuest.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TPCustom.Text" xml:space="preserve">
|
||||
<value>自定义</value>
|
||||
</data>
|
||||
<data name="TPMail.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name=">>TCMain.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TPArtifact.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name=">>TPWeapon.Name" xml:space="preserve">
|
||||
<value>TPWeapon</value>
|
||||
</data>
|
||||
<data name="TPItem.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name=">>TPManage.Name" xml:space="preserve">
|
||||
<value>TPManage</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TPAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 4, 3, 4</value>
|
||||
</data>
|
||||
<data name="TPAbout.Text" xml:space="preserve">
|
||||
<value>关于</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.Name" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>TPScene.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="CmbCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>87, 21</value>
|
||||
<value>115, 22</value>
|
||||
</data>
|
||||
<data name=">>TPQuest.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 25</value>
|
||||
</data>
|
||||
<data name=">>TPAvatar.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name=">>TPAbout.ZOrder" xml:space="preserve">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 22</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>TPItem.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="TPManage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name=">>CmbCommand.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 3, 3, 3</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name="TPHome.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>TPManage.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
</data>
|
||||
<data name="TCMain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="MenuSpawnEntityFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>61, 4</value>
|
||||
</data>
|
||||
<data name=">>ChkAutoCopy.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 293</value>
|
||||
</data>
|
||||
<data name=">>TPItem.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="TPMail.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
</data>
|
||||
<data name=">>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=">>TPCustom.Name" xml:space="preserve">
|
||||
<value>TPCustom</value>
|
||||
</data>
|
||||
<data name=">>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=">>BtnCopy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TPHome.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="TPCustom.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
<data name="CmbCommand.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>CmbCommand.Name" xml:space="preserve">
|
||||
<value>CmbCommand</value>
|
||||
</data>
|
||||
<data name=">>MenuSpawnEntityFilter.Name" xml:space="preserve">
|
||||
<value>MenuSpawnEntityFilter</value>
|
||||
</data>
|
||||
<data name=">>CmbCommand.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="TPScene.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 26</value>
|
||||
<data name=">>CmbCommand.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>CmbCommand.ZOrder" xml:space="preserve">
|
||||
<value>4</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>59, 22</value>
|
||||
</data>
|
||||
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 25</value>
|
||||
</data>
|
||||
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnCopy.Text" xml:space="preserve">
|
||||
<value>复制</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.Name" xml:space="preserve">
|
||||
<value>BtnCopy</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>BtnCopy.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>10, 24</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>TPMail.Name" xml:space="preserve">
|
||||
<value>TPMail</value>
|
||||
<data name="ChkAutoCopy.Text" xml:space="preserve">
|
||||
<value>自动</value>
|
||||
</data>
|
||||
<data name="TPManage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
<data name=">>ChkAutoCopy.Name" xml:space="preserve">
|
||||
<value>ChkAutoCopy</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>652, 245</value>
|
||||
<data name=">>ChkAutoCopy.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TPLoopTasks.Name" xml:space="preserve">
|
||||
<value>TPLoopTasks</value>
|
||||
<data name=">>ChkAutoCopy.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>TPLoopTasks.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>ChkAutoCopy.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>TPManage.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>TPMail.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>450, 25</value>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="TPItem.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>680, 26</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.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=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</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>721, 22</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 25</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
|
||||
<value>执行(F5)</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.Name" xml:space="preserve">
|
||||
<value>BtnInvokeOpenCommand</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TPMail.Parent" xml:space="preserve">
|
||||
<value>TCMain</value>
|
||||
<data name=">>BtnInvokeOpenCommand.Parent" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>BtnInvokeOpenCommand.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 293</value>
|
||||
</data>
|
||||
<data name="GrpCommand.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>610, 56</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>810, 56</value>
|
||||
</data>
|
||||
<data name="GrpCommand.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Text" xml:space="preserve">
|
||||
<value>命令 - [Ctrl] 自动执行 - [Shift] 拼接命令 - [Alt] 仅执行 - [|] 分割多条命令</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.Name" xml:space="preserve">
|
||||
<value>GrpCommand</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>GrpCommand.ZOrder" xml:space="preserve">
|
||||
<value>2</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>
|
||||
<data name="MenuSpawnEntityFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>61, 4</value>
|
||||
</data>
|
||||
<data name=">>MenuSpawnEntityFilter.Name" xml:space="preserve">
|
||||
<value>MenuSpawnEntityFilter</value>
|
||||
</data>
|
||||
<data name=">>MenuSpawnEntityFilter.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>834, 361</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Microsoft YaHei UI, 9pt</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 4, 3, 4</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>850, 400</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormMain</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
@@ -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>
|
||||
@@ -145,52 +145,17 @@
|
||||
<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="TPRemoteCall.Text" xml:space="preserve">
|
||||
<value>OpenCommand</value>
|
||||
</data>
|
||||
<data name="TPAbout.Text" xml:space="preserve">
|
||||
<value>Справка</value>
|
||||
</data>
|
||||
<data name="TPManage.Text" xml:space="preserve">
|
||||
<value>Аккаунты</value>
|
||||
</data>
|
||||
<data name="TPScene.Text" xml:space="preserve">
|
||||
<value>Сцена</value>
|
||||
</data>
|
||||
<data name="TPItem.Text" xml:space="preserve">
|
||||
<value>Предметы</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Text" xml:space="preserve">
|
||||
<value>Оружие</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Text" xml:space="preserve">
|
||||
<value>Персонаж</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Text" xml:space="preserve">
|
||||
<value>Спавн</value>
|
||||
</data>
|
||||
<data name="TPQuest.Text" xml:space="preserve">
|
||||
<value>Квест</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Text" xml:space="preserve">
|
||||
<value>Артефакт</value>
|
||||
</data>
|
||||
<data name="TPCustom.Text" xml:space="preserve">
|
||||
<value>Кастомное</value>
|
||||
</data>
|
||||
<data name="TPHome.Text" xml:space="preserve">
|
||||
<value>Главная</value>
|
||||
</data>
|
||||
<data name="TPMail.Text" xml:space="preserve">
|
||||
<value>Почта</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Text" xml:space="preserve">
|
||||
<value>Петля</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
</root>
|
@@ -129,31 +129,8 @@
|
||||
<data name="GrpCommand.Text" xml:space="preserve">
|
||||
<value>命令 - [Ctrl] 自動執行 - [Shift] 拼接命令 - [Alt] 僅執行 - [|] 分割多條命令</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Text" xml:space="preserve">
|
||||
<value>遠程</value>
|
||||
</data>
|
||||
<data name="TPAbout.Text" xml:space="preserve">
|
||||
<value>關於</value>
|
||||
</data>
|
||||
<data name="TPScene.Text" xml:space="preserve">
|
||||
<value>場景</value>
|
||||
</data>
|
||||
<data name="TPQuest.Text" xml:space="preserve">
|
||||
<value>任務</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Text" xml:space="preserve">
|
||||
<value>聖遺物</value>
|
||||
</data>
|
||||
<data name="TPCustom.Text" xml:space="preserve">
|
||||
<value>自定義</value>
|
||||
</data>
|
||||
<data name="TPHome.Text" xml:space="preserve">
|
||||
<value>主頁</value>
|
||||
</data>
|
||||
<data name="TPMail.Text" xml:space="preserve">
|
||||
<value>郵件</value>
|
||||
</data>
|
||||
<data name="TPLoopTasks.Text" xml:space="preserve">
|
||||
<value>循環</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
</root>
|
@@ -37,6 +37,7 @@
|
||||
this.BtnClearGoods = new System.Windows.Forms.Button();
|
||||
this.BtnDeleteGoods = new System.Windows.Forms.Button();
|
||||
this.GrpItems = new System.Windows.Forms.GroupBox();
|
||||
this.LblClearItemFilter = new System.Windows.Forms.Label();
|
||||
this.TxtItemFilter = new System.Windows.Forms.TextBox();
|
||||
this.GrpGoodsInfo = new System.Windows.Forms.GroupBox();
|
||||
this.BtnSaveGoods = new System.Windows.Forms.Button();
|
||||
@@ -132,8 +133,8 @@
|
||||
//
|
||||
// GrpShopList
|
||||
//
|
||||
resources.ApplyResources(this.GrpShopList, "GrpShopList");
|
||||
this.GrpShopList.Controls.Add(this.ListShop);
|
||||
resources.ApplyResources(this.GrpShopList, "GrpShopList");
|
||||
this.GrpShopList.Name = "GrpShopList";
|
||||
this.GrpShopList.TabStop = false;
|
||||
//
|
||||
@@ -163,11 +164,20 @@
|
||||
// GrpItems
|
||||
//
|
||||
resources.ApplyResources(this.GrpItems, "GrpItems");
|
||||
this.GrpItems.Controls.Add(this.LblClearItemFilter);
|
||||
this.GrpItems.Controls.Add(this.TxtItemFilter);
|
||||
this.GrpItems.Controls.Add(this.ListItems);
|
||||
this.GrpItems.Name = "GrpItems";
|
||||
this.GrpItems.TabStop = false;
|
||||
//
|
||||
// LblClearItemFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearItemFilter, "LblClearItemFilter");
|
||||
this.LblClearItemFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearItemFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearItemFilter.Name = "LblClearItemFilter";
|
||||
this.LblClearItemFilter.Click += new System.EventHandler(this.LblClearItemFilter_Click);
|
||||
//
|
||||
// TxtItemFilter
|
||||
//
|
||||
resources.ApplyResources(this.TxtItemFilter, "TxtItemFilter");
|
||||
@@ -698,5 +708,6 @@
|
||||
private System.Windows.Forms.TextBox TxtItemFilter;
|
||||
private System.Windows.Forms.Button BtnClearGoods;
|
||||
private System.Windows.Forms.Button BtnDeleteGoods;
|
||||
private System.Windows.Forms.Label LblClearItemFilter;
|
||||
}
|
||||
}
|
@@ -529,6 +529,15 @@ namespace GrasscutterTools.Forms
|
||||
private void TxtItemFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UIUtil.ListBoxFilter(ListItems, GameData.Items.Lines, TxtItemFilter.Text);
|
||||
LblClearItemFilter.Visible = TxtItemFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击清空物品列表过滤器标签时触发
|
||||
/// </summary>
|
||||
private void LblClearItemFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtItemFilter.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@@ -37,9 +37,10 @@
|
||||
this.LblResourcesPath = new System.Windows.Forms.Label();
|
||||
this.BtnSearch = new System.Windows.Forms.Button();
|
||||
this.DGVTextMap = new System.Windows.Forms.DataGridView();
|
||||
this.LblClearFilter = new System.Windows.Forms.Label();
|
||||
this.ColumnHash = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnText = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DGVTextMap)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -47,6 +48,7 @@
|
||||
//
|
||||
resources.ApplyResources(this.TxtTextMapFilter, "TxtTextMapFilter");
|
||||
this.TxtTextMapFilter.Name = "TxtTextMapFilter";
|
||||
this.TxtTextMapFilter.TextChanged += new System.EventHandler(this.TxtTextMapFilter_TextChanged);
|
||||
this.TxtTextMapFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTextMapFilter_KeyDown);
|
||||
//
|
||||
// BtnSelectRecoursePath
|
||||
@@ -90,42 +92,51 @@
|
||||
//
|
||||
// DGVTextMap
|
||||
//
|
||||
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
|
||||
this.DGVTextMap.AllowUserToAddRows = false;
|
||||
this.DGVTextMap.AllowUserToDeleteRows = false;
|
||||
this.DGVTextMap.AllowUserToResizeRows = false;
|
||||
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
|
||||
this.DGVTextMap.BackgroundColor = System.Drawing.Color.White;
|
||||
this.DGVTextMap.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.DGVTextMap.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.ColumnHash,
|
||||
this.ColumnID,
|
||||
this.ColumnText});
|
||||
this.ColumnText,
|
||||
this.ColumnID});
|
||||
this.DGVTextMap.Name = "DGVTextMap";
|
||||
this.DGVTextMap.ReadOnly = true;
|
||||
this.DGVTextMap.RowTemplate.Height = 23;
|
||||
//
|
||||
// LblClearFilter
|
||||
//
|
||||
resources.ApplyResources(this.LblClearFilter, "LblClearFilter");
|
||||
this.LblClearFilter.BackColor = System.Drawing.Color.White;
|
||||
this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.LblClearFilter.Name = "LblClearFilter";
|
||||
this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click);
|
||||
//
|
||||
// ColumnHash
|
||||
//
|
||||
resources.ApplyResources(this.ColumnHash, "ColumnHash");
|
||||
this.ColumnHash.Name = "ColumnHash";
|
||||
this.ColumnHash.ReadOnly = true;
|
||||
//
|
||||
// ColumnID
|
||||
//
|
||||
resources.ApplyResources(this.ColumnID, "ColumnID");
|
||||
this.ColumnID.Name = "ColumnID";
|
||||
this.ColumnID.ReadOnly = true;
|
||||
//
|
||||
// ColumnText
|
||||
//
|
||||
resources.ApplyResources(this.ColumnText, "ColumnText");
|
||||
this.ColumnText.Name = "ColumnText";
|
||||
this.ColumnText.ReadOnly = true;
|
||||
//
|
||||
// ColumnID
|
||||
//
|
||||
resources.ApplyResources(this.ColumnID, "ColumnID");
|
||||
this.ColumnID.Name = "ColumnID";
|
||||
this.ColumnID.ReadOnly = true;
|
||||
//
|
||||
// FormTextMapBrowser
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.LblClearFilter);
|
||||
this.Controls.Add(this.DGVTextMap);
|
||||
this.Controls.Add(this.BtnSearch);
|
||||
this.Controls.Add(this.ChkTopMost);
|
||||
@@ -151,8 +162,9 @@
|
||||
private System.Windows.Forms.Label LblResourcesPath;
|
||||
private System.Windows.Forms.Button BtnSearch;
|
||||
private System.Windows.Forms.DataGridView DGVTextMap;
|
||||
private System.Windows.Forms.Label LblClearFilter;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnHash;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnID;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnText;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnID;
|
||||
}
|
||||
}
|
@@ -119,13 +119,12 @@ namespace GrasscutterTools.Forms
|
||||
|
||||
private void GenLines()
|
||||
{
|
||||
List<ListViewItem> items = new List<ListViewItem>(data.TextMap.Count);
|
||||
var items = new List<ListViewItem>(data.TextMap.Count);
|
||||
foreach (var kv in data.TextMap)
|
||||
{
|
||||
if (data.ManualTextMap.TryGetValue(kv.Key, out string id))
|
||||
items.Add(new ListViewItem(new string[] { kv.Key, id, kv.Value }));
|
||||
else
|
||||
items.Add(new ListViewItem(new string[] { kv.Key, "", kv.Value }));
|
||||
items.Add(data.ManualTextMap?.TryGetValue(kv.Key, out var id) == true
|
||||
? new ListViewItem(new[] { kv.Key, id, kv.Value })
|
||||
: new ListViewItem(new[] { kv.Key, "", kv.Value }));
|
||||
}
|
||||
Items = items;
|
||||
}
|
||||
@@ -161,26 +160,25 @@ namespace GrasscutterTools.Forms
|
||||
Cursor = Cursors.WaitCursor;
|
||||
Application.DoEvents();
|
||||
|
||||
var result = data.ManualTextMap.Where(kv => r.Match(kv.Value).Success)
|
||||
.Select(kv => new { Hash = kv.Key, Id = kv.Value, Text = data.TextMap[kv.Key] })
|
||||
.Concat(
|
||||
data.TextMap.Where(kv => r.Match(kv.Key).Success || r.Match(kv.Value).Success)
|
||||
.Select(kv => new
|
||||
{
|
||||
Hash = kv.Key,
|
||||
Id = data.ManualTextMap.TryGetValue(kv.Key, out string id) ? id : "",
|
||||
Text = kv.Value
|
||||
})
|
||||
).ToList();
|
||||
var manualResult = data.ManualTextMap?.Where(kv => r.Match(kv.Value).Success)
|
||||
.Select(kv => new { Hash = kv.Key, Text = data.TextMap[kv.Key], Id = kv.Value, });
|
||||
var textMapResult = data.TextMap.Where(kv => r.Match(kv.Key).Success || r.Match(kv.Value).Success)
|
||||
.Select(kv => new
|
||||
{
|
||||
Hash = kv.Key,
|
||||
Text = kv.Value,
|
||||
Id = data.ManualTextMap?.TryGetValue(kv.Key, out var id) == true ? id : "",
|
||||
});
|
||||
var result = manualResult == null ? textMapResult.ToList() : textMapResult.Concat(manualResult).ToList();
|
||||
|
||||
DGVTextMap.SuspendLayout();
|
||||
DGVTextMap.Rows.Clear();
|
||||
for (int i = 0; i < result.Count; i++)
|
||||
for (var i = 0; i < result.Count; i++)
|
||||
{
|
||||
DGVTextMap.Rows.Add();
|
||||
DGVTextMap.Rows[i].Cells[0].Value = result[i].Hash;
|
||||
DGVTextMap.Rows[i].Cells[1].Value = result[i].Id;
|
||||
DGVTextMap.Rows[i].Cells[2].Value = result[i].Text;
|
||||
DGVTextMap.Rows[i].Cells[1].Value = result[i].Text;
|
||||
DGVTextMap.Rows[i].Cells[2].Value = result[i].Id;
|
||||
}
|
||||
DGVTextMap.ResumeLayout();
|
||||
}
|
||||
@@ -195,5 +193,15 @@ namespace GrasscutterTools.Forms
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
BtnSearch_Click(sender, e);
|
||||
}
|
||||
|
||||
private void TxtTextMapFilter_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
LblClearFilter.Visible = TxtTextMapFilter.Text.Length > 0;
|
||||
}
|
||||
|
||||
private void LblClearFilter_Click(object sender, EventArgs e)
|
||||
{
|
||||
TxtTextMapFilter.Clear();
|
||||
}
|
||||
}
|
||||
}
|
@@ -117,289 +117,325 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name=">>BtnSelectRecoursePath.Name" xml:space="preserve">
|
||||
<value>BtnSelectRecoursePath</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
<data name="TxtTextMapFilter.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="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>177, 15</value>
|
||||
</data>
|
||||
<data name=">>$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=">>BtnSearch.Name" xml:space="preserve">
|
||||
<value>BtnSearch</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name="ColumnText.HeaderText" xml:space="preserve">
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 41</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>96, 12</value>
|
||||
</data>
|
||||
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="ColumnID.Width" type="System.Int32, mscorlib">
|
||||
<value>240</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Text" xml:space="preserve">
|
||||
<value>请选择Resources路径</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 17</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.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="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>327, 17</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>555, 23</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>文本映射表浏览器</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>636, 379</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Name" xml:space="preserve">
|
||||
<value>LblResourcesPath</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtTextMapFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.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="ColumnHash.HeaderText" xml:space="preserve">
|
||||
<value>Hash</value>
|
||||
</data>
|
||||
<data name="ColumnText.Width" type="System.Int32, mscorlib">
|
||||
<value>250</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>548, 12</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Text" xml:space="preserve">
|
||||
<value>搜索</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Name" xml:space="preserve">
|
||||
<value>DGVTextMap</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Name" xml:space="preserve">
|
||||
<value>ColumnHash</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.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="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.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="BtnSelectRecoursePath.Text" xml:space="preserve">
|
||||
<value>浏览</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>510, 15</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.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=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Name" xml:space="preserve">
|
||||
<value>ChkTopMost</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 9pt</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 461</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Name" xml:space="preserve">
|
||||
<value>ColumnID</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="ColumnID.HeaderText" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.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=">>ColumnText.Name" xml:space="preserve">
|
||||
<value>ColumnText</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormTextMapBrowser</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>573, 41</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.Name" xml:space="preserve">
|
||||
<value>TxtTextMapFilter</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 70</value>
|
||||
<data name=">>TxtTextMapFilter.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=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<data name=">>TxtTextMapFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
<data name=">>TxtTextMapFilter.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>置顶</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>96, 12</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 400</value>
|
||||
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
|
||||
<value>浏览</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Name" xml:space="preserve">
|
||||
<value>BtnSelectRecoursePath</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.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=">>BtnSelectRecoursePath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>548, 12</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>510, 15</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 17</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.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=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 14</value>
|
||||
</data>
|
||||
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>置顶</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Name" xml:space="preserve">
|
||||
<value>ChkTopMost</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.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=">>ChkTopMost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>177, 15</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>327, 17</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Text" xml:space="preserve">
|
||||
<value>请选择Resources路径</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Name" xml:space="preserve">
|
||||
<value>LblResourcesPath</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.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=">>LblResourcesPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>573, 41</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Text" xml:space="preserve">
|
||||
<value>搜索</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Name" xml:space="preserve">
|
||||
<value>BtnSearch</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.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=">>BtnSearch.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<metadata name="ColumnHash.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnHash.HeaderText" xml:space="preserve">
|
||||
<value>Hash</value>
|
||||
</data>
|
||||
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnText.HeaderText" xml:space="preserve">
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="ColumnText.Width" type="System.Int32, mscorlib">
|
||||
<value>250</value>
|
||||
</data>
|
||||
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnID.HeaderText" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ColumnID.Width" type="System.Int32, mscorlib">
|
||||
<value>240</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 70</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>636, 379</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Name" xml:space="preserve">
|
||||
<value>DGVTextMap</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>545, 44</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>16, 17</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>18</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Text" xml:space="preserve">
|
||||
<value>X</value>
|
||||
</data>
|
||||
<data name="LblClearFilter.Visible" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.Name" xml:space="preserve">
|
||||
<value>LblClearFilter</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.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=">>LblClearFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblClearFilter.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>7, 17</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 461</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 9pt</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 400</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>文本映射表浏览器</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Name" xml:space="preserve">
|
||||
<value>ColumnHash</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Name" xml:space="preserve">
|
||||
<value>ColumnText</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Name" xml:space="preserve">
|
||||
<value>ColumnID</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormTextMapBrowser</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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; }
|
||||
|
@@ -26,7 +26,7 @@ using GrasscutterTools.Properties;
|
||||
|
||||
namespace GrasscutterTools.GOOD
|
||||
{
|
||||
public static class GOODData
|
||||
internal static class GOODData
|
||||
{
|
||||
static GOODData()
|
||||
{
|
||||
|
@@ -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"
|
||||
|
65
Source/GrasscutterTools/Game/Activity/ActivityConfigItem.cs
Normal 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; }
|
||||
}
|
||||
}
|
32
Source/GrasscutterTools/Game/Activity/NewActivityItem.cs
Normal 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; }
|
||||
}
|
||||
}
|
@@ -132,11 +132,56 @@ 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/9/1
|
||||
/// </summary>
|
||||
public static readonly Version V1_7_0 = new Version(1, 7, 0);
|
||||
|
||||
/// <summary>
|
||||
/// 2023/9/3
|
||||
/// </summary>
|
||||
public static readonly Version V1_7_1 = new Version(1, 7, 1);
|
||||
|
||||
/// <summary>
|
||||
/// 2023/10/1
|
||||
/// </summary>
|
||||
public static readonly Version V1_7_2 = new Version(1, 7, 2);
|
||||
|
||||
// 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 +193,15 @@ 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,
|
||||
V1_7_1,
|
||||
V1_7_2,
|
||||
};
|
||||
|
||||
#endregion - 版本列表 Version List -
|
||||
|