Compare commits

..

127 Commits

Author SHA1 Message Date
cd25afe0c7 Update translates 2022-11-01 22:30:41 +08:00
302e4e327d Implement ShopEditor 2022-11-01 21:55:05 +08:00
52317d8d5a Impl ShopEditor UI (WIP) 2022-10-31 22:47:12 +08:00
757bb2dd95 Update Shop editor UI (WIP) 2022-10-31 13:08:02 +08:00
3be6550593 Fix UI issue (#138) 2022-10-31 13:08:00 +08:00
止语
f79764dbb5 Add idol ID, initial quest (#139)
Add the idol ID, it is recommended to use the map unlock command to unlock the idol, and it is not recommended to unlock the map by manually completing the task (this method cannot unlock the anchor point and the secret realm).
At the beginning of the game, the task of catching Paimon is on top.
At present, there is a warehouse support task system, and I have already tested it and it is feasible
2022-10-31 08:50:57 +08:00
止语
61a598d7e3 Update GachaBennerPrefabs (#137) 2022-10-30 23:09:31 +08:00
dc61940e3c Add file headers 2022-10-30 22:12:10 +08:00
086c4da557 Add Shop models 2022-10-30 22:10:35 +08:00
d79b50527e Update Gacha prefabs 2022-10-30 19:25:57 +08:00
4a91e5a6bd Update version to v1.7.2 2022-10-30 11:43:54 +08:00
8db5fd1efd Update gacha avatars 2022-10-30 11:43:38 +08:00
Moglibogli
d22ba331d9 Update Item.txt 2022-10-30 10:03:36 +08:00
Moglibogli
cc20e81ebf Update GachaBennerPrefab.txt 2022-10-30 10:02:26 +08:00
0dac9051f7 Update README and translate 2022-10-29 22:37:24 +08:00
止语
78106ee726 Update custom directive (#133)
Add `unlock`, `no cd`
2022-10-29 22:23:10 +08:00
b708cff0cd Add Mail send to all warnning 2022-10-29 22:21:25 +08:00
aa075f5f91 Add Gadget(zh-cn only)!!
Update Spawns page, Subdivided monster types
2022-10-29 21:10:03 +08:00
8d42ddee10 Update README and Screenshots 2022-10-28 22:47:29 +08:00
2a3100c822 Fix mail item name issue 2022-10-28 22:31:46 +08:00
97bc9d8f6a Fix open command help format error 2022-10-28 22:22:00 +08:00
f2c4bfb7d3 Fix stat event not firing issue 2022-10-28 22:10:47 +08:00
d84f8036f7 Update translate
Remove ImgHome.jpg
2022-10-28 22:00:30 +08:00
16a57f38d3 Fix mail item list
Add /setConst to Avatar tab
Update translates
2022-10-28 21:54:04 +08:00
88031a79d0 Update translations 2022-10-28 13:06:35 +08:00
a36ce1af0f Fix mail player id limit issue 2022-10-28 12:19:41 +08:00
397ec8472b Update import avatar skill level to min 2022-10-28 08:39:17 +08:00
160b49d752 Fix mail item issue 2022-10-28 08:36:43 +08:00
fd515b18cf Implement send mail and mail list
Optimize duplicate code
2022-10-28 00:22:15 +08:00
5c7c64ea6c Add Command Version v1.4.2 2022-10-27 22:36:40 +08:00
64626ad065 Fix GOOD Import issues 2022-10-27 22:33:00 +08:00
8a65120e47 Add Mail editor (WIP)
Update Drop editor indexes
2022-10-27 13:11:58 +08:00
150e3a1132 Update README_zh-cn.md
Add QQ Group link
2022-10-27 10:27:43 +08:00
fbe53a7a0b Update README.md
Add QQ Group link
2022-10-27 10:27:24 +08:00
641d130a72 Update Screenshots(en) 2022-10-27 00:17:13 +08:00
6313373283 Add DropEditor screenshots 2022-10-26 23:58:45 +08:00
f70e61c686 Update translations 2022-10-26 23:48:35 +08:00
7d19876072 Implement drop editor functions 2022-10-26 23:30:57 +08:00
74613a809d DropEditor: Implement multiple selection and display intersection 2022-10-26 21:56:30 +08:00
60e54b1c91 Add Drop.json Path Setting
Update Drop.json Editor UI
2022-10-26 13:03:54 +08:00
c860180564 Add Drop Editor (WIP) 2022-10-25 23:36:30 +08:00
f0885a1fee Update README
Add run commands screenshot
2022-10-23 11:17:39 +08:00
641a4b0006 Update version to v1.7.0 2022-10-23 11:13:47 +08:00
fec144cb64 Implement command combination
Update command version
Add set all skill levels
Add skill level in avatar
2022-10-23 11:13:35 +08:00
c6b2c0ea65 Update 3.1.5 ids(EN) 2022-10-05 18:37:14 +08:00
8c42aca027 Update Version to v1.6.8 2022-10-05 18:19:43 +08:00
d84a34b268 Update Item.txt
Add 3.1.5 ids
2022-10-05 18:17:54 +08:00
Syca
eb6f15f078 Add 3.1.5 Monsters(Only CHS)
Do not ask me for 3.1.5X client!
I don't have it!
2022-10-02 12:38:52 +08:00
Syca
bd7aac6fcf Update All Avatar&Weapon
为什么这么久了,有的地方都没更新?
2022-10-02 12:38:52 +08:00
346a68ddb4 Merge pull request #122 from Halo1620/patch-2
3.1 changes
2022-09-29 21:40:17 +08:00
e8736c997a Merge pull request #123 from Halo1620/patch-3
3.1 eneimes
2022-09-29 21:39:49 +08:00
Halo1620
5d383ad72f 3.1 eneimes 2022-09-29 15:26:19 +02:00
Halo1620
0ec942275e 3.1 changes 2022-09-29 15:25:35 +02:00
EgorBron
24a38cbdf4 ru translation (from #119) (#120)
* Fixed some translations on Russian.
* Updated readme screenshots
2022-09-22 20:16:35 +08:00
c0a798ba93 Update version to v1.6.7 2022-09-20 22:26:51 +08:00
d930e3ee11 Fix UI misalignment issue
Add infinite HP option
and some small optimizations
2022-09-20 22:23:32 +08:00
Syca
3dbfa76de9 Update All 3.0.5X Scene IDs(CHS only)
not all translated
未完全翻译
2022-09-11 12:10:45 +08:00
8634d37977 Update new version tip location 2022-09-10 19:45:42 +08:00
f2a923a654 Use English README as default 2022-09-10 19:17:49 +08:00
5737a967b3 Add Desert eneimes 2022-09-10 18:52:17 +08:00
5f80a270c1 Add strong signature
Remove Settings.cs
2022-09-10 18:51:14 +08:00
e3664f577e Update Window Min Size 2022-09-10 18:50:16 +08:00
46eb1ee6b1 Update Version to v1.6.6 2022-09-10 18:50:00 +08:00
a43744c89d Merge branch 'main' of https://github.com/jie65535/GrasscutterCommandGenerator 2022-09-10 12:21:16 +08:00
12d7dde2e7 Remove NPCs
Removed to reduce size as GC currently cannot spawn NPCs
2022-09-10 12:21:13 +08:00
Syca
69068fad63 revert some wrong changes 2022-09-09 22:56:06 +08:00
Syca
2975ef0b49 3.0Quest (CHS only)
CNRELWin3.0.0
2022-09-09 22:56:06 +08:00
0871238e59 Update gc versions 2022-09-08 12:46:09 +08:00
5f2755f5bb Fix banner editor parse json button missing 2022-09-08 12:34:24 +08:00
746254c348 Update 3.0 NPCs 2022-09-06 23:06:28 +08:00
c43b73db3f Update 3.0.5 ids (zh-cn only) 2022-09-06 22:50:46 +08:00
af40aed3f3 Add 3.0 monsters 2022-09-06 22:39:55 +08:00
Elijah
ea013737f6 Update Monster.txt 2022-09-06 22:39:55 +08:00
79d4b266b8 Optimize server address input 2022-09-06 12:24:05 +08:00
6430000aad Fix check update 2022-09-01 23:46:31 +08:00
2b6af9aacd Update Screenshots-zh 2022-09-01 23:33:31 +08:00
43ff071250 No popup
Update to no longer automatically pop-up prompts to update
Change when to look for native services
2022-09-01 23:17:38 +08:00
a70a3979e5 Update version to v1.6.5 2022-09-01 22:52:21 +08:00
013b3c76b4 Add Weights chart 2022-09-01 22:50:07 +08:00
6575931ab2 Remove assembly guid 2022-08-29 23:32:03 +08:00
26f5f31be5 Update version to v1.6.4
_VS automatically changed the interface resource_
2022-08-29 20:44:54 +08:00
7204297465 Update Russian UI layout to fit new text 2022-08-29 20:30:14 +08:00
Егор Брон
4dfcb2538d Fixes in Forms/TXTs 2022-08-29 20:30:14 +08:00
EgorBron
e9cd500628 Fix and complete russian README translation 2022-08-29 20:30:14 +08:00
7ce0c132fe Update about(en/ru) 2022-08-28 15:37:09 +08:00
5b1d86b155 Add perm list and clear 2022-08-28 11:12:46 +08:00
53cb968e67 Add comments(zh) 2022-08-28 10:52:58 +08:00
314f9b67e3 Add some comments(zh) 2022-08-28 00:46:11 +08:00
50f7e72ff5 Add code header 2022-08-28 00:36:37 +08:00
ce7ac5bc8a Update version to v1.6.3 2022-08-28 00:35:45 +08:00
aff13c2a97 Add Command Version Control
Add more comments(zh)
Optimize code structure
Update the loading order to avoid repeated loading to optimize startup speed.
2022-08-28 00:35:21 +08:00
eba9db1e35 Update custom command labels 2022-08-27 18:10:18 +08:00
71ac75a4ca Remove N/A Quests 2022-08-27 18:04:47 +08:00
f393b372ec Update auto find local server address 2022-08-26 20:50:00 +08:00
cfb94e70b7 Remove deprecated methods 2022-08-26 12:59:25 +08:00
ab9b955c31 Fix command syntax error 2022-08-26 12:57:25 +08:00
4e4b47a9e6 Update version to v1.6.2 2022-08-26 12:55:50 +08:00
3da3bc4f23 Implementation Freeze stats(#97) 2022-08-26 12:55:40 +08:00
7cc46eb677 Fix Deepwood Memories Invisible 2022-08-26 12:28:56 +08:00
b9d1a2c2cd Fix run button disabled after command failed 2022-08-25 23:54:51 +08:00
a0cc908983 Fix Windows Defender virus reporting problem
by Remove Costuar/Fody
2022-08-25 22:02:43 +08:00
7dc7c7c8ac Update Check Gitee 2022-08-25 18:55:31 +08:00
ad4ca74e71 Add /prop unlockmap (#92) 2022-08-25 14:04:52 +08:00
a079685be8 Allow main stat to be empty 2022-08-25 12:29:06 +08:00
6703037527 Upgrade to PackageReference 2022-08-25 11:38:25 +08:00
417f0b7334 Update Prefabs 2022-08-24 22:35:40 +08:00
45aec44f39 Update Artifact Sets 2022-08-24 22:20:32 +08:00
7dd1e78512 Update Version to v1.6.0 2022-08-24 22:13:18 +08:00
418dfec289 Update 3.0 Resources 2022-08-24 22:11:06 +08:00
bc69a1c4ba Fix UI Issue 2022-07-28 12:22:59 +08:00
63f7eda5c3 Update version to v1.5.5
Fix GOODData Init issue
2022-07-28 08:41:08 +08:00
879bc34358 Update version to v1.5.4 2022-07-27 21:44:28 +08:00
c5a6d7f041 Add GOOD Help 2022-07-27 21:33:49 +08:00
20b1aca700 Fix UI occlusion issue 2022-07-27 20:42:02 +08:00
fb1a332f2c Fix textMapId field changed issue 2022-07-27 20:38:48 +08:00
867bdd1d00 Update README 2022-07-23 10:44:56 +08:00
5e28d1e625 Corrected format 2022-07-23 10:37:57 +08:00
e6ecde9951 Add help for server not connecting 2022-07-23 10:34:07 +08:00
gotoAndDie
2cb9f08caa Implement import from GOOD dump (#86)
* Implement import from GOOD dump

* Optimized implementation

* Add available urls

* Add prompt

Co-authored-by: Leo <chun.huang@student.manchester.ac.uk>
Co-authored-by: 筱傑 <jie65535@qq.com>
2022-07-23 10:18:51 +08:00
Asayu233
9eba1d6368 Update Resources to Version 2.8 (#83)
- 更新版本至1.5.3。
- 添加 anime game 2.8.0 的新物品、角色、场景。
- 修正权限列表。
- 使不同语言间的各种id与默认自定义命令一致化。
- 撤销 add 2.8.5 avatar #85 的更改,因为这些角色id目前并不存在,他们应该在3.0版本被添加。
2022-07-16 12:07:09 +08:00
Gktwo
ef4f06d6c3 Added 2.8.5 avatars (#85) 2022-07-14 14:30:28 +08:00
2857024b4c Update Version to v1.5.2 2022-07-12 22:03:56 +08:00
61f53d11e4 Update GachaBanner2.cs
Add `gachaTimesLimit` property
2022-07-11 23:05:17 +08:00
4bb4f4a715 Update /clear commands for other languages 2022-07-11 23:01:52 +08:00
e68e7e2c12 Add "Tip" above "Server IP" 2022-07-11 22:58:43 +08:00
NekosakiSR
49b56d7354 Commands/Permissions/Grammar update (#81)
* Updating to new clear commands

* Updated Mora command and added /stop command

~ Increased the amount of Mora the command gives to 100mill
~ Added stop command

* Added and updated permissions

~ .others permissions allow players to use commands on other ppl instead of themselves 
~ The old give permissions no longer work so deleted them

* Updating grammar

~ Changed "Banner editor" to "Banner Editor"
~ Replaced "Top most" with "Always on top"
~ Adding an S to "Artifact" tab, but didn't know which is which hope I guessed right
~ Fixed Grammar in Quest tab
~ The word "Management" is not needed next to every word, feel free to re-add them if you needed.
~ Added an S next to "Perm"
~ Replaced "Host" with "Server IP"

* Replacing "Topmost" to "Always on top"
2022-07-11 22:44:27 +08:00
Asayu233
9e69037972 Fix some bugs (#80) 2022-07-08 15:14:28 +08:00
193 changed files with 123936 additions and 100629 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -3,60 +3,71 @@
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
中文 | [English](README_en-US.md) | [Русский](README_ru-RU.md)
English | [简体中文](README_zh-cn.md) | [Русский](README_ru-RU.md)
## Commands Generator
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
## 远程执行
Support 简体中文, 繁体中文, English and Русский languages.
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
Welcome everyone to improve the [ID Resource](/Source/GrasscutterTools/Resources/en-us).
## Update log
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots-en/15-DropEditor.png)
![Mail Editor](Doc/Screenshots-en/16-MailEditor.png)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> If you cannot connect to the server, please make sure the server address is correct.
>
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
>
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
---
## TODO List
- [x] 多语言支持
- [x] 简体中文
- [x] 繁体中文
- [x] 英语
- [x] 俄语
- [x] 远程执行命令
- [ ] ~~邮件编辑器(无进度)~~
- [ ] ~~商店编辑器(无进度)~~
- [ ] 服务器公告编辑器(无进度)
## 软件截图
## Screenshots
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots/0-Home.png)
![Home](Doc/Screenshots-en/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots/1-CustomCommands.png)
![Custom Commands Screenshot](Doc/Screenshots-en/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots/2-CustomArtifact.png)
![Custom Artifact Screenshot](Doc/Screenshots-en/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots/3-CustomWeapon.png)
![Custom Weapon Screenshort](Doc/Screenshots-en/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots/4-GiveItem.png)
![Give Item Screenshort](Doc/Screenshots-en/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots/5-GiveAvatar.png)
![Give Avatar Screenshort](Doc/Screenshots-en/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots/6-SpawnEntity.png)
![Spawn Entity Screenshort](Doc/Screenshots-en/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots/7-ChangeScene.png)
![Change Scene Screenshort](Doc/Screenshots-en/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots/8-CustomStats.png)
![Management](Doc/Screenshots-en/9-Manage.png)
![Management](Doc/Screenshots/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-en/10-GachaBannerEditor.png)
![GachaBannerEditor](Doc/Screenshots/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-en/11-TextMapBrowser.png)
![Text Map Browser](Doc/Screenshots/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots-en/12-Remote.png)
![Remote Screenshort](Doc/Screenshots/12-Remote.png)
![Quest Screenshort](Doc/Screenshots/13-Quest.png)
![Quest Screenshort](Doc/Screenshots-en/13-Quest.png)

View File

@@ -1,62 +0,0 @@
# Grasscutter Tools
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[中文](README.md) | English | [Русский](README_ru-RU.md)
## Commands Generator
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
---
## TODO List
- [x] Multi-language support
- [x] Simplified Chinese
- [x] Traditional Chinese
- [x] English
- [x] Russian
- [x] Execute command remotely
- [ ] ~~Mail Editor (no progress)~~
- [ ] ~~Shop Editor (no progress)~~
- [ ] Announcement Editor (no progress)
## Screenshots
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots-en/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots-en/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots-en/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots-en/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots-en/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots-en/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots-en/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots-en/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots-en/8-CustomStats.png)
![Management](Doc/Screenshots-en/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-en/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-en/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots-en/12-Remote.png)
![Quest Screenshort](Doc/Screenshots-en/13-Quest.png)

View File

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

77
README_zh-cn.md Normal file
View File

@@ -0,0 +1,77 @@
# Grasscutter Tools
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
[English](README.md) | 简体中文 | [Русский](README_ru-RU.md)
## Commands Generator
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
本工具支持 简体中文, 繁体中文, English 与 Русский 语言。
欢迎大家一起来完善工具的[内置资源](/Source/GrasscutterTools/Resources/zh-cn)。
## Update log
### GrasscutterTools-v1.7.1
![Spawn Entity Screenshort](Doc/Screenshots/6-SpawnEntity.png)
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots/15-DropEditor.png)
![Mail Editor](Doc/Screenshots/16-MailEditor.png)
## 远程执行
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
>
> 建议配置服务器为HTTP模式如图所示(config.json)
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
>
> 如果使用的不是`80`端口则要在url中指定访问的端口号http://127.0.0.1:443
---
## 软件截图
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots/7-ChangeScene.png)
![Management](Doc/Screenshots/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots/12-Remote.png)
![Quest Screenshort](Doc/Screenshots/13-Quest.png)

View File

@@ -17,7 +17,7 @@
<value>10001</value>
</setting>
<setting name="DefaultLanguage" serializeAs="String">
<value>zh-CN</value>
<value />
</setting>
<setting name="ResourcesDirPath" serializeAs="String">
<value />
@@ -38,11 +38,20 @@
<value />
</setting>
<setting name="CommandVersion" serializeAs="String">
<value>1.2.2</value>
<value />
</setting>
<setting name="IsTopMost" serializeAs="String">
<value>False</value>
</setting>
<setting name="DropJsonPath" serializeAs="String">
<value />
</setting>
<setting name="DefaultMailSender" serializeAs="String">
<value>GrasscutterTools</value>
</setting>
<setting name="ShopJsonPath" serializeAs="String">
<value />
</setting>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -1,6 +1,5 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,891 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblDropPathLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblDropPathLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>17, 15</value>
</data>
<data name="LblDropPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 17</value>
</data>
<data name="LblDropPathLabel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json 路径:</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.Name" xml:space="preserve">
<value>LblDropPathLabel</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblDropPathLabel.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="TxtDropJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 12</value>
</data>
<data name="TxtDropJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>487, 23</value>
</data>
<data name="TxtDropJsonPath.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.Name" xml:space="preserve">
<value>TxtDropJsonPath</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtDropJsonPath.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="BtnLoad.Location" type="System.Drawing.Point, System.Drawing">
<value>621, 12</value>
</data>
<data name="BtnLoad.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnLoad.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加载</value>
</data>
<data name="&gt;&gt;BtnLoad.Name" xml:space="preserve">
<value>BtnLoad</value>
</data>
<data name="&gt;&gt;BtnLoad.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnLoad.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnLoad.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>726, 12</value>
</data>
<data name="BtnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnSave.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>保存</value>
</data>
<data name="&gt;&gt;BtnSave.Name" xml:space="preserve">
<value>BtnSave</value>
</data>
<data name="&gt;&gt;BtnSave.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSave.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListMonsters.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ListMonsters.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="ListMonsters.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 51</value>
</data>
<data name="ListMonsters.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 344</value>
</data>
<data name="ListMonsters.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;ListMonsters.Name" xml:space="preserve">
<value>ListMonsters</value>
</data>
<data name="&gt;&gt;ListMonsters.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ListMonsters.Parent" xml:space="preserve">
<value>GrpMonsterList</value>
</data>
<data name="&gt;&gt;ListMonsters.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="TxtMonsterFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="TxtMonsterFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="TxtMonsterFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 23</value>
</data>
<data name="TxtMonsterFilter.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.Name" xml:space="preserve">
<value>TxtMonsterFilter</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.Parent" xml:space="preserve">
<value>GrpMonsterList</value>
</data>
<data name="&gt;&gt;TxtMonsterFilter.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="TxtItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="TxtItemFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="TxtItemFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 23</value>
</data>
<data name="TxtItemFilter.TabIndex" type="System.Int32, mscorlib">
<value>21</value>
</data>
<data name="&gt;&gt;TxtItemFilter.Name" xml:space="preserve">
<value>TxtItemFilter</value>
</data>
<data name="&gt;&gt;TxtItemFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtItemFilter.Parent" xml:space="preserve">
<value>GrpItemList</value>
</data>
<data name="&gt;&gt;TxtItemFilter.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="ListDropData.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ListDropData.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="ListDropData.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
</data>
<data name="ListDropData.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 174</value>
</data>
<data name="ListDropData.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;ListDropData.Name" xml:space="preserve">
<value>ListDropData</value>
</data>
<data name="&gt;&gt;ListDropData.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ListDropData.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;ListDropData.ZOrder" xml:space="preserve">
<value>16</value>
</data>
<data name="GrpDropList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="BtnCopyAll.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnCopyAll.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 202</value>
</data>
<data name="BtnCopyAll.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnCopyAll.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="BtnCopyAll.Text" xml:space="preserve">
<value>复制全部</value>
</data>
<data name="&gt;&gt;BtnCopyAll.Name" xml:space="preserve">
<value>BtnCopyAll</value>
</data>
<data name="&gt;&gt;BtnCopyAll.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnCopyAll.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnCopyAll.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="BtnClear.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnClear.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 230</value>
</data>
<data name="BtnClear.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnClear.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>× 清空</value>
</data>
<data name="&gt;&gt;BtnClear.Name" xml:space="preserve">
<value>BtnClear</value>
</data>
<data name="&gt;&gt;BtnClear.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnClear.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnClear.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="BtnPaste.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnPaste.Location" type="System.Drawing.Point, System.Drawing">
<value>193, 202</value>
</data>
<data name="BtnPaste.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnPaste.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="BtnPaste.Text" xml:space="preserve">
<value>粘贴</value>
</data>
<data name="&gt;&gt;BtnPaste.Name" xml:space="preserve">
<value>BtnPaste</value>
</data>
<data name="&gt;&gt;BtnPaste.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnPaste.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnPaste.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 202</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>复制</value>
</data>
<data name="&gt;&gt;BtnCopy.Name" xml:space="preserve">
<value>BtnCopy</value>
</data>
<data name="&gt;&gt;BtnCopy.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnCopy.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnCopy.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="TxtItem.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="TxtItem.Location" type="System.Drawing.Point, System.Drawing">
<value>113, 280</value>
</data>
<data name="TxtItem.Size" type="System.Drawing.Size, System.Drawing">
<value>137, 23</value>
</data>
<data name="TxtItem.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;TxtItem.Name" xml:space="preserve">
<value>TxtItem</value>
</data>
<data name="&gt;&gt;TxtItem.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtItem.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;TxtItem.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnDelete.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 230</value>
</data>
<data name="BtnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="BtnDelete.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 删除</value>
</data>
<data name="&gt;&gt;BtnDelete.Name" xml:space="preserve">
<value>BtnDelete</value>
</data>
<data name="&gt;&gt;BtnDelete.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnDelete.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnDelete.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="BtnAddOrUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>54, 371</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 23</value>
</data>
<data name="BtnAddOrUpdate.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve">
<value>BtnAddOrUpdate</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="LblItemLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblItemLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblItemLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 283</value>
</data>
<data name="LblItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LblItemLabel.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="LblItemLabel.Text" xml:space="preserve">
<value>掉落物:</value>
</data>
<data name="&gt;&gt;LblItemLabel.Name" xml:space="preserve">
<value>LblItemLabel</value>
</data>
<data name="&gt;&gt;LblItemLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblItemLabel.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblItemLabel.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="LblTilde2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblTilde2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblTilde2.Location" type="System.Drawing.Point, System.Drawing">
<value>167, 342</value>
</data>
<data name="LblTilde2.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
</data>
<data name="LblTilde2.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="LblTilde2.Text" xml:space="preserve">
<value>~</value>
</data>
<data name="&gt;&gt;LblTilde2.Name" xml:space="preserve">
<value>LblTilde2</value>
</data>
<data name="&gt;&gt;LblTilde2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTilde2.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblTilde2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="LblTilde1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblTilde1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblTilde1.Location" type="System.Drawing.Point, System.Drawing">
<value>167, 313</value>
</data>
<data name="LblTilde1.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
</data>
<data name="LblTilde1.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="LblTilde1.Text" xml:space="preserve">
<value>~</value>
</data>
<data name="&gt;&gt;LblTilde1.Name" xml:space="preserve">
<value>LblTilde1</value>
</data>
<data name="&gt;&gt;LblTilde1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTilde1.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblTilde1.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="NUDMaxWeight.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMaxWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>190, 340</value>
</data>
<data name="NUDMaxWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMaxWeight.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.Name" xml:space="preserve">
<value>NUDMaxWeight</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMaxWeight.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="NUDMinWeight.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMinWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 342</value>
</data>
<data name="NUDMinWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMinWeight.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="&gt;&gt;NUDMinWeight.Name" xml:space="preserve">
<value>NUDMinWeight</value>
</data>
<data name="&gt;&gt;NUDMinWeight.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMinWeight.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMinWeight.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="NUDMaxCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMaxCount.Location" type="System.Drawing.Point, System.Drawing">
<value>190, 311</value>
</data>
<data name="NUDMaxCount.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMaxCount.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;NUDMaxCount.Name" xml:space="preserve">
<value>NUDMaxCount</value>
</data>
<data name="&gt;&gt;NUDMaxCount.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMaxCount.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMaxCount.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="NUDMinCount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="NUDMinCount.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 311</value>
</data>
<data name="NUDMinCount.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="NUDMinCount.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="&gt;&gt;NUDMinCount.Name" xml:space="preserve">
<value>NUDMinCount</value>
</data>
<data name="&gt;&gt;NUDMinCount.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDMinCount.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;NUDMinCount.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="LblWeightLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblWeightLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblWeightLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 344</value>
</data>
<data name="LblWeightLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblWeightLabel.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="LblWeightLabel.Text" xml:space="preserve">
<value>权重:</value>
</data>
<data name="&gt;&gt;LblWeightLabel.Name" xml:space="preserve">
<value>LblWeightLabel</value>
</data>
<data name="&gt;&gt;LblWeightLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblWeightLabel.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblWeightLabel.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="LblCountLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblCountLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblCountLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 313</value>
</data>
<data name="LblCountLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblCountLabel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="LblCountLabel.Text" xml:space="preserve">
<value>数量:</value>
</data>
<data name="&gt;&gt;LblCountLabel.Name" xml:space="preserve">
<value>LblCountLabel</value>
</data>
<data name="&gt;&gt;LblCountLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblCountLabel.Parent" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;LblCountLabel.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="GrpDropList.Location" type="System.Drawing.Point, System.Drawing">
<value>270, 41</value>
</data>
<data name="GrpDropList.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 400</value>
</data>
<data name="GrpDropList.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="GrpDropList.Text" xml:space="preserve">
<value>掉落列表</value>
</data>
<data name="&gt;&gt;GrpDropList.Name" xml:space="preserve">
<value>GrpDropList</value>
</data>
<data name="&gt;&gt;GrpDropList.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpDropList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpDropList.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="ListItems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ListItems.ItemHeight" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="ListItems.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 51</value>
</data>
<data name="ListItems.Size" type="System.Drawing.Size, System.Drawing">
<value>238, 344</value>
</data>
<data name="ListItems.TabIndex" type="System.Int32, mscorlib">
<value>22</value>
</data>
<data name="&gt;&gt;ListItems.Name" xml:space="preserve">
<value>ListItems</value>
</data>
<data name="&gt;&gt;ListItems.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ListItems.Parent" xml:space="preserve">
<value>GrpItemList</value>
</data>
<data name="&gt;&gt;ListItems.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpMonsterList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left</value>
</data>
<data name="GrpMonsterList.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="GrpMonsterList.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 400</value>
</data>
<data name="GrpMonsterList.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="GrpMonsterList.Text" xml:space="preserve">
<value>怪物列表</value>
</data>
<data name="&gt;&gt;GrpMonsterList.Name" xml:space="preserve">
<value>GrpMonsterList</value>
</data>
<data name="&gt;&gt;GrpMonsterList.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpMonsterList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpMonsterList.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpItemList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="GrpItemList.Location" type="System.Drawing.Point, System.Drawing">
<value>576, 41</value>
</data>
<data name="GrpItemList.Size" type="System.Drawing.Size, System.Drawing">
<value>250, 400</value>
</data>
<data name="GrpItemList.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="GrpItemList.Text" xml:space="preserve">
<value>物品列表</value>
</data>
<data name="&gt;&gt;GrpItemList.Name" xml:space="preserve">
<value>GrpItemList</value>
</data>
<data name="&gt;&gt;GrpItemList.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpItemList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpItemList.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>839, 450</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>微软雅黑, 9pt</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>855, 489</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Drop.json Editor</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormDropEditor</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblDropPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 17</value>
</data>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json Путь:</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Нагрузка</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>Сохранять</value>
</data>
<data name="GrpDropList.Text" xml:space="preserve">
<value>Drop list</value>
</data>
<data name="BtnCopyAll.Location" type="System.Drawing.Point, System.Drawing">
<value>94, 202</value>
</data>
<data name="BtnCopyAll.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 23</value>
</data>
<data name="BtnCopyAll.Text" xml:space="preserve">
<value>Скопировать все</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>× Очистить</value>
</data>
<data name="BtnPaste.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 202</value>
</data>
<data name="BtnPaste.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="BtnPaste.Text" xml:space="preserve">
<value>Вставить</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>Копировать</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Добавить или обновить</value>
</data>
<data name="LblItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblItemLabel.Text" xml:space="preserve">
<value>предмет:</value>
</data>
<data name="LblWeightLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 17</value>
</data>
<data name="LblWeightLabel.Text" xml:space="preserve">
<value>Веса:</value>
</data>
<data name="LblCountLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 17</value>
</data>
<data name="LblCountLabel.Text" xml:space="preserve">
<value>Считать:</value>
</data>
<data name="GrpMonsterList.Text" xml:space="preserve">
<value>Список монстров</value>
</data>
<data name="GrpItemList.Text" xml:space="preserve">
<value>Список предметов</value>
</data>
</root>

View File

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

View File

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

View File

@@ -129,7 +129,7 @@
<value>390, 35</value>
</data>
<data name="LblBannerEditorOldTip.Text" xml:space="preserve">
<value>Совет: Последняя версия баннера разрабатывается в настоящее время не поддерживается, ждем PR : )</value>
<value>Подсказка: последняя версия баннера разрабатывается и в настоящее время не поддерживается, ждем PR : )</value>
</data>
<data name="LblEventChanceTip.Location" type="System.Drawing.Point, System.Drawing">
<value>401, 262</value>
@@ -180,7 +180,7 @@
<value>81, 17</value>
</data>
<data name="LblRateUpItems2.Text" xml:space="preserve">
<value>4 звезды UP</value>
<value>4 зв. UP</value>
</data>
<data name="LblSoftPity.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 291</value>
@@ -189,7 +189,7 @@
<value>79, 17</value>
</data>
<data name="LblSoftPity.Text" xml:space="preserve">
<value>Мяг. гарант</value>
<value>Софт-гарант</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 17</value>
@@ -240,7 +240,7 @@
<value>85, 17</value>
</data>
<data name="LblHardPity.Text" xml:space="preserve">
<value>Жест. Гарант</value>
<value>Полный гарант</value>
</data>
<data name="NUDEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>287, 174</value>
@@ -270,7 +270,7 @@
<value>77, 17</value>
</data>
<data name="LblBasePurpleWeight.Text" xml:space="preserve">
<value>4 звездный</value>
<value>4-звездочный</value>
</data>
<data name="CmbBannerType.Items" xml:space="preserve">
<value>Стандартная Молитва</value>
@@ -285,7 +285,7 @@
<value>101, 17</value>
</data>
<data name="LblSortIdTip.Text" xml:space="preserve">
<value>Показать заказ</value>
<value>Показать порядок</value>
</data>
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>18, 87</value>
@@ -330,7 +330,7 @@
<value>Переплетающиеся</value>
</data>
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>Баннеп</value>
<value>Баннер</value>
</data>
<data name="GrpPurplePool.Text" xml:space="preserve">
<value>4 звёздочный пул</value>
@@ -351,9 +351,9 @@
<value>85, 23</value>
</data>
<data name="BtnParse.Text" xml:space="preserve">
<value>Загр.Json</value>
<value>Загр. Json</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Редактор баннеров Gacha</value>
<value>Редактор баннеров</value>
</data>
</root>

View File

@@ -30,6 +30,10 @@ namespace GrasscutterTools.Forms
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGachaBannerEditor2));
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.GrpBannerValues = new System.Windows.Forms.GroupBox();
this.ChkAutoStripRateUpFromFallback = new System.Windows.Forms.CheckBox();
this.LblOptions = new System.Windows.Forms.Label();
@@ -84,6 +88,8 @@ namespace GrasscutterTools.Forms
this.TxtPoolWeight5 = new System.Windows.Forms.TextBox();
this.LblPoolWeight4 = new System.Windows.Forms.Label();
this.LblPoolWeight5 = new System.Windows.Forms.Label();
this.GrpWeightChart = new System.Windows.Forms.GroupBox();
this.ChartWeights = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.GrpBannerValues.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDEventChance4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDEventChance5)).BeginInit();
@@ -95,6 +101,8 @@ namespace GrasscutterTools.Forms
this.GrpJson.SuspendLayout();
this.GrpWeights.SuspendLayout();
this.GrpBalance.SuspendLayout();
this.GrpWeightChart.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).BeginInit();
this.SuspendLayout();
//
// GrpBannerValues
@@ -369,8 +377,7 @@ namespace GrasscutterTools.Forms
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups1"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups2"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups3"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups4"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups5")))});
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups4")))});
this.ListFallbackItems.HideSelection = false;
this.ListFallbackItems.Name = "ListFallbackItems";
this.ListFallbackItems.UseCompatibleStateImageBehavior = false;
@@ -513,10 +520,51 @@ namespace GrasscutterTools.Forms
resources.ApplyResources(this.LblPoolWeight5, "LblPoolWeight5");
this.LblPoolWeight5.Name = "LblPoolWeight5";
//
// GrpWeightChart
//
resources.ApplyResources(this.GrpWeightChart, "GrpWeightChart");
this.GrpWeightChart.Controls.Add(this.ChartWeights);
this.GrpWeightChart.Name = "GrpWeightChart";
this.GrpWeightChart.TabStop = false;
//
// ChartWeights
//
resources.ApplyResources(this.ChartWeights, "ChartWeights");
chartArea1.AxisX.Minimum = 0D;
chartArea1.AxisY.Maximum = 100D;
chartArea1.AxisY.Minimum = 0D;
chartArea1.AxisY.Title = "%";
chartArea1.Name = "ChartArea1";
this.ChartWeights.ChartAreas.Add(chartArea1);
legend1.Name = "Legend1";
this.ChartWeights.Legends.Add(legend1);
this.ChartWeights.Name = "ChartWeights";
series1.ChartArea = "ChartArea1";
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series1.Color = System.Drawing.Color.OrangeRed;
series1.Label = "(#VALX, #VAL)";
series1.Legend = "Legend1";
series1.LegendText = "5*";
series1.Name = "SeriesWeight5";
series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
series2.ChartArea = "ChartArea1";
series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series2.Color = System.Drawing.Color.Purple;
series2.Label = "(#VALX, #VAL)";
series2.Legend = "Legend1";
series2.LegendText = "4*";
series2.Name = "SeriesWeight4";
series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series2.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
this.ChartWeights.Series.Add(series1);
this.ChartWeights.Series.Add(series2);
//
// FormGachaBannerEditor2
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.GrpWeightChart);
this.Controls.Add(this.GrpBalance);
this.Controls.Add(this.GrpWeights);
this.Controls.Add(this.GrpJson);
@@ -540,6 +588,8 @@ namespace GrasscutterTools.Forms
this.GrpWeights.PerformLayout();
this.GrpBalance.ResumeLayout(false);
this.GrpBalance.PerformLayout();
this.GrpWeightChart.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).EndInit();
this.ResumeLayout(false);
}
@@ -599,5 +649,7 @@ namespace GrasscutterTools.Forms
private System.Windows.Forms.CheckBox ChkRemoveC6FormPool;
private System.Windows.Forms.CheckBox ChkAutoStripRateUpFromFallback;
private System.Windows.Forms.Label LblOptions;
private System.Windows.Forms.GroupBox GrpWeightChart;
private System.Windows.Forms.DataVisualization.Charting.Chart ChartWeights;
}
}

