Compare commits

..

105 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
174 changed files with 42719 additions and 30813 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: 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)
本工具支持 简中, 繁中, English Русский 等语言。
Support 简体中文, 繁体中文, English and Русский languages.
## 远程执行
Welcome everyone to improve the [ID Resource](/Source/GrasscutterTools/Resources/en-us).
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
## 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)
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
>
> 建议配置服务器为HTTP模式如图所示(config.json)
> 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)
>
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
>
> 如果使用的不是`80`端口则要在url中指定访问的端口号http://127.0.0.1:443
> 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
---
## 软件截图
## 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)
Support 简中, 繁中, English and Русский languages.
## 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
---
## 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,28 +4,40 @@
[![GitHub звёзды](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github ВСЕ выпуски](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[中文](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).
Support 简中, 繁中, English and Русский languages.
GCG поддерживает 简体中文 (китайский упр.), 繁体中文 (китайский трад.), English (английский) и Русский языки.
## Удаленная команда
Приглашаем всех улучшить [ID ресурсов и перевод](/Source/GrasscutterTools/Resources/ru-ru)
Сервер требует [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) помощь
## 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)
> If you cannot connect to the server, please make sure the server address is correct.
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
>
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
>
> 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
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
>
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
---
@@ -35,28 +47,30 @@ Support 简中, 繁中, English and Русский languages.
![Главная](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

@@ -128,7 +128,7 @@
<value>Auto</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>Command (Press and hold Ctrl to run automatically)</value>
<value>Command - [Ctrl] Autorun - [|] Split multiple commands</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Run(F5)</value>
@@ -227,13 +227,13 @@
<value>Note that normal commands in the console state must specify the target (set include UID)</value>
</data>
<data name="TxtHost.Location" type="System.Drawing.Point, System.Drawing">
<value>111, 36</value>
<value>136, 36</value>
</data>
<data name="TxtHost.Size" type="System.Drawing.Size, System.Drawing">
<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>
@@ -251,10 +251,15 @@
<value>About</value>
</data>
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 17</value>
<value>387, 102</value>
</data>
<data name="LblSupportDescription.Text" xml:space="preserve">
<value>Grasscutter Tools</value>
<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>
@@ -325,9 +330,15 @@
<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>
@@ -358,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' pin on the map in-game.
In the command, you can use ~ to indicate the current position, and ~100 to indicate the relative current 100</value>
</data>
<data name="LblTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>219, 184</value>
</data>
@@ -409,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>
@@ -418,6 +415,20 @@ In the command, you can use ~ to indicate the current position, and ~100 to indi
<data name="LblSceneDescription.Text" xml:space="preserve">
<value>Scene control
Tip: Most of the scenes have no effect and cannot be entered.</value>
</data>
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="LblTp.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 89</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>337, 90</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>Teleporting
Tip: You can quickly teleport through the 'fishing hook' pin on the map in-game.
In the command, you can use ~ to indicate the current position, and ~N to indicate the relative current N</value>
</data>
<data name="TPItem.Text" xml:space="preserve">
<value>Items</value>
@@ -476,6 +487,9 @@ Tip: Most of the scenes have no effect and cannot be entered.</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>86, 17</value>
</data>
@@ -515,36 +529,48 @@ 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="TPStats.Text" xml:space="preserve">
<value>Stats</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>
<data name="LblResetStatsTip.Text" xml:space="preserve">
<value>the current character's stats will be reset</value>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>Set current</value>
</data>
<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="GrpTalentLevel.Text" xml:space="preserve">
<value>Talent Level</value>
</data>
<data name="LnkTalentAll.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 24</value>
</data>
<data name="LnkTalentAll.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
</data>
<data name="LnkTalentAll.Text" xml:space="preserve">
<value>All</value>
</data>
<data name="LnkTalentE.Location" type="System.Drawing.Point, System.Drawing">
<value>283, 24</value>
</data>
@@ -573,50 +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="LblStatsDescription.Size" type="System.Drawing.Size, System.Drawing">
<value>179, 17</value>
</data>
<data name="LblStatsDescription.Text" xml:space="preserve">
<value>Set current active Avatar data</value>
</data>
<data name="TPAvatar.Text" xml:space="preserve">
<value>Avatar</value>
<value>96, 23</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>Give All Char</value>
</data>
<data name="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.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="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="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="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>
@@ -635,24 +661,6 @@ Tip: Most of the scenes have no effect and cannot be entered.</value>
<data name="GrpEntityType.Text" xml:space="preserve">
<value>Class</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="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>
@@ -722,7 +730,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -737,7 +745,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -746,7 +754,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -755,7 +763,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -773,7 +781,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -782,7 +790,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -800,7 +808,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -809,7 +817,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<value>Restore</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>
@@ -818,7 +826,7 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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>
@@ -827,11 +835,20 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<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="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>
</data>
@@ -865,4 +882,97 @@ Therefore, the quest can be added and finished, but not necessarily work.</value
<data name="ChkIncludeUID.Text" xml:space="preserve">
<value>Include UID</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>Mail</value>
</data>
<data name="BtnAddMailItem.Text" xml:space="preserve">
<value>+ Add</value>
</data>
<data name="BtnDeleteMailItem.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="tabPage1.Text" xml:space="preserve">
<value>Items</value>
</data>
<data name="NUDMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 4</value>
</data>
<data name="NUDMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 4</value>
</data>
<data name="LblMailItemCount.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 6</value>
</data>
<data name="LblMailItemCount.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="LblMailItemCount.Text" xml:space="preserve">
<value>Count:</value>
</data>
<data name="LblMailItemLevel.Location" type="System.Drawing.Point, System.Drawing">
<value>123, 6</value>
</data>
<data name="LblMailItemLevel.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 17</value>
</data>
<data name="LblMailItemLevel.Text" xml:space="preserve">
<value>Level:</value>
</data>
<data name="tabPage2.Text" xml:space="preserve">
<value>Mailbox</value>
</data>
<data name="BtnClearMail.Location" type="System.Drawing.Point, System.Drawing">
<value>84, 4</value>
</data>
<data name="BtnClearMail.Text" xml:space="preserve">
<value>× Clear</value>
</data>
<data name="BtnRemoveMail.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 4</value>
</data>
<data name="BtnRemoveMail.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="BtnSendMail.Text" xml:space="preserve">
<value>Send</value>
</data>
<data name="LblMailItemsLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 17</value>
</data>
<data name="LblMailItemsLabel.Text" xml:space="preserve">
<value>Items:</value>
</data>
<data name="RbMailSendToPlayer.Size" type="System.Drawing.Size, System.Drawing">
<value>61, 21</value>
</data>
<data name="RbMailSendToPlayer.Text" xml:space="preserve">
<value>Player</value>
</data>
<data name="RbMailSendToAll.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 21</value>
</data>
<data name="RbMailSendToAll.Text" xml:space="preserve">
<value>All</value>
</data>
<data name="LblMailRecipientLabel.Text" xml:space="preserve">
<value>Send to:</value>
</data>
<data name="LblMailContentLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="LblMailContentLabel.Text" xml:space="preserve">
<value>Content:</value>
</data>
<data name="LblMailTitleLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 17</value>
</data>
<data name="LblMailTitleLabel.Text" xml:space="preserve">
<value>Title:</value>
</data>
<data name="LblMailSenderLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblMailSenderLabel.Text" xml:space="preserve">
<value>Sender:</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -123,11 +123,14 @@
<data name="ChkAutoCopy.Text" xml:space="preserve">
<value>自動</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令 - [Ctrl] 自動執行 - [|] 分割多條命令</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>執行(F5)</value>
</data>
<data name="GrpCommand.Text" xml:space="preserve">
<value>命令(按住 Ctrl 自動執行)</value>
<data name="TPRemoteCall.Text" xml:space="preserve">
<value>遠程</value>
</data>
<data name="LnkInventoryKamera.Text" xml:space="preserve">
<value>存檔掃描開源工具</value>
@@ -145,6 +148,9 @@
<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>
@@ -154,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>
@@ -169,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>
@@ -179,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>割草機工具箱
@@ -199,15 +205,15 @@
如果願意請我喝一杯奶茶,那就更好了 : )
指令生成有問題或者有新的功能請求都可以來Github提出</value>
</data>
<data name="TPAbout.Text" xml:space="preserve">
<value>關於</value>
</data>
<data name="BtnBan.Text" xml:space="preserve">
<value>封號</value>
</data>
<data name="LblBanUID.Text" xml:space="preserve">
<value>目標UID</value>
</data>
<data name="GrpAccount.Text" xml:space="preserve">
<value>賬號管理</value>
</data>
<data name="BtnDeleteAccount.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
@@ -217,8 +223,8 @@
<data name="LblAccountUserName.Text" xml:space="preserve">
<value>用戶名</value>
</data>
<data name="GrpAccount.Text" xml:space="preserve">
<value>賬號管理</value>
<data name="GrpPermission.Text" xml:space="preserve">
<value>權限管理</value>
</data>
<data name="LblPerm.Text" xml:space="preserve">
<value>權限</value>
@@ -226,17 +232,12 @@
<data name="LblPermUID.Text" xml:space="preserve">
<value>目標UID</value>
</data>
<data name="GrpPermission.Text" xml:space="preserve">
<value>權限管理</value>
<data name="TPScene.Text" xml:space="preserve">
<value>場景</value>
</data>
<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>
@@ -248,8 +249,13 @@
提示:大部分場景沒有作用,無法進入。</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>場景</value>
<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>
@@ -270,6 +276,9 @@
<value>給玩家指定物品
說明:可選擇直接給到背包或者掉落到世界</value>
</data>
<data name="BtnGiveAllWeapons.Text" xml:space="preserve">
<value>獲得所有武器</value>
</data>
<data name="LblWeaponDescription.Text" xml:space="preserve">
<value>獲取武器
@@ -290,26 +299,29 @@
<data name="LblWeaponLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="LblResetStatsCommand.Text" xml:space="preserve">
<value>獲得角色經驗時</value>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>設置命座</value>
</data>
<data name="LblResetStatsTip.Text" xml:space="preserve">
<value>當前角色屬性將會重置</value>
<data name="LnkSetAllConst.Text" xml:space="preserve">
<value>設置所有角色</value>
</data>
<data name="LnkSetConst.Text" xml:space="preserve">
<value>設置當前角色</value>
</data>
<data name="GrpSetStats.Text" xml:space="preserve">
<value>角色屬性</value>
</data>
<data name="LnkTalentNormalATK.Text" xml:space="preserve">
<value>普通攻擊</value>
<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="LblStatsDescription.Text" xml:space="preserve">
<value>設置當前活躍角色數據</value>
</data>
<data name="TPStats.Text" xml:space="preserve">
<value>數據</value>
<data name="LnkTalentNormalATK.Text" xml:space="preserve">
<value>普通攻擊</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>一鍵獲得所有角色</value>
@@ -317,6 +329,12 @@
<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>
@@ -326,24 +344,21 @@
<data name="GrpSpawnRecord.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="GrpEntityType.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>
<data name="LblEntityLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>任務</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>列表過濾</value>
</data>
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
<value>測試任務</value>
</data>
@@ -353,9 +368,6 @@
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
<value>隱藏的任務</value>
</data>
<data name="GrpQuestFilters.Text" xml:space="preserve">
<value>列表過濾</value>
</data>
<data name="BtnFinishQuest.Text" xml:space="preserve">
<value>完成任務</value>
</data>
@@ -367,8 +379,8 @@
提示:許多任務需要服務端腳本支持
囙此任務可以接,可以完成,但是不一定可以做</value>
</data>
<data name="TPQuest.Text" xml:space="preserve">
<value>任務</value>
<data name="TPArtifact.Text" xml:space="preserve">
<value>聖遺物</value>
</data>
<data name="LblArtifactSet.Text" xml:space="preserve">
<value>套裝</value>
@@ -385,8 +397,8 @@
<data name="LblArtifactStars.Text" xml:space="preserve">
<value>星級</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>聖遺物</value>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定義</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>導出</value>
@@ -400,8 +412,14 @@
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 刪除</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定義</value>
<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>
@@ -412,7 +430,46 @@
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置頂</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>主頁</value>
<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

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

View File

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

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

View File

@@ -16,6 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System;
using System.Collections.Generic;
namespace GrasscutterTools.Game
@@ -24,9 +25,9 @@ namespace GrasscutterTools.Game
{
public ItemMap(string idNamePairs)
{
var lines = idNamePairs.Split('\n');
var lines = idNamePairs.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
var capacity = lines.Length;
//IdMap = new Dictionary<int, string>(capacity);
IdMap = new Dictionary<int, string>(capacity);
//NameMap = new Dictionary<string, int>(capacity);
var IdList = new List<int>(capacity);
var NameList = new List<string>(capacity);
@@ -40,7 +41,7 @@ namespace GrasscutterTools.Game
var name = line.Substring(si + 1).Trim();
if (!string.IsNullOrEmpty(name) && name != "null")
{
//IdMap[id] = name;
IdMap[id] = name;
//NameMap[name] = id;
IdList.Add(id);
NameList.Add(name);
@@ -54,15 +55,14 @@ namespace GrasscutterTools.Game
Lines = lineList.ToArray();
}
//Dictionary<int, string> IdMap;
//Dictionary<string, int> NameMap;
//List<int> IdList;
//List<string> NameList;
private readonly Dictionary<int, string> IdMap;
//private readonly Dictionary<string, int> NameMap;
public int Count => Ids.Length;
//public string this[int id] => IdMap[id];
public string this[int id] => IdMap.TryGetValue(id, out string name) ? name : EmptyName;
public static string EmptyName = "???";
//public int this[string name] => NameMap[name];
public int[] Ids { get; }
@@ -70,5 +70,15 @@ namespace GrasscutterTools.Game
public string[] Names { get; }
public string[] Lines { get; }
public static int ToId(string line) => int.Parse(line.Substring(0, line.IndexOf(':')).Trim());
public static bool TryToId(string line, out int id)
{
id = 0;
var sp = line.IndexOf(':');
if (sp == -1) return false;
return int.TryParse(line.Substring(0, sp).Trim(), out id);
}
}
}

View File

@@ -0,0 +1,66 @@
/**
* 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.Linq;
namespace GrasscutterTools.Game
{
/// <summary>
/// ID映射组Key为分类双斜杠构造
/// </summary>
public class ItemMapGroup : Dictionary<string, ItemMap>
{
public ItemMapGroup(string idNamePairs)
{
for (int i = 0; i < idNamePairs.Length;)
{
var categoryLineStartIndex = idNamePairs.IndexOf("//", i);
if (categoryLineStartIndex == -1)
break;
var categoryLineEndIndex = idNamePairs.IndexOf('\n', categoryLineStartIndex);
if (categoryLineEndIndex == -1)
break;
var category = idNamePairs.Substring(categoryLineStartIndex+2, categoryLineEndIndex - categoryLineStartIndex - 3).Trim();
var nextStartIndex = idNamePairs.IndexOf("//", categoryLineEndIndex);
if (nextStartIndex == -1)
{
var itemMap = new ItemMap(idNamePairs.Substring(categoryLineEndIndex + 1));
if (itemMap.Count > 0)
Add(category, itemMap);
break;
}
else
{
var pairs = idNamePairs.Substring(categoryLineEndIndex + 1, nextStartIndex - categoryLineEndIndex - 1);
var itemMap = new ItemMap(pairs);
if (itemMap.Count > 0)
Add(category, itemMap);
i = nextStartIndex;
}
}
}
/// <summary>
/// 获取所有行
/// </summary>
public IEnumerable<string> AllLines => Values.SelectMany(it => it.Lines);
}
}

View File

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

View File

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

View File

@@ -0,0 +1,42 @@
/**
* 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/>.
*
**/
namespace GrasscutterTools.Game.Player
{
/// <summary>
/// 玩家数据
/// </summary>
internal class PlayerData
{
/// <summary>
/// 升到下一级所需经验,索引为当前等级
/// </summary>
public static int[] LevelExp = new int[]
{
0, 375, 500, 625, 725, 850, 950, 1075, 1200, 1300, 1425, 1525, 1650, 1775, 1875, 2000, 2375, 2500, 2625,
2775, 2825, 3425, 3725, 4000, 4300, 4575, 4875, 5150, 5450, 5725, 6025, 6300, 6600, 6900, 7175, 7475, 7750,
8050, 8325, 8625, 10550, 11525, 12475, 13450, 14400, 15350, 16325, 17275, 18250, 19200, 26400, 28800, 31200,
33600, 36000, 232350, 258950, 285750, 312825, 340125, 0,
};
/// <summary>
/// 玩家最大等级数
/// </summary>
public const int PlayerMaxLevel = 60;
}
}

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