Compare commits

..

165 Commits

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

* Optimized implementation

* Add available urls

* Add prompt

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

* Updated Mora command and added /stop command

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

* Added and updated permissions

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

* Updating grammar

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

* Replacing "Topmost" to "Always on top"
2022-07-11 22:44:27 +08:00
Asayu233
9e69037972 Fix some bugs (#80) 2022-07-08 15:14:28 +08:00
Asayu233
973cbead42 [zh-tw] Add Traditional Chinese (#79)
* Add Traditional Chinese Game Resources

* Update .csproj include zh-tw files
Remove test avatars

* Remove give avatar warning label

* Update version to 1.5.1

* Add FormMain.zh-TW.resx
Add Resources.zh-TW.resx

* Add FormGachaBannerEditor2.zh-TW.resx
Add FormTextMapBrowser.zh-TW.resx

* Update todo list

Completed traditional Chinese Translation

* Fix long avatar id issue

Co-authored-by: 筱傑 <jie65535@qq.com>
2022-07-06 20:40:08 +08:00
0c0f9fc03e fix word error 2022-07-04 22:31:29 +08:00
b15eea8d1b Update todo list 2022-07-04 20:11:32 +08:00
6b8b392d65 Update TODO List 2022-07-03 22:27:04 +08:00
Asayu233
dfd93fcdb0 Optimize: Chapter 3 (#77)
* Optimize: Chapter 3

not done

* Optimize: Chapter 3

not done

* Update FormMain.en-us.resx

* Update FormMain.ru-ru.resx

* Update FormMain.Designer.cs

* Update FormMain.resx

* Update GameData.cs

* Update FormMain.cs

* Delete Ornament.txt

* Delete Ornament.txt

* Delete Ornament.txt

* Update FormMain.cs

* Update FormMain.Designer.cs

* Update FormMain.resx

* Update FormMain.ru-ru.resx

* Update FormMain.en-us.resx

* Update FormMain

Fix Weapons search result id issue
Fix Resources errors

* Fix .csproj error

* Add /Announcement command

Co-authored-by: 筱傑 <jie65535@qq.com>
2022-07-03 22:16:20 +08:00
Asayu233
f80be7608c Optimize: Chapter 2 (#76)
* Update FormMain.cs

* Update FormMain.Designer.cs

* Update FormMain.en-us.resx

* Update FormMain.resx

* Update FormMain.ru-ru.resx

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update AvatarStats.json

* Update AvatarStats.json

* Update AvatarStats.json

* Update FormMain.cs

* Fix interface format problems

Co-authored-by: jie65535 <jie65535@qq.com>
2022-06-30 22:34:31 +08:00
12b8608a16 Update change scene command 2022-06-29 19:59:16 +08:00
Asayu233
f34e97c8c8 Optimize part of resource files. (#75)
* Update AvatarStats.json

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update Scene.txt

* Update Item.txt

* Update AvatarStats.json

* Update Item.txt

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update Item.txt

* Update CustomCommands.txt

* Update Scene.txt

* Update Scene.txt

* Update Scene.txt

* Update CustomCommands.txt

* Update AvatarStats.json
2022-06-29 19:51:32 +08:00
13d6109c8c Update SetProp Commands 2022-06-28 22:40:12 +08:00
14c455071b Update SetProp Commands 2022-06-28 22:34:07 +08:00
6e978543a6 Update Version to 1.5.0 2022-06-28 22:30:57 +08:00
23c0aff49f Update Give Commands 2022-06-28 22:29:06 +08:00
2bbe0e1a65 Update default command version setting to 1.2.2 2022-06-28 22:20:28 +08:00
f678b10171 Added Ban Command
Added TopMast CheckBox
Added GC Version CheckBox
2022-06-28 22:14:57 +08:00
cae6f73eeb Add unlimitenergy command 2022-06-11 10:42:31 +08:00
lhhxxxxx
66aa1bc8cb Add unlocktower command (#56)
* Update CustomCommands.txt

* Update CustomCommands.txt

* Update CustomCommands.txt

* Update CustomCommands.txt
2022-05-31 16:29:03 +08:00
19b637eee9 Update CN ID Maps 2022-05-31 13:31:46 +08:00
NekosakiSR
0377b0141a Update id's to current version (#54)
* Update Avatar.txt

* Update Weapon.txt

* Update Quest.txt

* Update Item.txt

* Update GachaBennerPrefab.txt

* Update Scene.txt
2022-05-31 12:37:31 +08:00
3e89c93589 Update Gacha Banner Editor Screenshot
Update editor UI
2022-05-21 23:46:24 +08:00
a3bb2c9cf4 Merge pull request #49 from yurikenjx/main
Translation update by @yurikenjx
2022-05-21 23:35:04 +08:00
yuri_dvaretski
da86e2672d Translation update by @yurikenjx
Translation update by @yurikenjx, no base 64 edit
2022-05-21 18:26:40 +03:00
110c1017e7 Fix Empty Copy (#47) 2022-05-21 19:49:51 +08:00
166f0b5fda i18n update 2022-05-21 16:40:20 +08:00
2de8a46bd5 fix en button miss bug 2022-05-21 16:35:59 +08:00
e90aaf6f97 fix ru button miss bug 2022-05-21 16:34:55 +08:00
b37ead7acf Update Banner json output format 2022-05-21 16:29:31 +08:00
ed9b393478 New banner editor (#44)
* Make basic interface framework (unfinished)

* Show Items

* Show Weights

* Update Weights

* Complete the new banner editor

* Simple supplementary English translation (unfinished)

* i18n Update

* Update version to v1.4.0

* Clean up code
2022-05-21 15:56:33 +08:00
037d2c4a5a Add Restore Custom Command Button
i18n Update
2022-05-21 15:48:27 +08:00
563cee5c4c Update server status max player 2022-05-21 09:28:10 +08:00
7f10eb8ac4 Move windows to /Fomrs 2022-05-19 20:51:13 +08:00
yuri_dvaretski
3c7a21cdbd localization update fix RUS (#41)
* Addition of shortcomings

Addition of shortcomings of the previous fix

* Update RU Translation by @yurikenjx and Dhar_Jinxed

New Update RU Translation by @yurikenjx and Dhar_Jinxed
2022-05-19 19:26:34 +08:00
f59a76e236 Add GachaBanner2.cs 2022-05-18 22:52:42 +08:00
9bc4c07112 Update Command log font size to 9 2022-05-18 21:51:35 +08:00
792ff48bb9 Update RU Translation by @yurikenjx and Dhar_Jinxed 2022-05-18 20:37:38 +08:00
21ac4151a7 Fix UI issue 2022-05-18 17:11:12 +08:00
06192a06fe Merge main branche 2022-05-18 17:02:04 +08:00
c69369857d Add Command Run log 2022-05-18 16:33:27 +08:00
17b055d898 Update version to v1.3.3 2022-05-18 16:32:12 +08:00
8da2e6a4c7 Fix Change language after log expansion issue 2022-05-18 16:31:35 +08:00
1006124f8a Fix ru resx issue 2022-05-18 16:30:14 +08:00
7155ecd05d Fix Change language after log expansion issue 2022-05-18 15:04:21 +08:00
fcfef2317b Update version to v1.3.3 2022-05-18 14:38:39 +08:00
407ee069c1 Add Command Run log 2022-05-18 14:38:22 +08:00
b798593cbb Update MainForm UI Base Framework 2022-05-18 12:10:36 +08:00
NekosakiSR
378f978000 Slight word changes and image updates (#38)
* Update images to the current version

* Changing wording

Slightly changing wording in 2 commands

* Add files via upload

* Add files via upload

* Update README_en-US.md

* Delete CustomWeapon.png

* Add files via upload

* Delete 1-CustomComands.png

* Add files via upload

* Update AvatarStats.json
2022-05-17 20:50:41 +08:00
3b5c5460f0 Update to EN translation 2022-05-17 15:03:27 +08:00
509db272a8 Merge pull request #36 from NekosakiSR/patch-6
Changes the names to match the in-game names
2022-05-17 15:00:39 +08:00
99db22a18e Merge pull request #35 from NekosakiSR/patch-5
Update to EN translation
2022-05-17 14:59:29 +08:00
NekosakiSR
e09f08018f Changes the names to match the in-game names 2022-05-17 02:55:04 -04:00
NekosakiSR
fc4124e35b Update to EN translation
Line 415-426 I don't know what these items are, so I just called them Home Flower. Feel free to remove them from the list since their just test items.

If you need help translating anything to English, you can point me to it, and I'll take my time translating :3
2022-05-17 02:52:26 -04:00
ac3b04eb52 Update Resources.ru-ru.resx 2022-05-17 13:51:19 +08:00
93104f7b8b Merge pull request #34 from NekosakiSR/patch-4
Update to EN translation
2022-05-17 13:50:13 +08:00
NekosakiSR
91b5e572a3 Update to EN translation
Didn't notice your message, here are the artifact part labels.

I will be working on the "Ornament" translations, the ornaments seems to be furnishing items. This will take me awhile to do as I wont be able to spawn them in-game without going in the Teapot, since the Teapot locations currently have no solid ground to see what the in-game translations are, also too lazy to see if there is a solid ground somewhere.
2022-05-17 01:40:19 -04:00
5c5108fe13 Support Russian by Юрий Дворецкий
Update version to v1.3.2
Add README-ru-RU
Add ru Screenshots
2022-05-17 13:31:43 +08:00
03b5d89410 Update README_en-US.md 2022-05-17 11:14:15 +08:00
239ade1402 Update README.md 2022-05-17 11:13:54 +08:00
180 changed files with 117030 additions and 57564 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 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: 23 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: 30 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.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 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.

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 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: 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: 114 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: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -3,69 +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)
中文 | [EN](README_en-US.md)
English | [简体中文](README_zh-cn.md) | [Русский](README_ru-RU.md)
## Commands Generator
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
## 远程执行
Support 简体中文, 繁体中文, English and Русский languages.
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
Welcome everyone to improve the [ID Resource](/Source/GrasscutterTools/Resources/en-us).
## Update log
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots-en/15-DropEditor.png)
![Mail Editor](Doc/Screenshots-en/16-MailEditor.png)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> If you cannot connect to the server, please make sure the server address is correct.
>
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
>
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
---
## TODO List
- [ ] 多语言支持进度UI已经支持英语但还有许多ID映射文件缺失欢迎补充
- [x] Animal.txt
- [x] Artifact.txt
- [ ] ArtifactCat.txt
- [ ] ArtifactMainAttribution.txt
- [ ] ArtifactSubAttribution.txt
- [x] Avatar.txt
- [x] CustomCommands.txt
- [x] Item.txt
- [x] Monster.txt
- [x] NPC.txt
- [ ] Ornament.txt
- [x] Scene.txt
- [x] Weapon.txt
- [ ] Quest.txt
- [x] 远程执行命令
- [ ] 邮件编辑器(无进度)
- [ ] 商店编辑器(无进度)
## 软件截图
## Screenshots
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots/0-Home.png)
![Home](Doc/Screenshots-en/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots/1-CustomCommands.png)
![Custom Commands Screenshot](Doc/Screenshots-en/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots/2-CustomArtifact.png)
![Custom Artifact Screenshot](Doc/Screenshots-en/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots/3-CustomWeapon.png)
![Custom Weapon Screenshort](Doc/Screenshots-en/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots/4-GiveItem.png)
![Give Item Screenshort](Doc/Screenshots-en/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots/5-GiveAvatar.png)
![Give Avatar Screenshort](Doc/Screenshots-en/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots/6-SpawnEntity.png)
![Spawn Entity Screenshort](Doc/Screenshots-en/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots/7-ChangeScene.png)
![Change Scene Screenshort](Doc/Screenshots-en/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots/8-CustomStats.png)
![Management](Doc/Screenshots-en/9-Manage.png)
![Management](Doc/Screenshots/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-en/10-GachaBannerEditor.png)
![GachaBannerEditor](Doc/Screenshots/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-en/11-TextMapBrowser.png)
![Text Map Browser](Doc/Screenshots/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots-en/12-Remote.png)
![Remote Screenshort](Doc/Screenshots/12-Remote.png)
![Quest Screenshort](Doc/Screenshots/13-Quest.png)
![Quest Screenshort](Doc/Screenshots-en/13-Quest.png)

View File

@@ -1,71 +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) | EN
## Commands Generator
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
---
## TODO List
- [ ] Multi-language support (progress: UI already supports English, but there are still many ID mapping files missing, welcome to add)
- [x] Animal.txt
- [x] Artifact.txt
- [ ] ArtifactCat.txt
- [ ] ArtifactMainAttribution.txt
- [ ] ArtifactSubAttribution.txt
- [x] Avatar.txt
- [x] CustomCommands.txt
- [x] Item.txt
- [x] Monster.txt
- [x] NPC.txt
- [ ] Ornament.txt
- [x] Scene.txt
- [x] Weapon.txt
- [ ] Quest.txt
- [x] Execute command remotely
- [ ] Mail Editor (no progress)
- [ ] Shop Editor (no progress)
## Screenshots
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots-en/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots-en/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots-en/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots-en/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots-en/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots-en/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots-en/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots-en/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots-en/8-CustomStats.png)
![Management](Doc/Screenshots-en/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-en/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-en/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots/12-Remote.png)
![Quest Screenshort](Doc/Screenshots/13-Quest.png)

76
README_ru-RU.md Normal file
View File

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

72
README_zh-cn.md Normal file
View File

@@ -0,0 +1,72 @@
# 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.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 />
@@ -37,6 +37,18 @@
<setting name="TokenCache" serializeAs="String">
<value />
</setting>
<setting name="CommandVersion" serializeAs="String">
<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>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -0,0 +1,186 @@
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace GrasscutterTools.Controls
{
[ToolboxItem(true)]
public class TextBoxXP : TextBox
{
/// <summary>
/// 获得当前进程,以便重绘控件
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
private const int EM_SETCUEBANNER = 0x1501;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SendMessage
(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
/// <summary>
/// 水印文本
/// </summary>
private string _Watermark = "";
private float maximum;
private float minimum;
#region
/// <summary>
/// 是否启用热点效果
/// </summary>
[Category("外观")]
[Browsable(true)]
[Localizable(true)]
[Description("获取或设置输入框水印文本")]
[DefaultValue("")]
public string Watermark
{
get
{
return this._Watermark;
}
set
{
this._Watermark = value;
SendMessage(Handle, EM_SETCUEBANNER, 0, _Watermark);
this.Invalidate();
}
}
/// <summary>
/// 是否只能输入数字
/// </summary>
[Category("行为")]
[Browsable(true)]
[Description("获取或设置TextBox是否只允许输入数字")]
[DefaultValue(false)]
public bool DigitOnly { get; set; }
/// <summary>
/// 转为数值
/// </summary>
public float Number
{
get
{
if (float.TryParse(Text, out float value))
return value;
else
return 0f;
}
}
[Category("数据")]
[Browsable(true)]
[DefaultValue(0)]
[Description("指示小数点后位数")]
public int DecimalPlaces { get; set; }
[Category("数据")]
[Description("获取或设置限制的最大值")]
public float Maximum
{
get
{
return maximum;
}
set
{
maximum = value;
if (minimum > maximum)
{
minimum = maximum;
}
}
}
[Category("数据")]
[Browsable(true)]
[Description("获取或设置限制的最小值")]
public float Minimum
{
get
{
return minimum;
}
set
{
minimum = value;
if (minimum > maximum)
{
maximum = value;
}
}
}
#endregion
/// <summary>
///
/// </summary>
public TextBoxXP()
: base()
{
//BorderStyle = BorderStyle.FixedSingle;
//Font = Styles.StaticResources.DefaultFont;
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
// 如果只允许输入数字,则判断输入是否为退格或者数字
if (DigitOnly)
{
//IsNumber指定字符串中位于指定位置的字符是否属于数字类别
//IsPunctuation指定字符串中位于指定位置的字符是否属于标点符号类别
//IsControl指定字符串中位于指定位置的字符是否属于控制字符类别
if (!Char.IsNumber(e.KeyChar) && !Char.IsPunctuation(e.KeyChar) && !Char.IsControl(e.KeyChar))
{
e.Handled = true; //获取或设置一个值指示是否处理过System.Windows.Forms.Control.KeyPress事件
}
else if (Char.IsPunctuation(e.KeyChar) && DecimalPlaces > 0)
{
if (e.KeyChar == '.')
{
if (Text.LastIndexOf('.') != -1)
{
e.Handled = true;
}
}
else
{
e.Handled = true;
}
}
}
}
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
if (DigitOnly)
{
if (!string.IsNullOrWhiteSpace(Text))
{
if (Number > Maximum)
Text = Maximum.ToString("F" + DecimalPlaces);
if (Number < Minimum)
Text = Minimum.ToString("F" + DecimalPlaces);
}
}
}
}
}

View File

@@ -25,6 +25,9 @@ namespace GrasscutterTools.DispatchServer.Model
[JsonProperty("playerCount")]
public int PlayerCount { get; set; }
[JsonProperty("MaxPlayer")]
public int MaxPlayer { get; set; } = -1;
[JsonProperty("version")]
public string Version { get; set; }
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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,498 @@
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;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
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 = new string[GameData.Monsters.Lines.Length + GameData.Animals.Lines.Length];
GameData.Monsters.Lines.CopyTo(Monsters, 0);
GameData.Animals.Lines.CopyTo(Monsters, GameData.Monsters.Lines.Length);
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

@@ -1,5 +1,5 @@

namespace GrasscutterTools
namespace GrasscutterTools.Forms
{
partial class FormGachaBannerEditor
{
@@ -31,7 +31,6 @@ namespace GrasscutterTools
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGachaBannerEditor));
this.GrpBannerValues = new System.Windows.Forms.GroupBox();
this.LblBannerEditorOldTip = new System.Windows.Forms.Label();
this.CmbPrefab = new System.Windows.Forms.ComboBox();
this.LblEventChanceTip = new System.Windows.Forms.Label();
this.NUDEventChance = new System.Windows.Forms.NumericUpDown();
@@ -98,7 +97,6 @@ namespace GrasscutterTools
// GrpBannerValues
//
resources.ApplyResources(this.GrpBannerValues, "GrpBannerValues");
this.GrpBannerValues.Controls.Add(this.LblBannerEditorOldTip);
this.GrpBannerValues.Controls.Add(this.CmbPrefab);
this.GrpBannerValues.Controls.Add(this.LblEventChanceTip);
this.GrpBannerValues.Controls.Add(this.NUDEventChance);
@@ -141,17 +139,11 @@ namespace GrasscutterTools
this.GrpBannerValues.Name = "GrpBannerValues";
this.GrpBannerValues.TabStop = false;
//
// LblBannerEditorOldTip
//
resources.ApplyResources(this.LblBannerEditorOldTip, "LblBannerEditorOldTip");
this.LblBannerEditorOldTip.ForeColor = System.Drawing.Color.Red;
this.LblBannerEditorOldTip.Name = "LblBannerEditorOldTip";
//
// CmbPrefab
//
resources.ApplyResources(this.CmbPrefab, "CmbPrefab");
this.CmbPrefab.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbPrefab.FormattingEnabled = true;
resources.ApplyResources(this.CmbPrefab, "CmbPrefab");
this.CmbPrefab.Name = "CmbPrefab";
//
// LblEventChanceTip
@@ -181,8 +173,8 @@ namespace GrasscutterTools
//
// NUDBaseYellowWeight
//
resources.ApplyResources(this.NUDBaseYellowWeight, "NUDBaseYellowWeight");
this.NUDBaseYellowWeight.DecimalPlaces = 2;
resources.ApplyResources(this.NUDBaseYellowWeight, "NUDBaseYellowWeight");
this.NUDBaseYellowWeight.Name = "NUDBaseYellowWeight";
this.NUDBaseYellowWeight.Value = new decimal(new int[] {
6,
@@ -197,8 +189,8 @@ namespace GrasscutterTools
//
// TxtRateUpItems2
//
resources.ApplyResources(this.TxtRateUpItems2, "TxtRateUpItems2");
this.TxtRateUpItems2.BackColor = System.Drawing.Color.White;
resources.ApplyResources(this.TxtRateUpItems2, "TxtRateUpItems2");
this.TxtRateUpItems2.Name = "TxtRateUpItems2";
this.TxtRateUpItems2.ReadOnly = true;
//
@@ -294,8 +286,8 @@ namespace GrasscutterTools
//
// TxtRateUpItems1
//
resources.ApplyResources(this.TxtRateUpItems1, "TxtRateUpItems1");
this.TxtRateUpItems1.BackColor = System.Drawing.Color.White;
resources.ApplyResources(this.TxtRateUpItems1, "TxtRateUpItems1");
this.TxtRateUpItems1.Name = "TxtRateUpItems1";
this.TxtRateUpItems1.ReadOnly = true;
//
@@ -381,13 +373,13 @@ namespace GrasscutterTools
//
// CmbBannerType
//
resources.ApplyResources(this.CmbBannerType, "CmbBannerType");
this.CmbBannerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbBannerType.FormattingEnabled = true;
this.CmbBannerType.Items.AddRange(new object[] {
resources.GetString("CmbBannerType.Items"),
resources.GetString("CmbBannerType.Items1"),
resources.GetString("CmbBannerType.Items2")});
resources.ApplyResources(this.CmbBannerType, "CmbBannerType");
this.CmbBannerType.Name = "CmbBannerType";
//
// LblSortIdTip
@@ -397,8 +389,8 @@ namespace GrasscutterTools
//
// NUDBasePurpleWeight
//
resources.ApplyResources(this.NUDBasePurpleWeight, "NUDBasePurpleWeight");
this.NUDBasePurpleWeight.DecimalPlaces = 2;
resources.ApplyResources(this.NUDBasePurpleWeight, "NUDBasePurpleWeight");
this.NUDBasePurpleWeight.Name = "NUDBasePurpleWeight";
this.NUDBasePurpleWeight.Value = new decimal(new int[] {
51,
@@ -455,8 +447,8 @@ namespace GrasscutterTools
//
// ListPurplePool
//
resources.ApplyResources(this.ListPurplePool, "ListPurplePool");
this.ListPurplePool.CheckOnClick = true;
resources.ApplyResources(this.ListPurplePool, "ListPurplePool");
this.ListPurplePool.FormattingEnabled = true;
this.ListPurplePool.Name = "ListPurplePool";
this.ListPurplePool.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ListPurplePool_ItemCheck);
@@ -470,8 +462,8 @@ namespace GrasscutterTools
//
// ListYellowPool
//
resources.ApplyResources(this.ListYellowPool, "ListYellowPool");
this.ListYellowPool.CheckOnClick = true;
resources.ApplyResources(this.ListYellowPool, "ListYellowPool");
this.ListYellowPool.FormattingEnabled = true;
this.ListYellowPool.Name = "ListYellowPool";
this.ListYellowPool.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ListYellowPool_ItemCheck);
@@ -583,6 +575,5 @@ namespace GrasscutterTools
private System.Windows.Forms.Button BtnGen;
private System.Windows.Forms.Button BtnParse;
private System.Windows.Forms.ComboBox CmbPrefab;
private System.Windows.Forms.Label LblBannerEditorOldTip;
}
}

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;
@@ -29,7 +28,7 @@ using GrasscutterTools.Properties;
using Newtonsoft.Json;
namespace GrasscutterTools
namespace GrasscutterTools.Forms
{
/// <summary>
/// 卡池编辑器
@@ -68,7 +67,7 @@ namespace GrasscutterTools
if (GameData.AvatarColors.Names[i] == color)
{
var id = GameData.AvatarColors.Ids[i];
var index = Array.IndexOf(GameData.Avatars.Ids, id % 1000 + 10000000);
var index = Array.IndexOf(GameData.Avatars.Ids, id);
if (index >= 0)
kvs.Add($"{id}:{GameData.Avatars.Names[index]}");
}
@@ -190,7 +189,7 @@ namespace GrasscutterTools
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
{
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

@@ -0,0 +1,359 @@
<?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="LblBannerEditorOldTip.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblBannerEditorOldTip.Location" type="System.Drawing.Point, System.Drawing">
<value>22, 415</value>
</data>
<data name="LblBannerEditorOldTip.Size" type="System.Drawing.Size, System.Drawing">
<value>390, 35</value>
</data>
<data name="LblBannerEditorOldTip.Text" xml:space="preserve">
<value>Подсказка: последняя версия баннера разрабатывается и в настоящее время не поддерживается, ждем PR : )</value>
</data>
<data name="LblEventChanceTip.Location" type="System.Drawing.Point, System.Drawing">
<value>401, 262</value>
</data>
<data name="NUDEventChance.Location" type="System.Drawing.Point, System.Drawing">
<value>336, 260</value>
</data>
<data name="LblGachaType.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 28</value>
</data>
<data name="LblGachaType.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 17</value>
</data>
<data name="LblGachaType.Text" xml:space="preserve">
<value>Тип Гачи</value>
</data>
<data name="LblEventChance.Location" type="System.Drawing.Point, System.Drawing">
<value>238, 262</value>
</data>
<data name="LblEventChance.Size" type="System.Drawing.Size, System.Drawing">
<value>96, 17</value>
</data>
<data name="LblEventChance.Text" xml:space="preserve">
<value>Шанс события</value>
</data>
<data name="LblSortId.Location" type="System.Drawing.Point, System.Drawing">
<value>66, 204</value>
</data>
<data name="LblSortId.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 17</value>
</data>
<data name="LblSortId.Text" xml:space="preserve">
<value>Сорт.</value>
</data>
<data name="LblBaseYellowWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 262</value>
</data>
<data name="LblBaseYellowWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
</data>
<data name="LblBaseYellowWeight.Text" xml:space="preserve">
<value>5-звездочный</value>
</data>
<data name="LblRateUpItems2.Location" type="System.Drawing.Point, System.Drawing">
<value>25, 350</value>
</data>
<data name="LblRateUpItems2.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 17</value>
</data>
<data name="LblRateUpItems2.Text" xml:space="preserve">
<value>4 зв. UP</value>
</data>
<data name="LblSoftPity.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 291</value>
</data>
<data name="LblSoftPity.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 17</value>
</data>
<data name="LblSoftPity.Text" xml:space="preserve">
<value>Софт-гарант</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 17</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>Увеличение с 400</value>
</data>
<data name="LblEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>234, 176</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>Конец</value>
</data>
<data name="LblRateUpItems1.Location" type="System.Drawing.Point, System.Drawing">
<value>51, 234</value>
</data>
<data name="LblRateUpItems1.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 17</value>
</data>
<data name="LblRateUpItems1.Text" xml:space="preserve">
<value>5 зв. UP</value>
</data>
<data name="LblScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 57</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>98, 17</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>ID расписания</value>
</data>
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>53, 176</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Начало</value>
</data>
<data name="LblHardPity.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 320</value>
</data>
<data name="LblHardPity.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 17</value>
</data>
<data name="LblHardPity.Text" xml:space="preserve">
<value>Полный гарант</value>
</data>
<data name="NUDEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>287, 174</value>
</data>
<data name="LblHardPityTip.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
</data>
<data name="LblHardPityTip.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="LblScheduleIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 17</value>
</data>
<data name="LblScheduleIdTip.Text" xml:space="preserve">
<value>Уникальный</value>
</data>
<data name="LblSoftPityTip.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
</data>
<data name="LblSoftPityTip.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="LblBasePurpleWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>29, 378</value>
</data>
<data name="LblBasePurpleWeight.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblBasePurpleWeight.Text" xml:space="preserve">
<value>4-звездочный</value>
</data>
<data name="CmbBannerType.Items" xml:space="preserve">
<value>Стандартная Молитва</value>
</data>
<data name="CmbBannerType.Items1" xml:space="preserve">
<value>Молитва события персонажа</value>
</data>
<data name="CmbBannerType.Items2" xml:space="preserve">
<value>Молитва события с оружием</value>
</data>
<data name="LblSortIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 17</value>
</data>
<data name="LblSortIdTip.Text" xml:space="preserve">
<value>Показать порядок</value>
</data>
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>18, 87</value>
</data>
<data name="LblBannerType.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="LblBannerType.Text" xml:space="preserve">
<value>Тип баннера</value>
</data>
<data name="RbCostItem224.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 21</value>
</data>
<data name="RbCostItem224.Text" xml:space="preserve">
<value>Судьбоносные</value>
</data>
<data name="LblCostItem.Location" type="System.Drawing.Point, System.Drawing">
<value>34, 148</value>
</data>
<data name="LblCostItem.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 17</value>
</data>
<data name="LblCostItem.Text" xml:space="preserve">
<value>Стоимость</value>
</data>
<data name="LblPrefabPath.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 118</value>
</data>
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 17</value>
</data>
<data name="LblPrefabPath.Text" xml:space="preserve">
<value>Готовый</value>
</data>
<data name="RbCostItem223.Location" type="System.Drawing.Point, System.Drawing">
<value>234, 146</value>
</data>
<data name="RbCostItem223.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 21</value>
</data>
<data name="RbCostItem223.Text" xml:space="preserve">
<value>Переплетающиеся</value>
</data>
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>Баннер</value>
</data>
<data name="GrpPurplePool.Text" xml:space="preserve">
<value>4 звёздочный пул</value>
</data>
<data name="GrpYellowPool.Text" xml:space="preserve">
<value>5 звёздочный пул</value>
</data>
<data name="BtnGen.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
</data>
<data name="BtnGen.Text" xml:space="preserve">
<value>Сген. Json</value>
</data>
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
<value>209, 437</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>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Редактор баннеров</value>
</data>
</root>

View File

@@ -0,0 +1,656 @@

namespace GrasscutterTools.Forms
{
partial class FormGachaBannerEditor2
{
/// <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(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();
this.ChkRemoveC6FormPool = new System.Windows.Forms.CheckBox();
this.LnkOpenOldEditor = new System.Windows.Forms.LinkLabel();
this.DTPEndTime = new System.Windows.Forms.DateTimePicker();
this.DTPBeginTime = new System.Windows.Forms.DateTimePicker();
this.CmbPrefab = new System.Windows.Forms.ComboBox();
this.LblEventChance4Tip = new System.Windows.Forms.Label();
this.LblEventChance5Tip = new System.Windows.Forms.Label();
this.NUDEventChance4 = new System.Windows.Forms.NumericUpDown();
this.NUDEventChance5 = new System.Windows.Forms.NumericUpDown();
this.LblGachaType = new System.Windows.Forms.Label();
this.LblEventChance4 = new System.Windows.Forms.Label();
this.LblEventChance5 = new System.Windows.Forms.Label();
this.LblSortId = new System.Windows.Forms.Label();
this.NUDGachaType = new System.Windows.Forms.NumericUpDown();
this.NUDSortId = new System.Windows.Forms.NumericUpDown();
this.LblGachaTypeTip = new System.Windows.Forms.Label();
this.LblEndTime = new System.Windows.Forms.Label();
this.LblScheduleId = new System.Windows.Forms.Label();
this.LblBeginTime = new System.Windows.Forms.Label();
this.NUDScheduleId = new System.Windows.Forms.NumericUpDown();
this.LblScheduleIdTip = new System.Windows.Forms.Label();
this.CmbBannerType = new System.Windows.Forms.ComboBox();
this.LblSortIdTip = new System.Windows.Forms.Label();
this.LblBannerType = new System.Windows.Forms.Label();
this.RbCostItem224 = new System.Windows.Forms.RadioButton();
this.LblCostItem = new System.Windows.Forms.Label();
this.LblPrefabPath = new System.Windows.Forms.Label();
this.RbCostItem223 = new System.Windows.Forms.RadioButton();
this.GrpFallbackPool = new System.Windows.Forms.GroupBox();
this.ListFallbackItems = new System.Windows.Forms.ListView();
this.ColFallbackId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColFallbackName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpUpPool = new System.Windows.Forms.GroupBox();
this.ListUpItems = new System.Windows.Forms.ListView();
this.ColUpId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColUpName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpJson = new System.Windows.Forms.GroupBox();
this.BtnGen = new System.Windows.Forms.Button();
this.TxtJson = new System.Windows.Forms.TextBox();
this.BtnParse = new System.Windows.Forms.Button();
this.GrpWeights = new System.Windows.Forms.GroupBox();
this.LnkWeightHelp = new System.Windows.Forms.LinkLabel();
this.TxtWeight4 = new System.Windows.Forms.TextBox();
this.TxtWeight5 = new System.Windows.Forms.TextBox();
this.LblWeight4 = new System.Windows.Forms.Label();
this.LblWeight5 = new System.Windows.Forms.Label();
this.GrpBalance = new System.Windows.Forms.GroupBox();
this.TxtPoolWeight4 = new System.Windows.Forms.TextBox();
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();
((System.ComponentModel.ISupportInitialize)(this.NUDGachaType)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDSortId)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).BeginInit();
this.GrpFallbackPool.SuspendLayout();
this.GrpUpPool.SuspendLayout();
this.GrpJson.SuspendLayout();
this.GrpWeights.SuspendLayout();
this.GrpBalance.SuspendLayout();
this.GrpWeightChart.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).BeginInit();
this.SuspendLayout();
//
// GrpBannerValues
//
resources.ApplyResources(this.GrpBannerValues, "GrpBannerValues");
this.GrpBannerValues.Controls.Add(this.ChkAutoStripRateUpFromFallback);
this.GrpBannerValues.Controls.Add(this.LblOptions);
this.GrpBannerValues.Controls.Add(this.ChkRemoveC6FormPool);
this.GrpBannerValues.Controls.Add(this.LnkOpenOldEditor);
this.GrpBannerValues.Controls.Add(this.DTPEndTime);
this.GrpBannerValues.Controls.Add(this.DTPBeginTime);
this.GrpBannerValues.Controls.Add(this.CmbPrefab);
this.GrpBannerValues.Controls.Add(this.LblEventChance4Tip);
this.GrpBannerValues.Controls.Add(this.LblEventChance5Tip);
this.GrpBannerValues.Controls.Add(this.NUDEventChance4);
this.GrpBannerValues.Controls.Add(this.NUDEventChance5);
this.GrpBannerValues.Controls.Add(this.LblGachaType);
this.GrpBannerValues.Controls.Add(this.LblEventChance4);
this.GrpBannerValues.Controls.Add(this.LblEventChance5);
this.GrpBannerValues.Controls.Add(this.LblSortId);
this.GrpBannerValues.Controls.Add(this.NUDGachaType);
this.GrpBannerValues.Controls.Add(this.NUDSortId);
this.GrpBannerValues.Controls.Add(this.LblGachaTypeTip);
this.GrpBannerValues.Controls.Add(this.LblEndTime);
this.GrpBannerValues.Controls.Add(this.LblScheduleId);
this.GrpBannerValues.Controls.Add(this.LblBeginTime);
this.GrpBannerValues.Controls.Add(this.NUDScheduleId);
this.GrpBannerValues.Controls.Add(this.LblScheduleIdTip);
this.GrpBannerValues.Controls.Add(this.CmbBannerType);
this.GrpBannerValues.Controls.Add(this.LblSortIdTip);
this.GrpBannerValues.Controls.Add(this.LblBannerType);
this.GrpBannerValues.Controls.Add(this.RbCostItem224);
this.GrpBannerValues.Controls.Add(this.LblCostItem);
this.GrpBannerValues.Controls.Add(this.LblPrefabPath);
this.GrpBannerValues.Controls.Add(this.RbCostItem223);
this.GrpBannerValues.Name = "GrpBannerValues";
this.GrpBannerValues.TabStop = false;
//
// ChkAutoStripRateUpFromFallback
//
resources.ApplyResources(this.ChkAutoStripRateUpFromFallback, "ChkAutoStripRateUpFromFallback");
this.ChkAutoStripRateUpFromFallback.Name = "ChkAutoStripRateUpFromFallback";
this.ChkAutoStripRateUpFromFallback.UseVisualStyleBackColor = true;
//
// LblOptions
//
resources.ApplyResources(this.LblOptions, "LblOptions");
this.LblOptions.Name = "LblOptions";
//
// ChkRemoveC6FormPool
//
resources.ApplyResources(this.ChkRemoveC6FormPool, "ChkRemoveC6FormPool");
this.ChkRemoveC6FormPool.Name = "ChkRemoveC6FormPool";
this.ChkRemoveC6FormPool.UseVisualStyleBackColor = true;
//
// LnkOpenOldEditor
//
resources.ApplyResources(this.LnkOpenOldEditor, "LnkOpenOldEditor");
this.LnkOpenOldEditor.Name = "LnkOpenOldEditor";
this.LnkOpenOldEditor.TabStop = true;
this.LnkOpenOldEditor.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkOpenOldEditor_LinkClicked);
//
// DTPEndTime
//
resources.ApplyResources(this.DTPEndTime, "DTPEndTime");
this.DTPEndTime.MaxDate = new System.DateTime(2038, 1, 19, 0, 0, 0, 0);
this.DTPEndTime.MinDate = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
this.DTPEndTime.Name = "DTPEndTime";
//
// DTPBeginTime
//
resources.ApplyResources(this.DTPBeginTime, "DTPBeginTime");
this.DTPBeginTime.MaxDate = new System.DateTime(2038, 1, 19, 0, 0, 0, 0);
this.DTPBeginTime.MinDate = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
this.DTPBeginTime.Name = "DTPBeginTime";
//
// CmbPrefab
//
resources.ApplyResources(this.CmbPrefab, "CmbPrefab");
this.CmbPrefab.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbPrefab.FormattingEnabled = true;
this.CmbPrefab.Name = "CmbPrefab";
//
// LblEventChance4Tip
//
resources.ApplyResources(this.LblEventChance4Tip, "LblEventChance4Tip");
this.LblEventChance4Tip.Name = "LblEventChance4Tip";
//
// LblEventChance5Tip
//
resources.ApplyResources(this.LblEventChance5Tip, "LblEventChance5Tip");
this.LblEventChance5Tip.Name = "LblEventChance5Tip";
//
// NUDEventChance4
//
resources.ApplyResources(this.NUDEventChance4, "NUDEventChance4");
this.NUDEventChance4.Name = "NUDEventChance4";
this.NUDEventChance4.Value = new decimal(new int[] {
50,
0,
0,
0});
//
// NUDEventChance5
//
resources.ApplyResources(this.NUDEventChance5, "NUDEventChance5");
this.NUDEventChance5.Name = "NUDEventChance5";
this.NUDEventChance5.Value = new decimal(new int[] {
50,
0,
0,
0});
//
// LblGachaType
//
resources.ApplyResources(this.LblGachaType, "LblGachaType");
this.LblGachaType.Name = "LblGachaType";
//
// LblEventChance4
//
resources.ApplyResources(this.LblEventChance4, "LblEventChance4");
this.LblEventChance4.Name = "LblEventChance4";
//
// LblEventChance5
//
resources.ApplyResources(this.LblEventChance5, "LblEventChance5");
this.LblEventChance5.Name = "LblEventChance5";
//
// LblSortId
//
resources.ApplyResources(this.LblSortId, "LblSortId");
this.LblSortId.Name = "LblSortId";
//
// NUDGachaType
//
resources.ApplyResources(this.NUDGachaType, "NUDGachaType");
this.NUDGachaType.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.NUDGachaType.Name = "NUDGachaType";
this.NUDGachaType.Value = new decimal(new int[] {
400,
0,
0,
0});
//
// NUDSortId
//
resources.ApplyResources(this.NUDSortId, "NUDSortId");
this.NUDSortId.Maximum = new decimal(new int[] {
9999,
0,
0,
0});
this.NUDSortId.Minimum = new decimal(new int[] {
1000,
0,
0,
0});
this.NUDSortId.Name = "NUDSortId";
this.NUDSortId.Value = new decimal(new int[] {
1000,
0,
0,
0});
//
// LblGachaTypeTip
//
resources.ApplyResources(this.LblGachaTypeTip, "LblGachaTypeTip");
this.LblGachaTypeTip.Name = "LblGachaTypeTip";
//
// LblEndTime
//
resources.ApplyResources(this.LblEndTime, "LblEndTime");
this.LblEndTime.Name = "LblEndTime";
//
// LblScheduleId
//
resources.ApplyResources(this.LblScheduleId, "LblScheduleId");
this.LblScheduleId.Name = "LblScheduleId";
//
// LblBeginTime
//
resources.ApplyResources(this.LblBeginTime, "LblBeginTime");
this.LblBeginTime.Name = "LblBeginTime";
//
// NUDScheduleId
//
resources.ApplyResources(this.NUDScheduleId, "NUDScheduleId");
this.NUDScheduleId.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.NUDScheduleId.Name = "NUDScheduleId";
this.NUDScheduleId.Value = new decimal(new int[] {
800,
0,
0,
0});
//
// LblScheduleIdTip
//
resources.ApplyResources(this.LblScheduleIdTip, "LblScheduleIdTip");
this.LblScheduleIdTip.Name = "LblScheduleIdTip";
//
// CmbBannerType
//
resources.ApplyResources(this.CmbBannerType, "CmbBannerType");
this.CmbBannerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbBannerType.FormattingEnabled = true;
this.CmbBannerType.Items.AddRange(new object[] {
resources.GetString("CmbBannerType.Items"),
resources.GetString("CmbBannerType.Items1"),
resources.GetString("CmbBannerType.Items2")});
this.CmbBannerType.Name = "CmbBannerType";
//
// LblSortIdTip
//
resources.ApplyResources(this.LblSortIdTip, "LblSortIdTip");
this.LblSortIdTip.Name = "LblSortIdTip";
//
// LblBannerType
//
resources.ApplyResources(this.LblBannerType, "LblBannerType");
this.LblBannerType.Name = "LblBannerType";
//
// RbCostItem224
//
resources.ApplyResources(this.RbCostItem224, "RbCostItem224");
this.RbCostItem224.Checked = true;
this.RbCostItem224.Name = "RbCostItem224";
this.RbCostItem224.TabStop = true;
this.RbCostItem224.UseVisualStyleBackColor = true;
//
// LblCostItem
//
resources.ApplyResources(this.LblCostItem, "LblCostItem");
this.LblCostItem.Name = "LblCostItem";
//
// LblPrefabPath
//
resources.ApplyResources(this.LblPrefabPath, "LblPrefabPath");
this.LblPrefabPath.Name = "LblPrefabPath";
//
// RbCostItem223
//
resources.ApplyResources(this.RbCostItem223, "RbCostItem223");
this.RbCostItem223.Name = "RbCostItem223";
this.RbCostItem223.TabStop = true;
this.RbCostItem223.UseVisualStyleBackColor = true;
//
// GrpFallbackPool
//
resources.ApplyResources(this.GrpFallbackPool, "GrpFallbackPool");
this.GrpFallbackPool.Controls.Add(this.ListFallbackItems);
this.GrpFallbackPool.Name = "GrpFallbackPool";
this.GrpFallbackPool.TabStop = false;
//
// ListFallbackItems
//
resources.ApplyResources(this.ListFallbackItems, "ListFallbackItems");
this.ListFallbackItems.CheckBoxes = true;
this.ListFallbackItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColFallbackId,
this.ColFallbackName});
this.ListFallbackItems.FullRowSelect = true;
this.ListFallbackItems.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListFallbackItems.Groups"))),
((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")))});
this.ListFallbackItems.HideSelection = false;
this.ListFallbackItems.Name = "ListFallbackItems";
this.ListFallbackItems.UseCompatibleStateImageBehavior = false;
this.ListFallbackItems.View = System.Windows.Forms.View.Details;
//
// ColFallbackId
//
resources.ApplyResources(this.ColFallbackId, "ColFallbackId");
//
// ColFallbackName
//
resources.ApplyResources(this.ColFallbackName, "ColFallbackName");
//
// GrpUpPool
//
resources.ApplyResources(this.GrpUpPool, "GrpUpPool");
this.GrpUpPool.Controls.Add(this.ListUpItems);
this.GrpUpPool.Name = "GrpUpPool";
this.GrpUpPool.TabStop = false;
//
// ListUpItems
//
resources.ApplyResources(this.ListUpItems, "ListUpItems");
this.ListUpItems.CheckBoxes = true;
this.ListUpItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColUpId,
this.ColUpName});
this.ListUpItems.FullRowSelect = true;
this.ListUpItems.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups1"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups2"))),
((System.Windows.Forms.ListViewGroup)(resources.GetObject("ListUpItems.Groups3")))});
this.ListUpItems.HideSelection = false;
this.ListUpItems.Name = "ListUpItems";
this.ListUpItems.UseCompatibleStateImageBehavior = false;
this.ListUpItems.View = System.Windows.Forms.View.Details;
//
// ColUpId
//
resources.ApplyResources(this.ColUpId, "ColUpId");
//
// ColUpName
//
resources.ApplyResources(this.ColUpName, "ColUpName");
//
// GrpJson
//
resources.ApplyResources(this.GrpJson, "GrpJson");
this.GrpJson.Controls.Add(this.BtnGen);
this.GrpJson.Controls.Add(this.TxtJson);
this.GrpJson.Controls.Add(this.BtnParse);
this.GrpJson.Name = "GrpJson";
this.GrpJson.TabStop = false;
//
// BtnGen
//
resources.ApplyResources(this.BtnGen, "BtnGen");
this.BtnGen.Name = "BtnGen";
this.BtnGen.UseVisualStyleBackColor = true;
this.BtnGen.Click += new System.EventHandler(this.BtnGen_Click);
//
// TxtJson
//
resources.ApplyResources(this.TxtJson, "TxtJson");
this.TxtJson.Name = "TxtJson";
//
// BtnParse
//
resources.ApplyResources(this.BtnParse, "BtnParse");
this.BtnParse.Name = "BtnParse";
this.BtnParse.UseVisualStyleBackColor = true;
this.BtnParse.Click += new System.EventHandler(this.BtnParse_Click);
//
// GrpWeights
//
resources.ApplyResources(this.GrpWeights, "GrpWeights");
this.GrpWeights.Controls.Add(this.LnkWeightHelp);
this.GrpWeights.Controls.Add(this.TxtWeight4);
this.GrpWeights.Controls.Add(this.TxtWeight5);
this.GrpWeights.Controls.Add(this.LblWeight4);
this.GrpWeights.Controls.Add(this.LblWeight5);
this.GrpWeights.Name = "GrpWeights";
this.GrpWeights.TabStop = false;
//
// LnkWeightHelp
//
resources.ApplyResources(this.LnkWeightHelp, "LnkWeightHelp");
this.LnkWeightHelp.Name = "LnkWeightHelp";
this.LnkWeightHelp.TabStop = true;
this.LnkWeightHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkWeightHelp_LinkClicked);
//
// TxtWeight4
//
resources.ApplyResources(this.TxtWeight4, "TxtWeight4");
this.TxtWeight4.Name = "TxtWeight4";
//
// TxtWeight5
//
resources.ApplyResources(this.TxtWeight5, "TxtWeight5");
this.TxtWeight5.Name = "TxtWeight5";
//
// LblWeight4
//
resources.ApplyResources(this.LblWeight4, "LblWeight4");
this.LblWeight4.Name = "LblWeight4";
//
// LblWeight5
//
resources.ApplyResources(this.LblWeight5, "LblWeight5");
this.LblWeight5.Name = "LblWeight5";
//
// GrpBalance
//
resources.ApplyResources(this.GrpBalance, "GrpBalance");
this.GrpBalance.Controls.Add(this.TxtPoolWeight4);
this.GrpBalance.Controls.Add(this.TxtPoolWeight5);
this.GrpBalance.Controls.Add(this.LblPoolWeight4);
this.GrpBalance.Controls.Add(this.LblPoolWeight5);
this.GrpBalance.Name = "GrpBalance";
this.GrpBalance.TabStop = false;
//
// TxtPoolWeight4
//
resources.ApplyResources(this.TxtPoolWeight4, "TxtPoolWeight4");
this.TxtPoolWeight4.Name = "TxtPoolWeight4";
//
// TxtPoolWeight5
//
resources.ApplyResources(this.TxtPoolWeight5, "TxtPoolWeight5");
this.TxtPoolWeight5.Name = "TxtPoolWeight5";
//
// LblPoolWeight4
//
resources.ApplyResources(this.LblPoolWeight4, "LblPoolWeight4");
this.LblPoolWeight4.Name = "LblPoolWeight4";
//
// LblPoolWeight5
//
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);
this.Controls.Add(this.GrpFallbackPool);
this.Controls.Add(this.GrpUpPool);
this.Controls.Add(this.GrpBannerValues);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
this.Name = "FormGachaBannerEditor2";
this.GrpBannerValues.ResumeLayout(false);
this.GrpBannerValues.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDEventChance4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDEventChance5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDGachaType)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDSortId)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).EndInit();
this.GrpFallbackPool.ResumeLayout(false);
this.GrpUpPool.ResumeLayout(false);
this.GrpJson.ResumeLayout(false);
this.GrpJson.PerformLayout();
this.GrpWeights.ResumeLayout(false);
this.GrpWeights.PerformLayout();
this.GrpBalance.ResumeLayout(false);
this.GrpBalance.PerformLayout();
this.GrpWeightChart.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox GrpBannerValues;
private System.Windows.Forms.Label LblEventChance5Tip;
private System.Windows.Forms.NumericUpDown NUDEventChance5;
private System.Windows.Forms.Label LblGachaType;
private System.Windows.Forms.Label LblEventChance5;
private System.Windows.Forms.Label LblSortId;
private System.Windows.Forms.NumericUpDown NUDGachaType;
private System.Windows.Forms.NumericUpDown NUDSortId;
private System.Windows.Forms.Label LblGachaTypeTip;
private System.Windows.Forms.Label LblEndTime;
private System.Windows.Forms.Label LblScheduleId;
private System.Windows.Forms.Label LblBeginTime;
private System.Windows.Forms.NumericUpDown NUDScheduleId;
private System.Windows.Forms.Label LblScheduleIdTip;
private System.Windows.Forms.ComboBox CmbBannerType;
private System.Windows.Forms.Label LblSortIdTip;
private System.Windows.Forms.Label LblBannerType;
private System.Windows.Forms.RadioButton RbCostItem224;
private System.Windows.Forms.Label LblCostItem;
private System.Windows.Forms.Label LblPrefabPath;
private System.Windows.Forms.RadioButton RbCostItem223;
private System.Windows.Forms.GroupBox GrpFallbackPool;
private System.Windows.Forms.GroupBox GrpUpPool;
private System.Windows.Forms.GroupBox GrpJson;
private System.Windows.Forms.TextBox TxtJson;
private System.Windows.Forms.Button BtnGen;
private System.Windows.Forms.Button BtnParse;
private System.Windows.Forms.ComboBox CmbPrefab;
private System.Windows.Forms.Label LblEventChance4;
private System.Windows.Forms.Label LblEventChance4Tip;
private System.Windows.Forms.NumericUpDown NUDEventChance4;
private System.Windows.Forms.DateTimePicker DTPEndTime;
private System.Windows.Forms.DateTimePicker DTPBeginTime;
private System.Windows.Forms.ListView ListFallbackItems;
private System.Windows.Forms.ListView ListUpItems;
private System.Windows.Forms.ColumnHeader ColFallbackId;
private System.Windows.Forms.ColumnHeader ColFallbackName;
private System.Windows.Forms.ColumnHeader ColUpId;
private System.Windows.Forms.ColumnHeader ColUpName;
private System.Windows.Forms.GroupBox GrpWeights;
private System.Windows.Forms.GroupBox GrpBalance;
private System.Windows.Forms.TextBox TxtWeight4;
private System.Windows.Forms.TextBox TxtWeight5;
private System.Windows.Forms.Label LblWeight4;
private System.Windows.Forms.Label LblWeight5;
private System.Windows.Forms.LinkLabel LnkWeightHelp;
private System.Windows.Forms.LinkLabel LnkOpenOldEditor;
private System.Windows.Forms.TextBox TxtPoolWeight4;
private System.Windows.Forms.TextBox TxtPoolWeight5;
private System.Windows.Forms.Label LblPoolWeight4;
private System.Windows.Forms.Label LblPoolWeight5;
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