View File

@@ -19,10 +19,10 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Gacha;
@@ -72,16 +72,13 @@ namespace GrasscutterTools.Forms
ListFallbackItems.BeginUpdate();
var a5 = ListFallbackItems.Groups["GroupA5"];
var a4 = ListFallbackItems.Groups["GroupA4"];
var a3 = ListFallbackItems.Groups["GroupA3"];
var w5 = ListFallbackItems.Groups["GroupW5"];
var w4 = ListFallbackItems.Groups["GroupW4"];
var w3 = ListFallbackItems.Groups["GroupW3"];
var avatars = GetAvatarsByColor("yellow")
var avatars = GetAvatarsByColor("5")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a5) { ForeColor = Color.OrangeRed })
.Concat(GetAvatarsByColor("purple")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a4) { ForeColor = Color.Purple }))
.Concat(GetAvatarsByColor("blue")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a3) { ForeColor = Color.Blue }));
.Concat(GetAvatarsByColor("4")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a4) { ForeColor = Color.Purple }));
var weapons = GetWeaponsByColor("yellow")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w5) { ForeColor = Color.OrangeRed })
.Concat(GetWeaponsByColor("purple")
@@ -96,9 +93,9 @@ namespace GrasscutterTools.Forms
var ua4 = ListUpItems.Groups["GroupUpA4"];
var uw5 = ListUpItems.Groups["GroupUpW5"];
var uw4 = ListUpItems.Groups["GroupUpW4"];
var upAvatars = GetAvatarsByColor("yellow")
var upAvatars = GetAvatarsByColor("5")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua5) { ForeColor = Color.OrangeRed })
.Concat(GetAvatarsByColor("purple")
.Concat(GetAvatarsByColor("4")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua4) { ForeColor = Color.Purple }));
var upWeapons = GetWeaponsByColor("yellow")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, uw5) { ForeColor = Color.OrangeRed })
@@ -184,6 +181,15 @@ namespace GrasscutterTools.Forms
TxtWeight4.Text = '[' + string.Join(", ", SelectWeights(banner.Weights4).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
TxtPoolWeight5.Text = '[' + string.Join(", ", SelectWeights(banner.PoolBalanceWeights5).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
TxtPoolWeight4.Text = '[' + string.Join(", ", SelectWeights(banner.PoolBalanceWeights4).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
ChartWeights.SuspendLayout();
ChartWeights.Series[0].Points.Clear();
foreach (var w in SelectWeights(banner.Weights5))
ChartWeights.Series[0].Points.AddXY(w.Count, w.Weight / 100.0);
ChartWeights.Series[1].Points.Clear();
foreach (var w in SelectWeights(banner.Weights4))
ChartWeights.Series[1].Points.AddXY(w.Count, w.Weight / 100.0);
ChartWeights.ResumeLayout();
}
private IEnumerable<GachaWeight> SelectWeights(int[,] weights)
@@ -296,6 +302,7 @@ namespace GrasscutterTools.Forms
var json = JsonConvert.SerializeObject(banner);
json = json.Replace(",\"", ",\r\n \"").Insert(1, "\r\n ");
TxtJson.Text = json.Insert(json.Length-1, "\r\n");
ShowBanner(banner);
}
}
catch (Exception ex)

