diff --git a/assets/cn/handler/AUTO_SEARCH_MENU_CONTINUE.png b/assets/cn/handler/AUTO_SEARCH_MENU_CONTINUE.png index fb765054d..c7ed7f8da 100644 Binary files a/assets/cn/handler/AUTO_SEARCH_MENU_CONTINUE.png and b/assets/cn/handler/AUTO_SEARCH_MENU_CONTINUE.png differ diff --git a/assets/cn/handler/AUTO_SEARCH_MENU_EXIT.png b/assets/cn/handler/AUTO_SEARCH_MENU_EXIT.png index 63d709ce5..88779f1a8 100644 Binary files a/assets/cn/handler/AUTO_SEARCH_MENU_EXIT.png and b/assets/cn/handler/AUTO_SEARCH_MENU_EXIT.png differ diff --git a/assets/cn/handler/BOOK_BOX_AUTO.png b/assets/cn/handler/BOOK_BOX_AUTO.png index 72f0dd1ca..353b946a7 100644 Binary files a/assets/cn/handler/BOOK_BOX_AUTO.png and b/assets/cn/handler/BOOK_BOX_AUTO.png differ diff --git a/assets/cn/handler/BOOK_CHECK_AUTO.png b/assets/cn/handler/BOOK_CHECK_AUTO.png index ab2de3e40..3e9782136 100644 Binary files a/assets/cn/handler/BOOK_CHECK_AUTO.png and b/assets/cn/handler/BOOK_CHECK_AUTO.png differ diff --git a/assets/cn/os_handler/AUTO_SEARCH_REWARD.png b/assets/cn/os_handler/AUTO_SEARCH_REWARD.png index 4956fe3a1..13823a64f 100644 Binary files a/assets/cn/os_handler/AUTO_SEARCH_REWARD.png and b/assets/cn/os_handler/AUTO_SEARCH_REWARD.png differ diff --git a/assets/cn/raid/OCR_REMAIN_EASY.png b/assets/cn/raid/ESSEX_OCR_REMAIN_EASY.png similarity index 100% rename from assets/cn/raid/OCR_REMAIN_EASY.png rename to assets/cn/raid/ESSEX_OCR_REMAIN_EASY.png diff --git a/assets/cn/raid/OCR_REMAIN_HARD.png b/assets/cn/raid/ESSEX_OCR_REMAIN_HARD.png similarity index 100% rename from assets/cn/raid/OCR_REMAIN_HARD.png rename to assets/cn/raid/ESSEX_OCR_REMAIN_HARD.png diff --git a/assets/cn/raid/OCR_REMAIN_NORMAL.png b/assets/cn/raid/ESSEX_OCR_REMAIN_NORMAL.png similarity index 100% rename from assets/cn/raid/OCR_REMAIN_NORMAL.png rename to assets/cn/raid/ESSEX_OCR_REMAIN_NORMAL.png diff --git a/assets/cn/raid/RAID_EASY.png b/assets/cn/raid/ESSEX_RAID_EASY.png similarity index 100% rename from assets/cn/raid/RAID_EASY.png rename to assets/cn/raid/ESSEX_RAID_EASY.png diff --git a/assets/cn/raid/RAID_HARD.png b/assets/cn/raid/ESSEX_RAID_HARD.png similarity index 100% rename from assets/cn/raid/RAID_HARD.png rename to assets/cn/raid/ESSEX_RAID_HARD.png diff --git a/assets/cn/raid/RAID_NORMAL.png b/assets/cn/raid/ESSEX_RAID_NORMAL.png similarity index 100% rename from assets/cn/raid/RAID_NORMAL.png rename to assets/cn/raid/ESSEX_RAID_NORMAL.png diff --git a/assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png b/assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png new file mode 100644 index 000000000..aad6308d4 Binary files /dev/null and b/assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png differ diff --git a/assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png b/assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png new file mode 100644 index 000000000..1f61be141 Binary files /dev/null and b/assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png differ diff --git a/assets/cn/raid/SURUGA_OCR_REMAIN_NORMAL.png b/assets/cn/raid/SURUGA_OCR_REMAIN_NORMAL.png new file mode 100644 index 000000000..b49963203 Binary files /dev/null and b/assets/cn/raid/SURUGA_OCR_REMAIN_NORMAL.png differ diff --git a/assets/cn/raid/SURUGA_RAID_EASY.png b/assets/cn/raid/SURUGA_RAID_EASY.png new file mode 100644 index 000000000..13ac5f7cc Binary files /dev/null and b/assets/cn/raid/SURUGA_RAID_EASY.png differ diff --git a/assets/cn/raid/SURUGA_RAID_HARD.png b/assets/cn/raid/SURUGA_RAID_HARD.png new file mode 100644 index 000000000..6b76ccae8 Binary files /dev/null and b/assets/cn/raid/SURUGA_RAID_HARD.png differ diff --git a/assets/cn/raid/SURUGA_RAID_NORMAL.png b/assets/cn/raid/SURUGA_RAID_NORMAL.png new file mode 100644 index 000000000..a0c0182d3 Binary files /dev/null and b/assets/cn/raid/SURUGA_RAID_NORMAL.png differ diff --git a/assets/cn/raid/TICKET_USE_CONFIRM.png b/assets/cn/raid/TICKET_USE_CONFIRM.png index 18bbe7204..18705064f 100644 Binary files a/assets/cn/raid/TICKET_USE_CONFIRM.png and b/assets/cn/raid/TICKET_USE_CONFIRM.png differ diff --git a/assets/cn/ui/MEOWFFICER_INFO.png b/assets/cn/ui/MEOWFFICER_INFO.png new file mode 100644 index 000000000..063c31f23 Binary files /dev/null and b/assets/cn/ui/MEOWFFICER_INFO.png differ diff --git a/assets/en/handler/AUTO_SEARCH_MENU_CONTINUE.png b/assets/en/handler/AUTO_SEARCH_MENU_CONTINUE.png index f9e17c9d1..3b9a21662 100644 Binary files a/assets/en/handler/AUTO_SEARCH_MENU_CONTINUE.png and b/assets/en/handler/AUTO_SEARCH_MENU_CONTINUE.png differ diff --git a/assets/en/handler/AUTO_SEARCH_MENU_EXIT.png b/assets/en/handler/AUTO_SEARCH_MENU_EXIT.png index fede00189..76f8edf5a 100644 Binary files a/assets/en/handler/AUTO_SEARCH_MENU_EXIT.png and b/assets/en/handler/AUTO_SEARCH_MENU_EXIT.png differ diff --git a/assets/en/handler/BOOK_BOX_AUTO.png b/assets/en/handler/BOOK_BOX_AUTO.png index 4ecc468fd..b0d36e71b 100644 Binary files a/assets/en/handler/BOOK_BOX_AUTO.png and b/assets/en/handler/BOOK_BOX_AUTO.png differ diff --git a/assets/en/handler/BOOK_CHECK_AUTO.png b/assets/en/handler/BOOK_CHECK_AUTO.png index ab2de3e40..bc7203840 100644 Binary files a/assets/en/handler/BOOK_CHECK_AUTO.png and b/assets/en/handler/BOOK_CHECK_AUTO.png differ diff --git a/assets/en/os_handler/AUTO_SEARCH_REWARD.png b/assets/en/os_handler/AUTO_SEARCH_REWARD.png index 200507787..5d683f4cc 100644 Binary files a/assets/en/os_handler/AUTO_SEARCH_REWARD.png and b/assets/en/os_handler/AUTO_SEARCH_REWARD.png differ diff --git a/assets/en/raid/OCR_REMAIN_EASY.png b/assets/en/raid/ESSEX_OCR_REMAIN_EASY.png similarity index 100% rename from assets/en/raid/OCR_REMAIN_EASY.png rename to assets/en/raid/ESSEX_OCR_REMAIN_EASY.png diff --git a/assets/en/raid/OCR_REMAIN_HARD.png b/assets/en/raid/ESSEX_OCR_REMAIN_HARD.png similarity index 100% rename from assets/en/raid/OCR_REMAIN_HARD.png rename to assets/en/raid/ESSEX_OCR_REMAIN_HARD.png diff --git a/assets/en/raid/OCR_REMAIN_NORMAL.png b/assets/en/raid/ESSEX_OCR_REMAIN_NORMAL.png similarity index 100% rename from assets/en/raid/OCR_REMAIN_NORMAL.png rename to assets/en/raid/ESSEX_OCR_REMAIN_NORMAL.png diff --git a/assets/en/raid/RAID_EASY.png b/assets/en/raid/ESSEX_RAID_EASY.png similarity index 100% rename from assets/en/raid/RAID_EASY.png rename to assets/en/raid/ESSEX_RAID_EASY.png diff --git a/assets/en/raid/RAID_HARD.png b/assets/en/raid/ESSEX_RAID_HARD.png similarity index 100% rename from assets/en/raid/RAID_HARD.png rename to assets/en/raid/ESSEX_RAID_HARD.png diff --git a/assets/en/raid/RAID_NORMAL.png b/assets/en/raid/ESSEX_RAID_NORMAL.png similarity index 100% rename from assets/en/raid/RAID_NORMAL.png rename to assets/en/raid/ESSEX_RAID_NORMAL.png diff --git a/assets/en/raid/SURUGA_OCR_REMAIN_EASY.png b/assets/en/raid/SURUGA_OCR_REMAIN_EASY.png new file mode 100644 index 000000000..aad6308d4 Binary files /dev/null and b/assets/en/raid/SURUGA_OCR_REMAIN_EASY.png differ diff --git a/assets/en/raid/SURUGA_OCR_REMAIN_HARD.png b/assets/en/raid/SURUGA_OCR_REMAIN_HARD.png new file mode 100644 index 000000000..1f61be141 Binary files /dev/null and b/assets/en/raid/SURUGA_OCR_REMAIN_HARD.png differ diff --git a/assets/en/raid/SURUGA_OCR_REMAIN_NORMAL.png b/assets/en/raid/SURUGA_OCR_REMAIN_NORMAL.png new file mode 100644 index 000000000..b49963203 Binary files /dev/null and b/assets/en/raid/SURUGA_OCR_REMAIN_NORMAL.png differ diff --git a/assets/en/raid/SURUGA_RAID_EASY.png b/assets/en/raid/SURUGA_RAID_EASY.png new file mode 100644 index 000000000..e4eb6f757 Binary files /dev/null and b/assets/en/raid/SURUGA_RAID_EASY.png differ diff --git a/assets/en/raid/SURUGA_RAID_HARD.png b/assets/en/raid/SURUGA_RAID_HARD.png new file mode 100644 index 000000000..d2fbb8cbf Binary files /dev/null and b/assets/en/raid/SURUGA_RAID_HARD.png differ diff --git a/assets/en/raid/SURUGA_RAID_NORMAL.png b/assets/en/raid/SURUGA_RAID_NORMAL.png new file mode 100644 index 000000000..ca3af210f Binary files /dev/null and b/assets/en/raid/SURUGA_RAID_NORMAL.png differ diff --git a/assets/en/ui/MEOWFFICER_INFO.png b/assets/en/ui/MEOWFFICER_INFO.png new file mode 100644 index 000000000..f73618c1f Binary files /dev/null and b/assets/en/ui/MEOWFFICER_INFO.png differ diff --git a/assets/jp/handler/AUTO_SEARCH_MENU_CONTINUE.png b/assets/jp/handler/AUTO_SEARCH_MENU_CONTINUE.png index 5381dc233..f98d159de 100644 Binary files a/assets/jp/handler/AUTO_SEARCH_MENU_CONTINUE.png and b/assets/jp/handler/AUTO_SEARCH_MENU_CONTINUE.png differ diff --git a/assets/jp/handler/AUTO_SEARCH_MENU_EXIT.png b/assets/jp/handler/AUTO_SEARCH_MENU_EXIT.png index e85d44e90..41c7e9f42 100644 Binary files a/assets/jp/handler/AUTO_SEARCH_MENU_EXIT.png and b/assets/jp/handler/AUTO_SEARCH_MENU_EXIT.png differ diff --git a/assets/jp/handler/BOOK_BOX_AUTO.png b/assets/jp/handler/BOOK_BOX_AUTO.png index 4ecc468fd..01d73f007 100644 Binary files a/assets/jp/handler/BOOK_BOX_AUTO.png and b/assets/jp/handler/BOOK_BOX_AUTO.png differ diff --git a/assets/jp/handler/BOOK_BOX_PREP.png b/assets/jp/handler/BOOK_BOX_PREP.png index 4620c7c0b..f4396b00a 100644 Binary files a/assets/jp/handler/BOOK_BOX_PREP.png and b/assets/jp/handler/BOOK_BOX_PREP.png differ diff --git a/assets/jp/handler/BOOK_CHECK_AUTO.png b/assets/jp/handler/BOOK_CHECK_AUTO.png index ab2de3e40..91de28b3d 100644 Binary files a/assets/jp/handler/BOOK_CHECK_AUTO.png and b/assets/jp/handler/BOOK_CHECK_AUTO.png differ diff --git a/assets/jp/handler/BOOK_CHECK_PREP.png b/assets/jp/handler/BOOK_CHECK_PREP.png index 89b8e1998..fae01cec4 100644 Binary files a/assets/jp/handler/BOOK_CHECK_PREP.png and b/assets/jp/handler/BOOK_CHECK_PREP.png differ diff --git a/assets/jp/os_handler/AUTO_SEARCH_REWARD.png b/assets/jp/os_handler/AUTO_SEARCH_REWARD.png index a3bca1ee9..31b39d1e1 100644 Binary files a/assets/jp/os_handler/AUTO_SEARCH_REWARD.png and b/assets/jp/os_handler/AUTO_SEARCH_REWARD.png differ diff --git a/assets/jp/raid/OCR_REMAIN_EASY.png b/assets/jp/raid/ESSEX_OCR_REMAIN_EASY.png similarity index 100% rename from assets/jp/raid/OCR_REMAIN_EASY.png rename to assets/jp/raid/ESSEX_OCR_REMAIN_EASY.png diff --git a/assets/jp/raid/OCR_REMAIN_HARD.png b/assets/jp/raid/ESSEX_OCR_REMAIN_HARD.png similarity index 100% rename from assets/jp/raid/OCR_REMAIN_HARD.png rename to assets/jp/raid/ESSEX_OCR_REMAIN_HARD.png diff --git a/assets/jp/raid/OCR_REMAIN_NORMAL.png b/assets/jp/raid/ESSEX_OCR_REMAIN_NORMAL.png similarity index 100% rename from assets/jp/raid/OCR_REMAIN_NORMAL.png rename to assets/jp/raid/ESSEX_OCR_REMAIN_NORMAL.png diff --git a/assets/jp/raid/RAID_EASY.png b/assets/jp/raid/ESSEX_RAID_EASY.png similarity index 100% rename from assets/jp/raid/RAID_EASY.png rename to assets/jp/raid/ESSEX_RAID_EASY.png diff --git a/assets/jp/raid/RAID_HARD.png b/assets/jp/raid/ESSEX_RAID_HARD.png similarity index 100% rename from assets/jp/raid/RAID_HARD.png rename to assets/jp/raid/ESSEX_RAID_HARD.png diff --git a/assets/jp/raid/RAID_NORMAL.png b/assets/jp/raid/ESSEX_RAID_NORMAL.png similarity index 100% rename from assets/jp/raid/RAID_NORMAL.png rename to assets/jp/raid/ESSEX_RAID_NORMAL.png diff --git a/assets/jp/raid/SURUGA_OCR_REMAIN_EASY.png b/assets/jp/raid/SURUGA_OCR_REMAIN_EASY.png new file mode 100644 index 000000000..e0554ba1d Binary files /dev/null and b/assets/jp/raid/SURUGA_OCR_REMAIN_EASY.png differ diff --git a/assets/jp/raid/SURUGA_OCR_REMAIN_HARD.png b/assets/jp/raid/SURUGA_OCR_REMAIN_HARD.png new file mode 100644 index 000000000..9cdfc2c11 Binary files /dev/null and b/assets/jp/raid/SURUGA_OCR_REMAIN_HARD.png differ diff --git a/assets/jp/raid/SURUGA_OCR_REMAIN_NORMAL.png b/assets/jp/raid/SURUGA_OCR_REMAIN_NORMAL.png new file mode 100644 index 000000000..bbed26420 Binary files /dev/null and b/assets/jp/raid/SURUGA_OCR_REMAIN_NORMAL.png differ diff --git a/assets/jp/raid/SURUGA_RAID_EASY.png b/assets/jp/raid/SURUGA_RAID_EASY.png new file mode 100644 index 000000000..197a27d44 Binary files /dev/null and b/assets/jp/raid/SURUGA_RAID_EASY.png differ diff --git a/assets/jp/raid/SURUGA_RAID_HARD.png b/assets/jp/raid/SURUGA_RAID_HARD.png new file mode 100644 index 000000000..0ba4cfd9d Binary files /dev/null and b/assets/jp/raid/SURUGA_RAID_HARD.png differ diff --git a/assets/jp/raid/SURUGA_RAID_NORMAL.png b/assets/jp/raid/SURUGA_RAID_NORMAL.png new file mode 100644 index 000000000..c32631c22 Binary files /dev/null and b/assets/jp/raid/SURUGA_RAID_NORMAL.png differ diff --git a/assets/jp/ui/MEOWFFICER_INFO.png b/assets/jp/ui/MEOWFFICER_INFO.png new file mode 100644 index 000000000..ec40ebfb3 Binary files /dev/null and b/assets/jp/ui/MEOWFFICER_INFO.png differ diff --git a/assets/tw/handler/AUTO_SEARCH_MENU_CONTINUE.png b/assets/tw/handler/AUTO_SEARCH_MENU_CONTINUE.png index f371ebd0b..866764298 100644 Binary files a/assets/tw/handler/AUTO_SEARCH_MENU_CONTINUE.png and b/assets/tw/handler/AUTO_SEARCH_MENU_CONTINUE.png differ diff --git a/assets/tw/handler/AUTO_SEARCH_MENU_EXIT.png b/assets/tw/handler/AUTO_SEARCH_MENU_EXIT.png index 7bbce16f4..adfb70e0d 100644 Binary files a/assets/tw/handler/AUTO_SEARCH_MENU_EXIT.png and b/assets/tw/handler/AUTO_SEARCH_MENU_EXIT.png differ diff --git a/assets/tw/raid/OCR_REMAIN_EASY.png b/assets/tw/raid/ESSEX_OCR_REMAIN_EASY.png similarity index 100% rename from assets/tw/raid/OCR_REMAIN_EASY.png rename to assets/tw/raid/ESSEX_OCR_REMAIN_EASY.png diff --git a/assets/tw/raid/OCR_REMAIN_HARD.png b/assets/tw/raid/ESSEX_OCR_REMAIN_HARD.png similarity index 100% rename from assets/tw/raid/OCR_REMAIN_HARD.png rename to assets/tw/raid/ESSEX_OCR_REMAIN_HARD.png diff --git a/assets/tw/raid/OCR_REMAIN_NORMAL.png b/assets/tw/raid/ESSEX_OCR_REMAIN_NORMAL.png similarity index 100% rename from assets/tw/raid/OCR_REMAIN_NORMAL.png rename to assets/tw/raid/ESSEX_OCR_REMAIN_NORMAL.png diff --git a/assets/tw/raid/RAID_EASY.png b/assets/tw/raid/ESSEX_RAID_EASY.png similarity index 100% rename from assets/tw/raid/RAID_EASY.png rename to assets/tw/raid/ESSEX_RAID_EASY.png diff --git a/assets/tw/raid/RAID_HARD.png b/assets/tw/raid/ESSEX_RAID_HARD.png similarity index 100% rename from assets/tw/raid/RAID_HARD.png rename to assets/tw/raid/ESSEX_RAID_HARD.png diff --git a/assets/tw/raid/RAID_NORMAL.png b/assets/tw/raid/ESSEX_RAID_NORMAL.png similarity index 100% rename from assets/tw/raid/RAID_NORMAL.png rename to assets/tw/raid/ESSEX_RAID_NORMAL.png diff --git a/assets/tw/reward/MEOWFFICER_BUY.png b/assets/tw/reward/MEOWFFICER_BUY.png index b7f20af30..893a36b76 100644 Binary files a/assets/tw/reward/MEOWFFICER_BUY.png and b/assets/tw/reward/MEOWFFICER_BUY.png differ diff --git a/assets/tw/reward/MEOWFFICER_BUY_ENTER.png b/assets/tw/reward/MEOWFFICER_BUY_ENTER.png index c5972eb4b..e2e69ca91 100644 Binary files a/assets/tw/reward/MEOWFFICER_BUY_ENTER.png and b/assets/tw/reward/MEOWFFICER_BUY_ENTER.png differ diff --git a/assets/tw/reward/MEOWFFICER_BUY_SKIP.png b/assets/tw/reward/MEOWFFICER_BUY_SKIP.png index f503f9986..e3134507d 100644 Binary files a/assets/tw/reward/MEOWFFICER_BUY_SKIP.png and b/assets/tw/reward/MEOWFFICER_BUY_SKIP.png differ diff --git a/assets/tw/reward/MEOWFFICER_CONFIRM.png b/assets/tw/reward/MEOWFFICER_CONFIRM.png index 5bc851203..a5ab402cf 100644 Binary files a/assets/tw/reward/MEOWFFICER_CONFIRM.png and b/assets/tw/reward/MEOWFFICER_CONFIRM.png differ diff --git a/assets/tw/reward/MEOWFFICER_TRAIN_COMPLETE.png b/assets/tw/reward/MEOWFFICER_TRAIN_COMPLETE.png index b80a5e3fb..866210b68 100644 Binary files a/assets/tw/reward/MEOWFFICER_TRAIN_COMPLETE.png and b/assets/tw/reward/MEOWFFICER_TRAIN_COMPLETE.png differ diff --git a/assets/tw/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png b/assets/tw/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png index 8bb0a9d3e..adee35fc0 100644 Binary files a/assets/tw/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png and b/assets/tw/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png differ diff --git a/assets/tw/reward/MEOWFFICER_TRAIN_FINISH_ALL.png b/assets/tw/reward/MEOWFFICER_TRAIN_FINISH_ALL.png index 8465df3e1..b76ac5ca3 100644 Binary files a/assets/tw/reward/MEOWFFICER_TRAIN_FINISH_ALL.png and b/assets/tw/reward/MEOWFFICER_TRAIN_FINISH_ALL.png differ diff --git a/assets/tw/reward/MEOWFFICER_TRAIN_START.png b/assets/tw/reward/MEOWFFICER_TRAIN_START.png index 7ce957bd6..d715c156b 100644 Binary files a/assets/tw/reward/MEOWFFICER_TRAIN_START.png and b/assets/tw/reward/MEOWFFICER_TRAIN_START.png differ diff --git a/assets/tw/reward/OCR_MEOWFFICER.png b/assets/tw/reward/OCR_MEOWFFICER.png index aa9858080..f448c2ee4 100644 Binary files a/assets/tw/reward/OCR_MEOWFFICER.png and b/assets/tw/reward/OCR_MEOWFFICER.png differ diff --git a/assets/tw/reward/OCR_MEOWFFICER_CAPACITY.png b/assets/tw/reward/OCR_MEOWFFICER_CAPACITY.png index 62d2b5dab..3cc5670bb 100644 Binary files a/assets/tw/reward/OCR_MEOWFFICER_CAPACITY.png and b/assets/tw/reward/OCR_MEOWFFICER_CAPACITY.png differ diff --git a/assets/tw/reward/OCR_MEOWFFICER_CHOOSE.png b/assets/tw/reward/OCR_MEOWFFICER_CHOOSE.png index 0357b6db0..e7e4b27d7 100644 Binary files a/assets/tw/reward/OCR_MEOWFFICER_CHOOSE.png and b/assets/tw/reward/OCR_MEOWFFICER_CHOOSE.png differ diff --git a/assets/tw/reward/OCR_MEOWFFICER_COINS.png b/assets/tw/reward/OCR_MEOWFFICER_COINS.png index ebe807904..5304e3200 100644 Binary files a/assets/tw/reward/OCR_MEOWFFICER_COINS.png and b/assets/tw/reward/OCR_MEOWFFICER_COINS.png differ diff --git a/assets/tw/ui/MEOWFFICER_CHECK.png b/assets/tw/ui/MEOWFFICER_CHECK.png index 733722292..2ce63f864 100644 Binary files a/assets/tw/ui/MEOWFFICER_CHECK.png and b/assets/tw/ui/MEOWFFICER_CHECK.png differ diff --git a/assets/tw/ui/MEOWFFICER_INFO.png b/assets/tw/ui/MEOWFFICER_INFO.png new file mode 100644 index 000000000..2c13c56b8 Binary files /dev/null and b/assets/tw/ui/MEOWFFICER_INFO.png differ diff --git a/assets/tw/ui/TACTICAL_CHECK.png b/assets/tw/ui/TACTICAL_CHECK.png index 53d3e2663..36c85e838 100644 Binary files a/assets/tw/ui/TACTICAL_CHECK.png and b/assets/tw/ui/TACTICAL_CHECK.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index 22cacaa03..3dd81744e 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -1,61 +1,63 @@ -# Event List - -To add a new event, add a new row in here, and run `python -m dev_tools.event_extract`. Some date in directory not equal to Aired date, because they use the map files in old events. Use `Ctrl+F` to search what you want. - -**Aired Date** The date that the event aired for the first time. - -**Directory** The directory where contains map files of an event are stored. - -**Event Name** Official name in English. If an event haven't aired in EN, use the name in CN. - -**CN, EN, JP, TW** Event names in GUI. If an event is not aired on some servers, use `-`. - -| Aired Date | Directory | Event Name | CN | EN | JP | TW | -| ---------- | ------------------------ | ------------------------------ | ---------------------- | -------------------------------- | ------------------------------------ | ------------------ | -| 20170607 | war archives 20181020 en | Strive, Wish, and Strategize | 努力、希望和计划 | Strive, Wish, and Strategize | 努力、希望と計画 | 努力、希望和計劃 | -| 20170802 | war archives 20191031 en | Divergent Chessboard | 异色格 | Divergent Chessboard | 鏡写されし異色 | 異色格 | -| 20170928 | war archives 20190321 en | Visitors Dyed in Red | 红染的参访者 | Visitors Dyed in Red | 紅染の来訪者 | 紅染的參訪者 | -| 20171026 | war archives 20190620 en | Glorious Battle | 光荣的一战 | Glorious Battle | 栄光なる最終戦 | 光榮的一戰 | -| 20171228 | war archives 20181026 en | Fallen Wings | 坠落之翼 | Fallen Wings | 闇に堕ちた青き翼 | 墜落之翼 | -| 20180119 | war archives 20191010 en | Encircling Graf Spee | 围剿斯佩伯爵 | Encircling Graf Spee | アドミラル・グラーフ・シュペー追撃戦 | 圍剿斯佩伯爵 | -| 20180226 | war archives 20190221 en | Winter\'s Crown | 凛冬王冠 | Winter\'s Crown | 凛冽なりし冬の王冠 | 凜冬王冠 | -| 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | -| 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | -| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - | -| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - | -| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | -| 20200423 | event 20200423 cn | Crimson Echoes | 复刻苍红的回响 | Crimson Echoes Rerun | 縹映る深緋の残響(復刻) | - | -| 20200507 | event 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | - | -| 20200521 | event 20200521 cn | Skybound Oratorio | 穹顶下的圣咏曲 | - | 神穹を衝く聖歌 | - | -| 20200521 | event 20200521 en | Iris of Light and Dark | - | Iris of Light and Dark Rerun | - | - | -| 20200603 | event 20200603 cn | Stars of the Shimmering Fjord | 峡湾间的反击 | - | 峡湾間の反撃 | - | -| 20200603 | event 20200603 en | Prelude under the Moon | - | Prelude under the Moon Rerun | - | - | -| 20200611 | event 20200611 en | Skybound Oratorio | - | Skybound Oratorio | - | - | -| 20200624 | raid 20200624 | Air Raid Drills with Essex | 复刻特别演习埃塞克斯级 | Air Raid Drills with Essex Rerun | 特別演習超空強襲波(復刻) | 特別演習埃塞克斯級 | -| 20200716 | event 20200716 en | Ink Stained Steel Sakura | - | Ink Stained Steel Sakura Rerun | - | - | -| 20200723 | event 20200723 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | - | -| 20200806 | event 20200806 cn | The Enigma and the Shark | 复刻最重要的宝物 | - | 鉄血鮫とエニグマ(復刻) | - | -| 20200820 | event 20200820 cn | Scherzo of Iron and Blood | 复刻铁血音符誓言 | Scherzo of Iron and Blood Rerun | 黒鉄の楽章 誓いの海(復刻) | - | -| 20200903 | event 20200903 en | Stars of the Shimmering Fjord | - | Stars of the Shimmering Fjord | - | - | -| 20200917 | event 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | - | -| 20201002 | event 20201002 en | Counterattack Within the Fjord | - | Counterattack Within the Fjord | - | - | -| 20201012 | event 20201012 cn | Sundered Blue | 划破海空之翼 | - | 奔る彩帆の青 | - | -| 20201029 | event 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | -| 20201105 | event 20200312 cn | The Solomon Ranger | - | - | - | 斯圖爾特的硝煙 | -| 20201112 | event 20200903 en | Stars of the Shimmering Fjord | 复刻峡湾间的星辰 | - | 輝ける峡湾の星(復刻) | - | -| 20201112 | event 20201012 cn | Sundered Blue | - | Sundered Blue | - | - | -| 20201126 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | - | -| 20201210 | event 20200806 cn | The Enigma and the Shark | - | The Enigma and the Shark Rerun | - | - | -| 20201229 | event 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | -| 20210121 | event 20210121 cn | Empyreal Tragicomedy | 复刻神圣的悲喜剧 | Empyreal Tragicomedy Rerun | 悲歎せし焔海の詩(復刻) | - | -| 20210225 | event 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | - | -| 20210225 | event 20210225 tw | Northern Overture | - | - | - | 北境序曲 | -| 20210325 | event 20210325 cn | Ashen Simulacrum | 复刻箱庭疗法 | Ashen Simulacrum Rerun | 開かれし紺碧の砂箱(復刻) | - | -| 20210415 | event 20210415 tw | Encircling Graf Spee | - | - | - | 復刻圍剿施佩伯爵 | -| 20210422 | event 20210422 cn | Daedalian Hymn | 复兴的赞美诗 | Daedalian Hymn | 讃える復興の迷路 | - | -| 20210429 | event 20210429 tw | Ink Stained Steel Sakura | - | - | - | 復刻墨染的鋼鐵之花 | -| 20210527 | event 20210527 tw | Microlayer Medley | - | - | - | 微層混合 | -| 20210527 | event 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | - | -| 20210610 | event 20210610 tw | The Way Home in the Night | - | - | - | 夜幕下的歸途 | -| 20210624 | event 20210624 tw | Skybound Oratorio | - | - | - | 穹頂下的聖詠曲 | -| 20210624 | event 20210624 cn | Swirling Cherry Blossoms | 复刻浮樱影华 | Swirling Cherry Blossoms Rerun | 翳りし満ちる影の華(復刻) | - | \ No newline at end of file +# Event List + +To add a new event, add a new row in here, and run `python -m dev_tools.event_extract`. Some date in directory not equal to Aired date, because they use the map files in old events. Use `Ctrl+F` to search what you want. + +**Aired Date** The date that the event aired for the first time. + +**Directory** The directory where contains map files of an event are stored. + +**Event Name** Official name in English. If an event haven't aired in EN, use the name in CN. + +**CN, EN, JP, TW** Event names in GUI. If an event is not aired on some servers, use `-`. + +| Aired Date | Directory | Event Name | CN | EN | JP | TW | +| ---------- | ------------------------ | ------------------------------ | ---------------------- | -------------------------------- | ------------------------------------ | ------------------ | +| 20170607 | war archives 20181020 en | Strive, Wish, and Strategize | 努力、希望和计划 | Strive, Wish, and Strategize | 努力、希望と計画 | 努力、希望和計劃 | +| 20170802 | war archives 20191031 en | Divergent Chessboard | 异色格 | Divergent Chessboard | 鏡写されし異色 | 異色格 | +| 20170928 | war archives 20190321 en | Visitors Dyed in Red | 红染的参访者 | Visitors Dyed in Red | 紅染の来訪者 | 紅染的參訪者 | +| 20171026 | war archives 20190620 en | Glorious Battle | 光荣的一战 | Glorious Battle | 栄光なる最終戦 | 光榮的一戰 | +| 20171228 | war archives 20181026 en | Fallen Wings | 坠落之翼 | Fallen Wings | 闇に堕ちた青き翼 | 墜落之翼 | +| 20180119 | war archives 20191010 en | Encircling Graf Spee | 围剿斯佩伯爵 | Encircling Graf Spee | アドミラル・グラーフ・シュペー追撃戦 | 圍剿斯佩伯爵 | +| 20180226 | war archives 20190221 en | Winter\'s Crown | 凛冬王冠 | Winter\'s Crown | 凛冽なりし冬の王冠 | 凜冬王冠 | +| 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | +| 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | +| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - | +| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - | +| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | +| 20200423 | event 20200423 cn | Crimson Echoes | 复刻苍红的回响 | Crimson Echoes Rerun | 縹映る深緋の残響(復刻) | - | +| 20200507 | event 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | - | +| 20200521 | event 20200521 cn | Skybound Oratorio | 穹顶下的圣咏曲 | - | 神穹を衝く聖歌 | - | +| 20200521 | event 20200521 en | Iris of Light and Dark | - | Iris of Light and Dark Rerun | - | - | +| 20200603 | event 20200603 cn | Stars of the Shimmering Fjord | 峡湾间的反击 | - | 峡湾間の反撃 | - | +| 20200603 | event 20200603 en | Prelude under the Moon | - | Prelude under the Moon Rerun | - | - | +| 20200611 | event 20200611 en | Skybound Oratorio | - | Skybound Oratorio | - | - | +| 20200624 | raid 20200624 | Air Raid Drills with Essex | 复刻特别演习埃塞克斯级 | Air Raid Drills with Essex Rerun | 特別演習超空強襲波(復刻) | 特別演習埃塞克斯級 | +| 20200716 | event 20200716 en | Ink Stained Steel Sakura | - | Ink Stained Steel Sakura Rerun | - | - | +| 20200723 | event 20200723 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | - | +| 20200806 | event 20200806 cn | The Enigma and the Shark | 复刻最重要的宝物 | - | 鉄血鮫とエニグマ(復刻) | - | +| 20200820 | event 20200820 cn | Scherzo of Iron and Blood | 复刻铁血音符誓言 | Scherzo of Iron and Blood Rerun | 黒鉄の楽章 誓いの海(復刻) | - | +| 20200903 | event 20200903 en | Stars of the Shimmering Fjord | - | Stars of the Shimmering Fjord | - | - | +| 20200917 | event 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | - | +| 20201002 | event 20201002 en | Counterattack Within the Fjord | - | Counterattack Within the Fjord | - | - | +| 20201012 | event 20201012 cn | Sundered Blue | 划破海空之翼 | - | 奔る彩帆の青 | - | +| 20201029 | event 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | +| 20201105 | event 20200312 cn | The Solomon Ranger | - | - | - | 斯圖爾特的硝煙 | +| 20201112 | event 20200903 en | Stars of the Shimmering Fjord | 复刻峡湾间的星辰 | - | 輝ける峡湾の星(復刻) | - | +| 20201112 | event 20201012 cn | Sundered Blue | - | Sundered Blue | - | - | +| 20201126 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | - | +| 20201210 | event 20200806 cn | The Enigma and the Shark | - | The Enigma and the Shark Rerun | - | - | +| 20201229 | event 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | +| 20210121 | event 20210121 cn | Empyreal Tragicomedy | 复刻神圣的悲喜剧 | Empyreal Tragicomedy Rerun | 悲歎せし焔海の詩(復刻) | - | +| 20210225 | event 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | - | +| 20210225 | event 20210225 tw | Northern Overture | - | - | - | 北境序曲 | +| 20210325 | event 20210325 cn | Ashen Simulacrum | 复刻箱庭疗法 | Ashen Simulacrum Rerun | 開かれし紺碧の砂箱(復刻) | - | +| 20210415 | event 20210415 tw | Encircling Graf Spee | - | - | - | 復刻圍剿施佩伯爵 | +| 20210422 | event 20210422 cn | Daedalian Hymn | 复兴的赞美诗 | Daedalian Hymn | 讃える復興の迷路 | - | +| 20210429 | event 20210429 tw | Ink Stained Steel Sakura | - | - | - | 復刻墨染的鋼鐵之花 | +| 20210527 | event 20210527 tw | Microlayer Medley | - | - | - | 微層混合 | +| 20210527 | event 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | - | +| 20210610 | event 20210610 tw | The Way Home in the Night | - | - | - | 夜幕下的歸途 | +| 20210624 | event 20210624 tw | Skybound Oratorio | - | - | - | 穹頂下的聖詠曲 | +| 20210624 | event 20210624 cn | Swirling Cherry Blossoms | 复刻浮樱影华 | Swirling Cherry Blossoms Rerun | 翳りし満ちる影の華(復刻) | - | +| 20210708 | raid 20210708 | Cross Wave | 复刻穿越彼方的水线 | Cross Wave rerun | 交錯する新たな波 (復刻) | - | +| 20210708 | event 20200903 en | Stars of the Shimmering Fjord | - | - | - | 峽灣間的星辰 | diff --git a/campaign/campaign_main/campaign_2_3.py b/campaign/campaign_main/campaign_2_3.py index 69c90455e..0f8d005c8 100644 --- a/campaign/campaign_main/campaign_2_3.py +++ b/campaign/campaign_main/campaign_2_3.py @@ -1,54 +1,54 @@ -from module.campaign.campaign_base import CampaignBase -from module.map.map_base import CampaignMap -from module.map.map_grids import SelectedGrids, RoadGrids -from module.logger import logger -from campaign.campaign_main.campaign_2_1 import Config - - -MAP = CampaignMap() -MAP.shape = 'F5' -MAP.camera_data = ['D3'] -MAP.map_data = ''' - SP -- ME -- MB ++ - -- ME -- ME ++ ++ - -- -- ME -- -- ++ - SP -- -- ME ME -- - ++ ++ ++ -- ME MM -''' -MAP.weight_data = ''' - 10 10 10 10 10 10 - 50 50 10 10 10 10 - 20 20 20 20 20 20 - 20 20 20 20 30 30 - 30 30 30 30 30 30 -''' -MAP.spawn_data = [ - {'battle': 0, 'enemy': 2, 'mystery': 1}, - {'battle': 1, 'enemy': 2}, - {'battle': 2, 'enemy': 1}, - {'battle': 3, 'enemy': 2, 'boss':1}, -] - -A1, B1, C1, D1, E1, F1, \ -A2, B2, C2, D2, E2, F2, \ -A3, B3, C3, D3, E3, F3, \ -A4, B4, C4, D4, E4, F4, \ -A5, B5, C5, D5, E5, F5, \ - = MAP.flatten() - - -class Campaign(CampaignBase): - MAP = MAP - - def battle_0(self): - self.clear_all_mystery() - - return self.battle_default() - - def battle_3(self): - self.clear_all_mystery() - - if not self.check_accessibility(E1, fleet='boss'): - return self.battle_default() - - return self.fleet_boss.clear_boss() +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from campaign.campaign_main.campaign_2_1 import Config + + +MAP = CampaignMap() +MAP.shape = 'F5' +MAP.camera_data = ['D3'] +MAP.map_data = ''' + SP -- ME -- MB ++ + -- ME -- ME ++ ++ + -- -- ME -- -- ++ + SP -- -- ME ME -- + ++ ++ ++ -- ME MM +''' +MAP.weight_data = ''' + 10 10 11 10 10 10 + 50 50 10 12 10 10 + 20 20 20 20 20 20 + 20 20 20 20 30 30 + 30 30 30 30 30 30 +''' +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'mystery': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 2, 'boss':1}, +] + +A1, B1, C1, D1, E1, F1, \ +A2, B2, C2, D2, E2, F2, \ +A3, B3, C3, D3, E3, F3, \ +A4, B4, C4, D4, E4, F4, \ +A5, B5, C5, D5, E5, F5, \ + = MAP.flatten() + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + self.clear_all_mystery() + + return self.battle_default() + + def battle_3(self): + self.clear_all_mystery() + + if not self.check_accessibility(E1, fleet='boss'): + return self.battle_default() + + return self.fleet_boss.clear_boss() diff --git a/campaign/campaign_main/campaign_2_4.py b/campaign/campaign_main/campaign_2_4.py index 7f9d3daa1..90ebe659c 100644 --- a/campaign/campaign_main/campaign_2_4.py +++ b/campaign/campaign_main/campaign_2_4.py @@ -15,7 +15,7 @@ MAP.map_data = ''' -- ME -- SP -- MA ++ ''' MAP.weight_data = ''' - 20 20 20 20 10 10 10 + 20 20 20 20 12 11 10 20 20 20 20 10 10 10 20 20 20 20 30 20 20 20 20 20 20 20 20 20 diff --git a/config/template.ini b/config/template.ini index c18221e0e..d0240222d 100644 --- a/config/template.ini +++ b/config/template.ini @@ -54,6 +54,8 @@ retire_n = yes retire_r = no enable_drop_screenshot = no drop_screenshot_folder = ./screenshots +enable_azurstat = no +azurstat_id = command = setting [Reward] @@ -216,6 +218,11 @@ non_s3_enemy_withdraw_tolerance = 0 ammo_pick_up_124 = 3 command = c124_leveling +[Gems_farming] +gems_stage = 2-4 +gems_fleet_1 = 3 +gems_fleet_2 = 5 + [Os_semi_auto] enable_os_semi_story_skip = yes diff --git a/dev_tools/research_extractor.py b/dev_tools/research_extractor.py index 636556aee..0ac0781a6 100644 --- a/dev_tools/research_extractor.py +++ b/dev_tools/research_extractor.py @@ -59,13 +59,51 @@ class Project: return str(data) +# Key: chinese, value: english +DIC_TRANSLATION = { + '蓝图:安克雷奇': 'Blueprint - Anchorage', + '蓝图:{namecode:204}': 'Blueprint - Hakuryuu', + '蓝图:埃吉尔': 'Blueprint - Ägir', + '蓝图:奥古斯特·冯·帕塞瓦尔': 'Blueprint - August von Parseval', + '蓝图:马可波罗': 'Blueprint - Marco Polo', +} + + +def set_translation(cn, en): + if len(cn) and len(en): + if cn not in DIC_TRANSLATION: + DIC_TRANSLATION[cn] = en + + class TechnologyTemplate: def __init__(self, folder): + self.projects = self.load_projects(os.path.join(folder, 'zh-CN', 'sharecfg')) + en_projects = self.load_projects(os.path.join(folder, 'en-US', 'sharecfg')) + + for key, project in self.projects.items(): + if key not in en_projects: + continue + en_project = en_projects[key] + set_translation(cn=project.task.name, en=en_project.task.name) + for item, en_item in zip(project.input, en_project.input): + set_translation(cn=item.name, en=en_item.name) + for item, en_item in zip(project.output, en_project.output): + set_translation(cn=item.name, en=en_item.name) + + for project in self.projects.values(): + project.task.name = DIC_TRANSLATION.get(project.task.name, project.task.name) + for item in project.input: + # Change Ägir to Agir + item.name = DIC_TRANSLATION.get(item.name, item.name).replace('Ä', 'A') + for item in project.output: + item.name = DIC_TRANSLATION.get(item.name, item.name).replace('Ä', 'A') + + def load_projects(self, folder): tech = load_lua(folder, 'technology_data_template.lua', prefix=44) item = load_lua(folder, 'item_data_statistics.lua', prefix=40) task = load_lua(folder, 'task_data_template.lua', prefix=38) - self.projects = [] + projects = {} for key, value in tech.items(): if key == 'all': continue @@ -77,7 +115,11 @@ class TechnologyTemplate: for i in project.output: i.name = item[i.id]['name'].strip() - self.projects.append(project) + key = (project.series, project.name) + if key not in projects: + projects[key] = project + + return projects def encode(self): lines = [] @@ -85,7 +127,7 @@ class TechnologyTemplate: lines.append("# Don't modified it manually.") lines.append('') lines.append('LIST_RESEARCH_PROJECT = [') - for project in self.projects: + for project in self.projects.values(): lines.append(' ' + project.encode() + ',') lines.append(']') @@ -103,7 +145,7 @@ This an auto-tool to extract research projects used in Alas. Git clone https://github.com/Dimbreath/AzurLaneData, to get the decrypted scripts. Arguments: - FILE: Path to sharecfg, '//sharecfg' + FILE: Path to AzurLaneData, '/AzurLaneData' SAVE: File to save, 'module/research/project_data.py' """ FOLDER = '' diff --git a/module/base/base.py b/module/base/base.py index 51f0b12bd..dc65bc6cd 100644 --- a/module/base/base.py +++ b/module/base/base.py @@ -5,11 +5,13 @@ from module.base.timer import Timer from module.base.utils import * from module.config.config import AzurLaneConfig from module.device.device import Device +from module.statistics.azurstats import AzurStats class ModuleBase: config: AzurLaneConfig device: Device + stat: AzurStats def __init__(self, config, device=None): """ @@ -25,6 +27,7 @@ class ModuleBase: self.device = device else: self.device = Device(config=self.config) + self.stat = AzurStats(config=self.config) self.interval_timer = {} diff --git a/module/config/argparser.py b/module/config/argparser.py index 2ecc8cc0a..496da5aa4 100644 --- a/module/config/argparser.py +++ b/module/config/argparser.py @@ -221,6 +221,7 @@ def main(ini_name=''): # 掉落记录 drop = setting_parser.add_argument_group('掉落记录', '保存掉落物品的截图, 启用后会放缓结算时的点击速度', gooey_options={'label_color': '#931D03'}) drop.add_argument('--启用掉落记录', default=default('--启用掉落记录'), choices=['是', '否'], gooey_options={'label_color': '#4B5F83'}) + drop.add_argument('--启用AzurStat', default=default('--启用AzurStat'), choices=['是', '否'], help='将掉落截图上传至 azurstats.lyoko.io, 目前只支持科研统计, 需要启用掉落记录', gooey_options={'label_color': '#4B5F83'}) drop.add_argument('--掉落保存目录', default=default('--掉落保存目录'), gooey_options={'label_color': '#4B5F83'}) # clear = setting_parser.add_argument_group('开荒模式', '未开荒地图会在完成后停止, 已开荒的地图会忽略选项, 无脑开就完事了') diff --git a/module/config/argparser_en.py b/module/config/argparser_en.py index d2fbd7280..85286c469 100644 --- a/module/config/argparser_en.py +++ b/module/config/argparser_en.py @@ -228,6 +228,7 @@ def main(ini_name=''): # 掉落记录 drop = setting_parser.add_argument_group('Drop record', 'Save screenshots of dropped items, which will slow down the click speed when settlement is enabled', gooey_options={'label_color': '#931D03'}) drop.add_argument('--enable_drop_screenshot', default=default('--enable_drop_screenshot'), choices=['yes', 'no'], gooey_options={'label_color': '#4B5F83'}) + drop.add_argument('--enable_azurstat', default=default('--enable_azurstat'), choices=['yes', 'no'], help='Upload drop screenshots to azurstats.lyoko.io, only supports research now, requires enable_drop_screenshot', gooey_options={'label_color': '#4B5F83'}) drop.add_argument('--drop_screenshot_folder', default=default('--drop_screenshot_folder'), gooey_options={'label_color': '#4B5F83'}) # clear = setting_parser.add_argument_group('Wasteland mode', 'Unopened maps will stop after completion. Opened maps will ignore options, and its done if you do not open up') diff --git a/module/config/argparser_jp.py b/module/config/argparser_jp.py index 14a4bfe18..6df9745f2 100644 --- a/module/config/argparser_jp.py +++ b/module/config/argparser_jp.py @@ -228,6 +228,7 @@ def main(ini_name=''): # 掉落记录 drop = setting_parser.add_argument_group('Drop record', 'Save screenshots of dropped items, which will slow down the click speed when settlement is enabled', gooey_options={'label_color': '#931D03'}) drop.add_argument('--enable_drop_screenshot', default=default('--enable_drop_screenshot'), choices=['yes', 'no'], gooey_options={'label_color': '#4B5F83'}) + drop.add_argument('--enable_azurstat', default=default('--enable_azurstat'), choices=['yes', 'no'], help='Upload drop screenshots to azurstats.lyoko.io, only supports research now, , requires enable_drop_screenshot', gooey_options={'label_color': '#4B5F83'}) drop.add_argument('--drop_screenshot_folder', default=default('--drop_screenshot_folder'), gooey_options={'label_color': '#4B5F83'}) # clear = setting_parser.add_argument_group('Wasteland mode', 'Unopened maps will stop after completion. Opened maps will ignore options, and its done if you do not open up') diff --git a/module/config/argparser_tw.py b/module/config/argparser_tw.py index d2c2c576d..e1967c878 100644 --- a/module/config/argparser_tw.py +++ b/module/config/argparser_tw.py @@ -221,6 +221,7 @@ def main(ini_name=''): # 掉落記錄 drop = setting_parser.add_argument_group('掉落記錄', '保存掉落物品的截圖, 啟用後會放緩結算時的點擊速度', gooey_options={'label_color': '#931D03'}) drop.add_argument('--啟用掉落記錄', default=default('--啟用掉落記錄'), choices=['是', '否'], gooey_options={'label_color': '#4B5F83'}) + drop.add_argument('--啟用AzurStat', default=default('--啟用AzurStat'), choices=['是', '否'], help='將掉落截圖上傳至 azurstats.lyoko.io, 目前只支持科研統計, 需要啟用掉落記錄', gooey_options={'label_color': '#4B5F83'}) drop.add_argument('--掉落保存目錄', default=default('--掉落保存目錄'), gooey_options={'label_color': '#4B5F83'}) # clear = setting_parser.add_argument_group('開荒模式', '未開荒地圖會在完成後停止, 已開荒的地圖會忽略此選項, 無腦開就結束了') diff --git a/module/config/config.py b/module/config/config.py index f72b51632..a747bb6ad 100644 --- a/module/config/config.py +++ b/module/config/config.py @@ -129,7 +129,7 @@ class AzurLaneConfig: """ gems_farming """ - GEMS_STAGE = 'A3' + GEMS_STAGE = '2-4' GEMS_FLEET_1 = 3 GEMS_FLEET_2 = 5 @@ -547,6 +547,12 @@ class AzurLaneConfig: # ActionPoint, PurpleCoins, RepairPack, TuringSample OS_ASKSHI_SHOP_PRIORITY = 'ActionPoint > PurpleCoins' + """ + module.statistics + """ + ENABLE_AZURSTAT = False + AZURSTAT_ID = '' + def create_folder(self): for folder in [self.ASSETS_FOLDER, self.PERSPECTIVE_ERROR_LOG_FOLDER, self.ERROR_LOG_FOLDER]: if folder and not os.path.exists(folder): @@ -667,6 +673,8 @@ class AzurLaneConfig: self.LOW_HP_WITHDRAW_THRESHOLD = float(option['low_hp_withdraw_threshold']) self.ENABLE_SAVE_GET_ITEMS = to_bool(option['enable_drop_screenshot']) self.SCREEN_SHOT_SAVE_FOLDER_BASE = option['drop_screenshot_folder'] + self.ENABLE_AZURSTAT = to_bool(option['enable_azurstat']) + self.AZURSTAT_ID = option['azurstat_id'] # Retirement self.ENABLE_RETIREMENT = to_bool(option['enable_retirement']) self.RETIREMENT_METHOD = option['retire_method'] @@ -814,6 +822,12 @@ class AzurLaneConfig: self.C124_NON_S3_WITHDRAW_TOLERANCE = int(option['non_s3_enemy_withdraw_tolerance']) self.C124_AMMO_PICK_UP = int(option['ammo_pick_up_124']) + # Gems_farming + option = config['Gems_farming'] + self.GEMS_STAGE = option['gems_stage'] + self.GEMS_FLEET_1 = int(option['gems_fleet_1']) + self.GEMS_FLEET_2 = int(option['gems_fleet_2']) + # OS semi auto option = config['Os_semi_auto'] self.ENABLE_OS_SEMI_STORY_SKIP = to_bool(option['enable_os_semi_story_skip']) diff --git a/module/config/dictionary.py b/module/config/dictionary.py index d77041a14..450a157aa 100644 --- a/module/config/dictionary.py +++ b/module/config/dictionary.py @@ -104,6 +104,7 @@ dic_true_eng_to_eng = { # 'retire_sr': 'retire_sr', # 'retire_ssr': 'retire_ssr', 'enable_drop_screenshot': 'enable_drop_screenshot', + 'enable_azurstat': 'enable_azurstat', 'drop_screenshot_folder': 'drop_screenshot_folder', # 'enable_map_clear_mode': 'enable_map_clear_mode', # 'clear_mode_stop_condition': 'clear_mode_stop_condition', @@ -401,6 +402,7 @@ dic_chi_to_eng = { # '退役紫皮': 'retire_sr', # '退役金皮': 'retire_ssr', '启用掉落记录': 'enable_drop_screenshot', + '启用AzurStat': 'enable_azurstat', '掉落保存目录': 'drop_screenshot_folder', # '启用开荒': 'enable_map_clear_mode', # '开荒停止条件': 'clear_mode_stop_condition', @@ -698,6 +700,7 @@ dic_tchi_to_eng = { # '退役紫皮': 'retire_sr', # '退役金皮': 'retire_ssr', '啟用掉落記錄': 'enable_drop_screenshot', + '啟用AzurStat': 'enable_azurstat', '掉落保存目錄': 'drop_screenshot_folder', # '啟用開荒': 'enable_map_clear_mode', # '開荒停止條件': 'clear_mode_stop_condition', diff --git a/module/config/event.py b/module/config/event.py index b02a3df39..937fbfcca 100644 --- a/module/config/event.py +++ b/module/config/event.py @@ -28,6 +28,7 @@ dic_event = { '复兴的赞美诗': 'event_20210422_cn', '镜位螺旋': 'event_20210527_cn', '复刻浮樱影华': 'event_20210624_cn', + '复刻穿越彼方的水线': 'raid_20210708', }, 'en': { 'Northern_Overture': 'event_20200227_cn', @@ -56,6 +57,7 @@ dic_event = { 'Daedalian_Hymn': 'event_20210422_cn', 'Mirror_Involution': 'event_20210527_cn', 'Swirling_Cherry_Blossoms_Rerun': 'event_20210624_cn', + 'Cross_Wave_rerun': 'raid_20210708', }, 'jp': { '凍絶の北海': 'event_20200227_cn', @@ -81,6 +83,7 @@ dic_event = { '讃える復興の迷路': 'event_20210422_cn', '照らす螺旋の鏡海': 'event_20210527_cn', '翳りし満ちる影の華(復刻)': 'event_20210624_cn', + '交錯する新たな波 (復刻)': 'raid_20210708', }, 'tw': { '特別演習埃塞克斯級': 'raid_20200624', @@ -91,6 +94,7 @@ dic_event = { '微層混合': 'event_20210527_tw', '夜幕下的歸途': 'event_20210610_tw', '穹頂下的聖詠曲': 'event_20210624_tw', + '峽灣間的星辰': 'event_20200903_en', }, } diff --git a/module/config/update.py b/module/config/update.py index 1e66b5c3c..e7f87657f 100644 --- a/module/config/update.py +++ b/module/config/update.py @@ -1,64 +1,80 @@ -import codecs -import configparser -import shutil - -from module.logger import logger - - -def update_config_from_template(config, file): - """ - Args: - config (configparser.ConfigParser): - file: Save file when changed - - Returns: - configparser.ConfigParser: - """ - template = configparser.ConfigParser(interpolation=None) - template.read_file(codecs.open(f'./config/template.ini', "r", "utf8")) - changed = False - # Update section. - for section in template.sections(): - if not config.has_section(section): - config.add_section(section) - changed = True - for section in config.sections(): - if not template.has_section(section): - config.remove_section(section) - changed = True - # Update option - for section in template.sections(): - for option in template.options(section): - if not config.has_option(section, option): - config.set(section, option, value=template.get(section, option)) - changed = True - for section in config.sections(): - for option in config.options(section): - if not template.has_option(section, option): - config.remove_option(section, option) - changed = True - # Save - if changed: - config.write(codecs.open(file, "w+", "utf8")) - return config - - -def get_config(ini_name): - """ - Args: - ini_name (str): - - Returns: - configparser.ConfigParser: - """ - config_file = f'./config/{ini_name}.ini' - config = configparser.ConfigParser(interpolation=None) - try: - config.read_file(codecs.open(config_file, "r", "utf8")) - except FileNotFoundError: - logger.info('Config file not exists, copy from ./config/template.ini') - shutil.copy('./config/template.ini', config_file) - config.read_file(codecs.open(config_file, "r", "utf8")) - - config = update_config_from_template(config, file=config_file) - return config +import codecs +import configparser +import random +import shutil +import string + +from module.logger import logger + + +def random_id(length=32): + """ + Args: + length (int): + + Returns: + str: Random azurstat id. + """ + return ''.join(random.sample(string.ascii_lowercase + string.digits, length)) + + +def update_config_from_template(config, file): + """ + Args: + config (configparser.ConfigParser): + file: Save file when changed + + Returns: + configparser.ConfigParser: + """ + template = configparser.ConfigParser(interpolation=None) + template.read_file(codecs.open(f'./config/template.ini', "r", "utf8")) + changed = False + # Update section. + for section in template.sections(): + if not config.has_section(section): + config.add_section(section) + changed = True + for section in config.sections(): + if not template.has_section(section): + config.remove_section(section) + changed = True + # Update option + for section in template.sections(): + for option in template.options(section): + if not config.has_option(section, option): + config.set(section, option, value=template.get(section, option)) + changed = True + for section in config.sections(): + for option in config.options(section): + if not template.has_option(section, option): + config.remove_option(section, option) + changed = True + # AzueStat id + if config['Setting']['azurstat_id'] == '': + config['Setting']['azurstat_id'] = random_id() + # Save + if changed: + config.write(codecs.open(file, "w+", "utf8")) + return config + + +def get_config(ini_name): + """ + Args: + ini_name (str): + + Returns: + configparser.ConfigParser: + """ + config_file = f'./config/{ini_name}.ini' + config = configparser.ConfigParser(interpolation=None) + try: + config.read_file(codecs.open(config_file, "r", "utf8")) + except FileNotFoundError: + logger.info('Config file not exists, copy from ./config/template.ini') + shutil.copy('./config/template.ini', config_file) + config.read_file(codecs.open(config_file, "r", "utf8")) + + config = update_config_from_template(config, file=config_file) + return config diff --git a/module/handler/assets.py b/module/handler/assets.py index a2946f85e..cb5983717 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -6,18 +6,18 @@ from module.base.template import Template AUTO_SEARCH_MAP_OPTION_OFF = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1204, 547, 1276, 568), 'tw': (1205, 546, 1275, 567)}, color={'cn': (196, 169, 169), 'en': (151, 132, 138), 'jp': (179, 153, 156), 'tw': (153, 132, 137)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1204, 547, 1276, 568), 'tw': (1205, 546, 1275, 567)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'en': './assets/en/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MAP_OPTION_OFF.png'}) AUTO_SEARCH_MAP_OPTION_ON = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1203, 547, 1276, 568), 'tw': (1204, 546, 1276, 567)}, color={'cn': (149, 176, 193), 'en': (113, 135, 157), 'jp': (132, 158, 177), 'tw': (110, 133, 156)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1203, 547, 1276, 568), 'tw': (1204, 546, 1276, 567)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MAP_OPTION_ON.png', 'en': './assets/en/handler/AUTO_SEARCH_MAP_OPTION_ON.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MAP_OPTION_ON.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MAP_OPTION_ON.png'}) -AUTO_SEARCH_MENU_CONTINUE = Button(area={'cn': (802, 531, 974, 588), 'en': (812, 536, 970, 583), 'jp': (802, 531, 975, 589), 'tw': (801, 530, 975, 589)}, color={'cn': (109, 157, 215), 'en': (101, 147, 207), 'jp': (106, 151, 207), 'tw': (109, 157, 215)}, button={'cn': (802, 531, 974, 588), 'en': (812, 536, 970, 583), 'jp': (802, 531, 975, 589), 'tw': (801, 530, 975, 589)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MENU_CONTINUE.png', 'en': './assets/en/handler/AUTO_SEARCH_MENU_CONTINUE.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MENU_CONTINUE.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MENU_CONTINUE.png'}) -AUTO_SEARCH_MENU_EXIT = Button(area={'cn': (311, 531, 483, 588), 'en': (322, 536, 481, 583), 'jp': (311, 532, 484, 588), 'tw': (311, 531, 484, 588)}, color={'cn': (167, 169, 174), 'en': (167, 166, 168), 'jp': (161, 163, 165), 'tw': (172, 174, 177)}, button={'cn': (311, 531, 483, 588), 'en': (322, 536, 481, 583), 'jp': (311, 532, 484, 588), 'tw': (311, 531, 484, 588)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MENU_EXIT.png', 'en': './assets/en/handler/AUTO_SEARCH_MENU_EXIT.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MENU_EXIT.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MENU_EXIT.png'}) +AUTO_SEARCH_MENU_CONTINUE = Button(area={'cn': (773, 598, 919, 646), 'en': (772, 597, 920, 648), 'jp': (845, 597, 990, 646), 'tw': (776, 601, 919, 645)}, color={'cn': (111, 157, 214), 'en': (100, 149, 211), 'jp': (107, 151, 207), 'tw': (114, 158, 212)}, button={'cn': (773, 598, 919, 646), 'en': (772, 597, 920, 648), 'jp': (845, 597, 990, 646), 'tw': (776, 601, 919, 645)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MENU_CONTINUE.png', 'en': './assets/en/handler/AUTO_SEARCH_MENU_CONTINUE.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MENU_CONTINUE.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MENU_CONTINUE.png'}) +AUTO_SEARCH_MENU_EXIT = Button(area={'cn': (373, 598, 520, 647), 'en': (372, 597, 521, 648), 'jp': (305, 597, 451, 645), 'tw': (393, 604, 498, 644)}, color={'cn': (171, 173, 176), 'en': (170, 172, 174), 'jp': (164, 165, 168), 'tw': (177, 178, 180)}, button={'cn': (373, 598, 520, 647), 'en': (372, 597, 521, 648), 'jp': (305, 597, 451, 645), 'tw': (393, 604, 498, 644)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MENU_EXIT.png', 'en': './assets/en/handler/AUTO_SEARCH_MENU_EXIT.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MENU_EXIT.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MENU_EXIT.png'}) AUTO_SEARCH_OFF = Button(area={'cn': (869, 588, 885, 604), 'en': (824, 588, 840, 604), 'jp': (869, 588, 885, 604), 'tw': (869, 588, 885, 604)}, color={'cn': (96, 97, 102), 'en': (110, 110, 115), 'jp': (96, 97, 102), 'tw': (96, 97, 102)}, button={'cn': (869, 588, 885, 604), 'en': (824, 588, 840, 604), 'jp': (869, 588, 885, 604), 'tw': (869, 588, 885, 604)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_OFF.png', 'en': './assets/en/handler/AUTO_SEARCH_OFF.png', 'jp': './assets/jp/handler/AUTO_SEARCH_OFF.png', 'tw': './assets/tw/handler/AUTO_SEARCH_OFF.png'}) AUTO_SEARCH_ON = Button(area={'cn': (869, 588, 885, 604), 'en': (824, 588, 840, 604), 'jp': (869, 588, 885, 604), 'tw': (869, 588, 885, 604)}, color={'cn': (139, 167, 119), 'en': (143, 171, 123), 'jp': (139, 167, 119), 'tw': (139, 167, 119)}, button={'cn': (869, 588, 885, 604), 'en': (824, 588, 840, 604), 'jp': (869, 588, 885, 604), 'tw': (869, 588, 885, 604)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_ON.png', 'en': './assets/en/handler/AUTO_SEARCH_ON.png', 'jp': './assets/jp/handler/AUTO_SEARCH_ON.png', 'tw': './assets/tw/handler/AUTO_SEARCH_ON.png'}) AUTO_SEARCH_SET_ALL = Button(area={'cn': (830, 189, 849, 207), 'en': (813, 192, 832, 210), 'jp': (813, 192, 832, 210), 'tw': (813, 192, 832, 210)}, color={'cn': (38, 39, 40), 'en': (78, 107, 57), 'jp': (78, 107, 57), 'tw': (78, 107, 57)}, button={'cn': (830, 189, 849, 207), 'en': (813, 192, 832, 210), 'jp': (813, 192, 832, 210), 'tw': (813, 192, 832, 210)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_SET_ALL.png', 'en': './assets/en/handler/AUTO_SEARCH_SET_ALL.png', 'jp': './assets/jp/handler/AUTO_SEARCH_SET_ALL.png', 'tw': './assets/tw/handler/AUTO_SEARCH_SET_ALL.png'}) AUTO_SEARCH_SET_BOSS = Button(area={'cn': (633, 189, 651, 207), 'en': (616, 192, 634, 210), 'jp': (616, 192, 634, 210), 'tw': (616, 192, 634, 210)}, color={'cn': (37, 38, 39), 'en': (37, 38, 38), 'jp': (37, 38, 38), 'tw': (37, 38, 38)}, button={'cn': (633, 189, 651, 207), 'en': (616, 192, 634, 210), 'jp': (616, 192, 634, 210), 'tw': (616, 192, 634, 210)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_SET_BOSS.png', 'en': './assets/en/handler/AUTO_SEARCH_SET_BOSS.png', 'jp': './assets/jp/handler/AUTO_SEARCH_SET_BOSS.png', 'tw': './assets/tw/handler/AUTO_SEARCH_SET_BOSS.png'}) AUTO_SEARCH_SET_MOB = Button(area={'cn': (494, 189, 513, 207), 'en': (477, 192, 496, 210), 'jp': (477, 192, 496, 210), 'tw': (477, 192, 496, 210)}, color={'cn': (38, 39, 39), 'en': (38, 39, 39), 'jp': (38, 39, 39), 'tw': (38, 39, 39)}, button={'cn': (494, 189, 513, 207), 'en': (477, 192, 496, 210), 'jp': (477, 192, 496, 210), 'tw': (477, 192, 496, 210)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_SET_MOB.png', 'en': './assets/en/handler/AUTO_SEARCH_SET_MOB.png', 'jp': './assets/jp/handler/AUTO_SEARCH_SET_MOB.png', 'tw': './assets/tw/handler/AUTO_SEARCH_SET_MOB.png'}) AUTO_SEARCH_SET_STANDBY = Button(area={'cn': (930, 189, 948, 207), 'en': (913, 192, 931, 210), 'jp': (913, 192, 931, 210), 'tw': (913, 192, 931, 210)}, color={'cn': (75, 106, 55), 'en': (36, 37, 38), 'jp': (36, 37, 38), 'tw': (36, 37, 38)}, button={'cn': (930, 189, 948, 207), 'en': (913, 192, 931, 210), 'jp': (913, 192, 931, 210), 'tw': (913, 192, 931, 210)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_SET_STANDBY.png', 'en': './assets/en/handler/AUTO_SEARCH_SET_STANDBY.png', 'jp': './assets/jp/handler/AUTO_SEARCH_SET_STANDBY.png', 'tw': './assets/tw/handler/AUTO_SEARCH_SET_STANDBY.png'}) -BOOK_BOX_AUTO = Button(area={'cn': (770, 552, 788, 569), 'en': (771, 552, 787, 569), 'jp': (771, 552, 787, 569), 'tw': (771, 552, 787, 569)}, color={'cn': (68, 74, 82), 'en': (63, 70, 75), 'jp': (63, 70, 75), 'tw': (63, 70, 75)}, button={'cn': (770, 552, 788, 569), 'en': (771, 552, 787, 569), 'jp': (771, 552, 787, 569), 'tw': (771, 552, 787, 569)}, file={'cn': './assets/cn/handler/BOOK_BOX_AUTO.png', 'en': './assets/en/handler/BOOK_BOX_AUTO.png', 'jp': './assets/jp/handler/BOOK_BOX_AUTO.png', 'tw': './assets/tw/handler/BOOK_BOX_AUTO.png'}) -BOOK_BOX_PREP = Button(area={'cn': (922, 600, 940, 617), 'en': (906, 604, 922, 619), 'jp': (906, 604, 922, 619), 'tw': (906, 604, 922, 619)}, color={'cn': (88, 122, 68), 'en': (29, 32, 29), 'jp': (29, 32, 29), 'tw': (29, 32, 29)}, button={'cn': (922, 600, 940, 617), 'en': (906, 604, 922, 619), 'jp': (906, 604, 922, 619), 'tw': (906, 604, 922, 619)}, file={'cn': './assets/cn/handler/BOOK_BOX_PREP.png', 'en': './assets/en/handler/BOOK_BOX_PREP.png', 'jp': './assets/jp/handler/BOOK_BOX_PREP.png', 'tw': './assets/tw/handler/BOOK_BOX_PREP.png'}) -BOOK_CHECK_AUTO = Button(area={'cn': (616, 546, 636, 574), 'en': (616, 546, 636, 574), 'jp': (616, 546, 636, 574), 'tw': (616, 546, 636, 574)}, color={'cn': (149, 135, 84), 'en': (149, 135, 84), 'jp': (149, 135, 84), 'tw': (149, 135, 84)}, button={'cn': (616, 546, 636, 574), 'en': (616, 546, 636, 574), 'jp': (616, 546, 636, 574), 'tw': (616, 546, 636, 574)}, file={'cn': './assets/cn/handler/BOOK_CHECK_AUTO.png', 'en': './assets/en/handler/BOOK_CHECK_AUTO.png', 'jp': './assets/jp/handler/BOOK_CHECK_AUTO.png', 'tw': './assets/tw/handler/BOOK_CHECK_AUTO.png'}) -BOOK_CHECK_PREP = Button(area={'cn': (719, 591, 743, 623), 'en': (719, 591, 743, 623), 'jp': (719, 591, 743, 623), 'tw': (719, 591, 743, 623)}, color={'cn': (149, 134, 82), 'en': (149, 134, 82), 'jp': (149, 134, 82), 'tw': (149, 134, 82)}, button={'cn': (719, 591, 743, 623), 'en': (719, 591, 743, 623), 'jp': (719, 591, 743, 623), 'tw': (719, 591, 743, 623)}, file={'cn': './assets/cn/handler/BOOK_CHECK_PREP.png', 'en': './assets/en/handler/BOOK_CHECK_PREP.png', 'jp': './assets/jp/handler/BOOK_CHECK_PREP.png', 'tw': './assets/tw/handler/BOOK_CHECK_PREP.png'}) +BOOK_BOX_AUTO = Button(area={'cn': (737, 614, 756, 631), 'en': (808, 614, 825, 631), 'jp': (808, 614, 825, 631), 'tw': (771, 552, 787, 569)}, color={'cn': (67, 74, 82), 'en': (60, 70, 79), 'jp': (59, 62, 68), 'tw': (63, 70, 75)}, button={'cn': (737, 614, 756, 631), 'en': (808, 614, 825, 631), 'jp': (808, 614, 825, 631), 'tw': (771, 552, 787, 569)}, file={'cn': './assets/cn/handler/BOOK_BOX_AUTO.png', 'en': './assets/en/handler/BOOK_BOX_AUTO.png', 'jp': './assets/jp/handler/BOOK_BOX_AUTO.png', 'tw': './assets/tw/handler/BOOK_BOX_AUTO.png'}) +BOOK_BOX_PREP = Button(area={'cn': (922, 600, 940, 617), 'en': (906, 604, 922, 619), 'jp': (921, 602, 939, 621), 'tw': (906, 604, 922, 619)}, color={'cn': (88, 122, 68), 'en': (29, 32, 29), 'jp': (35, 35, 36), 'tw': (29, 32, 29)}, button={'cn': (922, 600, 940, 617), 'en': (906, 604, 922, 619), 'jp': (921, 602, 939, 621), 'tw': (906, 604, 922, 619)}, file={'cn': './assets/cn/handler/BOOK_BOX_PREP.png', 'en': './assets/en/handler/BOOK_BOX_PREP.png', 'jp': './assets/jp/handler/BOOK_BOX_PREP.png', 'tw': './assets/tw/handler/BOOK_BOX_PREP.png'}) +BOOK_CHECK_AUTO = Button(area={'cn': (600, 599, 648, 635), 'en': (615, 600, 660, 634), 'jp': (687, 611, 703, 626), 'tw': (616, 546, 636, 574)}, color={'cn': (144, 128, 138), 'en': (143, 128, 132), 'jp': (157, 142, 80), 'tw': (149, 135, 84)}, button={'cn': (600, 599, 648, 635), 'en': (615, 600, 660, 634), 'jp': (687, 611, 703, 626), 'tw': (616, 546, 636, 574)}, file={'cn': './assets/cn/handler/BOOK_CHECK_AUTO.png', 'en': './assets/en/handler/BOOK_CHECK_AUTO.png', 'jp': './assets/jp/handler/BOOK_CHECK_AUTO.png', 'tw': './assets/tw/handler/BOOK_CHECK_AUTO.png'}) +BOOK_CHECK_PREP = Button(area={'cn': (719, 591, 743, 623), 'en': (719, 591, 743, 623), 'jp': (735, 596, 758, 617), 'tw': (719, 591, 743, 623)}, color={'cn': (149, 134, 82), 'en': (149, 134, 82), 'jp': (156, 141, 80), 'tw': (149, 134, 82)}, button={'cn': (719, 591, 743, 623), 'en': (719, 591, 743, 623), 'jp': (735, 596, 758, 617), 'tw': (719, 591, 743, 623)}, file={'cn': './assets/cn/handler/BOOK_CHECK_PREP.png', 'en': './assets/en/handler/BOOK_CHECK_PREP.png', 'jp': './assets/jp/handler/BOOK_CHECK_PREP.png', 'tw': './assets/tw/handler/BOOK_CHECK_PREP.png'}) FAST_FORWARD_OFF = Button(area={'cn': (982, 587, 1022, 605), 'en': (982, 587, 1022, 605), 'jp': (982, 587, 1022, 605), 'tw': (982, 587, 1022, 605)}, color={'cn': (251, 251, 251), 'en': (251, 251, 251), 'jp': (251, 251, 251), 'tw': (251, 251, 251)}, button={'cn': (982, 587, 1022, 605), 'en': (982, 587, 1022, 605), 'jp': (982, 587, 1022, 605), 'tw': (982, 587, 1022, 605)}, file={'cn': './assets/cn/handler/FAST_FORWARD_OFF.png', 'en': './assets/en/handler/FAST_FORWARD_OFF.png', 'jp': './assets/jp/handler/FAST_FORWARD_OFF.png', 'tw': './assets/tw/handler/FAST_FORWARD_OFF.png'}) FAST_FORWARD_ON = Button(area={'cn': (1024, 587, 1064, 605), 'en': (1024, 587, 1064, 605), 'jp': (1024, 587, 1064, 605), 'tw': (1024, 587, 1064, 605)}, color={'cn': (251, 251, 251), 'en': (251, 251, 251), 'jp': (251, 251, 251), 'tw': (251, 251, 251)}, button={'cn': (1024, 587, 1064, 605), 'en': (1024, 587, 1064, 605), 'jp': (1024, 587, 1064, 605), 'tw': (1024, 587, 1064, 605)}, file={'cn': './assets/cn/handler/FAST_FORWARD_ON.png', 'en': './assets/en/handler/FAST_FORWARD_ON.png', 'jp': './assets/jp/handler/FAST_FORWARD_ON.png', 'tw': './assets/tw/handler/FAST_FORWARD_ON.png'}) FLEET_LOCKED = Button(area={'cn': (1185, 501, 1192, 519), 'en': (1184, 502, 1191, 519), 'jp': (1172, 496, 1180, 531), 'tw': (1185, 501, 1192, 519)}, color={'cn': (59, 100, 110), 'en': (61, 102, 111), 'jp': (56, 87, 103), 'tw': (59, 100, 110)}, button={'cn': (1185, 501, 1192, 519), 'en': (1184, 502, 1191, 519), 'jp': (1172, 496, 1180, 531), 'tw': (1185, 501, 1192, 519)}, file={'cn': './assets/cn/handler/FLEET_LOCKED.png', 'en': './assets/en/handler/FLEET_LOCKED.png', 'jp': './assets/jp/handler/FLEET_LOCKED.png', 'tw': './assets/tw/handler/FLEET_LOCKED.png'}) diff --git a/module/handler/auto_search.py b/module/handler/auto_search.py index 014528ae2..be55a6740 100644 --- a/module/handler/auto_search.py +++ b/module/handler/auto_search.py @@ -154,6 +154,7 @@ class AutoSearchHandler(EnemySearchingHandler): return True _auto_search_offset = (5, 5) + _auto_search_menu_offset = (200, 20) def is_auto_search_running(self): """ @@ -181,13 +182,13 @@ class AutoSearchHandler(EnemySearchingHandler): Returns: bool: """ - return self.appear(AUTO_SEARCH_MENU_CONTINUE, offset=(20, 20)) + return self.appear(AUTO_SEARCH_MENU_CONTINUE, offset=self._auto_search_menu_offset) def handle_auto_search_continue(self): - return self.appear_then_click(AUTO_SEARCH_MENU_CONTINUE, offset=(20, 20), interval=2) + return self.appear_then_click(AUTO_SEARCH_MENU_CONTINUE, offset=self._auto_search_menu_offset, interval=2) def handle_auto_search_exit(self): - return self.appear_then_click(AUTO_SEARCH_MENU_EXIT, offset=(20, 20), interval=2) + return self.appear_then_click(AUTO_SEARCH_MENU_EXIT, offset=self._auto_search_menu_offset, interval=2) def ensure_auto_search_exit(self, skip_first_screenshot=True): """ diff --git a/module/handler/fast_forward.py b/module/handler/fast_forward.py index 3f75e10be..895d1f960 100644 --- a/module/handler/fast_forward.py +++ b/module/handler/fast_forward.py @@ -145,7 +145,7 @@ class FastForwardHandler(AutoSearchHandler): Override AutoSearchHandler definition for 2x book handling if needed """ - if self.appear(AUTO_SEARCH_MENU_CONTINUE, offset=(20, 20), interval=2): + if self.appear(AUTO_SEARCH_MENU_CONTINUE, offset=self._auto_search_menu_offset, interval=2): self.map_is_2x_book = self.config.ENABLE_2X_BOOK self.handle_2x_book_setting(mode='auto') self.device.click(AUTO_SEARCH_MENU_CONTINUE) @@ -212,28 +212,29 @@ class FastForwardHandler(AutoSearchHandler): """ confirm_timer = Timer(1).start() - clicked_threshold = 3 + clicked_threshold = 0 while 1: if skip_first_screenshot: skip_first_screenshot = False else: self.device.screenshot() - if clicked_threshold < 0: + if clicked_threshold > 3: break - if self.appear(check_button, offset=(100, 50), interval=3): - enabled = self.image_color_count(box_button, color=(156, 255, 82), threshold=221, count=20) + if self.appear(check_button, offset=self._auto_search_menu_offset, interval=3): + box_button.load_offset(check_button) + enabled = self.image_color_count(box_button.button, color=(156, 255, 82), threshold=221, count=20) if (status == 'on' and enabled) or (status == 'off' and not enabled): return True if (status == 'on' and not enabled) or (status == 'off' and enabled): self.device.click(box_button) - clicked_threshold -= 1 + clicked_threshold += 1 - if confirm_timer.reached(): + if not clicked_threshold and confirm_timer.reached(): logger.info('Map do not have 2x book setting') - return True + return False logger.warning(f'Wait time has expired; Cannot set 2x book setting') return False diff --git a/module/os_handler/assets.py b/module/os_handler/assets.py index d98389597..807305337 100644 --- a/module/os_handler/assets.py +++ b/module/os_handler/assets.py @@ -11,7 +11,7 @@ ACTION_POINT_USE = Button(area={'cn': (738, 528, 910, 585), 'en': (742, 531, 909 ASH_POPUP_CHECK = Button(area={'cn': (352, 249, 928, 479), 'en': (352, 228, 926, 462), 'jp': (362, 351, 920, 411), 'tw': (376, 368, 902, 396)}, color={'cn': (107, 117, 135), 'en': (125, 129, 139), 'jp': (120, 107, 119), 'tw': (134, 105, 119)}, button={'cn': (352, 249, 928, 479), 'en': (352, 228, 926, 462), 'jp': (362, 351, 920, 411), 'tw': (376, 368, 902, 396)}, file={'cn': './assets/cn/os_handler/ASH_POPUP_CHECK.png', 'en': './assets/en/os_handler/ASH_POPUP_CHECK.png', 'jp': './assets/jp/os_handler/ASH_POPUP_CHECK.png', 'tw': './assets/tw/os_handler/ASH_POPUP_CHECK.png'}) AUTO_SEARCH_OS_MAP_OPTION_OFF = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1196, 574, 1273, 586), 'jp': (1204, 572, 1276, 593), 'tw': (1205, 549, 1275, 566)}, color={'cn': (196, 169, 169), 'en': (154, 135, 141), 'jp': (180, 154, 157), 'tw': (196, 169, 169)}, button={'cn': (1205, 549, 1275, 566), 'en': (1196, 574, 1273, 586), 'jp': (1204, 572, 1276, 593), 'tw': (1205, 549, 1275, 566)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png', 'en': './assets/en/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png', 'tw': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png'}) AUTO_SEARCH_OS_MAP_OPTION_ON = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1198, 576, 1275, 588), 'jp': (1205, 573, 1275, 592), 'tw': (1205, 549, 1275, 566)}, color={'cn': (149, 176, 193), 'en': (116, 139, 160), 'jp': (145, 172, 190), 'tw': (149, 176, 193)}, button={'cn': (1205, 549, 1275, 566), 'en': (1198, 576, 1275, 588), 'jp': (1205, 573, 1275, 592), 'tw': (1205, 549, 1275, 566)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png', 'en': './assets/en/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png', 'tw': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png'}) -AUTO_SEARCH_REWARD = Button(area={'cn': (558, 535, 730, 592), 'en': (563, 537, 725, 591), 'jp': (556, 534, 731, 594), 'tw': (558, 535, 730, 592)}, color={'cn': (163, 166, 170), 'en': (167, 170, 174), 'jp': (166, 169, 171), 'tw': (163, 166, 170)}, button={'cn': (558, 535, 730, 592), 'en': (563, 537, 725, 591), 'jp': (556, 534, 731, 594), 'tw': (558, 535, 730, 592)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_REWARD.png', 'en': './assets/en/os_handler/AUTO_SEARCH_REWARD.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_REWARD.png', 'tw': './assets/cn/os_handler/AUTO_SEARCH_REWARD.png'}) +AUTO_SEARCH_REWARD = Button(area={'cn': (575, 598, 721, 646), 'en': (574, 597, 722, 648), 'jp': (577, 597, 722, 645), 'tw': (575, 598, 721, 646)}, color={'cn': (169, 168, 170), 'en': (168, 171, 174), 'jp': (165, 170, 175), 'tw': (169, 168, 170)}, button={'cn': (575, 598, 721, 646), 'en': (574, 597, 722, 648), 'jp': (577, 597, 722, 645), 'tw': (575, 598, 721, 646)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_REWARD.png', 'en': './assets/en/os_handler/AUTO_SEARCH_REWARD.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_REWARD.png', 'tw': './assets/cn/os_handler/AUTO_SEARCH_REWARD.png'}) CLICK_SAFE_AREA = Button(area={'cn': (1104, 169, 1214, 284), 'en': (1104, 169, 1214, 284), 'jp': (1104, 169, 1214, 284), 'tw': (1104, 169, 1214, 284)}, color={'cn': (96, 114, 142), 'en': (96, 114, 142), 'jp': (96, 114, 142), 'tw': (96, 114, 142)}, button={'cn': (1104, 169, 1214, 284), 'en': (1104, 169, 1214, 284), 'jp': (1104, 169, 1214, 284), 'tw': (1104, 169, 1214, 284)}, file={'cn': './assets/cn/os_handler/CLICK_SAFE_AREA.png', 'en': './assets/en/os_handler/CLICK_SAFE_AREA.png', 'jp': './assets/jp/os_handler/CLICK_SAFE_AREA.png', 'tw': './assets/tw/os_handler/CLICK_SAFE_AREA.png'}) GET_ADAPTABILITY = Button(area={'cn': (538, 191, 742, 227), 'en': (548, 191, 742, 215), 'jp': (538, 191, 743, 227), 'tw': (538, 191, 742, 227)}, color={'cn': (166, 195, 246), 'en': (194, 207, 225), 'jp': (158, 190, 245), 'tw': (166, 195, 246)}, button={'cn': (538, 191, 742, 227), 'en': (548, 191, 742, 215), 'jp': (538, 191, 743, 227), 'tw': (538, 191, 742, 227)}, file={'cn': './assets/cn/os_handler/GET_ADAPTABILITY.png', 'en': './assets/en/os_handler/GET_ADAPTABILITY.png', 'jp': './assets/jp/os_handler/GET_ADAPTABILITY.png', 'tw': './assets/tw/os_handler/GET_ADAPTABILITY.png'}) GET_MEOWFFICER_ITEMS_1 = Button(area={'cn': (558, 211, 730, 242), 'en': (550, 211, 723, 247), 'jp': (538, 217, 732, 253), 'tw': (558, 211, 730, 242)}, color={'cn': (186, 200, 231), 'en': (165, 191, 241), 'jp': (143, 180, 249), 'tw': (186, 200, 231)}, button={'cn': (558, 211, 730, 242), 'en': (550, 211, 723, 247), 'jp': (538, 217, 732, 253), 'tw': (558, 211, 730, 242)}, file={'cn': './assets/cn/os_handler/GET_MEOWFFICER_ITEMS_1.png', 'en': './assets/en/os_handler/GET_MEOWFFICER_ITEMS_1.png', 'jp': './assets/jp/os_handler/GET_MEOWFFICER_ITEMS_1.png', 'tw': './assets/tw/os_handler/GET_MEOWFFICER_ITEMS_1.png'}) diff --git a/module/raid/assets.py b/module/raid/assets.py index d03342970..e2d7bb8c7 100644 --- a/module/raid/assets.py +++ b/module/raid/assets.py @@ -4,12 +4,18 @@ from module.base.template import Template # This file was automatically generated by dev_tools.button_extract. # Don't modify it manually. -OCR_REMAIN_EASY = Button(area={'cn': (1073, 501, 1092, 520), 'en': (1073, 501, 1092, 520), 'jp': (1073, 501, 1092, 520), 'tw': (1073, 501, 1092, 520)}, color={'cn': (99, 133, 255), 'en': (99, 133, 255), 'jp': (99, 133, 255), 'tw': (99, 133, 255)}, button={'cn': (1073, 501, 1092, 520), 'en': (1073, 501, 1092, 520), 'jp': (1073, 501, 1092, 520), 'tw': (1073, 501, 1092, 520)}, file={'cn': './assets/cn/raid/OCR_REMAIN_EASY.png', 'en': './assets/en/raid/OCR_REMAIN_EASY.png', 'jp': './assets/jp/raid/OCR_REMAIN_EASY.png', 'tw': './assets/tw/raid/OCR_REMAIN_EASY.png'}) -OCR_REMAIN_HARD = Button(area={'cn': (1090, 271, 1109, 290), 'en': (1090, 271, 1109, 290), 'jp': (1090, 271, 1109, 290), 'tw': (1090, 271, 1109, 290)}, color={'cn': (100, 132, 255), 'en': (100, 132, 255), 'jp': (100, 132, 255), 'tw': (100, 132, 255)}, button={'cn': (1090, 271, 1109, 290), 'en': (1090, 271, 1109, 290), 'jp': (1090, 271, 1109, 290), 'tw': (1090, 271, 1109, 290)}, file={'cn': './assets/cn/raid/OCR_REMAIN_HARD.png', 'en': './assets/en/raid/OCR_REMAIN_HARD.png', 'jp': './assets/jp/raid/OCR_REMAIN_HARD.png', 'tw': './assets/tw/raid/OCR_REMAIN_HARD.png'}) -OCR_REMAIN_NORMAL = Button(area={'cn': (1051, 385, 1070, 404), 'en': (1051, 385, 1070, 404), 'jp': (1051, 385, 1070, 404), 'tw': (1051, 385, 1070, 404)}, color={'cn': (99, 132, 255), 'en': (99, 132, 255), 'jp': (99, 132, 255), 'tw': (99, 132, 255)}, button={'cn': (1051, 385, 1070, 404), 'en': (1051, 385, 1070, 404), 'jp': (1051, 385, 1070, 404), 'tw': (1051, 385, 1070, 404)}, file={'cn': './assets/cn/raid/OCR_REMAIN_NORMAL.png', 'en': './assets/en/raid/OCR_REMAIN_NORMAL.png', 'jp': './assets/jp/raid/OCR_REMAIN_NORMAL.png', 'tw': './assets/tw/raid/OCR_REMAIN_NORMAL.png'}) -RAID_EASY = Button(area={'cn': (1136, 501, 1199, 544), 'en': (1152, 503, 1196, 536), 'jp': (1143, 496, 1209, 521), 'tw': (1136, 501, 1199, 544)}, color={'cn': (127, 177, 243), 'en': (130, 182, 240), 'jp': (162, 192, 225), 'tw': (127, 177, 243)}, button={'cn': (1136, 501, 1199, 544), 'en': (1152, 503, 1196, 536), 'jp': (1143, 496, 1209, 521), 'tw': (1136, 501, 1199, 544)}, file={'cn': './assets/cn/raid/RAID_EASY.png', 'en': './assets/en/raid/RAID_EASY.png', 'jp': './assets/jp/raid/RAID_EASY.png', 'tw': './assets/tw/raid/RAID_EASY.png'}) +ESSEX_OCR_REMAIN_EASY = Button(area={'cn': (1073, 501, 1092, 520), 'en': (1073, 501, 1092, 520), 'jp': (1073, 501, 1092, 520), 'tw': (1073, 501, 1092, 520)}, color={'cn': (99, 133, 255), 'en': (99, 133, 255), 'jp': (99, 133, 255), 'tw': (99, 133, 255)}, button={'cn': (1073, 501, 1092, 520), 'en': (1073, 501, 1092, 520), 'jp': (1073, 501, 1092, 520), 'tw': (1073, 501, 1092, 520)}, file={'cn': './assets/cn/raid/ESSEX_OCR_REMAIN_EASY.png', 'en': './assets/en/raid/ESSEX_OCR_REMAIN_EASY.png', 'jp': './assets/jp/raid/ESSEX_OCR_REMAIN_EASY.png', 'tw': './assets/tw/raid/ESSEX_OCR_REMAIN_EASY.png'}) +ESSEX_OCR_REMAIN_HARD = Button(area={'cn': (1090, 271, 1109, 290), 'en': (1090, 271, 1109, 290), 'jp': (1090, 271, 1109, 290), 'tw': (1090, 271, 1109, 290)}, color={'cn': (100, 132, 255), 'en': (100, 132, 255), 'jp': (100, 132, 255), 'tw': (100, 132, 255)}, button={'cn': (1090, 271, 1109, 290), 'en': (1090, 271, 1109, 290), 'jp': (1090, 271, 1109, 290), 'tw': (1090, 271, 1109, 290)}, file={'cn': './assets/cn/raid/ESSEX_OCR_REMAIN_HARD.png', 'en': './assets/en/raid/ESSEX_OCR_REMAIN_HARD.png', 'jp': './assets/jp/raid/ESSEX_OCR_REMAIN_HARD.png', 'tw': './assets/tw/raid/ESSEX_OCR_REMAIN_HARD.png'}) +ESSEX_OCR_REMAIN_NORMAL = Button(area={'cn': (1051, 385, 1070, 404), 'en': (1051, 385, 1070, 404), 'jp': (1051, 385, 1070, 404), 'tw': (1051, 385, 1070, 404)}, color={'cn': (99, 132, 255), 'en': (99, 132, 255), 'jp': (99, 132, 255), 'tw': (99, 132, 255)}, button={'cn': (1051, 385, 1070, 404), 'en': (1051, 385, 1070, 404), 'jp': (1051, 385, 1070, 404), 'tw': (1051, 385, 1070, 404)}, file={'cn': './assets/cn/raid/ESSEX_OCR_REMAIN_NORMAL.png', 'en': './assets/en/raid/ESSEX_OCR_REMAIN_NORMAL.png', 'jp': './assets/jp/raid/ESSEX_OCR_REMAIN_NORMAL.png', 'tw': './assets/tw/raid/ESSEX_OCR_REMAIN_NORMAL.png'}) +ESSEX_RAID_EASY = Button(area={'cn': (1136, 501, 1199, 544), 'en': (1152, 503, 1196, 536), 'jp': (1143, 496, 1209, 521), 'tw': (1136, 501, 1199, 544)}, color={'cn': (127, 177, 243), 'en': (130, 182, 240), 'jp': (162, 192, 225), 'tw': (127, 177, 243)}, button={'cn': (1136, 501, 1199, 544), 'en': (1152, 503, 1196, 536), 'jp': (1143, 496, 1209, 521), 'tw': (1136, 501, 1199, 544)}, file={'cn': './assets/cn/raid/ESSEX_RAID_EASY.png', 'en': './assets/en/raid/ESSEX_RAID_EASY.png', 'jp': './assets/jp/raid/ESSEX_RAID_EASY.png', 'tw': './assets/tw/raid/ESSEX_RAID_EASY.png'}) +ESSEX_RAID_HARD = Button(area={'cn': (1155, 271, 1215, 313), 'en': (1155, 264, 1212, 303), 'jp': (1138, 266, 1202, 291), 'tw': (1155, 271, 1215, 313)}, color={'cn': (131, 179, 241), 'en': (132, 179, 238), 'jp': (154, 186, 230), 'tw': (131, 179, 241)}, button={'cn': (1155, 271, 1215, 313), 'en': (1155, 264, 1212, 303), 'jp': (1138, 266, 1202, 291), 'tw': (1155, 271, 1215, 313)}, file={'cn': './assets/cn/raid/ESSEX_RAID_HARD.png', 'en': './assets/en/raid/ESSEX_RAID_HARD.png', 'jp': './assets/jp/raid/ESSEX_RAID_HARD.png', 'tw': './assets/tw/raid/ESSEX_RAID_HARD.png'}) +ESSEX_RAID_NORMAL = Button(area={'cn': (1111, 385, 1176, 428), 'en': (1132, 385, 1185, 421), 'jp': (1118, 381, 1188, 404), 'tw': (1111, 385, 1176, 428)}, color={'cn': (123, 173, 242), 'en': (126, 182, 241), 'jp': (163, 190, 224), 'tw': (123, 173, 242)}, button={'cn': (1111, 385, 1176, 428), 'en': (1132, 385, 1185, 421), 'jp': (1118, 381, 1188, 404), 'tw': (1111, 385, 1176, 428)}, file={'cn': './assets/cn/raid/ESSEX_RAID_NORMAL.png', 'en': './assets/en/raid/ESSEX_RAID_NORMAL.png', 'jp': './assets/jp/raid/ESSEX_RAID_NORMAL.png', 'tw': './assets/tw/raid/ESSEX_RAID_NORMAL.png'}) RAID_FLEET_PREPARATION = Button(area={'cn': (983, 577, 1181, 638), 'en': (1041, 592, 1121, 631), 'jp': (983, 579, 1180, 635), 'tw': (983, 577, 1181, 638)}, color={'cn': (236, 188, 115), 'en': (236, 184, 117), 'jp': (235, 183, 103), 'tw': (236, 188, 115)}, button={'cn': (983, 577, 1181, 638), 'en': (1041, 592, 1121, 631), 'jp': (983, 579, 1180, 635), 'tw': (983, 577, 1181, 638)}, file={'cn': './assets/cn/raid/RAID_FLEET_PREPARATION.png', 'en': './assets/en/raid/RAID_FLEET_PREPARATION.png', 'jp': './assets/jp/raid/RAID_FLEET_PREPARATION.png', 'tw': './assets/tw/raid/RAID_FLEET_PREPARATION.png'}) -RAID_HARD = Button(area={'cn': (1155, 271, 1215, 313), 'en': (1155, 264, 1212, 303), 'jp': (1138, 266, 1202, 291), 'tw': (1155, 271, 1215, 313)}, color={'cn': (131, 179, 241), 'en': (132, 179, 238), 'jp': (154, 186, 230), 'tw': (131, 179, 241)}, button={'cn': (1155, 271, 1215, 313), 'en': (1155, 264, 1212, 303), 'jp': (1138, 266, 1202, 291), 'tw': (1155, 271, 1215, 313)}, file={'cn': './assets/cn/raid/RAID_HARD.png', 'en': './assets/en/raid/RAID_HARD.png', 'jp': './assets/jp/raid/RAID_HARD.png', 'tw': './assets/tw/raid/RAID_HARD.png'}) -RAID_NORMAL = Button(area={'cn': (1111, 385, 1176, 428), 'en': (1132, 385, 1185, 421), 'jp': (1118, 381, 1188, 404), 'tw': (1111, 385, 1176, 428)}, color={'cn': (123, 173, 242), 'en': (126, 182, 241), 'jp': (163, 190, 224), 'tw': (123, 173, 242)}, button={'cn': (1111, 385, 1176, 428), 'en': (1132, 385, 1185, 421), 'jp': (1118, 381, 1188, 404), 'tw': (1111, 385, 1176, 428)}, file={'cn': './assets/cn/raid/RAID_NORMAL.png', 'en': './assets/en/raid/RAID_NORMAL.png', 'jp': './assets/jp/raid/RAID_NORMAL.png', 'tw': './assets/tw/raid/RAID_NORMAL.png'}) +SURUGA_OCR_REMAIN_EASY = Button(area={'cn': (1093, 549, 1141, 563), 'en': (1093, 549, 1141, 563), 'jp': (1096, 549, 1141, 563), 'tw': (1093, 549, 1141, 563)}, color={'cn': (161, 161, 161), 'en': (161, 161, 161), 'jp': (155, 155, 155), 'tw': (161, 161, 161)}, button={'cn': (1093, 549, 1141, 563), 'en': (1093, 549, 1141, 563), 'jp': (1096, 549, 1141, 563), 'tw': (1093, 549, 1141, 563)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_EASY.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_EASY.png', 'tw': './assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png'}) +SURUGA_OCR_REMAIN_HARD = Button(area={'cn': (1071, 318, 1118, 332), 'en': (1071, 318, 1118, 332), 'jp': (1073, 318, 1118, 331), 'tw': (1071, 318, 1118, 332)}, color={'cn': (158, 158, 159), 'en': (158, 158, 159), 'jp': (173, 173, 173), 'tw': (158, 158, 159)}, button={'cn': (1071, 318, 1118, 332), 'en': (1071, 318, 1118, 332), 'jp': (1073, 318, 1118, 331), 'tw': (1071, 318, 1118, 332)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_HARD.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_HARD.png', 'tw': './assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png'}) +SURUGA_OCR_REMAIN_NORMAL = Button(area={'cn': (1137, 426, 1185, 439), 'en': (1137, 426, 1185, 439), 'jp': (1140, 426, 1185, 439), 'tw': (1137, 426, 1185, 439)}, color={'cn': (164, 164, 164), 'en': (164, 164, 164), 'jp': (158, 158, 158), 'tw': (164, 164, 164)}, button={'cn': (1137, 426, 1185, 439), 'en': (1137, 426, 1185, 439), 'jp': (1140, 426, 1185, 439), 'tw': (1137, 426, 1185, 439)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_NORMAL.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_NORMAL.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_NORMAL.png', 'tw': './assets/cn/raid/SURUGA_OCR_REMAIN_NORMAL.png'}) +SURUGA_RAID_EASY = Button(area={'cn': (1143, 536, 1194, 580), 'en': (1144, 540, 1189, 571), 'jp': (1147, 543, 1199, 568), 'tw': (1143, 536, 1194, 580)}, color={'cn': (88, 88, 89), 'en': (83, 84, 84), 'jp': (144, 145, 145), 'tw': (88, 88, 89)}, button={'cn': (1143, 536, 1194, 580), 'en': (1144, 540, 1189, 571), 'jp': (1147, 543, 1199, 568), 'tw': (1143, 536, 1194, 580)}, file={'cn': './assets/cn/raid/SURUGA_RAID_EASY.png', 'en': './assets/en/raid/SURUGA_RAID_EASY.png', 'jp': './assets/jp/raid/SURUGA_RAID_EASY.png', 'tw': './assets/cn/raid/SURUGA_RAID_EASY.png'}) +SURUGA_RAID_HARD = Button(area={'cn': (1120, 304, 1171, 349), 'en': (1121, 308, 1169, 340), 'jp': (1123, 313, 1179, 335), 'tw': (1120, 304, 1171, 349)}, color={'cn': (87, 88, 88), 'en': (89, 90, 90), 'jp': (133, 133, 134), 'tw': (87, 88, 88)}, button={'cn': (1120, 304, 1171, 349), 'en': (1121, 308, 1169, 340), 'jp': (1123, 313, 1179, 335), 'tw': (1120, 304, 1171, 349)}, file={'cn': './assets/cn/raid/SURUGA_RAID_HARD.png', 'en': './assets/en/raid/SURUGA_RAID_HARD.png', 'jp': './assets/jp/raid/SURUGA_RAID_HARD.png', 'tw': './assets/cn/raid/SURUGA_RAID_HARD.png'}) +SURUGA_RAID_NORMAL = Button(area={'cn': (1187, 411, 1238, 457), 'en': (1187, 417, 1254, 445), 'jp': (1191, 421, 1241, 445), 'tw': (1187, 411, 1238, 457)}, color={'cn': (89, 89, 89), 'en': (106, 106, 105), 'jp': (153, 154, 154), 'tw': (89, 89, 89)}, button={'cn': (1187, 411, 1238, 457), 'en': (1187, 417, 1254, 445), 'jp': (1191, 421, 1241, 445), 'tw': (1187, 411, 1238, 457)}, file={'cn': './assets/cn/raid/SURUGA_RAID_NORMAL.png', 'en': './assets/en/raid/SURUGA_RAID_NORMAL.png', 'jp': './assets/jp/raid/SURUGA_RAID_NORMAL.png', 'tw': './assets/cn/raid/SURUGA_RAID_NORMAL.png'}) TICKET_USE_CANCEL = Button(area={'cn': (404, 483, 576, 539), 'en': (454, 492, 522, 531), 'jp': (407, 486, 572, 535), 'tw': (404, 483, 576, 539)}, color={'cn': (169, 171, 174), 'en': (178, 179, 181), 'jp': (165, 166, 169), 'tw': (169, 171, 174)}, button={'cn': (404, 483, 576, 539), 'en': (454, 492, 522, 531), 'jp': (407, 486, 572, 535), 'tw': (404, 483, 576, 539)}, file={'cn': './assets/cn/raid/TICKET_USE_CANCEL.png', 'en': './assets/en/raid/TICKET_USE_CANCEL.png', 'jp': './assets/jp/raid/TICKET_USE_CANCEL.png', 'tw': './assets/tw/raid/TICKET_USE_CANCEL.png'}) -TICKET_USE_CONFIRM = Button(area={'cn': (811, 498, 867, 528), 'en': (809, 493, 872, 534), 'jp': (706, 485, 874, 537), 'tw': (811, 498, 867, 528)}, color={'cn': (99, 133, 180), 'en': (96, 137, 190), 'jp': (90, 137, 196), 'tw': (99, 133, 180)}, button={'cn': (704, 483, 876, 540), 'en': (728, 495, 873, 534), 'jp': (706, 485, 874, 537), 'tw': (704, 483, 876, 540)}, file={'cn': './assets/cn/raid/TICKET_USE_CONFIRM.png', 'en': './assets/en/raid/TICKET_USE_CONFIRM.png', 'jp': './assets/jp/raid/TICKET_USE_CONFIRM.png', 'tw': './assets/tw/raid/TICKET_USE_CONFIRM.png'}) +TICKET_USE_CONFIRM = Button(area={'cn': (739, 514, 802, 546), 'en': (809, 493, 872, 534), 'jp': (706, 485, 874, 537), 'tw': (811, 498, 867, 528)}, color={'cn': (153, 182, 218), 'en': (96, 137, 190), 'jp': (90, 137, 196), 'tw': (99, 133, 180)}, button={'cn': (704, 483, 876, 540), 'en': (728, 495, 873, 534), 'jp': (706, 485, 874, 537), 'tw': (704, 483, 876, 540)}, file={'cn': './assets/cn/raid/TICKET_USE_CONFIRM.png', 'en': './assets/en/raid/TICKET_USE_CONFIRM.png', 'jp': './assets/jp/raid/TICKET_USE_CONFIRM.png', 'tw': './assets/tw/raid/TICKET_USE_CONFIRM.png'}) diff --git a/module/raid/daily.py b/module/raid/daily.py index a75733d7b..1c3776941 100644 --- a/module/raid/daily.py +++ b/module/raid/daily.py @@ -1,18 +1,11 @@ from module.logger import logger -from module.ocr.ocr import Digit -from module.raid.assets import * +from module.raid.raid import raid_ocr from module.raid.run import RaidRun from module.ui.page import page_raid RECORD_OPTION = ('DailyRecord', 'raid') RECORD_SINCE = (0,) -LETTER = (57, 52, 255) -THRESHOLD = 128 -OCR_EASY = Digit(OCR_REMAIN_EASY, letter=LETTER, threshold=THRESHOLD) -OCR_NORMAL = Digit(OCR_REMAIN_NORMAL, letter=LETTER, threshold=THRESHOLD) -OCR_HARD = Digit(OCR_REMAIN_HARD, letter=LETTER, threshold=THRESHOLD) - class RaidDaily(RaidRun): def get_remain(self, mode): @@ -23,17 +16,8 @@ class RaidDaily(RaidRun): Returns: int: """ - if mode == 'easy': - ocr = OCR_EASY - elif mode == 'normal': - ocr = OCR_NORMAL - elif mode == 'hard': - ocr = OCR_HARD - else: - logger.warning(f'Unknown raid mode: {mode}') - exit(1) - - remain = ocr.ocr(self.device.image) + ocr = raid_ocr(raid=self.config.RAID_NAME, mode=mode) + remain, _, _ = ocr.ocr(self.device.image) logger.attr(f'{mode.capitalize()} Remain', remain) return remain diff --git a/module/raid/raid.py b/module/raid/raid.py index 53030b0db..bd27a4c7d 100644 --- a/module/raid/raid.py +++ b/module/raid/raid.py @@ -1,8 +1,11 @@ +import numpy as np + from module.campaign.run import OCR_OIL from module.combat.assets import * from module.combat.combat import Combat from module.logger import logger from module.map.map_operation import MapOperation +from module.ocr.ocr import DigitCounter from module.raid.assets import * from module.ui.assets import RAID_CHECK @@ -11,6 +14,69 @@ class OilExhausted(Exception): pass +class RaidCounter(DigitCounter): + def pre_process(self, image): + image = super().pre_process(image) + image = np.pad(image, ((2, 2), (0, 0)), mode='constant', constant_values=255) + return image + + +def raid_name_shorten(name): + """ + Args: + name (str): Raid name, such as raid_20200624, raid_20210708. + + Returns: + str: Prefix of button name, such as ESSEX, SURUGA. + """ + if name == 'raid_20200624': + return 'ESSEX' + elif name == 'raid_20210708': + return 'SURUGA' + else: + logger.warning(f'Unknown raid name: {name}') + exit(1) + + +def raid_entrance(raid, mode): + """ + Args: + raid (str): Raid name, such as raid_20200624, raid_20210708. + mode (str): easy, normal, hard + + Returns: + Button: + """ + key = f'{raid_name_shorten(raid)}_RAID_{mode.upper()}' + try: + return globals()[key] + except KeyError: + logger.warning(f'Raid entrance asset not exists: {key}') + exit(1) + + +def raid_ocr(raid, mode): + """ + Args: + raid (str): Raid name, such as raid_20200624, raid_20210708. + mode (str): easy, normal, hard + + Returns: + RaidCounter: + """ + raid = raid_name_shorten(raid) + key = f'{raid}_OCR_REMAIN_{mode.upper()}' + try: + button = globals()[key] + if raid == 'ESSEX': + return RaidCounter(button, letter=(57, 52, 255), threshold=128) + elif raid == 'SURUGA': + return RaidCounter(button, letter=(49, 48, 49), threshold=128) + except KeyError: + logger.warning(f'Raid entrance asset not exists: {key}') + exit(1) + + class Raid(MapOperation, Combat): def combat_preparation(self, balance_hp=False, emotion_reduce=False, auto=True, fleet_index=1): """ @@ -72,31 +138,13 @@ class Raid(MapOperation, Combat): return False - @staticmethod - def raid_entrance(mode): - """ - Args: - mode (str): easy, normal, hard - - Returns: - Button: - """ - if mode == 'easy': - return RAID_EASY - elif mode == 'normal': - return RAID_NORMAL - elif mode == 'hard': - return RAID_HARD - else: - logger.warning(f'Unknown raid mode: {mode}') - exit(1) - def raid_enter(self, mode): logger.hr('Raid Enter') + entrance = raid_entrance(raid=self.config.RAID_NAME, mode=mode) while 1: self.device.screenshot() - if self.appear_then_click(self.raid_entrance(mode), offset=(10, 10), interval=5): + if self.appear_then_click(entrance, offset=(10, 10), interval=5): continue if self.appear_then_click(RAID_FLEET_PREPARATION, interval=5): continue diff --git a/module/research/project.py b/module/research/project.py index 45efef8d2..5ac6761af 100644 --- a/module/research/project.py +++ b/module/research/project.py @@ -21,9 +21,12 @@ OCR_RESEARCH = [OCR_RESEARCH_1, OCR_RESEARCH_2, OCR_RESEARCH_3, OCR_RESEARCH_4, OCR_RESEARCH = Ocr(OCR_RESEARCH, name='RESEARCH', threshold=64, alphabet='0123456789BCDEGHQTMIULRF-') RESEARCH_DETAIL_GENRE = [DETAIL_GENRE_B, DETAIL_GENRE_C, DETAIL_GENRE_D, DETAIL_GENRE_E, DETAIL_GENRE_G, DETAIL_GENRE_H_0, DETAIL_GENRE_H_1, DETAIL_GENRE_Q, DETAIL_GENRE_T] -FILTER_REGEX = re.compile('(s[123])?' +FILTER_REGEX = re.compile('(s[1234])?' '-?' - '(neptune|monarch|ibuki|izumo|roon|saintlouis|seattle|georgia|kitakaze|azuma|friedrich|gascogne|champagne|cheshire|drake|mainz|odin)?' + '(neptune|monarch|ibuki|izumo|roon|saintlouis' + '|seattle|georgia|kitakaze|azuma|friedrich' + '|gascogne|champagne|cheshire|drake|mainz|odin' + '|anchorage|hakuryu|agir|august|marcopolo)?' '(dr|pry)?' '([bcdeghqt])?' '-?' @@ -36,7 +39,13 @@ FILTER = Filter(FILTER_REGEX, FILTER_ATTR, FILTER_PRESET) def get_research_series(image): """ Get research series using a simple color detection. - May not be able to detect 'IV' and 'V' in the future research series. + Counting white lines to detect Roman numerals. + + ------- --- -- -- + | | | --> 3 lines | \ / --> 3 lines + | | | | \ / + | | | --> 3 lines | \ / --> 2 lines + ------- --- v Args: image (PIL.Image.Image): @@ -45,18 +54,22 @@ def get_research_series(image): list[int]: Such as [1, 1, 1, 2, 3] """ result = [] - parameters = {'height': 200} + # Set 'prominence = 50' to ignore possible noise. + parameters = {'height': 200, 'prominence': 50} for button in RESEARCH_SERIES: - im = np.array(image.crop(button.area).resize((46, 25)).convert('L')) - mid = np.mean(im[8:17, :], axis=0) - peaks, _ = signal.find_peaks(mid, **parameters) - series = len(peaks) - if 1 <= series <= 3: - result.append(series) + im = color_similarity_2d(image.crop(button.area).resize((46, 25)), color=(255, 255, 255)) + peaks = [len(signal.find_peaks(row, **parameters)[0]) for row in im[2:-2]] + upper, lower = max(peaks), min(peaks) + # print(upper, lower) + if upper == lower and 1 <= upper <= 3: + series = upper + elif upper == 3 and lower == 2: + series = 4 else: - result.append(0) - logger.warning(f'Unknown research series: button={button}, series={series}') + series = 0 + logger.warning(f'Unknown research series: button={button}, upper={upper}, lower={lower}') + result.append(series) return result @@ -126,16 +139,22 @@ def get_research_series_jp(image): Returns: series (string): """ - # Set 'prominence = 15' to ignore possible noise. - parameters = {'height': 200, 'prominence': 15} + # Set 'prominence = 50' to ignore possible noise. + parameters = {'height': 200, 'prominence': 50} + area = SERIES_DETAIL.area - im = np.array(image.crop(area).resize((46, 25)).convert('L')) - mid = np.mean(im[8:17, :], axis=0) - peaks, _ = signal.find_peaks(mid, **parameters) - series = len(peaks) - if not 1 <= series <= 3: - logger.warning(f'Unknown research series: series={series}') + im = color_similarity_2d(image.crop(area).resize((46, 25)), color=(255, 255, 255)) + peaks = [len(signal.find_peaks(row, **parameters)[0]) for row in im[2:-2]] + upper, lower = max(peaks), min(peaks) + # print(upper, lower) + if upper == lower and 1 <= upper <= 3: + series = upper + elif upper == 3 and lower == 2: + series = 4 + else: series = 0 + logger.warning(f'Unknown research series: upper={upper}, lower={lower}') + return f'S{series}' @@ -266,9 +285,12 @@ def research_jp_detect(image): class ResearchProject: REGEX_SHIP = re.compile( - '(neptune|monarch|ibuki|izumo|roon|saintlouis|seattle|georgia|kitakaze|azuma|friedrich|gascogne|champagne|cheshire|drake|mainz|odin)') + '(neptune|monarch|ibuki|izumo|roon|saintlouis' + '|seattle|georgia|kitakaze|azuma|friedrich' + '|gascogne|champagne|cheshire|drake|mainz|odin' + '|anchorage|hakuryu|agir|august|marcopolo)') REGEX_INPUT = re.compile('(coin|cube|part)') - DR_SHIP = ['azuma', 'friedrich', 'drake'] + DR_SHIP = ['azuma', 'friedrich', 'drake', 'hakuryu', 'agir'] def __init__(self, name, series): """ @@ -368,8 +390,9 @@ class ResearchProjectJp: SHIP_S1 = ['neptune', 'monarch', 'ibuki', 'izumo', 'roon', 'saintlouis'] SHIP_S2 = ['seattle', 'georgia', 'kitakaze', 'azuma', 'friedrich', 'gascogne'] SHIP_S3 = ['champagne', 'cheshire', 'drake', 'mainz', 'odin'] - SHIP_ALL = SHIP_S1 + SHIP_S2 + SHIP_S3 - DR_SHIP = ['azuma', 'friedrich', 'drake'] + SHIP_S4 = ['anchorage', 'hakuryu', 'agir', 'august', 'marcopolo'] + SHIP_ALL = SHIP_S1 + SHIP_S2 + SHIP_S3 + SHIP_S4 + DR_SHIP = ['azuma', 'friedrich', 'drake', 'hakuryu', 'agir'] def __init__(self): self.valid = True diff --git a/module/research/project_data.py b/module/research/project_data.py index 1a744a3c3..fdb22070d 100644 --- a/module/research/project_data.py +++ b/module/research/project_data.py @@ -1,252 +1,289 @@ -# This file is generated by dev_tools.research_extractor. -# Don't modified it manually. - -LIST_RESEARCH_PROJECT = [ - {'name': 'C-153-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'C-153-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'C-185-MI', 'series': 1, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'C-185-MI', 'series': 1, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'B-622-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 3 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-636-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 4 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-654-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 5 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-682-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 6 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-235-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 7 stages 5 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-268-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 8 stages 5 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-128-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 9 stages 4 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-164-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 10 stages 4 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'T-018-MI', 'series': 1, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'T-384-MI', 'series': 1, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'T-249-MI', 'series': 1, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-031-MI', 'series': 1, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'E-315-MI', 'series': 1, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'E-131-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 381mm Main Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 381mm AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-159-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 410mm Mounted Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 410mm Mounted Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-174-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T2 Twin 203mm Main Gun (SK C) Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 203mm Main Gun (SK C) Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-192-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 203mm Advanced Main Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 203mm AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-118-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 152mm Main Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 152mm AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-144-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T2 Twin 100mm (Type 98) AA Gun Design', 'amount': 45}], 'output': [{'name': 'T0 100mm Mounted AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'G-412-MI', 'series': 1, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-412-MI', 'series': 1, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-236-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-236-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-531-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'G-531-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-718-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-731-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-744-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-759-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-774-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-792-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-318-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-331-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-344-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-359-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-374-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-392-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-302-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-310-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-351-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-368-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-389-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-202-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-210-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-251-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-268-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-289-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-002-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-010-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-051-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-068-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-089-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'H-387-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-387-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-339-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-339-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'C-153-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'C-153-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'C-185-MI', 'series': 2, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'C-185-MI', 'series': 2, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'B-622-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 3 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-636-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 4 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-654-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 5 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-682-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 6 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-235-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 7 stages 5 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-268-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 8 stages 5 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-128-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 9 stages 4 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-164-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 10 stages 4 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'T-018-MI', 'series': 2, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'T-384-MI', 'series': 2, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'T-249-MI', 'series': 2, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-031-MI', 'series': 2, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'E-315-MI', 'series': 2, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'E-179-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 283mm Main Gun (SK C/34) Design', 'amount': 45}], 'output': [{'name': 'Prototype Twin 406mm Main Gun (SK C/34) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-105-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 152mm Main Gun Design', 'amount': 45}], 'output': [{'name': 'Prototype Triple 152mm Main Gun (DP MK17) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-146-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 40mm Bofors Gun Design', 'amount': 45}], 'output': [{'name': 'Prototype 40mm AA Gun (Type 5) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-157-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 203mm Mounted Gun Design', 'amount': 45}], 'output': [{'name': 'Prototype Triple 310mm Main Gun (Type 0) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-118-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 37mm AA 70K Design', 'amount': 45}], 'output': [{'name': 'Twin 37mm AA Gun (Mle 1936) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'G-412-MI', 'series': 2, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-412-MI', 'series': 2, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-236-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-236-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-531-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'G-531-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-705-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-712-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-746-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-757-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-779-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-794-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-305-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-312-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-346-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-357-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-379-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-394-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-302-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-310-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-351-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-368-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-389-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-202-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-210-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-251-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-268-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-289-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-002-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-010-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-051-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-068-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-089-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'H-387-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-387-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-339-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-339-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'C-153-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'C-153-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'C-185-MI', 'series': 3, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'C-185-MI', 'series': 3, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'B-622-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 3 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-636-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 4 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-654-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 5 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-682-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 6 stages 6 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'B-235-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 7 stages 5 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-268-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 8 stages 5 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-128-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 9 stages 4 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-164-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 10 stages 4 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'T-018-MI', 'series': 3, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'T-384-MI', 'series': 3, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'T-249-MI', 'series': 3, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'E-031-MI', 'series': 3, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'E-315-MI', 'series': 3, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'G-412-MI', 'series': 3, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-412-MI', 'series': 3, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-236-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-236-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'G-531-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'G-531-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-721-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-722-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-772-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-777-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-795-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, - {'name': 'D-321-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-322-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-372-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-377-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-395-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-302-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-310-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-351-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-368-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-389-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-202-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-210-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-251-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-268-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-289-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, - {'name': 'Q-002-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-010-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-051-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-068-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'Q-089-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'H-387-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-387-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-339-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-339-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'C-038-RF', 'series': 1, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'C-038-RF', 'series': 1, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'B-351-RF', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 11 stages 3 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-397-RF', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 12 stages 3 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-418-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-431-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-444-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-459-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-474-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-492-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'H-207-RF', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-207-RF', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'D-018-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-031-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-044-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-059-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-074-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-092-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-002-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-010-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-051-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-068-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-089-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'H-085-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-085-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'B-397-RF', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 13 stages 2 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'C-038-RF', 'series': 2, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'C-038-RF', 'series': 2, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'B-351-RF', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 11 stages 3 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-397-RF', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 12 stages 3 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-405-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-412-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-446-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-457-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-479-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-494-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'H-207-RF', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-207-RF', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'D-005-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-012-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-046-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-057-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-079-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-094-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-002-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-010-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-051-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-068-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-089-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'H-022-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-022-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'B-397-RF', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 13 stages 2 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'C-038-RF', 'series': 3, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'C-038-RF', 'series': 3, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, - {'name': 'B-351-RF', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 11 stages 3 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'B-397-RF', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 12 stages 3 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-421-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-422-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-472-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-477-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-495-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'H-207-RF', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-207-RF', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'D-021-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-022-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-072-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-077-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'D-095-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Blueprint'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-002-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-010-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-051-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-068-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'Q-089-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, - {'name': 'H-060-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'H-060-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, - {'name': 'B-397-RF', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 13 stages 2 times on Normal Mode.', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, -] +# This file is generated by dev_tools.research_extractor. +# Don't modified it manually. + +LIST_RESEARCH_PROJECT = [ + {'name': 'C-153-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'C-185-MI', 'series': 1, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-622-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 3 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-636-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 4 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-654-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 5 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-682-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 6 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-235-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 7 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-268-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 8 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-128-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 9 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-164-MI', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 10 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'T-018-MI', 'series': 1, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-384-MI', 'series': 1, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-249-MI', 'series': 1, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-031-MI', 'series': 1, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-315-MI', 'series': 1, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-131-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 381mm Main Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 381mm AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-159-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 410mm Mounted Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 410mm Mounted Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-174-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T2 Twin 203mm Main Gun (SK C) Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 203mm Main Gun (SK C) Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-192-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 203mm Advanced Main Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 203mm AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-118-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 152mm Main Gun Design', 'amount': 45}], 'output': [{'name': 'T0 Prototype Triple 152mm AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-144-MI', 'series': 1, 'time': 21600, 'task': '', 'input': [{'name': 'T2 Twin 100mm (Type 98) AA Gun Design', 'amount': 45}], 'output': [{'name': 'T0 100mm Mounted AA Gun Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'G-412-MI', 'series': 1, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-236-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-531-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-718-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-731-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-744-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-759-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-774-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-792-MI', 'series': 1, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-318-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-331-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-344-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-359-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-374-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-392-MI', 'series': 1, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-302-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-310-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-351-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-368-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-389-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-202-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-210-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-251-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-268-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-289-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-002-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-010-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-051-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-068-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-089-MI', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'H-387-MI', 'series': 1, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'H-339-MI', 'series': 1, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-153-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'C-185-MI', 'series': 2, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-622-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 3 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-636-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 4 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-654-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 5 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-682-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 6 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-235-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 7 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-268-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 8 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-128-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 9 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-164-MI', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 10 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'T-018-MI', 'series': 2, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-384-MI', 'series': 2, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-249-MI', 'series': 2, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-031-MI', 'series': 2, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-315-MI', 'series': 2, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-179-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 283mm Main Gun (SK C/34) Design', 'amount': 45}], 'output': [{'name': 'Prototype Twin 406mm Main Gun (SK C/34) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-105-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 152mm Main Gun Design', 'amount': 45}], 'output': [{'name': 'Prototype Triple 152mm Main Gun (DP MK17) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-146-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Twin 40mm Bofors Gun Design', 'amount': 45}], 'output': [{'name': 'Prototype 40mm AA Gun (Type 5) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-157-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': 'T3 203mm Mounted Gun Design', 'amount': 45}], 'output': [{'name': 'Prototype Triple 310mm Main Gun (Type 0) T0 Design'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-194-MI', 'series': 2, 'time': 21600, 'task': '', 'input': [{'name': '双联37mm手拉机枪T3设计图', 'amount': 45}], 'output': [{'name': '双联37mm高射炮Mle1936T0设计图'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'G-412-MI', 'series': 2, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-236-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-531-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-705-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-712-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-746-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-757-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-779-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-794-MI', 'series': 2, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-305-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-312-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-346-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-357-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-379-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-394-MI', 'series': 2, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-302-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-310-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-351-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-368-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-389-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-202-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-210-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-251-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-268-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-289-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-002-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-010-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-051-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-068-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-089-MI', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'H-387-MI', 'series': 2, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'H-339-MI', 'series': 2, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-153-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'C-185-MI', 'series': 3, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-622-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 3 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-636-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 4 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-654-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 5 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-682-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 6 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-235-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 7 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-268-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 8 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-128-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 9 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-164-MI', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 10 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'T-018-MI', 'series': 3, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-384-MI', 'series': 3, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-249-MI', 'series': 3, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-031-MI', 'series': 3, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-315-MI', 'series': 3, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-121-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [{'name': '双联装203mm主炮T3设计图', 'amount': 45}], 'output': [{'name': '试作型双联装234mm主炮T0设计图'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-123-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [{'name': '双联装120mm主炮T3设计图', 'amount': 45}], 'output': [{'name': '双联装114mm高平两用炮MarkIVT0设计图'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-124-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [{'name': '四联40mm博福斯对空机炮T3设计图', 'amount': 45}], 'output': [{'name': '六联装40mm博福斯对空机炮T0设计图'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-177-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [{'name': 'T3 Triple 283mm Main Gun (SK C/34) Design', 'amount': 45}], 'output': [{'name': '试作型三联装305mmSKC39主炮T0设计图'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-195-MI', 'series': 3, 'time': 21600, 'task': '', 'input': [{'name': '四联装330mm主炮Mle1931T3设计图', 'amount': 45}], 'output': [{'name': '试作型三联装406mm/50主炮T0设计图'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'G-412-MI', 'series': 3, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-236-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-531-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-721-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-722-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-772-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-777-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-795-MI', 'series': 3, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-321-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-322-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-372-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-377-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-395-MI', 'series': 3, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-302-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-310-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-351-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-368-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-389-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-202-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-210-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-251-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-268-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-289-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-002-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-010-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-051-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-068-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-089-MI', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'H-387-MI', 'series': 3, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'H-339-MI', 'series': 3, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-153-MI', 'series': 4, 'time': 21600, 'task': '', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'C-185-MI', 'series': 4, 'time': 28800, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-622-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 3 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-636-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 4 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-654-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 5 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-682-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 6 or onward stages for 6 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'B-235-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 7 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-268-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 8 or onward stages for 5 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-128-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 9 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-164-MI', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 10 or onward stages for 4 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'T-018-MI', 'series': 4, 'time': 10800, 'task': 'Complete 2 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-384-MI', 'series': 4, 'time': 14400, 'task': 'Complete 4 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'T-249-MI', 'series': 4, 'time': 21600, 'task': 'Complete 6 commissions.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'E-031-MI', 'series': 4, 'time': 7200, 'task': 'Scrap 8 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'E-315-MI', 'series': 4, 'time': 7200, 'task': 'Scrap 15 pieces of gear.', 'input': [], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'G-412-MI', 'series': 4, 'time': 5400, 'task': '', 'input': [{'name': 'Coins', 'amount': 1500}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-236-MI', 'series': 4, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'G-531-MI', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'Coins', 'amount': 6000}], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-708-MI', 'series': 4, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Anchorage'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-763-MI', 'series': 4, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Hakuryuu'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-775-MI', 'series': 4, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Agir'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-782-MI', 'series': 4, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - August von Parseval'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-768-MI', 'series': 4, 'time': 9000, 'task': '', 'input': [{'name': 'Coins', 'amount': 3000}], 'output': [{'name': 'Blueprint - Marco Polo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}]}, + {'name': 'D-308-MI', 'series': 4, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Anchorage'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-363-MI', 'series': 4, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Hakuryuu'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-375-MI', 'series': 4, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Agir'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-382-MI', 'series': 4, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - August von Parseval'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-368-MI', 'series': 4, 'time': 18000, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}], 'output': [{'name': 'Blueprint - Marco Polo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-302-MI', 'series': 4, 'time': 3600, 'task': '', 'input': [{'name': 'T1 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-310-MI', 'series': 4, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-351-MI', 'series': 4, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-368-MI', 'series': 4, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-389-MI', 'series': 4, 'time': 3600, 'task': '', 'input': [{'name': 'T1 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-202-MI', 'series': 4, 'time': 7200, 'task': '', 'input': [{'name': 'T2 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-210-MI', 'series': 4, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-251-MI', 'series': 4, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-268-MI', 'series': 4, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-289-MI', 'series': 4, 'time': 7200, 'task': '', 'input': [{'name': 'T2 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T2'}, {'name': 'Coins'}]}, + {'name': 'Q-002-MI', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-010-MI', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-051-MI', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-068-MI', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'Q-089-MI', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'H-387-MI', 'series': 4, 'time': 3600, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T1 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'H-339-MI', 'series': 4, 'time': 7200, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 6}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T2 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-038-RF', 'series': 1, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-351-RF', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 11 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-397-RF', 'series': 1, 'time': 14400, 'task': 'Clear Chapter 12 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-418-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-431-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-444-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-459-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-474-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-492-RF', 'series': 1, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-207-RF', 'series': 1, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'D-018-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Neptune'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-031-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Monarch'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-044-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Ibuki'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-059-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Izumo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-074-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Roon'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-092-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Saint Louis'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-002-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-010-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-051-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-068-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-089-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-085-UL', 'series': 1, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-038-RF', 'series': 2, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-351-RF', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 11 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-397-RF', 'series': 2, 'time': 14400, 'task': 'Clear Chapter 12 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-405-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-412-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-446-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-457-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-479-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-494-RF', 'series': 2, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-207-RF', 'series': 2, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'D-005-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Seattle'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-012-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Georgia'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-046-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Kitakaze'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-057-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Azuma'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-079-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Friedrich der Große'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-094-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Gascogne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-002-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-010-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-051-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-068-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-089-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-022-UL', 'series': 2, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-038-RF', 'series': 3, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-351-RF', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 11 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-397-RF', 'series': 3, 'time': 14400, 'task': 'Clear Chapter 12 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-421-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-422-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-472-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-477-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-495-RF', 'series': 3, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-207-RF', 'series': 3, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'D-021-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Cheshire'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-022-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Drake'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-072-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Mainz'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-077-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Odin'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-095-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Champagne'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-002-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-010-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-051-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-068-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-089-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-060-UL', 'series': 3, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'C-038-RF', 'series': 4, 'time': 43200, 'task': '', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}, {'name': 'Coins'}]}, + {'name': 'B-351-RF', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 11 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'B-397-RF', 'series': 4, 'time': 14400, 'task': 'Clear Chapter 12 or onward stages for 3 times on Normal Mode ', 'input': [], 'output': [{'name': 'Random Blueprint'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-408-RF', 'series': 4, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Anchorage'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-463-RF', 'series': 4, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Hakuryuu'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-475-RF', 'series': 4, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Agir'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-482-RF', 'series': 4, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - August von Parseval'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-468-RF', 'series': 4, 'time': 28800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}], 'output': [{'name': 'Blueprint - Marco Polo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-207-RF', 'series': 4, 'time': 14400, 'task': '', 'input': [{'name': 'Wisdom Cube', 'amount': 10}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, + {'name': 'D-008-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Anchorage'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-063-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Hakuryuu'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-075-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Agir'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-082-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - August von Parseval'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'D-068-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'Wisdom Cube', 'amount': 5}], 'output': [{'name': 'Blueprint - Marco Polo'}, {'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-002-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 General Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-010-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Main Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-051-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Torpedo Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-068-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Anti-Air Gun Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'Q-089-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 5000}, {'name': 'T3 Aircraft Part', 'amount': 20}], 'output': [{'name': 'Random Gear Design'}, {'name': 'Random Gear Design T3'}]}, + {'name': 'H-063-UL', 'series': 4, 'time': 1800, 'task': '', 'input': [{'name': 'Coins', 'amount': 8000}, {'name': 'Wisdom Cube', 'amount': 3}], 'output': [{'name': 'Random Blueprint'}, {'name': 'T3 Mystery Retrofit Blueprint'}, {'name': 'Cognitive Chips'}]}, +] diff --git a/module/research/research.py b/module/research/research.py index 389a24142..50affc07d 100644 --- a/module/research/research.py +++ b/module/research/research.py @@ -106,6 +106,8 @@ class RewardResearch(ResearchSelector): executed = False if save_get_items: self.device.save_screenshot('research_project', interval=0, to_base_folder=True) + self.stat.add(self.device.image) + self.stat.upload() while 1: if skip_first_screenshot: skip_first_screenshot = False @@ -226,6 +228,7 @@ class RewardResearch(ResearchSelector): if self._research_has_finished_at(RESEARCH_STATUS[self._research_finished_index]): if save_get_items: self.device.save_screenshot('research_project', interval=0, to_base_folder=True) + self.stat.add(self.device.image) self.device.click(RESEARCH_ENTRANCE[self._research_finished_index]) continue @@ -238,6 +241,8 @@ class RewardResearch(ResearchSelector): if save_get_items: self.device.screenshot() self.device.save_screenshot('research_items', to_base_folder=True) + self.stat.add(self.device.image) + self.stat.upload() self.device.click(GET_ITEMS_RESEARCH_SAVE) executed = True continue @@ -250,6 +255,8 @@ class RewardResearch(ResearchSelector): if save_get_items: self.device.screenshot() self.device.save_screenshot('research_items', to_base_folder=True) + self.stat.add(self.device.image) + self.stat.upload() self.device.click(GET_ITEMS_RESEARCH_SAVE) executed = True continue @@ -262,10 +269,13 @@ class RewardResearch(ResearchSelector): if save_get_items: self.device.screenshot() self.device.save_screenshot('research_items', to_base_folder=True) + self.stat.add(self.device.image) self.device.swipe((0, 250), box=ITEMS_3_SWIPE.area, random_range=(-10, -10, 10, 10), padding=0) self.device.sleep(2) self.device.screenshot() self.device.save_screenshot('research_items', interval=0, to_base_folder=True) + self.stat.add(self.device.image) + self.stat.upload() self.device.click(GET_ITEMS_RESEARCH_SAVE) executed = True continue @@ -276,6 +286,7 @@ class RewardResearch(ResearchSelector): break self.device.screenshot_interval_set(0.1) + self.stat.clear() def research_reward(self): """ diff --git a/module/reward/assets.py b/module/reward/assets.py index f7f478c3c..f86008032 100644 --- a/module/reward/assets.py +++ b/module/reward/assets.py @@ -19,28 +19,28 @@ DORM_FEED_CHECK = Button(area={'cn': (328, 247, 390, 279), 'en': (307, 248, 410, DORM_FEED_ENTER = Button(area={'cn': (64, 623, 127, 655), 'en': (59, 649, 138, 671), 'jp': (66, 626, 129, 659), 'tw': (63, 623, 128, 657)}, color={'cn': (182, 142, 136), 'en': (193, 158, 158), 'jp': (197, 155, 149), 'tw': (179, 144, 139)}, button={'cn': (64, 623, 127, 655), 'en': (59, 649, 138, 671), 'jp': (66, 626, 129, 659), 'tw': (63, 623, 128, 657)}, file={'cn': './assets/cn/reward/DORM_FEED_ENTER.png', 'en': './assets/en/reward/DORM_FEED_ENTER.png', 'jp': './assets/jp/reward/DORM_FEED_ENTER.png', 'tw': './assets/tw/reward/DORM_FEED_ENTER.png'}) DORM_RED_DOT = Button(area={'cn': (734, 215, 767, 248), 'en': (734, 215, 767, 248), 'jp': (734, 215, 767, 248), 'tw': (734, 215, 767, 248)}, color={'cn': (130, 89, 94), 'en': (130, 89, 94), 'jp': (130, 89, 94), 'tw': (130, 89, 94)}, button={'cn': (734, 215, 767, 248), 'en': (734, 215, 767, 248), 'jp': (734, 215, 767, 248), 'tw': (734, 215, 767, 248)}, file={'cn': './assets/cn/reward/DORM_RED_DOT.png', 'en': './assets/en/reward/DORM_RED_DOT.png', 'jp': './assets/jp/reward/DORM_RED_DOT.png', 'tw': './assets/tw/reward/DORM_RED_DOT.png'}) EXP_INFO_S_REWARD = Button(area={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, color={'cn': (233, 241, 127), 'en': (89, 115, 159), 'jp': (233, 241, 127), 'tw': (233, 241, 127)}, button={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, file={'cn': './assets/cn/reward/EXP_INFO_S_REWARD.png', 'en': './assets/en/reward/EXP_INFO_S_REWARD.png', 'jp': './assets/jp/reward/EXP_INFO_S_REWARD.png', 'tw': './assets/tw/reward/EXP_INFO_S_REWARD.png'}) -MEOWFFICER_BUY = Button(area={'cn': (864, 461, 957, 493), 'en': (864, 460, 957, 492), 'jp': (863, 460, 957, 494), 'tw': (864, 461, 957, 493)}, color={'cn': (241, 217, 105), 'en': (231, 207, 105), 'jp': (241, 216, 107), 'tw': (241, 217, 105)}, button={'cn': (864, 461, 957, 493), 'en': (864, 460, 957, 492), 'jp': (863, 460, 957, 494), 'tw': (864, 461, 957, 493)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY.png', 'en': './assets/en/reward/MEOWFFICER_BUY.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY.png'}) -MEOWFFICER_BUY_ENTER = Button(area={'cn': (995, 588, 1104, 657), 'en': (1008, 623, 1072, 655), 'jp': (999, 600, 1102, 658), 'tw': (998, 621, 1051, 661)}, color={'cn': (206, 177, 135), 'en': (199, 163, 137), 'jp': (200, 172, 130), 'tw': (196, 157, 131)}, button={'cn': (995, 588, 1104, 657), 'en': (1008, 623, 1072, 655), 'jp': (999, 600, 1102, 658), 'tw': (998, 621, 1051, 661)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY_ENTER.png', 'en': './assets/en/reward/MEOWFFICER_BUY_ENTER.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY_ENTER.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY_ENTER.png'}) +MEOWFFICER_BUY = Button(area={'cn': (864, 461, 957, 493), 'en': (864, 460, 957, 492), 'jp': (863, 460, 957, 494), 'tw': (881, 465, 938, 492)}, color={'cn': (241, 217, 105), 'en': (231, 207, 105), 'jp': (241, 216, 107), 'tw': (222, 196, 94)}, button={'cn': (864, 461, 957, 493), 'en': (864, 460, 957, 492), 'jp': (863, 460, 957, 494), 'tw': (881, 465, 938, 492)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY.png', 'en': './assets/en/reward/MEOWFFICER_BUY.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY.png'}) +MEOWFFICER_BUY_ENTER = Button(area={'cn': (995, 588, 1104, 657), 'en': (1008, 623, 1072, 655), 'jp': (999, 600, 1102, 658), 'tw': (1016, 618, 1079, 652)}, color={'cn': (206, 177, 135), 'en': (199, 163, 137), 'jp': (200, 172, 130), 'tw': (190, 159, 144)}, button={'cn': (995, 588, 1104, 657), 'en': (1008, 623, 1072, 655), 'jp': (999, 600, 1102, 658), 'tw': (1016, 618, 1079, 652)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY_ENTER.png', 'en': './assets/en/reward/MEOWFFICER_BUY_ENTER.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY_ENTER.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY_ENTER.png'}) MEOWFFICER_BUY_NEXT = Button(area={'cn': (937, 281, 961, 302), 'en': (937, 281, 961, 302), 'jp': (932, 280, 958, 304), 'tw': (937, 281, 961, 302)}, color={'cn': (246, 220, 140), 'en': (246, 220, 140), 'jp': (254, 226, 139), 'tw': (246, 220, 140)}, button={'cn': (937, 281, 961, 302), 'en': (937, 281, 961, 302), 'jp': (932, 280, 958, 304), 'tw': (937, 281, 961, 302)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY_NEXT.png', 'en': './assets/en/reward/MEOWFFICER_BUY_NEXT.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY_NEXT.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY_NEXT.png'}) MEOWFFICER_BUY_PREV = Button(area={'cn': (816, 279, 837, 305), 'en': (816, 279, 837, 305), 'jp': (815, 280, 842, 304), 'tw': (816, 279, 837, 305)}, color={'cn': (254, 224, 123), 'en': (254, 224, 123), 'jp': (254, 223, 123), 'tw': (254, 224, 123)}, button={'cn': (816, 279, 837, 305), 'en': (816, 279, 837, 305), 'jp': (815, 280, 842, 304), 'tw': (816, 279, 837, 305)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY_PREV.png', 'en': './assets/en/reward/MEOWFFICER_BUY_PREV.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY_PREV.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY_PREV.png'}) -MEOWFFICER_BUY_SKIP = Button(area={'cn': (594, 462, 687, 494), 'en': (594, 462, 687, 494), 'jp': (593, 462, 689, 496), 'tw': (594, 462, 687, 494)}, color={'cn': (238, 216, 104), 'en': (216, 197, 99), 'jp': (232, 211, 105), 'tw': (238, 216, 104)}, button={'cn': (594, 462, 687, 494), 'en': (594, 462, 687, 494), 'jp': (593, 462, 689, 496), 'tw': (594, 462, 687, 494)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY_SKIP.png', 'en': './assets/en/reward/MEOWFFICER_BUY_SKIP.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY_SKIP.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY_SKIP.png'}) -MEOWFFICER_CONFIRM = Button(area={'cn': (741, 434, 827, 468), 'en': (747, 438, 821, 463), 'jp': (740, 434, 827, 469), 'tw': (741, 434, 827, 468)}, color={'cn': (239, 216, 107), 'en': (222, 197, 97), 'jp': (235, 210, 107), 'tw': (239, 216, 107)}, button={'cn': (741, 434, 827, 468), 'en': (747, 438, 821, 463), 'jp': (740, 434, 827, 469), 'tw': (741, 434, 827, 468)}, file={'cn': './assets/cn/reward/MEOWFFICER_CONFIRM.png', 'en': './assets/en/reward/MEOWFFICER_CONFIRM.png', 'jp': './assets/jp/reward/MEOWFFICER_CONFIRM.png', 'tw': './assets/tw/reward/MEOWFFICER_CONFIRM.png'}) +MEOWFFICER_BUY_SKIP = Button(area={'cn': (594, 462, 687, 494), 'en': (594, 462, 687, 494), 'jp': (593, 462, 689, 496), 'tw': (609, 469, 672, 494)}, color={'cn': (238, 216, 104), 'en': (216, 197, 99), 'jp': (232, 211, 105), 'tw': (222, 200, 87)}, button={'cn': (594, 462, 687, 494), 'en': (594, 462, 687, 494), 'jp': (593, 462, 689, 496), 'tw': (609, 469, 672, 494)}, file={'cn': './assets/cn/reward/MEOWFFICER_BUY_SKIP.png', 'en': './assets/en/reward/MEOWFFICER_BUY_SKIP.png', 'jp': './assets/jp/reward/MEOWFFICER_BUY_SKIP.png', 'tw': './assets/tw/reward/MEOWFFICER_BUY_SKIP.png'}) +MEOWFFICER_CONFIRM = Button(area={'cn': (741, 434, 827, 468), 'en': (747, 438, 821, 463), 'jp': (740, 434, 827, 469), 'tw': (752, 440, 815, 465)}, color={'cn': (239, 216, 107), 'en': (222, 197, 97), 'jp': (235, 210, 107), 'tw': (216, 191, 96)}, button={'cn': (741, 434, 827, 468), 'en': (747, 438, 821, 463), 'jp': (740, 434, 827, 469), 'tw': (752, 440, 815, 465)}, file={'cn': './assets/cn/reward/MEOWFFICER_CONFIRM.png', 'en': './assets/en/reward/MEOWFFICER_CONFIRM.png', 'jp': './assets/jp/reward/MEOWFFICER_CONFIRM.png', 'tw': './assets/tw/reward/MEOWFFICER_CONFIRM.png'}) MEOWFFICER_STATUS = Button(area={'cn': (987, 44, 1035, 104), 'en': (987, 44, 1035, 104), 'jp': (987, 44, 1035, 104), 'tw': (987, 44, 1035, 104)}, color={'cn': (252, 244, 232), 'en': (252, 244, 232), 'jp': (252, 244, 232), 'tw': (252, 244, 232)}, button={'cn': (987, 44, 1035, 104), 'en': (987, 44, 1035, 104), 'jp': (987, 44, 1035, 104), 'tw': (987, 44, 1035, 104)}, file={'cn': './assets/cn/reward/MEOWFFICER_STATUS.png', 'en': './assets/en/reward/MEOWFFICER_STATUS.png', 'jp': './assets/jp/reward/MEOWFFICER_STATUS.png', 'tw': './assets/tw/reward/MEOWFFICER_STATUS.png'}) MEOWFFICER_TRAIN_CLICK_SAFE_AREA = Button(area={'cn': (224, 184, 242, 347), 'en': (224, 184, 242, 347), 'jp': (224, 184, 242, 347), 'tw': (224, 184, 242, 347)}, color={'cn': (242, 237, 237), 'en': (242, 237, 237), 'jp': (242, 237, 237), 'tw': (242, 237, 237)}, button={'cn': (224, 184, 242, 347), 'en': (224, 184, 242, 347), 'jp': (224, 184, 242, 347), 'tw': (224, 184, 242, 347)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_CLICK_SAFE_AREA.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_CLICK_SAFE_AREA.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_CLICK_SAFE_AREA.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_CLICK_SAFE_AREA.png'}) -MEOWFFICER_TRAIN_COMPLETE = Button(area={'cn': (255, 188, 353, 215), 'en': (253, 187, 357, 216), 'jp': (255, 188, 353, 215), 'tw': (255, 188, 353, 215)}, color={'cn': (134, 216, 154), 'en': (179, 215, 163), 'jp': (134, 216, 154), 'tw': (134, 216, 154)}, button={'cn': (255, 188, 353, 215), 'en': (253, 187, 357, 216), 'jp': (255, 188, 353, 215), 'tw': (255, 188, 353, 215)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_COMPLETE.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_COMPLETE.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_COMPLETE.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_COMPLETE.png'}) +MEOWFFICER_TRAIN_COMPLETE = Button(area={'cn': (255, 188, 353, 215), 'en': (253, 187, 357, 216), 'jp': (255, 188, 353, 215), 'tw': (261, 196, 365, 222)}, color={'cn': (134, 216, 154), 'en': (179, 215, 163), 'jp': (134, 216, 154), 'tw': (132, 213, 149)}, button={'cn': (255, 188, 353, 215), 'en': (253, 187, 357, 216), 'jp': (255, 188, 353, 215), 'tw': (261, 196, 365, 222)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_COMPLETE.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_COMPLETE.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_COMPLETE.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_COMPLETE.png'}) MEOWFFICER_TRAIN_ENTER = Button(area={'cn': (1142, 581, 1258, 651), 'en': (1178, 616, 1266, 648), 'jp': (1140, 579, 1262, 644), 'tw': (1148, 601, 1246, 653)}, color={'cn': (193, 167, 113), 'en': (212, 175, 96), 'jp': (196, 171, 119), 'tw': (199, 166, 99)}, button={'cn': (1142, 581, 1258, 651), 'en': (1178, 616, 1266, 648), 'jp': (1140, 579, 1262, 644), 'tw': (1148, 601, 1246, 653)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_ENTER.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_ENTER.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_ENTER.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_ENTER.png'}) -MEOWFFICER_TRAIN_FILL_QUEUE = Button(area={'cn': (780, 548, 859, 567), 'en': (772, 544, 866, 568), 'jp': (780, 548, 859, 567), 'tw': (780, 548, 859, 567)}, color={'cn': (205, 179, 89), 'en': (222, 198, 100), 'jp': (205, 179, 89), 'tw': (205, 179, 89)}, button={'cn': (780, 548, 859, 567), 'en': (772, 544, 866, 568), 'jp': (780, 548, 859, 567), 'tw': (780, 548, 859, 567)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png'}) -MEOWFFICER_TRAIN_FINISH_ALL = Button(area={'cn': (780, 548, 859, 567), 'en': (777, 544, 862, 569), 'jp': (780, 548, 859, 567), 'tw': (780, 548, 859, 567)}, color={'cn': (200, 173, 87), 'en': (224, 199, 99), 'jp': (200, 173, 87), 'tw': (200, 173, 87)}, button={'cn': (780, 548, 859, 567), 'en': (777, 544, 862, 569), 'jp': (780, 548, 859, 567), 'tw': (780, 548, 859, 567)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_FINISH_ALL.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_FINISH_ALL.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_FINISH_ALL.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_FINISH_ALL.png'}) -MEOWFFICER_TRAIN_START = Button(area={'cn': (933, 548, 1012, 566), 'en': (913, 541, 1032, 570), 'jp': (933, 548, 1012, 566), 'tw': (933, 548, 1012, 566)}, color={'cn': (194, 167, 84), 'en': (225, 200, 99), 'jp': (194, 167, 84), 'tw': (194, 167, 84)}, button={'cn': (933, 548, 1012, 566), 'en': (913, 541, 1032, 570), 'jp': (933, 548, 1012, 566), 'tw': (933, 548, 1012, 566)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_START.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_START.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_START.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_START.png'}) +MEOWFFICER_TRAIN_FILL_QUEUE = Button(area={'cn': (780, 548, 859, 567), 'en': (772, 544, 866, 568), 'jp': (780, 548, 859, 567), 'tw': (778, 545, 863, 571)}, color={'cn': (205, 179, 89), 'en': (222, 198, 100), 'jp': (205, 179, 89), 'tw': (213, 187, 95)}, button={'cn': (780, 548, 859, 567), 'en': (772, 544, 866, 568), 'jp': (780, 548, 859, 567), 'tw': (778, 545, 863, 571)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_FILL_QUEUE.png'}) +MEOWFFICER_TRAIN_FINISH_ALL = Button(area={'cn': (780, 548, 859, 567), 'en': (777, 544, 862, 569), 'jp': (780, 548, 859, 567), 'tw': (780, 550, 870, 576)}, color={'cn': (200, 173, 87), 'en': (224, 199, 99), 'jp': (200, 173, 87), 'tw': (213, 188, 99)}, button={'cn': (780, 548, 859, 567), 'en': (777, 544, 862, 569), 'jp': (780, 548, 859, 567), 'tw': (780, 550, 870, 576)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_FINISH_ALL.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_FINISH_ALL.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_FINISH_ALL.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_FINISH_ALL.png'}) +MEOWFFICER_TRAIN_START = Button(area={'cn': (933, 548, 1012, 566), 'en': (913, 541, 1032, 570), 'jp': (933, 548, 1012, 566), 'tw': (930, 546, 1015, 570)}, color={'cn': (194, 167, 84), 'en': (225, 200, 99), 'jp': (194, 167, 84), 'tw': (203, 177, 90)}, button={'cn': (933, 548, 1012, 566), 'en': (913, 541, 1032, 570), 'jp': (933, 548, 1012, 566), 'tw': (930, 546, 1015, 570)}, file={'cn': './assets/cn/reward/MEOWFFICER_TRAIN_START.png', 'en': './assets/en/reward/MEOWFFICER_TRAIN_START.png', 'jp': './assets/jp/reward/MEOWFFICER_TRAIN_START.png', 'tw': './assets/tw/reward/MEOWFFICER_TRAIN_START.png'}) MISSION_MULTI = Button(area={'cn': (1041, 8, 1101, 39), 'en': (1041, 8, 1101, 39), 'jp': (1041, 7, 1102, 36), 'tw': (1040, 6, 1102, 39)}, color={'cn': (226, 192, 142), 'en': (221, 179, 96), 'jp': (219, 178, 110), 'tw': (223, 184, 121)}, button={'cn': (1041, 8, 1101, 39), 'en': (1041, 8, 1101, 39), 'jp': (1041, 7, 1102, 36), 'tw': (1040, 6, 1102, 39)}, file={'cn': './assets/cn/reward/MISSION_MULTI.png', 'en': './assets/en/reward/MISSION_MULTI.png', 'jp': './assets/jp/reward/MISSION_MULTI.png', 'tw': './assets/tw/reward/MISSION_MULTI.png'}) MISSION_NOTICE = Button(area={'cn': (940, 670, 945, 681), 'en': (940, 670, 945, 681), 'jp': (940, 670, 945, 681), 'tw': (940, 670, 945, 681)}, color={'cn': (183, 83, 66), 'en': (183, 83, 66), 'jp': (183, 83, 66), 'tw': (183, 83, 66)}, button={'cn': (940, 670, 945, 681), 'en': (940, 670, 945, 681), 'jp': (940, 670, 945, 681), 'tw': (940, 670, 945, 681)}, file={'cn': './assets/cn/reward/MISSION_NOTICE.png', 'en': './assets/en/reward/MISSION_NOTICE.png', 'jp': './assets/jp/reward/MISSION_NOTICE.png', 'tw': './assets/tw/reward/MISSION_NOTICE.png'}) MISSION_SINGLE = Button(area={'cn': (1093, 118, 1179, 177), 'en': (1093, 118, 1179, 177), 'jp': (1102, 120, 1166, 149), 'tw': (1097, 116, 1176, 181)}, color={'cn': (115, 155, 218), 'en': (106, 147, 215), 'jp': (136, 176, 226), 'tw': (105, 147, 215)}, button={'cn': (1093, 118, 1179, 177), 'en': (1093, 118, 1179, 177), 'jp': (1102, 120, 1166, 149), 'tw': (1097, 116, 1176, 181)}, file={'cn': './assets/cn/reward/MISSION_SINGLE.png', 'en': './assets/en/reward/MISSION_SINGLE.png', 'jp': './assets/jp/reward/MISSION_SINGLE.png', 'tw': './assets/tw/reward/MISSION_SINGLE.png'}) OCR_DATA_KEY = Button(area={'cn': (132, 42, 233, 70), 'en': (132, 42, 233, 70), 'jp': (132, 42, 233, 70), 'tw': (132, 42, 233, 70)}, color={'cn': (74, 75, 86), 'en': (74, 75, 86), 'jp': (74, 75, 86), 'tw': (74, 75, 86)}, button={'cn': (132, 42, 233, 70), 'en': (132, 42, 233, 70), 'jp': (132, 42, 233, 70), 'tw': (132, 42, 233, 70)}, file={'cn': './assets/cn/reward/OCR_DATA_KEY.png', 'en': './assets/en/reward/OCR_DATA_KEY.png', 'jp': './assets/jp/reward/OCR_DATA_KEY.png', 'tw': './assets/tw/reward/OCR_DATA_KEY.png'}) OCR_DORM_FILL = Button(area={'cn': (653, 255, 793, 279), 'en': (641, 257, 781, 281), 'jp': (646, 259, 806, 277), 'tw': (653, 255, 793, 279)}, color={'cn': (156, 152, 149), 'en': (158, 154, 152), 'jp': (225, 189, 148), 'tw': (156, 152, 149)}, button={'cn': (653, 255, 793, 279), 'en': (641, 257, 781, 281), 'jp': (646, 259, 806, 277), 'tw': (653, 255, 793, 279)}, file={'cn': './assets/cn/reward/OCR_DORM_FILL.png', 'en': './assets/en/reward/OCR_DORM_FILL.png', 'jp': './assets/jp/reward/OCR_DORM_FILL.png', 'tw': './assets/tw/reward/OCR_DORM_FILL.png'}) -OCR_MEOWFFICER = Button(area={'cn': (1046, 672, 1092, 693), 'en': (1054, 673, 1097, 692), 'jp': (1052, 674, 1094, 690), 'tw': (1032, 670, 1076, 694)}, color={'cn': (217, 203, 192), 'en': (210, 194, 182), 'jp': (201, 183, 171), 'tw': (220, 206, 196)}, button={'cn': (1046, 672, 1092, 693), 'en': (1054, 673, 1097, 692), 'jp': (1052, 674, 1094, 690), 'tw': (1032, 670, 1076, 694)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER.png', 'en': './assets/en/reward/OCR_MEOWFFICER.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER.png'}) -OCR_MEOWFFICER_CAPACITY = Button(area={'cn': (739, 563, 849, 597), 'en': (742, 565, 817, 594), 'jp': (741, 565, 831, 595), 'tw': (849, 602, 910, 627)}, color={'cn': (227, 225, 225), 'en': (201, 198, 198), 'jp': (211, 208, 208), 'tw': (199, 191, 191)}, button={'cn': (739, 563, 849, 597), 'en': (742, 565, 817, 594), 'jp': (741, 565, 831, 595), 'tw': (849, 602, 910, 627)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER_CAPACITY.png', 'en': './assets/en/reward/OCR_MEOWFFICER_CAPACITY.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER_CAPACITY.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER_CAPACITY.png'}) -OCR_MEOWFFICER_CHOOSE = Button(area={'cn': (858, 280, 918, 305), 'en': (858, 280, 918, 305), 'jp': (858, 280, 918, 305), 'tw': (858, 280, 918, 305)}, color={'cn': (243, 240, 237), 'en': (243, 240, 237), 'jp': (243, 240, 237), 'tw': (243, 240, 237)}, button={'cn': (858, 280, 918, 305), 'en': (858, 280, 918, 305), 'jp': (858, 280, 918, 305), 'tw': (858, 280, 918, 305)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER_CHOOSE.png', 'en': './assets/en/reward/OCR_MEOWFFICER_CHOOSE.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER_CHOOSE.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER_CHOOSE.png'}) -OCR_MEOWFFICER_COINS = Button(area={'cn': (1161, 20, 1261, 48), 'en': (1161, 20, 1261, 48), 'jp': (1161, 20, 1261, 48), 'tw': (1161, 20, 1261, 48)}, color={'cn': (200, 198, 192), 'en': (200, 198, 192), 'jp': (200, 198, 192), 'tw': (200, 198, 192)}, button={'cn': (1161, 20, 1261, 48), 'en': (1161, 20, 1261, 48), 'jp': (1161, 20, 1261, 48), 'tw': (1161, 20, 1261, 48)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER_COINS.png', 'en': './assets/en/reward/OCR_MEOWFFICER_COINS.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER_COINS.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER_COINS.png'}) +OCR_MEOWFFICER = Button(area={'cn': (1046, 672, 1092, 693), 'en': (1054, 673, 1097, 692), 'jp': (1052, 674, 1094, 690), 'tw': (1055, 673, 1098, 694)}, color={'cn': (217, 203, 192), 'en': (210, 194, 182), 'jp': (201, 183, 171), 'tw': (215, 200, 188)}, button={'cn': (1046, 672, 1092, 693), 'en': (1054, 673, 1097, 692), 'jp': (1052, 674, 1094, 690), 'tw': (1055, 673, 1098, 694)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER.png', 'en': './assets/en/reward/OCR_MEOWFFICER.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER.png'}) +OCR_MEOWFFICER_CAPACITY = Button(area={'cn': (739, 563, 849, 597), 'en': (742, 565, 817, 594), 'jp': (741, 565, 831, 595), 'tw': (735, 562, 813, 597)}, color={'cn': (227, 225, 225), 'en': (201, 198, 198), 'jp': (211, 208, 208), 'tw': (219, 217, 217)}, button={'cn': (739, 563, 849, 597), 'en': (742, 565, 817, 594), 'jp': (741, 565, 831, 595), 'tw': (735, 562, 813, 597)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER_CAPACITY.png', 'en': './assets/en/reward/OCR_MEOWFFICER_CAPACITY.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER_CAPACITY.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER_CAPACITY.png'}) +OCR_MEOWFFICER_CHOOSE = Button(area={'cn': (858, 280, 918, 305), 'en': (858, 280, 918, 305), 'jp': (858, 280, 918, 305), 'tw': (864, 280, 909, 305)}, color={'cn': (243, 240, 237), 'en': (243, 240, 237), 'jp': (243, 240, 237), 'tw': (239, 235, 231)}, button={'cn': (858, 280, 918, 305), 'en': (858, 280, 918, 305), 'jp': (858, 280, 918, 305), 'tw': (864, 280, 909, 305)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER_CHOOSE.png', 'en': './assets/en/reward/OCR_MEOWFFICER_CHOOSE.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER_CHOOSE.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER_CHOOSE.png'}) +OCR_MEOWFFICER_COINS = Button(area={'cn': (1161, 20, 1261, 48), 'en': (1161, 20, 1261, 48), 'jp': (1161, 20, 1261, 48), 'tw': (1160, 20, 1256, 49)}, color={'cn': (200, 198, 192), 'en': (200, 198, 192), 'jp': (200, 198, 192), 'tw': (200, 198, 192)}, button={'cn': (1161, 20, 1261, 48), 'en': (1161, 20, 1261, 48), 'jp': (1161, 20, 1261, 48), 'tw': (1160, 20, 1256, 49)}, file={'cn': './assets/cn/reward/OCR_MEOWFFICER_COINS.png', 'en': './assets/en/reward/OCR_MEOWFFICER_COINS.png', 'jp': './assets/jp/reward/OCR_MEOWFFICER_COINS.png', 'tw': './assets/tw/reward/OCR_MEOWFFICER_COINS.png'}) OIL = Button(area={'cn': (162, 64, 182, 91), 'en': (162, 64, 182, 91), 'jp': (162, 64, 182, 91), 'tw': (162, 64, 182, 91)}, color={'cn': (71, 72, 71), 'en': (71, 72, 71), 'jp': (71, 72, 71), 'tw': (71, 72, 71)}, button={'cn': (162, 64, 182, 91), 'en': (162, 64, 182, 91), 'jp': (162, 64, 182, 91), 'tw': (162, 64, 182, 91)}, file={'cn': './assets/cn/reward/OIL.png', 'en': './assets/en/reward/OIL.png', 'jp': './assets/jp/reward/OIL.png', 'tw': './assets/tw/reward/OIL.png'}) REWARD_1 = Button(area={'cn': (383, 285, 503, 297), 'en': (383, 283, 503, 294), 'jp': (383, 262, 503, 302), 'tw': (383, 285, 503, 297)}, color={'cn': (238, 168, 81), 'en': (241, 187, 120), 'jp': (231, 157, 63), 'tw': (238, 168, 81)}, button={'cn': (383, 285, 503, 297), 'en': (383, 283, 503, 294), 'jp': (383, 262, 503, 302), 'tw': (383, 285, 503, 297)}, file={'cn': './assets/cn/reward/REWARD_1.png', 'en': './assets/en/reward/REWARD_1.png', 'jp': './assets/jp/reward/REWARD_1.png', 'tw': './assets/tw/reward/REWARD_1.png'}) REWARD_2 = Button(area={'cn': (383, 404, 503, 444), 'en': (382, 403, 504, 445), 'jp': (383, 404, 503, 444), 'tw': (383, 404, 503, 444)}, color={'cn': (233, 165, 67), 'en': (236, 177, 92), 'jp': (228, 161, 61), 'tw': (233, 165, 67)}, button={'cn': (383, 404, 503, 444), 'en': (382, 403, 504, 445), 'jp': (383, 404, 503, 444), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/reward/REWARD_2.png', 'en': './assets/en/reward/REWARD_2.png', 'jp': './assets/jp/reward/REWARD_2.png', 'tw': './assets/tw/reward/REWARD_2.png'}) diff --git a/module/statistics/azurstats.py b/module/statistics/azurstats.py new file mode 100644 index 000000000..1decb855c --- /dev/null +++ b/module/statistics/azurstats.py @@ -0,0 +1,111 @@ +import io +import json +import time + +import cv2 +import numpy as np +import requests + +from module.config.config import AzurLaneConfig +from module.logger import logger +from module.statistics.utils import * + + +def pack(img_list): + """ + Stack images vertically. + + Args: + img_list (list): List of pillow image + + Returns: + Pillow image + """ + img_list = [np.array(i) for i in img_list] + image = cv2.vconcat(img_list) + image = Image.fromarray(image, mode='RGB') + return image + + +class AzurStats: + API = 'https://azurstats.lyoko.io/api/upload/' + TIMEOUT = 10 + + def __init__(self, config): + """ + Args: + config (AzurLaneConfig): + """ + self.config = config + self.images = [] + + def add(self, image): + """ + Args: + image: Pillow image. + + Returns: + bool: If added. + """ + if self.config.ENABLE_AZURSTAT: + self.images.append(image) + return True + else: + return False + + def clear(self): + self.images = {} + + def _user_agent(self): + return f'Alas ({self.config.AZURSTAT_ID})' + + def _upload(self): + """ + Returns: + bool: If success + """ + amount = len(self.images) + logger.info(f'Uploading screenshots to AzurStat, amount: {amount}') + if amount == 0: + logger.warning(f'Image upload failed, no images to upload') + return False + image = pack(self.images) + output = io.BytesIO() + image.save(output, format='png') + output.seek(0) + + now = int(time.time() * 1000) + data = {'file': (f'{now}.png', output, 'image/png')} + headers = {'user-agent': self._user_agent()} + try: + resp = requests.post(self.API, files=data, headers=headers, timeout=self.TIMEOUT) + except Exception as e: + logger.warning(f'Image upload failed, {e}') + return False + + if resp.status_code == 200: + # print(resp.text) + info = json.loads(resp.text) + code = info.get("code", 500) + if code == 200: + logger.info(f'Image upload success, imgid: {info.get("imgid", "")}') + return True + elif code == 0: + logger.warning(f'Image upload failed, msg: {info.get("msg", "")}') + return False + + logger.warning(f'Image upload failed, unexpected server returns, ' + f'status_code: {resp.status_code}, returns: {resp.text}') + return False + + def upload(self): + """ + Returns: + bool: If success + """ + if not self.config.ENABLE_AZURSTAT: + return False + + self._upload() + self.clear() + return True diff --git a/module/ui/assets.py b/module/ui/assets.py index 7620fdb63..7017309e8 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -43,8 +43,9 @@ MAIN_GOTO_MISSION = Button(area={'cn': (816, 666, 932, 713), 'en': (818, 667, 95 MAIN_GOTO_RAID = Button(area={'cn': (1008, 289, 1154, 435), 'en': (1013, 298, 1148, 363), 'jp': (1006, 288, 1155, 436), 'tw': (1008, 289, 1154, 435)}, color={'cn': (216, 171, 99), 'en': (234, 198, 121), 'jp': (216, 171, 100), 'tw': (216, 171, 99)}, button={'cn': (610, 264, 654, 305), 'en': (610, 264, 654, 305), 'jp': (606, 264, 653, 305), 'tw': (610, 264, 654, 305)}, file={'cn': './assets/cn/ui/MAIN_GOTO_RAID.png', 'en': './assets/en/ui/MAIN_GOTO_RAID.png', 'jp': './assets/jp/ui/MAIN_GOTO_RAID.png', 'tw': './assets/tw/ui/MAIN_GOTO_RAID.png'}) MAIN_GOTO_RESHMENU = Button(area={'cn': (1008, 289, 1154, 435), 'en': (1013, 298, 1148, 363), 'jp': (1006, 288, 1155, 436), 'tw': (1008, 289, 1154, 435)}, color={'cn': (216, 171, 99), 'en': (234, 198, 121), 'jp': (216, 171, 100), 'tw': (216, 171, 99)}, button={'cn': (644, 666, 798, 713), 'en': (645, 665, 796, 713), 'jp': (647, 670, 774, 710), 'tw': (644, 666, 798, 713)}, file={'cn': './assets/cn/ui/MAIN_GOTO_RESHMENU.png', 'en': './assets/en/ui/MAIN_GOTO_RESHMENU.png', 'jp': './assets/jp/ui/MAIN_GOTO_RESHMENU.png', 'tw': './assets/tw/ui/MAIN_GOTO_RESHMENU.png'}) MAIN_GOTO_REWARD = Button(area={'cn': (11, 139, 30, 189), 'en': (11, 139, 30, 189), 'jp': (11, 139, 30, 189), 'tw': (11, 139, 30, 189)}, color={'cn': (69, 81, 115), 'en': (69, 81, 115), 'jp': (69, 81, 115), 'tw': (69, 81, 115)}, button={'cn': (11, 139, 30, 189), 'en': (11, 139, 30, 189), 'jp': (11, 139, 30, 189), 'tw': (11, 139, 30, 189)}, file={'cn': './assets/cn/ui/MAIN_GOTO_REWARD.png', 'en': './assets/en/ui/MAIN_GOTO_REWARD.png', 'jp': './assets/jp/ui/MAIN_GOTO_REWARD.png', 'tw': './assets/tw/ui/MAIN_GOTO_REWARD.png'}) -MEOWFFICER_CHECK = Button(area={'cn': (142, 16, 212, 38), 'en': (140, 16, 214, 40), 'jp': (124, 7, 227, 48), 'tw': (142, 16, 212, 38)}, color={'cn': (180, 175, 175), 'en': (225, 222, 224), 'jp': (236, 234, 235), 'tw': (180, 175, 175)}, button={'cn': (142, 16, 212, 38), 'en': (140, 16, 214, 40), 'jp': (124, 7, 227, 48), 'tw': (142, 16, 212, 38)}, file={'cn': './assets/cn/ui/MEOWFFICER_CHECK.png', 'en': './assets/en/ui/MEOWFFICER_CHECK.png', 'jp': './assets/jp/ui/MEOWFFICER_CHECK.png', 'tw': './assets/tw/ui/MEOWFFICER_CHECK.png'}) +MEOWFFICER_CHECK = Button(area={'cn': (142, 16, 212, 38), 'en': (140, 16, 214, 40), 'jp': (124, 7, 227, 48), 'tw': (140, 15, 217, 41)}, color={'cn': (180, 175, 175), 'en': (225, 222, 224), 'jp': (236, 234, 235), 'tw': (201, 197, 198)}, button={'cn': (142, 16, 212, 38), 'en': (140, 16, 214, 40), 'jp': (124, 7, 227, 48), 'tw': (140, 15, 217, 41)}, file={'cn': './assets/cn/ui/MEOWFFICER_CHECK.png', 'en': './assets/en/ui/MEOWFFICER_CHECK.png', 'jp': './assets/jp/ui/MEOWFFICER_CHECK.png', 'tw': './assets/tw/ui/MEOWFFICER_CHECK.png'}) MEOWFFICER_GOTO_DORM = Button(area={'cn': (24, 7, 49, 45), 'en': (24, 7, 49, 45), 'jp': (15, 4, 61, 49), 'tw': (24, 7, 49, 45)}, color={'cn': (248, 222, 158), 'en': (248, 222, 158), 'jp': (241, 233, 201), 'tw': (248, 222, 158)}, button={'cn': (24, 7, 49, 45), 'en': (24, 7, 49, 45), 'jp': (15, 4, 61, 49), 'tw': (24, 7, 49, 45)}, file={'cn': './assets/cn/ui/MEOWFFICER_GOTO_DORM.png', 'en': './assets/en/ui/MEOWFFICER_GOTO_DORM.png', 'jp': './assets/jp/ui/MEOWFFICER_GOTO_DORM.png', 'tw': './assets/tw/ui/MEOWFFICER_GOTO_DORM.png'}) +MEOWFFICER_INFO = Button(area={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1088, 607, 1240, 650), 'tw': (1124, 610, 1207, 647)}, color={'cn': (243, 214, 92), 'en': (212, 182, 77), 'jp': (242, 212, 91), 'tw': (229, 200, 87)}, button={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1088, 607, 1240, 650), 'tw': (1124, 610, 1207, 647)}, file={'cn': './assets/cn/ui/MEOWFFICER_INFO.png', 'en': './assets/en/ui/MEOWFFICER_INFO.png', 'jp': './assets/jp/ui/MEOWFFICER_INFO.png', 'tw': './assets/tw/ui/MEOWFFICER_INFO.png'}) MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (104, 117, 158), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'}) OS_CHECK = Button(area={'cn': (587, 20, 623, 42), 'en': (587, 20, 623, 42), 'jp': (587, 20, 623, 42), 'tw': (587, 20, 623, 42)}, color={'cn': (159, 168, 177), 'en': (159, 168, 177), 'jp': (159, 168, 177), 'tw': (159, 168, 177)}, button={'cn': (587, 20, 623, 42), 'en': (587, 20, 623, 42), 'jp': (587, 20, 623, 42), 'tw': (587, 20, 623, 42)}, file={'cn': './assets/cn/ui/OS_CHECK.png', 'en': './assets/en/ui/OS_CHECK.png', 'jp': './assets/jp/ui/OS_CHECK.png', 'tw': './assets/tw/ui/OS_CHECK.png'}) PLAYER_CHECK = Button(area={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 665, 141, 692), 'tw': (28, 668, 139, 688)}, color={'cn': (237, 204, 127), 'en': (197, 156, 97), 'jp': (228, 187, 117), 'tw': (237, 204, 127)}, button={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 665, 141, 692), 'tw': (28, 668, 139, 688)}, file={'cn': './assets/cn/ui/PLAYER_CHECK.png', 'en': './assets/en/ui/PLAYER_CHECK.png', 'jp': './assets/jp/ui/PLAYER_CHECK.png', 'tw': './assets/tw/ui/PLAYER_CHECK.png'}) @@ -57,7 +58,7 @@ REWARD_GOTO_COMMISSION = Button(area={'cn': (383, 262, 503, 302), 'en': (384, 26 REWARD_GOTO_MAIN = Button(area={'cn': (302, 119, 371, 195), 'en': (302, 119, 371, 195), 'jp': (302, 119, 371, 195), 'tw': (302, 119, 371, 195)}, color={'cn': (146, 118, 120), 'en': (146, 118, 120), 'jp': (146, 118, 120), 'tw': (146, 118, 120)}, button={'cn': (1037, 611, 1107, 656), 'en': (1037, 612, 1107, 657), 'jp': (1037, 611, 1107, 656), 'tw': (1037, 611, 1107, 656)}, file={'cn': './assets/cn/ui/REWARD_GOTO_MAIN.png', 'en': './assets/en/ui/REWARD_GOTO_MAIN.png', 'jp': './assets/jp/ui/REWARD_GOTO_MAIN.png', 'tw': './assets/tw/ui/REWARD_GOTO_MAIN.png'}) REWARD_GOTO_TACTICAL = Button(area={'cn': (383, 404, 503, 444), 'en': (385, 404, 502, 444), 'jp': (383, 404, 503, 444), 'tw': (383, 404, 503, 444)}, color={'cn': (89, 140, 198), 'en': (84, 137, 196), 'jp': (88, 138, 194), 'tw': (89, 140, 198)}, button={'cn': (383, 404, 503, 444), 'en': (385, 404, 502, 444), 'jp': (383, 404, 503, 444), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/ui/REWARD_GOTO_TACTICAL.png', 'en': './assets/en/ui/REWARD_GOTO_TACTICAL.png', 'jp': './assets/jp/ui/REWARD_GOTO_TACTICAL.png', 'tw': './assets/tw/ui/REWARD_GOTO_TACTICAL.png'}) SP_CHECK = Button(area={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (125, 66, 205, 107), 'tw': (123, 63, 206, 109)}, color={'cn': (95, 110, 145), 'en': (95, 110, 145), 'jp': (78, 92, 127), 'tw': (95, 110, 145)}, button={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (125, 66, 205, 107), 'tw': (123, 63, 206, 109)}, file={'cn': './assets/cn/ui/SP_CHECK.png', 'en': './assets/en/ui/SP_CHECK.png', 'jp': './assets/jp/ui/SP_CHECK.png', 'tw': './assets/tw/ui/SP_CHECK.png'}) -TACTICAL_CHECK = Button(area={'cn': (122, 14, 231, 38), 'en': (120, 16, 292, 40), 'jp': (122, 12, 232, 37), 'tw': (122, 14, 231, 38)}, color={'cn': (145, 161, 200), 'en': (94, 107, 144), 'jp': (155, 171, 209), 'tw': (145, 161, 200)}, button={'cn': (122, 14, 231, 38), 'en': (120, 16, 292, 40), 'jp': (122, 12, 232, 37), 'tw': (122, 14, 231, 38)}, file={'cn': './assets/cn/ui/TACTICAL_CHECK.png', 'en': './assets/en/ui/TACTICAL_CHECK.png', 'jp': './assets/jp/ui/TACTICAL_CHECK.png', 'tw': './assets/tw/ui/TACTICAL_CHECK.png'}) +TACTICAL_CHECK = Button(area={'cn': (122, 14, 231, 38), 'en': (120, 16, 292, 40), 'jp': (122, 12, 232, 37), 'tw': (115, 11, 238, 46)}, color={'cn': (145, 161, 200), 'en': (94, 107, 144), 'jp': (155, 171, 209), 'tw': (114, 128, 167)}, button={'cn': (122, 14, 231, 38), 'en': (120, 16, 292, 40), 'jp': (122, 12, 232, 37), 'tw': (115, 11, 238, 46)}, file={'cn': './assets/cn/ui/TACTICAL_CHECK.png', 'en': './assets/en/ui/TACTICAL_CHECK.png', 'jp': './assets/jp/ui/TACTICAL_CHECK.png', 'tw': './assets/tw/ui/TACTICAL_CHECK.png'}) WAR_ARCHIVES_CHECK = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_CHECK.png', 'en': './assets/en/ui/WAR_ARCHIVES_CHECK.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_CHECK.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_CHECK.png'}) WAR_ARCHIVES_GOTO_CAMPAIGN = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_GOTO_CAMPAIGN.png', 'en': './assets/en/ui/WAR_ARCHIVES_GOTO_CAMPAIGN.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_GOTO_CAMPAIGN.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_GOTO_CAMPAIGN.png'}) WAR_ARCHIVES_GOTO_CAMPAIGN_MENU = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'en': './assets/en/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png'}) diff --git a/module/ui/ui.py b/module/ui/ui.py index 1728ae699..a32ab9845 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -321,6 +321,12 @@ class UI(InfoHandler): return False + def ui_additional_page_meowfficer(self): + if self.appear_then_click(MEOWFFICER_INFO, offset=(30, 30), interval=5): + return True + + return False + # def ui_additional_page_commission(self): # # Event commission in Vacation Lane. # if self.appear(GAME_TIPS, offset=(20, 20), interval=1):