@@ -0,0 +1,331 @@
/**
* 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.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Gacha;
using GrasscutterTools.Properties;
using Newtonsoft.Json;
namespace GrasscutterTools.Forms
{
/// <summary>
/// 卡池编辑器
/// </summary>
public partial class FormGachaBannerEditor2 : Form
{
public FormGachaBannerEditor2()
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
CmbBannerType.SelectedIndex = 0;
InitBannerPrefab();
InitCheckedListBoxs();
ShowBanner(new GachaBanner2());
}
private void InitBannerPrefab()
{
CmbPrefab.Items.Clear();
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
}
private void LnkWeightHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("https://github.com/Grasscutters/Grasscutter/pull/639");
}
private void LnkOpenOldEditor_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
new FormGachaBannerEditor().ShowDialog();
}
#region - -
private void InitCheckedListBoxs()
{
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")
.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 }));
var weapons = GetWeaponsByColor("yellow")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w5) { ForeColor = Color.OrangeRed })
.Concat(GetWeaponsByColor("purple")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w4) { ForeColor = Color.Purple }))
.Concat(GetWeaponsByColor("blue")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w3) { ForeColor = Color.Blue }));
ListFallbackItems.Items.Clear();
ListFallbackItems.Items.AddRange(avatars.Concat(weapons).ToArray());
ListUpItems.BeginUpdate();
var ua5 = ListUpItems.Groups["GroupUpA5"];
var ua4 = ListUpItems.Groups["GroupUpA4"];
var uw5 = ListUpItems.Groups["GroupUpW5"];
var uw4 = ListUpItems.Groups["GroupUpW4"];
var upAvatars = GetAvatarsByColor("yellow")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua5) { ForeColor = Color.OrangeRed })
.Concat(GetAvatarsByColor("purple")
.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 })
.Concat(GetWeaponsByColor("purple")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, uw4) { ForeColor = Color.Purple }));
ListUpItems.Items.Clear();
ListUpItems.Items.AddRange(upAvatars.Concat(upWeapons).ToArray());
ListFallbackItems.EndUpdate();
ListUpItems.EndUpdate();
}
private IEnumerable<(int, string)> GetAvatarsByColor(string color)
{
for (int i = 0; i < GameData.AvatarColors.Count; i++)
{
if (GameData.AvatarColors.Names[i] == color)
{
var id = GameData.AvatarColors.Ids[i];
var index = Array.IndexOf(GameData.Avatars.Ids, id);
if (index >= 0)
yield return (id, GameData.Avatars.Names[index]);
}
}
}
private IEnumerable<(int, string)> GetWeaponsByColor(string color)
{
for (int i = 0; i < GameData.WeaponColors.Count; i++)
{
if (GameData.WeaponColors.Names[i] == color)
{
var id = GameData.WeaponColors.Ids[i];
var index = Array.IndexOf(GameData.Weapons.Ids, id);
if (index >= 0)
yield return (id, GameData.Weapons.Names[index]);
}
}
}
private void InitItems(GachaBanner2 banner)
{
var f = banner.FallbackItems3
.Concat(banner.FallbackItems4Pool1)
.Concat(banner.FallbackItems4Pool2)
.Concat(banner.FallbackItems5Pool1)
.Concat(banner.FallbackItems5Pool2)
.ToArray();
foreach (ListViewItem item in ListFallbackItems.Items)
item.Checked = Array.IndexOf(f, int.Parse(item.Text)) >= 0;
var u = banner.RateUpItems4.Concat(banner.RateUpItems5).ToArray();
foreach (ListViewItem item in ListUpItems.Items)
item.Checked = Array.IndexOf(u, int.Parse(item.Text)) >= 0;
}
private IEnumerable<int> GetCheckedItems(ListView list, ListViewGroup group)
{
foreach (ListViewItem item in list.CheckedItems)
if (item.Group == group)
yield return int.Parse(item.Text);
}
#endregion - -
#region - -
private struct GachaWeight
{
public int Count;
public int Weight;
public GachaWeight(int count, int weight)
{
Count = count;
Weight = weight;
}
}
private void InitWeights(GachaBanner2 banner)
{
TxtWeight5.Text = '[' + string.Join(", ", SelectWeights(banner.Weights5).Select(w => $"[{w.Count}, {w.Weight}]")) + ']';
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)
{
for (int i = 0; i < weights.GetLength(0); i++)
yield return new GachaWeight(weights[i, 0], weights[i, 1]);
}
private int[,] GetWeights(string weights)
{
return JsonConvert.DeserializeObject<int[,]>(weights);
}
#endregion - -
#region - -
private void ShowBanner(GachaBanner2 banner)
{
try
{
NUDGachaType.Value = banner.GachaType;
NUDScheduleId.Value = banner.ScheduleId;
CmbBannerType.SelectedIndex = (int)banner.BannerType;
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
CmbPrefab.SelectedIndex = -1;
else
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
RbCostItem224.Checked = banner.CostItem == 224;
RbCostItem223.Checked = banner.CostItem == 223;
DTPBeginTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.BeginTime).DateTime;
DTPEndTime.Value = DateTimeOffset.FromUnixTimeSeconds(banner.EndTime).DateTime;
NUDSortId.Value = banner.SortId;
NUDEventChance5.Value = banner.EventChance5;
NUDEventChance4.Value = banner.EventChance4;
ChkRemoveC6FormPool.Checked = banner.RemoveC6FromPool;
ChkAutoStripRateUpFromFallback.Checked = banner.AutoStripRateUpFromFallback;
InitItems(banner);
InitWeights(banner);
}
catch (Exception ex)
{
MessageBox.Show("UI更新失败" + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private GachaBanner2 ParseBanner()
{
if (CmbBannerType.SelectedIndex < 0)
{
MessageBox.Show("请选择奖池类型", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
if (CmbPrefab.SelectedIndex < 0)
{
MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
var banner = new GachaBanner2
{
GachaType = (int)NUDGachaType.Value,
ScheduleId = (int)NUDScheduleId.Value,
BannerType = (BannerType)CmbBannerType.SelectedIndex,
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
CostItem = RbCostItem224.Checked ? 224 : 223,
BeginTime = (int)new DateTimeOffset(DTPBeginTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
EndTime = (int)new DateTimeOffset(DTPEndTime.Value, TimeSpan.Zero).ToUnixTimeSeconds(),
SortId = (int)NUDSortId.Value,
EventChance5 = (int)NUDEventChance5.Value,
EventChance4 = (int)NUDEventChance4.Value,
RateUpItems4 = GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpA4"])
.Concat(GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpW4"]))
.ToArray(),
RateUpItems5 = GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpA5"])
.Concat(GetCheckedItems(ListUpItems, ListUpItems.Groups["GroupUpW5"]))
.ToArray(),
FallbackItems3 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupA3"])
.Concat(GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupW3"]))
.ToArray(),
FallbackItems4Pool1 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupA4"]).ToArray(),
FallbackItems4Pool2 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupW4"]).ToArray(),
FallbackItems5Pool1 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupA5"]).ToArray(),
FallbackItems5Pool2 = GetCheckedItems(ListFallbackItems, ListFallbackItems.Groups["GroupW5"]).ToArray(),
RemoveC6FromPool = ChkRemoveC6FormPool.Checked,
AutoStripRateUpFromFallback = ChkAutoStripRateUpFromFallback.Checked,
Weights4 = GetWeights(TxtWeight4.Text),
Weights5 = GetWeights(TxtWeight5.Text),
PoolBalanceWeights4 = GetWeights(TxtPoolWeight4.Text),
PoolBalanceWeights5 = GetWeights(TxtPoolWeight5.Text),
};
return banner;
}
private void BtnGen_Click(object sender, EventArgs e)
{
try
{
var banner = ParseBanner();
if (banner != null)
{
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)
{
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void BtnParse_Click(object sender, EventArgs e)
{
try
{
ShowBanner(JsonConvert.DeserializeObject<GachaBanner2>(TxtJson.Text));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - -
}
}

View File

@@ -0,0 +1,440 @@
<?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="ChkAutoStripRateUpFromFallback.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 287</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Size" type="System.Drawing.Size, System.Drawing">
<value>225, 21</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Text" xml:space="preserve">
<value>Auto Strip Rate Up From Fall back</value>
</data>
<data name="LblOptions.Location" type="System.Drawing.Point, System.Drawing">
<value>60, 260</value>
</data>
<data name="LblOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 17</value>
</data>
<data name="LblOptions.Text" xml:space="preserve">
<value>Optins</value>
</data>
<data name="ChkRemoveC6FormPool.Size" type="System.Drawing.Size, System.Drawing">
<value>157, 21</value>
</data>
<data name="ChkRemoveC6FormPool.Text" xml:space="preserve">
<value>Remove C6 Form Pool</value>
</data>
<data name="LnkOpenOldEditor.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 17</value>
</data>
<data name="LnkOpenOldEditor.Text" xml:space="preserve">
<value>Open old editor</value>
</data>
<data name="LblEventChance4.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 233</value>
</data>
<data name="LblEventChance4.Size" type="System.Drawing.Size, System.Drawing">
<value>96, 17</value>
</data>
<data name="LblEventChance4.Text" xml:space="preserve">
<value>Event Chance 4</value>
</data>
<data name="LblEventChance5.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 233</value>
</data>
<data name="LblEventChance5.Size" type="System.Drawing.Size, System.Drawing">
<value>96, 17</value>
</data>
<data name="LblEventChance5.Text" xml:space="preserve">
<value>Event Chance 5</value>
</data>
<data name="LblSortId.Location" type="System.Drawing.Point, System.Drawing">
<value>72, 204</value>
</data>
<data name="LblSortId.Text" xml:space="preserve">
<value>Sort</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>123, 17</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>Increment from 400</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>End Time</value>
</data>
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>32, 175</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Begin Time</value>
</data>
<data name="LblScheduleIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>49, 17</value>
</data>
<data name="LblScheduleIdTip.Text" xml:space="preserve">
<value>Unique</value>
</data>
<data name="CmbBannerType.Items" xml:space="preserve">
<value>Standard Wish</value>
</data>
<data name="CmbBannerType.Items1" xml:space="preserve">
<value>Character Event Wish</value>
</data>
<data name="CmbBannerType.Items2" xml:space="preserve">
<value>Weapon Event Wish</value>
</data>
<data name="LblSortIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 17</value>
</data>
<data name="LblSortIdTip.Text" xml:space="preserve">
<value>Show order</value>
</data>
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>25, 87</value>
</data>
<data name="LblBannerType.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 17</value>
</data>
<data name="LblBannerType.Text" xml:space="preserve">
<value>Banner Type</value>
</data>
<data name="RbCostItem224.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 21</value>
</data>
<data name="RbCostItem224.Text" xml:space="preserve">
<value>Acquaint Fate</value>
</data>
<data name="LblCostItem.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 148</value>
</data>
<data name="LblCostItem.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 17</value>
</data>
<data name="LblCostItem.Text" xml:space="preserve">
<value>Cost Item</value>
</data>
<data name="LblPrefabPath.Location" type="System.Drawing.Point, System.Drawing">
<value>59, 118</value>
</data>
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 17</value>
</data>
<data name="LblPrefabPath.Text" xml:space="preserve">
<value>Prefab</value>
</data>
<data name="RbCostItem223.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 146</value>
</data>
<data name="RbCostItem223.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 21</value>
</data>
<data name="RbCostItem223.Text" xml:space="preserve">
<value>Intertwined Fate</value>
</data>
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>Banner</value>
</data>
<data name="GrpFallbackPool.Text" xml:space="preserve">
<value>Fallback Pool</value>
</data>
<data name="ListFallbackItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
</value>
</data>
<data name="ListFallbackItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
</value>
</data>
<data name="ListFallbackItems.Groups2" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
</value>
</data>
<data name="ListFallbackItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
</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
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA0zLXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
</value>
</data>
<data name="GrpUpPool.Text" xml:space="preserve">
<value>Up Pool</value>
</data>
<data name="ListUpItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
</value>
</data>
<data name="ListUpItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
</value>
</data>
<data name="ListUpItems.Groups2" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
</value>
</data>
<data name="ListUpItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
</value>
</data>
<data name="BtnGen.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
</data>
<data name="BtnGen.Text" xml:space="preserve">
<value>Gen Json</value>
</data>
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
<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>Parse Json</value>
</data>
<data name="GrpWeights.Text" xml:space="preserve">
<value>Gacha weights</value>
</data>
<data name="LnkWeightHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>399, 0</value>
</data>
<data name="LnkWeightHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 17</value>
</data>
<data name="LnkWeightHelp.Text" xml:space="preserve">
<value>Help</value>
</data>
<data name="LblWeight4.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 61</value>
</data>
<data name="LblWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 17</value>
</data>
<data name="LblWeight4.Text" xml:space="preserve">
<value>Weights 4</value>
</data>
<data name="LblWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 32</value>
</data>
<data name="LblWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 17</value>
</data>
<data name="LblWeight5.Text" xml:space="preserve">
<value>Weights 5</value>
</data>
<data name="GrpBalance.Text" xml:space="preserve">
<value>Character and weapon balance (only mixed pools work)</value>
</data>
<data name="LblPoolWeight4.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 61</value>
</data>
<data name="LblPoolWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 17</value>
</data>
<data name="LblPoolWeight4.Text" xml:space="preserve">
<value>Pool Weight 4</value>
</data>
<data name="LblPoolWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 32</value>
</data>
<data name="LblPoolWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>90, 17</value>
</data>
<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>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,464 @@
<?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="ChkAutoStripRateUpFromFallback.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 287</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 21</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Text" xml:space="preserve">
<value>Авто возврат шанса выпадения с баннера</value>
</data>
<data name="LblOptions.Location" type="System.Drawing.Point, System.Drawing">
<value>56, 261</value>
</data>
<data name="LblOptions.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>
<data name="LblOptions.Text" xml:space="preserve">
<value>Опции</value>
</data>
<data name="ChkRemoveC6FormPool.Size" type="System.Drawing.Size, System.Drawing">
<value>157, 21</value>
</data>
<data name="ChkRemoveC6FormPool.Text" xml:space="preserve">
<value>Удалить пул форм C6</value>
</data>
<data name="LnkOpenOldEditor.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 17</value>
</data>
<data name="LnkOpenOldEditor.Text" xml:space="preserve">
<value>Открыть старый редактор</value>
</data>
<data name="LblGachaType.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 28</value>
</data>
<data name="LblGachaType.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 17</value>
</data>
<data name="LblGachaType.Text" xml:space="preserve">
<value>Тип Гачи</value>
</data>
<data name="LblEventChance4.Location" type="System.Drawing.Point, System.Drawing">
<value>210, 233</value>
</data>
<data name="LblEventChance4.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 17</value>
</data>
<data name="LblEventChance4.Text" xml:space="preserve">
<value>Шанс соб. 4*</value>
</data>
<data name="LblEventChance5.Location" type="System.Drawing.Point, System.Drawing">
<value>20, 233</value>
</data>
<data name="LblEventChance5.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 17</value>
</data>
<data name="LblEventChance5.Text" xml:space="preserve">
<value>Шанс соб. 5*</value>
</data>
<data name="LblSortId.Location" type="System.Drawing.Point, System.Drawing">
<value>66, 204</value>
</data>
<data name="LblSortId.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 17</value>
</data>
<data name="LblSortId.Text" xml:space="preserve">
<value>Сорт.</value>
</data>
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 17</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>Увеличение с 400</value>
</data>
<data name="LblEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>234, 176</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>Конец</value>
</data>
<data name="LblScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 57</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>98, 17</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>ID расписания</value>
</data>
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>53, 176</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Начало</value>
</data>
<data name="LblScheduleIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 17</value>
</data>
<data name="LblScheduleIdTip.Text" xml:space="preserve">
<value>Уникальный</value>
</data>
<data name="CmbBannerType.Items" xml:space="preserve">
<value>Стандартная Молитва</value>
</data>
<data name="CmbBannerType.Items1" xml:space="preserve">
<value>Молитва события персонажа</value>
</data>
<data name="CmbBannerType.Items2" xml:space="preserve">
<value>Молитва события с оружием</value>
</data>
<data name="LblSortIdTip.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 17</value>
</data>
<data name="LblSortIdTip.Text" xml:space="preserve">
<value>Показать порядок</value>
</data>
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
<value>18, 87</value>
</data>
<data name="LblBannerType.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="LblBannerType.Text" xml:space="preserve">
<value>Тип баннера</value>
</data>
<data name="RbCostItem224.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 21</value>
</data>
<data name="RbCostItem224.Text" xml:space="preserve">
<value>Судьбоносные</value>
</data>
<data name="LblCostItem.Location" type="System.Drawing.Point, System.Drawing">
<value>34, 148</value>
</data>
<data name="LblCostItem.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 17</value>
</data>
<data name="LblCostItem.Text" xml:space="preserve">
<value>Стоимость</value>
</data>
<data name="LblPrefabPath.Location" type="System.Drawing.Point, System.Drawing">
<value>47, 118</value>
</data>
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 17</value>
</data>
<data name="LblPrefabPath.Text" xml:space="preserve">
<value>Готовый</value>
</data>
<data name="RbCostItem223.Location" type="System.Drawing.Point, System.Drawing">
<value>234, 146</value>
</data>
<data name="RbCostItem223.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 21</value>
</data>
<data name="RbCostItem223.Text" xml:space="preserve">
<value>Переплетающиеся</value>
</data>
<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
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
</value>
</data>
<data name="ListFallbackItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
</value>
</data>
<data name="ListFallbackItems.Groups2" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
</value>
</data>
<data name="ListFallbackItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
</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
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA0zLXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
</value>
</data>
<data name="GrpUpPool.Text" xml:space="preserve">
<value>Верхний Пул</value>
</data>
<data name="ListUpItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
</value>
</data>
<data name="ListUpItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA01LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
</value>
</data>
<data name="ListUpItems.Groups2" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgYXZhdGFyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
</value>
</data>
<data name="ListUpItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAA00LXN0YXIgd2VhcG9uBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdu
bWVudAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
</value>
</data>
<data name="BtnGen.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 23</value>
</data>
<data name="BtnGen.Text" xml:space="preserve">
<value>Сген. Json</value>
</data>
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
<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>
</data>
<data name="GrpWeights.Text" xml:space="preserve">
<value>Gacha Веса</value>
</data>
<data name="LnkWeightHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>375, 0</value>
</data>
<data name="LnkWeightHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 17</value>
</data>
<data name="LnkWeightHelp.Text" xml:space="preserve">
<value>Помощь</value>
</data>
<data name="LblWeight4.Location" type="System.Drawing.Point, System.Drawing">
<value>54, 61</value>
</data>
<data name="LblWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblWeight4.Text" xml:space="preserve">
<value>Веса 5*</value>
</data>
<data name="LblWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>54, 32</value>
</data>
<data name="LblWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="LblWeight5.Text" xml:space="preserve">
<value>Веса 5*</value>
</data>
<data name="GrpBalance.Text" xml:space="preserve">
<value>Баланс персонажа и оружия (работают только смешанные пулы)</value>
</data>
<data name="LblPoolWeight4.Location" type="System.Drawing.Point, System.Drawing">
<value>28, 61</value>
</data>
<data name="LblPoolWeight4.Size" type="System.Drawing.Size, System.Drawing">
<value>78, 17</value>
</data>
<data name="LblPoolWeight4.Text" xml:space="preserve">
<value>Пул Веса 4*</value>
</data>
<data name="LblPoolWeight5.Location" type="System.Drawing.Point, System.Drawing">
<value>28, 29</value>
</data>
<data name="LblPoolWeight5.Size" type="System.Drawing.Size, System.Drawing">
<value>78, 17</value>
</data>
<data name="LblPoolWeight5.Text" xml:space="preserve">
<value>Пул Веса 5*</value>
</data>
<data name="GrpWeightChart.Text" xml:space="preserve">
<value>Таблица веса</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Редактор баннеров Gacha</value>
</data>
</root>

View File

@@ -0,0 +1,298 @@
<?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="ChkAutoStripRateUpFromFallback.Text" xml:space="preserve">
<value>自動避免UP被基礎抽中</value>
</data>
<data name="LblOptions.Text" xml:space="preserve">
<value>選項</value>
</data>
<data name="LnkOpenOldEditor.Text" xml:space="preserve">
<value>打開舊版本編輯器</value>
</data>
<data name="LblEventChance4.Text" xml:space="preserve">
<value>4星活動爆率</value>
</data>
<data name="LblEventChance5.Text" xml:space="preserve">
<value>5星活動爆率</value>
</data>
<data name="LblSortId.Text" xml:space="preserve">
<value>順序</value>
</data>
<data name="LblGachaTypeTip.Text" xml:space="preserve">
<value>從400開始順序遞增</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>結束時間</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>開始時間</value>
</data>
<data name="LblSortIdTip.Text" xml:space="preserve">
<value>客戶端中顯示的順序</value>
</data>
<data name="LblBannerType.Text" xml:space="preserve">
<value>獎池類型</value>
</data>
<data name="RbCostItem224.Text" xml:space="preserve">
<value>相遇之緣</value>
</data>
<data name="LblCostItem.Text" xml:space="preserve">
<value>祈願道具</value>
</data>
<data name="LblPrefabPath.Text" xml:space="preserve">
<value>預製</value>
</data>
<data name="RbCostItem223.Text" xml:space="preserve">
<value>糾纏之緣</value>
</data>
<data name="GrpBannerValues.Text" xml:space="preserve">
<value>卡池參數</value>
</data>
<data name="ListFallbackItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNQs=
</value>
</data>
<data name="ListFallbackItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNQs=
</value>
</data>
<data name="ListFallbackItems.Groups2" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo05pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBBNAs=
</value>
</data>
<data name="ListFallbackItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo05pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXNAs=
</value>
</data>
<data name="ListFallbackItems.Groups4" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
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
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
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE1Cw==
</value>
</data>
<data name="ListUpItems.Groups1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo15pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc1Cw==
</value>
</data>
<data name="ListUpItems.Groups2" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo05pif6KeS6ImyBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcEE0Cw==
</value>
</data>
<data name="ListUpItems.Groups3" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACJTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0dyb3VwBAAAAAZIZWFkZXIPSGVhZGVyQWxpZ25tZW50A1Rh
ZwROYW1lAQQCAShTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ib3Jpem9udGFsQWxpZ25tZW50AgAAAAIAAAAG
AwAAAAo05pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAJR3JvdXBVcFc0Cw==
</value>
</data>
<data name="LnkWeightHelp.Text" xml:space="preserve">
<value>幫助</value>
</data>
<data name="LblWeight4.Text" xml:space="preserve">
<value>4星權重</value>
</data>
<data name="LblWeight5.Text" xml:space="preserve">
<value>5星權重</value>
</data>
<data name="GrpWeights.Text" xml:space="preserve">
<value>卡池權重與保底機制</value>
</data>
<data name="LblPoolWeight4.Text" xml:space="preserve">
<value>4星池權重</value>
</data>
<data name="LblPoolWeight5.Text" xml:space="preserve">
<value>5星池權重</value>
</data>
<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>卡池編輯器</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,491 @@
<?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="BtnCopy.Text" xml:space="preserve">
<value>複製</value>
</data>
<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="TPRemoteCall.Text" xml:space="preserve">
<value>遠程</value>
</data>
<data name="LnkInventoryKamera.Text" xml:space="preserve">
<value>存檔掃描開源工具</value>
</data>
<data name="LblGOODHelp.Text" xml:space="preserve">
<value>快來把你的官服存檔導入GC吧</value>
</data>
<data name="ButtonOpenGOODImport.Text" xml:space="preserve">
<value>導入GOOD檔案</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblHostTip.Size" type="System.Drawing.Size, System.Drawing">
<value>206, 17</value>
</data>
<data name="LblHostTip.Text" xml:space="preserve">
<value>請確保地址中包含 http:// 或 https://</value>
</data>
<data name="GrpServerStatus.Text" xml:space="preserve">
<value>伺服器狀態</value>
</data>
<data name="LnkOpenCommandLabel.Text" xml:space="preserve">
<value>遠程執行插件</value>
</data>
<data name="LblServerVersionLabel.Text" xml:space="preserve">
<value>遊戲版本</value>
</data>
<data name="LblPlayerCountLabel.Text" xml:space="preserve">
<value>當前玩家數</value>
</data>
<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>
</data>
<data name="BtnConnectOpenCommand.Text" xml:space="preserve">
<value>連接</value>
</data>
<data name="LblVerificationCode.Text" xml:space="preserve">
<value>驗證碼</value>
</data>
<data name="BtnSendVerificationCode.Text" xml:space="preserve">
<value>發送驗證碼</value>
</data>
<data name="BtnConsoleConnect.Text" xml:space="preserve">
<value>連接</value>
</data>
<data name="LblConsoleTip.Text" xml:space="preserve">
<value>請注意,控制台狀態下普通命令必須指定目標
即設置包含UID</value>
</data>
<data name="BtnQueryServerStatus.Text" xml:space="preserve">
<value>查詢</value>
</data>
<data name="LblHost.Text" xml:space="preserve">
<value>伺服器地址</value>
</data>
<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>割草機工具箱
這是一個免費且開源的項目
如果覺得這對你很有幫助可以為我點一個免費的Star
如果願意請我喝一杯奶茶,那就更好了 : )
指令生成有問題或者有新的功能請求都可以來Github提出</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>
<data name="BtnCreateAccount.Text" xml:space="preserve">
<value>+ 創建</value>
</data>
<data name="LblAccountUserName.Text" xml:space="preserve">
<value>用戶名</value>
</data>
<data name="GrpPermission.Text" xml:space="preserve">
<value>權限管理</value>
</data>
<data name="LblPerm.Text" xml:space="preserve">
<value>權限</value>
</data>
<data name="LblPermUID.Text" xml:space="preserve">
<value>目標UID</value>
</data>
<data name="TPScene.Text" xml:space="preserve">
<value>場景</value>
</data>
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>含場景ID</value>
</data>
<data name="BtnTeleport.Text" xml:space="preserve">
<value>傳送</value>
</data>
<data name="LblClimateType.Text" xml:space="preserve">
<value>設置天氣</value>
</data>
<data name="LblSceneDescription.Text" xml:space="preserve">
<value>場景控制
提示:大部分場景沒有作用,無法進入。</value>
</data>
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
<value>290, 51</value>
</data>
<data name="LblTp.Text" xml:space="preserve">
<value>座標傳送
提示:遊戲內可以通過小地圖的'魚鉤'標記來快捷傳送
命令中可以用~表示當前位置,~N 表示相對當前N</value>
</data>
<data name="BtnSaveGiveItemLog.Text" xml:space="preserve">
<value>√ 記錄</value>
</data>
<data name="BtnRemoveGiveItemLog.Text" xml:space="preserve">
<value>× 刪除</value>
</data>
<data name="GrpGiveItemRecord.Text" xml:space="preserve">
<value>物品記錄本</value>
</data>
<data name="LblGameItemAmount.Text" xml:space="preserve">
<value>數量</value>
</data>
<data name="LblGameItemLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="LblGiveCommandDescription.Text" xml:space="preserve">
<value>給玩家指定物品
說明:可選擇直接給到背包或者掉落到世界</value>
</data>
<data name="BtnGiveAllWeapons.Text" xml:space="preserve">
<value>獲得所有武器</value>
</data>
<data name="LblWeaponDescription.Text" xml:space="preserve">
<value>獲取武器
說明:設定等級會自動設定突破等級
&gt;20級突破1
&gt;40級突破2
&gt;50級突破3
&gt;60級突破4
&gt;70級突破5
&gt;80級突破6</value>
</data>
<data name="LblWeaponRefinement.Text" xml:space="preserve">
<value>精煉等級</value>
</data>
<data name="LblWeaponAmount.Text" xml:space="preserve">
<value>數量</value>
</data>
<data name="LblWeaponLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="GrpSetConstellation.Text" xml:space="preserve">
<value>設置命座</value>
</data>
<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="BtnUnlockStat.Text" xml:space="preserve">
<value>解鎖</value>
</data>
<data name="BtnLockStat.Text" xml:space="preserve">
<value>鎖定</value>
</data>
<data name="GrpTalentLevel.Text" xml:space="preserve">
<value>技能等級</value>
</data>
<data name="LnkTalentNormalATK.Text" xml:space="preserve">
<value>普通攻擊</value>
</data>
<data name="BtnGiveAllChar.Text" xml:space="preserve">
<value>一鍵獲得所有角色</value>
</data>
<data name="LblAvatarLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="LblAvatarSkillLevelLabel.Text" xml:space="preserve">
<value>技能等級</value>
</data>
<data name="ChkInfiniteHP.Text" xml:space="preserve">
<value>無限血</value>
</data>
<data name="BtnSaveSpawnLog.Text" xml:space="preserve">
<value>√ 記錄</value>
</data>
<data name="BtnRemoveSpawnLog.Text" xml:space="preserve">
<value>× 刪除</value>
</data>
<data name="GrpSpawnRecord.Text" xml:space="preserve">
<value>生成記錄本</value>
</data>
<data name="GrpEntityType.Text" xml:space="preserve">
<value>列表分類</value>
</data>
<data name="RbEntityAnimal.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 21</value>
</data>
<data name="RbEntityAnimal.Text" xml:space="preserve">
<value>生物誌</value>
</data>
<data name="RbEntityMonster.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 21</value>
</data>
<data name="RbEntityMonster.Text" xml:space="preserve">
<value>討伐對象</value>
</data>
<data name="LblSpawnDescription.Text" xml:space="preserve">
<value>在玩家附近召喚生物</value>
</data>
<data name="LblEntityAmount.Text" xml:space="preserve">
<value>數量</value>
</data>
<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>
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
<value>未發佈的任務</value>
</data>
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
<value>隱藏的任務</value>
</data>
<data name="BtnFinishQuest.Text" xml:space="preserve">
<value>完成任務</value>
</data>
<data name="BtnAddQuest.Text" xml:space="preserve">
<value>添加任務</value>
</data>
<data name="LblQuestDescription.Text" xml:space="preserve">
<value>添加或完成任務
提示:許多任務需要服務端腳本支持
囙此任務可以接,可以完成,但是不一定可以做</value>
</data>
<data name="TPArtifact.Text" xml:space="preserve">
<value>聖遺物</value>
</data>
<data name="LblArtifactSet.Text" xml:space="preserve">
<value>套裝</value>
</data>
<data name="LblArtifactLevel.Text" xml:space="preserve">
<value>等級</value>
</data>
<data name="LblSubAttribution.Text" xml:space="preserve">
<value>副詞條</value>
</data>
<data name="LblMainAttribution.Text" xml:space="preserve">
<value>主詞條</value>
</data>
<data name="LblArtifactStars.Text" xml:space="preserve">
<value>星級</value>
</data>
<data name="TPCustom.Text" xml:space="preserve">
<value>自定義</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>導出</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>載入</value>
</data>
<data name="LblCustomName.Text" xml:space="preserve">
<value>標籤</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 刪除</value>
</data>
<data name="TPHome.Text" xml:space="preserve">
<value>主頁</value>
</data>
<data name="BtnOpenDropEditor.Text" xml:space="preserve">
<value>掉落物編輯器</value>
</data>
<data name="BtnOpenTextMap.Text" xml:space="preserve">
<value>文本瀏覽器</value>
</data>
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
<value>獎池編輯器</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置頂</value>
</data>
<data name="TPMail.Text" xml:space="preserve">
<value>郵件</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblClearMailContent.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</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

@@ -1,4 +1,4 @@
namespace GrasscutterTools
namespace GrasscutterTools.Forms
{
partial class FormTextMapBrowser
{
@@ -90,10 +90,10 @@
//
// DGVTextMap
//
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
this.DGVTextMap.AllowUserToAddRows = false;
this.DGVTextMap.AllowUserToDeleteRows = false;
this.DGVTextMap.AllowUserToResizeRows = false;
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
this.DGVTextMap.BackgroundColor = System.Drawing.Color.White;
this.DGVTextMap.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.DGVTextMap.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {

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;
@@ -26,7 +25,7 @@ using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Properties;
namespace GrasscutterTools
namespace GrasscutterTools.Forms
{
public partial class FormTextMapBrowser : Form
{

View File

@@ -117,289 +117,289 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="TxtTextMapFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="TxtTextMapFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="TxtTextMapFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="TxtTextMapFilter.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.Name" xml:space="preserve">
<value>TxtTextMapFilter</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 12</value>
</data>
<data name="BtnSelectRecoursePath.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
<value>浏览</value>
</data>
<data name="&gt;&gt;BtnSelectRecoursePath.Name" xml:space="preserve">
<value>BtnSelectRecoursePath</value>
</data>
<data name="&gt;&gt;BtnSelectRecoursePath.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnSelectRecoursePath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSelectRecoursePath.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>548, 12</value>
</data>
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 25</value>
</data>
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;CmbLanguage.Name" xml:space="preserve">
<value>CmbLanguage</value>
</data>
<data name="&gt;&gt;CmbLanguage.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;CmbLanguage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;CmbLanguage.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>510, 15</value>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
<value>177, 15</value>
</data>
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="LblLanguage.Text" xml:space="preserve">
<value>语言</value>
<data name="&gt;&gt;BtnSearch.Name" xml:space="preserve">
<value>BtnSearch</value>
</data>
<data name="&gt;&gt;LblLanguage.Name" xml:space="preserve">
<value>LblLanguage</value>
</data>
<data name="&gt;&gt;LblLanguage.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="ColumnText.HeaderText" xml:space="preserve">
<value>Text</value>
</data>
<data name="&gt;&gt;LblLanguage.Parent" xml:space="preserve">
<value>$this</value>
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="TxtTextMapFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="&gt;&gt;DGVTextMap.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblLanguage.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 12</value>
</data>
<data name="ChkTopMost.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 14</value>
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
<value>80</value>
</data>
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置顶</value>
</data>
<data name="&gt;&gt;ChkTopMost.Name" xml:space="preserve">
<value>ChkTopMost</value>
</data>
<data name="&gt;&gt;ChkTopMost.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ChkTopMost.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ChkTopMost.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
<value>177, 15</value>
</data>
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
<value>327, 17</value>
</data>
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<data name="ColumnID.Width" type="System.Int32, mscorlib">
<value>240</value>
</data>
<data name="LblResourcesPath.Text" xml:space="preserve">
<value>请选择Resources路径</value>
</data>
<data name="&gt;&gt;LblResourcesPath.Name" xml:space="preserve">
<value>LblResourcesPath</value>
<data name="&gt;&gt;LblResourcesPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblResourcesPath.Type" xml:space="preserve">
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;LblLanguage.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblResourcesPath.Parent" xml:space="preserve">
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
<value>327, 17</value>
</data>
<data name="TxtTextMapFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>555, 23</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>文本映射表浏览器</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
<value>636, 379</value>
</data>
<data name="&gt;&gt;BtnSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblResourcesPath.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>573, 41</value>
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
<data name="&gt;&gt;LblResourcesPath.Name" xml:space="preserve">
<value>LblResourcesPath</value>
</data>
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="BtnSearch.Text" xml:space="preserve">
<value>搜索</value>
</data>
<data name="&gt;&gt;BtnSearch.Name" xml:space="preserve">
<value>BtnSearch</value>
</data>
<data name="&gt;&gt;BtnSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSearch.ZOrder" xml:space="preserve">
<data name="TxtTextMapFilter.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
<data name="&gt;&gt;ColumnText.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="ColumnHash.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="ColumnHash.HeaderText" xml:space="preserve">
<value>Hash</value>
</data>
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
<value>80</value>
</data>
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="ColumnID.HeaderText" xml:space="preserve">
<value>ID</value>
</data>
<data name="ColumnID.Width" type="System.Int32, mscorlib">
<value>240</value>
</data>
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="ColumnText.HeaderText" xml:space="preserve">
<value>Text</value>
</data>
<data name="ColumnText.Width" type="System.Int32, mscorlib">
<value>250</value>
</data>
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 70</value>
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>548, 12</value>
</data>
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
<value>636, 379</value>
</data>
<data name="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;DGVTextMap.Name" xml:space="preserve">
<value>DGVTextMap</value>
</data>
<data name="&gt;&gt;DGVTextMap.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DGVTextMap.Parent" xml:space="preserve">
<data name="&gt;&gt;TxtTextMapFilter.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;DGVTextMap.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 name="&gt;&gt;BtnSelectRecoursePath.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>660, 461</value>
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 25</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>微软雅黑, 9pt</value>
<data name="BtnSearch.Text" xml:space="preserve">
<value>搜索</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>600, 400</value>
<data name="&gt;&gt;DGVTextMap.Name" xml:space="preserve">
<value>DGVTextMap</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>文本映射表浏览器</value>
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;ColumnHash.Name" xml:space="preserve">
<value>ColumnHash</value>
</data>
<data name="&gt;&gt;ColumnHash.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;BtnSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;BtnSelectRecoursePath.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
<value>浏览</value>
</data>
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>510, 15</value>
</data>
<data name="&gt;&gt;LblResourcesPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;CmbLanguage.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;ChkTopMost.Name" xml:space="preserve">
<value>ChkTopMost</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>微软雅黑, 9pt</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>660, 461</value>
</data>
<data name="&gt;&gt;CmbLanguage.Name" xml:space="preserve">
<value>CmbLanguage</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="&gt;&gt;BtnSearch.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;ColumnID.Name" xml:space="preserve">
<value>ColumnID</value>
</data>
<data name="&gt;&gt;ColumnID.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="TxtTextMapFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;ChkTopMost.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="ColumnID.HeaderText" xml:space="preserve">
<value>ID</value>
</data>
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;ChkTopMost.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ColumnText.Name" xml:space="preserve">
<value>ColumnText</value>
</data>
<data name="&gt;&gt;ColumnText.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormTextMapBrowser</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;CmbLanguage.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DGVTextMap.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>573, 41</value>
</data>
<data name="&gt;&gt;BtnSelectRecoursePath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ChkTopMost.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ColumnHash.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;TxtTextMapFilter.Name" xml:space="preserve">
<value>TxtTextMapFilter</value>
</data>
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 70</value>
</data>
<data name="&gt;&gt;LblLanguage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblLanguage.Text" xml:space="preserve">
<value>语言</value>
</data>
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
</data>
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;CmbLanguage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置顶</value>
</data>
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;ColumnID.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnSelectRecoursePath.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>600, 400</value>
</data>
<data name="ChkTopMost.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 14</value>
</data>
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ColumnHash.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,151 @@
<?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="BtnSelectRecoursePath.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="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
<value>477, 15</value>
</data>
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>38, 17</value>
</data>
<data name="LblLanguage.Text" xml:space="preserve">
<value>Язык</value>
</data>
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 21</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>верхний</value>
</data>
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 17</value>
</data>
<data name="LblResourcesPath.Text" xml:space="preserve">
<value>Пожалуйста, выберите каталог ресурсов</value>
</data>
<data name="BtnSearch.Text" xml:space="preserve">
<value>Поиск</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Браузер карт</value>
</data>
</root>

View File

@@ -0,0 +1,135 @@
<?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="BtnSelectRecoursePath.Text" xml:space="preserve">
<value>瀏覽</value>
</data>
<data name="LblLanguage.Text" xml:space="preserve">
<value>語言</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>置頂</value>
</data>
<data name="LblResourcesPath.Text" xml:space="preserve">
<value>請選擇Resources路徑</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>文本映射表瀏覽器</value>
</data>
</root>

View File

@@ -0,0 +1,94 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Artifact data representation
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Artifact.cs
/// </summary>
public class Artifact
{
/// <summary>
/// e.g. "GladiatorsFinale"
/// </summary>
[JsonProperty("setKey")]
public string SetName { get; set; }
/// <summary>
/// //e.g. "plume"
/// type SlotKey = "flower" | "plume" | "sands" | "goblet" | "circlet"
/// </summary>
[JsonProperty("slotKey")]
public string GearSlot { get; set; }
/// <summary>
/// 1-5 inclusive
/// </summary>
[JsonProperty("rarity")]
public int Rarity { get; set; }
/// <summary>
/// mainStatKey
/// </summary>
[JsonProperty("mainStatKey")]
public string MainStat { get; set; }
/// <summary>
/// 0-20 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// substats
/// </summary>
[JsonProperty("substats")]
public SubStat[] SubStats { get; set; }
/// <summary>
/// where "" means not equipped.
/// </summary>
[JsonProperty("location")]
public string EquippedCharacter { get; set; }
/// <summary>
/// Whether the artifact is locked in game.
/// </summary>
[JsonProperty("lock")]
public bool Lock { get; set; }
public struct SubStat
{
/// <summary>
/// e.g. "critDMG_"
/// </summary>
[JsonProperty("key")]
public string Stat { get; set; }
/// <summary>
/// e.g. 19.4
/// </summary>
[JsonProperty("value")]
public double Value { get; set; }
}
}
}

View File

@@ -0,0 +1,72 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Character data representation
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Character.cs
/// </summary>
public class Character
{
/// <summary>
/// e.g. "Rosaria"
/// </summary>
[JsonProperty("key")]
public string Name { get; set; }
/// <summary>
/// 1-90 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// 0-6 inclusive
/// </summary>
[JsonProperty("constellation")]
public int Constellation { get; set; }
/// <summary>
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
/// </summary>
[JsonProperty("ascension")]
public int Ascension { get; set; }
/// <summary>
/// does not include boost from constellations. 1-15 inclusive
/// </summary>
[JsonProperty("talent")]
public Talents Talents { get; set; }
}
public struct Talents
{
[JsonProperty("auto")]
public int Auto { get; set; }
[JsonProperty("skill")]
public int Skill { get; set; }
[JsonProperty("burst")]
public int Burst { get; set; }
}
}

View File

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

View File

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

View File

@@ -0,0 +1,68 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.ComponentModel;
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Weapon data representation
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Weapon.cs
/// </summary>
public class Weapon
{
/// <summary>
/// e.g. "CrescentPike"
/// </summary>
[JsonProperty("key")]
public string Name { get; set; }
/// <summary>
/// 1-90 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
/// </summary>
[JsonProperty("ascension")]
public int AscensionLevel { get; set; }
/// <summary>
/// 1-5 inclusive
/// </summary>
[JsonProperty("refinement")]
public int RefinementLevel { get; set; }
/// <summary>
/// where "" means not equipped.
/// </summary>
[JsonProperty("location")]
[DefaultValue("")]
public string EquippedCharacter { get; set; }
/// <summary>
/// Whether the weapon is locked in game.
/// </summary>
[JsonProperty("lock")]
public bool Lock { get; set; }
}
}

View File

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

View File

@@ -0,0 +1,59 @@
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,21 @@
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

@@ -0,0 +1,190 @@
/**
* 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;
using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Gacha
{
/// <summary>
/// https://github.com/Grasscutters/Grasscutter/pull/639
/// </summary>
public class GachaBanner2
{
/// <summary>
/// 添加卡池请从400开始增加id数值进行添加这个id需要每个池子不一样
/// 如果你想添加大量卡池请按照每次增加固定数值的id进行添加比如411412413....
/// </summary>
[JsonProperty("gachaType")]
public int GachaType { get; set; } = 400;
/// <summary>
/// 这个id需要每个池子不一样如果你想添加大量卡池
/// 请按照每次增加固定数值的id进行添加,比如210022002300....
/// </summary>
[JsonProperty("scheduleId")]
public int ScheduleId { get; set; } = 800;
/// <summary>
/// 这个是卡池的预制路径id
/// </summary>
[JsonProperty("prefabPath")]
public string PrefabPath { get; set; } = "GachaShowPanel_A007";
/// <summary>
/// 这个是抽卡的预览背景路径id
/// </summary>
[JsonProperty("previewPrefabPath")]
public string PreviewPrefabPath { get; set; } = "UI_Tab_GachaShowPanel_A007";
/// <summary>
/// 这个是抽卡的标题路径id有可能与之前两项的id不同
/// 一般这3项的id只需保持一致即可就是A0xxxx为同一id
/// </summary>
[JsonProperty("titlePath")]
public string TitlePath { get; set; } = "UI_GACHA_SHOW_PANEL_A007_TITLE";
/// <summary>
/// 这个表示祈愿用的道具224是相遇之缘223是纠缠之缘 - 选择一个作为该卡池的抽卡道具
/// (提示请不要随便修改祈愿道具除了蓝球和粉球有可能会引发bug比如修改成摩拉抽卡可能导致卡住)
/// </summary>
[JsonProperty("costItem")]
public int CostItem { get; set; } = 224;
/// <summary>
/// 开始时间Unix时间戳
/// </summary>
[JsonProperty("beginTime")]
public int BeginTime { get; set; } = 0;
/// <summary>
/// 结束时间Unix时间戳
/// </summary>
[JsonProperty("endTime")]
public int EndTime { get; set; } = 1924992000;
/// <summary>
/// 卡池顺序
/// </summary>
[JsonProperty("sortId")]
public int SortId { get; set; } = 1000;
/// <summary>
/// 抽卡次数限制
/// </summary>
[JsonProperty("gachaTimesLimit")]
public int GachaTimesLimit { get; set; } = int.MaxValue;
/// <summary>
/// 4星的up角色或物品
/// </summary>
[JsonProperty("rateUpItems4")]
public int[] RateUpItems4 { get; set; } = { };
/// <summary>
/// 5星的up物品或者角色
/// </summary>
[JsonProperty("rateUpItems5")]
public int[] RateUpItems5 { get; set; } = { };
/// <summary>
/// 3星普通池
/// </summary>
[JsonProperty("fallbackItems3")]
public int[] FallbackItems3 { get; set; } = { 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 };
/// <summary>
/// 4星普通角色池
/// </summary>
[JsonProperty("fallbackItems4Pool1")]
public int[] FallbackItems4Pool1 { get; set; } = { 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 };
/// <summary>
/// 4星普通武器池
/// </summary>
[JsonProperty("fallbackItems4Pool2")]
public int[] FallbackItems4Pool2 { get; set; } = { 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 };
/// <summary>
/// 5星普通角色池
/// </summary>
[JsonProperty("fallbackItems5Pool1")]
public int[] FallbackItems5Pool1 { get; set; } = { 1003, 1016, 1042, 1035, 1041 };
/// <summary>
/// 5星普通角色池
/// </summary>
[JsonProperty("fallbackItems5Pool2")]
public int[] FallbackItems5Pool2 { get; set; } = { 11501, 11502, 12501, 12502, 13502, 13505, 14501, 14502, 15501, 15502 };
/// <summary>
/// 是否从奖池中移除玩家星座等级6级以上的角色
/// </summary>
[JsonProperty("removeC6FromPool")]
public bool RemoveC6FromPool { get; set; } = false;
/// <summary>
/// 自动从普通池中移除UP池物品或角色
/// </summary>
[JsonProperty("autoStripRateUpFromFallback")]
public bool AutoStripRateUpFromFallback { get; set; } = true;
/// <summary>
/// 4星权重
/// </summary>
[JsonProperty("weights4")]
public int[,] Weights4 { get; set; } = { { 1, 510 }, { 8, 510 }, { 10, 10000 } };
/// <summary>
/// 5星权重
/// </summary>
[JsonProperty("weights5")]
public int[,] Weights5 { get; set; } = { { 1, 75 }, { 73, 150 }, { 90, 10000 } };
/// <summary>
/// 4星平衡奖池权重即中的是武器还是角色
/// </summary>
[JsonProperty("poolBalanceWeights4")]
public int[,] PoolBalanceWeights4 { get; set; } = { { 1, 255 }, { 17, 255 }, { 21, 10455 } };
/// <summary>
/// 5星平衡奖池权重即中的是武器还是角色
/// </summary>
[JsonProperty("poolBalanceWeights5")]
public int[,] PoolBalanceWeights5 { get; set; } = { { 1, 30 }, { 147, 150 }, { 181, 10230 } };
/// <summary>
/// 4星事件概率抽中后摇1~100随机数如果大于该值则抽中up池
/// </summary>
[JsonProperty("eventChance4")]
public int EventChance4 { get; set; } = 50;
/// <summary>
/// 5星事件概率抽中后摇1~100随机数如果大于该值则抽中up池
/// </summary>
[JsonProperty("eventChance5")]
public int EventChance5 { get; set; } = 50;
/// <summary>
/// 这个有3种类型standard表示常驻池event表示限时角色祈愿池
/// weapon表示限时武器祈愿池选择一种类型的卡池
/// </summary>
[JsonProperty("bannerType"), JsonConverter(typeof(StringEnumConverter))]
public BannerType BannerType { get; set; } = BannerType.STANDARD;
}
}

View File

@@ -1,4 +1,4 @@
/**
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
@@ -33,11 +33,10 @@ namespace GrasscutterTools.Game
AvatarColors = new ItemMap(Resources.AvatarColor);
Items = new ItemMap(Resources.Item);
Monsters = new ItemMap(Resources.Monster);
NPCs = new ItemMap(Resources.NPC);
//NPCs = new ItemMap(Resources.NPC);
Scenes = new ItemMap(Resources.Scene);
Weapons = new ItemMap(Resources.Weapon);
WeaponColors = new ItemMap(Resources.WeaponColor);
Ornaments = new ItemMap(Resources.Ornament);
GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
Quests = new ItemMap(Resources.Quest);
}
@@ -60,7 +59,7 @@ namespace GrasscutterTools.Game
public static ItemMap Monsters { get; private set; }
public static ItemMap NPCs { get; private set; }
//public static ItemMap NPCs { get; private set; }
public static ItemMap Scenes { get; private set; }
@@ -68,10 +67,8 @@ namespace GrasscutterTools.Game
public static ItemMap WeaponColors { get; private set; }
public static ItemMap Ornaments { get; private set; }
public static ItemMap GachaBannerPrefabs { get; private set; }
public static ItemMap Quests { 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);
@@ -38,9 +39,9 @@ namespace GrasscutterTools.Game
if (si > 0 && int.TryParse(line.Substring(0, si).Trim(), out int id))
{
var name = line.Substring(si + 1).Trim();
if (!string.IsNullOrEmpty(name))
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,7 @@ 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());
}
}

View File

@@ -0,0 +1,57 @@
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,38 @@
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

@@ -46,7 +46,7 @@ namespace GrasscutterTools.Game
ManualTextMap = new Dictionary<string, string>();
while (reader.Read())
{
if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "TextMapId")
if (reader.TokenType == JsonToken.PropertyName && ((string)reader.Value == "TextMapId" || (string)reader.Value == "textMapId"))
{
var textMapId = reader.ReadAsString();
reader.Read();

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