View File

@@ -303,16 +303,6 @@
</value>
</data>
<data name="ListFallbackItems.Groups4" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA0zLXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBMws=
</value>
</data>
<data name="ListFallbackItems.Groups5" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
@@ -372,7 +362,7 @@
<value>Gen Json</value>
</data>
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
<value>209, 512</value>
<value>409, 201</value>
</data>
<data name="BtnParse.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
@@ -431,6 +421,9 @@
<data name="LblPoolWeight5.Text" xml:space="preserve">
<value>Pool Weight 5</value>
</data>
<data name="GrpWeightChart.Text" xml:space="preserve">
<value>Weight Chart</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Gacha Banner Editor</value>
</data>

View File

@@ -137,6 +137,9 @@
<data name="&gt;&gt;RbCostItem223.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;BtnGen.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -156,9 +159,6 @@
<data name="LblSortId.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkWeightHelp.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblEventChance5.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
@@ -201,6 +201,9 @@
<data name="LnkWeightHelp.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="ChartWeights.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;LblEventChance5Tip.Name" xml:space="preserve">
<value>LblEventChance5Tip</value>
</data>
@@ -214,14 +217,11 @@
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpJson.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;ColUpName.Name" xml:space="preserve">
<value>ColUpName</value>
</data>
<data name="&gt;&gt;LblEventChance4.Name" xml:space="preserve">
<value>LblEventChance4</value>
</data>
<data name="&gt;&gt;ChkAutoStripRateUpFromFallback.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
@@ -232,7 +232,7 @@
<value>True</value>
</data>
<data name="&gt;&gt;GrpBannerValues.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="LblEventChance5Tip.Text" xml:space="preserve">
<value>%</value>
@@ -240,15 +240,15 @@
<data name="LblCostItem.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="GrpWeightChart.Text" xml:space="preserve">
<value>权重图表</value>
</data>
<data name="&gt;&gt;GrpJson.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="ListFallbackItems.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="LblWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 17</value>
</data>
<data name="&gt;&gt;GrpBannerValues.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -274,9 +274,6 @@
<data name="ListUpItems.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LnkWeightHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;LblGachaType.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -313,15 +310,8 @@
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
</value>
</data>
<data name="ListFallbackItems.Groups5" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAoz5pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
</value>
<data name="ChkAutoStripRateUpFromFallback.Location" type="System.Drawing.Point, System.Drawing">
<value>217, 260</value>
</data>
<data name="CmbBannerType.Items1" xml:space="preserve">
<value>限时角色祈愿池</value>
@@ -338,8 +328,8 @@
<data name="GrpBalance.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 453</value>
</data>
<data name="&gt;&gt;LblEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;GrpWeightChart.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="RbCostItem223.Text" xml:space="preserve">
<value>纠缠之缘</value>
@@ -368,9 +358,6 @@
<data name="&gt;&gt;NUDEventChance4.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="GrpBalance.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblEventChance4Tip.TabIndex" type="System.Int32, mscorlib">
<value>89</value>
</data>
@@ -401,11 +388,14 @@
<data name="GrpUpPool.Text" xml:space="preserve">
<value>UP池</value>
</data>
<data name="TxtWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 23</value>
</data>
<data name="BtnParse.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="DTPBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
<data name="&gt;&gt;LblOptions.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="RbCostItem224.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 21</value>
@@ -422,8 +412,8 @@
<data name="BtnParse.Text" xml:space="preserve">
<value>解析Json</value>
</data>
<data name="&gt;&gt;LblPoolWeight4.Parent" xml:space="preserve">
<value>GrpBalance</value>
<data name="LblScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>53</value>
</data>
<data name="&gt;&gt;LblWeight4.Parent" xml:space="preserve">
<value>GrpWeights</value>
@@ -441,7 +431,7 @@
<value>0</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>984, 561</value>
<value>1184, 561</value>
</data>
<data name="&gt;&gt;BtnParse.Parent" xml:space="preserve">
<value>GrpJson</value>
@@ -449,8 +439,8 @@
<data name="&gt;&gt;GrpBalance.Name" xml:space="preserve">
<value>GrpBalance</value>
</data>
<data name="&gt;&gt;TxtWeight4.Parent" xml:space="preserve">
<value>GrpWeights</value>
<data name="&gt;&gt;LblWeight5.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;LblEventChance5Tip.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
@@ -461,8 +451,8 @@
<data name="TxtJson.WordWrap" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="CmbPrefab.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 115</value>
</data>
<data name="LblWeight4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -509,17 +499,17 @@
<data name="GrpBalance.Text" xml:space="preserve">
<value>角色和武器平衡机制(仅混合池有效)</value>
</data>
<data name="LblPoolWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 32</value>
</data>
<data name="&gt;&gt;LblBeginTime.ZOrder" xml:space="preserve">
<value>20</value>
</data>
<data name="&gt;&gt;NUDSortId.Name" xml:space="preserve">
<value>NUDSortId</value>
</data>
<data name="LblBeginTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;LblEventChance5Tip.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;TxtPoolWeight5.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ListUpItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
@@ -560,8 +550,11 @@
<data name="&gt;&gt;ColFallbackId.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="LblScheduleIdTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;TxtWeight4.Name" xml:space="preserve">
<value>TxtWeight4</value>
</data>
<data name="&gt;&gt;ChartWeights.Name" xml:space="preserve">
<value>ChartWeights</value>
</data>
<data name="&gt;&gt;RbCostItem224.ZOrder" xml:space="preserve">
<value>26</value>
@@ -578,14 +571,11 @@
<data name="LnkOpenOldEditor.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>53</value>
</data>
<data name="BtnGen.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;LblPoolWeight5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="ChartWeights.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="ColFallbackName.Width" type="System.Int32, mscorlib">
<value>110</value>
@@ -638,9 +628,6 @@
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
</data>
<data name="GrpWeights.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
@@ -648,13 +635,13 @@
<value>3</value>
</data>
<data name="&gt;&gt;GrpWeights.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="&gt;&gt;ListFallbackItems.Name" xml:space="preserve">
<value>ListFallbackItems</value>
</data>
<data name="GrpJson.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 541</value>
<value>500, 230</value>
</data>
<data name="LnkOpenOldEditor.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 309</value>
@@ -662,8 +649,11 @@
<data name="&gt;&gt;LblEndTime.Name" xml:space="preserve">
<value>LblEndTime</value>
</data>
<data name="&gt;&gt;ChkRemoveC6FormPool.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="GrpWeightChart.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="LblBannerType.TabIndex" type="System.Int32, mscorlib">
<value>59</value>
</data>
<data name="&gt;&gt;BtnGen.Name" xml:space="preserve">
<value>BtnGen</value>
@@ -672,7 +662,7 @@
<value>5</value>
</data>
<data name="GrpJson.Text" xml:space="preserve">
<value>Json</value>
<value>Json - (./Gresscutter/data/banners.json)</value>
</data>
<data name="&gt;&gt;LnkWeightHelp.ZOrder" xml:space="preserve">
<value>0</value>
@@ -707,8 +697,8 @@
<data name="&gt;&gt;LblCostItem.ZOrder" xml:space="preserve">
<value>27</value>
</data>
<data name="&gt;&gt;LblEventChance4Tip.Name" xml:space="preserve">
<value>LblEventChance4Tip</value>
<data name="&gt;&gt;LblEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtJson.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -719,8 +709,8 @@
<data name="&gt;&gt;LblSortId.Name" xml:space="preserve">
<value>LblSortId</value>
</data>
<data name="LblGachaTypeTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;TxtWeight4.Parent" xml:space="preserve">
<value>GrpWeights</value>
</data>
<data name="ColFallbackId.Width" type="System.Int32, mscorlib">
<value>65</value>
@@ -731,11 +721,14 @@
<data name="LblPoolWeight4.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;GrpWeightChart.Name" xml:space="preserve">
<value>GrpWeightChart</value>
</data>
<data name="ColUpName.Text" xml:space="preserve">
<value>Name</value>
</data>
<data name="GrpBannerValues.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left</value>
<data name="NUDSortId.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="&gt;&gt;LblScheduleIdTip.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
@@ -749,10 +742,16 @@
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAoz5pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBMws=
AwAAAAoz5pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;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="NUDScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
@@ -792,15 +791,8 @@
<data name="GrpFallbackPool.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 305</value>
</data>
<data name="ListUpItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
</value>
<data name="&gt;&gt;LblEventChance4.Name" xml:space="preserve">
<value>LblEventChance4</value>
</data>
<data name="NUDEventChance4.Location" type="System.Drawing.Point, System.Drawing">
<value>302, 231</value>
@@ -829,8 +821,11 @@
<data name="GrpWeights.Size" type="System.Drawing.Size, System.Drawing">
<value>440, 100</value>
</data>
<data name="LblEventChance4.Text" xml:space="preserve">
<value>4星活动爆率</value>
<data name="&gt;&gt;LblEventChance4Tip.Name" xml:space="preserve">
<value>LblEventChance4Tip</value>
</data>
<data name="&gt;&gt;LblWeight4.Name" xml:space="preserve">
<value>LblWeight4</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -853,6 +848,9 @@
<data name="&gt;&gt;ListFallbackItems.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;LnkOpenOldEditor.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="&gt;&gt;NUDGachaType.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
@@ -874,8 +872,11 @@
<data name="&gt;&gt;GrpUpPool.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="GrpWeightChart.Size" type="System.Drawing.Size, System.Drawing">
<value>500, 302</value>
</data>
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 512</value>
<value>419, 201</value>
</data>
<data name="LblWeight5.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -886,9 +887,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>90</value>
</data>
@@ -901,11 +899,8 @@
<data name="LblGachaType.Text" xml:space="preserve">
<value>GachaType</value>
</data>
<data name="LblWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 17</value>
</data>
<data name="GrpFallbackPool.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
<value>Top, Bottom, Left</value>
</data>
<data name="CmbBannerType.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -928,12 +923,19 @@
<data name="&gt;&gt;LnkOpenOldEditor.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ListUpItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
</value>
</data>
<data name="LblPoolWeight4.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="CmbPrefab.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 115</value>
</data>
<data name="NUDSortId.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 202</value>
</data>
@@ -952,17 +954,14 @@
<data name="&gt;&gt;LblEventChance5.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblWeight4.Name" xml:space="preserve">
<value>LblWeight4</value>
</data>
<data name="TxtJson.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 487</value>
<value>488, 176</value>
</data>
<data name="ColUpId.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="&gt;&gt;LnkOpenOldEditor.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
<data name="LnkWeightHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="TxtJson.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -976,8 +975,11 @@
<data name="LblEndTime.TabIndex" type="System.Int32, mscorlib">
<value>74</value>
</data>
<data name="&gt;&gt;LblEventChance5Tip.ZOrder" xml:space="preserve">
<value>8</value>
<data name="GrpWeightChart.Location" type="System.Drawing.Point, System.Drawing">
<value>674, 248</value>
</data>
<data name="&gt;&gt;TxtPoolWeight5.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblPrefabPath.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
@@ -991,11 +993,11 @@
<data name="&gt;&gt;NUDScheduleId.ZOrder" xml:space="preserve">
<value>21</value>
</data>
<data name="NUDGachaType.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<data name="&gt;&gt;LblPoolWeight4.Parent" xml:space="preserve">
<value>GrpBalance</value>
</data>
<data name="NUDSortId.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
<data name="LblPrefabPath.TabIndex" type="System.Int32, mscorlib">
<value>61</value>
</data>
<data name="NUDScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 55</value>
@@ -1006,8 +1008,8 @@
<data name="&gt;&gt;LblScheduleIdTip.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtWeight4.Name" xml:space="preserve">
<value>TxtWeight4</value>
<data name="LblScheduleIdTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblEventChance4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -1054,6 +1056,9 @@
<data name="&gt;&gt;LblSortId.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="ChartWeights.Text" xml:space="preserve">
<value>chart1</value>
</data>
<data name="GrpJson.Location" type="System.Drawing.Point, System.Drawing">
<value>674, 12</value>
</data>
@@ -1075,9 +1080,6 @@
<data name="&gt;&gt;LblSortIdTip.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
</data>
<data name="CmbBannerType.Items2" xml:space="preserve">
<value>限时武器祈愿池</value>
</data>
<data name="&gt;&gt;NUDEventChance5.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -1088,7 +1090,7 @@
<value>基础池</value>
</data>
<data name="&gt;&gt;GrpFallbackPool.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="LblScheduleIdTip.Text" xml:space="preserve">
<value>ID要求唯一</value>
@@ -1099,8 +1101,8 @@
<data name="&gt;&gt;LblGachaType.Name" xml:space="preserve">
<value>LblGachaType</value>
</data>
<data name="&gt;&gt;BtnGen.ZOrder" xml:space="preserve">
<value>0</value>
<data name="&gt;&gt;LblPoolWeight5.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="LblSortIdTip.Location" type="System.Drawing.Point, System.Drawing">
<value>218, 204</value>
@@ -1114,11 +1116,8 @@
<data name="LblPrefabPath.Text" xml:space="preserve">
<value>预制</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Location" type="System.Drawing.Point, System.Drawing">
<value>217, 260</value>
</data>
<data name="&gt;&gt;GrpBalance.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="&gt;&gt;DTPEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -1129,8 +1128,8 @@
<data name="LblEndTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ChkRemoveC6FormPool.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 21</value>
<data name="LnkWeightHelp.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;TxtWeight5.Name" xml:space="preserve">
<value>TxtWeight5</value>
@@ -1144,21 +1143,21 @@
<data name="LblOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;LblScheduleIdTip.Name" xml:space="preserve">
<value>LblScheduleIdTip</value>
<data name="LblWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 17</value>
</data>
<data name="LblSortId.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;GrpWeightChart.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>50, 176</value>
</data>
<data name="&gt;&gt;LblEventChance4.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="&gt;&gt;GrpWeights.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="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
@@ -1180,11 +1179,11 @@
<data name="&gt;&gt;NUDGachaType.Name" xml:space="preserve">
<value>NUDGachaType</value>
</data>
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
<data name="&gt;&gt;LblScheduleIdTip.Name" xml:space="preserve">
<value>LblScheduleIdTip</value>
</data>
<data name="&gt;&gt;CmbPrefab.Name" xml:space="preserve">
<value>CmbPrefab</value>
<data name="&gt;&gt;ChartWeights.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;LblEndTime.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
@@ -1192,6 +1191,9 @@
<data name="&gt;&gt;GrpBalance.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblCostItem.Location" type="System.Drawing.Point, System.Drawing">
<value>50, 148</value>
</data>
<data name="&gt;&gt;TxtJson.Parent" xml:space="preserve">
<value>GrpJson</value>
</data>
@@ -1201,14 +1203,14 @@
<data name="LblPoolWeight4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="GrpUpPool.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
<data name="ChkRemoveC6FormPool.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 21</value>
</data>
<data name="LblCostItem.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="BtnGen.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 512</value>
<data name="&gt;&gt;NUDScheduleId.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtWeight4.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -1228,8 +1230,8 @@
<data name="&gt;&gt;GrpUpPool.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LnkWeightHelp.Parent" xml:space="preserve">
<value>GrpWeights</value>
<data name="LblEventChance4.Text" xml:space="preserve">
<value>4星活动爆率</value>
</data>
<data name="LblEventChance4.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -1270,8 +1272,8 @@
<data name="GrpBalance.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;ColFallbackName.Name" xml:space="preserve">
<value>ColFallbackName</value>
<data name="&gt;&gt;BtnGen.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;GrpUpPool.Name" xml:space="preserve">
<value>GrpUpPool</value>
@@ -1288,8 +1290,8 @@
<data name="&gt;&gt;GrpWeights.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblCostItem.Location" type="System.Drawing.Point, System.Drawing">
<value>50, 148</value>
<data name="&gt;&gt;ColFallbackName.Name" xml:space="preserve">
<value>ColFallbackName</value>
</data>
<data name="&gt;&gt;LblGachaTypeTip.Name" xml:space="preserve">
<value>LblGachaTypeTip</value>
@@ -1303,8 +1305,8 @@
<data name="LblPoolWeight4.Text" xml:space="preserve">
<value>4星池权重</value>
</data>
<data name="&gt;&gt;TxtPoolWeight5.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="BtnGen.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 201</value>
</data>
<data name="LblScheduleIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>69, 17</value>
@@ -1330,14 +1332,17 @@
<data name="&gt;&gt;LblEventChance5Tip.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="ChartWeights.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;ListFallbackItems.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TxtJson.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="RbCostItem224.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<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>
@@ -1345,6 +1350,9 @@
<data name="LnkOpenOldEditor.TabIndex" type="System.Int32, mscorlib">
<value>20</value>
</data>
<data name="LblGachaTypeTip.TabIndex" type="System.Int32, mscorlib">
<value>51</value>
</data>
<data name="&gt;&gt;TxtWeight4.ZOrder" xml:space="preserve">
<value>1</value>
</data>
@@ -1375,8 +1383,8 @@
<data name="BtnGen.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;TxtPoolWeight5.ZOrder" xml:space="preserve">
<value>1</value>
<data name="CmbBannerType.Items2" xml:space="preserve">
<value>限时武器祈愿池</value>
</data>
<data name="&gt;&gt;GrpFallbackPool.Name" xml:space="preserve">
<value>GrpFallbackPool</value>
@@ -1384,6 +1392,12 @@
<data name="LblBannerType.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="NUDGachaType.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;GrpWeightChart.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblEventChance5.ZOrder" xml:space="preserve">
<value>13</value>
</data>
@@ -1393,6 +1407,9 @@
<data name="&gt;&gt;CmbBannerType.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="RbCostItem224.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="LblBannerType.Text" xml:space="preserve">
<value>奖池类型</value>
</data>
@@ -1403,7 +1420,7 @@
<value>LblPrefabPath</value>
</data>
<data name="&gt;&gt;GrpUpPool.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="&gt;&gt;CmbBannerType.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
@@ -1414,11 +1431,14 @@
<data name="LblBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>72</value>
</data>
<data name="&gt;&gt;GrpBalance.Type" xml:space="preserve">
<data name="&gt;&gt;GrpWeights.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.TabIndex" type="System.Int32, mscorlib">
<value>51</value>
<data name="LblGachaTypeTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ListFallbackItems.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LblPoolWeight4.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 61</value>
@@ -1426,8 +1446,11 @@
<data name="&gt;&gt;LblPoolWeight4.Name" xml:space="preserve">
<value>LblPoolWeight4</value>
</data>
<data name="TxtWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 23</value>
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="ChartWeights.Size" type="System.Drawing.Size, System.Drawing">
<value>494, 280</value>
</data>
<data name="CmbBannerType.Items" xml:space="preserve">
<value>常驻池</value>
@@ -1448,7 +1471,7 @@
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>1000, 600</value>
<value>1200, 600</value>
</data>
<data name="LblEventChance5.Location" type="System.Drawing.Point, System.Drawing">
<value>31, 233</value>
@@ -1456,17 +1479,23 @@
<data name="&gt;&gt;ColFallbackId.Name" xml:space="preserve">
<value>ColFallbackId</value>
</data>
<data name="&gt;&gt;ChartWeights.Type" xml:space="preserve">
<value>System.Windows.Forms.DataVisualization.Charting.Chart, System.Windows.Forms.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</value>
</data>
<data name="LblSortId.TabIndex" type="System.Int32, mscorlib">
<value>75</value>
</data>
<data name="&gt;&gt;LblBannerType.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="DTPBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;ChkAutoStripRateUpFromFallback.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="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;LnkWeightHelp.Parent" xml:space="preserve">
<value>GrpWeights</value>
</data>
<data name="LblEventChance4.Location" type="System.Drawing.Point, System.Drawing">
<value>221, 233</value>
@@ -1480,15 +1509,15 @@
<data name="&gt;&gt;LblWeight5.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="LblPrefabPath.TabIndex" type="System.Int32, mscorlib">
<value>61</value>
</data>
<data name="&gt;&gt;RbCostItem223.ZOrder" xml:space="preserve">
<value>29</value>
</data>
<data name="&gt;&gt;LblWeight5.Parent" xml:space="preserve">
<value>GrpWeights</value>
</data>
<data name="LblBeginTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;GrpFallbackPool.Parent" xml:space="preserve">
<value>$this</value>
</data>
@@ -1513,6 +1542,9 @@
<data name="RbCostItem223.Location" type="System.Drawing.Point, System.Drawing">
<value>192, 146</value>
</data>
<data name="&gt;&gt;ChartWeights.Parent" xml:space="preserve">
<value>GrpWeightChart</value>
</data>
<data name="RbCostItem223.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -1537,17 +1569,17 @@
<data name="&gt;&gt;TxtPoolWeight5.Name" xml:space="preserve">
<value>TxtPoolWeight5</value>
</data>
<data name="GrpWeightChart.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>卡池编辑器</value>
</data>
<data name="NUDEventChance4.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 23</value>
</data>
<data name="&gt;&gt;LblWeight5.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;LblOptions.Parent" xml:space="preserve">
<value>GrpBannerValues</value>
<data name="&gt;&gt;CmbPrefab.Name" xml:space="preserve">
<value>CmbPrefab</value>
</data>
<data name="GrpBannerValues.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 12</value>
@@ -1567,8 +1599,8 @@
<data name="LblCostItem.TabIndex" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="LblBannerType.TabIndex" type="System.Int32, mscorlib">
<value>59</value>
<data name="LblWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 17</value>
</data>
<data name="LblPoolWeight5.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@@ -1591,7 +1623,4 @@
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>zh-TW</value>
</metadata>
</root>

