Compare commits

...

167 Commits

Author SHA1 Message Date
c94a7683e4 Update tab order 2023-08-25 19:53:40 +08:00
b407012bef Add FreezeTime and LockWeather to scene page 2023-08-25 19:47:23 +08:00
bb7d28153f Enlarge custom commands font size 2023-08-25 19:39:30 +08:00
627d9c7cd2 Add fly command 2023-08-25 19:37:14 +08:00
53a83fd7a7 Update version to v1.12.2 2023-08-24 19:51:49 +08:00
c2ca091662 Update Items filter 2023-08-24 19:51:30 +08:00
738a755353 Update All Gadgets
Update Spawn filter
2023-08-24 19:41:30 +08:00
dcbd946407 Fix console include @uid issue 2023-08-24 17:16:30 +08:00
2a8cebcbb5 Clean up all code 2023-08-24 15:18:12 +08:00
434ec7b2df Fix Jadefall's Splendor 2023-08-24 14:57:15 +08:00
c2ff37facf Update scene dungeon names 2023-08-24 13:49:15 +08:00
f48c9b4d0b Update 4.0 Quests 2023-08-24 00:02:19 +08:00
1d734479d1 Update filter button UI 2023-08-23 23:34:13 +08:00
a989581d59 Swap the run and copy button positions 2023-08-23 23:05:24 +08:00
6ab9d3842c Update version to v1.12.1 2023-08-23 22:40:42 +08:00
b69b2941b6 Fix auto check local server error 2023-08-23 22:39:40 +08:00
90deaa84b4 Update Scenes and avatar/weapon colors 2023-08-22 22:40:33 +08:00
403cc3fe52 Add GC 1.7 2023-08-22 22:24:01 +08:00
dd4eb36c17 Update Banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-08-22 22:23:08 +08:00
2645e16bee Add Resources update tool 2023-08-22 22:17:47 +08:00
82668c4c6a Update All 4.0 Ids 2023-08-22 22:17:18 +08:00
8fce4a8995 Update 4.0 Ids(Activity/Dungeon/Weapon) 2023-08-22 00:16:35 +08:00
Deuteriunt
4cfbebcc5a Update Activity/Avatar/Weapon ids(CHS) (#202) 2023-08-20 14:57:40 +08:00
40db4236ba Add Commandline Usages 2023-08-02 18:06:43 +08:00
eef4687ed6 Clean up all code using CodeMaid 2023-08-02 17:43:01 +08:00
e9a3f4014e Remove debug code 2023-08-02 17:27:50 +08:00
749aae02ca Add GC v1.6.3 2023-08-02 17:26:14 +08:00
fc3fd10081 Add Server connection records (close #199) 2023-08-02 17:25:31 +08:00
65e664f35f Add shortcut keys Alt+[0~9] to switch pages (close #201) 2023-07-28 21:21:57 +08:00
ab9a617619 Allows setting individual key as HotKey 2023-07-25 21:17:02 +08:00
f629bc9993 Add HotKey Screenshot 2023-07-22 00:21:06 +08:00
dc7f48139e Update Command versions 2023-07-22 00:14:01 +08:00
da8c511d60 Update version to v1.11.0 2023-07-22 00:11:14 +08:00
eb60f402a4 Add Setting Upgrade 2023-07-22 00:11:01 +08:00
c82ce1ea35 Add HotKey Page (close #190) 2023-07-22 00:10:40 +08:00
9524ea5ab4 Update connection failure text (close #196) 2023-07-21 22:02:53 +08:00
caf18eaa7a Merge branch 'main' of https://github.com/jie65535/GrasscutterCommandGenerator 2023-07-21 21:41:20 +08:00
2cdcb4a599 Update spawn level maximum to 200 (close #198) 2023-07-21 21:41:00 +08:00
Deuteriunt
3407ca61fd Update 3.8 Activity ID (#195)
* main

* Update WeaponColor.txt

* Update 3.8 Activity ID and untranslated sentences

* Remove redundant changes

* Update Weapon.txt

---------

Co-authored-by: jie65535 <jie65535@qq.com>
2023-07-07 23:40:56 +08:00
964b7ced8b Merge pull request #194 from TomyJan/main
add new skins for custom command `All skins`
2023-06-28 21:02:20 +08:00
TomyJan
702267003b add new skins for custom command All skins 2023-06-28 20:52:20 +08:00
abf970b783 Update host url check 2023-06-26 22:56:32 +08:00
6855b6299f Add Kot key utils from https://github.com/jie65535/KeyGo 2023-06-18 18:19:51 +08:00
b77d242bd9 Update version to v1.10.1 2023-06-18 18:02:49 +08:00
01016b1fa1 Fix tips 2023-06-18 18:02:39 +08:00
b2b656b6cb Support for command line arguments (#155) 2023-06-18 18:02:02 +08:00
aabe6664b4 Update Cutscene translates(CHT) 2023-06-10 11:28:19 +08:00
馬良※チノ
5869a72645 Cutscenes translation (#189)
* 200201

* i forgot xd

* 区分渊下宫与三界路飨祭

* 踏鞴砂

* 沙漠书 激活小塔柱子

* 3.6小活动(风沙轰鸣) 打沙虫动画

* 甘露池

* i forget x2 xd

* idk x3 lmao

* Update Cutscene.txt
2023-06-10 10:11:11 +08:00
df3ab12165 Update Activity editor screenshots 2023-06-09 23:59:47 +08:00
03fe8909d0 Update Activity Translates 2023-06-09 23:54:10 +08:00
2ec4bc9333 Remove unused dependencies 2023-06-09 23:07:48 +08:00
c1b89a2b9a Update Tools page 2023-06-09 22:42:33 +08:00
6706525e77 Update Dungeon resources 2023-06-09 22:42:11 +08:00
981b8377d8 Add /troubleshoot to custom commands 2023-06-09 21:52:00 +08:00
945329d109 Link https://github.com/Zhaokugua/Grasscutter_Banners 2023-06-09 21:47:06 +08:00
304f3484e3 Update 3.7.2 banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-06-09 21:38:24 +08:00
47ad6dae6a Update Cutscene screenshot 2023-06-09 21:35:42 +08:00
0448bb0ea9 Update Cutscene Translates 2023-06-09 21:35:16 +08:00
moux23333
5009d148a1 Cutscenes translation 3 (#188) 2023-06-09 14:00:15 +08:00
馬良※チノ
8427103a7e Cutscenes translation 2 (#187)
* 116 117

* 75-86

* Update Cutscene.txt
2023-06-09 13:23:01 +08:00
2767cb44d7 Fix cutscene encoding 2023-06-09 00:18:57 +08:00
moux23333
416ffd6435 Cutscenes translation (#186)
* Cutscenes translation 1

* Cutscene translation 2
2023-06-08 23:52:41 +08:00
ff554ce369 Update PageScene localization 2023-06-08 22:52:27 +08:00
0698671c05 Update Cutscene.txt 2023-06-08 22:51:56 +08:00
67468cf28b Throw ping exception 2023-06-08 21:21:03 +08:00
058a6b7ab2 Update version to v1.10.0 2023-06-08 21:19:36 +08:00
1ccb3656c2 Add Cutscene command to Scene page 2023-06-08 21:19:26 +08:00
6da7e1d4d0 Fix Artifact MainAttribution changes without refreshing 2023-05-30 20:20:18 +08:00
119c8c87ee Remove temp file 2023-05-30 20:03:23 +08:00
2758b4d896 Update version to v1.9.1 2023-05-30 19:58:31 +08:00
d8c7f0ad56 Update 3.7 Resources 2023-05-30 19:58:00 +08:00
0d8b51f199 Update PageAbout.resx 2023-05-29 20:12:52 +08:00
6e296edf11 Update README.md 2023-05-29 20:08:18 +08:00
072066ac87 Update README_zh-tw.md 2023-05-29 20:08:08 +08:00
a359dea603 Update README_zh-cn.md 2023-05-29 20:07:56 +08:00
29decd4899 Update README.md 2023-05-29 20:06:44 +08:00
92a5d53d35 Update 3.7 first half banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-05-25 19:25:29 +08:00
40e33dcb1c Update All activity ids-3.7 from https://github.com/dplek/Genshin-Activity-ids 2023-05-25 19:23:00 +08:00
Deuteriunt
2b2757ccff Add 3.7 Avatar and Weapon id (#182)
* main

* Update WeaponColor.txt

---------

Co-authored-by: jie65535 <jie65535@qq.com>
2023-05-25 12:39:44 +08:00
f57f4097ac Fix UI issue 2023-05-14 19:05:42 +08:00
5865441074 Fix activity id not set 2023-05-14 18:54:03 +08:00
2d916392c1 Fix CHS and CHT Achievement 2023-05-14 18:52:50 +08:00
dec3b2261f Fix Activity add issue 2023-05-14 18:52:25 +08:00
5b0cb912e4 Fix null ptr 2023-05-14 18:33:37 +08:00
5cbdaa7134 Add Activity Editor Translates 2023-05-14 15:33:31 +08:00
b2f59431a6 Update page title resource 2023-05-14 10:25:35 +08:00
04ec214714 Add SetProp Translates 2023-05-13 23:49:55 +08:00
196b56ab71 Add Set Prop Page 2023-05-13 21:57:57 +08:00
226742776f Add Activity Config Editor (CHS Only) 2023-05-08 22:53:40 +08:00
f4ec2ee5fa Update indexes 2023-05-08 00:02:51 +08:00
f33d37cd90 Add achievement page screenshots 2023-05-07 16:49:34 +08:00
2394ec7f5d Add achievement page translations 2023-05-07 16:43:47 +08:00
8baa61b72c Fix index offset error 2023-05-07 16:35:31 +08:00
f35ea79475 Add prompt to download from Action 2023-05-07 16:25:26 +08:00
46b8ca0b63 Add NavContainer splitter distance record
Fix not redrawing when Nav list size changed
2023-05-07 15:27:30 +08:00
b8cfaf308d Update page navigation
Add Achievement page
2023-05-07 14:55:50 +08:00
c7d3e5021c Update version to v1.9.0 2023-05-07 12:59:53 +08:00
a689b425ca Update RU translations from @EgorBron fork 2023-05-07 11:42:02 +08:00
9bd45157a4 Update 3.6 Resources 2023-05-07 11:36:10 +08:00
止语语哦~
169b8997ec 添加3.6角色、武器、一些物品 (#181) 2023-04-20 21:38:36 +08:00
Lefengisbee
aa6ea882d9 (For CHT) Added README_zh-tw.md 新增繁中Readme 檔案 Added Gadget.txt to zh-tw folder 新增Gadget.txt繁中版 (#180)
* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* Remove Gadget.txt

* added Gadget.txt to zh-tw folder(from zh-cn folder), added README_zh-tw.md

* Screenshot Improvement

* Modify md files, added CHT option

* Warning to CHT

* Revert "Warning to CHT"

This reverts commit 9459c7910a.
2023-03-16 23:07:11 +08:00
Lefengisbee
c86b275096 (For CHT) CHS strings to CHT遺漏簡中轉繁中 (#179)
* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* CHS -> CHT, added Gadget.txt to zh-tw folder(from zh-cn folder)

* Remove Gadget.txt
2023-03-16 21:19:17 +08:00
moux23333
a81985549e Full 3.5.0 Quest ids (#178) 2023-03-06 22:04:52 +08:00
ighlES
f4e9409afa 添加自定义指令 诚哥壶信任值升到10级 (#177)
* 添加自定义指令 诚哥壶信任值升到10级
2023-02-20 21:32:53 +08:00
6647e5bd37 Add OpenChat Ad 2023-02-18 16:27:22 +08:00
64b7c25de5 Update 3.4 Resources (Item/Monsters/Quest/Scene/Weapon) 2023-02-18 15:00:02 +08:00
7c562228c6 Update version to v1.8.1 2023-02-08 11:50:33 +08:00
91a194c948 Fix /drop command 2023-02-08 11:50:08 +08:00
50a30331e5 Fix /scene command 2023-02-08 11:49:33 +08:00
TomyJan
da47941564 (CHS Only)修改item分类名为中文&修改部分物品id排序&添加新的卡池id&增加两个自定义命令 (#175)
* 优化物品id&增加两个自定义命令

* del duplicate ids

* replenish gacha title/prefab to 3.4

* Update Item.txt
2023-01-31 18:22:26 +08:00
Syca
6e999f92a0 Add some ids(3.4.5) (CHS only) 2023-01-27 15:31:54 +08:00
f4fc0ef3c5 Fix the command is cleared after repeated 2023-01-12 14:22:40 +08:00
Syca
2dc8dc734b Add 3.4beta Dungeon&Scene IDs(CHS only) (#172)
* Add 3.4beta DungeonIDs&SceneIDs(CHS only)

* Fix Scene Names(3.3)(CHS only)

* Update Scene.txt

* Fix Scene Names(3.2)(CHS only)

* Add files via upload
2022-12-26 21:01:55 +08:00
Syca
98663240de Add Some 3.4beta IDs(CHS Only) (#169)
* add 3.4beta weapon

* Add Some 3.4bata items

* Add 3.4beta monsters
2022-12-17 21:49:48 +08:00
ba782c85d4 fix screenshots 2022-12-15 20:55:45 +08:00
dea067b21f Add task page screenshot 2022-12-15 20:43:51 +08:00
d56c73e2a3 Add Test page 2022-12-15 20:32:01 +08:00
5d208d1220 Update SceneIds and MonsterIds 2022-12-15 20:31:29 +08:00
47a3a1c7ab Add 3.3.50 avatar ids (from Sakura616 res)
Update quest text
2022-12-15 20:03:47 +08:00
56059b4f4f Update 3.3 Artifacts and avatar/weapon colors 2022-12-14 20:24:48 +08:00
09577d5403 Update Banners.json Ignore PreviewPrefabPath 2022-12-12 20:26:48 +08:00
fb77f9432a Add CI Badge 2022-12-10 23:56:12 +08:00
0f70405041 Update build.yml 2022-12-10 23:37:22 +08:00
399888f976 Update Task page translates 2022-12-10 18:14:54 +08:00
a8a0a14713 fix connect command issue 2022-12-10 17:57:51 +08:00
59af1e468d Add Task Page (#166) 2022-12-10 17:57:51 +08:00
0d1bad5551 Update version to v1.8.0 2022-12-10 17:57:50 +08:00
7eb2ff1624 Add categories to item page 2022-12-10 17:57:50 +08:00
72351ba60f Update 3.3 Resources (Items/Avatars/Weapons) 2022-12-10 17:57:50 +08:00
7dc2dcc9db Update build.yml 2022-12-08 17:17:15 +08:00
5b4a7d784d Create build.yml 2022-12-08 16:43:30 +08:00
1d8d199af7 Fix the problem that the next time it cannot be started when it is closed when it is minimized 2022-12-03 11:41:09 +08:00
c4e29dc000 Update version to v1.7.6 2022-12-03 11:32:53 +08:00
72ec031f8a Fix window location issue (#161) 2022-12-03 11:27:51 +08:00
2300b8d5db Add program log 2022-12-02 20:50:12 +08:00
7ec81ab146 Check the data directory only once 2022-12-01 19:50:05 +08:00
cf3ffeb8c6 Fix data file dir does not exist (#164) 2022-12-01 19:41:45 +08:00
118a7fe0f1 Update version to v1.7.5 2022-11-29 13:11:58 +08:00
005c68cc5b Optimize search(#149 #163) 2022-11-29 13:10:00 +08:00
70f390c5d7 Fix AttackModifier button event 2022-11-28 23:26:05 +08:00
65de82a227 Update Dungeon.txt(CHT) 2022-11-28 23:22:57 +08:00
a2494b59f7 Add empty file handling 2022-11-28 23:17:58 +08:00
b05269712a Add run log 2022-11-28 23:15:39 +08:00
740463f017 Remove FodyWeavers.xml 2022-11-28 23:08:14 +08:00
Syca
30521d068e Update 3.3beta dungeons
ehe
2022-11-28 13:27:46 +08:00
c7898401ce Clean up all
Remvoe TextBoxXP
2022-11-27 16:51:47 +08:00
d169de9a9e Update save settings only when main window is closed 2022-11-27 16:44:11 +08:00
74ddb428ee Hold include uid setting 2022-11-27 16:38:24 +08:00
ba4837f1f8 Update FileVersion to 1.7.4 2022-11-27 16:27:56 +08:00
cdf25f6b6f Fix import GOOD event 2022-11-27 16:26:53 +08:00
e630c53c9f Change the record files storage location 2022-11-27 16:25:28 +08:00
db13f82bfc Optimized restore window state 2022-11-27 16:15:57 +08:00
63ebaa5df8 Load pages 2022-11-27 16:08:19 +08:00
7b886ea251 Detach all pages of the main form 2022-11-27 15:29:56 +08:00
436c4d809c Separate pages 2022-11-26 23:47:46 +08:00
6ab7bac20b Add Dungeons(zh/en) 2022-11-26 10:23:40 +08:00
Egor Bron
7f852ffb8e Ru translations fixes (#160)
* update GachaBennerPrefab and CustomCommands

* update ShopType (partially)

* update Drop, Shop and Main forms (partially)

* update READMEs

* fix link in Chinese README

* fix new mobs & functions (from 1.7.4)

* some fixes in ru translation and added gadgets to it

* update ru screenshots

Co-authored-by: 筱傑 <jie65535@qq.com>
2022-11-20 23:41:10 +08:00
69e68810ba Update items id 2022-11-20 16:17:13 +08:00
a63f79230b Update quest id (#157) 2022-11-20 16:10:13 +08:00
3b01c62ed2 Update new banners editor translates 2022-11-20 16:00:18 +08:00
cdc69d23b9 Update Command text box to ComboBox
Update ru translate
Update Modifier keys function
2022-11-20 15:43:05 +08:00
92a15afabf Impl hold shift run command (#151)
Impl main window input box accept enter (#150)
2022-11-20 15:08:45 +08:00
277e265bf1 Disable error prefab 2022-11-20 14:46:25 +08:00
473163e7c6 Update Banners Editor
Add Default Banners
2022-11-20 14:42:52 +08:00
f1eb40bb0d Fix tab order (#152) 2022-11-16 21:18:57 +08:00
6c23915615 Update version to v1.7.4 2022-11-16 21:03:03 +08:00
d0361c29aa Fix window size record 2022-11-16 21:02:43 +08:00
371 changed files with 169069 additions and 58705 deletions

32
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
name: Build project
on:
push:
branches:
- main
paths:
- Source/**
pull_request:
branches:
- main
paths:
- Source/**
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v1.1.3
- name: Build release
run: msbuild Source/GrasscutterTools.sln /p:Configuration=Release /t:build /restore
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: GrasscutterTools
path: Source/GrasscutterTools/bin/Release/GrasscutterTools.exe

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -3,19 +3,60 @@
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=fBizzp6RwJsIY7gFlmd4L-WG0V3aF8X3&authKey=mTjf%2B7jCIZess1HTRi05e5yi%2FHKA1auMwE8%2FJ960PFWk8WMATST654gWPi4OTHTZ&noverify=0&group_code=835489603)
English | [简体中文](README_zh-cn.md) | [Русский](README_ru-RU.md)
English | [简体中文](README_zh-cn.md) | [繁體中文](README_zh-tw.md) | [Русский](README_ru-RU.md)
## Commands Generator
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
Please download the latest committed automated build from [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml), or a release from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) (may be behind)
Support 简体中文, 繁中文, English and Русский languages.
Support 简体中文, 繁中文, English and Русский languages.
Welcome everyone to improve the [ID Resource](/Source/GrasscutterTools/Resources/en-us).
> **Warning**: app look may be different rather than on screenshots. It may also contain translation errors and a lack of certain resources. **We're welcome everyone to contribute to their [improvement](/Source/GrasscutterTools/Resources/en-us)**
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> If you cannot connect to the server, please make sure the server address is correct.
>
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
>
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
## Update log
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots-en/21-HotKey.png)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-en/7-ChangeScene.png)
![Activity Editor](Doc/Screenshots-en/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots-en/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots-en/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Gadget](Doc/Screenshots-en/6-SpawnEntity.png)
@@ -37,21 +78,6 @@ Added [AttackModifier](https://github.com/NotThorny/AttackModifier), [AttackInfu
![Mail Editor](Doc/Screenshots-en/16-MailEditor.png)
## Remote command
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> If you cannot connect to the server, please make sure the server address is correct.
>
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
>
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
---

View File

@@ -3,39 +3,18 @@
[![GitHub лицензия](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub звёзды](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github ВСЕ выпуски](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[English](README.md) | [简体中文](README_zh-cn.md) | Русский - Перевод [Юрий Дворецкий](https://github.com/yurikenjx) (с исправлениями от [EgorBron](https://github.com/EgorBron))
[English](README.md) | [简体中文](README_zh-cn.md) | [繁體中文](README_zh-tw.md) | Русский - Перевод [Юрий Дворецкий](https://github.com/yurikenjx) (с исправлениями от [EgorBron](https://github.com/EgorBron))
## Генератор команд (GCG)
Загрузите последнюю версию из вкладки [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases).
Пожалуйста, загрузите последнюю подтвержденную автоматизированную сборку из [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml) или выпуск из [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) (может отставать)
GCG поддерживает 简体中文 (китайский упр.), 繁中文 (китайский трад.), English (английский) и Русский языки.
GCG поддерживает 简体中文 (китайский упр.), 繁中文 (китайский трад.), English (английский) и Русский языки.
Приглашаем всех улучшить [ID ресурсов и перевод](/Source/GrasscutterTools/Resources/ru-ru)
## Update log
### GrasscutterTools-v1.7.3
![Gadget](Doc/Screenshots-ru/4-SpawnEntity.png)
Added [AttackModifier](https://github.com/NotThorny/AttackModifier), [AttackInfusedWithItem](https://github.com/snoobi-seggs/AttackInfusedWithItem), [SwitchElementTraveller](https://github.com/Penelopeep/SwitchElementTraveller) plugins command generation
![AttackInfusedWithItem Gif](Doc/Screenshots/AttackMod.gif)
### GrasscutterTools-v1.7.2
![Shop Editor](Doc/Screenshots-ru/17-ShopEditor.png)
### GrasscutterTools-v1.7.1
- Gadgets (CHS Only)
### 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)
> **Warning**: вид приложения может отличаться от скриншотов. Также в нём могут присутствовать ошибки в переводе и отсутсвие некоторых ресурсов. **Мы приглашаем всех сделать вклад в их [улучшение](/Source/GrasscutterTools/Resources/ru-ru)**
## Удаленная команда (OpenCommand)
@@ -53,34 +32,87 @@ Added [AttackModifier](https://github.com/NotThorny/AttackModifier), [AttackInfu
>
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
## Лог обновлений
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots-en/21-HotKey.png)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-ru/12-Scenes.png)
![Activity Editor](Doc/Screenshots-ru/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots-ru/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots-ru/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Улучшенный спавн](Doc/Screenshots-ru/5-Spawn.png)
Добавлена поддержка генерации команд для плагинов [AttackModifier](https://github.com/NotThorny/AttackModifier), [AttackInfusedWithItem](https://github.com/snoobi-seggs/AttackInfusedWithItem), [SwitchElementTraveller](https://github.com/Penelopeep/SwitchElementTraveller).
![AttackInfusedWithItem Gif](Doc/Screenshots/AttackMod.gif)
### GrasscutterTools-v1.7.2
![Редактор магазина](Doc/Screenshots-ru/13-Shop.png)
### GrasscutterTools-v1.7.1
- Гаджеты (пока что только на китайском)
### GrasscutterTools-v1.7.0
![Запуск нескольких команд](Doc/Screenshots/RunMultipleCommands.png)
![Редактор дропа](Doc/Screenshots-ru/15-Drops.png)
![Редактор писем](Doc/Screenshots-ru/10-Mail.png)
---
## Скриншоты
![Логитип](Doc/Screenshots/GrasscutterLogo.png)
![Главная](Doc/Screenshots-ru/0-Home.png)
![Главная](Doc/Screenshots-ru/1-Home.png)
![Скриншот пользовательских команд](Doc/Screenshots-ru/1-CustomCommands.png)
![OpenCommand](Doc/Screenshots-ru/2-Opencommand.png)
![Скриншот артефактов](Doc/Screenshots-ru/2-CustomArtifact.png)
![Кастомные команды](Doc/Screenshots-ru/3-Custom.png)
![Скриншот квестов](Doc/Screenshots-ru/3-Quest.png)
![Артефакты](Doc/Screenshots-ru/4-Artifacts.png)
![Скриншот спавна сущностей](Doc/Screenshots-ru/4-SpawnEntity.png)
![Спавн сущностей](Doc/Screenshots-ru/5-Spawn.png)
![Скриншот выдачи персонажа](Doc/Screenshots-ru/5-GiveAvatar.png)
![Выдача предметов](Doc/Screenshots-ru/6-Give.png)
![Скриншот выдачи оружия](Doc/Screenshots-ru/7-CustomWeapon.png)
![Выдача персонажей](Doc/Screenshots-ru/7-Character.png)
![Скриншот выдачи предметов](Doc/Screenshots-ru/8-GiveItem.png)
![Выдача оружий](Doc/Screenshots-ru/8-Weapons.png)
![Скриншот смены сцены](Doc/Screenshots-ru/9-ChangeScene.png)
![Управление аккаунтами](Doc/Screenshots-ru/9-Accounts.png)
![Скриншот управления аккаунтом](Doc/Screenshots-ru/11-Manage.png)
![Почта](Doc/Screenshots-ru/10-Mail.png)
![Скриншот OpenCommand](Doc/Screenshots-ru/13-Remote.png)
![Квесты](Doc/Screenshots-ru/11-Quests.png)
![Редактор баннеров](Doc/Screenshots-ru/14-GachaBannerEditor.png)
![Сцены](Doc/Screenshots-ru/12-Scenes.png)
![Текстоый браузер карт](Doc/Screenshots-ru/15-TextMapBrowser.png)
![Редактор магазина](Doc/Screenshots-ru/13-Shop.png)
![Редактор баннеров](Doc/Screenshots-ru/14-Gachas.png)
![Редактор дропа](Doc/Screenshots-ru/14-Drops.png)
![Браузер текстов](Doc/Screenshots-ru/16-Textmaps.png)

View File

@@ -3,19 +3,60 @@
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](https://qm.qq.com/cgi-bin/qm/qr?k=PdS9--b-n8LEAmYjX8fNFXtKDcsp4NHN&jump_from=webapi&authKey=7ty3ZCKYMKLGWLmO8O84qiNAZ0EuCnSGF+acP+74xuDMKYXXNjuPP7iUzffHz4r2)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=fBizzp6RwJsIY7gFlmd4L-WG0V3aF8X3&authKey=mTjf%2B7jCIZess1HTRi05e5yi%2FHKA1auMwE8%2FJ960PFWk8WMATST654gWPi4OTHTZ&noverify=0&group_code=835489603)
[English](README.md) | 简体中文 | [Русский](README_ru-RU.md)
[English](README.md) | 简体中文 | [繁體中文](README_zh-tw.md) | [Русский](README_ru-RU.md)
## Commands Generator
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
请从 [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml) 中下载最新提交的自动构建版本,或者从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中下载发布版本(可能落后)
本工具支持 简体中文, 繁中文, English 与 Русский 语言。
本工具支持 简体中文, 繁中文, English 与 Русский 语言。
欢迎大家一起来完善工具的[内置资源](/Source/GrasscutterTools/Resources/zh-cn)。
> **Warning**: 应用程序的外观可能与截图上的不同。它也可能包含翻译错误和缺乏某些资源。**我们欢迎各位为此工具做出贡献并<a href="./Source/GrasscutterTools/Resources/zh-cn">改进</a> : )**
## Update log
## 远程执行
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
>
> 建议配置服务器为HTTP模式如图所示(config.json)
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
>
> 如果使用的不是`80`端口则要在url中指定访问的端口号http://127.0.0.1:443
## 更新概要
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots/21-HotKey.png)
命令行用法:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots/7-ChangeScene.png)
![Activity Editor](Doc/Screenshots/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Spawns](Doc/Screenshots/6-SpawnEntity.png)
@@ -42,21 +83,6 @@
![Mail Editor](Doc/Screenshots/16-MailEditor.png)
## 远程执行
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
![OpenCommand](Doc/Screenshots/OpenCommand.gif)
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
>
> 建议配置服务器为HTTP模式如图所示(config.json)
> ![ConfigHttp](Doc/Screenshots/ConfigHttp.png)
>
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
>
> 如果使用的不是`80`端口则要在url中指定访问的端口号http://127.0.0.1:443
---
## 软件截图

116
README_zh-tw.md Normal file
View File

@@ -0,0 +1,116 @@
# Grasscutter Tools
[![GitHub license](https://img.shields.io/github/license/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
[![Github All Releases](https://img.shields.io/github/downloads/jie65535/GrasscutterCommandGenerator/total.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
[![GitHub release](https://img.shields.io/github/v/release/jie65535/GrasscutterCommandGenerator)](https://github.com/jie65535/GrasscutterCommandGenerator/releases/latest)
[![Build](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml/badge.svg)](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml)
[![QQ Group](https://pub.idqqimg.com/wpa/images/group.png)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=fBizzp6RwJsIY7gFlmd4L-WG0V3aF8X3&authKey=mTjf%2B7jCIZess1HTRi05e5yi%2FHKA1auMwE8%2FJ960PFWk8WMATST654gWPi4OTHTZ&noverify=0&group_code=835489603)
[English](README.md) | [简体中文](README_zh-cn.md) | 繁體中文 | [Русский](README_ru-RU.md)
## 指令產生工具
請從 [Action](https://github.com/jie65535/GrasscutterCommandGenerator/actions/workflows/build.yml) 中下載最新提交的自動構建版本,或者從 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中下載發布版本(可能落後)
本工具支援 简体中文、繁體中文、English 及 Русский 上述語言。
> **Warning**: 程式中的實際外觀可能會與截圖中的內容不同。其中也可能包含翻譯錯誤及缺乏特定資源。**我們歡迎各位為此工具做出貢獻並[改進](/Source/GrasscutterTools/Resources/zh-tw)**
## 遠端控制
伺服器需要安裝 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件
![OpenCommand](Doc/Screenshots-tw/OpenCommand.gif)
> 如果你無法連接至伺服器,請確認輸入的伺服器位址是否正確。
>
> 建議將伺服器調整為HTTP模式如下圖所示(config.json):
> ![ConfigHttp](Doc/Screenshots-tw/ConfigHttp.png)
>
> 你可藉由任何瀏覽器輸入網址 http://127.0.0.1/status/server 以測試伺服器是否正常運作。
>
> 如果你並非使用`80`端口, 則須在網址後輸入指定端口: http://127.0.0.1:443
## 更新日誌
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots/21-HotKey.png)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-tw/7-ChangeScene.png)
![Activity Editor](Doc/Screenshots-tw/20-ActivityEditor.png)
### GrasscutterTools-v1.9
![Achievement Page](Doc/Screenshots-tw/19-AchievementPage.png)
### GrasscutterTools-v1.8
![Task page](Doc/Screenshots-tw/18-TaskPage.png)
### GrasscutterTools-v1.7.3
![Spawns](Doc/Screenshots-tw/6-SpawnEntity.png)
![AttackMod](Doc/Screenshots-tw/6.1-AttackMod.png)
![AttackInfuse](Doc/Screenshots-tw/6.2-AttackInfuse.png)
新增 [攻擊修改](https://github.com/NotThorny/AttackModifier)、[攻擊注入](https://github.com/snoobi-seggs/AttackInfusedWithItem)、[主角切換元素](https://github.com/Penelopeep/SwitchElementTraveller)等插件指令產生
![AttackInfusedWithItem Gif](Doc/Screenshots-tw/AttackMod.gif)
### GrasscutterTools-v1.7.2
![Shop Editor](Doc/Screenshots-tw/17-ShopEditor.png)
### GrasscutterTools-v1.7.1
- 新增 Gadgets
### GrasscutterTools-v1.7.0
![Run Commands](Doc/Screenshots-tw/RunMultipleCommands.png)
![Drop Editor](Doc/Screenshots-tw/15-DropEditor.png)
![Mail Editor](Doc/Screenshots-tw/16-MailEditor.png)
---
## 工具截圖
![Logo](Doc/Screenshots-tw/GrasscutterLogo.png)
![Home](Doc/Screenshots-tw/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots-tw/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots-tw/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots-tw/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots-tw/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots-tw/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots-tw/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots-tw/7-ChangeScene.png)
![Management](Doc/Screenshots-tw/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-tw/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-tw/11-TextMapBrowser.png)
![Remote Screenshort](Doc/Screenshots-tw/12-Remote.png)
![Quest Screenshort](Doc/Screenshots-tw/13-Quest.png)

View File

@@ -29,7 +29,7 @@
<value>10001</value>
</setting>
<setting name="Host" serializeAs="String">
<value>https://127.0.0.1</value>
<value>http://127.0.0.1:443</value>
</setting>
<setting name="CheckedLastVersion" serializeAs="String">
<value />
@@ -58,6 +58,24 @@
<setting name="MainFormSize" serializeAs="String">
<value>0, 0</value>
</setting>
<setting name="BannersJsonPath" serializeAs="String">
<value />
</setting>
<setting name="IsIncludeUID" serializeAs="String">
<value>False</value>
</setting>
<setting name="NavContainerSplitterDistance" serializeAs="String">
<value>0</value>
</setting>
<setting name="ActivityConfigJsonPath" serializeAs="String">
<value />
</setting>
<setting name="ProjectResourcePath" serializeAs="String">
<value />
</setting>
<setting name="IsUpgraded" serializeAs="String">
<value>False</value>
</setting>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

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

@@ -14,8 +14,9 @@
*
* 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.Threading.Tasks;
using GrasscutterTools.DispatchServer.Model;
@@ -23,7 +24,7 @@ using GrasscutterTools.Utils;
namespace GrasscutterTools.DispatchServer
{
public static class DispatchServerAPI
internal static class DispatchServerAPI
{
public static async Task<ServerStatus> QueryServerStatus(string host)
{

View File

@@ -14,13 +14,14 @@
*
* 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.DispatchServer.Model
{
public class ServerStatus
internal class ServerStatus
{
[JsonProperty("playerCount")]
public int PlayerCount { get; set; }
@@ -32,7 +33,7 @@ namespace GrasscutterTools.DispatchServer.Model
public string Version { get; set; }
}
public class ServerStatusResponse
internal class ServerStatusResponse
{
[JsonProperty("retcode")]
public int RetCode { get; set; }

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Costura />
</Weavers>

View File

@@ -0,0 +1,346 @@
namespace GrasscutterTools.Forms
{
partial class FormActivityEditor
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormActivityEditor));
this.BtnSave = new System.Windows.Forms.Button();
this.BtnLoad = new System.Windows.Forms.Button();
this.ActivityConfigJsonPath = new System.Windows.Forms.TextBox();
this.LblActivityConfigJsonPath = new System.Windows.Forms.Label();
this.GrpAllActivity = new System.Windows.Forms.GroupBox();
this.ListAllActivity = new System.Windows.Forms.ListView();
this.ColumnActivityId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColumnActivityName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpFileActivity = new System.Windows.Forms.GroupBox();
this.ListActivityConfigItems = new System.Windows.Forms.ListView();
this.ColActivityId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColActivityTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColActivityBeginTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColActivityEndTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpActivityInfo = new System.Windows.Forms.GroupBox();
this.LblActivityTitle = new System.Windows.Forms.Label();
this.LblActivityParmEditTip = new System.Windows.Forms.Label();
this.BtnDelete = new System.Windows.Forms.Button();
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
this.DTPEndTime = new System.Windows.Forms.DateTimePicker();
this.DTPBeginTime = new System.Windows.Forms.DateTimePicker();
this.TxtMeetCondList = new System.Windows.Forms.TextBox();
this.NUDScheduleId = new System.Windows.Forms.NumericUpDown();
this.NUDActivityType = new System.Windows.Forms.NumericUpDown();
this.NUDActivityId = new System.Windows.Forms.NumericUpDown();
this.LblEndTime = new System.Windows.Forms.Label();
this.LblBeginTime = new System.Windows.Forms.Label();
this.LblMeetCondList = new System.Windows.Forms.Label();
this.LblScheduleId = new System.Windows.Forms.Label();
this.LblActivityType = new System.Windows.Forms.Label();
this.LblActivityId = new System.Windows.Forms.Label();
this.GrpAllActivity.SuspendLayout();
this.GrpFileActivity.SuspendLayout();
this.GrpActivityInfo.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityType)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityId)).BeginInit();
this.SuspendLayout();
//
// BtnSave
//
resources.ApplyResources(this.BtnSave, "BtnSave");
this.BtnSave.Name = "BtnSave";
this.BtnSave.UseVisualStyleBackColor = true;
this.BtnSave.Click += new System.EventHandler(this.BtnSave_Click);
//
// BtnLoad
//
resources.ApplyResources(this.BtnLoad, "BtnLoad");
this.BtnLoad.Name = "BtnLoad";
this.BtnLoad.UseVisualStyleBackColor = true;
this.BtnLoad.Click += new System.EventHandler(this.BtnLoad_Click);
//
// ActivityConfigJsonPath
//
resources.ApplyResources(this.ActivityConfigJsonPath, "ActivityConfigJsonPath");
this.ActivityConfigJsonPath.Name = "ActivityConfigJsonPath";
//
// LblActivityConfigJsonPath
//
resources.ApplyResources(this.LblActivityConfigJsonPath, "LblActivityConfigJsonPath");
this.LblActivityConfigJsonPath.Name = "LblActivityConfigJsonPath";
//
// GrpAllActivity
//
resources.ApplyResources(this.GrpAllActivity, "GrpAllActivity");
this.GrpAllActivity.Controls.Add(this.ListAllActivity);
this.GrpAllActivity.Name = "GrpAllActivity";
this.GrpAllActivity.TabStop = false;
//
// ListAllActivity
//
resources.ApplyResources(this.ListAllActivity, "ListAllActivity");
this.ListAllActivity.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColumnActivityId,
this.ColumnActivityName});
this.ListAllActivity.FullRowSelect = true;
this.ListAllActivity.HideSelection = false;
this.ListAllActivity.MultiSelect = false;
this.ListAllActivity.Name = "ListAllActivity";
this.ListAllActivity.UseCompatibleStateImageBehavior = false;
this.ListAllActivity.View = System.Windows.Forms.View.Details;
this.ListAllActivity.SelectedIndexChanged += new System.EventHandler(this.ListAllActivity_SelectedIndexChanged);
//
// ColumnActivityId
//
resources.ApplyResources(this.ColumnActivityId, "ColumnActivityId");
//
// ColumnActivityName
//
resources.ApplyResources(this.ColumnActivityName, "ColumnActivityName");
//
// GrpFileActivity
//
resources.ApplyResources(this.GrpFileActivity, "GrpFileActivity");
this.GrpFileActivity.Controls.Add(this.ListActivityConfigItems);
this.GrpFileActivity.Name = "GrpFileActivity";
this.GrpFileActivity.TabStop = false;
//
// ListActivityConfigItems
//
resources.ApplyResources(this.ListActivityConfigItems, "ListActivityConfigItems");
this.ListActivityConfigItems.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColActivityId,
this.ColActivityTitle,
this.ColActivityBeginTime,
this.ColActivityEndTime});
this.ListActivityConfigItems.FullRowSelect = true;
this.ListActivityConfigItems.HideSelection = false;
this.ListActivityConfigItems.MultiSelect = false;
this.ListActivityConfigItems.Name = "ListActivityConfigItems";
this.ListActivityConfigItems.UseCompatibleStateImageBehavior = false;
this.ListActivityConfigItems.View = System.Windows.Forms.View.Details;
this.ListActivityConfigItems.SelectedIndexChanged += new System.EventHandler(this.ListActivityConfigItems_SelectedIndexChanged);
//
// ColActivityId
//
resources.ApplyResources(this.ColActivityId, "ColActivityId");
//
// ColActivityTitle
//
resources.ApplyResources(this.ColActivityTitle, "ColActivityTitle");
//
// ColActivityBeginTime
//
resources.ApplyResources(this.ColActivityBeginTime, "ColActivityBeginTime");
//
// ColActivityEndTime
//
resources.ApplyResources(this.ColActivityEndTime, "ColActivityEndTime");
//
// GrpActivityInfo
//
resources.ApplyResources(this.GrpActivityInfo, "GrpActivityInfo");
this.GrpActivityInfo.Controls.Add(this.LblActivityTitle);
this.GrpActivityInfo.Controls.Add(this.LblActivityParmEditTip);
this.GrpActivityInfo.Controls.Add(this.BtnDelete);
this.GrpActivityInfo.Controls.Add(this.BtnAddOrUpdate);
this.GrpActivityInfo.Controls.Add(this.DTPEndTime);
this.GrpActivityInfo.Controls.Add(this.DTPBeginTime);
this.GrpActivityInfo.Controls.Add(this.TxtMeetCondList);
this.GrpActivityInfo.Controls.Add(this.NUDScheduleId);
this.GrpActivityInfo.Controls.Add(this.NUDActivityType);
this.GrpActivityInfo.Controls.Add(this.NUDActivityId);
this.GrpActivityInfo.Controls.Add(this.LblEndTime);
this.GrpActivityInfo.Controls.Add(this.LblBeginTime);
this.GrpActivityInfo.Controls.Add(this.LblMeetCondList);
this.GrpActivityInfo.Controls.Add(this.LblScheduleId);
this.GrpActivityInfo.Controls.Add(this.LblActivityType);
this.GrpActivityInfo.Controls.Add(this.LblActivityId);
this.GrpActivityInfo.Name = "GrpActivityInfo";
this.GrpActivityInfo.TabStop = false;
//
// LblActivityTitle
//
resources.ApplyResources(this.LblActivityTitle, "LblActivityTitle");
this.LblActivityTitle.AutoEllipsis = true;
this.LblActivityTitle.ForeColor = System.Drawing.SystemColors.GrayText;
this.LblActivityTitle.Name = "LblActivityTitle";
//
// LblActivityParmEditTip
//
resources.ApplyResources(this.LblActivityParmEditTip, "LblActivityParmEditTip");
this.LblActivityParmEditTip.ForeColor = System.Drawing.SystemColors.GrayText;
this.LblActivityParmEditTip.Name = "LblActivityParmEditTip";
//
// BtnDelete
//
resources.ApplyResources(this.BtnDelete, "BtnDelete");
this.BtnDelete.Name = "BtnDelete";
this.BtnDelete.UseVisualStyleBackColor = true;
this.BtnDelete.Click += new System.EventHandler(this.BtnDelete_Click);
//
// BtnAddOrUpdate
//
resources.ApplyResources(this.BtnAddOrUpdate, "BtnAddOrUpdate");
this.BtnAddOrUpdate.Name = "BtnAddOrUpdate";
this.BtnAddOrUpdate.UseVisualStyleBackColor = true;
this.BtnAddOrUpdate.Click += new System.EventHandler(this.BtnAddOrUpdate_Click);
//
// DTPEndTime
//
resources.ApplyResources(this.DTPEndTime, "DTPEndTime");
this.DTPEndTime.Name = "DTPEndTime";
//
// DTPBeginTime
//
resources.ApplyResources(this.DTPBeginTime, "DTPBeginTime");
this.DTPBeginTime.Name = "DTPBeginTime";
//
// TxtMeetCondList
//
resources.ApplyResources(this.TxtMeetCondList, "TxtMeetCondList");
this.TxtMeetCondList.Name = "TxtMeetCondList";
//
// NUDScheduleId
//
resources.ApplyResources(this.NUDScheduleId, "NUDScheduleId");
this.NUDScheduleId.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDScheduleId.Name = "NUDScheduleId";
//
// NUDActivityType
//
resources.ApplyResources(this.NUDActivityType, "NUDActivityType");
this.NUDActivityType.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDActivityType.Name = "NUDActivityType";
//
// NUDActivityId
//
resources.ApplyResources(this.NUDActivityId, "NUDActivityId");
this.NUDActivityId.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDActivityId.Name = "NUDActivityId";
this.NUDActivityId.ValueChanged += new System.EventHandler(this.NUDActivityId_ValueChanged);
//
// LblEndTime
//
resources.ApplyResources(this.LblEndTime, "LblEndTime");
this.LblEndTime.Name = "LblEndTime";
//
// LblBeginTime
//
resources.ApplyResources(this.LblBeginTime, "LblBeginTime");
this.LblBeginTime.Name = "LblBeginTime";
//
// LblMeetCondList
//
resources.ApplyResources(this.LblMeetCondList, "LblMeetCondList");
this.LblMeetCondList.Name = "LblMeetCondList";
//
// LblScheduleId
//
resources.ApplyResources(this.LblScheduleId, "LblScheduleId");
this.LblScheduleId.Name = "LblScheduleId";
//
// LblActivityType
//
resources.ApplyResources(this.LblActivityType, "LblActivityType");
this.LblActivityType.Name = "LblActivityType";
//
// LblActivityId
//
resources.ApplyResources(this.LblActivityId, "LblActivityId");
this.LblActivityId.Name = "LblActivityId";
//
// FormActivityEditor
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.GrpAllActivity);
this.Controls.Add(this.GrpActivityInfo);
this.Controls.Add(this.GrpFileActivity);
this.Controls.Add(this.BtnSave);
this.Controls.Add(this.BtnLoad);
this.Controls.Add(this.ActivityConfigJsonPath);
this.Controls.Add(this.LblActivityConfigJsonPath);
this.Name = "FormActivityEditor";
this.GrpAllActivity.ResumeLayout(false);
this.GrpFileActivity.ResumeLayout(false);
this.GrpActivityInfo.ResumeLayout(false);
this.GrpActivityInfo.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityType)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDActivityId)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button BtnSave;
private System.Windows.Forms.Button BtnLoad;
private System.Windows.Forms.TextBox ActivityConfigJsonPath;
private System.Windows.Forms.Label LblActivityConfigJsonPath;
private System.Windows.Forms.GroupBox GrpAllActivity;
private System.Windows.Forms.GroupBox GrpFileActivity;
private System.Windows.Forms.GroupBox GrpActivityInfo;
private System.Windows.Forms.ListView ListAllActivity;
private System.Windows.Forms.Label LblEndTime;
private System.Windows.Forms.Label LblBeginTime;
private System.Windows.Forms.Label LblMeetCondList;
private System.Windows.Forms.Label LblScheduleId;
private System.Windows.Forms.Label LblActivityType;
private System.Windows.Forms.Label LblActivityId;
private System.Windows.Forms.Button BtnDelete;
private System.Windows.Forms.Button BtnAddOrUpdate;
private System.Windows.Forms.DateTimePicker DTPEndTime;
private System.Windows.Forms.DateTimePicker DTPBeginTime;
private System.Windows.Forms.TextBox TxtMeetCondList;
private System.Windows.Forms.NumericUpDown NUDScheduleId;
private System.Windows.Forms.NumericUpDown NUDActivityType;
private System.Windows.Forms.NumericUpDown NUDActivityId;
private System.Windows.Forms.Label LblActivityParmEditTip;
private System.Windows.Forms.Label LblActivityTitle;
private System.Windows.Forms.ColumnHeader ColumnActivityId;
private System.Windows.Forms.ColumnHeader ColumnActivityName;
private System.Windows.Forms.ListView ListActivityConfigItems;
private System.Windows.Forms.ColumnHeader ColActivityId;
private System.Windows.Forms.ColumnHeader ColActivityTitle;
private System.Windows.Forms.ColumnHeader ColActivityBeginTime;
private System.Windows.Forms.ColumnHeader ColActivityEndTime;
}
}

View File

@@ -0,0 +1,310 @@
/**
* Grasscutter Tools
* Copyright (C) 2023 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Activity;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Forms
{
public partial class FormActivityEditor : Form
{
#region - -
private List<ActivityConfigItem> ActivityConfigItems = new List<ActivityConfigItem>();
#endregion - -
#region - -
public FormActivityEditor()
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
DTPBeginTime.Value = DateTime.Today;
DTPEndTime.Value = DateTime.Today.AddMonths(1);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
LoadAllActivity();
try
{
// 加载文件路径
var path = Settings.Default.ActivityConfigJsonPath;
ActivityConfigJsonPath.Text = path;
if (!string.IsNullOrEmpty(path) && File.Exists(path))
LoadActivityConfig(path);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
Settings.Default.ActivityConfigJsonPath = ActivityConfigJsonPath.Text;
base.OnFormClosed(e);
}
#endregion - -
#region - ActivityConfig.json -
/// <summary>
/// 加载按钮点击时触发
/// </summary>
private void BtnLoad_Click(object sender, EventArgs e)
{
try
{
var path = ActivityConfigJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new OpenFileDialog
{
FileName = "ActivityConfig.json",
Filter = "ActivityConfig.Json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = ActivityConfigJsonPath.Text = dialog.FileName;
else
return;
}
// 反序列化
LoadActivityConfig(path);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 加载活动配置
/// </summary>
/// <param name="path">ActivityConfig.json 文件路径</param>
private void LoadActivityConfig(string path)
{
ActivityConfigItems = JsonConvert.DeserializeObject<List<ActivityConfigItem>>(File.ReadAllText(path)) ?? new List<ActivityConfigItem>();
ListActivityConfigItems.BeginUpdate();
ListActivityConfigItems.Items.Clear();
ListActivityConfigItems.Items.AddRange(ActivityConfigItems.Select(Convert).ToArray());
ListActivityConfigItems.EndUpdate();
}
private ListViewItem Convert(ActivityConfigItem item)
{
return new ListViewItem(new[]
{
item.ActivityId.ToString(),
GameData.Activity[item.ActivityId],
item.BeginTime.ToShortDateString(),
item.EndTime.ToShortDateString(),
});
}
/// <summary>
/// 保存按钮点击时触发
/// </summary>
private void BtnSave_Click(object sender, EventArgs e)
{
try
{
var path = ActivityConfigJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new SaveFileDialog
{
FileName = "ActivityConfig.json",
Filter = "ActivityConfig.json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = ActivityConfigJsonPath.Text = dialog.FileName;
else
return;
}
// 序列化
File.WriteAllText(path, JsonConvert.SerializeObject(ActivityConfigItems, Formatting.Indented));
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - ActivityConfig.json -
#region - -
/// <summary>
/// 加载所有活动
/// </summary>
private void LoadAllActivity()
{
ListAllActivity.BeginUpdate();
foreach (var grp in GameData.Activity)
{
var grpControl = ListAllActivity.Groups.Add(grp.Key, grp.Key);
for (var i = 0; i < grp.Value.Count; i++)
{
ListAllActivity.Items.Add(new ListViewItem(new[]
{
grp.Value.Ids[i].ToString(), grp.Value.Names[i]
}, grpControl));
}
}
ListAllActivity.EndUpdate();
}
/// <summary>
/// 所有活动列表选中项改变时触发
/// </summary>
private void ListAllActivity_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (ListAllActivity.SelectedItems.Count == 0)
return;
NUDActivityId.Text = ListAllActivity.SelectedItems[0].Text;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 活动ID改变时触发
/// </summary>
private void NUDActivityId_ValueChanged(object sender, EventArgs e)
{
// 更新活动名称到提示文本
var activityId = (int)NUDActivityId.Value;
LblActivityTitle.Text = GameData.Activity[activityId];
// 检查是否在列表中,允许删除
var item = ActivityConfigItems.Find(it => it.ActivityId == activityId);
BtnDelete.Enabled = item != null;
}
/// <summary>
/// 点击添加或更新按钮时触发
/// </summary>
private async void BtnAddOrUpdate_Click(object sender, EventArgs e)
{
var activityId = (int)NUDActivityId.Value;
var isNew = false;
var item = ActivityConfigItems.Find(it => it.ActivityId == activityId);
if (item == null)
{
item = new ActivityConfigItem();
isNew = true;
}
item.ActivityId = activityId;
item.ActivityType = (int)NUDActivityType.Value;
item.ScheduleId = (int)NUDScheduleId.Value;
try
{
item.MeetCondList = !string.IsNullOrEmpty(TxtMeetCondList.Text)
? TxtMeetCondList.Text.Split(',').Select(it => int.Parse(it.Trim())).ToList()
: new List<int>();
}
catch (Exception)
{
item.MeetCondList = new List<int>();
}
if (DTPBeginTime.Value > DTPEndTime.Value)
{
// ?
}
item.BeginTime = DTPBeginTime.Value.Date;
item.EndTime = DTPEndTime.Value.Date.AddDays(1).AddSeconds(-1);
if (isNew)
{
ActivityConfigItems.Add(item);
ListActivityConfigItems.Items.Add(Convert(item));
}
BtnDelete.Enabled = true;
await UIUtil.ButtonComplete(BtnAddOrUpdate);
}
/// <summary>
/// 点击删除按钮时触发
/// </summary>
private void BtnDelete_Click(object sender, EventArgs e)
{
var activityId = (int)NUDActivityId.Value;
var index = ActivityConfigItems.FindIndex(it => it.ActivityId == activityId);
if (index != -1)
{
ListActivityConfigItems.Items.RemoveAt(index);
ActivityConfigItems.RemoveAt(index);
}
BtnDelete.Enabled = false;
}
/// <summary>
/// 当前文件活动配置列表选中项改变时触发
/// </summary>
private void ListActivityConfigItems_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListActivityConfigItems.SelectedItems.Count == 0)
return;
var index = ListActivityConfigItems.SelectedIndices[0];
var configItem = ActivityConfigItems[index];
NUDActivityId.Value = configItem.ActivityId;
NUDActivityType.Value = configItem.ActivityType;
NUDScheduleId.Value = configItem.ScheduleId;
TxtMeetCondList.Text = configItem.MeetCondList?.Count > 0
? string.Join(",", configItem.MeetCondList)
: string.Empty;
DTPBeginTime.Value = configItem.BeginTime;
DTPEndTime.Value = configItem.EndTime;
}
#endregion - -
}
}

View File

@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BtnSave.Text" xml:space="preserve">
<value>Save</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Load</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>145, 17</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json Path:</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>All Activity by dplek</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>File</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>Begin time</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>End time</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>Activity info</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="LblActivityParmEditTip.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 251</value>
</data>
<data name="LblActivityParmEditTip.Size" type="System.Drawing.Size, System.Drawing">
<value>314, 17</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>Tip: Usually you only need to modify the activity time</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Delete</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Add or Update</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>End Time</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Begin Time</value>
</data>
<data name="LblMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>MeetCondList</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>Schedule ID</value>
</data>
<data name="LblActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>Activity Type</value>
</data>
<data name="LblActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 17</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>Activity ID</value>
</data>
</root>

View File

@@ -0,0 +1,858 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;LblActivityId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ListAllActivity.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="GrpActivityInfo.Location" type="System.Drawing.Point, System.Drawing">
<value>278, 41</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json 路径:</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ColActivityEndTime.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="ListActivityConfigItems.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;LblActivityType.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityTitle.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;NUDActivityId.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblActivityParmEditTip.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="NUDActivityType.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="BtnLoad.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="NUDScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 101</value>
</data>
<data name="BtnAddOrUpdate.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;NUDScheduleId.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="ListAllActivity.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="LblScheduleId.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 103</value>
</data>
<data name="&gt;&gt;LblBeginTime.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.Name" xml:space="preserve">
<value>TxtMeetCondList</value>
</data>
<data name="LblBeginTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnLoad.Location" type="System.Drawing.Point, System.Drawing">
<value>671, 12</value>
</data>
<data name="&gt;&gt;ColActivityEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnDelete.Name" xml:space="preserve">
<value>BtnDelete</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Name" xml:space="preserve">
<value>NUDScheduleId</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="&gt;&gt;ListAllActivity.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;LblActivityType.Name" xml:space="preserve">
<value>LblActivityType</value>
</data>
<data name="LblActivityId.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>活动类型</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;GrpFileActivity.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 193</value>
</data>
<data name="&gt;&gt;NUDActivityId.Name" xml:space="preserve">
<value>NUDActivityId</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>活动开始时间</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnSave.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;GrpAllActivity.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;ColumnActivityId.Name" xml:space="preserve">
<value>ColumnActivityId</value>
</data>
<data name="&gt;&gt;BtnSave.Name" xml:space="preserve">
<value>BtnSave</value>
</data>
<data name="&gt;&gt;LblBeginTime.Name" xml:space="preserve">
<value>LblBeginTime</value>
</data>
<data name="&gt;&gt;DTPEndTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;GrpAllActivity.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblEndTime.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;LblScheduleId.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblEndTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>开始时间</value>
</data>
<data name="GrpActivityInfo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="&gt;&gt;GrpAllActivity.Name" xml:space="preserve">
<value>GrpAllActivity</value>
</data>
<data name="NUDActivityId.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 43</value>
</data>
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 164</value>
</data>
<data name="BtnSave.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>199, 271</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ColActivityId.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>活动结束时间</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 删除</value>
</data>
<data name="ActivityConfigJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>176, 12</value>
</data>
<data name="LblActivityTitle.Size" type="System.Drawing.Size, System.Drawing">
<value>134, 17</value>
</data>
<data name="LblActivityTitle.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="LblActivityId.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="ColumnActivityId.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.Name" xml:space="preserve">
<value>LblActivityConfigJsonPath</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.Name" xml:space="preserve">
<value>ListActivityConfigItems</value>
</data>
<data name="GrpAllActivity.Location" type="System.Drawing.Point, System.Drawing">
<value>612, 41</value>
</data>
<data name="&gt;&gt;BtnDelete.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;ColActivityId.Name" xml:space="preserve">
<value>ColActivityId</value>
</data>
<data name="BtnLoad.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;NUDActivityType.Name" xml:space="preserve">
<value>NUDActivityType</value>
</data>
<data name="GrpFileActivity.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 41</value>
</data>
<data name="LblActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;NUDScheduleId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="GrpAllActivity.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Right</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>提示:通常情况下你只需要修改活动进行时间</value>
</data>
<data name="DTPBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
</data>
<data name="&gt;&gt;LblActivityId.ZOrder" xml:space="preserve">
<value>15</value>
</data>
<data name="LblScheduleId.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblActivityType.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="DTPEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 188</value>
</data>
<data name="&gt;&gt;LblActivityId.Name" xml:space="preserve">
<value>LblActivityId</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>900, 420</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>当前文件</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;LblMeetCondList.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ActivityConfig.json Editor</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.Parent" xml:space="preserve">
<value>GrpFileActivity</value>
</data>
<data name="DTPBeginTime.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 159</value>
</data>
<data name="BtnLoad.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="&gt;&gt;ListActivityConfigItems.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpAllActivity.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 9pt</value>
</data>
<data name="ColActivityId.Width" type="System.Int32, mscorlib">
<value>50</value>
</data>
<data name="&gt;&gt;LblMeetCondList.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="NUDActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="&gt;&gt;NUDActivityId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;LblEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblActivityParmEditTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="NUDActivityId.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="BtnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 30</value>
</data>
<data name="BtnDelete.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="&gt;&gt;BtnLoad.Name" xml:space="preserve">
<value>BtnLoad</value>
</data>
<data name="&gt;&gt;LblEndTime.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="NUDActivityType.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 72</value>
</data>
<data name="&gt;&gt;LblActivityConfigJsonPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;NUDActivityType.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.Name" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;ColActivityId.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpFileActivity.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>活动ID</value>
</data>
<data name="ColumnActivityId.Width" type="System.Int32, mscorlib">
<value>50</value>
</data>
<data name="LblActivityConfigJsonPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="ColActivityBeginTime.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
<data name="GrpFileActivity.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;DTPBeginTime.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;LblActivityTitle.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityType.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;DTPBeginTime.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 30</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>结束时间</value>
</data>
<data name="&gt;&gt;TxtMeetCondList.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpFileActivity.Name" xml:space="preserve">
<value>GrpFileActivity</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ActivityConfigJsonPath.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="ActivityConfigJsonPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;BtnLoad.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblEndTime.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblBeginTime.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加载</value>
</data>
<data name="&gt;&gt;LblActivityTitle.Name" xml:space="preserve">
<value>LblActivityTitle</value>
</data>
<data name="GrpAllActivity.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;DTPBeginTime.Name" xml:space="preserve">
<value>DTPBeginTime</value>
</data>
<data name="TxtMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
</data>
<data name="ListActivityConfigItems.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 306</value>
</data>
<data name="LblActivityConfigJsonPath.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormActivityEditor</value>
</data>
<data name="&gt;&gt;LblScheduleId.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="LblActivityConfigJsonPath.Location" type="System.Drawing.Point, System.Drawing">
<value>17, 15</value>
</data>
<data name="&gt;&gt;LblActivityId.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ListAllActivity.Parent" xml:space="preserve">
<value>GrpAllActivity</value>
</data>
<data name="LblActivityType.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 74</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>活动名称</value>
</data>
<data name="&gt;&gt;BtnSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ColumnActivityName.Width" type="System.Int32, mscorlib">
<value>300</value>
</data>
<data name="ListActivityConfigItems.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LblActivityParmEditTip.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 17</value>
</data>
<data name="&gt;&gt;NUDActivityType.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>776, 12</value>
</data>
<data name="LblMeetCondList.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblActivityTitle.Location" type="System.Drawing.Point, System.Drawing">
<value>173, 45</value>
</data>
<data name="ActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>489, 23</value>
</data>
<data name="&gt;&gt;NUDActivityType.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="LblActivityConfigJsonPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>884, 381</value>
</data>
<data name="&gt;&gt;BtnDelete.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpAllActivity.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 328</value>
</data>
<data name="BtnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 23</value>
</data>
<data name="LblActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="BtnLoad.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="GrpFileActivity.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 328</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>保存</value>
</data>
<data name="DTPEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>200, 23</value>
</data>
<data name="ColActivityTitle.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="&gt;&gt;DTPEndTime.Name" xml:space="preserve">
<value>DTPEndTime</value>
</data>
<data name="&gt;&gt;DTPBeginTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;ColumnActivityName.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ListAllActivity.Size" type="System.Drawing.Size, System.Drawing">
<value>254, 306</value>
</data>
<data name="&gt;&gt;LblScheduleId.Name" xml:space="preserve">
<value>LblScheduleId</value>
</data>
<data name="&gt;&gt;ListAllActivity.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.Name" xml:space="preserve">
<value>LblActivityParmEditTip</value>
</data>
<data name="&gt;&gt;BtnLoad.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="LblBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpActivityInfo.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>计划ID</value>
</data>
<data name="LblMeetCondList.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 133</value>
</data>
<data name="GrpFileActivity.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>活动信息</value>
</data>
<data name="BtnDelete.Enabled" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="NUDActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 23</value>
</data>
<data name="&gt;&gt;LblActivityTitle.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;LblMeetCondList.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="LblActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 17</value>
</data>
<data name="ListAllActivity.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve">
<value>BtnAddOrUpdate</value>
</data>
<data name="GrpActivityInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>328, 328</value>
</data>
<data name="&gt;&gt;ColumnActivityId.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;DTPEndTime.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;BtnLoad.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>已知活动 by dplek</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>活动名称</value>
</data>
<data name="&gt;&gt;LblScheduleId.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="NUDScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 23</value>
</data>
<data name="&gt;&gt;ColActivityEndTime.Name" xml:space="preserve">
<value>ColActivityEndTime</value>
</data>
<data name="&gt;&gt;BtnSave.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;BtnSave.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpFileActivity.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LblMeetCondList.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="TxtMeetCondList.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 130</value>
</data>
<data name="&gt;&gt;LblBeginTime.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="&gt;&gt;ColActivityTitle.Name" xml:space="preserve">
<value>ColActivityTitle</value>
</data>
<data name="LblActivityType.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblActivityType.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<data name="&gt;&gt;DTPEndTime.Type" xml:space="preserve">
<value>System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnDelete.Parent" xml:space="preserve">
<value>GrpActivityInfo</value>
</data>
<data name="LblMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="&gt;&gt;LblEndTime.Name" xml:space="preserve">
<value>LblEndTime</value>
</data>
<data name="LblActivityId.Location" type="System.Drawing.Point, System.Drawing">
<value>21, 45</value>
</data>
<data name="BtnSave.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="DTPEndTime.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="NUDScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;GrpActivityInfo.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ColActivityTitle.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
</data>
<data name="&gt;&gt;NUDActivityId.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="&gt;&gt;LblMeetCondList.Name" xml:space="preserve">
<value>LblMeetCondList</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>活动名称</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 271</value>
</data>
<data name="&gt;&gt;LblActivityParmEditTip.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ColActivityBeginTime.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TxtMeetCondList.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.Name" xml:space="preserve">
<value>ActivityConfigJsonPath</value>
</data>
<data name="DTPBeginTime.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="LblActivityParmEditTip.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 251</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="LblScheduleId.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;ColActivityBeginTime.Name" xml:space="preserve">
<value>ColActivityBeginTime</value>
</data>
<data name="&gt;&gt;ColumnActivityName.Name" xml:space="preserve">
<value>ColumnActivityName</value>
</data>
<data name="&gt;&gt;ListAllActivity.Name" xml:space="preserve">
<value>ListAllActivity</value>
</data>
<data name="ListActivityConfigItems.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;ActivityConfigJsonPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>满足条件列表</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,221 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BtnSave.Text" xml:space="preserve">
<value>Сохранить</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Загрузить</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblActivityConfigJsonPath.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 17</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json Путь:</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>Вся деятельность by dplek</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>Текущий файл</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>Activity name</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>Begin time</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>End time</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>Информация об активности</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>Название деятельности</value>
</data>
<data name="LblActivityParmEditTip.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 8pt</value>
</data>
<data name="LblActivityParmEditTip.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 236</value>
</data>
<data name="LblActivityParmEditTip.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 32</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>Совет: обычно вам нужно изменить только
время активности</value>
</data>
<data name="BtnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>213, 271</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>27, 271</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 30</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Добавить или обновить</value>
</data>
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
<value>59, 17</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>End time</value>
</data>
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 17</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>Begin time</value>
</data>
<data name="LblMeetCondList.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>MeetCondList</value>
</data>
<data name="LblScheduleId.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 17</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>Scheduled ID</value>
</data>
<data name="LblActivityType.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>Activty Type</value>
</data>
<data name="LblActivityId.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 17</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>Activity ID</value>
</data>
</root>

View File

@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BtnLoad.Text" xml:space="preserve">
<value>加載</value>
</data>
<data name="LblActivityConfigJsonPath.Text" xml:space="preserve">
<value>ActivityConfig.json 路徑:</value>
</data>
<data name="GrpAllActivity.Text" xml:space="preserve">
<value>已知活動 by dplek</value>
</data>
<data name="ColumnActivityName.Text" xml:space="preserve">
<value>活動名稱</value>
</data>
<data name="GrpFileActivity.Text" xml:space="preserve">
<value>當前文件</value>
</data>
<data name="ColActivityTitle.Text" xml:space="preserve">
<value>活動名稱</value>
</data>
<data name="ColActivityBeginTime.Text" xml:space="preserve">
<value>開始時間</value>
</data>
<data name="ColActivityEndTime.Text" xml:space="preserve">
<value>結束時間</value>
</data>
<data name="GrpActivityInfo.Text" xml:space="preserve">
<value>活動信息</value>
</data>
<data name="LblActivityTitle.Text" xml:space="preserve">
<value>活動名稱</value>
</data>
<data name="LblActivityParmEditTip.Text" xml:space="preserve">
<value>提示:通常情況下你只需要修改活動進行時間</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- 刪除</value>
</data>
<data name="LblEndTime.Text" xml:space="preserve">
<value>活動結束時間</value>
</data>
<data name="LblBeginTime.Text" xml:space="preserve">
<value>活動開始時間</value>
</data>
<data name="LblMeetCondList.Text" xml:space="preserve">
<value>滿足條件列表</value>
</data>
<data name="LblScheduleId.Text" xml:space="preserve">
<value>計劃ID</value>
</data>
<data name="LblActivityType.Text" xml:space="preserve">
<value>活動類型</value>
</data>
<data name="LblActivityId.Text" xml:space="preserve">
<value>活動ID</value>
</data>
</root>

View File

@@ -14,8 +14,9 @@
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*
**/
using System;
using System.Collections.Generic;
using System.IO;
@@ -98,7 +99,6 @@ namespace GrasscutterTools.Forms
{
// 保存文件路径
Settings.Default.DropJsonPath = TxtDropJsonPath.Text;
Settings.Default.Save();
base.OnFormClosed(e);
}
@@ -486,7 +486,6 @@ namespace GrasscutterTools.Forms
dropList[i] = data;
}
#endregion - -
#region - -

View File

@@ -122,16 +122,16 @@
<value>99, 17</value>
</data>
<data name="LblDropPathLabel.Text" xml:space="preserve">
<value>Drop.json Путь:</value>
<value>Путь до Drop.json:</value>
</data>
<data name="BtnLoad.Text" xml:space="preserve">
<value>Нагрузка</value>
<value>Загрузить</value>
</data>
<data name="BtnSave.Text" xml:space="preserve">
<value>Сохранять</value>
<value>Сохранить</value>
</data>
<data name="GrpDropList.Text" xml:space="preserve">
<value>Drop list</value>
<value>Список дропа</value>
</data>
<data name="BtnCopyAll.Location" type="System.Drawing.Point, System.Drawing">
<value>94, 202</value>
@@ -170,7 +170,7 @@
<value>62, 17</value>
</data>
<data name="LblItemLabel.Text" xml:space="preserve">
<value>предмет:</value>
<value>Предмет:</value>
</data>
<data name="LblWeightLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>39, 17</value>

View File

@@ -14,8 +14,9 @@
*
* 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.Linq;
@@ -99,25 +100,25 @@ namespace GrasscutterTools.Forms
{
try
{
NUDGachaType.Value = banner.GachaType;
NUDScheduleId.Value = banner.ScheduleId;
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;
NUDBeginTime.Value = banner.BeginTime;
NUDEndTime.Value = banner.EndTime;
NUDSortId.Value = banner.SortId;
TxtRateUpItems1.Text = string.Join(", ", banner.RateUpItems1);
TxtRateUpItems2.Text = string.Join(", ", banner.RateUpItems2);
NUDBaseYellowWeight.Value = banner.BaseYellowWeight * 0.01M;
NUDBasePurpleWeight.Value = banner.BasePurpleWeight * 0.01M;
NUDEventChance.Value = banner.EventChance;
NUDSoftPity.Value = banner.SoftPity;
NUDHardPity.Value = banner.HardPity;
RbCostItem224.Checked = banner.CostItem == 224;
RbCostItem223.Checked = banner.CostItem == 223;
NUDBeginTime.Value = banner.BeginTime;
NUDEndTime.Value = banner.EndTime;
NUDSortId.Value = banner.SortId;
TxtRateUpItems1.Text = string.Join(", ", banner.RateUpItems1);
TxtRateUpItems2.Text = string.Join(", ", banner.RateUpItems2);
NUDBaseYellowWeight.Value = banner.BaseYellowWeight * 0.01M;
NUDBasePurpleWeight.Value = banner.BasePurpleWeight * 0.01M;
NUDEventChance.Value = banner.EventChance;
NUDSoftPity.Value = banner.SoftPity;
NUDHardPity.Value = banner.HardPity;
InitRateUpItems(banner);
}
catch (Exception ex)
@@ -155,23 +156,23 @@ namespace GrasscutterTools.Forms
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
GachaBanner banner = new GachaBanner
{
GachaType = (int)NUDGachaType.Value,
ScheduleId = (int)NUDScheduleId.Value,
BannerType = (BannerType)CmbBannerType.SelectedIndex,
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
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)NUDBeginTime.Value,
EndTime = (int)NUDEndTime.Value,
SortId = (int)NUDSortId.Value,
RateUpItems1 = yellowIds,
RateUpItems2 = purpleIds,
BaseYellowWeight = (int)(NUDBaseYellowWeight.Value * 100),
BasePurpleWeight = (int)(NUDBasePurpleWeight.Value * 100),
EventChance = (int)NUDEventChance.Value,
SoftPity = (int)NUDSoftPity.Value,
HardPity = (int)NUDHardPity.Value
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
CostItem = RbCostItem224.Checked ? 224 : 223,
BeginTime = (int)NUDBeginTime.Value,
EndTime = (int)NUDEndTime.Value,
SortId = (int)NUDSortId.Value,
RateUpItems1 = yellowIds,
RateUpItems2 = purpleIds,
BaseYellowWeight = (int)(NUDBaseYellowWeight.Value * 100),
BasePurpleWeight = (int)(NUDBasePurpleWeight.Value * 100),
EventChance = (int)NUDEventChance.Value,
SoftPity = (int)NUDSoftPity.Value,
HardPity = (int)NUDHardPity.Value
};
return banner;
}

View File

@@ -22,7 +22,6 @@ 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;
@@ -301,7 +300,7 @@ namespace GrasscutterTools.Forms
{
var json = JsonConvert.SerializeObject(banner);
json = json.Replace(",\"", ",\r\n \"").Insert(1, "\r\n ");
TxtJson.Text = json.Insert(json.Length-1, "\r\n");
TxtJson.Text = json.Insert(json.Length - 1, "\r\n");
ShowBanner(banner);
}
}

View File

@@ -0,0 +1,774 @@

namespace GrasscutterTools.Forms
{
partial class FormGachaBannersEditor3
{
/// <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(FormGachaBannersEditor3));
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.GrpBannerValues = new System.Windows.Forms.GroupBox();
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
this.CmbTitlePath = new System.Windows.Forms.ComboBox();
this.LblTitlePath = new System.Windows.Forms.Label();
this.NUDCostItemAmount10 = new System.Windows.Forms.NumericUpDown();
this.LblCostItemAmount10 = new System.Windows.Forms.Label();
this.NUDCostItemAmount1 = new System.Windows.Forms.NumericUpDown();
this.LblCostItemAmount1 = new System.Windows.Forms.Label();
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.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.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.ChartWeights = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.GrpBanners = new System.Windows.Forms.GroupBox();
this.LnkCheckLatestBanners = new System.Windows.Forms.LinkLabel();
this.ListBanners = new System.Windows.Forms.ListBox();
this.FLPBannersControl = new System.Windows.Forms.FlowLayoutPanel();
this.BtnDelete = new System.Windows.Forms.Button();
this.BtnClear = new System.Windows.Forms.Button();
this.LblBannersJson = new System.Windows.Forms.Label();
this.TxtBannersJsonPath = new System.Windows.Forms.TextBox();
this.BtnLoad = new System.Windows.Forms.Button();
this.BtnSave = new System.Windows.Forms.Button();
this.GrpBannerValues.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount10)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount1)).BeginInit();
((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.GrpWeights.SuspendLayout();
this.GrpBalance.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).BeginInit();
this.GrpBanners.SuspendLayout();
this.FLPBannersControl.SuspendLayout();
this.SuspendLayout();
//
// GrpBannerValues
//
resources.ApplyResources(this.GrpBannerValues, "GrpBannerValues");
this.GrpBannerValues.Controls.Add(this.BtnAddOrUpdate);
this.GrpBannerValues.Controls.Add(this.CmbTitlePath);
this.GrpBannerValues.Controls.Add(this.LblTitlePath);
this.GrpBannerValues.Controls.Add(this.NUDCostItemAmount10);
this.GrpBannerValues.Controls.Add(this.LblCostItemAmount10);
this.GrpBannerValues.Controls.Add(this.NUDCostItemAmount1);
this.GrpBannerValues.Controls.Add(this.LblCostItemAmount1);
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.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;
//
// BtnAddOrUpdate
//
resources.ApplyResources(this.BtnAddOrUpdate, "BtnAddOrUpdate");
this.BtnAddOrUpdate.Name = "BtnAddOrUpdate";
this.BtnAddOrUpdate.UseVisualStyleBackColor = true;
this.BtnAddOrUpdate.Click += new System.EventHandler(this.BtnAddOrUpdate_Click);
//
// CmbTitlePath
//
resources.ApplyResources(this.CmbTitlePath, "CmbTitlePath");
this.CmbTitlePath.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbTitlePath.FormattingEnabled = true;
this.CmbTitlePath.Name = "CmbTitlePath";
//
// LblTitlePath
//
resources.ApplyResources(this.LblTitlePath, "LblTitlePath");
this.LblTitlePath.Name = "LblTitlePath";
//
// NUDCostItemAmount10
//
resources.ApplyResources(this.NUDCostItemAmount10, "NUDCostItemAmount10");
this.NUDCostItemAmount10.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItemAmount10.Name = "NUDCostItemAmount10";
this.NUDCostItemAmount10.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// LblCostItemAmount10
//
resources.ApplyResources(this.LblCostItemAmount10, "LblCostItemAmount10");
this.LblCostItemAmount10.Name = "LblCostItemAmount10";
//
// NUDCostItemAmount1
//
resources.ApplyResources(this.NUDCostItemAmount1, "NUDCostItemAmount1");
this.NUDCostItemAmount1.Maximum = new decimal(new int[] {
2147483647,
0,
0,
0});
this.NUDCostItemAmount1.Name = "NUDCostItemAmount1";
this.NUDCostItemAmount1.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// LblCostItemAmount1
//
resources.ApplyResources(this.LblCostItemAmount1, "LblCostItemAmount1");
this.LblCostItemAmount1.Name = "LblCostItemAmount1";
//
// 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.Name = "NUDSortId";
this.NUDSortId.Value = new decimal(new int[] {
1000,
0,
0,
0});
//
// 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")))});
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");
//
// 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";
//
// ChartWeights
//
resources.ApplyResources(this.ChartWeights, "ChartWeights");
chartArea2.AxisX.Minimum = 0D;
chartArea2.AxisY.Maximum = 100D;
chartArea2.AxisY.Minimum = 0D;
chartArea2.AxisY.Title = "%";
chartArea2.Name = "ChartArea1";
this.ChartWeights.ChartAreas.Add(chartArea2);
legend2.Name = "Legend1";
this.ChartWeights.Legends.Add(legend2);
this.ChartWeights.Name = "ChartWeights";
series3.ChartArea = "ChartArea1";
series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series3.Color = System.Drawing.Color.OrangeRed;
series3.Label = "(#VALX, #VAL)";
series3.Legend = "Legend1";
series3.LegendText = "5*";
series3.Name = "SeriesWeight5";
series3.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series3.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
series4.ChartArea = "ChartArea1";
series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
series4.Color = System.Drawing.Color.Purple;
series4.Label = "(#VALX, #VAL)";
series4.Legend = "Legend1";
series4.LegendText = "4*";
series4.Name = "SeriesWeight4";
series4.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
series4.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
this.ChartWeights.Series.Add(series3);
this.ChartWeights.Series.Add(series4);
//
// GrpBanners
//
resources.ApplyResources(this.GrpBanners, "GrpBanners");
this.GrpBanners.Controls.Add(this.LnkCheckLatestBanners);
this.GrpBanners.Controls.Add(this.ListBanners);
this.GrpBanners.Controls.Add(this.FLPBannersControl);
this.GrpBanners.Name = "GrpBanners";
this.GrpBanners.TabStop = false;
//
// LnkCheckLatestBanners
//
resources.ApplyResources(this.LnkCheckLatestBanners, "LnkCheckLatestBanners");
this.LnkCheckLatestBanners.Name = "LnkCheckLatestBanners";
this.LnkCheckLatestBanners.TabStop = true;
this.LnkCheckLatestBanners.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkCheckLatestBanners_LinkClicked);
//
// ListBanners
//
resources.ApplyResources(this.ListBanners, "ListBanners");
this.ListBanners.FormattingEnabled = true;
this.ListBanners.Name = "ListBanners";
this.ListBanners.SelectedIndexChanged += new System.EventHandler(this.ListBanners_SelectedIndexChanged);
//
// FLPBannersControl
//
resources.ApplyResources(this.FLPBannersControl, "FLPBannersControl");
this.FLPBannersControl.Controls.Add(this.BtnDelete);
this.FLPBannersControl.Controls.Add(this.BtnClear);
this.FLPBannersControl.Name = "FLPBannersControl";
//
// BtnDelete
//
resources.ApplyResources(this.BtnDelete, "BtnDelete");
this.BtnDelete.Name = "BtnDelete";
this.BtnDelete.UseVisualStyleBackColor = true;
this.BtnDelete.Click += new System.EventHandler(this.BtnDelete_Click);
//
// BtnClear
//
resources.ApplyResources(this.BtnClear, "BtnClear");
this.BtnClear.Name = "BtnClear";
this.BtnClear.UseVisualStyleBackColor = true;
this.BtnClear.Click += new System.EventHandler(this.BtnClear_Click);
//
// LblBannersJson
//
resources.ApplyResources(this.LblBannersJson, "LblBannersJson");
this.LblBannersJson.Name = "LblBannersJson";
//
// TxtBannersJsonPath
//
resources.ApplyResources(this.TxtBannersJsonPath, "TxtBannersJsonPath");
this.TxtBannersJsonPath.Name = "TxtBannersJsonPath";
//
// 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);
//
// FormGachaBannersEditor3
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.ChartWeights);
this.Controls.Add(this.BtnSave);
this.Controls.Add(this.BtnLoad);
this.Controls.Add(this.TxtBannersJsonPath);
this.Controls.Add(this.LblBannersJson);
this.Controls.Add(this.GrpBanners);
this.Controls.Add(this.GrpBalance);
this.Controls.Add(this.GrpWeights);
this.Controls.Add(this.GrpFallbackPool);
this.Controls.Add(this.GrpUpPool);
this.Controls.Add(this.GrpBannerValues);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
this.Name = "FormGachaBannersEditor3";
this.GrpBannerValues.ResumeLayout(false);
this.GrpBannerValues.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount10)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.NUDCostItemAmount1)).EndInit();
((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.GrpWeights.ResumeLayout(false);
this.GrpWeights.PerformLayout();
this.GrpBalance.ResumeLayout(false);
this.GrpBalance.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.ChartWeights)).EndInit();
this.GrpBanners.ResumeLayout(false);
this.GrpBanners.PerformLayout();
this.FLPBannersControl.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#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 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.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.DataVisualization.Charting.Chart ChartWeights;
private System.Windows.Forms.GroupBox GrpBanners;
private System.Windows.Forms.Label LblBannersJson;
private System.Windows.Forms.TextBox TxtBannersJsonPath;
private System.Windows.Forms.Button BtnLoad;
private System.Windows.Forms.Button BtnSave;
private System.Windows.Forms.FlowLayoutPanel FLPBannersControl;
private System.Windows.Forms.Button BtnAddOrUpdate;
private System.Windows.Forms.Button BtnDelete;
private System.Windows.Forms.NumericUpDown NUDCostItemAmount10;
private System.Windows.Forms.Label LblCostItemAmount10;
private System.Windows.Forms.NumericUpDown NUDCostItemAmount1;
private System.Windows.Forms.Label LblCostItemAmount1;
private System.Windows.Forms.ListBox ListBanners;
private System.Windows.Forms.ComboBox CmbTitlePath;
private System.Windows.Forms.Label LblTitlePath;
private System.Windows.Forms.Button BtnClear;
private System.Windows.Forms.LinkLabel LnkCheckLatestBanners;
}
}

View File

@@ -0,0 +1,509 @@
/**
* 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.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Gacha;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Forms
{
/// <summary>
/// 卡池编辑器
/// </summary>
public partial class FormGachaBannersEditor3 : Form
{
#region - -
private List<GachaBanner3> Banners;
#endregion - -
#region - -
public FormGachaBannersEditor3()
{
InitializeComponent();
Icon = Resources.IconGrasscutter;
CmbBannerType.SelectedIndex = 0;
InitBannerPrefab();
InitCheckedListBoxs();
ShowBanner(new GachaBanner3());
}
private void InitBannerPrefab()
{
CmbPrefab.Items.Clear();
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
CmbTitlePath.Items.Clear();
CmbTitlePath.Items.AddRange(GameData.GachaBannerTitles.Names);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
// 加载文件路径
var path = Settings.Default.BannersJsonPath;
TxtBannersJsonPath.Text = path;
if (!string.IsNullOrEmpty(path) && File.Exists(path))
LoadBanners(File.ReadAllText(path));
else
LoadBanners(Encoding.UTF8.GetString(Resources.Banners));
}
catch (Exception ex)
{
LoadBanners(Encoding.UTF8.GetString(Resources.Banners));
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
// 保存文件路径
Settings.Default.BannersJsonPath = TxtBannersJsonPath.Text;
base.OnFormClosed(e);
}
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();
}
#endregion - -
#region - Banners.json -
/// <summary>
/// 加载按钮点击时触发
/// </summary>
private void BtnLoad_Click(object sender, EventArgs e)
{
try
{
var path = TxtBannersJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new OpenFileDialog
{
FileName = "Banners.json",
Filter = "Banners.Json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = TxtBannersJsonPath.Text = dialog.FileName;
else
return;
}
var content = File.ReadAllText(path);
if (string.IsNullOrEmpty(content))
content = Encoding.UTF8.GetString(Resources.Banners);
LoadBanners(content);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 保存按钮点击时触发
/// </summary>
private void BtnSave_Click(object sender, EventArgs e)
{
try
{
var path = TxtBannersJsonPath.Text.Trim();
if (path == string.Empty)
{
var dialog = new SaveFileDialog
{
FileName = "Banners.json",
Filter = "Banners.json (*.json)|*.json|All files (*.*)|*.*",
};
var result = dialog.ShowDialog();
if (result == DialogResult.OK)
path = TxtBannersJsonPath.Text = dialog.FileName;
else
return;
}
var json = JsonConvert.SerializeObject(Banners, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore })
.Replace(",\"", ",\r\n \"").Replace("{\"", "{\r\n \"").Replace("\"}", "\"\r\n}");
File.WriteAllText(path, json);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion - Banners.json -
#region - -
/// <summary>
/// 从指定Json中加载卡池
/// </summary>
/// <param name="bannersJson">Banner.json 内容</param>
private void LoadBanners(string bannersJson)
{
// 反序列化
Banners = JsonConvert.DeserializeObject<List<GachaBanner3>>(bannersJson);
ShowBanners();
}
/// <summary>
/// 显示当前卡池列表
/// </summary>
private void ShowBanners()
{
ListBanners.BeginUpdate();
ListBanners.Items.Clear();
ListBanners.Items.AddRange(Banners.ToArray());
ListBanners.EndUpdate();
}
/// <summary>
/// 卡池列表选中项改变时触发
/// </summary>
private void ListBanners_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListBanners.SelectedIndex < 0) return;
ShowBanner(ListBanners.SelectedItem as GachaBanner3);
}
/// <summary>
/// 点击添加或更新卡池按钮时触发
/// </summary>
private void BtnAddOrUpdate_Click(object sender, EventArgs e)
{
var banner = ParseBanner();
var i = Banners.FindIndex(it => it.GachaType == banner.GachaType && it.ScheduleId == banner.ScheduleId);
if (i >= 0)
{
Banners[i] = banner;
ListBanners.Items[i] = banner;
}
else
{
Banners.Add(banner);
ListBanners.Items.Add(banner);
}
}
/// <summary>
/// 点击删除卡池按钮时触发
/// </summary>
private void BtnDelete_Click(object sender, EventArgs e)
{
if (ListBanners.SelectedIndex < 0) return;
if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Banners.RemoveAt(ListBanners.SelectedIndex);
ListBanners.Items.RemoveAt(ListBanners.SelectedIndex);
}
}
/// <summary>
/// 点击清空卡池按钮时触发
/// </summary>
private void BtnClear_Click(object sender, EventArgs e)
{
if (ListBanners.Items.Count < 0) return;
if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Banners.Clear();
ListBanners.Items.Clear();
}
}
#endregion - -
#region - -
private void LnkCheckLatestBanners_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
UIUtil.OpenURL("https://github.com/Zhaokugua/Grasscutter_Banners");
}
private void InitCheckedListBoxs()
{
ListFallbackItems.BeginUpdate();
var a5 = ListFallbackItems.Groups["GroupA5"];
var a4 = ListFallbackItems.Groups["GroupA4"];
var w5 = ListFallbackItems.Groups["GroupW5"];
var w4 = ListFallbackItems.Groups["GroupW4"];
var w3 = ListFallbackItems.Groups["GroupW3"];
var avatars = GetAvatarsByColor("5")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a5) { ForeColor = Color.OrangeRed })
.Concat(GetAvatarsByColor("4")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, a4) { ForeColor = Color.Purple }));
var weapons = GetWeaponsByColor("yellow")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, w5) { ForeColor = Color.OrangeRed })
.Concat(GetWeaponsByColor("purple")
.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("5")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua5) { ForeColor = Color.OrangeRed })
.Concat(GetAvatarsByColor("4")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, ua4) { ForeColor = Color.Purple }));
var upWeapons = GetWeaponsByColor("yellow")
.Select(it => new ListViewItem(new string[] { it.Item1.ToString(), it.Item2 }, uw5) { ForeColor = Color.OrangeRed })
.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(GachaBanner3 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(GachaBanner3 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 - -
/// <summary>
/// 显示指定卡池参数
/// </summary>
/// <param name="banner">卡池对象</param>
private void ShowBanner(GachaBanner3 banner)
{
try
{
NUDGachaType.Value = banner.GachaType;
NUDScheduleId.Value = banner.ScheduleId;
CmbBannerType.SelectedIndex = (int)banner.BannerType;
if (string.IsNullOrEmpty(banner.PrefabPath) || !int.TryParse(banner.PrefabPath.Substring("GachaShowPanel_A".Length, 3), out int prefabId))
CmbPrefab.SelectedIndex = -1;
else
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int titleId))
CmbTitlePath.SelectedIndex = -1;
else
CmbTitlePath.SelectedIndex = Array.IndexOf(GameData.GachaBannerTitles.Ids, titleId);
RbCostItem224.Checked = banner.CostItemId == 224;
RbCostItem223.Checked = banner.CostItemId == 223;
NUDCostItemAmount1.Value = banner.CoseItemAmount;
NUDCostItemAmount10.Value = banner.CoseItemAmount10;
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 GachaBanner3 ParseBanner()
{
if (CmbBannerType.SelectedIndex < 0)
{
MessageBox.Show("请选择奖池类型", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
if (CmbPrefab.SelectedIndex < 0 || CmbTitlePath.SelectedIndex < 0)
{
MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
var titleId = GameData.GachaBannerTitles.Ids[CmbTitlePath.SelectedIndex];
var banner = new GachaBanner3
{
GachaType = (int)NUDGachaType.Value,
ScheduleId = (int)NUDScheduleId.Value,
BannerType = (BannerType)CmbBannerType.SelectedIndex,
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
TitlePath = $"UI_GACHA_SHOW_PANEL_A{titleId:000}_TITLE",
CostItemId = RbCostItem224.Checked ? 224 : 223,
CoseItemAmount = (int)NUDCostItemAmount1.Value,
CostItemId10 = RbCostItem224.Checked ? 224 : 223,
CoseItemAmount10 = (int)NUDCostItemAmount10.Value,
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;
}
#endregion - -
}
}

View File

@@ -0,0 +1,470 @@
<?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.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnAddOrUpdate.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Add or Update</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblTitlePath.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 17</value>
</data>
<data name="LblTitlePath.Text" xml:space="preserve">
<value>TitlePath</value>
</data>
<data name="LblCostItemAmount10.Location" type="System.Drawing.Point, System.Drawing">
<value>225, 175</value>
</data>
<data name="LblCostItemAmount10.Size" type="System.Drawing.Size, System.Drawing">
<value>78, 17</value>
</data>
<data name="LblCostItemAmount10.Text" xml:space="preserve">
<value>Ten Amount</value>
</data>
<data name="LblCostItemAmount1.Location" type="System.Drawing.Point, System.Drawing">
<value>23, 175</value>
</data>
<data name="LblCostItemAmount1.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 17</value>
</data>
<data name="LblCostItemAmount1.Text" xml:space="preserve">
<value>Cost Amount</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 307</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, 288</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.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 287</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, 261</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, 261</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, 232</value>
</data>
<data name="LblSortId.Text" xml:space="preserve">
<value>Sort</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, 203</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
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="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="GrpBanners.Text" xml:space="preserve">
<value>Banners</value>
</data>
<data name="LnkCheckLatestBanners.Location" type="System.Drawing.Point, System.Drawing">
<value>141, -1</value>
</data>
<data name="LnkCheckLatestBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 17</value>
</data>
<data name="LnkCheckLatestBanners.Text" xml:space="preserve">
<value>Check latest Banners</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>Delete</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>Clear</value>
</data>
<data name="LblBannersJson.Size" type="System.Drawing.Size, System.Drawing">
<value>114, 17</value>
</data>
<data name="LblBannersJson.Text" xml:space="preserve">
<value>Banners.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="$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,493 @@
<?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="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>180, 328</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>186, 23</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ Добавить или обновить</value>
</data>
<data name="LblTitlePath.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="LblTitlePath.Text" xml:space="preserve">
<value>Title</value>
</data>
<data name="LblCostItemAmount10.Location" type="System.Drawing.Point, System.Drawing">
<value>224, 175</value>
</data>
<data name="LblCostItemAmount10.Size" type="System.Drawing.Size, System.Drawing">
<value>78, 17</value>
</data>
<data name="LblCostItemAmount10.Text" xml:space="preserve">
<value>Ten Amount</value>
</data>
<data name="LblCostItemAmount1.Location" type="System.Drawing.Point, System.Drawing">
<value>23, 175</value>
</data>
<data name="LblCostItemAmount1.Size" type="System.Drawing.Size, System.Drawing">
<value>83, 17</value>
</data>
<data name="LblCostItemAmount1.Text" xml:space="preserve">
<value>Cost Amount</value>
</data>
<data name="ChkAutoStripRateUpFromFallback.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 307</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, 290</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, 262</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, 262</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, 233</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="LblEndTime.Location" type="System.Drawing.Point, System.Drawing">
<value>249, 204</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, 204</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
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="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="GrpBanners.Text" xml:space="preserve">
<value>Banners</value>
</data>
<data name="LnkCheckLatestBanners.Location" type="System.Drawing.Point, System.Drawing">
<value>73, 0</value>
</data>
<data name="LnkCheckLatestBanners.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 17</value>
</data>
<data name="LnkCheckLatestBanners.Text" xml:space="preserve">
<value>Проверьте последние баннеры</value>
</data>
<data name="BtnDelete.Text" xml:space="preserve">
<value>- Удалить</value>
</data>
<data name="BtnClear.Text" xml:space="preserve">
<value>× Очистить</value>
</data>
<data name="LblBannersJson.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 17</value>
</data>
<data name="LblBannersJson.Text" xml:space="preserve">
<value>Banners.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="$this.Text" xml:space="preserve">
<value>Редактор баннеров Gacha</value>
</data>
</root>

View File

@@ -0,0 +1,301 @@
<?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="LblTitlePath.Text" xml:space="preserve">
<value>封面標題</value>
</data>
<data name="LblCostItemAmount10.Text" xml:space="preserve">
<value>十連消耗</value>
</data>
<data name="LblCostItemAmount1.Text" xml:space="preserve">
<value>單抽消耗</value>
</data>
<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="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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</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
AwAAAAoz5pif5q2m5ZmoBfz///8oU3lzdGVtLldpbmRvd3MuRm9ybXMuSG9yaXpvbnRhbEFsaWdubWVu
dAEAAAAHdmFsdWVfXwAIAgAAAAAAAAAKBgUAAAAHR3JvdXBXMws=
</value>
</data>
<data name="GrpFallbackPool.Text" xml:space="preserve">
<value>基礎池</value>
</data>
<data name="ListUpItems.Groups" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
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="BtnDelete.Text" xml:space="preserve">
<value>刪除</value>
</data>
<data name="BtnLoad.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

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