View File

@@ -233,10 +233,10 @@
<value>Молитва события с оружием</value>
</data>
<data name="LblSortIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 17</value>
<value>121, 17</value>
</data>
<data name="LblSortIdTip.Text" xml:space="preserve">
<value>Показать заказ</value>
<value>Показать порядок</value>
</data>
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>18, 87</value>
@@ -324,16 +324,6 @@
</value>
</data>
<data name="ListFallbackItems.Groups4" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA0zLXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBMws=
</value>
</data>
<data name="ListFallbackItems.Groups5" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
@@ -396,13 +386,13 @@
<value>Сген. Json</value>
</data>
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
<value>209, 512</value>
<value>409, 201</value>
</data>
<data name="BtnParse.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
</data>
<data name="BtnParse.Text" xml:space="preserve">
<value>Загр.Json</value>
<value>Загр. Json</value>
</data>
<data name="LnkWeightHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>375, 0</value>
@@ -455,6 +445,9 @@
<data name="GrpBalance.Text" xml:space="preserve">
<value>Баланс персонажа и оружия (работают только смешанные пулы)</value>
</data>
<data name="GrpWeightChart.Text" xml:space="preserve">
<value>Таблица веса</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Редактор баннеров Gacha</value>
</data>

View File

@@ -165,6 +165,9 @@
<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
@@ -211,23 +214,10 @@
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAoz5pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBMws=
</value>
</data>
<data name="ListFallbackItems.Groups5" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAoz5pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
AwAAAAoz5pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
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
@@ -268,6 +258,9 @@
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
</value>
</data>
<data name="GrpWeights.Text" xml:space="preserve">
<value>卡池權重與保底機制</value>
</data>
<data name="LnkWeightHelp.Text" xml:space="preserve">
<value>幫助</value>
</data>
@@ -277,8 +270,8 @@
<data name="LblWeight5.Text" xml:space="preserve">
<value>5星權重</value>
</data>
<data name="GrpWeights.Text" xml:space="preserve">
<value>卡池權重與保底機制</value>
<data name="GrpBalance.Text" xml:space="preserve">
<value>角色和武器平衡機制(僅混合池有效)</value>
</data>
<data name="LblPoolWeight4.Text" xml:space="preserve">
<value>4星池權重</value>
@@ -286,8 +279,8 @@
<data name="LblPoolWeight5.Text" xml:space="preserve">
<value>5星池權重</value>
</data>
<data name="GrpBalance.Text" xml:space="preserve">
<value>角色和武器平衡機制(僅混合池有效)</value>
<data name="GrpWeightChart.Text" xml:space="preserve">
<value>權重圖表</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>卡池編輯器</value>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -127,11 +127,35 @@
<data name="ChkAutoCopy.Text" xml:space="preserve">
<value>Auto</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command - [Ctrl] Autorun - [|] Split multiple commands</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Run(F5)</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command (Press and hold Ctrl to run automatically)</value>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>Remote</value>
</data>
<data name="LnkInventoryKamera.Text" xml:space="preserve">
<value>InventoryKamera</value>
</data>
<data name="LblGOODHelp.Text" xml:space="preserve">
<value>Come and import your official server archive into GC!</value>
</data>
<data name="ButtonOpenGOODImport.Text" xml:space="preserve">
<value>Import GOOD</value>
</data>
<data name="LblHostTip.Location" type="System.Drawing.Point, System.Drawing">
<value>108, 16</value>
</data>
<data name="LblHostTip.Size" type="System.Drawing.Size, System.Drawing">
<value>377, 17</value>
</data>
<data name="LblHostTip.Text" xml:space="preserve">
<value>Please be sure https:// or http:// is included with the IP address</value>
</data>
<data name="GrpServerStatus.Text" xml:space="preserve">
<value>Server status</value>
</data>
<data name="LnkOpenCommandLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 63</value>
@@ -169,8 +193,11 @@
<data name="LblPlayerCountLabel.Text" xml:space="preserve">
<value>Player count</value>
</data>
<data name="GrpServerStatus.Text" xml:space="preserve">
<value>Server status</value>
<data name="GrpRemoteCommand.Text" xml:space="preserve">
<value>Remote Cell</value>
</data>
<data name="TPPlayerCheck.Text" xml:space="preserve">
<value>Player</value>
</data>
<data name="LnkRCHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 17</value>
@@ -190,8 +217,8 @@
<data name="BtnSendVerificationCode.Text" xml:space="preserve">
<value>Send Code</value>
</data>
<data name="TPPlayerCheck.Text" xml:space="preserve">
<value>Player</value>
<data name="TPConsoleCheck.Text" xml:space="preserve">
<value>Console</value>
</data>
<data name="BtnConsoleConnect.Text" xml:space="preserve">
<value>Connect</value>
@@ -199,20 +226,14 @@
<data name="LblConsoleTip.Text" xml:space="preserve">
<value>Note that normal commands in the console state must specify the target (set include UID)</value>
</data>
<data name="TPConsoleCheck.Text" xml:space="preserve">
<value>Console</value>
</data>
<data name="GrpRemoteCommand.Text" xml:space="preserve">
<value>Remote Cell</value>
</data>
<data name="TxtHost.Location" type="System.Drawing.Point, System.Drawing">
<value>86, 36</value>
<value>136, 36</value>
</data>
<data name="TxtHost.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
<value>175, 23</value>
</data>
<data name="BtnQueryServerStatus.Location" type="System.Drawing.Point, System.Drawing">
<value>292, 36</value>
<value>317, 36</value>
</data>
<data name="BtnQueryServerStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 23</value>
@@ -221,23 +242,31 @@
<value>Query</value>
</data>
<data name="LblHost.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 17</value>
<value>60, 17</value>
</data>
<data name="LblHost.Text" xml:space="preserve">
<value>Host</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>Remote</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 17</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>Grasscutter Tools</value>
<value>Server IP</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>About</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>387, 102</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>Grasscutter Tools
This is a free and open source project.
If you think this is helpful to you, you can give me a free Star.
If there is a problem with the command generation,
or there is a new feature request, you can file an issue on Github.</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>Manage</value>
</data>
<data name="GrpBanPlayer.Text" xml:space="preserve">
<value>Ban</value>
</data>
<data name="BtnUnban.Text" xml:space="preserve">
<value>Unban</value>
</data>
@@ -256,8 +285,8 @@
<data name="LblBanUID.Text" xml:space="preserve">
<value>UID</value>
</data>
<data name="GrpBanPlayer.Text" xml:space="preserve">
<value>Ban Management</value>
<data name="GrpAccount.Text" xml:space="preserve">
<value>Account</value>
</data>
<data name="ChkAccountSetUid.Size" type="System.Drawing.Size, System.Drawing">
<value>49, 21</value>
@@ -292,20 +321,32 @@
<data name="TxtAccountUserName.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 23</value>
</data>
<data name="GrpAccount.Text" xml:space="preserve">
<value>Account Management</value>
<data name="GrpPermission.Text" xml:space="preserve">
<value>Permissions</value>
</data>
<data name="CmbPerm.Location" type="System.Drawing.Point, System.Drawing">
<value>262, 21</value>
</data>
<data name="CmbPerm.Size" type="System.Drawing.Size, System.Drawing">
<value>138, 25</value>
</data>
<data name="BtnPermClear.Text" xml:space="preserve">
<value>Clear</value>
</data>
<data name="BtmPermRemove.Text" xml:space="preserve">
<value>Delete</value>
</data>
<data name="BtnPermList.Text" xml:space="preserve">
<value>List</value>
</data>
<data name="BtnPermAdd.Text" xml:space="preserve">
<value>Add</value>
</data>
<data name="LblPerm.Size" type="System.Drawing.Size, System.Drawing">
<value>38, 17</value>
<value>44, 17</value>
</data>
<data name="LblPerm.Text" xml:space="preserve">
<value>Perm</value>
<value>Perms</value>
</data>
<data name="LblPermUID.Location" type="System.Drawing.Point, System.Drawing">
<value>30, 25</value>
@@ -316,11 +357,8 @@
<data name="LblPermUID.Text" xml:space="preserve">
<value>UID</value>
</data>
<data name="GrpPermission.Text" xml:space="preserve">
<value>Permission Management</value>
</data>
<data name="TPManage.Text" xml:space="preserve">
<value>Manage</value>
<data name="TPScene.Text" xml:space="preserve">
<value>Scene</value>
</data>
<data name="ChkIncludeSceneId.Location" type="System.Drawing.Point, System.Drawing">
<value>91, 213</value>
@@ -331,21 +369,6 @@
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>Include scene Id</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblTp.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 89</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>337, 90</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>Teleporting
Tip: You can quickly teleport through the 'fishing hook' mark on the minimap in the game
In the command, you can use ~ to indicate the current position, and ~100 to indicate the relative current 100</value>
</data>
<data name="LblTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 184</value>
</data>
@@ -382,6 +405,7 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<data name="LblClimateType.Text" xml:space="preserve">
<value>weather</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblSceneDescription.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@@ -392,8 +416,22 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<value>Scene control
Tip: Most of the scenes have no effect and cannot be entered.</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>Scene</value>
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblTp.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 89</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>337, 90</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>Teleporting
Tip: You can quickly teleport through the 'fishing hook' pin on the map in-game.
In the command, you can use ~ to indicate the current position, and ~N to indicate the relative current N</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Items</value>
</data>
<data name="LblClearGiveItemLogs.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
@@ -446,14 +484,17 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="LblGiveCommandDescription.Text" xml:space="preserve">
<value>Give item to player</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Items</value>
<data name="TPWeapon.Text" xml:space="preserve">
<value>Weapons</value>
</data>
<data name="BtnGiveAllWeapons.Text" xml:space="preserve">
<value>Give all Weapons</value>
</data>
<data name="LblWeaponDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
<value>86, 17</value>
</data>
<data name="LblWeaponDescription.Text" xml:space="preserve">
<value>Geive Weapon</value>
<value>Give Weapon</value>
</data>
<data name="LblWeaponRefinement.Location" type="System.Drawing.Point, System.Drawing">
<value>203, 218</value>
@@ -488,32 +529,47 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="NUDWeaponLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>147, 216</value>
</data>
<data name="TPWeapon.Text" xml:space="preserve">
<value>Weapon</value>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="LblResetStatsCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>126, 135</value>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>Constellation</value>
</data>
<data name="LblResetStatsCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 17</value>
<data name="LnkSetAllConst.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 17</value>
</data>
<data name="LblResetStatsCommand.Text" xml:space="preserve">
<value>When getting CEP</value>
<data name="LnkSetAllConst.Text" xml:space="preserve">
<value>Set all</value>
</data>
<data name="LblResetStatsTip.Location" type="System.Drawing.Point, System.Drawing">
<value>235, 135</value>
<data name="LnkSetConst.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 17</value>
</data>
<data name="LblResetStatsTip.Size" type="System.Drawing.Size, System.Drawing">
<value>243, 17</value>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>Set current</value>
</data>
<data name="LblResetStatsTip.Text" xml:space="preserve">
<value>the current character's stats will be reset</value>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>Stats</value>
</data>
<data name="BtnUnlockStat.Text" xml:space="preserve">
<value>Unlock</value>
</data>
<data name="BtnLockStat.Text" xml:space="preserve">
<value>Lock</value>
</data>
<data name="LblStatTip.Text" xml:space="preserve">
<value>Tip</value>
</data>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>Stats</value>
<data name="GrpTalentLevel.Text" xml:space="preserve">
<value>Talent Level</value>
</data>
<data name="LnkTalentAll.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 24</value>
</data>
<data name="LnkTalentAll.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
</data>
<data name="LnkTalentAll.Text" xml:space="preserve">
<value>All</value>
</data>
<data name="LnkTalentE.Location" type="System.Drawing.Point, System.Drawing">
<value>283, 24</value>
@@ -543,44 +599,50 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<value>NormalATK</value>
</data>
<data name="NUDTalentLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 23</value>
</data>
<data name="GrpTalentLevel.Text" xml:space="preserve">
<value>Talent Level</value>
</data>
<data name="LblStatsDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>179, 17</value>
</data>
<data name="LblStatsDescription.Text" xml:space="preserve">
<value>Set current active Avatar data</value>
</data>
<data name="TPStats.Text" xml:space="preserve">
<value>Stats</value>
<value>96, 23</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>Give All Char</value>
</data>
<data name="LblConstellationTip.Location" type="System.Drawing.Point, System.Drawing">
<value>379, 165</value>
</data>
<data name="LblConstellationTip.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 17</value>
</data>
<data name="LblConstellationTip.Text" xml:space="preserve">
<value>※Available in Give All Char only</value>
</data>
<data name="LblAvatarConstellation.Text" xml:space="preserve">
<value>Const.</value>
</data>
<data name="LblAvatar.Text" xml:space="preserve">
<value>Avatar</value>
<data name="LblAvatarLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 17</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>Level</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<data name="LblAvatarSkillLevelLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 17</value>
</data>
<data name="LblAvatarSkillLevelLabel.Text" xml:space="preserve">
<value>Skill level</value>
</data>
<data name="LblAvatar.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="LblAvatar.Text" xml:space="preserve">
<value>Avatar</value>
</data>
<data name="LblAvatarConstellation.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblAvatarConstellation.Text" xml:space="preserve">
<value>Const.</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Spawn</value>
</data>
<data name="ChkInfiniteHP.Location" type="System.Drawing.Point, System.Drawing">
<value>202, 217</value>
</data>
<data name="ChkInfiniteHP.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 21</value>
</data>
<data name="ChkInfiniteHP.Text" xml:space="preserve">
<value>Infinite HP</value>
</data>
<data name="LblClearSpawnLogs.Location" type="System.Drawing.Point, System.Drawing">
<value>181, 190</value>
</data>
<data name="LblClearSpawnLogs.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>
@@ -596,27 +658,9 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="GrpSpawnRecord.Text" xml:space="preserve">
<value>Records</value>
</data>
<data name="RbEntityAnimal.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 21</value>
</data>
<data name="RbEntityAnimal.Text" xml:space="preserve">
<value>Animal</value>
</data>
<data name="RbEntityMonster.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 21</value>
</data>
<data name="RbEntityMonster.Text" xml:space="preserve">
<value>Monster</value>
</data>
<data name="GrpEntityType.Text" xml:space="preserve">
<value>Class</value>
</data>
<data name="LblSpawnDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 17</value>
</data>
<data name="LblSpawnDescription.Text" xml:space="preserve">
<value>Spawn entity</value>
</data>
<data name="LblEntityAmount.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 17</value>
</data>
@@ -638,8 +682,11 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="NUDEntityLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 216</value>
</data>
<data name="TPSpawn.Text" xml:space="preserve">
<value>Spawn</value>
<data name="TPQuest.Text" xml:space="preserve">
<value>Quest</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>List Filter</value>
</data>
<data name="ChkQuestFilterTEST.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
@@ -659,9 +706,6 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
<value>Hidden</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>List Filter</value>
</data>
<data name="BtnFinishQuest.Text" xml:space="preserve">
<value>Finish</value>
</data>
@@ -671,10 +715,10 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="LblQuestDescription.Text" xml:space="preserve">
<value>Add or Finish Quest
Tip: Many quest require server-side scripting support
Therefore, the quest can be add and finish, but not necessarily can be work</value>
Therefore, the quest can be added and finished, but not necessarily work.</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>Quest</value>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Artifacts</value>
</data>
<data name="BtnAddSubAttr.Text" xml:space="preserve">
<value>+ Add</value>
@@ -686,7 +730,7 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>Part</value>
</data>
<data name="LblArtifactSet.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 11</value>
<value>112, 11</value>
</data>
<data name="LblArtifactSet.Size" type="System.Drawing.Size, System.Drawing">
<value>49, 17</value>
@@ -701,7 +745,7 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>X Clear</value>
</data>
<data name="LblArtifactLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>99, 41</value>
<value>124, 41</value>
</data>
<data name="LblArtifactLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 17</value>
@@ -710,7 +754,7 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>Level</value>
</data>
<data name="LblSubAttribution.Location" type="System.Drawing.Point, System.Drawing">
<value>80, 102</value>
<value>105, 102</value>
</data>
<data name="LblSubAttribution.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
@@ -719,7 +763,7 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>Sub Stat</value>
</data>
<data name="LblMainAttribution.Location" type="System.Drawing.Point, System.Drawing">
<value>73, 71</value>
<value>98, 71</value>
</data>
<data name="LblMainAttribution.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 17</value>
@@ -733,11 +777,11 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<data name="LblArtifactStars.Text" xml:space="preserve">
<value>Stars</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>Artifact</value>
<data name="TPCustom.Text" xml:space="preserve">
<value>Custom</value>
</data>
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>533, 216</value>
<value>583, 216</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
@@ -746,7 +790,7 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>Export</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>467, 216</value>
<value>517, 216</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
@@ -760,8 +804,11 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<data name="LblCustomName.Text" xml:space="preserve">
<value>Tag</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>List</value>
</data>
<data name="LnkResetCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>531, -1</value>
<value>581, -1</value>
</data>
<data name="LnkResetCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 17</value>
@@ -769,11 +816,8 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<data name="LnkResetCustomCommands.Text" xml:space="preserve">
<value>Restore</value>
</data>
<data name="groupBox1.Text" xml:space="preserve">
<value>List</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>393, 216</value>
<value>443, 216</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
@@ -782,7 +826,7 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>x Delete</value>
</data>
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>317, 216</value>
<value>367, 216</value>
</data>
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 23</value>
@@ -791,10 +835,19 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>√ Save</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>267, 23</value>
<value>317, 23</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>Custom</value>
<data name="TPHome.Text" xml:space="preserve">
<value>Home</value>
</data>
<data name="BtnOpenShopEditor.Text" xml:space="preserve">
<value>Shop Editor</value>
</data>
<data name="BtnOpenDropEditor.Location" type="System.Drawing.Point, System.Drawing">
<value>546, 216</value>
</data>
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
<value>Drop Editor</value>
</data>
<data name="LblAbout.Location" type="System.Drawing.Point, System.Drawing">
<value>74, 38</value>
@@ -812,13 +865,16 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<value>TextMapBrowser</value>
</data>
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
<value>Banner editor</value>
<value>Banner Editor</value>
</data>
<data name="GrpSettings.Text" xml:space="preserve">
<value>Settings</value>
</data>
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 21</value>
<value>109, 21</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>Top most</value>
<value>Always on top</value>
</data>
<data name="ChkIncludeUID.Size" type="System.Drawing.Size, System.Drawing">
<value>95, 21</value>
@@ -826,10 +882,97 @@ Therefore, the quest can be add and finish, but not necessarily can be work</val
<data name="ChkIncludeUID.Text" xml:space="preserve">
<value>Include UID</value>
</data>
<data name="GrpSettings.Text" xml:space="preserve">
<value>Settings</value>
<data name="TPMail.Text" xml:space="preserve">
<value>Mail</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>Home</value>
<data name="BtnAddMailItem.Text" xml:space="preserve">
<value>+ Add</value>
</data>
</root>
<data name="BtnDeleteMailItem.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>Items</value>
</data>
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 4</value>
</data>
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 4</value>
</data>
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 6</value>
</data>
<data name="LblMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="LblMailItemCount.Text" xml:space="preserve">
<value>Count:</value>
</data>
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>123, 6</value>
</data>
<data name="LblMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 17</value>
</data>
<data name="LblMailItemLevel.Text" xml:space="preserve">
<value>Level:</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>Mailbox</value>
</data>
<data name="BtnClearMail.Location" type="System.Drawing.Point, System.Drawing">
<value>84, 4</value>
</data>
<data name="BtnClearMail.Text" xml:space="preserve">
<value>× Clear</value>
</data>
<data name="BtnRemoveMail.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 4</value>
</data>
<data name="BtnRemoveMail.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="BtnSendMail.Text" xml:space="preserve">
<value>Send</value>
</data>
<data name="LblMailItemsLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 17</value>
</data>
<data name="LblMailItemsLabel.Text" xml:space="preserve">
<value>Items:</value>
</data>
<data name="RbMailSendToPlayer.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 21</value>
</data>
<data name="RbMailSendToPlayer.Text" xml:space="preserve">
<value>Player</value>
</data>
<data name="RbMailSendToAll.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 21</value>
</data>
<data name="RbMailSendToAll.Text" xml:space="preserve">
<value>All</value>
</data>
<data name="LblMailRecipientLabel.Text" xml:space="preserve">
<value>Send to:</value>
</data>
<data name="LblMailContentLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LblMailContentLabel.Text" xml:space="preserve">
<value>Content:</value>
</data>
<data name="LblMailTitleLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 17</value>
</data>
<data name="LblMailTitleLabel.Text" xml:space="preserve">
<value>Title:</value>
</data>
<data name="LblMailSenderLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblMailSenderLabel.Text" xml:space="preserve">
<value>Sender:</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -124,11 +124,33 @@
<value>自動</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令(按住 Ctrl 自動執行</value>
<value>命令 - [Ctrl] 自動執行 - [|] 分割多條命令</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>執行(F5)</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>遠程</value>
</data>
<data name="LnkInventoryKamera.Text" xml:space="preserve">
<value>存檔掃描開源工具</value>
</data>
<data name="LblGOODHelp.Text" xml:space="preserve">
<value>快來把你的官服存檔導入GC吧</value>
</data>
<data name="ButtonOpenGOODImport.Text" xml:space="preserve">
<value>導入GOOD檔案</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblHostTip.Size" type="System.Drawing.Size, System.Drawing">
<value>206, 17</value>
</data>
<data name="LblHostTip.Text" xml:space="preserve">
<value>請確保地址中包含 http:// 或 https://</value>
</data>
<data name="GrpServerStatus.Text" xml:space="preserve">
<value>伺服器狀態</value>
</data>
<data name="LnkOpenCommandLabel.Text" xml:space="preserve">
<value>遠程執行插件</value>
</data>
@@ -138,8 +160,11 @@
<data name="LblPlayerCountLabel.Text" xml:space="preserve">
<value>當前玩家數</value>
</data>
<data name="GrpServerStatus.Text" xml:space="preserve">
<value>伺服器狀態</value>
<data name="GrpRemoteCommand.Text" xml:space="preserve">
<value>遠程執行</value>
</data>
<data name="TPPlayerCheck.Text" xml:space="preserve">
<value>玩家驗證</value>
</data>
<data name="LnkRCHelp.Text" xml:space="preserve">
<value>幫助</value>
@@ -153,9 +178,6 @@
<data name="BtnSendVerificationCode.Text" xml:space="preserve">
<value>發送驗證碼</value>
</data>
<data name="TPPlayerCheck.Text" xml:space="preserve">
<value>玩家驗證</value>
</data>
<data name="BtnConsoleConnect.Text" xml:space="preserve">
<value>連接</value>
</data>
@@ -163,17 +185,17 @@
<value>請注意,控制台狀態下普通命令必須指定目標
即設置包含UID</value>
</data>
<data name="GrpRemoteCommand.Text" xml:space="preserve">
<value>遠程執行</value>
</data>
<data name="BtnQueryServerStatus.Text" xml:space="preserve">
<value>查詢</value>
</data>
<data name="LblHost.Text" xml:space="preserve">
<value>伺服器地址</value>
</data>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>遠程</value>
<data name="TPAbout.Text" xml:space="preserve">
<value>關於</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>334, 102</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>割草機工具箱
@@ -183,9 +205,6 @@
如果願意請我喝一杯奶茶,那就更好了 : )
指令生成有問題或者有新的功能請求都可以來Github提出</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>關於</value>
</data>
<data name="BtnBan.Text" xml:space="preserve">
<value>封號</value>
</data>
@@ -219,11 +238,6 @@
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>含場景ID</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>座標傳送
提示:遊戲內可以通過小地圖的'魚鉤'標記來快捷傳送
命令中可以用~表示當前位置,~100表示相對當前100</value>
</data>
<data name="BtnTeleport.Text" xml:space="preserve">
<value>傳送</value>
</data>
@@ -234,6 +248,14 @@
<value>場景控制
提示:大部分場景沒有作用,無法進入。</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>290, 51</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>座標傳送
提示:遊戲內可以通過小地圖的'魚鉤'標記來快捷傳送
命令中可以用~表示當前位置,~N 表示相對當前N</value>
</data>
<data name="BtnSaveGiveItemLog.Text" xml:space="preserve">
<value>√ 記錄</value>
@@ -254,6 +276,9 @@
<value>給玩家指定物品
說明:可選擇直接給到背包或者掉落到世界</value>
</data>
<data name="BtnGiveAllWeapons.Text" xml:space="preserve">
<value>獲得所有武器</value>
</data>
<data name="LblWeaponDescription.Text" xml:space="preserve">
<value>獲取武器
@@ -274,36 +299,42 @@
<data name="LblWeaponLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="TPStats.Text" xml:space="preserve">
<value>數據</value>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>設置命座</value>
</data>
<data name="LblResetStatsCommand.Text" xml:space="preserve">
<value>獲得角色經驗時</value>
<data name="LnkSetAllConst.Text" xml:space="preserve">
<value>設置所有角色</value>
</data>
<data name="LblResetStatsTip.Text" xml:space="preserve">
<value>當前角色屬性將會重置</value>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>設置當前角色</value>
</data>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>角色屬性</value>
</data>
<data name="BtnUnlockStat.Text" xml:space="preserve">
<value>解鎖</value>
</data>
<data name="BtnLockStat.Text" xml:space="preserve">
<value>鎖定</value>
</data>
<data name="GrpTalentLevel.Text" xml:space="preserve">
<value>技能等級</value>
</data>
<data name="LnkTalentNormalATK.Text" xml:space="preserve">
<value>普通攻擊</value>
</data>
<data name="LblStatsDescription.Text" xml:space="preserve">
<value>設置當前活躍角色數據</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>一鍵獲得所有角色</value>
</data>
<data name="LblNewCommandTip.Text" xml:space="preserve">
<value>※僅給予所有角色時生效</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="LblAvatarSkillLevelLabel.Text" xml:space="preserve">
<value>技能等級</value>
</data>
<data name="ChkInfiniteHP.Text" xml:space="preserve">
<value>無限血</value>
</data>
<data name="BtnSaveSpawnLog.Text" xml:space="preserve">
<value>√ 記錄</value>
</data>
@@ -316,15 +347,6 @@
<data name="GrpEntityType.Text" xml:space="preserve">
<value>列表分類</value>
</data>
<data name="RbEntityAnimal.Text" xml:space="preserve">
<value>生物誌</value>
</data>
<data name="RbEntityMonster.Text" xml:space="preserve">
<value>討伐對象</value>
</data>
<data name="LblSpawnDescription.Text" xml:space="preserve">
<value>在玩家附近召喚生物</value>
</data>
<data name="LblEntityAmount.Text" xml:space="preserve">
<value>數量</value>
</data>
@@ -393,6 +415,12 @@
<data name="TPHome.Text" xml:space="preserve">
<value>主頁</value>
</data>
<data name="BtnOpenShopEditor.Text" xml:space="preserve">
<value>商店編輯器</value>
</data>
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
<value>掉落物編輯器</value>
</data>
<data name="BtnOpenTextMap.Text" xml:space="preserve">
<value>文本瀏覽器</value>
</data>
@@ -402,4 +430,46 @@
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置頂</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>郵件</value>
</data>
<data name="BtnDeleteMailItem.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 4</value>
</data>
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 4</value>
</data>
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>-3, 6</value>
</data>
<data name="LblMailItemCount.Text" xml:space="preserve">
<value>數量:</value>
</data>
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>123, 6</value>
</data>
<data name="LblMailItemLevel.Text" xml:space="preserve">
<value>等級:</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>郵件列表</value>
</data>
<data name="BtnRemoveMail.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="BtnSendMail.Text" xml:space="preserve">
<value>發送</value>
</data>
<data name="LblMailContentLabel.Text" xml:space="preserve">
<value>內容:</value>
</data>
<data name="LblMailTitleLabel.Text" xml:space="preserve">
<value>標題:</value>
</data>
<data name="LblMailSenderLabel.Text" xml:space="preserve">
<value>發件人:</value>
</data>
</root>

View File

@@ -0,0 +1,702 @@
namespace GrasscutterTools.Forms
{
partial class FormShopEditor
{
/// <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(FormShopEditor));
this.ListShop = new System.Windows.Forms.ListBox();
this.ListGoods = new System.Windows.Forms.ListBox();
this.ListItems = new System.Windows.Forms.ListBox();
this.GrpShopList = new System.Windows.Forms.GroupBox();
this.GrpGoodsList = new System.Windows.Forms.GroupBox();
this.BtnClearGoods = new System.Windows.Forms.Button();
this.BtnDeleteGoods = new System.Windows.Forms.Button();
this.GrpItems = new System.Windows.Forms.GroupBox();
this.TxtItemFilter = new System.Windows.Forms.TextBox();
this.GrpGoodsInfo = new System.Windows.Forms.GroupBox();
this.BtnSaveGoods = new System.Windows.Forms.Button();
this.CmbRefreshType = new System.Windows.Forms.ComboBox();
this.NUDRefreshParm = new System.Windows.Forms.NumericUpDown();
this.DTPEndTime = new System.Windows.Forms.DateTimePicker();
this.DTPBeginTime = new System.Windows.Forms.DateTimePicker();
this.NUDGoodsId = new System.Windows.Forms.NumericUpDown();
this.NUDMaxLevel = new System.Windows.Forms.NumericUpDown();
this.NUDMinLevel = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem4 = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem3 = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem2 = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem1 = new System.Windows.Forms.NumericUpDown();
this.NUDCostMcoin = new System.Windows.Forms.NumericUpDown();
this.NUDCostScoin = new System.Windows.Forms.NumericUpDown();
this.NUDCostHcoin = new System.Windows.Forms.NumericUpDown();
this.NUDBuyLimit = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem4Count = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem3Count = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem2Count = new System.Windows.Forms.NumericUpDown();
this.NUDCostItem1Count = new System.Windows.Forms.NumericUpDown();
this.NUDGoodsItemCount = new System.Windows.Forms.NumericUpDown();
this.TxtGoodsItem = new System.Windows.Forms.TextBox();
this.LblRefreshModeLabel = new System.Windows.Forms.Label();
this.LblBuyLevelLabel = new System.Windows.Forms.Label();
this.LblEndTimeLabel = new System.Windows.Forms.Label();
this.LblBeginTimeLabel = new System.Windows.Forms.Label();
this.LblCostItem4Label = new System.Windows.Forms.Label();
this.LblCostItem3Label = new System.Windows.Forms.Label();
this.LblCostItem2Label = new System.Windows.Forms.Label();
this.LblCostItem1Label = new System.Windows.Forms.Label();
this.LblCostMcoinLabel = new System.Windows.Forms.Label();
this.LblCostScoinLabel = new System.Windows.Forms.Label();
this.LblCostHcoinLabel = new System.Windows.Forms.Label();
this.LblBuyLimitLabel = new System.Windows.Forms.Label();
this.LblGoodsIdLabel = new System.Windows.Forms.Label();
this.LblGoodsItemLabel = new System.Windows.Forms.Label();
this.label13 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.label11 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.LnkGenGoodsId = new System.Windows.Forms.LinkLabel();
this.label18 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.BtnSave = new System.Windows.Forms.Button();
this.BtnLoad = new System.Windows.Forms.Button();
this.TxtShopJsonPath = new System.Windows.Forms.TextBox();
this.LblShopPathLabel = new System.Windows.Forms.Label();
this.GrpShopList.SuspendLayout();
this.GrpGoodsList.SuspendLayout();
this.GrpItems.SuspendLayout();
this.GrpGoodsInfo.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDRefreshParm)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDGoodsId)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMaxLevel)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMinLevel)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostMcoin)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostScoin)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostHcoin)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDBuyLimit)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem4Count)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem3Count)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem2Count)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem1Count)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDGoodsItemCount)).BeginInit();
this.SuspendLayout();
//
// ListShop
//
resources.ApplyResources(this.ListShop, "ListShop");
this.ListShop.FormattingEnabled = true;
this.ListShop.Name = "ListShop";
this.ListShop.SelectedIndexChanged += new System.EventHandler(this.ListShop_SelectedIndexChanged);
//
// ListGoods
//
resources.ApplyResources(this.ListGoods, "ListGoods");
this.ListGoods.FormattingEnabled = true;
this.ListGoods.Name = "ListGoods";
this.ListGoods.SelectedIndexChanged += new System.EventHandler(this.ListGoods_SelectedIndexChanged);
//
// ListItems
//
resources.ApplyResources(this.ListItems, "ListItems");
this.ListItems.FormattingEnabled = true;
this.ListItems.Name = "ListItems";
this.ListItems.SelectedIndexChanged += new System.EventHandler(this.ListItems_SelectedIndexChanged);
//
// GrpShopList
//
resources.ApplyResources(this.GrpShopList, "GrpShopList");
this.GrpShopList.Controls.Add(this.ListShop);
this.GrpShopList.Name = "GrpShopList";
this.GrpShopList.TabStop = false;
//
// GrpGoodsList
//
resources.ApplyResources(this.GrpGoodsList, "GrpGoodsList");
this.GrpGoodsList.Controls.Add(this.BtnClearGoods);
this.GrpGoodsList.Controls.Add(this.BtnDeleteGoods);
this.GrpGoodsList.Controls.Add(this.ListGoods);
this.GrpGoodsList.Name = "GrpGoodsList";
this.GrpGoodsList.TabStop = false;
//
// BtnClearGoods
//
resources.ApplyResources(this.BtnClearGoods, "BtnClearGoods");
this.BtnClearGoods.Name = "BtnClearGoods";
this.BtnClearGoods.UseVisualStyleBackColor = true;
this.BtnClearGoods.Click += new System.EventHandler(this.BtnClearGoods_Click);
//
// BtnDeleteGoods
//
resources.ApplyResources(this.BtnDeleteGoods, "BtnDeleteGoods");
this.BtnDeleteGoods.Name = "BtnDeleteGoods";
this.BtnDeleteGoods.UseVisualStyleBackColor = true;
this.BtnDeleteGoods.Click += new System.EventHandler(this.BtnDeleteGoods_Click);
//
// GrpItems
//
resources.ApplyResources(this.GrpItems, "GrpItems");
this.GrpItems.Controls.Add(this.TxtItemFilter);
this.GrpItems.Controls.Add(this.ListItems);
this.GrpItems.Name = "GrpItems";
this.GrpItems.TabStop = false;
//
// TxtItemFilter
//
resources.ApplyResources(this.TxtItemFilter, "TxtItemFilter");
this.TxtItemFilter.Name = "TxtItemFilter";
this.TxtItemFilter.TextChanged += new System.EventHandler(this.TxtItemFilter_TextChanged);
//
// GrpGoodsInfo
//
resources.ApplyResources(this.GrpGoodsInfo, "GrpGoodsInfo");
this.GrpGoodsInfo.Controls.Add(this.BtnSaveGoods);
this.GrpGoodsInfo.Controls.Add(this.CmbRefreshType);
this.GrpGoodsInfo.Controls.Add(this.NUDRefreshParm);
this.GrpGoodsInfo.Controls.Add(this.DTPEndTime);
this.GrpGoodsInfo.Controls.Add(this.DTPBeginTime);
this.GrpGoodsInfo.Controls.Add(this.NUDGoodsId);
this.GrpGoodsInfo.Controls.Add(this.NUDMaxLevel);
this.GrpGoodsInfo.Controls.Add(this.NUDMinLevel);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem4);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem3);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem2);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem1);
this.GrpGoodsInfo.Controls.Add(this.NUDCostMcoin);
this.GrpGoodsInfo.Controls.Add(this.NUDCostScoin);
this.GrpGoodsInfo.Controls.Add(this.NUDCostHcoin);
this.GrpGoodsInfo.Controls.Add(this.NUDBuyLimit);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem4Count);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem3Count);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem2Count);
this.GrpGoodsInfo.Controls.Add(this.NUDCostItem1Count);
this.GrpGoodsInfo.Controls.Add(this.NUDGoodsItemCount);
this.GrpGoodsInfo.Controls.Add(this.TxtGoodsItem);
this.GrpGoodsInfo.Controls.Add(this.LblRefreshModeLabel);
this.GrpGoodsInfo.Controls.Add(this.LblBuyLevelLabel);
this.GrpGoodsInfo.Controls.Add(this.LblEndTimeLabel);
this.GrpGoodsInfo.Controls.Add(this.LblBeginTimeLabel);
this.GrpGoodsInfo.Controls.Add(this.LblCostItem4Label);
this.GrpGoodsInfo.Controls.Add(this.LblCostItem3Label);
this.GrpGoodsInfo.Controls.Add(this.LblCostItem2Label);
this.GrpGoodsInfo.Controls.Add(this.LblCostItem1Label);
this.GrpGoodsInfo.Controls.Add(this.LblCostMcoinLabel);
this.GrpGoodsInfo.Controls.Add(this.LblCostScoinLabel);
this.GrpGoodsInfo.Controls.Add(this.LblCostHcoinLabel);
this.GrpGoodsInfo.Controls.Add(this.LblBuyLimitLabel);
this.GrpGoodsInfo.Controls.Add(this.LblGoodsIdLabel);
this.GrpGoodsInfo.Controls.Add(this.LblGoodsItemLabel);
this.GrpGoodsInfo.Controls.Add(this.label13);
this.GrpGoodsInfo.Controls.Add(this.label12);
this.GrpGoodsInfo.Controls.Add(this.label11);
this.GrpGoodsInfo.Controls.Add(this.label14);
this.GrpGoodsInfo.Controls.Add(this.LnkGenGoodsId);
this.GrpGoodsInfo.Controls.Add(this.label18);
this.GrpGoodsInfo.Controls.Add(this.label1);
this.GrpGoodsInfo.Name = "GrpGoodsInfo";
this.GrpGoodsInfo.TabStop = false;
//
// BtnSaveGoods
//
resources.ApplyResources(this.BtnSaveGoods, "BtnSaveGoods");
this.BtnSaveGoods.Name = "BtnSaveGoods";
this.BtnSaveGoods.UseVisualStyleBackColor = true;
this.BtnSaveGoods.Click += new System.EventHandler(this.BtnSaveGoods_Click);
//
// CmbRefreshType
//
resources.ApplyResources(this.CmbRefreshType, "CmbRefreshType");
this.CmbRefreshType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbRefreshType.FormattingEnabled = true;
this.CmbRefreshType.Items.AddRange(new object[] {
resources.GetString("CmbRefreshType.Items"),
resources.GetString("CmbRefreshType.Items1"),
resources.GetString("CmbRefreshType.Items2"),
resources.GetString("CmbRefreshType.Items3")});
this.CmbRefreshType.Name = "CmbRefreshType";
this.CmbRefreshType.SelectedIndexChanged += new System.EventHandler(this.CmbRefreshType_SelectedIndexChanged);
//
// NUDRefreshParm
//
resources.ApplyResources(this.NUDRefreshParm, "NUDRefreshParm");
this.NUDRefreshParm.Maximum = new decimal(new int[] {
1000,
0,
0,
0});
this.NUDRefreshParm.Name = "NUDRefreshParm";
//
// DTPEndTime
//
resources.ApplyResources(this.DTPEndTime, "DTPEndTime");
this.DTPEndTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.DTPEndTime.Name = "DTPEndTime";
this.DTPEndTime.Value = new System.DateTime(2035, 1, 1, 0, 0, 0, 0);
//
// DTPBeginTime
//
resources.ApplyResources(this.DTPBeginTime, "DTPBeginTime");
this.DTPBeginTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.DTPBeginTime.Name = "DTPBeginTime";
this.DTPBeginTime.Value = new System.DateTime(2022, 1, 1, 0, 0, 0, 0);
//
// NUDGoodsId
//
resources.ApplyResources(this.NUDGoodsId, "NUDGoodsId");
this.NUDGoodsId.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDGoodsId.Name = "NUDGoodsId";
this.NUDGoodsId.Value = new decimal(new int[] {
101001,
0,
0,
0});
//
// NUDMaxLevel
//
resources.ApplyResources(this.NUDMaxLevel, "NUDMaxLevel");
this.NUDMaxLevel.Maximum = new decimal(new int[] {
99,
0,
0,
0});
this.NUDMaxLevel.Name = "NUDMaxLevel";
this.NUDMaxLevel.Value = new decimal(new int[] {
61,
0,
0,
0});
//
// NUDMinLevel
//
resources.ApplyResources(this.NUDMinLevel, "NUDMinLevel");
this.NUDMinLevel.Maximum = new decimal(new int[] {
99,
0,
0,
0});
this.NUDMinLevel.Name = "NUDMinLevel";
this.NUDMinLevel.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// NUDCostItem4
//
resources.ApplyResources(this.NUDCostItem4, "NUDCostItem4");
this.NUDCostItem4.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem4.Name = "NUDCostItem4";
//
// NUDCostItem3
//
resources.ApplyResources(this.NUDCostItem3, "NUDCostItem3");
this.NUDCostItem3.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem3.Name = "NUDCostItem3";
//
// NUDCostItem2
//
resources.ApplyResources(this.NUDCostItem2, "NUDCostItem2");
this.NUDCostItem2.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem2.Name = "NUDCostItem2";
//
// NUDCostItem1
//
resources.ApplyResources(this.NUDCostItem1, "NUDCostItem1");
this.NUDCostItem1.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem1.Name = "NUDCostItem1";
//
// NUDCostMcoin
//
resources.ApplyResources(this.NUDCostMcoin, "NUDCostMcoin");
this.NUDCostMcoin.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostMcoin.Name = "NUDCostMcoin";
//
// NUDCostScoin
//
resources.ApplyResources(this.NUDCostScoin, "NUDCostScoin");
this.NUDCostScoin.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostScoin.Name = "NUDCostScoin";
//
// NUDCostHcoin
//
resources.ApplyResources(this.NUDCostHcoin, "NUDCostHcoin");
this.NUDCostHcoin.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostHcoin.Name = "NUDCostHcoin";
//
// NUDBuyLimit
//
resources.ApplyResources(this.NUDBuyLimit, "NUDBuyLimit");
this.NUDBuyLimit.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDBuyLimit.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.NUDBuyLimit.Name = "NUDBuyLimit";
this.NUDBuyLimit.Value = new decimal(new int[] {
100,
0,
0,
0});
//
// NUDCostItem4Count
//
resources.ApplyResources(this.NUDCostItem4Count, "NUDCostItem4Count");
this.NUDCostItem4Count.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem4Count.Name = "NUDCostItem4Count";
//
// NUDCostItem3Count
//
resources.ApplyResources(this.NUDCostItem3Count, "NUDCostItem3Count");
this.NUDCostItem3Count.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem3Count.Name = "NUDCostItem3Count";
//
// NUDCostItem2Count
//
resources.ApplyResources(this.NUDCostItem2Count, "NUDCostItem2Count");
this.NUDCostItem2Count.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem2Count.Name = "NUDCostItem2Count";
//
// NUDCostItem1Count
//
resources.ApplyResources(this.NUDCostItem1Count, "NUDCostItem1Count");
this.NUDCostItem1Count.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItem1Count.Name = "NUDCostItem1Count";
//
// NUDGoodsItemCount
//
resources.ApplyResources(this.NUDGoodsItemCount, "NUDGoodsItemCount");
this.NUDGoodsItemCount.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDGoodsItemCount.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.NUDGoodsItemCount.Name = "NUDGoodsItemCount";
this.NUDGoodsItemCount.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// TxtGoodsItem
//
resources.ApplyResources(this.TxtGoodsItem, "TxtGoodsItem");
this.TxtGoodsItem.Name = "TxtGoodsItem";
//
// LblRefreshModeLabel
//
resources.ApplyResources(this.LblRefreshModeLabel, "LblRefreshModeLabel");
this.LblRefreshModeLabel.Name = "LblRefreshModeLabel";
//
// LblBuyLevelLabel
//
resources.ApplyResources(this.LblBuyLevelLabel, "LblBuyLevelLabel");
this.LblBuyLevelLabel.Name = "LblBuyLevelLabel";
//
// LblEndTimeLabel
//
resources.ApplyResources(this.LblEndTimeLabel, "LblEndTimeLabel");
this.LblEndTimeLabel.Name = "LblEndTimeLabel";
//
// LblBeginTimeLabel
//
resources.ApplyResources(this.LblBeginTimeLabel, "LblBeginTimeLabel");
this.LblBeginTimeLabel.Name = "LblBeginTimeLabel";
//
// LblCostItem4Label
//
resources.ApplyResources(this.LblCostItem4Label, "LblCostItem4Label");
this.LblCostItem4Label.Name = "LblCostItem4Label";
//
// LblCostItem3Label
//
resources.ApplyResources(this.LblCostItem3Label, "LblCostItem3Label");
this.LblCostItem3Label.Name = "LblCostItem3Label";
//
// LblCostItem2Label
//
resources.ApplyResources(this.LblCostItem2Label, "LblCostItem2Label");
this.LblCostItem2Label.Name = "LblCostItem2Label";
//
// LblCostItem1Label
//
resources.ApplyResources(this.LblCostItem1Label, "LblCostItem1Label");
this.LblCostItem1Label.Name = "LblCostItem1Label";
//
// LblCostMcoinLabel
//
resources.ApplyResources(this.LblCostMcoinLabel, "LblCostMcoinLabel");
this.LblCostMcoinLabel.Name = "LblCostMcoinLabel";
//
// LblCostScoinLabel
//
resources.ApplyResources(this.LblCostScoinLabel, "LblCostScoinLabel");
this.LblCostScoinLabel.Name = "LblCostScoinLabel";
//
// LblCostHcoinLabel
//
resources.ApplyResources(this.LblCostHcoinLabel, "LblCostHcoinLabel");
this.LblCostHcoinLabel.Name = "LblCostHcoinLabel";
//
// LblBuyLimitLabel
//
resources.ApplyResources(this.LblBuyLimitLabel, "LblBuyLimitLabel");
this.LblBuyLimitLabel.Name = "LblBuyLimitLabel";
//
// LblGoodsIdLabel
//
resources.ApplyResources(this.LblGoodsIdLabel, "LblGoodsIdLabel");
this.LblGoodsIdLabel.Name = "LblGoodsIdLabel";
//
// LblGoodsItemLabel
//
resources.ApplyResources(this.LblGoodsItemLabel, "LblGoodsItemLabel");
this.LblGoodsItemLabel.Name = "LblGoodsItemLabel";
//
// label13
//
resources.ApplyResources(this.label13, "label13");
this.label13.Name = "label13";
//
// label12
//
resources.ApplyResources(this.label12, "label12");
this.label12.Name = "label12";
//
// label11
//
resources.ApplyResources(this.label11, "label11");
this.label11.Name = "label11";
//
// label14
//
resources.ApplyResources(this.label14, "label14");
this.label14.Name = "label14";
//
// LnkGenGoodsId
//
resources.ApplyResources(this.LnkGenGoodsId, "LnkGenGoodsId");
this.LnkGenGoodsId.Name = "LnkGenGoodsId";
this.LnkGenGoodsId.TabStop = true;
this.LnkGenGoodsId.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkGenGoodsId_LinkClicked);
//
// label18
//
resources.ApplyResources(this.label18, "label18");
this.label18.Name = "label18";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// 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);
//
// TxtShopJsonPath
//
resources.ApplyResources(this.TxtShopJsonPath, "TxtShopJsonPath");
this.TxtShopJsonPath.Name = "TxtShopJsonPath";
//
// LblShopPathLabel
//
resources.ApplyResources(this.LblShopPathLabel, "LblShopPathLabel");
this.LblShopPathLabel.Name = "LblShopPathLabel";
//
// FormShopEditor
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.BtnSave);
this.Controls.Add(this.BtnLoad);
this.Controls.Add(this.TxtShopJsonPath);
this.Controls.Add(this.LblShopPathLabel);
this.Controls.Add(this.GrpGoodsInfo);
this.Controls.Add(this.GrpItems);
this.Controls.Add(this.GrpGoodsList);
this.Controls.Add(this.GrpShopList);
this.Name = "FormShopEditor";
this.GrpShopList.ResumeLayout(false);
this.GrpGoodsList.ResumeLayout(false);
this.GrpItems.ResumeLayout(false);
this.GrpItems.PerformLayout();
this.GrpGoodsInfo.ResumeLayout(false);
this.GrpGoodsInfo.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDRefreshParm)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDGoodsId)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMaxLevel)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDMinLevel)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostMcoin)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostScoin)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostHcoin)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDBuyLimit)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem4Count)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem3Count)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem2Count)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItem1Count)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDGoodsItemCount)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListBox ListShop;
private System.Windows.Forms.ListBox ListGoods;
private System.Windows.Forms.ListBox ListItems;
private System.Windows.Forms.GroupBox GrpShopList;
private System.Windows.Forms.GroupBox GrpGoodsList;
private System.Windows.Forms.GroupBox GrpItems;
private System.Windows.Forms.GroupBox GrpGoodsInfo;
private System.Windows.Forms.Button BtnSave;
private System.Windows.Forms.Button BtnLoad;
private System.Windows.Forms.TextBox TxtShopJsonPath;
private System.Windows.Forms.Label LblShopPathLabel;
private System.Windows.Forms.NumericUpDown NUDGoodsItemCount;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox TxtGoodsItem;
private System.Windows.Forms.Label LblGoodsItemLabel;
private System.Windows.Forms.NumericUpDown NUDCostItem3;
private System.Windows.Forms.NumericUpDown NUDCostItem2;
private System.Windows.Forms.NumericUpDown NUDCostItem1;
private System.Windows.Forms.NumericUpDown NUDCostMcoin;
private System.Windows.Forms.NumericUpDown NUDCostScoin;
private System.Windows.Forms.NumericUpDown NUDCostHcoin;
private System.Windows.Forms.NumericUpDown NUDBuyLimit;
private System.Windows.Forms.NumericUpDown NUDMaxLevel;
private System.Windows.Forms.NumericUpDown NUDMinLevel;
private System.Windows.Forms.NumericUpDown NUDCostItem4;
private System.Windows.Forms.Label LblGoodsIdLabel;
private System.Windows.Forms.NumericUpDown NUDGoodsId;
private System.Windows.Forms.Label LblBuyLimitLabel;
private System.Windows.Forms.Label LblCostItem4Label;
private System.Windows.Forms.Label LblCostItem3Label;
private System.Windows.Forms.Label LblCostItem2Label;
private System.Windows.Forms.Label LblCostItem1Label;
private System.Windows.Forms.Label LblCostMcoinLabel;
private System.Windows.Forms.Label LblCostScoinLabel;
private System.Windows.Forms.Label LblCostHcoinLabel;
private System.Windows.Forms.NumericUpDown NUDCostItem4Count;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.NumericUpDown NUDCostItem3Count;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.NumericUpDown NUDCostItem2Count;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.NumericUpDown NUDCostItem1Count;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.DateTimePicker DTPEndTime;
private System.Windows.Forms.DateTimePicker DTPBeginTime;
private System.Windows.Forms.Label LblEndTimeLabel;
private System.Windows.Forms.Label LblBeginTimeLabel;
private System.Windows.Forms.Label LblBuyLevelLabel;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.LinkLabel LnkGenGoodsId;
private System.Windows.Forms.ComboBox CmbRefreshType;
private System.Windows.Forms.NumericUpDown NUDRefreshParm;
private System.Windows.Forms.Label LblRefreshModeLabel;
private System.Windows.Forms.Button BtnSaveGoods;
private System.Windows.Forms.TextBox TxtItemFilter;
private System.Windows.Forms.Button BtnClearGoods;
private System.Windows.Forms.Button BtnDeleteGoods;
}
}

View File

@@ -0,0 +1,479 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 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.Shop;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Forms
{
public partial class FormShopEditor : Form
{
#region - -
/// <summary>
/// 商店列表数据
/// </summary>
private Dictionary<int, List<ShopInfo>> Shops = new Dictionary<int, List<ShopInfo>>();
/// <summary>
/// 选中的商店类型
/// </summary>
private int SelectedShopType;
#endregion - -
#region - -
public FormShopEditor()
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
ListShop.Items.AddRange(GameData.ShopType.Lines);
ListItems.Items.AddRange(GameData.Items.Lines);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
// 加载文件路径
var path = Settings.Default.ShopJsonPath;
TxtShopJsonPath.Text = path;
if (!string.IsNullOrEmpty(path) && File.Exists(path))
LoadShops(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
Settings.Default.ShopJsonPath = TxtShopJsonPath.Text;
Settings.Default.Save();
base.OnFormClosed(e);
}
#endregion - -
#region - Shop.json -
/// <summary>
/// 点击加载Shop.json按钮时触发
/// </summary>
private void BtnLoad_Click(object sender, EventArgs e)
{
var path = TxtShopJsonPath.Text.Trim();
try
{
if (path == string.Empty)
{
var dialog = new OpenFileDialog
{
FileName = "Shop.json",
Filter = "Shop.Json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = TxtShopJsonPath.Text = dialog.FileName;
else
return;
}
// 反序列化
LoadShops(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">文件路径</param>
private void LoadShops(string path)
{
try
{
// 反序列化
var banners = JsonConvert.DeserializeObject<List<ShopTable>>(File.ReadAllText(path));
Shops = new Dictionary<int, List<ShopInfo>>(banners.Count);
foreach (var item in banners)
Shops.Add(item.ShopType, item.Items);
}
catch (Exception ex)
{
try
{
// 当Json解析失败时尝试以tsv方式解析
LoadShopsFromTsv(path);
}
catch
{
throw ex;
}
}
}
/// <summary>
/// 从TSV加载商店
/// </summary>
/// <param name="path">文件路径</param>
private void LoadShopsFromTsv(string path)
{
var lines = File.ReadAllLines(path);
Shops = new Dictionary<int, List<ShopInfo>>();
for (int i = 1; i < lines.Length; i++)
{
var cells = lines[i].Split('\t');
var goods = new ShopInfo
{
GoodsId = int.Parse(cells[0]),
GoodsItem = new ItemParamData(int.Parse(cells[2]), int.Parse(cells[4])),
BuyLimit = TryParse(cells[16]),
MinLevel = TryParse(cells[29]),
MaxLevel = TryParse(cells[30]),
BeginTime = (int)new DateTimeOffset(DateTime.Parse(cells[20])).ToUnixTimeSeconds(),
EndTime = (int)new DateTimeOffset(DateTime.Parse(cells[21])).ToUnixTimeSeconds(),
RefreshType = (ShopRefreshType)TryParse(cells[17]),
ShopRefreshParam = TryParse(cells[18]),
HCoin = TryParse(cells[5]),
SCoin = TryParse(cells[6]),
MCoin = TryParse(cells[7]),
CostItemList = new List<ItemParamData>
{
new ItemParamData(TryParse(cells[8]), TryParse(cells[9])),
new ItemParamData(TryParse(cells[10]), TryParse(cells[11])),
new ItemParamData(TryParse(cells[12]), TryParse(cells[13])),
new ItemParamData(TryParse(cells[14]), TryParse(cells[15])),
}
};
var shopType = int.Parse(cells[1]);
if (!Shops.TryGetValue(shopType, out List<ShopInfo> shops))
Shops.Add(shopType, shops = new List<ShopInfo>());
shops.Add(goods);
}
}
private static int TryParse(string value) => int.TryParse(value, out int n) ? n : 0;
/// <summary>
/// 点击保存Shop.json按钮时触发
/// </summary>
private void BtnSave_Click(object sender, EventArgs e)
{
try
{
var path = TxtShopJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new SaveFileDialog
{
FileName = "Shop.json",
Filter = "Shop.json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = TxtShopJsonPath.Text = dialog.FileName;
else
return;
}
// 序列化
var banners = new List<ShopTable>(Shops.Count);
foreach (var shop in Shops)
{
if (shop.Value != null && shop.Value.Count > 0)
{
banners.Add(new ShopTable
{
ShopType = shop.Key,
Items = shop.Value,
});
}
}
File.WriteAllText(path, JsonConvert.SerializeObject(banners, new JsonSerializerSettings
{
Formatting = Formatting.Indented,
DefaultValueHandling = DefaultValueHandling.Ignore,
}));
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - Shop.json -
#region - -
/// <summary>
/// 商店列表选中项改变时触发
/// </summary>
private void ListShop_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListShop.SelectedIndex == -1)
{
SelectedShopType = 0;
return;
}
SelectedShopType = ItemMap.ToId(ListShop.SelectedItem as string);
Shops.TryGetValue(SelectedShopType, out var shop);
ShowGoodsList(shop);
}
#endregion - -
#region - -
/// <summary>
/// 显示商品列表
/// </summary>
private void ShowGoodsList(List<ShopInfo> banner)
{
ListGoods.BeginUpdate();
ListGoods.Items.Clear();
if (banner != null && banner.Count > 0)
{
ListGoods.Items.AddRange(banner.Select(it => it.ToString()).ToArray());
//ListGoods.SelectedIndex = 0;
}
ListGoods.EndUpdate();
}
/// <summary>
/// 商品列表选中项改变时触发
/// </summary>
private void ListGoods_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListGoods.SelectedIndex == -1) return;
ShowGoods(Shops[SelectedShopType][ListGoods.SelectedIndex]);
}
/// <summary>
/// 点击删除商品按钮时触发
/// </summary>
private void BtnDeleteGoods_Click(object sender, EventArgs e)
{
if (ListGoods.SelectedIndex == -1) return;
if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Shops[SelectedShopType].RemoveAt(ListGoods.SelectedIndex);
ListGoods.Items.RemoveAt(ListGoods.SelectedIndex);
}
}
/// <summary>
/// 点击清空商品按钮时触发
/// </summary>
private void BtnClearGoods_Click(object sender, EventArgs e)
{
if (ListGoods.Items.Count == 0) return;
if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Shops.Remove(SelectedShopType);
ListGoods.Items.Clear();
}
}
#endregion - -
#region - -
/// <summary>
/// 显示商品
/// </summary>
/// <param name="goods"></param>
private void ShowGoods(ShopInfo goods)
{
NUDGoodsId.Value = goods.GoodsId;
TxtGoodsItem.Text = $"{goods.GoodsItem.Id}:{GameData.Items[goods.GoodsItem.Id]}";
NUDGoodsItemCount.Value = goods.GoodsItem.Count;
NUDBuyLimit.Value = goods.BuyLimit;
NUDMinLevel.Value = goods.MinLevel;
NUDMaxLevel.Value = goods.MaxLevel;
DTPBeginTime.Value = DateTimeOffset.FromUnixTimeSeconds(goods.BeginTime).LocalDateTime;
DTPEndTime.Value = DateTimeOffset.FromUnixTimeSeconds(goods.EndTime).LocalDateTime;
NUDRefreshParm.Value = goods.ShopRefreshParam;
CmbRefreshType.SelectedIndex = (int)goods.RefreshType;
NUDCostHcoin.Value = goods.HCoin;
NUDCostScoin.Value = goods.SCoin;
NUDCostMcoin.Value = goods.MCoin;
var items = new ItemParamData[4];
goods.CostItemList?.CopyTo(items, 0);
NUDCostItem1.Value = items[0].Id;
NUDCostItem1Count.Value = items[0].Count;
NUDCostItem2.Value = items[1].Id;
NUDCostItem2Count.Value = items[1].Count;
NUDCostItem3.Value = items[2].Id;
NUDCostItem3Count.Value = items[2].Count;
NUDCostItem4.Value = items[3].Id;
NUDCostItem4Count.Value = items[3].Count;
}
/// <summary>
/// 点击生成商品ID链接标签时触发
/// </summary>
private void LnkGenGoodsId_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (ListShop.SelectedIndex == -1) return;
if (ItemMap.TryToId(TxtGoodsItem.Text, out int itemId))
NUDGoodsId.Value = SelectedShopType * 1000 + itemId % 1000;
}
/// <summary>
/// 刷新类型选中项改变时触发
/// </summary>
private void CmbRefreshType_SelectedIndexChanged(object sender, EventArgs e)
{
NUDRefreshParm.Enabled = CmbRefreshType.SelectedIndex > 0;
if (CmbRefreshType.SelectedIndex == 0)
NUDRefreshParm.Value = 0;
else if (NUDRefreshParm.Value == 0)
NUDRefreshParm.Value = 1;
}
/// <summary>
/// 点击保存商品按钮时触发
/// </summary>
private void BtnSaveGoods_Click(object sender, EventArgs e)
{
if (!ItemMap.TryToId(TxtGoodsItem.Text, out int itemId))
{
MessageBox.Show(Resources.EmptyInputTip, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// 检查ID冲突
var goodsId = (int)NUDGoodsId.Value;
if (Shops.Any(kv => kv.Key != SelectedShopType && kv.Value.Any(it => it.GoodsId == goodsId)))
{
MessageBox.Show(Resources.GoodsIDConflictPrompt, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
List<ItemParamData> costs = new List<ItemParamData>();
if (NUDCostItem1Count.Value > 0 && NUDCostItem1.Value > 0)
costs.Add(new ItemParamData((int)NUDCostItem1.Value, (int)NUDCostItem1Count.Value));
if (NUDCostItem2Count.Value > 0 && NUDCostItem2.Value > 0)
costs.Add(new ItemParamData((int)NUDCostItem2.Value, (int)NUDCostItem2Count.Value));
if (NUDCostItem3Count.Value > 0 && NUDCostItem3.Value > 0)
costs.Add(new ItemParamData((int)NUDCostItem3.Value, (int)NUDCostItem3Count.Value));
if (NUDCostItem4Count.Value > 0 && NUDCostItem4.Value > 0)
costs.Add(new ItemParamData((int)NUDCostItem4.Value, (int)NUDCostItem4Count.Value));
ShopInfo goods = new ShopInfo
{
GoodsId = goodsId,
GoodsItem = new ItemParamData(itemId, (int)NUDGoodsItemCount.Value),
BuyLimit = (int)NUDBuyLimit.Value,
MinLevel = (int)NUDMinLevel.Value,
MaxLevel = (int)NUDMaxLevel.Value,
BeginTime = (int)new DateTimeOffset(DTPBeginTime.Value).ToUnixTimeSeconds(),
EndTime = (int)new DateTimeOffset(DTPEndTime.Value).ToUnixTimeSeconds(),
RefreshType = CmbRefreshType.SelectedIndex == -1 ? ShopRefreshType.None : (ShopRefreshType)CmbRefreshType.SelectedIndex,
ShopRefreshParam = (int)NUDRefreshParm.Value,
HCoin = (int)NUDCostHcoin.Value,
SCoin = (int)NUDCostScoin.Value,
MCoin = (int)NUDCostMcoin.Value,
CostItemList = costs,
// 以下属性不认识,代码里看似也没用,不写了
//BoughtNum
//DisableType
//PreGoodsIdList
//SecondarySheetId
};
if (Shops.TryGetValue(SelectedShopType, out var shop))
{
var i = shop.FindIndex(it => it.GoodsId == goodsId);
if (i == -1)
{
// 增加到现有列表
shop.Add(goods);
ListGoods.Items.Add(goods.ToString());
}
else
{
// 修改
shop[i] = goods;
ListGoods.Items[i] = goods.ToString();
}
}
else
{
// 增加到新列表
Shops[SelectedShopType] = new List<ShopInfo> { goods };
ListGoods.Items.Add(goods.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - -
#region - -
/// <summary>
/// 物品列表过滤框输入改变事件
/// </summary>
private void TxtItemFilter_TextChanged(object sender, EventArgs e)
{
UIUtil.ListBoxFilter(ListItems, GameData.Items.Lines, TxtItemFilter.Text);
}
/// <summary>
/// 物品列表选中项改变时触发
/// </summary>
private void ListItems_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListItems.SelectedIndex == -1) return;
TxtGoodsItem.Text = ListItems.SelectedItem as string;
}
#endregion - -
}
}

View File

@@ -0,0 +1,259 @@
<?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="GrpShopList.Text" xml:space="preserve">
<value>Shop list</value>
</data>
<data name="GrpGoodsList.Text" xml:space="preserve">
<value>Shop info list</value>
</data>
<data name="BtnClearGoods.Text" xml:space="preserve">
<value>× Clear</value>
</data>
<data name="BtnDeleteGoods.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="GrpItems.Text" xml:space="preserve">
<value>Item list</value>
</data>
<data name="GrpGoodsInfo.Text" xml:space="preserve">
<value>Shop info</value>
</data>
<data name="BtnSaveGoods.Text" xml:space="preserve">
<value>√ Add or Update</value>
</data>
<data name="CmbRefreshType.Items" xml:space="preserve">
<value>None</value>
</data>
<data name="CmbRefreshType.Items1" xml:space="preserve">
<value>Daily</value>
</data>
<data name="CmbRefreshType.Items2" xml:space="preserve">
<value>Weekly</value>
</data>
<data name="CmbRefreshType.Items3" xml:space="preserve">
<value>Monthly</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblRefreshModeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 17</value>
</data>
<data name="LblRefreshModeLabel.Text" xml:space="preserve">
<value>Refresh:</value>
</data>
<data name="LblBuyLevelLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblBuyLevelLabel.Text" xml:space="preserve">
<value>Buy level:</value>
</data>
<data name="LblEndTimeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblEndTimeLabel.Text" xml:space="preserve">
<value>End time:</value>
</data>
<data name="LblBeginTimeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 17</value>
</data>
<data name="LblBeginTimeLabel.Text" xml:space="preserve">
<value>Begin time:</value>
</data>
<data name="LblCostItem4Label.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblCostItem4Label.Text" xml:space="preserve">
<value>Cost item 4:</value>
</data>
<data name="LblCostItem3Label.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblCostItem3Label.Text" xml:space="preserve">
<value>Cost item 3:</value>
</data>
<data name="LblCostItem2Label.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblCostItem2Label.Text" xml:space="preserve">
<value>Cost item 2:</value>
</data>
<data name="LblCostItem1Label.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblCostItem1Label.Text" xml:space="preserve">
<value>Cost item 1:</value>
</data>
<data name="LblCostMcoinLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>45, 298</value>
</data>
<data name="LblCostMcoinLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblCostMcoinLabel.Text" xml:space="preserve">
<value>Cost Mcion:</value>
</data>
<data name="LblCostScoinLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 17</value>
</data>
<data name="LblCostScoinLabel.Text" xml:space="preserve">
<value>Cost Scion:</value>
</data>
<data name="LblCostHcoinLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 17</value>
</data>
<data name="LblCostHcoinLabel.Text" xml:space="preserve">
<value>Cost Hcion:</value>
</data>
<data name="LblBuyLimitLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LblBuyLimitLabel.Text" xml:space="preserve">
<value>Buy limit:</value>
</data>
<data name="LblGoodsIdLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblGoodsIdLabel.Text" xml:space="preserve">
<value>GoodsId:</value>
</data>
<data name="LblGoodsItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>
<data name="LblGoodsItemLabel.Text" xml:space="preserve">
<value>Goods:</value>
</data>
<data name="LnkGenGoodsId.Size" type="System.Drawing.Size, System.Drawing">
<value>78, 17</value>
</data>
<data name="LnkGenGoodsId.Text" xml:space="preserve">
<value>Generate ID</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Load</value>
</data>
<data name="LblShopPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 17</value>
</data>
<data name="LblShopPathLabel.Text" xml:space="preserve">
<value>Shop.json Path:</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,274 @@
<?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="GrpShopList.Text" xml:space="preserve">
<value>Список магазинов</value>
</data>
<data name="GrpGoodsList.Text" xml:space="preserve">
<value>Список товаров</value>
</data>
<data name="BtnClearGoods.Text" xml:space="preserve">
<value>× Очистить</value>
</data>
<data name="BtnDeleteGoods.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="GrpItems.Text" xml:space="preserve">
<value>Список предметов</value>
</data>
<data name="GrpGoodsInfo.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="BtnSaveGoods.Location" type="System.Drawing.Point, System.Drawing">
<value>74, 472</value>
</data>
<data name="BtnSaveGoods.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 30</value>
</data>
<data name="BtnSaveGoods.Text" xml:space="preserve">
<value>√ Добавить или обновить</value>
</data>
<data name="LblRefreshModeLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 211</value>
</data>
<data name="LblRefreshModeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>118, 17</value>
</data>
<data name="LblRefreshModeLabel.Text" xml:space="preserve">
<value>Обновить режим:</value>
</data>
<data name="LblBuyLevelLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblBuyLevelLabel.Text" xml:space="preserve">
<value>Buy level:</value>
</data>
<data name="LblEndTimeLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 183</value>
</data>
<data name="LblEndTimeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 17</value>
</data>
<data name="LblEndTimeLabel.Text" xml:space="preserve">
<value>Время окончания:</value>
</data>
<data name="LblBeginTimeLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 156</value>
</data>
<data name="LblBeginTimeLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 17</value>
</data>
<data name="LblBeginTimeLabel.Text" xml:space="preserve">
<value>Время начала:</value>
</data>
<data name="LblCostItem4Label.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 17</value>
</data>
<data name="LblCostItem4Label.Text" xml:space="preserve">
<value>Cast item 4:</value>
</data>
<data name="LblCostItem3Label.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 17</value>
</data>
<data name="LblCostItem3Label.Text" xml:space="preserve">
<value>Cast item 3:</value>
</data>
<data name="LblCostItem2Label.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 17</value>
</data>
<data name="LblCostItem2Label.Text" xml:space="preserve">
<value>Cast item 2:</value>
</data>
<data name="LblCostItem1Label.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 17</value>
</data>
<data name="LblCostItem1Label.Text" xml:space="preserve">
<value>Cast item 1:</value>
</data>
<data name="LblCostMcoinLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>46, 298</value>
</data>
<data name="LblCostMcoinLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 17</value>
</data>
<data name="LblCostMcoinLabel.Text" xml:space="preserve">
<value>Кристалл:</value>
</data>
<data name="LblCostScoinLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>67, 269</value>
</data>
<data name="LblCostScoinLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 17</value>
</data>
<data name="LblCostScoinLabel.Text" xml:space="preserve">
<value>Мора:</value>
</data>
<data name="LblCostHcoinLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 240</value>
</data>
<data name="LblCostHcoinLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 17</value>
</data>
<data name="LblCostHcoinLabel.Text" xml:space="preserve">
<value>Камень Истока:</value>
</data>
<data name="LblBuyLimitLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LblBuyLimitLabel.Text" xml:space="preserve">
<value>Buy limit:</value>
</data>
<data name="LblGoodsIdLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 17</value>
</data>
<data name="LblGoodsIdLabel.Text" xml:space="preserve">
<value>Goods Id:</value>
</data>
<data name="LblGoodsItemLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>
<data name="LblGoodsItemLabel.Text" xml:space="preserve">
<value>Goods:</value>
</data>
<data name="LnkGenGoodsId.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 17</value>
</data>
<data name="LnkGenGoodsId.Text" xml:space="preserve">
<value>Создать ID</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>Сохранять</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Загрузить</value>
</data>
<data name="TxtShopJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 12</value>
</data>
<data name="TxtShopJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>516, 23</value>
</data>
<data name="LblShopPathLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 17</value>
</data>
<data name="LblShopPathLabel.Text" xml:space="preserve">
<value>Shop.json дорожка:</value>
</data>
</root>

View File

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

View File

@@ -18,7 +18,6 @@
**/
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;

View File

@@ -0,0 +1,94 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 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.GOOD
{
/// <summary>
/// Artifact data representation
/// 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
{
/// <summary>
/// e.g. "GladiatorsFinale"
/// </summary>
[JsonProperty("setKey")]
public string SetName { get; set; }
/// <summary>
/// //e.g. "plume"
/// type SlotKey = "flower" | "plume" | "sands" | "goblet" | "circlet"
/// </summary>
[JsonProperty("slotKey")]
public string GearSlot { get; set; }
/// <summary>
/// 1-5 inclusive
/// </summary>
[JsonProperty("rarity")]
public int Rarity { get; set; }
/// <summary>
/// mainStatKey
/// </summary>
[JsonProperty("mainStatKey")]
public string MainStat { get; set; }
/// <summary>
/// 0-20 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// substats
/// </summary>
[JsonProperty("substats")]
public SubStat[] SubStats { get; set; }
/// <summary>
/// where "" means not equipped.
/// </summary>
[JsonProperty("location")]
public string EquippedCharacter { get; set; }
/// <summary>
/// Whether the artifact is locked in game.
/// </summary>
[JsonProperty("lock")]
public bool Lock { get; set; }
public struct SubStat
{
/// <summary>
/// e.g. "critDMG_"
/// </summary>
[JsonProperty("key")]
public string Stat { get; set; }
/// <summary>
/// e.g. 19.4
/// </summary>
[JsonProperty("value")]
public double Value { get; set; }
}
}
}

View File

@@ -0,0 +1,72 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 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.GOOD
{
/// <summary>
/// Character data representation
/// 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
{
/// <summary>
/// e.g. "Rosaria"
/// </summary>
[JsonProperty("key")]
public string Name { get; set; }
/// <summary>
/// 1-90 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// 0-6 inclusive
/// </summary>
[JsonProperty("constellation")]
public int Constellation { get; set; }
/// <summary>
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
/// </summary>
[JsonProperty("ascension")]
public int Ascension { get; set; }
/// <summary>
/// does not include boost from constellations. 1-15 inclusive
/// </summary>
[JsonProperty("talent")]
public Talents Talents { get; set; }
}
public struct Talents
{
[JsonProperty("auto")]
public int Auto { get; set; }
[JsonProperty("skill")]
public int Skill { get; set; }
[JsonProperty("burst")]
public int Burst { get; set; }
}
}

View File

@@ -0,0 +1,63 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Genshin Open Object Description (GOOD)
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/data/GOOD.cs
///
/// Available for
/// https://frzyc.github.io/genshin-optimizer/
/// https://github.com/Andrewthe13th/Inventory_Kamera
/// https://genshin.aspirine.su/
/// https://seelie.me/
/// https://github.com/daydreaming666/Amenoma
/// https://www.mona-uranai.com/
/// https://genshin.mingyulab.com/
/// https://genshin-center.com/
/// </summary>
public class GOOD
{
[JsonProperty("format")]
public string Format { get; set; }
[JsonProperty("version")]
public int Version { get; set; }
[JsonProperty("source")]
public string Source { get; set; }
[JsonProperty("weapons", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List<Weapon> Weapons { get; set; }
[JsonProperty("artifacts", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List<Artifact> Artifacts { get; set; }
[JsonProperty("characters", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List<Character> Characters { get; set; }
[JsonProperty("materials", DefaultValueHandling = DefaultValueHandling.Ignore)]
public Dictionary<string, int> Materials { get; set; }
}
}

View File

@@ -0,0 +1,108 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
using GrasscutterTools.Game;
using GrasscutterTools.Properties;
namespace GrasscutterTools.GOOD
{
public static class GOODData
{
static GOODData()
{
var cultureInfo = CultureInfo.GetCultureInfo("en-US");
var regex = new Regex(@"[\W]", RegexOptions.Compiled);
Dictionary<string, int> ToGOODMap(ItemMap itemMap)
{
var dic = new Dictionary<string, int>(itemMap.Count);
for (int i = 0; i < itemMap.Count; i++)
{
var name = itemMap.Names[i];
var pascalCase = cultureInfo.TextInfo.ToTitleCase(name);
var nameGOOD = regex.Replace(pascalCase, string.Empty);
dic[nameGOOD] = itemMap.Ids[i];
//dic.Add(nameGOOD, itemMap.Ids[i]);
}
return dic;
}
var artifactCats = new ItemMap(Resources.ResourceManager.GetString("ArtifactCat", cultureInfo));
var avatars = new ItemMap(Resources.ResourceManager.GetString("Avatar", cultureInfo));
var weapons = new ItemMap(Resources.ResourceManager.GetString("Weapon", cultureInfo));
ArtifactCats = ToGOODMap(artifactCats);
Avatars = ToGOODMap(avatars);
Weapons = ToGOODMap(weapons);
}
public static Dictionary<string, int> ArtifactCats { get; private set; }
public static Dictionary<string, int> ArtifactSlotMap = new Dictionary<string, int> {
{"goblet", 1}, {"plume", 2}, {"circlet", 3}, {"flower", 4}, {"sands", 5}
};
public static Dictionary<string, int> ArtifactMainAttribution { get; } = new Dictionary<string, int>
{
{ "hp" , 10001 },
{ "hp_" , 10002 },
{ "atk" , 10003 },
{ "atk_" , 10004 },
{ "def" , 10005 },
{ "def_" , 10006 },
{ "enerRech_" , 10007 },
{ "eleMas" , 10008 },
{ "critRate_" , 13007 },
{ "critDMG_" , 13008 },
{ "heal_" , 13009 },
{ "pyro_dmg_" , 15008 },
{ "electro_dmg_" , 15009 },
{ "cryo_dmg_" , 15010 },
{ "hydro_dmg_" , 15011 },
{ "anemo_dmg_" , 15012 },
{ "geo_dmg_" , 15013 },
{ "dendro_dmg_" , 15014 },
{ "physical_dmg_", 15015 },
};
public static Dictionary<string, int> ArtifactSubAttribution { get; } = new Dictionary<string, int>
{
{ "hp" , 102 },
{ "hp_" , 103 },
{ "atk" , 105 },
{ "atk_" , 106 },
{ "def" , 108 },
{ "def_" , 109 },
{ "critRate_", 120 },
{ "critDMG_" , 122 },
{ "enerRech_", 123 },
{ "eleMas" , 124 },
};
public static Dictionary<string, int> Avatars { get; private set; }
public static Dictionary<string, int> Weapons { get; private set; }
}
}

View File

@@ -0,0 +1,68 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 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.ComponentModel;
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Weapon data representation
/// 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
{
/// <summary>
/// e.g. "CrescentPike"
/// </summary>
[JsonProperty("key")]
public string Name { get; set; }
/// <summary>
/// 1-90 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
/// </summary>
[JsonProperty("ascension")]
public int AscensionLevel { get; set; }
/// <summary>
/// 1-5 inclusive
/// </summary>
[JsonProperty("refinement")]
public int RefinementLevel { get; set; }
/// <summary>
/// where "" means not equipped.
/// </summary>
[JsonProperty("location")]
[DefaultValue("")]
public string EquippedCharacter { get; set; }
/// <summary>
/// Whether the weapon is locked in game.
/// </summary>
[JsonProperty("lock")]
public bool Lock { get; set; }
}
}

View File

@@ -0,0 +1,143 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System;
namespace GrasscutterTools.Game
{
/// <summary>
/// 命令版本
///
/// 用法:
/// ver = Version.TryParse(input, out Version current) ? new CommandVersion(current) : CommandVersion.Latest();
///
/// </summary>
internal class CommandVersion
{
/// <summary>
/// 初始化当前版本
/// </summary>
/// <param name="current"></param>
public CommandVersion(Version current)
{
this.current = current ?? throw new ArgumentNullException(nameof(current));
}
private Version current;
/// <summary>
/// 当前命令版本
/// </summary>
public Version Current
{
get => current;
set
{
if (current != value)
{
current = value;
OnVersionChanged();
}
}
}
/// <summary>
/// 选中版本改变事件
/// </summary>
public event EventHandler VersionChanged;
/// <summary>
/// 触发版本更改事件
/// </summary>
private void OnVersionChanged() => VersionChanged?.Invoke(this, EventArgs.Empty);
/// <summary>
/// 当前支持的最新版本 - 当未选择版本时,默认为最新版本
/// </summary>
public static CommandVersion Latest() => new CommandVersion(List[List.Length - 1]);
#region - Version List -
// 忽略更早以前的版本
/// <summary>
/// v1.2.1 2022/6/18
/// git 30c7bb94439a123417a6a1e0116acd3c40f2d115
/// </summary>
public static readonly Version V1_2_1 = new Version(1, 2, 1);
/// <summary>
/// v1.2.1 -> v1.2.2 2022/6/22
/// git aa43943025fefcda9739c9fcf242e67f1a7b83b4
/// </summary>
public static readonly Version V1_2_2 = new Version(1, 2, 2);
/// <summary>
/// v1.2.2 -> v1.2.3 2022/7/21
/// git a07b3f21e6fbeb9abfad8862d6fa0dc4a1c3c1a3
/// </summary>
public static readonly Version V1_2_3 = new Version(1, 2, 3);
/// <summary>
/// v1.2.3 -> v1.3.0 2022/9/3 - stable
/// git 155501058fcce109489a19db37d0513d2235e08e
/// </summary>
public static readonly Version V1_3_0 = new Version(1, 3, 0);
/// <summary>
/// v1.3.0 -> v1.3.1 2022/9/3
/// git 6cf83b30eeaa98a68de2d786d7ca85ae21a95e32
/// </summary>
public static readonly Version V1_3_1 = new Version(1, 3, 1);
/// <summary>
/// 2022/10/13
/// </summary>
public static readonly Version V1_4_0 = new Version(1, 4, 0);
/// <summary>
/// 2022/10/18
/// </summary>
public static readonly Version V1_4_1 = new Version(1, 4, 1);
/// <summary>
/// 2022/10/27
/// </summary>
public static readonly Version V1_4_2 = new Version(1, 4, 2);
// More...
/// <summary>
/// 2022/10/18
/// </summary>
//public static readonly Version V1_4_3 = new Version(1, 4, 2);
public static Version[] List { get; } = new Version[] {
V1_2_1,
V1_2_2,
V1_2_3,
V1_3_0,
V1_3_1,
V1_4_0,
V1_4_1,
V1_4_2,
//V1_4_3,
};
#endregion - Version List -
}
}

View File

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

View File

@@ -0,0 +1,39 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Drop
{
internal class DropInfo
{
/// <summary>
/// 怪物ID
/// </summary>
[JsonProperty("monsterId")]
public int MonsterId { get; set; }
/// <summary>
/// 掉落列表
/// </summary>
[JsonProperty("dropDataList")]
public List<DropData> DropDataList { get; set; } = new List<DropData>();
}
}

View File

@@ -16,8 +16,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.ComponentModel;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
@@ -86,6 +84,12 @@ namespace GrasscutterTools.Game.Gacha
[JsonProperty("sortId")]
public int SortId { get; set; } = 1000;
/// <summary>
/// 抽卡次数限制
/// </summary>
[JsonProperty("gachaTimesLimit")]
public int GachaTimesLimit { get; set; } = int.MaxValue;
/// <summary>
/// 4星的up角色或物品
/// </summary>

View File

@@ -24,7 +24,6 @@ namespace GrasscutterTools.Game
{
public static void LoadResources()
{
Animals = new ItemMap(Resources.Animal);
Artifacts = new ItemMap(Resources.Artifact);
ArtifactCats = new ItemMap(Resources.ArtifactCat);
ArtifactMainAttribution = new ItemMap(Resources.ArtifactMainAttribution);
@@ -32,16 +31,16 @@ namespace GrasscutterTools.Game
Avatars = new ItemMap(Resources.Avatar);
AvatarColors = new ItemMap(Resources.AvatarColor);
Items = new ItemMap(Resources.Item);
Monsters = new ItemMap(Resources.Monster);
NPCs = new ItemMap(Resources.NPC);
Monsters = new ItemMapGroup(Resources.Monsters);
Gatgets = new ItemMapGroup(Resources.Gadget);
Scenes = new ItemMap(Resources.Scene);
Weapons = new ItemMap(Resources.Weapon);
WeaponColors = new ItemMap(Resources.WeaponColor);
GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
Quests = new ItemMap(Resources.Quest);
ShopType = new ItemMap(Resources.ShopType);
}
public static ItemMap Animals { get; private set; }
public static ItemMap Artifacts { get; private set; }
@@ -57,9 +56,9 @@ namespace GrasscutterTools.Game
public static ItemMap Items { get; private set; }
public static ItemMap Monsters { get; private set; }
public static ItemMapGroup Monsters { get; private set; }
public static ItemMap NPCs { get; private set; }
public static ItemMapGroup Gatgets { get; private set; }
public static ItemMap Scenes { get; private set; }
@@ -70,5 +69,7 @@ namespace GrasscutterTools.Game
public static ItemMap GachaBannerPrefabs { get; private set; }
public static ItemMap Quests { get; private set; }
public static ItemMap ShopType { get; private set; }
}
}

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