diff --git a/.gitignore b/.gitignore index 63cc35ceb..dbf2410fa 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,9 @@ cmake-build-*/ # IntelliJ out/ +# Visual Studio +.vs + # mpeltonen/sbt-idea plugin .idea_modules/ diff --git a/assets/cn/exercise/ATTACKER_HP_AREA_New.png b/assets/cn/exercise/ATTACKER_HP_AREA_New.png new file mode 100644 index 000000000..16b25ebc6 Binary files /dev/null and b/assets/cn/exercise/ATTACKER_HP_AREA_New.png differ diff --git a/assets/cn/exercise/DEFENDER_HP_AREA_New.png b/assets/cn/exercise/DEFENDER_HP_AREA_New.png new file mode 100644 index 000000000..e8f2c1b79 Binary files /dev/null and b/assets/cn/exercise/DEFENDER_HP_AREA_New.png differ diff --git a/assets/cn/freebies/REWARD_RECEIVE_WHITE.png b/assets/cn/freebies/REWARD_RECEIVE_WHITE.png new file mode 100644 index 000000000..7d5411408 Binary files /dev/null and b/assets/cn/freebies/REWARD_RECEIVE_WHITE.png differ diff --git a/assets/cn/ui/BATTLE_PASS_CHECK.png b/assets/cn/ui/BATTLE_PASS_CHECK.png index f6e826c3a..4861b75ac 100644 Binary files a/assets/cn/ui/BATTLE_PASS_CHECK.png and b/assets/cn/ui/BATTLE_PASS_CHECK.png differ diff --git a/assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png b/assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png index 04d7664eb..07545f656 100644 Binary files a/assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png and b/assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png differ diff --git a/assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png b/assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png index cf770c77f..d7c24cfb4 100644 Binary files a/assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png and b/assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png differ diff --git a/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png b/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png index 59e24d63c..e40a1e3c5 100644 Binary files a/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png and b/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png differ diff --git a/assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png b/assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png index 4a3d58fb7..5d18e6be1 100644 Binary files a/assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png and b/assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png differ diff --git a/assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png b/assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png index d9909af4e..c93e8022d 100644 Binary files a/assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png and b/assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png differ diff --git a/assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png b/assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png new file mode 100644 index 000000000..9753566fb Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png differ diff --git a/assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png b/assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png index e0ad5f1b2..0fbfb2d51 100644 Binary files a/assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png and b/assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png differ diff --git a/assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png b/assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png index 363ae7106..ff313d1e8 100644 Binary files a/assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png and b/assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png differ diff --git a/assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png b/assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png index cfb6b6875..59a0f2437 100644 Binary files a/assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png and b/assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png differ diff --git a/assets/cn/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png b/assets/cn/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png index 5c04432ee..ec7c31409 100644 Binary files a/assets/cn/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png and b/assets/cn/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_FALLEN_WINGS.png b/assets/cn/war_archives/TEMPLATE_FALLEN_WINGS.png index f3492c6bb..500783853 100644 Binary files a/assets/cn/war_archives/TEMPLATE_FALLEN_WINGS.png and b/assets/cn/war_archives/TEMPLATE_FALLEN_WINGS.png differ diff --git a/assets/cn/war_archives/TEMPLATE_GLORIOUS_BATTLE.png b/assets/cn/war_archives/TEMPLATE_GLORIOUS_BATTLE.png index 80a586a8b..d4b287e15 100644 Binary files a/assets/cn/war_archives/TEMPLATE_GLORIOUS_BATTLE.png and b/assets/cn/war_archives/TEMPLATE_GLORIOUS_BATTLE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png b/assets/cn/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png index 2fdb30170..6fb007ca3 100644 Binary files a/assets/cn/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png and b/assets/cn/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png differ diff --git a/assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png b/assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png index 9638be25b..af5b161d5 100644 Binary files a/assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png and b/assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png differ diff --git a/assets/cn/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png b/assets/cn/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png index af6ea2439..15bef5e2c 100644 Binary files a/assets/cn/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png and b/assets/cn/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png differ diff --git a/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png b/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png index bc55d47f3..561533f01 100644 Binary files a/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png and b/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png differ diff --git a/assets/cn/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png b/assets/cn/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png index e1a53d09b..9d55ef4b3 100644 Binary files a/assets/cn/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png and b/assets/cn/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png differ diff --git a/assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png b/assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png index 277834964..a5604d676 100644 Binary files a/assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png and b/assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png differ diff --git a/assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png b/assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png index 5b42b4e80..8e86bc5df 100644 Binary files a/assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png and b/assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png b/assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png index 0a3a9b317..bb6625d34 100644 Binary files a/assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png and b/assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png differ diff --git a/assets/cn/war_archives/TEMPLATE_SCHERZO_OF_IRON_AND_BLOOD.png b/assets/cn/war_archives/TEMPLATE_SCHERZO_OF_IRON_AND_BLOOD.png index 67ab4f364..d01b1dce2 100644 Binary files a/assets/cn/war_archives/TEMPLATE_SCHERZO_OF_IRON_AND_BLOOD.png and b/assets/cn/war_archives/TEMPLATE_SCHERZO_OF_IRON_AND_BLOOD.png differ diff --git a/assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png b/assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png index 0f124747f..bf31275bb 100644 Binary files a/assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png and b/assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png differ diff --git a/assets/cn/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png b/assets/cn/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png index 0cb2c8f97..3e8628579 100644 Binary files a/assets/cn/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png and b/assets/cn/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png differ diff --git a/assets/cn/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png b/assets/cn/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png index a525cb0aa..81fdae6b5 100644 Binary files a/assets/cn/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png and b/assets/cn/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png b/assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png new file mode 100644 index 000000000..f219aa556 Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png b/assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png index a5f78af4d..ca42df759 100644 Binary files a/assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png and b/assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png differ diff --git a/assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png b/assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png index 0cd57a754..bb38d93a5 100644 Binary files a/assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png and b/assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png differ diff --git a/assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png b/assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png new file mode 100644 index 000000000..2b0056342 Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png differ diff --git a/assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png b/assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png index 3ca7b4821..bc2f7f5a7 100644 Binary files a/assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png and b/assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png differ diff --git a/assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png b/assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png index d68c3e1bd..1505c44cb 100644 Binary files a/assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png and b/assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png differ diff --git a/assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png b/assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png new file mode 100644 index 000000000..15b754a33 Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png b/assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png index b21ed3dfc..3918e90ea 100644 Binary files a/assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png and b/assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png differ diff --git a/assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png b/assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png new file mode 100644 index 000000000..56e1cc388 Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png differ diff --git a/assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png b/assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png index 2a90a581b..a3ef867db 100644 Binary files a/assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png and b/assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png differ diff --git a/assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png b/assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png index 755d1748e..ca2c5ce32 100644 Binary files a/assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png and b/assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png differ diff --git a/assets/en/combat_ui/QUIT.png b/assets/en/combat_ui/QUIT.png index 64f412fff..a1e208f20 100644 Binary files a/assets/en/combat_ui/QUIT.png and b/assets/en/combat_ui/QUIT.png differ diff --git a/assets/en/combat_ui/QUIT_Iridescent_Fantasy.png b/assets/en/combat_ui/QUIT_Iridescent_Fantasy.png new file mode 100644 index 000000000..4641010d8 Binary files /dev/null and b/assets/en/combat_ui/QUIT_Iridescent_Fantasy.png differ diff --git a/assets/en/combat_ui/QUIT_New.png b/assets/en/combat_ui/QUIT_New.png new file mode 100644 index 000000000..5044edc5f Binary files /dev/null and b/assets/en/combat_ui/QUIT_New.png differ diff --git a/assets/en/exercise/ATTACKER_HP_AREA_New.png b/assets/en/exercise/ATTACKER_HP_AREA_New.png new file mode 100644 index 000000000..16b25ebc6 Binary files /dev/null and b/assets/en/exercise/ATTACKER_HP_AREA_New.png differ diff --git a/assets/en/exercise/DEFENDER_HP_AREA_New.png b/assets/en/exercise/DEFENDER_HP_AREA_New.png new file mode 100644 index 000000000..e8f2c1b79 Binary files /dev/null and b/assets/en/exercise/DEFENDER_HP_AREA_New.png differ diff --git a/assets/en/freebies/REWARD_RECEIVE_WHITE.png b/assets/en/freebies/REWARD_RECEIVE_WHITE.png new file mode 100644 index 000000000..2c133acb3 Binary files /dev/null and b/assets/en/freebies/REWARD_RECEIVE_WHITE.png differ diff --git a/assets/en/ui/BATTLE_PASS_CHECK.png b/assets/en/ui/BATTLE_PASS_CHECK.png index bf9cd84c1..4861b75ac 100644 Binary files a/assets/en/ui/BATTLE_PASS_CHECK.png and b/assets/en/ui/BATTLE_PASS_CHECK.png differ diff --git a/assets/jp/combat_ui/QUIT.png b/assets/jp/combat_ui/QUIT.png index cd83cf0ae..60ffd1a65 100644 Binary files a/assets/jp/combat_ui/QUIT.png and b/assets/jp/combat_ui/QUIT.png differ diff --git a/assets/jp/commission/COMMISSION_ADVICE.BUTTON.png b/assets/jp/commission/COMMISSION_ADVICE.BUTTON.png new file mode 100644 index 000000000..41ef5532f Binary files /dev/null and b/assets/jp/commission/COMMISSION_ADVICE.BUTTON.png differ diff --git a/assets/jp/commission/COMMISSION_ADVICE.png b/assets/jp/commission/COMMISSION_ADVICE.png index f0bee5b4b..7a50abcac 100644 Binary files a/assets/jp/commission/COMMISSION_ADVICE.png and b/assets/jp/commission/COMMISSION_ADVICE.png differ diff --git a/assets/jp/commission/COMMISSION_START.BUTTON.png b/assets/jp/commission/COMMISSION_START.BUTTON.png new file mode 100644 index 000000000..40f01bb22 Binary files /dev/null and b/assets/jp/commission/COMMISSION_START.BUTTON.png differ diff --git a/assets/jp/commission/COMMISSION_START.png b/assets/jp/commission/COMMISSION_START.png index b720310c7..310b37020 100644 Binary files a/assets/jp/commission/COMMISSION_START.png and b/assets/jp/commission/COMMISSION_START.png differ diff --git a/assets/jp/daily/OCR_REMAIN.png b/assets/jp/daily/OCR_REMAIN.png index d89046d61..35d898772 100644 Binary files a/assets/jp/daily/OCR_REMAIN.png and b/assets/jp/daily/OCR_REMAIN.png differ diff --git a/assets/jp/dorm/DORM_FURNITURE_BUY_ALL.png b/assets/jp/dorm/DORM_FURNITURE_BUY_ALL.png index 248290751..4d64df57d 100644 Binary files a/assets/jp/dorm/DORM_FURNITURE_BUY_ALL.png and b/assets/jp/dorm/DORM_FURNITURE_BUY_ALL.png differ diff --git a/assets/jp/dorm/DORM_FURNITURE_BUY_CONFIRM.png b/assets/jp/dorm/DORM_FURNITURE_BUY_CONFIRM.png index 998c32219..cbc53030b 100644 Binary files a/assets/jp/dorm/DORM_FURNITURE_BUY_CONFIRM.png and b/assets/jp/dorm/DORM_FURNITURE_BUY_CONFIRM.png differ diff --git a/assets/jp/dorm/DORM_FURNITURE_BUY_SET.png b/assets/jp/dorm/DORM_FURNITURE_BUY_SET.png index 8148357c4..c263109b5 100644 Binary files a/assets/jp/dorm/DORM_FURNITURE_BUY_SET.png and b/assets/jp/dorm/DORM_FURNITURE_BUY_SET.png differ diff --git a/assets/jp/dorm/DORM_FURNITURE_DETAILS_ENTER.png b/assets/jp/dorm/DORM_FURNITURE_DETAILS_ENTER.png index ed1f808e9..3d983083e 100644 Binary files a/assets/jp/dorm/DORM_FURNITURE_DETAILS_ENTER.png and b/assets/jp/dorm/DORM_FURNITURE_DETAILS_ENTER.png differ diff --git a/assets/jp/exercise/ATTACKER_HP_AREA_New.png b/assets/jp/exercise/ATTACKER_HP_AREA_New.png new file mode 100644 index 000000000..16b25ebc6 Binary files /dev/null and b/assets/jp/exercise/ATTACKER_HP_AREA_New.png differ diff --git a/assets/jp/exercise/DEFENDER_HP_AREA_New.png b/assets/jp/exercise/DEFENDER_HP_AREA_New.png new file mode 100644 index 000000000..e8f2c1b79 Binary files /dev/null and b/assets/jp/exercise/DEFENDER_HP_AREA_New.png differ diff --git a/assets/jp/freebies/MAIL_BATCH_CLAIM.png b/assets/jp/freebies/MAIL_BATCH_CLAIM.png index 9fd74d8db..ce568f4be 100644 Binary files a/assets/jp/freebies/MAIL_BATCH_CLAIM.png and b/assets/jp/freebies/MAIL_BATCH_CLAIM.png differ diff --git a/assets/jp/freebies/MAIL_BATCH_DELETE.png b/assets/jp/freebies/MAIL_BATCH_DELETE.png index 961b35f58..d17df773d 100644 Binary files a/assets/jp/freebies/MAIL_BATCH_DELETE.png and b/assets/jp/freebies/MAIL_BATCH_DELETE.png differ diff --git a/assets/jp/freebies/REWARD_RECEIVE_WHITE.png b/assets/jp/freebies/REWARD_RECEIVE_WHITE.png new file mode 100644 index 000000000..87d36ea17 Binary files /dev/null and b/assets/jp/freebies/REWARD_RECEIVE_WHITE.png differ diff --git a/assets/jp/research/RESEARCH_COST_CHECKER.png b/assets/jp/research/RESEARCH_COST_CHECKER.png index 0b8ceefd4..6f232dfad 100644 Binary files a/assets/jp/research/RESEARCH_COST_CHECKER.png and b/assets/jp/research/RESEARCH_COST_CHECKER.png differ diff --git a/assets/jp/retire/DOCK_AMOUNT.png b/assets/jp/retire/DOCK_AMOUNT.png index d4111269c..4b73976cd 100644 Binary files a/assets/jp/retire/DOCK_AMOUNT.png and b/assets/jp/retire/DOCK_AMOUNT.png differ diff --git a/assets/jp/retire/TEMPLATE_IN_BATTLE.png b/assets/jp/retire/TEMPLATE_IN_BATTLE.png index ef2566a4e..cdd2c7d57 100644 Binary files a/assets/jp/retire/TEMPLATE_IN_BATTLE.png and b/assets/jp/retire/TEMPLATE_IN_BATTLE.png differ diff --git a/assets/jp/retire/TEMPLATE_IN_COMMISSION.png b/assets/jp/retire/TEMPLATE_IN_COMMISSION.png index c41ff9b1a..f66d7e10d 100644 Binary files a/assets/jp/retire/TEMPLATE_IN_COMMISSION.png and b/assets/jp/retire/TEMPLATE_IN_COMMISSION.png differ diff --git a/assets/jp/storage/BOX_USE.BUTTON.png b/assets/jp/storage/BOX_USE.BUTTON.png index 3cfbc0645..e86a350ca 100644 Binary files a/assets/jp/storage/BOX_USE.BUTTON.png and b/assets/jp/storage/BOX_USE.BUTTON.png differ diff --git a/assets/jp/storage/BOX_USE.png b/assets/jp/storage/BOX_USE.png index 79930a707..f3cb2b520 100644 Binary files a/assets/jp/storage/BOX_USE.png and b/assets/jp/storage/BOX_USE.png differ diff --git a/assets/jp/storage/MATERIAL_CHECK.png b/assets/jp/storage/MATERIAL_CHECK.png index 7b0e8f49c..54b895d3e 100644 Binary files a/assets/jp/storage/MATERIAL_CHECK.png and b/assets/jp/storage/MATERIAL_CHECK.png differ diff --git a/assets/jp/tactical/OCR_SKILL_EXP.png b/assets/jp/tactical/OCR_SKILL_EXP.png index 29f770d09..9fd3e4ac4 100644 Binary files a/assets/jp/tactical/OCR_SKILL_EXP.png and b/assets/jp/tactical/OCR_SKILL_EXP.png differ diff --git a/assets/jp/ui/BATTLE_PASS_CHECK.png b/assets/jp/ui/BATTLE_PASS_CHECK.png index 173081cc0..4861b75ac 100644 Binary files a/assets/jp/ui/BATTLE_PASS_CHECK.png and b/assets/jp/ui/BATTLE_PASS_CHECK.png differ diff --git a/assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png b/assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png index 632cbf49e..e14fc587a 100644 Binary files a/assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png and b/assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png differ diff --git a/assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png b/assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png index 6067f53b6..ccd3e9e5f 100644 Binary files a/assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png and b/assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png differ diff --git a/assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png b/assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png index e0ad5f1b2..a6ad2f7e9 100644 Binary files a/assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png and b/assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png differ diff --git a/assets/jp/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png b/assets/jp/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png index cf1bd8acb..cf8507ce6 100644 Binary files a/assets/jp/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png and b/assets/jp/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png differ diff --git a/assets/jp/war_archives/TEMPLATE_FALLEN_WINGS.png b/assets/jp/war_archives/TEMPLATE_FALLEN_WINGS.png index f3492c6bb..936781a7b 100644 Binary files a/assets/jp/war_archives/TEMPLATE_FALLEN_WINGS.png and b/assets/jp/war_archives/TEMPLATE_FALLEN_WINGS.png differ diff --git a/assets/jp/war_archives/TEMPLATE_GLORIOUS_BATTLE.png b/assets/jp/war_archives/TEMPLATE_GLORIOUS_BATTLE.png index 80a586a8b..0c2f9642f 100644 Binary files a/assets/jp/war_archives/TEMPLATE_GLORIOUS_BATTLE.png and b/assets/jp/war_archives/TEMPLATE_GLORIOUS_BATTLE.png differ diff --git a/assets/jp/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png b/assets/jp/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png index 2fdb30170..b922440b3 100644 Binary files a/assets/jp/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png and b/assets/jp/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png differ diff --git a/assets/jp/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png b/assets/jp/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png index af6ea2439..f339de6eb 100644 Binary files a/assets/jp/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png and b/assets/jp/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png differ diff --git a/assets/jp/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png b/assets/jp/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png index a525cb0aa..bf6a53e55 100644 Binary files a/assets/jp/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png and b/assets/jp/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png differ diff --git a/assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png b/assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png index ca28191e2..5e68832a7 100644 Binary files a/assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png and b/assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png differ diff --git a/assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png b/assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png index 2a90a581b..15e7a8c9a 100644 Binary files a/assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png and b/assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png differ diff --git a/assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png b/assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png index 755d1748e..69d7a5e4d 100644 Binary files a/assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png and b/assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png differ diff --git a/assets/tw/coalition/ACADEMY_EASY.png b/assets/tw/coalition/ACADEMY_EASY.png new file mode 100644 index 000000000..076ebfb33 Binary files /dev/null and b/assets/tw/coalition/ACADEMY_EASY.png differ diff --git a/assets/tw/coalition/ACADEMY_EX.png b/assets/tw/coalition/ACADEMY_EX.png new file mode 100644 index 000000000..4e5ee3085 Binary files /dev/null and b/assets/tw/coalition/ACADEMY_EX.png differ diff --git a/assets/tw/coalition/ACADEMY_HARD.png b/assets/tw/coalition/ACADEMY_HARD.png new file mode 100644 index 000000000..efd30189d Binary files /dev/null and b/assets/tw/coalition/ACADEMY_HARD.png differ diff --git a/assets/tw/coalition/ACADEMY_MODE_BATTLE.png b/assets/tw/coalition/ACADEMY_MODE_BATTLE.png new file mode 100644 index 000000000..2629d58cf Binary files /dev/null and b/assets/tw/coalition/ACADEMY_MODE_BATTLE.png differ diff --git a/assets/tw/coalition/ACADEMY_MODE_STORY.png b/assets/tw/coalition/ACADEMY_MODE_STORY.png new file mode 100644 index 000000000..6fb732404 Binary files /dev/null and b/assets/tw/coalition/ACADEMY_MODE_STORY.png differ diff --git a/assets/tw/coalition/ACADEMY_NORMAL.png b/assets/tw/coalition/ACADEMY_NORMAL.png new file mode 100644 index 000000000..394eba23f Binary files /dev/null and b/assets/tw/coalition/ACADEMY_NORMAL.png differ diff --git a/assets/tw/coalition/ACADEMY_SP.png b/assets/tw/coalition/ACADEMY_SP.png new file mode 100644 index 000000000..a65333a0c Binary files /dev/null and b/assets/tw/coalition/ACADEMY_SP.png differ diff --git a/assets/tw/coalition/ACADEMY_SWITCH_MULTI.png b/assets/tw/coalition/ACADEMY_SWITCH_MULTI.png new file mode 100644 index 000000000..a60708799 Binary files /dev/null and b/assets/tw/coalition/ACADEMY_SWITCH_MULTI.png differ diff --git a/assets/tw/coalition/ACADEMY_SWITCH_SINGLE.png b/assets/tw/coalition/ACADEMY_SWITCH_SINGLE.png new file mode 100644 index 000000000..74d538bc0 Binary files /dev/null and b/assets/tw/coalition/ACADEMY_SWITCH_SINGLE.png differ diff --git a/assets/tw/coalition/ACEDEMY_FLEET_PREPARATION.png b/assets/tw/coalition/ACEDEMY_FLEET_PREPARATION.png new file mode 100644 index 000000000..08ce65456 Binary files /dev/null and b/assets/tw/coalition/ACEDEMY_FLEET_PREPARATION.png differ diff --git a/assets/tw/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png b/assets/tw/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png new file mode 100644 index 000000000..2025bf5e8 Binary files /dev/null and b/assets/tw/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png differ diff --git a/assets/tw/coalition/COALITION_ACADEMY_MAIN_CHECK.png b/assets/tw/coalition/COALITION_ACADEMY_MAIN_CHECK.png new file mode 100644 index 000000000..ea78366e3 Binary files /dev/null and b/assets/tw/coalition/COALITION_ACADEMY_MAIN_CHECK.png differ diff --git a/assets/tw/coalition/FLEET_PREPARATION.BUTTON.png b/assets/tw/coalition/FROSTFALL_FLEET_PREPARATION.BUTTON.png similarity index 100% rename from assets/tw/coalition/FLEET_PREPARATION.BUTTON.png rename to assets/tw/coalition/FROSTFALL_FLEET_PREPARATION.BUTTON.png diff --git a/assets/tw/coalition/FLEET_PREPARATION.png b/assets/tw/coalition/FROSTFALL_FLEET_PREPARATION.png similarity index 100% rename from assets/tw/coalition/FLEET_PREPARATION.png rename to assets/tw/coalition/FROSTFALL_FLEET_PREPARATION.png diff --git a/assets/tw/coalition/MODE_SWITCH_BATTLE.png b/assets/tw/coalition/FROSTFALL_MODE_BATTLE.png similarity index 100% rename from assets/tw/coalition/MODE_SWITCH_BATTLE.png rename to assets/tw/coalition/FROSTFALL_MODE_BATTLE.png diff --git a/assets/tw/coalition/MODE_SWITCH_STORY.png b/assets/tw/coalition/FROSTFALL_MODE_STORY.png similarity index 100% rename from assets/tw/coalition/MODE_SWITCH_STORY.png rename to assets/tw/coalition/FROSTFALL_MODE_STORY.png diff --git a/assets/tw/coalition/FLEET_SWITCH_MULTI.png b/assets/tw/coalition/FROSTFALL_SWITCH_MULTI.png similarity index 100% rename from assets/tw/coalition/FLEET_SWITCH_MULTI.png rename to assets/tw/coalition/FROSTFALL_SWITCH_MULTI.png diff --git a/assets/tw/coalition/FLEET_SWITCH_SINGLE.png b/assets/tw/coalition/FROSTFALL_SWITCH_SINGLE.png similarity index 100% rename from assets/tw/coalition/FLEET_SWITCH_SINGLE.png rename to assets/tw/coalition/FROSTFALL_SWITCH_SINGLE.png diff --git a/assets/tw/exercise/ATTACKER_HP_AREA_New.png b/assets/tw/exercise/ATTACKER_HP_AREA_New.png new file mode 100644 index 000000000..16b25ebc6 Binary files /dev/null and b/assets/tw/exercise/ATTACKER_HP_AREA_New.png differ diff --git a/assets/tw/exercise/DEFENDER_HP_AREA_New.png b/assets/tw/exercise/DEFENDER_HP_AREA_New.png new file mode 100644 index 000000000..e8f2c1b79 Binary files /dev/null and b/assets/tw/exercise/DEFENDER_HP_AREA_New.png differ diff --git a/assets/tw/handler/MISSION_POPUP_ACK.png b/assets/tw/handler/MISSION_POPUP_ACK.png index 86e66b428..b01fabecf 100644 Binary files a/assets/tw/handler/MISSION_POPUP_ACK.png and b/assets/tw/handler/MISSION_POPUP_ACK.png differ diff --git a/assets/tw/handler/MISSION_POPUP_GO.png b/assets/tw/handler/MISSION_POPUP_GO.png index ac6ca0491..b4999a8ed 100644 Binary files a/assets/tw/handler/MISSION_POPUP_GO.png and b/assets/tw/handler/MISSION_POPUP_GO.png differ diff --git a/assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png b/assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png index 1a4b51845..dcd429b0b 100644 Binary files a/assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png and b/assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png differ diff --git a/assets/tw/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png b/assets/tw/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png index 3881c2a70..8b0a28981 100644 Binary files a/assets/tw/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png and b/assets/tw/war_archives/TEMPLATE_ENCIRCLING_GRAF_SPEE.png differ diff --git a/assets/tw/war_archives/TEMPLATE_FALLEN_WINGS.png b/assets/tw/war_archives/TEMPLATE_FALLEN_WINGS.png index 71e52d0a2..f7a06023e 100644 Binary files a/assets/tw/war_archives/TEMPLATE_FALLEN_WINGS.png and b/assets/tw/war_archives/TEMPLATE_FALLEN_WINGS.png differ diff --git a/assets/tw/war_archives/TEMPLATE_GLORIOUS_BATTLE.png b/assets/tw/war_archives/TEMPLATE_GLORIOUS_BATTLE.png index ffb31d498..ba8cf8f93 100644 Binary files a/assets/tw/war_archives/TEMPLATE_GLORIOUS_BATTLE.png and b/assets/tw/war_archives/TEMPLATE_GLORIOUS_BATTLE.png differ diff --git a/assets/tw/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png b/assets/tw/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png index d6aa3f871..7dd2048b7 100644 Binary files a/assets/tw/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png and b/assets/tw/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png differ diff --git a/assets/tw/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png b/assets/tw/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png index 212095792..2ff5eafaf 100644 Binary files a/assets/tw/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png and b/assets/tw/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png differ diff --git a/assets/tw/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png b/assets/tw/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png index 6d8c33c4d..5509c630d 100644 Binary files a/assets/tw/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png and b/assets/tw/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png differ diff --git a/assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png b/assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png index df50e3536..6275350be 100644 Binary files a/assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png and b/assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png differ diff --git a/assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png b/assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png index 215d082be..95e0387d6 100644 Binary files a/assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png and b/assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index 4df709ba5..f9bc1cbd7 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -22,28 +22,33 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 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 | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | -| 20180717 | war archives 20190314 en | Prelude under the Moon | 月光下的序曲 | Prelude under the Moon | 月夜の開幕曲 | 月光下的序曲 | +| 20180717 | war archives 20190314 en | Prelude under the Moon | 月光下的序曲 | Prelude under the Moon | 月夜の開幕曲 | 月光下的序曲 | | 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | | 20200312 | war archives 20200312 cn | The Solomon Ranger | 斯图尔特的硝烟 | The Solomon Ranger | 南洋に靡く硝煙 | 斯圖爾特的硝煙 | | 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | -| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | 鐵血音符誓言 | -| 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | 激奏的Polaris | -| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | 神聖的悲喜劇 | -| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | 箱庭療法 | -| 20220721 | war archives 20210624 cn | Swirling Cherry Blossoms | 浮樱影华 | Swirling Cherry Blossoms | 翳りし満ちる影の華 | 浮櫻影華 | -| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | 最重要的寶物 | -| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | 激唱的UNIVERSE | -| 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | 峽灣間的星辰 | -| 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | 微層混合 | +| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | 鐵血音符誓言 | +| 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | 激奏的Polaris | +| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | 神聖的悲喜劇 | +| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | 箱庭療法 | +| 20220721 | war archives 20210624 cn | Swirling Cherry Blossoms | 浮樱影华 | Swirling Cherry Blossoms | 翳りし満ちる影の華 | 浮櫻影華 | +| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | 最重要的寶物 | +| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | 激唱的UNIVERSE | +| 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | 峽灣間的星辰 | +| 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | 微層混合 | | 20211028 | war archives 20211028 cn | Skybound Oratorio | 穹顶下的圣咏曲 | Skybound Oratorio | 神穹を衝く聖歌 | 穹頂下的聖詠曲 | -| 20230309 | war archives 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | 夜幕下的歸途 | -| 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | -| 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | -| 20230713 | war archives 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | Counterattack Within the Fjord | 峡湾間の反撃 | 峽灣間的反擊 | -| 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | 負象限作戰 | -| 20240118 | war archives 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | 蝶海夢花 | -| 20240118 | war archives 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | 鏡位螺旋 | -| 20240222 | war archives 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | 破曉冰華 | +| 20230309 | war archives 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | 夜幕下的歸途 | +| 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | +| 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | +| 20230713 | war archives 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | Counterattack Within the Fjord | 峡湾間の反撃 | 峽灣間的反擊 | +| 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | 負象限作戰 | +| 20240118 | war archives 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | 蝶海夢花 | +| 20240118 | war archives 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | 鏡位螺旋 | +| 20240222 | war archives 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | 破曉冰華 | +| 20240321 | war archives 20201012 cn | Sundered Blue | 划破海空之翼 | Sundered Blue | 奔る彩帆の青 | 劃破海空之翼 | +| 20240613 | war archives 20211111 cn | The Flame-Touched Dagger | 杰诺瓦的焰火 | The Flame-Touched Dagger | 燈火のシニエ | 杰諾瓦的焰火 | +| 20240718 | war archives 20210916 cn | Upon the Shimmering Blue | 碧海光粼 | Upon the Shimmering Blue | 駆けよ 碧海の吹き風 | 碧海光粼 | +| 20240829 | war archives 20210422 cn | Daedalian Hymn | 复兴的赞美诗 | Daedalian Hymn | 讃える復興の迷路 | 復興的讚美詩 | +| 20241017 | war archives 20211229 cn | Tower of Transcendence | 逆转彩虹之塔 | Tower of Transcendence | 遡望せし虹彩の塔 | 逆轉彩虹之塔 | | 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 | 闇靄払う銀翼 | - | @@ -143,69 +148,72 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20230118 | raid 20220127 | - | - | - | - | 演習神秘事件調查 | | 20230202 | event 20200806 cn | The Enigma and the Shark | - | - | - | 復刻最重要的寶物 | | 20230216 | event 20220224 cn | Abyssal Refrain | - | - | - | 深度回音 | -| 20230223 | event 20230223 cn | Revelations of Dust | 湮烬尘墟 | Revelations of Dust | 黙示の遺構 | - | +| 20230223 | event 20230223 cn | Revelations of Dust | 湮烬尘墟 | Revelations of Dust | 黙示の遺構 | - | | 20230309 | event 20210624 cn | Swirling Cherry Blossoms | - | - | - | 復刻-浮櫻影華 | -| 20230309 | event 20210422 cn | Daedalian Hymn | 复刻复兴的赞美诗 | Daedalian Hymn Rerun | 讃える復興の迷路(復刻) | - | +| 20230309 | event 20210422 cn | Daedalian Hymn | 复刻复兴的赞美诗 | Daedalian Hymn Rerun | 讃える復興の迷路(復刻) | - | | 20230323 | raid 20220630 | Angel of Iris | - | - | - | 來自鳶尾的天使 | -| 20230323 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - | -| 20230413 | event 20211111 cn | The Flame-Touched Dagger | 复刻杰诺瓦的焰火 | The Flame-Touched Dagger Rerun | 復刻-燈火のシニエ | - | +| 20230323 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - | +| 20230413 | event 20211111 cn | The Flame-Touched Dagger | 复刻杰诺瓦的焰火 | The Flame-Touched Dagger Rerun | 復刻-燈火のシニエ | - | | 20230413 | event 20210819 cn | Microlayer Medley | - | - | - | 復刻-微層混合 | -| 20230427 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | 假日航線 | +| 20230427 | event 20201126 cn | Vacation Lane | 假日航线 | Vacation Lane | バケーションレーン | 假日航線 | | 20230525 | event 20220526 cn | Pledge of the Radiant Court | - | - | - | 泠誓光庭 | -| 20230525 | event 20230525 cn | Confluence of Nothingness | 空相交汇点 | Confluence of Nothingness | 覆天せし万象の塵 | - | -| 20230615 | event 20200603 cn | Counterattack Within the Fjord | - | - | - | 復刻峽灣間的反擊 | -| 20230621 | event 20210527 cn | Mirror Involution Rerun | 复刻镜位螺旋 | Mirror Involution Rerun | 照らす螺旋の鏡海(復刻) | - | -| 20230629 | event 20220428 cn | Rondo at Rainbow's End | - | - | - | 虹彩的終幕曲 | -| 20230629 | raid 20230629 | Reflections of the Oasis | 绿洲往事 | Reflections of the Oasis | 緑地伽話 | - | -| 20230713 | event 20220818 cn | Operation Convergence | - | - | 結像点作戦 | 遠匯點作戰 | -| 20230720 | event 20211125 cn | World-spanning Arclight | 复刻交汇世界的弧光 | World-spanning Arclight Rerun | 弧光は交わる世界にて(復刻) | - | -| 20230727 | event 20200917 cn | Dreamwaker's Butterfly | - | - | - | 復刻-蝶海夢花 | -| 20230803 | event 20211125 cn | World-spanning Arclight | - | - | - | 復刻-交匯世界的弧光 | -| 20230803 | event 20230803 cn | Anthem of Remembrance | 奏响鸢尾之歌 | Anthem of Remembrance | 燃ゆる聖都の回想曲 | - | -| 20230817 | event 20230817 cn | The Fool's Scales | 愚者的天平 | The Fool's Scales | 愚者の天秤 | - | -| 20230817 | event 20220414 cn | Aurora Noctis | - | - | - | 復刻-永夜幻光 | -| 20230824 | coalition 20230323 | Frostfall | - | - | - | 極地風暴 | -| 20230914 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 紫絳槿嵐 | -| 20230914 | event 20230914 cn | Effulgence Before Eclipse | 须臾望月抄 | Effulgence Before Eclipse | 須臾望月抄 | - | -| 20231012 | event 20201229 cn | Inverted Orthant | - | - | - | 復刻-負象限作戰 | -| 20231019 | raid 20221027 | Fight! Royal Maid | - | - | - | 戰鬥!皇家女僕隊3rd | -| 20231026 | event 20231026 cn | Tempesta and the Fountain of Youth | 飓风与青春之泉 | Tempesta and the Fountain of Youth | テンペスタと若返りの泉 | - | -| 20231109 | event 20210916 cn | Upon the Shimmering Blue | 复刻碧海光粼 | Upon the Shimmering Blue Rerun | 駆けよ 碧海の吹き風(復刻) | - | -| 20231109 | event 20220728 cn | Aquilifer's Ballade | - | - | - | 雄鷹的敘事歌 | -| 20231123 | event 20220210 cn | Northern Overture Rerun | - | - | - | 復刻北境序曲 | -| 20231123 | event 20231123 cn | The Ninja Scrolls: Azur Flash | 苍闪忍法帖 | The Ninja Scrolls: Azur Flash | 蒼閃忍法帖 | - | -| 20231130 | event 20231123 cn | The Ninja Scrolls: Azur Flash | - | - | - | 蒼閃忍法帖 | -| 20221222 | event 20221222 cn | Parallel Superimposition | - | - | - | 定向折疊 | -| 20231221 | event 20231221 cn | Light-Chasing Sea of Stars | 星海逐光 | Light-Chasing Sea of Stars | 光追う星の海 | - | -| 20240104 | event 20210225 cn | Khorovod of Dawn's Rime | - | - | - | 復刻破曉冰華 | -| 20240111 | event 20211229 cn | Tower of Transcendence Rerun | 复刻逆转彩虹之塔 | Tower of Transcendence Rerun | 遡望せし虹彩の塔(復刻)    | - | -| 20240111 | event 20230803 cn | Anthem of Remembrance | - | - | - | 奏響鳶尾之歌 | -| 20240125 | event 20210527 cn | Mirror Involution Rerun | - | - | - | 復刻鏡位螺旋 | -| 20240130 | raid 20240130 | Spring Festive Fiasco | 寰昌宇定家事忙 | Spring Festive Fiasco | 新春宴会狂騒曲 | - | -| 20240206 | raid 20230118 | Winter Pathfinder | - | - | - | 冬日的尋路人 | -| 20240229 | event 20230223 cn | Revelations of Dust | - | - | - | 湮燼塵墟 | -| 20240229 | event 20240229 cn | Snowrealm Peregrination | 雪境迷踪 | Snowrealm Peregrination | 銀界遊廻 | - | -| 20240314 | event 20210422 cn | Daedalian Hymn | - | - | - | 復刻復興的讚美詩 | -| 20240314 | event 20220324 cn | Virtual Tower Rerun | 复刻虚像构筑之塔 | Virtual Tower Rerun | 幻像の塔(復刻) | - | -| 20240321 | raid 20230629 | Reflections of the Oasis | - | - | - | 綠洲往事 | -| 20240328 | raid 20240328 | From Zero to Hero | 从零开始的魔王讨伐之旅 | From Zero to Hero | ゼロから頑張る魔王討伐 | - | -| 20240403 | event 20211111 cn | The Flame-Touched Dagger | - | - | - | 復刻杰諾瓦的焰火 | -| 20240411 | event 20220224 cn | Abyssal Refrain Rerun | 复刻深度回音 | Abyssal Refrain Rerun | 鳴動せし星霜の淵(復刻) | - | -| 20240425 | event 20230817 cn | The Fool's Scales | - | - | - | 愚者的天平 | -| 20240425 | event 20240425 cn | Heart-Linking Harmony | 共鸣的PASSION | Heart-Linking Harmony | 共鳴のパッション | - | -| 20240509 | event 20210916 cn | Upon the Shimmering Blue | - | - | - | 復刻碧海光粼 | -| 20240521 | event 20240521 cn | Light of the Martyrium | 绽放于辉光之城 | Light of the Martyrium | 赫輝のマルティリウム | - | -| 20240523 | event 20230525 cn | Confluence of Nothingness | - | - | - | 空相交會點 | -| 20240613 | event 20201012 cn | Sundered Blue | - | - | - | 復刻劃破海空之翼 | -| 20240620 | event 20220428 cn | Rondo at Rainbow's End Rerun | 复刻虹彩的终幕曲 | Rondo at Rainbow's End Rerun | 吟ずる瑠璃の楽章(復刻) | - | -| 20240627 | event 20231026 cn | Tempesta and the Fountain of Youth | - | - | - | 飓風與青春之泉 | -| 20240627 | coalition 20240627 | Welcome to Little Academy | 欢迎来到童心学院 | Welcome to Little Academy | リトル学園へようこそ | - | -| 20240711 | event 20211229 cn | Tower of Transcendence Rerun | - | - | -  | 復刻逆轉彩虹之塔 | -| 20240718 | event 20220526 cn | Pledge of the Radiant Court Rerun | 复刻泠誓光庭 | Pledge of the Radiant Court Rerun | 復刻诚閃の剣 搖光の城 | - | -| 20240725 | event 20240725 cn | Interlude of Illusions | 幻梦间奏曲 | Interlude of Illusions | 夢幻の間奏曲 | - | -| 20240725 | raid 20240328 | From Zero to Hero | - | - | - | 從零開始的魔王討伐之旅 | -| 20240815 | event 20240815 cn | Windborne Steel Wings | 铁翼擎风 | Windborne Steel Wings | 錬翼空翔 | - | -| 20240815 | event 20240425 cn | Heart-Linking Harmony | - | - | - | 共鳴的PASSION | -| 20240829 | event 20240829 cn | Whence Flowers Bear No Fruit | 埋葬于彼岸之花 | Whence Flowers Bear No Fruit | 徒花咲かす彼岸 | - | -| 20240829 | event 20220324 cn | Virtual Tower | - | - | - | 復刻虛像構築之塔 | -| 20240912 | event 20240912 cn | Ode of Everblooming Crimson | 唤醒苍红之炎 | Ode of Everblooming Crimson | 絳染む丹華の詠歌 | - | +| 20230525 | event 20230525 cn | Confluence of Nothingness | 空相交汇点 | Confluence of Nothingness | 覆天せし万象の塵 | - | +| 20230615 | event 20200603 cn | Counterattack Within the Fjord | - | - | - | 復刻峽灣間的反擊 | +| 20230621 | event 20210527 cn | Mirror Involution Rerun | 复刻镜位螺旋 | Mirror Involution Rerun | 照らす螺旋の鏡海(復刻) | - | +| 20230629 | event 20220428 cn | Rondo at Rainbow's End | - | - | - | 虹彩的終幕曲 | +| 20230629 | raid 20230629 | Reflections of the Oasis | 绿洲往事 | Reflections of the Oasis | 緑地伽話 | - | +| 20230713 | event 20220818 cn | Operation Convergence | - | - | 結像点作戦 | 遠匯點作戰 | +| 20230720 | event 20211125 cn | World-spanning Arclight | 复刻交汇世界的弧光 | World-spanning Arclight Rerun | 弧光は交わる世界にて(復刻) | - | +| 20230727 | event 20200917 cn | Dreamwaker's Butterfly | - | - | - | 復刻-蝶海夢花 | +| 20230803 | event 20211125 cn | World-spanning Arclight | - | - | - | 復刻-交匯世界的弧光 | +| 20230803 | event 20230803 cn | Anthem of Remembrance | 奏响鸢尾之歌 | Anthem of Remembrance | 燃ゆる聖都の回想曲 | - | +| 20230817 | event 20230817 cn | The Fool's Scales | 愚者的天平 | The Fool's Scales | 愚者の天秤 | - | +| 20230817 | event 20220414 cn | Aurora Noctis | - | - | - | 復刻-永夜幻光 | +| 20230824 | coalition 20230323 | Frostfall | - | - | - | 極地風暴 | +| 20230914 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 紫絳槿嵐 | +| 20230914 | event 20230914 cn | Effulgence Before Eclipse | 须臾望月抄 | Effulgence Before Eclipse | 須臾望月抄 | - | +| 20231012 | event 20201229 cn | Inverted Orthant | - | - | - | 復刻-負象限作戰 | +| 20231019 | raid 20221027 | Fight! Royal Maid | - | - | - | 戰鬥!皇家女僕隊3rd | +| 20231026 | event 20231026 cn | Tempesta and the Fountain of Youth | 飓风与青春之泉 | Tempesta and the Fountain of Youth | テンペスタと若返りの泉 | - | +| 20231109 | event 20210916 cn | Upon the Shimmering Blue | 复刻碧海光粼 | Upon the Shimmering Blue Rerun | 駆けよ 碧海の吹き風(復刻) | - | +| 20231109 | event 20220728 cn | Aquilifer's Ballade | - | - | - | 雄鷹的敘事歌 | +| 20231123 | event 20220210 cn | Northern Overture Rerun | - | - | - | 復刻北境序曲 | +| 20231123 | event 20231123 cn | The Ninja Scrolls: Azur Flash | 苍闪忍法帖 | The Ninja Scrolls: Azur Flash | 蒼閃忍法帖 | - | +| 20231130 | event 20231123 cn | The Ninja Scrolls: Azur Flash | - | - | - | 蒼閃忍法帖 | +| 20221222 | event 20221222 cn | Parallel Superimposition | - | - | - | 定向折疊 | +| 20231221 | event 20231221 cn | Light-Chasing Sea of Stars | 星海逐光 | Light-Chasing Sea of Stars | 光追う星の海 | - | +| 20240104 | event 20210225 cn | Khorovod of Dawn's Rime | - | - | - | 復刻破曉冰華 | +| 20240111 | event 20211229 cn | Tower of Transcendence Rerun | 复刻逆转彩虹之塔 | Tower of Transcendence Rerun | 遡望せし虹彩の塔(復刻) | - | +| 20240111 | event 20230803 cn | Anthem of Remembrance | - | - | - | 奏響鳶尾之歌 | +| 20240125 | event 20210527 cn | Mirror Involution Rerun | - | - | - | 復刻鏡位螺旋 | +| 20240130 | raid 20240130 | Spring Festive Fiasco | 寰昌宇定家事忙 | Spring Festive Fiasco | 新春宴会狂騒曲 | - | +| 20240206 | raid 20230118 | Winter Pathfinder | - | - | - | 冬日的尋路人 | +| 20240229 | event 20230223 cn | Revelations of Dust | - | - | - | 湮燼塵墟 | +| 20240229 | event 20240229 cn | Snowrealm Peregrination | 雪境迷踪 | Snowrealm Peregrination | 銀界遊廻 | - | +| 20240314 | event 20210422 cn | Daedalian Hymn | - | - | - | 復刻復興的讚美詩 | +| 20240314 | event 20220324 cn | Virtual Tower Rerun | 复刻虚像构筑之塔 | Virtual Tower Rerun | 幻像の塔(復刻) | - | +| 20240321 | raid 20230629 | Reflections of the Oasis | - | - | - | 綠洲往事 | +| 20240328 | raid 20240328 | From Zero to Hero | 从零开始的魔王讨伐之旅 | From Zero to Hero | ゼロから頑張る魔王討伐 | - | +| 20240403 | event 20211111 cn | The Flame-Touched Dagger | - | - | - | 復刻杰諾瓦的焰火 | +| 20240411 | event 20220224 cn | Abyssal Refrain Rerun | 复刻深度回音 | Abyssal Refrain Rerun | 鳴動せし星霜の淵(復刻) | - | +| 20240425 | event 20230817 cn | The Fool's Scales | - | - | - | 愚者的天平 | +| 20240425 | event 20240425 cn | Heart-Linking Harmony | 共鸣的PASSION | Heart-Linking Harmony | 共鳴のパッション | - | +| 20240509 | event 20210916 cn | Upon the Shimmering Blue | - | - | - | 復刻碧海光粼 | +| 20240521 | event 20240521 cn | Light of the Martyrium | 绽放于辉光之城 | Light of the Martyrium | 赫輝のマルティリウム | - | +| 20240523 | event 20230525 cn | Confluence of Nothingness | - | - | - | 空相交會點 | +| 20240613 | event 20201012 cn | Sundered Blue | - | - | - | 復刻劃破海空之翼 | +| 20240620 | event 20220428 cn | Rondo at Rainbow's End Rerun | 复刻虹彩的终幕曲 | Rondo at Rainbow's End Rerun | 吟ずる瑠璃の楽章(復刻) | - | +| 20240627 | event 20231026 cn | Tempesta and the Fountain of Youth | - | - | - | 飓風與青春之泉 | +| 20240627 | coalition 20240627 | Welcome to Little Academy | 欢迎来到童心学院 | Welcome to Little Academy | リトル学園へようこそ | - | +| 20240711 | event 20211229 cn | Tower of Transcendence Rerun | - | - | - | 復刻逆轉彩虹之塔 | +| 20240718 | event 20220526 cn | Pledge of the Radiant Court Rerun | 复刻泠誓光庭 | Pledge of the Radiant Court Rerun | 復刻诚閃の剣 搖光の城 | - | +| 20240725 | event 20240725 cn | Interlude of Illusions | 幻梦间奏曲 | Interlude of Illusions | 夢幻の間奏曲 | - | +| 20240725 | raid 20240328 | From Zero to Hero | - | - | - | 從零開始的魔王討伐之旅 | +| 20240815 | event 20240815 cn | Windborne Steel Wings | 铁翼擎风 | Windborne Steel Wings | 錬翼空翔 | - | +| 20240815 | event 20240425 cn | Heart-Linking Harmony | - | - | - | 共鳴的PASSION | +| 20240829 | event 20240829 cn | Whence Flowers Bear No Fruit | 埋葬于彼岸之花 | Whence Flowers Bear No Fruit | 徒花咲かす彼岸 | - | +| 20240829 | event 20220324 cn | Virtual Tower | - | - | - | 復刻虛像構築之塔 | +| 20240912 | event 20240912 cn | Ode of Everblooming Crimson | 唤醒苍红之炎 | Ode of Everblooming Crimson | 絳染む丹華の詠歌 | - | +| 20240919 | event 20230914 cn | Effulgence Before Eclipse | - | - | - | 須臾望月抄 | +| 20241017 | event 20220728 cn | Aquilifer's Ballade Rerun | 复刻雄鹰的叙事歌 | Aquilifer's Ballade Rerun | 鋼鷲の冒険譚(復刻) | - | +| 20241017 | coalition 20240627 | Welcome to Little Academy | - | - | - | 歡迎來到童心學院 | \ No newline at end of file diff --git a/campaign/campaign_war_archives/campaign_base.py b/campaign/campaign_war_archives/campaign_base.py index 26cdf43d5..ecfac7b81 100644 --- a/campaign/campaign_war_archives/campaign_base.py +++ b/campaign/campaign_war_archives/campaign_base.py @@ -58,12 +58,15 @@ class CampaignBase(CampaignBase_): Fixed number of scrolls until give up, may need to increase as more war archives campaigns are added """ - for _ in range(10): + for _ in range(20): if skip_first_screenshot: skip_first_screenshot = False else: self.device.screenshot() + while self.device.click_record and self.device.click_record[-1] == 'WAR_ARCHIVES_SCROLL': + self.device.click_record.pop() + # Drag may result in accidental exit, recover # before starting next search attempt while not self.appear(WAR_ARCHIVES_CHECK): @@ -80,7 +83,7 @@ class CampaignBase(CampaignBase_): if WAR_ARCHIVES_SCROLL.at_bottom(main=self): WAR_ARCHIVES_SCROLL.set_top(main=self) else: - WAR_ARCHIVES_SCROLL.next_page(main=self) + WAR_ARCHIVES_SCROLL.next_page(main=self, page=0.66) continue else: break diff --git a/campaign/event_20210422_cn/sp.py b/campaign/event_20210422_cn/sp.py deleted file mode 100644 index 1205a0310..000000000 --- a/campaign/event_20210422_cn/sp.py +++ /dev/null @@ -1,126 +0,0 @@ -from module.campaign.campaign_base import CampaignBase -from module.logger import logger -from module.map.map_base import CampaignMap -from module.map.map_grids import RoadGrids, SelectedGrids - -MAP = CampaignMap('SP') -MAP.shape = 'G10' -MAP.camera_data = ['D2', 'D6', 'D8'] -MAP.camera_data_spawn_point = ['D8'] -MAP.map_data = """ - -- ++ ++ MB ++ ++ -- - ++ ++ ++ -- ++ ++ ++ - ME -- -- -- -- -- ME - ++ ++ ++ -- ++ ++ ++ - ME -- -- -- -- -- ME - ++ ++ ++ -- ++ ++ ++ - MS -- ++ MS ++ -- MS - ++ -- ++ -- ++ -- ++ - -- -- -- __ -- -- -- - -- -- SP -- SP -- -- -""" -MAP.weight_data = """ - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 -""" -# MAP.maze_data = [('D6', 'B8', 'F8'), ('D4', 'C5', 'E5'), ('D2', 'C3', 'E3', 'D8')] -MAP.spawn_data = [ - {'battle': 0, 'enemy': 4, 'siren': 3}, - {'battle': 1}, - {'battle': 2}, - {'battle': 3}, - {'battle': 4}, - {'battle': 5}, - {'battle': 6}, - {'battle': 7, 'boss': 1}, -] -A1, B1, C1, D1, E1, F1, G1, \ -A2, B2, C2, D2, E2, F2, G2, \ -A3, B3, C3, D3, E3, F3, G3, \ -A4, B4, C4, D4, E4, F4, G4, \ -A5, B5, C5, D5, E5, F5, G5, \ -A6, B6, C6, D6, E6, F6, G6, \ -A7, B7, C7, D7, E7, F7, G7, \ -A8, B8, C8, D8, E8, F8, G8, \ -A9, B9, C9, D9, E9, F9, G9, \ -A10, B10, C10, D10, E10, F10, G10, \ - = MAP.flatten() - - -class Config: - # ===== Start of generated config ===== - MAP_HAS_MAP_STORY = False - MAP_HAS_FLEET_STEP = False - MAP_HAS_AMBUSH = False - STAR_REQUIRE_1 = 0 - STAR_REQUIRE_2 = 0 - STAR_REQUIRE_3 = 0 - # ===== End of generated config ===== - - # MAP_HAS_MAZE = True - MAP_HAS_SIREN = True - MAP_SIREN_TEMPLATE = ['Warspite', 'Formidable', 'Illustrious'] - MAP_SWIPE_MULTIPLY = (0.963, 0.981) - MAP_SWIPE_MULTIPLY_MINITOUCH = (0.932, 0.949) - MAP_SWIPE_MULTIPLY_MAATOUCH = (0.904, 0.921) - INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 - # EDGE_LINES_HOUGHLINES_THRESHOLD = 40 - - -class Campaign(CampaignBase): - MAP = MAP - - def battle_0(self): - self.clear_chosen_enemy(D7, expected='siren') - return True - - def battle_1(self): - self.goto(C9) - self.goto(B9) - self.clear_chosen_enemy(A7, expected='siren') - return True - - def battle_2(self): - self.clear_chosen_enemy(G7, expected='siren') - return True - - def battle_3(self): - self.goto(D5) - self.clear_chosen_enemy(A5) - return True - - def battle_4(self): - self.clear_chosen_enemy(G5) - return True - - def battle_5(self): - self.goto(D3) - self.clear_chosen_enemy(A3) - return True - - def battle_6(self): - self.clear_chosen_enemy(G3) - return True - - def battle_7(self): - if self.fleet_boss_index == 2: - self.fleet_boss.switch_to() - self.goto(D7) - self.goto(D5) - self.goto(D6) - self.goto(D5) - self.goto(D3) - self.goto(D4) - self.goto(D3) - self.clear_chosen_enemy(D1, expected='boss') - else: - self.clear_chosen_enemy(D1, expected='boss') - return True diff --git a/campaign/event_20210916_cn/sp.py b/campaign/event_20210916_cn/sp.py deleted file mode 100644 index 0cef4a53b..000000000 --- a/campaign/event_20210916_cn/sp.py +++ /dev/null @@ -1,109 +0,0 @@ -from module.logger import logger -from module.map.map_base import CampaignMap -from module.map.map_grids import RoadGrids, SelectedGrids - -from .campaign_base import CampaignBase - -MAP = CampaignMap('SP') -MAP.shape = 'H8' -MAP.camera_data = ['C4', 'C5'] -MAP.camera_data_spawn_point = ['C5'] -MAP.map_data = """ - ++ ++ ++ -- -- ++ ++ ++ - ++ ++ -- -- ++ -- ++ ++ - ++ -- -- ++ -- MB -- ++ - -- -- ME -- -- -- ++ -- - -- -- -- ME -- ++ -- -- - -- SP __ -- ME -- -- ++ - ++ -- SP -- -- -- ++ ++ - ++ ++ -- -- -- ++ ++ ++ -""" -MAP.weight_data = """ - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 -""" -MAP.fortress_data = [('D4', 'D6', 'C5', 'E5'), 'E4'] -MAP.spawn_data = [ - {'battle': 0, 'enemy': 3}, - {'battle': 1}, - {'battle': 2}, - {'battle': 3}, - {'battle': 4}, - {'battle': 5}, - {'battle': 6}, - {'battle': 7, 'boss': 1}, -] -A1, B1, C1, D1, E1, F1, G1, H1, \ -A2, B2, C2, D2, E2, F2, G2, H2, \ -A3, B3, C3, D3, E3, F3, G3, H3, \ -A4, B4, C4, D4, E4, F4, G4, H4, \ -A5, B5, C5, D5, E5, F5, G5, H5, \ -A6, B6, C6, D6, E6, F6, G6, H6, \ -A7, B7, C7, D7, E7, F7, G7, H7, \ -A8, B8, C8, D8, E8, F8, G8, H8, \ - = MAP.flatten() - - -class Config: - # ===== Start of generated config ===== - # MAP_SIREN_TEMPLATE = ['1564301', '1564302', '1564303'] - # MOVABLE_ENEMY_TURN = (2,) - # MAP_HAS_SIREN = True - # MAP_HAS_MOVABLE_ENEMY = True - MAP_HAS_MAP_STORY = False - MAP_HAS_FLEET_STEP = False - MAP_HAS_AMBUSH = False - MAP_HAS_MYSTERY = False - STAR_REQUIRE_1 = 0 - STAR_REQUIRE_2 = 0 - STAR_REQUIRE_3 = 0 - # ===== End of generated config ===== - - MAP_IS_ONE_TIME_STAGE = True - MAP_HAS_FORTRESS = True - MAP_SWIPE_PREDICT = False - INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 - EDGE_LINES_HOUGHLINES_THRESHOLD = 40 - INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { - 'height': (80, 255 - 40), - 'width': (0.9, 10), - 'prominence': 10, - 'distance': 35, - } - EDGE_LINES_FIND_PEAKS_PARAMETERS = { - 'height': (255 - 24, 255), - 'prominence': 10, - 'distance': 50, - # 'width': (0, 7), - 'wlen': 1000 - } - HOMO_CANNY_THRESHOLD = (60, 60) - # MAP_ENEMY_GENRE_DETECTION_SCALING = { - # 'DD': 1.111, - # 'CL': (1, 1.111), - # 'CA': (1, 1.111), - # 'CV': 1.111, - # 'BB': 1.111, - # } - MAP_SWIPE_MULTIPLY = (0.999, 1.018) - MAP_SWIPE_MULTIPLY_MINITOUCH = (0.966, 0.984) - MAP_SWIPE_MULTIPLY_MAATOUCH = (0.938, 0.955) - - -class Campaign(CampaignBase): - MAP = MAP - - def battle_0(self): - if self.clear_siren(): - return True - - return self.battle_default() - - def battle_7(self): - return self.fleet_boss.clear_boss() diff --git a/campaign/event_20211229_cn/sp.py b/campaign/event_20211229_cn/sp.py deleted file mode 100644 index 9b5770f4e..000000000 --- a/campaign/event_20211229_cn/sp.py +++ /dev/null @@ -1,107 +0,0 @@ -from module.logger import logger -from module.map.map_base import CampaignMap -from module.map.map_grids import RoadGrids, SelectedGrids - -from .campaign_base import CampaignBase - -MAP = CampaignMap('SP') -MAP.shape = 'I8' -MAP.camera_data = ['E3', 'E5'] -MAP.camera_data_spawn_point = ['E5'] -MAP.map_data = """ - ++ ++ ++ -- -- -- ++ ++ ++ - -- -- -- ++ MB ++ -- -- -- - ++ MS -- ME -- ME -- MS ++ - ++ ++ -- ++ MS ++ -- ++ ++ - ++ ME -- ++ __ ++ -- ME ++ - -- -- -- -- -- -- -- -- -- - ++ ++ -- SP ++ SP -- ++ ++ - ++ ++ -- ++ ++ ++ -- ++ ++ -""" -MAP.weight_data = """ - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 - 50 50 50 50 50 50 50 50 50 -""" -MAP.spawn_data = [ - {'battle': 0, 'enemy': 2, 'siren': 2}, - {'battle': 1, 'enemy': 1}, - {'battle': 2, 'enemy': 2, 'siren': 1}, - {'battle': 3, 'enemy': 1}, - {'battle': 4, 'enemy': 2}, - {'battle': 5, 'enemy': 1}, - {'battle': 6}, - {'battle': 7, 'boss': 1}, -] -A1, B1, C1, D1, E1, F1, G1, H1, I1, \ -A2, B2, C2, D2, E2, F2, G2, H2, I2, \ -A3, B3, C3, D3, E3, F3, G3, H3, I3, \ -A4, B4, C4, D4, E4, F4, G4, H4, I4, \ -A5, B5, C5, D5, E5, F5, G5, H5, I5, \ -A6, B6, C6, D6, E6, F6, G6, H6, I6, \ -A7, B7, C7, D7, E7, F7, G7, H7, I7, \ -A8, B8, C8, D8, E8, F8, G8, H8, I8, \ - = MAP.flatten() - - -class Config: - # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['Lover'] - MOVABLE_ENEMY_TURN = (2,) - MAP_HAS_SIREN = True - MAP_HAS_MOVABLE_ENEMY = True - MAP_HAS_MAP_STORY = False - MAP_HAS_FLEET_STEP = True - MAP_HAS_AMBUSH = False - MAP_HAS_MYSTERY = False - STAR_REQUIRE_1 = 0 - STAR_REQUIRE_2 = 0 - STAR_REQUIRE_3 = 0 - # ===== End of generated config ===== - - INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { - 'height': (150, 255 - 17), - 'width': (0.9, 10), - 'prominence': 10, - 'distance': 35, - } - EDGE_LINES_FIND_PEAKS_PARAMETERS = { - 'height': (255 - 17, 255), - 'prominence': 10, - 'distance': 50, - 'wlen': 1000 - } - HOMO_EDGE_COLOR_RANGE = (0, 17) - INTERNAL_LINES_HOUGHLINES_THRESHOLD = 40 - EDGE_LINES_HOUGHLINES_THRESHOLD = 40 - MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' - - MAP_IS_ONE_TIME_STAGE = True - MAP_HAS_MOVABLE_NORMAL_ENEMY = True - MOVABLE_NORMAL_ENEMY_TURN = (2,) - MAP_SIREN_MOVE_WAIT = 1.0 - - -class Campaign(CampaignBase): - MAP = MAP - ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' - - def battle_0(self): - if self.clear_any_enemy(sort=('cost_2',)): - return True - - return self.battle_default() - - def battle_5(self): - if self.clear_any_enemy(sort=('cost_2',)): - return True - - return self.battle_default() - - def battle_7(self): - return self.fleet_boss.clear_boss() diff --git a/campaign/event_20201012_cn/sp1.py b/campaign/war_archives_20201012_cn/sp1.py similarity index 97% rename from campaign/event_20201012_cn/sp1.py rename to campaign/war_archives_20201012_cn/sp1.py index d0f4ee190..1954a8cc2 100644 --- a/campaign/event_20201012_cn/sp1.py +++ b/campaign/war_archives_20201012_cn/sp1.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20201012_cn/sp2.py b/campaign/war_archives_20201012_cn/sp2.py similarity index 96% rename from campaign/event_20201012_cn/sp2.py rename to campaign/war_archives_20201012_cn/sp2.py index 20d5f422b..7637bd53b 100644 --- a/campaign/event_20201012_cn/sp2.py +++ b/campaign/war_archives_20201012_cn/sp2.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20201012_cn/sp3.py b/campaign/war_archives_20201012_cn/sp3.py similarity index 96% rename from campaign/event_20201012_cn/sp3.py rename to campaign/war_archives_20201012_cn/sp3.py index f1bab999e..4066b3756 100644 --- a/campaign/event_20201012_cn/sp3.py +++ b/campaign/war_archives_20201012_cn/sp3.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/a1.py b/campaign/war_archives_20210422_cn/a1.py similarity index 97% rename from campaign/event_20210422_cn/a1.py rename to campaign/war_archives_20210422_cn/a1.py index a3110952d..270acfde7 100644 --- a/campaign/event_20210422_cn/a1.py +++ b/campaign/war_archives_20210422_cn/a1.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/a2.py b/campaign/war_archives_20210422_cn/a2.py similarity index 96% rename from campaign/event_20210422_cn/a2.py rename to campaign/war_archives_20210422_cn/a2.py index f69d82311..a9d2ad7be 100644 --- a/campaign/event_20210422_cn/a2.py +++ b/campaign/war_archives_20210422_cn/a2.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/a3.py b/campaign/war_archives_20210422_cn/a3.py similarity index 96% rename from campaign/event_20210422_cn/a3.py rename to campaign/war_archives_20210422_cn/a3.py index df7535581..2e9db9586 100644 --- a/campaign/event_20210422_cn/a3.py +++ b/campaign/war_archives_20210422_cn/a3.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/b1.py b/campaign/war_archives_20210422_cn/b1.py similarity index 97% rename from campaign/event_20210422_cn/b1.py rename to campaign/war_archives_20210422_cn/b1.py index 6f6bc775a..8c9613590 100644 --- a/campaign/event_20210422_cn/b1.py +++ b/campaign/war_archives_20210422_cn/b1.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/b2.py b/campaign/war_archives_20210422_cn/b2.py similarity index 97% rename from campaign/event_20210422_cn/b2.py rename to campaign/war_archives_20210422_cn/b2.py index e839b064c..5d7785afe 100644 --- a/campaign/event_20210422_cn/b2.py +++ b/campaign/war_archives_20210422_cn/b2.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/b3.py b/campaign/war_archives_20210422_cn/b3.py similarity index 97% rename from campaign/event_20210422_cn/b3.py rename to campaign/war_archives_20210422_cn/b3.py index 6d48473b5..b8283ccff 100644 --- a/campaign/event_20210422_cn/b3.py +++ b/campaign/war_archives_20210422_cn/b3.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/c1.py b/campaign/war_archives_20210422_cn/c1.py similarity index 97% rename from campaign/event_20210422_cn/c1.py rename to campaign/war_archives_20210422_cn/c1.py index c1811ba10..0bbc6649d 100644 --- a/campaign/event_20210422_cn/c1.py +++ b/campaign/war_archives_20210422_cn/c1.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/c2.py b/campaign/war_archives_20210422_cn/c2.py similarity index 96% rename from campaign/event_20210422_cn/c2.py rename to campaign/war_archives_20210422_cn/c2.py index 86e8b078c..c40fc1961 100644 --- a/campaign/event_20210422_cn/c2.py +++ b/campaign/war_archives_20210422_cn/c2.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/c3.py b/campaign/war_archives_20210422_cn/c3.py similarity index 96% rename from campaign/event_20210422_cn/c3.py rename to campaign/war_archives_20210422_cn/c3.py index b5b7b3074..c8cf85dba 100644 --- a/campaign/event_20210422_cn/c3.py +++ b/campaign/war_archives_20210422_cn/c3.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/d1.py b/campaign/war_archives_20210422_cn/d1.py similarity index 97% rename from campaign/event_20210422_cn/d1.py rename to campaign/war_archives_20210422_cn/d1.py index 32a7541de..50edac244 100644 --- a/campaign/event_20210422_cn/d1.py +++ b/campaign/war_archives_20210422_cn/d1.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/d2.py b/campaign/war_archives_20210422_cn/d2.py similarity index 97% rename from campaign/event_20210422_cn/d2.py rename to campaign/war_archives_20210422_cn/d2.py index 05ca78fd9..a5a413ddf 100644 --- a/campaign/event_20210422_cn/d2.py +++ b/campaign/war_archives_20210422_cn/d2.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210422_cn/d3.py b/campaign/war_archives_20210422_cn/d3.py similarity index 97% rename from campaign/event_20210422_cn/d3.py rename to campaign/war_archives_20210422_cn/d3.py index 94cc4d234..c20e7ae8e 100644 --- a/campaign/event_20210422_cn/d3.py +++ b/campaign/war_archives_20210422_cn/d3.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids diff --git a/campaign/event_20210916_cn/a1.py b/campaign/war_archives_20210916_cn/a1.py similarity index 100% rename from campaign/event_20210916_cn/a1.py rename to campaign/war_archives_20210916_cn/a1.py diff --git a/campaign/event_20210916_cn/a2.py b/campaign/war_archives_20210916_cn/a2.py similarity index 100% rename from campaign/event_20210916_cn/a2.py rename to campaign/war_archives_20210916_cn/a2.py diff --git a/campaign/event_20210916_cn/a3.py b/campaign/war_archives_20210916_cn/a3.py similarity index 100% rename from campaign/event_20210916_cn/a3.py rename to campaign/war_archives_20210916_cn/a3.py diff --git a/campaign/event_20210916_cn/b1.py b/campaign/war_archives_20210916_cn/b1.py similarity index 100% rename from campaign/event_20210916_cn/b1.py rename to campaign/war_archives_20210916_cn/b1.py diff --git a/campaign/event_20210916_cn/b2.py b/campaign/war_archives_20210916_cn/b2.py similarity index 100% rename from campaign/event_20210916_cn/b2.py rename to campaign/war_archives_20210916_cn/b2.py diff --git a/campaign/event_20210916_cn/b3.py b/campaign/war_archives_20210916_cn/b3.py similarity index 100% rename from campaign/event_20210916_cn/b3.py rename to campaign/war_archives_20210916_cn/b3.py diff --git a/campaign/event_20210916_cn/c1.py b/campaign/war_archives_20210916_cn/c1.py similarity index 100% rename from campaign/event_20210916_cn/c1.py rename to campaign/war_archives_20210916_cn/c1.py diff --git a/campaign/event_20210916_cn/c2.py b/campaign/war_archives_20210916_cn/c2.py similarity index 100% rename from campaign/event_20210916_cn/c2.py rename to campaign/war_archives_20210916_cn/c2.py diff --git a/campaign/event_20210916_cn/c3.py b/campaign/war_archives_20210916_cn/c3.py similarity index 100% rename from campaign/event_20210916_cn/c3.py rename to campaign/war_archives_20210916_cn/c3.py diff --git a/campaign/event_20210916_cn/campaign_base.py b/campaign/war_archives_20210916_cn/campaign_base.py similarity index 90% rename from campaign/event_20210916_cn/campaign_base.py rename to campaign/war_archives_20210916_cn/campaign_base.py index 7c4649edf..b965041aa 100644 --- a/campaign/event_20210916_cn/campaign_base.py +++ b/campaign/war_archives_20210916_cn/campaign_base.py @@ -1,6 +1,6 @@ from typing import List -from module.campaign.campaign_base import CampaignBase as CampaignBase_ +from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_ from module.logger import logger from module.map_detection.grid import GridInfo diff --git a/campaign/event_20210916_cn/d1.py b/campaign/war_archives_20210916_cn/d1.py similarity index 100% rename from campaign/event_20210916_cn/d1.py rename to campaign/war_archives_20210916_cn/d1.py diff --git a/campaign/event_20210916_cn/d2.py b/campaign/war_archives_20210916_cn/d2.py similarity index 100% rename from campaign/event_20210916_cn/d2.py rename to campaign/war_archives_20210916_cn/d2.py diff --git a/campaign/event_20210916_cn/d3.py b/campaign/war_archives_20210916_cn/d3.py similarity index 100% rename from campaign/event_20210916_cn/d3.py rename to campaign/war_archives_20210916_cn/d3.py diff --git a/campaign/event_20211111_cn/sp1.py b/campaign/war_archives_20211111_cn/sp1.py similarity index 97% rename from campaign/event_20211111_cn/sp1.py rename to campaign/war_archives_20211111_cn/sp1.py index d17cdb26a..2e522efab 100644 --- a/campaign/event_20211111_cn/sp1.py +++ b/campaign/war_archives_20211111_cn/sp1.py @@ -2,7 +2,7 @@ from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase MAP = CampaignMap('SP1') MAP.shape = 'H7' diff --git a/campaign/event_20211111_cn/sp2.py b/campaign/war_archives_20211111_cn/sp2.py similarity index 96% rename from campaign/event_20211111_cn/sp2.py rename to campaign/war_archives_20211111_cn/sp2.py index 3f503c1b3..516632faf 100644 --- a/campaign/event_20211111_cn/sp2.py +++ b/campaign/war_archives_20211111_cn/sp2.py @@ -2,7 +2,7 @@ from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from .sp1 import Config as ConfigBase MAP = CampaignMap('SP2') diff --git a/campaign/event_20211111_cn/sp3.py b/campaign/war_archives_20211111_cn/sp3.py similarity index 97% rename from campaign/event_20211111_cn/sp3.py rename to campaign/war_archives_20211111_cn/sp3.py index c45ed4aeb..ab77e5820 100644 --- a/campaign/event_20211111_cn/sp3.py +++ b/campaign/war_archives_20211111_cn/sp3.py @@ -2,7 +2,7 @@ from module.logger import logger from module.map.map_base import CampaignMap from module.map.map_grids import RoadGrids, SelectedGrids -from module.campaign.campaign_base import CampaignBase +from ..campaign_war_archives.campaign_base import CampaignBase from .sp1 import Config as ConfigBase MAP = CampaignMap('SP3') diff --git a/campaign/event_20211229_cn/a1.py b/campaign/war_archives_20211229_cn/a1.py similarity index 100% rename from campaign/event_20211229_cn/a1.py rename to campaign/war_archives_20211229_cn/a1.py diff --git a/campaign/event_20211229_cn/a2.py b/campaign/war_archives_20211229_cn/a2.py similarity index 100% rename from campaign/event_20211229_cn/a2.py rename to campaign/war_archives_20211229_cn/a2.py diff --git a/campaign/event_20211229_cn/a3.py b/campaign/war_archives_20211229_cn/a3.py similarity index 100% rename from campaign/event_20211229_cn/a3.py rename to campaign/war_archives_20211229_cn/a3.py diff --git a/campaign/event_20211229_cn/b1.py b/campaign/war_archives_20211229_cn/b1.py similarity index 100% rename from campaign/event_20211229_cn/b1.py rename to campaign/war_archives_20211229_cn/b1.py diff --git a/campaign/event_20211229_cn/b2.py b/campaign/war_archives_20211229_cn/b2.py similarity index 100% rename from campaign/event_20211229_cn/b2.py rename to campaign/war_archives_20211229_cn/b2.py diff --git a/campaign/event_20211229_cn/b3.py b/campaign/war_archives_20211229_cn/b3.py similarity index 100% rename from campaign/event_20211229_cn/b3.py rename to campaign/war_archives_20211229_cn/b3.py diff --git a/campaign/event_20211229_cn/bs1.py b/campaign/war_archives_20211229_cn/bs1.py similarity index 100% rename from campaign/event_20211229_cn/bs1.py rename to campaign/war_archives_20211229_cn/bs1.py diff --git a/campaign/event_20211229_cn/c1.py b/campaign/war_archives_20211229_cn/c1.py similarity index 100% rename from campaign/event_20211229_cn/c1.py rename to campaign/war_archives_20211229_cn/c1.py diff --git a/campaign/event_20211229_cn/c2.py b/campaign/war_archives_20211229_cn/c2.py similarity index 100% rename from campaign/event_20211229_cn/c2.py rename to campaign/war_archives_20211229_cn/c2.py diff --git a/campaign/event_20211229_cn/c3.py b/campaign/war_archives_20211229_cn/c3.py similarity index 100% rename from campaign/event_20211229_cn/c3.py rename to campaign/war_archives_20211229_cn/c3.py diff --git a/campaign/event_20211229_cn/campaign_base.py b/campaign/war_archives_20211229_cn/campaign_base.py similarity index 91% rename from campaign/event_20211229_cn/campaign_base.py rename to campaign/war_archives_20211229_cn/campaign_base.py index 26d2e84a8..a552caaa5 100644 --- a/campaign/event_20211229_cn/campaign_base.py +++ b/campaign/war_archives_20211229_cn/campaign_base.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase as CampaignBase_ +from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_ from module.logger import logger diff --git a/campaign/event_20211229_cn/d1.py b/campaign/war_archives_20211229_cn/d1.py similarity index 100% rename from campaign/event_20211229_cn/d1.py rename to campaign/war_archives_20211229_cn/d1.py diff --git a/campaign/event_20211229_cn/d2.py b/campaign/war_archives_20211229_cn/d2.py similarity index 100% rename from campaign/event_20211229_cn/d2.py rename to campaign/war_archives_20211229_cn/d2.py diff --git a/campaign/event_20211229_cn/d3.py b/campaign/war_archives_20211229_cn/d3.py similarity index 100% rename from campaign/event_20211229_cn/d3.py rename to campaign/war_archives_20211229_cn/d3.py diff --git a/campaign/event_20211229_cn/ds1.py b/campaign/war_archives_20211229_cn/ds1.py similarity index 100% rename from campaign/event_20211229_cn/ds1.py rename to campaign/war_archives_20211229_cn/ds1.py diff --git a/config/template.json b/config/template.json index d2c5f017f..39d115cf6 100644 --- a/config/template.json +++ b/config/template.json @@ -1267,7 +1267,7 @@ }, "Campaign": { "Name": "D3", - "Event": "war_archives_20210225_cn", + "Event": "war_archives_20211229_cn", "Mode": "normal", "UseClearMode": true, "UseFleetLock": true, @@ -1919,7 +1919,8 @@ "Mode": "seamlessly", "RetainTalentedGold": true, "RetainTalentedPurple": true, - "EnhanceIndex": 1 + "EnhanceIndex": 1, + "MaxFeedLevel": 5 }, "Storage": { "Storage": {} diff --git a/module/base/utils.py b/module/base/utils.py index d3621af1b..9bce6f004 100644 --- a/module/base/utils.py +++ b/module/base/utils.py @@ -965,6 +965,9 @@ def color_bar_percentage(image, area, prev_color, reverse=False, starter=0, thre prev_row = bar[:, prev_index] > 255 - threshold if not prev_row.size: return prev_index / length - prev_color = np.mean(image[:, prev_index], axis=0) + # Look back 5px to get average color + left = max(prev_index - 5, 0) + mask = np.where(bar[:, left:prev_index + 1] > 255 - threshold) + prev_color = np.mean(image[:, left:prev_index + 1][mask], axis=0) return 0. diff --git a/module/campaign/campaign_event.py b/module/campaign/campaign_event.py index 2d601b759..53428045c 100644 --- a/module/campaign/campaign_event.py +++ b/module/campaign/campaign_event.py @@ -8,6 +8,7 @@ from module.exception import RequireRestartGame from module.logger import logger from module.ui.assets import CAMPAIGN_MENU_NO_EVENT from module.ui.page import page_event, page_campaign_menu, page_sp, page_coalition +from module.war_archives.assets import WAR_ARCHIVES_CAMPAIGN_CHECK class CampaignEvent(CampaignStatus): @@ -155,26 +156,32 @@ class CampaignEvent(CampaignStatus): def ui_goto_event(self): # Already in page_event, skip event_check. if self.ui_get_current_page() == page_event: - logger.info('Already at page_event') - return True - else: - self.ui_goto(page_campaign_menu) - # Check event availability - if self.is_event_entrance_available(): - self.ui_goto(page_event) + if self.appear(WAR_ARCHIVES_CAMPAIGN_CHECK, offset=(20, 20)): + logger.info('At war archives') + self.ui_goto_main() + else: + logger.info('Already at page_event') return True + self.ui_goto(page_campaign_menu) + # Check event availability + if self.is_event_entrance_available(): + self.ui_goto(page_event) + return True def ui_goto_sp(self): # Already in page_event, skip event_check. if self.ui_get_current_page() == page_sp: - logger.info('Already at page_sp') - return True - else: - self.ui_goto(page_campaign_menu) - # Check event availability - if self.is_event_entrance_available(): - self.ui_goto(page_sp) + if self.appear(WAR_ARCHIVES_CAMPAIGN_CHECK, offset=(20, 20)): + logger.info('At war archives') + self.ui_goto_main() + else: + logger.info('Already at page_sp') return True + self.ui_goto(page_campaign_menu) + # Check event availability + if self.is_event_entrance_available(): + self.ui_goto(page_sp) + return True def ui_goto_coalition(self): # Already in page_event, skip event_check. diff --git a/module/campaign/campaign_status.py b/module/campaign/campaign_status.py index 4e658d7e8..1897f97b4 100644 --- a/module/campaign/campaign_status.py +++ b/module/campaign/campaign_status.py @@ -4,12 +4,19 @@ import re import cv2 import numpy as np +import module.config.server as server + from module.base.timer import Timer from module.campaign.assets import OCR_EVENT_PT, OCR_COIN, OCR_OIL, OCR_COIN_LIMIT, OCR_OIL_LIMIT, OCR_OIL_CHECK from module.base.utils import color_similar, get_color from module.logger import logger from module.ocr.ocr import Digit, Ocr from module.ui.ui import UI + +if server.server != 'jp': + OCR_COIN = Digit(OCR_COIN, name='OCR_COIN', letter=(239, 239, 239), threshold=128) +else: + OCR_COIN = Digit(OCR_COIN, name='OCR_COIN', letter=(201, 201, 201), threshold=128) from module.log_res.log_res import LogRes @@ -93,7 +100,10 @@ class CampaignStatus(UI): color = get_color(self.device.image, OCR_OIL_CHECK.button) if color_similar(color, OCR_OIL_CHECK.color): # Original color - ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(247, 247, 247), threshold=128) + if server.server != 'jp': + ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(247, 247, 247), threshold=128) + else: + ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(201, 201, 201), threshold=128) elif color_similar(color, (59, 59, 64)): # With black overlay ocr = Digit(OCR_OIL, name='OCR_OIL', letter=(165, 165, 165), threshold=128) diff --git a/module/campaign/run.py b/module/campaign/run.py index b930e06da..0643e42db 100644 --- a/module/campaign/run.py +++ b/module/campaign/run.py @@ -380,7 +380,7 @@ class CampaignRun(CampaignEvent, ShopStatus): logger.info('In auto search menu, skip ensure_campaign_ui.') else: logger.info('In auto search menu, closing.') - self.campaign.ensure_auto_search_exit() + # Because event_20240725 task balancer delete self.campaign.ensure_auto_search_exit() self.campaign.ensure_campaign_ui(name=self.stage, mode=mode) else: self.campaign.ensure_campaign_ui(name=self.stage, mode=mode) diff --git a/module/coalition/assets.py b/module/coalition/assets.py index 890880e6a..d1a3c4a8c 100644 --- a/module/coalition/assets.py +++ b/module/coalition/assets.py @@ -4,32 +4,32 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -ACADEMY_EASY = Button(area={'cn': (201, 290, 243, 311), 'en': (186, 294, 229, 311), 'jp': (219, 289, 268, 312), 'tw': (201, 290, 243, 311)}, color={'cn': (172, 141, 121), 'en': (178, 153, 137), 'jp': (188, 161, 140), 'tw': (172, 141, 121)}, button={'cn': (201, 290, 243, 311), 'en': (186, 294, 229, 311), 'jp': (219, 289, 268, 312), 'tw': (201, 290, 243, 311)}, file={'cn': './assets/cn/coalition/ACADEMY_EASY.png', 'en': './assets/en/coalition/ACADEMY_EASY.png', 'jp': './assets/jp/coalition/ACADEMY_EASY.png', 'tw': './assets/cn/coalition/ACADEMY_EASY.png'}) -ACADEMY_EX = Button(area={'cn': (712, 178, 744, 196), 'en': (681, 179, 705, 193), 'jp': (708, 177, 747, 197), 'tw': (712, 178, 744, 196)}, color={'cn': (151, 200, 191), 'en': (177, 210, 200), 'jp': (120, 185, 177), 'tw': (151, 200, 191)}, button={'cn': (712, 178, 744, 196), 'en': (681, 179, 705, 193), 'jp': (708, 177, 747, 197), 'tw': (712, 178, 744, 196)}, file={'cn': './assets/cn/coalition/ACADEMY_EX.png', 'en': './assets/en/coalition/ACADEMY_EX.png', 'jp': './assets/jp/coalition/ACADEMY_EX.png', 'tw': './assets/cn/coalition/ACADEMY_EX.png'}) -ACADEMY_HARD = Button(area={'cn': (956, 503, 1000, 524), 'en': (947, 506, 992, 520), 'jp': (965, 502, 1033, 525), 'tw': (956, 503, 1000, 524)}, color={'cn': (169, 137, 118), 'en': (168, 136, 117), 'jp': (205, 182, 158), 'tw': (169, 137, 118)}, button={'cn': (956, 503, 1000, 524), 'en': (947, 506, 992, 520), 'jp': (965, 502, 1033, 525), 'tw': (956, 503, 1000, 524)}, file={'cn': './assets/cn/coalition/ACADEMY_HARD.png', 'en': './assets/en/coalition/ACADEMY_HARD.png', 'jp': './assets/jp/coalition/ACADEMY_HARD.png', 'tw': './assets/cn/coalition/ACADEMY_HARD.png'}) -ACADEMY_MODE_BATTLE = Button(area={'cn': (105, 654, 182, 675), 'en': (99, 656, 165, 672), 'jp': (144, 652, 192, 678), 'tw': (105, 654, 182, 675)}, color={'cn': (207, 169, 129), 'en': (207, 172, 137), 'jp': (205, 173, 152), 'tw': (207, 169, 129)}, button={'cn': (105, 654, 182, 675), 'en': (99, 656, 165, 672), 'jp': (144, 652, 192, 678), 'tw': (105, 654, 182, 675)}, file={'cn': './assets/cn/coalition/ACADEMY_MODE_BATTLE.png', 'en': './assets/en/coalition/ACADEMY_MODE_BATTLE.png', 'jp': './assets/jp/coalition/ACADEMY_MODE_BATTLE.png', 'tw': './assets/cn/coalition/ACADEMY_MODE_BATTLE.png'}) -ACADEMY_MODE_STORY = Button(area={'cn': (224, 654, 302, 675), 'en': (238, 655, 288, 673), 'jp': (220, 656, 272, 673), 'tw': (224, 654, 302, 675)}, color={'cn': (210, 175, 139), 'en': (212, 175, 129), 'jp': (214, 174, 112), 'tw': (210, 175, 139)}, button={'cn': (224, 654, 302, 675), 'en': (238, 655, 288, 673), 'jp': (220, 656, 272, 673), 'tw': (224, 654, 302, 675)}, file={'cn': './assets/cn/coalition/ACADEMY_MODE_STORY.png', 'en': './assets/en/coalition/ACADEMY_MODE_STORY.png', 'jp': './assets/jp/coalition/ACADEMY_MODE_STORY.png', 'tw': './assets/cn/coalition/ACADEMY_MODE_STORY.png'}) -ACADEMY_NORMAL = Button(area={'cn': (604, 411, 646, 433), 'en': (568, 416, 638, 430), 'jp': (623, 411, 669, 434), 'tw': (604, 411, 646, 433)}, color={'cn': (169, 137, 118), 'en': (168, 138, 120), 'jp': (181, 153, 133), 'tw': (169, 137, 118)}, button={'cn': (604, 411, 646, 433), 'en': (568, 416, 638, 430), 'jp': (623, 411, 669, 434), 'tw': (604, 411, 646, 433)}, file={'cn': './assets/cn/coalition/ACADEMY_NORMAL.png', 'en': './assets/en/coalition/ACADEMY_NORMAL.png', 'jp': './assets/jp/coalition/ACADEMY_NORMAL.png', 'tw': './assets/cn/coalition/ACADEMY_NORMAL.png'}) +ACADEMY_EASY = Button(area={'cn': (201, 290, 243, 311), 'en': (186, 294, 229, 311), 'jp': (219, 289, 268, 312), 'tw': (189, 290, 232, 311)}, color={'cn': (172, 141, 121), 'en': (178, 153, 137), 'jp': (188, 161, 140), 'tw': (156, 121, 103)}, button={'cn': (201, 290, 243, 311), 'en': (186, 294, 229, 311), 'jp': (219, 289, 268, 312), 'tw': (189, 290, 232, 311)}, file={'cn': './assets/cn/coalition/ACADEMY_EASY.png', 'en': './assets/en/coalition/ACADEMY_EASY.png', 'jp': './assets/jp/coalition/ACADEMY_EASY.png', 'tw': './assets/tw/coalition/ACADEMY_EASY.png'}) +ACADEMY_EX = Button(area={'cn': (712, 178, 744, 196), 'en': (681, 179, 705, 193), 'jp': (708, 177, 747, 197), 'tw': (712, 178, 744, 196)}, color={'cn': (151, 200, 191), 'en': (177, 210, 200), 'jp': (120, 185, 177), 'tw': (151, 200, 191)}, button={'cn': (712, 178, 744, 196), 'en': (681, 179, 705, 193), 'jp': (708, 177, 747, 197), 'tw': (712, 178, 744, 196)}, file={'cn': './assets/cn/coalition/ACADEMY_EX.png', 'en': './assets/en/coalition/ACADEMY_EX.png', 'jp': './assets/jp/coalition/ACADEMY_EX.png', 'tw': './assets/tw/coalition/ACADEMY_EX.png'}) +ACADEMY_HARD = Button(area={'cn': (956, 503, 1000, 524), 'en': (947, 506, 992, 520), 'jp': (965, 502, 1033, 525), 'tw': (922, 503, 966, 524)}, color={'cn': (169, 137, 118), 'en': (168, 136, 117), 'jp': (205, 182, 158), 'tw': (160, 127, 112)}, button={'cn': (956, 503, 1000, 524), 'en': (947, 506, 992, 520), 'jp': (965, 502, 1033, 525), 'tw': (922, 503, 966, 524)}, file={'cn': './assets/cn/coalition/ACADEMY_HARD.png', 'en': './assets/en/coalition/ACADEMY_HARD.png', 'jp': './assets/jp/coalition/ACADEMY_HARD.png', 'tw': './assets/tw/coalition/ACADEMY_HARD.png'}) +ACADEMY_MODE_BATTLE = Button(area={'cn': (105, 654, 182, 675), 'en': (99, 656, 165, 672), 'jp': (144, 652, 192, 678), 'tw': (104, 654, 183, 675)}, color={'cn': (207, 169, 129), 'en': (207, 172, 137), 'jp': (205, 173, 152), 'tw': (210, 173, 133)}, button={'cn': (105, 654, 182, 675), 'en': (99, 656, 165, 672), 'jp': (144, 652, 192, 678), 'tw': (104, 654, 183, 675)}, file={'cn': './assets/cn/coalition/ACADEMY_MODE_BATTLE.png', 'en': './assets/en/coalition/ACADEMY_MODE_BATTLE.png', 'jp': './assets/jp/coalition/ACADEMY_MODE_BATTLE.png', 'tw': './assets/tw/coalition/ACADEMY_MODE_BATTLE.png'}) +ACADEMY_MODE_STORY = Button(area={'cn': (224, 654, 302, 675), 'en': (238, 655, 288, 673), 'jp': (220, 656, 272, 673), 'tw': (224, 654, 303, 676)}, color={'cn': (210, 175, 139), 'en': (212, 175, 129), 'jp': (214, 174, 112), 'tw': (214, 179, 139)}, button={'cn': (224, 654, 302, 675), 'en': (238, 655, 288, 673), 'jp': (220, 656, 272, 673), 'tw': (224, 654, 303, 676)}, file={'cn': './assets/cn/coalition/ACADEMY_MODE_STORY.png', 'en': './assets/en/coalition/ACADEMY_MODE_STORY.png', 'jp': './assets/jp/coalition/ACADEMY_MODE_STORY.png', 'tw': './assets/tw/coalition/ACADEMY_MODE_STORY.png'}) +ACADEMY_NORMAL = Button(area={'cn': (604, 411, 646, 433), 'en': (568, 416, 638, 430), 'jp': (623, 411, 669, 434), 'tw': (592, 411, 635, 433)}, color={'cn': (169, 137, 118), 'en': (168, 138, 120), 'jp': (181, 153, 133), 'tw': (167, 135, 116)}, button={'cn': (604, 411, 646, 433), 'en': (568, 416, 638, 430), 'jp': (623, 411, 669, 434), 'tw': (592, 411, 635, 433)}, file={'cn': './assets/cn/coalition/ACADEMY_NORMAL.png', 'en': './assets/en/coalition/ACADEMY_NORMAL.png', 'jp': './assets/jp/coalition/ACADEMY_NORMAL.png', 'tw': './assets/tw/coalition/ACADEMY_NORMAL.png'}) ACADEMY_PT_OCR = Button(area={'cn': (1125, 208, 1265, 225), 'en': (1125, 208, 1265, 225), 'jp': (1125, 208, 1265, 225), 'tw': (1125, 208, 1265, 225)}, color={'cn': (124, 105, 88), 'en': (124, 105, 88), 'jp': (124, 105, 88), 'tw': (124, 105, 88)}, button={'cn': (1125, 208, 1265, 225), 'en': (1125, 208, 1265, 225), 'jp': (1125, 208, 1265, 225), 'tw': (1125, 208, 1265, 225)}, file={'cn': './assets/cn/coalition/ACADEMY_PT_OCR.png', 'en': './assets/en/coalition/ACADEMY_PT_OCR.png', 'jp': './assets/jp/coalition/ACADEMY_PT_OCR.png', 'tw': './assets/tw/coalition/ACADEMY_PT_OCR.png'}) -ACADEMY_SP = Button(area={'cn': (333, 580, 362, 597), 'en': (339, 582, 363, 596), 'jp': (366, 580, 398, 598), 'tw': (333, 580, 362, 597)}, color={'cn': (176, 146, 126), 'en': (164, 131, 113), 'jp': (194, 169, 147), 'tw': (176, 146, 126)}, button={'cn': (333, 580, 362, 597), 'en': (339, 582, 363, 596), 'jp': (366, 580, 398, 598), 'tw': (333, 580, 362, 597)}, file={'cn': './assets/cn/coalition/ACADEMY_SP.png', 'en': './assets/en/coalition/ACADEMY_SP.png', 'jp': './assets/jp/coalition/ACADEMY_SP.png', 'tw': './assets/cn/coalition/ACADEMY_SP.png'}) -ACADEMY_SWITCH_MULTI = Button(area={'cn': (1088, 458, 1216, 486), 'en': (1089, 458, 1215, 486), 'jp': (1115, 463, 1181, 482), 'tw': (1088, 458, 1216, 486)}, color={'cn': (234, 184, 61), 'en': (200, 156, 54), 'jp': (165, 124, 42), 'tw': (234, 184, 61)}, button={'cn': (1088, 458, 1216, 486), 'en': (1089, 458, 1215, 486), 'jp': (1115, 463, 1181, 482), 'tw': (1088, 458, 1216, 486)}, file={'cn': './assets/cn/coalition/ACADEMY_SWITCH_MULTI.png', 'en': './assets/en/coalition/ACADEMY_SWITCH_MULTI.png', 'jp': './assets/jp/coalition/ACADEMY_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/ACADEMY_SWITCH_MULTI.png'}) -ACADEMY_SWITCH_SINGLE = Button(area={'cn': (941, 458, 1070, 486), 'en': (941, 458, 1070, 486), 'jp': (976, 464, 1042, 482), 'tw': (941, 458, 1070, 486)}, color={'cn': (232, 182, 60), 'en': (202, 158, 54), 'jp': (163, 123, 42), 'tw': (232, 182, 60)}, button={'cn': (941, 458, 1070, 486), 'en': (941, 458, 1070, 486), 'jp': (976, 464, 1042, 482), 'tw': (941, 458, 1070, 486)}, file={'cn': './assets/cn/coalition/ACADEMY_SWITCH_SINGLE.png', 'en': './assets/en/coalition/ACADEMY_SWITCH_SINGLE.png', 'jp': './assets/jp/coalition/ACADEMY_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/ACADEMY_SWITCH_SINGLE.png'}) -ACEDEMY_FLEET_PREPARATION = Button(area={'cn': (1025, 537, 1132, 562), 'en': (1033, 538, 1125, 560), 'jp': (1052, 537, 1103, 560), 'tw': (1025, 537, 1132, 562)}, color={'cn': (106, 149, 226), 'en': (108, 151, 225), 'jp': (144, 177, 231), 'tw': (106, 149, 226)}, button={'cn': (1025, 537, 1132, 562), 'en': (1033, 538, 1125, 560), 'jp': (1052, 537, 1103, 560), 'tw': (1025, 537, 1132, 562)}, file={'cn': './assets/cn/coalition/ACEDEMY_FLEET_PREPARATION.png', 'en': './assets/en/coalition/ACEDEMY_FLEET_PREPARATION.png', 'jp': './assets/jp/coalition/ACEDEMY_FLEET_PREPARATION.png', 'tw': './assets/cn/coalition/ACEDEMY_FLEET_PREPARATION.png'}) +ACADEMY_SP = Button(area={'cn': (333, 580, 362, 597), 'en': (339, 582, 363, 596), 'jp': (366, 580, 398, 598), 'tw': (333, 580, 362, 597)}, color={'cn': (176, 146, 126), 'en': (164, 131, 113), 'jp': (194, 169, 147), 'tw': (176, 146, 126)}, button={'cn': (333, 580, 362, 597), 'en': (339, 582, 363, 596), 'jp': (366, 580, 398, 598), 'tw': (333, 580, 362, 597)}, file={'cn': './assets/cn/coalition/ACADEMY_SP.png', 'en': './assets/en/coalition/ACADEMY_SP.png', 'jp': './assets/jp/coalition/ACADEMY_SP.png', 'tw': './assets/tw/coalition/ACADEMY_SP.png'}) +ACADEMY_SWITCH_MULTI = Button(area={'cn': (1088, 458, 1216, 486), 'en': (1089, 458, 1215, 486), 'jp': (1115, 463, 1181, 482), 'tw': (1088, 458, 1209, 486)}, color={'cn': (234, 184, 61), 'en': (200, 156, 54), 'jp': (165, 124, 42), 'tw': (229, 179, 59)}, button={'cn': (1088, 458, 1216, 486), 'en': (1089, 458, 1215, 486), 'jp': (1115, 463, 1181, 482), 'tw': (1088, 458, 1209, 486)}, file={'cn': './assets/cn/coalition/ACADEMY_SWITCH_MULTI.png', 'en': './assets/en/coalition/ACADEMY_SWITCH_MULTI.png', 'jp': './assets/jp/coalition/ACADEMY_SWITCH_MULTI.png', 'tw': './assets/tw/coalition/ACADEMY_SWITCH_MULTI.png'}) +ACADEMY_SWITCH_SINGLE = Button(area={'cn': (941, 458, 1070, 486), 'en': (941, 458, 1070, 486), 'jp': (976, 464, 1042, 482), 'tw': (941, 458, 1070, 486)}, color={'cn': (232, 182, 60), 'en': (202, 158, 54), 'jp': (163, 123, 42), 'tw': (226, 177, 59)}, button={'cn': (941, 458, 1070, 486), 'en': (941, 458, 1070, 486), 'jp': (976, 464, 1042, 482), 'tw': (941, 458, 1070, 486)}, file={'cn': './assets/cn/coalition/ACADEMY_SWITCH_SINGLE.png', 'en': './assets/en/coalition/ACADEMY_SWITCH_SINGLE.png', 'jp': './assets/jp/coalition/ACADEMY_SWITCH_SINGLE.png', 'tw': './assets/tw/coalition/ACADEMY_SWITCH_SINGLE.png'}) +ACEDEMY_FLEET_PREPARATION = Button(area={'cn': (1025, 537, 1132, 562), 'en': (1033, 538, 1125, 560), 'jp': (1052, 537, 1103, 560), 'tw': (1025, 535, 1131, 566)}, color={'cn': (106, 149, 226), 'en': (108, 151, 225), 'jp': (144, 177, 231), 'tw': (93, 139, 223)}, button={'cn': (1025, 537, 1132, 562), 'en': (1033, 538, 1125, 560), 'jp': (1052, 537, 1103, 560), 'tw': (1025, 535, 1131, 566)}, file={'cn': './assets/cn/coalition/ACEDEMY_FLEET_PREPARATION.png', 'en': './assets/en/coalition/ACEDEMY_FLEET_PREPARATION.png', 'jp': './assets/jp/coalition/ACEDEMY_FLEET_PREPARATION.png', 'tw': './assets/tw/coalition/ACEDEMY_FLEET_PREPARATION.png'}) COALITION_ACADEMY_BACK = Button(area={'cn': (44, 48, 62, 74), 'en': (44, 48, 62, 74), 'jp': (44, 48, 62, 74), 'tw': (44, 48, 62, 74)}, color={'cn': (162, 188, 194), 'en': (162, 188, 194), 'jp': (162, 188, 194), 'tw': (162, 188, 194)}, button={'cn': (44, 48, 62, 74), 'en': (44, 48, 62, 74), 'jp': (44, 48, 62, 74), 'tw': (44, 48, 62, 74)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_BACK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_BACK.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_BACK.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_BACK.png'}) -COALITION_ACADEMY_CAMPAIGN_CHECK = Button(area={'cn': (131, 50, 168, 83), 'en': (123, 52, 176, 78), 'jp': (126, 44, 171, 91), 'tw': (131, 50, 168, 83)}, color={'cn': (165, 210, 212), 'en': (156, 197, 198), 'jp': (164, 192, 192), 'tw': (165, 210, 212)}, button={'cn': (131, 50, 168, 83), 'en': (123, 52, 176, 78), 'jp': (126, 44, 171, 91), 'tw': (131, 50, 168, 83)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'tw': './assets/cn/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png'}) +COALITION_ACADEMY_CAMPAIGN_CHECK = Button(area={'cn': (131, 50, 168, 83), 'en': (123, 52, 176, 78), 'jp': (126, 44, 171, 91), 'tw': (340, 38, 433, 88)}, color={'cn': (165, 210, 212), 'en': (156, 197, 198), 'jp': (164, 192, 192), 'tw': (188, 150, 134)}, button={'cn': (131, 50, 168, 83), 'en': (123, 52, 176, 78), 'jp': (126, 44, 171, 91), 'tw': (340, 38, 433, 88)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_CAMPAIGN_CHECK.png'}) COALITION_ACADEMY_GOTO_CAMPAIGN = Button(area={'cn': (1123, 615, 1159, 651), 'en': (1123, 615, 1159, 651), 'jp': (1123, 615, 1159, 651), 'tw': (1123, 615, 1159, 651)}, color={'cn': (160, 134, 93), 'en': (160, 134, 93), 'jp': (160, 134, 93), 'tw': (160, 134, 93)}, button={'cn': (1123, 615, 1159, 651), 'en': (1123, 615, 1159, 651), 'jp': (1123, 615, 1159, 651), 'tw': (1123, 615, 1159, 651)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png', 'en': './assets/en/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_GOTO_CAMPAIGN.png'}) COALITION_ACADEMY_HOME = Button(area={'cn': (1221, 48, 1244, 73), 'en': (1221, 48, 1244, 73), 'jp': (1221, 48, 1244, 73), 'tw': (1221, 48, 1244, 73)}, color={'cn': (182, 197, 203), 'en': (182, 197, 203), 'jp': (182, 197, 203), 'tw': (182, 197, 203)}, button={'cn': (1221, 48, 1244, 73), 'en': (1221, 48, 1244, 73), 'jp': (1221, 48, 1244, 73), 'tw': (1221, 48, 1244, 73)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_HOME.png', 'en': './assets/en/coalition/COALITION_ACADEMY_HOME.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_HOME.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_HOME.png'}) -COALITION_ACADEMY_MAIN_CHECK = Button(area={'cn': (132, 57, 163, 92), 'en': (164, 57, 221, 78), 'jp': (112, 44, 145, 86), 'tw': (132, 57, 163, 92)}, color={'cn': (143, 202, 205), 'en': (205, 189, 166), 'jp': (142, 155, 153), 'tw': (143, 202, 205)}, button={'cn': (132, 57, 163, 92), 'en': (164, 57, 221, 78), 'jp': (112, 44, 145, 86), 'tw': (132, 57, 163, 92)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'tw': './assets/cn/coalition/COALITION_ACADEMY_MAIN_CHECK.png'}) +COALITION_ACADEMY_MAIN_CHECK = Button(area={'cn': (132, 57, 163, 92), 'en': (164, 57, 221, 78), 'jp': (112, 44, 145, 86), 'tw': (346, 48, 427, 89)}, color={'cn': (143, 202, 205), 'en': (205, 189, 166), 'jp': (142, 155, 153), 'tw': (178, 145, 124)}, button={'cn': (132, 57, 163, 92), 'en': (164, 57, 221, 78), 'jp': (112, 44, 145, 86), 'tw': (346, 48, 427, 89)}, file={'cn': './assets/cn/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'en': './assets/en/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'jp': './assets/jp/coalition/COALITION_ACADEMY_MAIN_CHECK.png', 'tw': './assets/tw/coalition/COALITION_ACADEMY_MAIN_CHECK.png'}) COALITION_REWARD_CONFIRM = Button(area={'cn': (814, 611, 877, 637), 'en': (788, 612, 902, 634), 'jp': (814, 611, 876, 637), 'tw': (814, 611, 877, 637)}, color={'cn': (155, 186, 227), 'en': (162, 189, 226), 'jp': (143, 176, 219), 'tw': (150, 181, 221)}, button={'cn': (814, 611, 877, 637), 'en': (788, 612, 902, 634), 'jp': (814, 611, 876, 637), 'tw': (814, 611, 877, 637)}, file={'cn': './assets/cn/coalition/COALITION_REWARD_CONFIRM.png', 'en': './assets/en/coalition/COALITION_REWARD_CONFIRM.png', 'jp': './assets/jp/coalition/COALITION_REWARD_CONFIRM.png', 'tw': './assets/tw/coalition/COALITION_REWARD_CONFIRM.png'}) FLEET_NOT_PREPARED = Button(area={'cn': (1008, 310, 1110, 334), 'en': (1008, 310, 1110, 334), 'jp': (1008, 310, 1110, 334), 'tw': (1008, 310, 1110, 334)}, color={'cn': (106, 106, 112), 'en': (106, 106, 112), 'jp': (106, 106, 112), 'tw': (108, 107, 112)}, button={'cn': (1008, 310, 1110, 334), 'en': (1008, 310, 1110, 334), 'jp': (1008, 310, 1110, 334), 'tw': (1008, 310, 1110, 334)}, file={'cn': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'en': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'jp': './assets/cn/coalition/FLEET_NOT_PREPARED.png', 'tw': './assets/tw/coalition/FLEET_NOT_PREPARED.png'}) FROSTFALL_EX = Button(area={'cn': (622, 372, 649, 384), 'en': (622, 372, 649, 384), 'jp': (622, 372, 649, 384), 'tw': (622, 372, 649, 384)}, color={'cn': (198, 152, 252), 'en': (198, 152, 252), 'jp': (198, 152, 252), 'tw': (182, 127, 252)}, button={'cn': (622, 372, 649, 384), 'en': (622, 372, 649, 384), 'jp': (622, 372, 649, 384), 'tw': (622, 372, 649, 384)}, file={'cn': './assets/cn/coalition/FROSTFALL_EX.png', 'en': './assets/en/coalition/FROSTFALL_EX.png', 'jp': './assets/jp/coalition/FROSTFALL_EX.png', 'tw': './assets/tw/coalition/FROSTFALL_EX.png'}) -FROSTFALL_FLEET_PREPARATION = Button(area={'cn': (1057, 527, 1155, 548), 'en': (1057, 527, 1155, 548), 'jp': (1057, 527, 1155, 548), 'tw': (1057, 527, 1155, 548)}, color={'cn': (122, 146, 222), 'en': (122, 146, 222), 'jp': (122, 146, 222), 'tw': (122, 146, 222)}, button={'cn': (1057, 527, 1155, 548), 'en': (1057, 527, 1155, 548), 'jp': (1057, 527, 1155, 548), 'tw': (1057, 527, 1155, 548)}, file={'cn': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'en': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'jp': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'tw': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png'}) -FROSTFALL_MODE_BATTLE = Button(area={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, color={'cn': (63, 106, 122), 'en': (63, 106, 122), 'jp': (63, 106, 122), 'tw': (63, 106, 122)}, button={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, file={'cn': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'en': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'jp': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'tw': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png'}) -FROSTFALL_MODE_STORY = Button(area={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, color={'cn': (119, 44, 32), 'en': (119, 44, 32), 'jp': (119, 44, 32), 'tw': (119, 44, 32)}, button={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, file={'cn': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'en': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'jp': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'tw': './assets/cn/coalition/FROSTFALL_MODE_STORY.png'}) +FROSTFALL_FLEET_PREPARATION = Button(area={'cn': (1057, 527, 1155, 548), 'en': (1057, 527, 1155, 548), 'jp': (1057, 527, 1155, 548), 'tw': (1057, 527, 1155, 548)}, color={'cn': (122, 146, 222), 'en': (122, 146, 222), 'jp': (122, 146, 222), 'tw': (110, 136, 224)}, button={'cn': (1057, 527, 1155, 548), 'en': (1057, 527, 1155, 548), 'jp': (1057, 527, 1155, 548), 'tw': (968, 511, 1245, 563)}, file={'cn': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'en': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'jp': './assets/cn/coalition/FROSTFALL_FLEET_PREPARATION.png', 'tw': './assets/tw/coalition/FROSTFALL_FLEET_PREPARATION.png'}) +FROSTFALL_MODE_BATTLE = Button(area={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, color={'cn': (63, 106, 122), 'en': (63, 106, 122), 'jp': (63, 106, 122), 'tw': (63, 106, 122)}, button={'cn': (71, 608, 137, 653), 'en': (71, 608, 137, 653), 'jp': (71, 608, 137, 653), 'tw': (71, 608, 137, 653)}, file={'cn': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'en': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'jp': './assets/cn/coalition/FROSTFALL_MODE_BATTLE.png', 'tw': './assets/tw/coalition/FROSTFALL_MODE_BATTLE.png'}) +FROSTFALL_MODE_STORY = Button(area={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, color={'cn': (119, 44, 32), 'en': (119, 44, 32), 'jp': (119, 44, 32), 'tw': (119, 44, 32)}, button={'cn': (73, 610, 134, 652), 'en': (73, 610, 134, 652), 'jp': (73, 610, 134, 652), 'tw': (73, 610, 134, 652)}, file={'cn': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'en': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'jp': './assets/cn/coalition/FROSTFALL_MODE_STORY.png', 'tw': './assets/tw/coalition/FROSTFALL_MODE_STORY.png'}) FROSTFALL_OCR_PT = Button(area={'cn': (1181, 641, 1254, 663), 'en': (1181, 641, 1254, 663), 'jp': (1181, 641, 1254, 663), 'tw': (1181, 641, 1254, 663)}, color={'cn': (93, 100, 106), 'en': (93, 100, 106), 'jp': (93, 100, 106), 'tw': (93, 100, 106)}, button={'cn': (1181, 641, 1254, 663), 'en': (1181, 641, 1254, 663), 'jp': (1181, 641, 1254, 663), 'tw': (1181, 641, 1254, 663)}, file={'cn': './assets/cn/coalition/FROSTFALL_OCR_PT.png', 'en': './assets/en/coalition/FROSTFALL_OCR_PT.png', 'jp': './assets/jp/coalition/FROSTFALL_OCR_PT.png', 'tw': './assets/tw/coalition/FROSTFALL_OCR_PT.png'}) FROSTFALL_SP = Button(area={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (505, 290, 532, 302)}, color={'cn': (194, 145, 252), 'en': (194, 145, 252), 'jp': (194, 145, 252), 'tw': (183, 128, 253)}, button={'cn': (631, 160, 658, 173), 'en': (631, 160, 658, 173), 'jp': (631, 160, 658, 173), 'tw': (505, 290, 532, 302)}, file={'cn': './assets/cn/coalition/FROSTFALL_SP.png', 'en': './assets/en/coalition/FROSTFALL_SP.png', 'jp': './assets/jp/coalition/FROSTFALL_SP.png', 'tw': './assets/tw/coalition/FROSTFALL_SP.png'}) -FROSTFALL_SWITCH_MULTI = Button(area={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, color={'cn': (232, 175, 58), 'en': (232, 175, 58), 'jp': (232, 175, 58), 'tw': (232, 175, 58)}, button={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, file={'cn': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'en': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'jp': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'tw': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png'}) -FROSTFALL_SWITCH_SINGLE = Button(area={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, color={'cn': (230, 173, 57), 'en': (230, 173, 57), 'jp': (230, 173, 57), 'tw': (230, 173, 57)}, button={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, file={'cn': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'en': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'jp': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'tw': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png'}) +FROSTFALL_SWITCH_MULTI = Button(area={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, color={'cn': (232, 175, 58), 'en': (232, 175, 58), 'jp': (232, 175, 58), 'tw': (225, 170, 59)}, button={'cn': (1106, 449, 1237, 478), 'en': (1106, 449, 1237, 478), 'jp': (1106, 449, 1237, 478), 'tw': (1106, 449, 1237, 478)}, file={'cn': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'en': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'jp': './assets/cn/coalition/FROSTFALL_SWITCH_MULTI.png', 'tw': './assets/tw/coalition/FROSTFALL_SWITCH_MULTI.png'}) +FROSTFALL_SWITCH_SINGLE = Button(area={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, color={'cn': (230, 173, 57), 'en': (230, 173, 57), 'jp': (230, 173, 57), 'tw': (220, 166, 58)}, button={'cn': (968, 449, 1098, 478), 'en': (968, 449, 1098, 478), 'jp': (968, 449, 1098, 478), 'tw': (968, 449, 1098, 478)}, file={'cn': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'en': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'jp': './assets/cn/coalition/FROSTFALL_SWITCH_SINGLE.png', 'tw': './assets/tw/coalition/FROSTFALL_SWITCH_SINGLE.png'}) FROSTFALL_TC1 = Button(area={'cn': (304, 320, 330, 332), 'en': (304, 320, 330, 332), 'jp': (304, 320, 330, 332), 'tw': (304, 320, 330, 332)}, color={'cn': (204, 162, 254), 'en': (204, 162, 254), 'jp': (204, 162, 254), 'tw': (188, 137, 254)}, button={'cn': (304, 320, 330, 332), 'en': (304, 320, 330, 332), 'jp': (304, 320, 330, 332), 'tw': (304, 320, 330, 332)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC1.png', 'en': './assets/en/coalition/FROSTFALL_TC1.png', 'jp': './assets/jp/coalition/FROSTFALL_TC1.png', 'tw': './assets/tw/coalition/FROSTFALL_TC1.png'}) FROSTFALL_TC2 = Button(area={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (631, 160, 658, 173)}, color={'cn': (214, 178, 254), 'en': (214, 178, 254), 'jp': (214, 178, 254), 'tw': (186, 136, 252)}, button={'cn': (810, 362, 835, 373), 'en': (810, 362, 835, 373), 'jp': (810, 362, 835, 373), 'tw': (631, 160, 658, 173)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC2.png', 'en': './assets/en/coalition/FROSTFALL_TC2.png', 'jp': './assets/jp/coalition/FROSTFALL_TC2.png', 'tw': './assets/tw/coalition/FROSTFALL_TC2.png'}) FROSTFALL_TC3 = Button(area={'cn': (505, 290, 532, 302), 'en': (505, 290, 532, 302), 'jp': (505, 290, 532, 302), 'tw': (810, 362, 835, 373)}, color={'cn': (210, 172, 252), 'en': (210, 172, 252), 'jp': (210, 172, 252), 'tw': (197, 153, 255)}, button={'cn': (505, 290, 532, 302), 'en': (505, 290, 532, 302), 'jp': (505, 290, 532, 302), 'tw': (810, 362, 835, 373)}, file={'cn': './assets/cn/coalition/FROSTFALL_TC3.png', 'en': './assets/en/coalition/FROSTFALL_TC3.png', 'jp': './assets/jp/coalition/FROSTFALL_TC3.png', 'tw': './assets/tw/coalition/FROSTFALL_TC3.png'}) diff --git a/module/combat/combat.py b/module/combat/combat.py index 1efdc1a08..e35efac73 100644 --- a/module/combat/combat.py +++ b/module/combat/combat.py @@ -79,21 +79,21 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan def is_combat_executing(self): """ Returns: - bool: + Button: PAUSE button that appears """ self.device.stuck_record_add(PAUSE) if self.config.SERVER in ['cn', 'en']: if PAUSE.match_luma(self.device.image, offset=(20, 20)): - return True + return PAUSE else: color = get_color(self.device.image, PAUSE.area) if color_similar(color, PAUSE.color) or color_similar(color, (238, 244, 248)): if np.max(self.image_crop(PAUSE_DOUBLE_CHECK, copy=False)) < 153: - return True + return PAUSE if PAUSE_New.match_luma(self.device.image, offset=(20, 20)): - return True + return PAUSE_New if PAUSE_Iridescent_Fantasy.match_luma(self.device.image, offset=(20, 20)): - return True + return PAUSE_Iridescent_Fantasy return False def handle_combat_quit(self, offset=(20, 20), interval=3): diff --git a/module/combat/level.py b/module/combat/level.py index 8350f998d..fdbcd5f6d 100644 --- a/module/combat/level.py +++ b/module/combat/level.py @@ -1,3 +1,5 @@ +import module.config.server as server + from module.base.base import ModuleBase from module.base.button import * from module.base.decorator import Config @@ -41,7 +43,7 @@ class Level(ModuleBase): @Config.when(SERVER='jp') def _lv_grid(self): - return ButtonGrid(origin=(58, 128), delta=(0, 100), button_shape=(46, 19), grid_shape=(1, 6)) + return ButtonGrid(origin=(34, 128), delta=(0, 100), button_shape=(68, 19), grid_shape=(1, 6)) @Config.when(SERVER=None) def _lv_grid(self): @@ -125,11 +127,20 @@ class LevelOcr(Digit): image = cv2.subtract(255, cv2.multiply(image, 255 / (255 - luma_bg))) # Find 'L' to strip 'LV.'. # Return an empty image if 'L' is not found. - letter_l = np.nonzero(image[9:15, :].max(axis=0) < 127)[0] - if len(letter_l): - first_digit = letter_l[0] + 17 - if first_digit + 3 < 46: # LV_GRID_MAIN.button_shape[0] = 46 - return image[:, first_digit:] + if server.server != 'jp': + letter_l = np.nonzero(image[9:15, :].max(axis=0) < 127)[0] + if len(letter_l): + first_digit = letter_l[0] + 17 + if first_digit + 3 < 46: # LV_GRID_MAIN.button_shape[0] = 46 + return image[:, first_digit:] + else: + letter_l = np.nonzero(image[5:11, :].max(axis=0) < 63)[0] + if len(letter_l): + first_digit = letter_l[0] + 23 # maximal size in dock and minimal size in sea grid + if first_digit + 3 < 70: # LV_GRID_MAIN.button_shape[0] = 46 + image = image[:, first_digit:] + image = cv2.copyMakeBorder(image, 2, 2, 2, 2, cv2.BORDER_CONSTANT, value=(255, 255, 255)) + return image return np.array([[255]], dtype=np.uint8) def after_process(self, result): diff --git a/module/combat_ui/assets.py b/module/combat_ui/assets.py index 4e2ae9975..e167731b3 100644 --- a/module/combat_ui/assets.py +++ b/module/combat_ui/assets.py @@ -8,6 +8,6 @@ PAUSE = Button(area={'cn': (1158, 40, 1199, 58), 'en': (1155, 38, 1216, 51), 'jp PAUSE_DOUBLE_CHECK = Button(area={'cn': (1226, 35, 1231, 60), 'en': (1226, 35, 1231, 61), 'jp': (1226, 35, 1230, 60), 'tw': (1226, 35, 1231, 60)}, color={'cn': (96, 104, 136), 'en': (83, 98, 118), 'jp': (97, 102, 120), 'tw': (96, 104, 136)}, button={'cn': (1226, 35, 1231, 60), 'en': (1226, 35, 1231, 61), 'jp': (1226, 35, 1230, 60), 'tw': (1226, 35, 1231, 60)}, file={'cn': './assets/cn/combat_ui/PAUSE_DOUBLE_CHECK.png', 'en': './assets/en/combat_ui/PAUSE_DOUBLE_CHECK.png', 'jp': './assets/jp/combat_ui/PAUSE_DOUBLE_CHECK.png', 'tw': './assets/tw/combat_ui/PAUSE_DOUBLE_CHECK.png'}) PAUSE_Iridescent_Fantasy = Button(area={'cn': (1232, 33, 1252, 57), 'en': (1232, 33, 1252, 57), 'jp': (1232, 33, 1252, 57), 'tw': (1232, 33, 1252, 57)}, color={'cn': (124, 139, 190), 'en': (124, 139, 190), 'jp': (124, 139, 190), 'tw': (124, 139, 190)}, button={'cn': (1232, 33, 1252, 57), 'en': (1232, 33, 1252, 57), 'jp': (1232, 33, 1252, 57), 'tw': (1232, 33, 1252, 57)}, file={'cn': './assets/cn/combat_ui/PAUSE_Iridescent_Fantasy.png', 'en': './assets/en/combat_ui/PAUSE_Iridescent_Fantasy.png', 'jp': './assets/jp/combat_ui/PAUSE_Iridescent_Fantasy.png', 'tw': './assets/tw/combat_ui/PAUSE_Iridescent_Fantasy.png'}) PAUSE_New = Button(area={'cn': (1231, 29, 1253, 56), 'en': (1231, 29, 1253, 56), 'jp': (1231, 29, 1253, 56), 'tw': (1231, 29, 1253, 56)}, color={'cn': (156, 158, 166), 'en': (156, 158, 166), 'jp': (156, 158, 166), 'tw': (156, 158, 166)}, button={'cn': (1231, 29, 1253, 56), 'en': (1231, 29, 1253, 56), 'jp': (1231, 29, 1253, 56), 'tw': (1231, 29, 1253, 56)}, file={'cn': './assets/cn/combat_ui/PAUSE_New.png', 'en': './assets/en/combat_ui/PAUSE_New.png', 'jp': './assets/jp/combat_ui/PAUSE_New.png', 'tw': './assets/tw/combat_ui/PAUSE_New.png'}) -QUIT = Button(area={'cn': (420, 490, 593, 548), 'en': (459, 508, 582, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, color={'cn': (199, 122, 114), 'en': (221, 177, 174), 'jp': (196, 120, 113), 'tw': (200, 126, 118)}, button={'cn': (420, 490, 593, 548), 'en': (459, 508, 582, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, file={'cn': './assets/cn/combat_ui/QUIT.png', 'en': './assets/en/combat_ui/QUIT.png', 'jp': './assets/jp/combat_ui/QUIT.png', 'tw': './assets/tw/combat_ui/QUIT.png'}) -QUIT_Iridescent_Fantasy = Button(area={'cn': (391, 522, 464, 540), 'en': (391, 522, 464, 540), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, color={'cn': (121, 73, 79), 'en': (121, 73, 79), 'jp': (121, 73, 79), 'tw': (121, 73, 79)}, button={'cn': (391, 522, 464, 540), 'en': (391, 522, 464, 540), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, file={'cn': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'en': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'jp': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'tw': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png'}) -QUIT_New = Button(area={'cn': (394, 506, 467, 524), 'en': (394, 506, 467, 524), 'jp': (394, 506, 467, 524), 'tw': (394, 506, 467, 524)}, color={'cn': (255, 180, 171), 'en': (255, 180, 171), 'jp': (255, 180, 171), 'tw': (255, 180, 171)}, button={'cn': (394, 506, 467, 524), 'en': (394, 506, 467, 524), 'jp': (394, 506, 467, 524), 'tw': (394, 506, 467, 524)}, file={'cn': './assets/cn/combat_ui/QUIT_New.png', 'en': './assets/cn/combat_ui/QUIT_New.png', 'jp': './assets/cn/combat_ui/QUIT_New.png', 'tw': './assets/cn/combat_ui/QUIT_New.png'}) +QUIT = Button(area={'cn': (420, 490, 593, 548), 'en': (473, 508, 567, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, color={'cn': (199, 122, 114), 'en': (216, 168, 164), 'jp': (198, 126, 120), 'tw': (200, 126, 118)}, button={'cn': (420, 490, 593, 548), 'en': (473, 508, 567, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, file={'cn': './assets/cn/combat_ui/QUIT.png', 'en': './assets/en/combat_ui/QUIT.png', 'jp': './assets/jp/combat_ui/QUIT.png', 'tw': './assets/tw/combat_ui/QUIT.png'}) +QUIT_Iridescent_Fantasy = Button(area={'cn': (391, 522, 464, 540), 'en': (402, 507, 460, 523), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, color={'cn': (121, 73, 79), 'en': (255, 174, 164), 'jp': (121, 73, 79), 'tw': (121, 73, 79)}, button={'cn': (391, 522, 464, 540), 'en': (402, 507, 460, 523), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, file={'cn': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'en': './assets/en/combat_ui/QUIT_Iridescent_Fantasy.png', 'jp': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'tw': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png'}) +QUIT_New = Button(area={'cn': (394, 506, 467, 524), 'en': (404, 506, 463, 523), 'jp': (394, 506, 467, 524), 'tw': (394, 506, 467, 524)}, color={'cn': (255, 180, 171), 'en': (255, 195, 187), 'jp': (255, 180, 171), 'tw': (255, 180, 171)}, button={'cn': (394, 506, 467, 524), 'en': (404, 506, 463, 523), 'jp': (394, 506, 467, 524), 'tw': (394, 506, 467, 524)}, file={'cn': './assets/cn/combat_ui/QUIT_New.png', 'en': './assets/en/combat_ui/QUIT_New.png', 'jp': './assets/cn/combat_ui/QUIT_New.png', 'tw': './assets/cn/combat_ui/QUIT_New.png'}) diff --git a/module/commission/assets.py b/module/commission/assets.py index eba7861d8..282e65e95 100644 --- a/module/commission/assets.py +++ b/module/commission/assets.py @@ -4,11 +4,11 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 325, 1000, 389), 'tw': (869, 325, 999, 388)}, color={'cn': (230, 177, 116), 'en': (231, 178, 117), 'jp': (228, 178, 117), 'tw': (231, 180, 120)}, button={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 325, 1000, 389), 'tw': (869, 325, 999, 388)}, file={'cn': './assets/cn/commission/COMMISSION_ADVICE.png', 'en': './assets/en/commission/COMMISSION_ADVICE.png', 'jp': './assets/jp/commission/COMMISSION_ADVICE.png', 'tw': './assets/tw/commission/COMMISSION_ADVICE.png'}) +COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (872, 344, 993, 373), 'tw': (869, 325, 999, 388)}, color={'cn': (230, 177, 116), 'en': (231, 178, 117), 'jp': (224, 179, 119), 'tw': (231, 180, 120)}, button={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 335, 1000, 399), 'tw': (869, 325, 999, 388)}, file={'cn': './assets/cn/commission/COMMISSION_ADVICE.png', 'en': './assets/en/commission/COMMISSION_ADVICE.png', 'jp': './assets/jp/commission/COMMISSION_ADVICE.png', 'tw': './assets/tw/commission/COMMISSION_ADVICE.png'}) COMMISSION_DAILY = Button(area={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188), 'jp': (17, 168, 82, 185), 'tw': (35, 132, 67, 186)}, color={'cn': (208, 172, 118), 'en': (170, 132, 92), 'jp': (148, 115, 76), 'tw': (208, 171, 119)}, button={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188), 'jp': (17, 168, 82, 185), 'tw': (35, 132, 67, 186)}, file={'cn': './assets/cn/commission/COMMISSION_DAILY.png', 'en': './assets/en/commission/COMMISSION_DAILY.png', 'jp': './assets/jp/commission/COMMISSION_DAILY.png', 'tw': './assets/tw/commission/COMMISSION_DAILY.png'}) COMMISSION_HAS_PENDING = Button(area={'cn': (320, 288, 380, 338), 'en': (320, 288, 380, 338), 'jp': (320, 288, 380, 338), 'tw': (320, 288, 380, 338)}, color={'cn': (121, 113, 152), 'en': (121, 113, 152), 'jp': (121, 113, 152), 'tw': (121, 113, 152)}, button={'cn': (320, 288, 380, 338), 'en': (320, 288, 380, 338), 'jp': (320, 288, 380, 338), 'tw': (320, 288, 380, 338)}, file={'cn': './assets/cn/commission/COMMISSION_HAS_PENDING.png', 'en': './assets/en/commission/COMMISSION_HAS_PENDING.png', 'jp': './assets/jp/commission/COMMISSION_HAS_PENDING.png', 'tw': './assets/tw/commission/COMMISSION_HAS_PENDING.png'}) COMMISSION_SCROLL_AREA = Button(area={'cn': (1254, 77, 1261, 676), 'en': (1254, 77, 1261, 676), 'jp': (1254, 77, 1261, 676), 'tw': (1254, 77, 1261, 676)}, color={'cn': (213, 183, 66), 'en': (213, 183, 66), 'jp': (213, 183, 66), 'tw': (213, 183, 66)}, button={'cn': (1254, 77, 1261, 676), 'en': (1254, 77, 1261, 676), 'jp': (1254, 77, 1261, 676), 'tw': (1254, 77, 1261, 676)}, file={'cn': './assets/cn/commission/COMMISSION_SCROLL_AREA.png', 'en': './assets/en/commission/COMMISSION_SCROLL_AREA.png', 'jp': './assets/jp/commission/COMMISSION_SCROLL_AREA.png', 'tw': './assets/tw/commission/COMMISSION_SCROLL_AREA.png'}) -COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1027, 325, 1157, 389), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (236, 197, 150), 'jp': (228, 179, 118), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1027, 325, 1157, 389), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'}) +COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1062, 342, 1125, 374), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (236, 197, 150), 'jp': (237, 201, 153), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1028, 336, 1157, 398), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'}) COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95), 'jp': (216, 190, 111), 'tw': (213, 186, 123)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, file={'cn': './assets/cn/commission/COMMISSION_URGENT.png', 'en': './assets/en/commission/COMMISSION_URGENT.png', 'jp': './assets/jp/commission/COMMISSION_URGENT.png', 'tw': './assets/tw/commission/COMMISSION_URGENT.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/commission/EXP_INFO_S_REWARD.png', 'en': './assets/en/commission/EXP_INFO_S_REWARD.png', 'jp': './assets/jp/commission/EXP_INFO_S_REWARD.png', 'tw': './assets/tw/commission/EXP_INFO_S_REWARD.png'}) REWARD_1 = Button(area={'cn': (383, 285, 503, 297), 'en': (403, 274, 504, 290), 'jp': (432, 273, 476, 294), 'tw': (383, 285, 503, 297)}, color={'cn': (238, 168, 81), 'en': (241, 198, 145), 'jp': (241, 188, 122), 'tw': (238, 168, 81)}, button={'cn': (383, 285, 503, 297), 'en': (392, 262, 515, 303), 'jp': (393, 262, 514, 303), 'tw': (383, 285, 503, 297)}, file={'cn': './assets/cn/commission/REWARD_1.png', 'en': './assets/en/commission/REWARD_1.png', 'jp': './assets/jp/commission/REWARD_1.png', 'tw': './assets/tw/commission/REWARD_1.png'}) diff --git a/module/commission/project.py b/module/commission/project.py index 44b9f3a91..babd46897 100644 --- a/module/commission/project.py +++ b/module/commission/project.py @@ -161,7 +161,7 @@ class Commission: # Name area = area_offset((176, 23, 420, 53), self.area[0:2]) button = Button(area=area, color=(), button=area, name='COMMISSION') - ocr = Ocr(button, lang='jp') + ocr = Ocr(button, letter=(201, 201, 201), lang='jp') self.button = button self.name = ocr.ocr(self.image) self.genre = self.commission_name_parse(self.name) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index d44548e0d..ac2138ded 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1936,13 +1936,13 @@ ], "display": "hide", "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -5042,13 +5042,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -5496,13 +5496,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -5950,13 +5950,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -6580,13 +6580,12 @@ "coalition_20240627" ], "option_bold": [ - "coalition_20230323", "coalition_20240627" ], "cn": "coalition_20240627", "en": "coalition_20240627", "jp": "coalition_20240627", - "tw": "coalition_20230323" + "tw": "coalition_20240627" }, "Mode": { "type": "select", @@ -6885,25 +6884,30 @@ "war_archives_20200820_cn", "war_archives_20200903_cn", "war_archives_20200917_cn", + "war_archives_20201012_cn", "war_archives_20201029_cn", "war_archives_20201229_cn", "war_archives_20210225_cn", "war_archives_20210325_cn", + "war_archives_20210422_cn", "war_archives_20210527_cn", "war_archives_20210624_cn", "war_archives_20210819_cn", + "war_archives_20210916_cn", "war_archives_20211014_cn", "war_archives_20211028_cn", + "war_archives_20211111_cn", + "war_archives_20211229_cn", "war_archives_20220210_cn", "war_archives_20220414_cn" ], "option_bold": [ - "war_archives_20210225_cn" + "war_archives_20211229_cn" ], - "cn": "war_archives_20210225_cn", - "en": "war_archives_20210225_cn", - "jp": "war_archives_20210225_cn", - "tw": "war_archives_20210225_cn" + "cn": "war_archives_20211229_cn", + "en": "war_archives_20211229_cn", + "jp": "war_archives_20211229_cn", + "tw": "war_archives_20211229_cn" }, "Mode": { "type": "select", @@ -7362,13 +7366,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -7833,13 +7837,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -8304,13 +8308,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -8775,13 +8779,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -9236,13 +9240,13 @@ "event_20240912_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20240912_cn" + "event_20220728_cn", + "event_20230914_cn" ], - "cn": "event_20240912_cn", - "en": "event_20240912_cn", - "jp": "event_20240912_cn", - "tw": "event_20220324_cn" + "cn": "event_20220728_cn", + "en": "event_20220728_cn", + "jp": "event_20220728_cn", + "tw": "event_20230914_cn" }, "Mode": { "type": "select", @@ -9864,13 +9868,12 @@ "coalition_20240627" ], "option_bold": [ - "coalition_20230323", "coalition_20240627" ], "cn": "coalition_20240627", "en": "coalition_20240627", "jp": "coalition_20240627", - "tw": "coalition_20230323" + "tw": "coalition_20240627" }, "Mode": { "type": "select", @@ -10479,6 +10482,10 @@ "EnhanceIndex": { "type": "input", "value": 1 + }, + "MaxFeedLevel": { + "type": "input", + "value": 5 } }, "Storage": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 6fc17a257..4835cbd38 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -598,6 +598,7 @@ MeowfficerTrain: RetainTalentedGold: true RetainTalentedPurple: true EnhanceIndex: 1 + MaxFeedLevel: 5 GuildLogistics: Enable: true SelectNewMission: false diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 818726e92..f36933ba1 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -321,6 +321,7 @@ class GeneratedConfig: MeowfficerTrain_RetainTalentedGold = True MeowfficerTrain_RetainTalentedPurple = True MeowfficerTrain_EnhanceIndex = 1 + MeowfficerTrain_MaxFeedLevel = 5 # Group `GuildLogistics` GuildLogistics_Enable = True diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 62b960e0e..bbbb867b3 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -769,7 +769,7 @@ "event_20220414_cn": "Aurora Noctis Rerun", "event_20220428_cn": "Rondo at Rainbows End Rerun", "event_20220526_cn": "Pledge of the Radiant Court Rerun", - "event_20220728_cn": "Aquilifers Ballade", + "event_20220728_cn": "Aquilifers Ballade Rerun", "event_20220818_cn": "Operation Convergence", "event_20220915_cn": "Violet Tempest Blooming Lycoris", "event_20221124_cn": "The Alchemist and the Archipelago of Secrets", @@ -817,15 +817,20 @@ "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", "war_archives_20200903_cn": "archives Stars of the Shimmering Fjord", "war_archives_20200917_cn": "archives Dreamwakers Butterfly", + "war_archives_20201012_cn": "archives Sundered Blue", "war_archives_20201029_cn": "archives Universe in Unison", "war_archives_20201229_cn": "archives Inverted Orthant", "war_archives_20210225_cn": "archives Khorovod of Dawns Rime", "war_archives_20210325_cn": "archives Ashen Simulacrum", + "war_archives_20210422_cn": "archives Daedalian Hymn", "war_archives_20210527_cn": "archives Mirror Involution", "war_archives_20210624_cn": "archives Swirling Cherry Blossoms", "war_archives_20210819_cn": "archives Microlayer Medley", + "war_archives_20210916_cn": "archives Upon the Shimmering Blue", "war_archives_20211014_cn": "archives Crescendo of Polaris", "war_archives_20211028_cn": "archives Skybound Oratorio", + "war_archives_20211111_cn": "archives The Flame-Touched Dagger", + "war_archives_20211229_cn": "archives Tower of Transcendence", "war_archives_20220210_cn": "archives Northern Overture", "war_archives_20220414_cn": "archives Aurora Noctis" }, @@ -2147,6 +2152,10 @@ "EnhanceIndex": { "name": "Enhance Index", "help": "Index of target meowfficer to enhance. Limited in 1 ~ 12; indices are in ascending order from left to right of the 4 x 3 grid." + }, + "MaxFeedLevel": { + "name": "Do not use meowfficer larger than level X as enhancing materials", + "help": "The X value is limited to 1 to 30" } }, "GuildLogistics": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index a7455281b..a911d5f2e 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -769,7 +769,7 @@ "event_20220414_cn": "極夜照らす幻光(復刻)", "event_20220428_cn": "吟ずる瑠璃の楽章(復刻)", "event_20220526_cn": "復刻诚閃の剣 搖光の城", - "event_20220728_cn": "鋼鷲の冒険譚", + "event_20220728_cn": "鋼鷲の冒険譚(復刻)", "event_20220818_cn": "結像点作戦", "event_20220915_cn": "赫の涙月 菫の暁風", "event_20221124_cn": "錬金術士と謎の遺跡群島", @@ -817,15 +817,20 @@ "war_archives_20200820_cn": "檔案 黒鉄の楽章 誓いの海", "war_archives_20200903_cn": "檔案 輝ける峡湾の星", "war_archives_20200917_cn": "檔案 刹那觀る胡蝶の夢", + "war_archives_20201012_cn": "檔案 奔る彩帆の青", "war_archives_20201029_cn": "檔案 激唱のユニバース", "war_archives_20201229_cn": "檔案 虚畳なりし限象", "war_archives_20210225_cn": "檔案 暁射す氷華の嵐", "war_archives_20210325_cn": "檔案 開かれし紺碧の砂箱", + "war_archives_20210422_cn": "檔案 讃える復興の迷路", "war_archives_20210527_cn": "檔案 照らす螺旋の鏡海", "war_archives_20210624_cn": "檔案 翳りし満ちる影の華", "war_archives_20210819_cn": "檔案 闇靄払う銀翼", + "war_archives_20210916_cn": "檔案 駆けよ 碧海の吹き風", "war_archives_20211014_cn": "檔案 激奏のポラリス", "war_archives_20211028_cn": "檔案 神穹を衝く聖歌", + "war_archives_20211111_cn": "檔案 燈火のシニエ", + "war_archives_20211229_cn": "檔案 遡望せし虹彩の塔", "war_archives_20220210_cn": "檔案 凍絶の北海", "war_archives_20220414_cn": "檔案 極夜照らす幻光" }, @@ -2147,6 +2152,10 @@ "EnhanceIndex": { "name": "MeowfficerTrain.EnhanceIndex.name", "help": "MeowfficerTrain.EnhanceIndex.help" + }, + "MaxFeedLevel": { + "name": "レベル X 以上の猫を強化材料にしない", + "help": "X 値は1~30に制限します" } }, "GuildLogistics": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 99c066d21..7df5800f3 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -769,7 +769,7 @@ "event_20220414_cn": "复刻永夜幻光", "event_20220428_cn": "复刻虹彩的终幕曲", "event_20220526_cn": "复刻泠誓光庭", - "event_20220728_cn": "雄鹰的叙事歌", + "event_20220728_cn": "复刻雄鹰的叙事歌", "event_20220818_cn": "远汇点作战", "event_20220915_cn": "紫绛槿岚", "event_20221124_cn": "炼金术士与秘密遗迹群岛", @@ -817,15 +817,20 @@ "war_archives_20200820_cn": "档案 铁血音符誓言", "war_archives_20200903_cn": "档案 峡湾间的星辰", "war_archives_20200917_cn": "档案 蝶海梦花", + "war_archives_20201012_cn": "档案 划破海空之翼", "war_archives_20201029_cn": "档案 激唱的UNIVERSE", "war_archives_20201229_cn": "档案 负象限作战", "war_archives_20210225_cn": "档案 破晓冰华", "war_archives_20210325_cn": "档案 箱庭疗法", + "war_archives_20210422_cn": "档案 复兴的赞美诗", "war_archives_20210527_cn": "档案 镜位螺旋", "war_archives_20210624_cn": "档案 浮樱影华", "war_archives_20210819_cn": "档案 微层混合", + "war_archives_20210916_cn": "档案 碧海光粼", "war_archives_20211014_cn": "档案 激奏的Polaris", "war_archives_20211028_cn": "档案 穹顶下的圣咏曲", + "war_archives_20211111_cn": "档案 杰诺瓦的焰火", + "war_archives_20211229_cn": "档案 逆转彩虹之塔", "war_archives_20220210_cn": "档案 北境序曲", "war_archives_20220414_cn": "档案 永夜幻光" }, @@ -2147,6 +2152,10 @@ "EnhanceIndex": { "name": "用无特殊天赋的猫给第 X 只猫强化", "help": "猫仓库的第 X 只猫,限制在 1 ~ 12,顺序从左上到右下" + }, + "MaxFeedLevel": { + "name": "不使用大于 X 级的猫作为强化材料", + "help": "X 值限制在 1 ~ 30" } }, "GuildLogistics": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 93921cd3f..4af92a8c6 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -719,7 +719,7 @@ "help": "自動選擇至最新的活動圖", "campaign_main": "主線圖", "coalition_20230323": "極地風暴", - "coalition_20240627": "Welcome to Little Academy", + "coalition_20240627": "歡迎來到童心學院", "event_20200227_cn": "Northern Overture", "event_20200312_cn": "斯圖爾特的硝煙", "event_20200326_cn": "Microlayer Medley", @@ -778,7 +778,7 @@ "event_20230525_cn": "空相交會點", "event_20230803_cn": "奏響鳶尾之歌", "event_20230817_cn": "愚者的天平", - "event_20230914_cn": "Effulgence Before Eclipse", + "event_20230914_cn": "須臾望月抄", "event_20231026_cn": "飓風與青春之泉", "event_20231123_cn": "蒼閃忍法帖", "event_20231221_cn": "Light-Chasing Sea of Stars", @@ -817,15 +817,20 @@ "war_archives_20200820_cn": "檔案 鐵血音符誓言", "war_archives_20200903_cn": "檔案 峽灣間的星辰", "war_archives_20200917_cn": "檔案 蝶海夢花", + "war_archives_20201012_cn": "檔案 劃破海空之翼", "war_archives_20201029_cn": "檔案 激唱的UNIVERSE", "war_archives_20201229_cn": "檔案 負象限作戰", "war_archives_20210225_cn": "檔案 破曉冰華", "war_archives_20210325_cn": "檔案 箱庭療法", + "war_archives_20210422_cn": "檔案 復興的讚美詩", "war_archives_20210527_cn": "檔案 鏡位螺旋", "war_archives_20210624_cn": "檔案 浮櫻影華", "war_archives_20210819_cn": "檔案 微層混合", + "war_archives_20210916_cn": "檔案 碧海光粼", "war_archives_20211014_cn": "檔案 激奏的Polaris", "war_archives_20211028_cn": "檔案 穹頂下的聖詠曲", + "war_archives_20211111_cn": "檔案 杰諾瓦的焰火", + "war_archives_20211229_cn": "檔案 逆轉彩虹之塔", "war_archives_20220210_cn": "檔案 北境序曲", "war_archives_20220414_cn": "檔案 永夜幻光" }, @@ -2147,6 +2152,10 @@ "EnhanceIndex": { "name": "用無特殊天賦的貓給第 X 隻貓強化", "help": "貓倉庫的第 X 隻貓,限制在 1 ~ 12,順序從左上到右下" + }, + "MaxFeedLevel": { + "name": "不使用大於 X 級的貓作為強化材料", + "help": "X 值限制在 1 ~ 30" } }, "GuildLogistics": { diff --git a/module/daily/assets.py b/module/daily/assets.py index 2cf629a67..5cc29f599 100644 --- a/module/daily/assets.py +++ b/module/daily/assets.py @@ -19,4 +19,4 @@ DAILY_PREV = Button(area={'cn': (282, 163, 456, 600), 'en': (282, 163, 456, 600) DAILY_SKIP = Button(area={'cn': (1003, 295, 1102, 349), 'en': (1034, 331, 1116, 340), 'jp': (1003, 292, 1103, 347), 'tw': (1003, 295, 1103, 349)}, color={'cn': (123, 160, 209), 'en': (182, 201, 227), 'jp': (117, 155, 207), 'tw': (124, 161, 210)}, button={'cn': (1003, 295, 1102, 349), 'en': (1034, 331, 1116, 340), 'jp': (1003, 292, 1103, 347), 'tw': (1003, 295, 1103, 349)}, file={'cn': './assets/cn/daily/DAILY_SKIP.png', 'en': './assets/en/daily/DAILY_SKIP.png', 'jp': './assets/jp/daily/DAILY_SKIP.png', 'tw': './assets/tw/daily/DAILY_SKIP.png'}) ENTRANCE_EMERGENCY_MODULE_DEVELOPMENT = Button(area={'cn': (606, 246, 673, 293), 'en': (606, 246, 673, 293), 'jp': (606, 246, 673, 293), 'tw': (606, 246, 673, 293)}, color={'cn': (198, 178, 199), 'en': (198, 178, 199), 'jp': (198, 178, 199), 'tw': (198, 178, 199)}, button={'cn': (606, 246, 673, 293), 'en': (606, 246, 673, 293), 'jp': (606, 246, 673, 293), 'tw': (606, 246, 673, 293)}, file={'cn': './assets/cn/daily/ENTRANCE_EMERGENCY_MODULE_DEVELOPMENT.png', 'en': './assets/en/daily/ENTRANCE_EMERGENCY_MODULE_DEVELOPMENT.png', 'jp': './assets/jp/daily/ENTRANCE_EMERGENCY_MODULE_DEVELOPMENT.png', 'tw': './assets/tw/daily/ENTRANCE_EMERGENCY_MODULE_DEVELOPMENT.png'}) OCR_DAILY_FLEET_INDEX = Button(area={'cn': (525, 605, 561, 667), 'en': (525, 605, 561, 667), 'jp': (525, 605, 561, 667), 'tw': (525, 605, 561, 667)}, color={'cn': (60, 90, 139), 'en': (60, 90, 139), 'jp': (60, 90, 139), 'tw': (60, 90, 139)}, button={'cn': (525, 605, 561, 667), 'en': (525, 605, 561, 667), 'jp': (525, 605, 561, 667), 'tw': (525, 605, 561, 667)}, file={'cn': './assets/cn/daily/OCR_DAILY_FLEET_INDEX.png', 'en': './assets/en/daily/OCR_DAILY_FLEET_INDEX.png', 'jp': './assets/jp/daily/OCR_DAILY_FLEET_INDEX.png', 'tw': './assets/tw/daily/OCR_DAILY_FLEET_INDEX.png'}) -OCR_REMAIN = Button(area={'cn': (526, 114, 546, 144), 'en': (526, 114, 546, 144), 'jp': (526, 114, 546, 144), 'tw': (526, 114, 546, 144)}, color={'cn': (94, 132, 164), 'en': (94, 132, 164), 'jp': (94, 132, 164), 'tw': (94, 132, 164)}, button={'cn': (526, 114, 546, 144), 'en': (526, 114, 546, 144), 'jp': (526, 114, 546, 144), 'tw': (526, 114, 546, 144)}, file={'cn': './assets/cn/daily/OCR_REMAIN.png', 'en': './assets/en/daily/OCR_REMAIN.png', 'jp': './assets/jp/daily/OCR_REMAIN.png', 'tw': './assets/tw/daily/OCR_REMAIN.png'}) +OCR_REMAIN = Button(area={'cn': (526, 114, 546, 144), 'en': (526, 114, 546, 144), 'jp': (525, 111, 539, 144), 'tw': (526, 114, 546, 144)}, color={'cn': (94, 132, 164), 'en': (94, 132, 164), 'jp': (43, 39, 39), 'tw': (94, 132, 164)}, button={'cn': (526, 114, 546, 144), 'en': (526, 114, 546, 144), 'jp': (525, 111, 539, 144), 'tw': (526, 114, 546, 144)}, file={'cn': './assets/cn/daily/OCR_REMAIN.png', 'en': './assets/en/daily/OCR_REMAIN.png', 'jp': './assets/jp/daily/OCR_REMAIN.png', 'tw': './assets/tw/daily/OCR_REMAIN.png'}) diff --git a/module/device/method/ldopengl.py b/module/device/method/ldopengl.py index 038618bbf..4e4687173 100644 --- a/module/device/method/ldopengl.py +++ b/module/device/method/ldopengl.py @@ -196,7 +196,7 @@ class LDOpenGLImpl: if not os.path.exists(ldopengl_dll): raise LDOpenGLIncompatible( f'ldopengl_dll={ldopengl_dll} does not exist, ' - f'ldopengl requires LDPlayer >= 9.0.75, please check your version' + f'ldopengl requires LDPlayer >= 9.0.78, please check your version' ) else: raise LDOpenGLIncompatible( @@ -264,6 +264,8 @@ class LDOpenGLImpl: int: instance_id, or None if failed to predict """ serial, _ = get_serial_pair(serial) + if serial is None: + return None try: port = int(serial.split(':')[1]) except (IndexError, ValueError): @@ -312,6 +314,9 @@ class LDOpenGL(Platform): def ldopengl_available(self) -> bool: if not self.is_ldplayer_bluestacks_family: return False + logger.attr('EmulatorInfo_Emulator', self.config.EmulatorInfo_Emulator) + if self.config.EmulatorInfo_Emulator not in ['LDPlayer9']: + return False try: _ = self.ldopengl diff --git a/module/device/method/maatouch.py b/module/device/method/maatouch.py index 5e135fe39..cff9cedae 100644 --- a/module/device/method/maatouch.py +++ b/module/device/method/maatouch.py @@ -355,7 +355,7 @@ class MaaTouch(Connection): points = insert_swipe(p0=p1, p3=p2) builder = self.maatouch_builder - builder.down(*points[0]).wait(10).commit() + builder.down(*points[0]).commit().wait(10) builder.send_sync() for point in points[1:]: diff --git a/module/device/method/minitouch.py b/module/device/method/minitouch.py index 732cc1bdd..f23dcdf55 100644 --- a/module/device/method/minitouch.py +++ b/module/device/method/minitouch.py @@ -683,7 +683,7 @@ class Minitouch(Connection): points = insert_swipe(p0=p1, p3=p2) builder = self.minitouch_builder - builder.down(*points[0]).commit() + builder.down(*points[0]).commit().wait(10) builder.send() for point in points[1:]: @@ -700,7 +700,7 @@ class Minitouch(Connection): points = insert_swipe(p0=p1, p3=p2, speed=20) builder = self.minitouch_builder - builder.down(*points[0]).commit() + builder.down(*points[0]).commit().wait(10) builder.send() for point in points[1:]: diff --git a/module/dorm/assets.py b/module/dorm/assets.py index df177b24b..7a23d4d42 100644 --- a/module/dorm/assets.py +++ b/module/dorm/assets.py @@ -6,12 +6,12 @@ from module.base.template import Template DORM_FEED_CHECK = Button(area={'cn': (162, 342, 274, 370), 'en': (162, 342, 274, 370), 'jp': (162, 342, 274, 370), 'tw': (162, 342, 274, 370)}, color={'cn': (182, 179, 171), 'en': (182, 179, 171), 'jp': (182, 179, 171), 'tw': (182, 179, 171)}, button={'cn': (162, 342, 274, 370), 'en': (162, 342, 274, 370), 'jp': (162, 342, 274, 370), 'tw': (162, 342, 274, 370)}, file={'cn': './assets/cn/dorm/DORM_FEED_CHECK.png', 'en': './assets/en/dorm/DORM_FEED_CHECK.png', 'jp': './assets/jp/dorm/DORM_FEED_CHECK.png', 'tw': './assets/tw/dorm/DORM_FEED_CHECK.png'}) DORM_FEED_ENTER = Button(area={'cn': (254, 581, 300, 605), 'en': (298, 581, 344, 605), 'jp': (254, 581, 300, 605), 'tw': (254, 581, 300, 605)}, color={'cn': (204, 192, 177), 'en': (204, 192, 176), 'jp': (204, 192, 177), 'tw': (204, 192, 177)}, button={'cn': (254, 581, 300, 605), 'en': (298, 581, 344, 605), 'jp': (254, 581, 300, 605), 'tw': (254, 581, 300, 605)}, file={'cn': './assets/cn/dorm/DORM_FEED_ENTER.png', 'en': './assets/en/dorm/DORM_FEED_ENTER.png', 'jp': './assets/jp/dorm/DORM_FEED_ENTER.png', 'tw': './assets/tw/dorm/DORM_FEED_ENTER.png'}) -DORM_FURNITURE_BUY_ALL = Button(area={'cn': (818, 621, 1072, 677), 'en': (819, 621, 1072, 677), 'jp': (820, 621, 1072, 677), 'tw': (818, 621, 1072, 677)}, color={'cn': (249, 202, 66), 'en': (248, 201, 66), 'jp': (247, 201, 66), 'tw': (248, 201, 66)}, button={'cn': (818, 621, 1072, 677), 'en': (819, 621, 1072, 677), 'jp': (820, 621, 1072, 677), 'tw': (818, 621, 1072, 677)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_BUY_ALL.png', 'en': './assets/en/dorm/DORM_FURNITURE_BUY_ALL.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_BUY_ALL.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_BUY_ALL.png'}) -DORM_FURNITURE_BUY_CONFIRM = Button(area={'cn': (644, 464, 972, 517), 'en': (645, 464, 971, 518), 'jp': (645, 465, 973, 517), 'tw': (644, 464, 972, 518)}, color={'cn': (251, 204, 66), 'en': (250, 203, 66), 'jp': (250, 203, 66), 'tw': (250, 203, 66)}, button={'cn': (644, 464, 972, 517), 'en': (645, 464, 971, 518), 'jp': (645, 465, 973, 517), 'tw': (644, 464, 972, 518)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_BUY_CONFIRM.png', 'en': './assets/en/dorm/DORM_FURNITURE_BUY_CONFIRM.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_BUY_CONFIRM.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_BUY_CONFIRM.png'}) -DORM_FURNITURE_BUY_SET = Button(area={'cn': (505, 621, 759, 677), 'en': (505, 621, 759, 677), 'jp': (505, 621, 760, 677), 'tw': (505, 621, 759, 677)}, color={'cn': (248, 202, 66), 'en': (247, 201, 66), 'jp': (245, 199, 65), 'tw': (247, 201, 66)}, button={'cn': (505, 621, 759, 677), 'en': (505, 621, 759, 677), 'jp': (505, 621, 760, 677), 'tw': (505, 621, 759, 677)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_BUY_SET.png', 'en': './assets/en/dorm/DORM_FURNITURE_BUY_SET.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_BUY_SET.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_BUY_SET.png'}) +DORM_FURNITURE_BUY_ALL = Button(area={'cn': (818, 621, 1072, 677), 'en': (819, 621, 1072, 677), 'jp': (899, 636, 991, 661), 'tw': (818, 621, 1072, 677)}, color={'cn': (249, 202, 66), 'en': (248, 201, 66), 'jp': (215, 171, 65), 'tw': (248, 201, 66)}, button={'cn': (818, 621, 1072, 677), 'en': (819, 621, 1072, 677), 'jp': (899, 636, 991, 661), 'tw': (818, 621, 1072, 677)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_BUY_ALL.png', 'en': './assets/en/dorm/DORM_FURNITURE_BUY_ALL.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_BUY_ALL.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_BUY_ALL.png'}) +DORM_FURNITURE_BUY_CONFIRM = Button(area={'cn': (644, 464, 972, 517), 'en': (645, 464, 971, 518), 'jp': (763, 473, 854, 509), 'tw': (644, 464, 972, 518)}, color={'cn': (251, 204, 66), 'en': (250, 203, 66), 'jp': (232, 185, 68), 'tw': (250, 203, 66)}, button={'cn': (644, 464, 972, 517), 'en': (645, 464, 971, 518), 'jp': (763, 473, 854, 509), 'tw': (644, 464, 972, 518)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_BUY_CONFIRM.png', 'en': './assets/en/dorm/DORM_FURNITURE_BUY_CONFIRM.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_BUY_CONFIRM.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_BUY_CONFIRM.png'}) +DORM_FURNITURE_BUY_SET = Button(area={'cn': (505, 621, 759, 677), 'en': (505, 621, 759, 677), 'jp': (570, 636, 696, 661), 'tw': (505, 621, 759, 677)}, color={'cn': (248, 202, 66), 'en': (247, 201, 66), 'jp': (219, 175, 65), 'tw': (247, 201, 66)}, button={'cn': (505, 621, 759, 677), 'en': (505, 621, 759, 677), 'jp': (570, 636, 696, 661), 'tw': (505, 621, 759, 677)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_BUY_SET.png', 'en': './assets/en/dorm/DORM_FURNITURE_BUY_SET.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_BUY_SET.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_BUY_SET.png'}) DORM_FURNITURE_CONFIRM = Button(area={'cn': (614, 476, 667, 503), 'en': (593, 470, 688, 505), 'jp': (614, 476, 667, 503), 'tw': (614, 476, 667, 503)}, color={'cn': (226, 155, 84), 'en': (228, 159, 89), 'jp': (226, 155, 84), 'tw': (226, 155, 84)}, button={'cn': (614, 476, 667, 503), 'en': (593, 470, 688, 505), 'jp': (614, 476, 667, 503), 'tw': (614, 476, 667, 503)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_CONFIRM.png', 'en': './assets/en/dorm/DORM_FURNITURE_CONFIRM.png', 'jp': './assets/cn/dorm/DORM_FURNITURE_CONFIRM.png', 'tw': './assets/cn/dorm/DORM_FURNITURE_CONFIRM.png'}) DORM_FURNITURE_COUNTDOWN = Button(area={'cn': (422, 244, 437, 259), 'en': (422, 244, 437, 259), 'jp': (422, 244, 437, 259), 'tw': (422, 244, 437, 259)}, color={'cn': (222, 222, 224), 'en': (222, 222, 224), 'jp': (222, 222, 224), 'tw': (222, 222, 224)}, button={'cn': (422, 244, 437, 259), 'en': (422, 244, 437, 259), 'jp': (422, 244, 437, 259), 'tw': (422, 244, 437, 259)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_COUNTDOWN.png', 'en': './assets/en/dorm/DORM_FURNITURE_COUNTDOWN.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_COUNTDOWN.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_COUNTDOWN.png'}) -DORM_FURNITURE_DETAILS_ENTER = Button(area={'cn': (1003, 444, 1259, 496), 'en': (1003, 444, 1259, 496), 'jp': (1003, 444, 1259, 496), 'tw': (1003, 444, 1258, 496)}, color={'cn': (252, 204, 66), 'en': (251, 204, 66), 'jp': (251, 204, 66), 'tw': (251, 204, 66)}, button={'cn': (1003, 444, 1259, 496), 'en': (1003, 444, 1259, 496), 'jp': (1003, 444, 1259, 496), 'tw': (1003, 444, 1258, 496)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_DETAILS_ENTER.png', 'en': './assets/en/dorm/DORM_FURNITURE_DETAILS_ENTER.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_DETAILS_ENTER.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_DETAILS_ENTER.png'}) +DORM_FURNITURE_DETAILS_ENTER = Button(area={'cn': (1003, 444, 1259, 496), 'en': (1003, 444, 1259, 496), 'jp': (1107, 457, 1155, 482), 'tw': (1003, 444, 1258, 496)}, color={'cn': (252, 204, 66), 'en': (251, 204, 66), 'jp': (216, 172, 65), 'tw': (251, 204, 66)}, button={'cn': (1003, 444, 1259, 496), 'en': (1003, 444, 1259, 496), 'jp': (1107, 457, 1155, 482), 'tw': (1003, 444, 1258, 496)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_DETAILS_ENTER.png', 'en': './assets/en/dorm/DORM_FURNITURE_DETAILS_ENTER.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_DETAILS_ENTER.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_DETAILS_ENTER.png'}) DORM_FURNITURE_DETAILS_QUIT = Button(area={'cn': (100, 121, 114, 141), 'en': (100, 121, 114, 141), 'jp': (100, 121, 114, 141), 'tw': (100, 121, 114, 141)}, color={'cn': (255, 224, 131), 'en': (255, 224, 131), 'jp': (255, 224, 131), 'tw': (255, 224, 131)}, button={'cn': (100, 121, 114, 141), 'en': (100, 121, 114, 141), 'jp': (100, 121, 114, 141), 'tw': (100, 121, 114, 141)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_DETAILS_QUIT.png', 'en': './assets/en/dorm/DORM_FURNITURE_DETAILS_QUIT.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_DETAILS_QUIT.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_DETAILS_QUIT.png'}) DORM_FURNITURE_SHOP_ENTER = Button(area={'cn': (1067, 604, 1120, 650), 'en': (1085, 604, 1139, 650), 'jp': (1067, 604, 1120, 650), 'tw': (1067, 604, 1120, 650)}, color={'cn': (255, 226, 130), 'en': (255, 227, 132), 'jp': (255, 226, 130), 'tw': (255, 226, 130)}, button={'cn': (1067, 604, 1120, 650), 'en': (1085, 604, 1139, 650), 'jp': (1067, 604, 1120, 650), 'tw': (1067, 604, 1120, 650)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_SHOP_ENTER.png', 'en': './assets/en/dorm/DORM_FURNITURE_SHOP_ENTER.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_SHOP_ENTER.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_SHOP_ENTER.png'}) DORM_FURNITURE_SHOP_FIRST = Button(area={'cn': (241, 565, 271, 572), 'en': (241, 565, 271, 572), 'jp': (241, 565, 271, 572), 'tw': (241, 565, 271, 572)}, color={'cn': (247, 213, 129), 'en': (247, 213, 129), 'jp': (247, 213, 129), 'tw': (247, 213, 129)}, button={'cn': (241, 565, 271, 572), 'en': (241, 565, 271, 572), 'jp': (241, 565, 271, 572), 'tw': (241, 565, 271, 572)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_SHOP_FIRST.png', 'en': './assets/en/dorm/DORM_FURNITURE_SHOP_FIRST.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_SHOP_FIRST.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_SHOP_FIRST.png'}) diff --git a/module/exercise/assets.py b/module/exercise/assets.py index caddee302..0641841a8 100644 --- a/module/exercise/assets.py +++ b/module/exercise/assets.py @@ -5,8 +5,10 @@ from module.base.template import Template # Don't modify it manually. ATTACKER_HP_AREA = Button(area={'cn': (271, 43, 586, 58), 'en': (271, 43, 586, 58), 'jp': (271, 44, 586, 56), 'tw': (271, 43, 586, 58)}, color={'cn': (239, 51, 15), 'en': (239, 51, 15), 'jp': (244, 123, 106), 'tw': (239, 51, 15)}, button={'cn': (271, 43, 586, 58), 'en': (271, 43, 586, 58), 'jp': (271, 44, 586, 56), 'tw': (271, 43, 586, 58)}, file={'cn': './assets/cn/exercise/ATTACKER_HP_AREA.png', 'en': './assets/en/exercise/ATTACKER_HP_AREA.png', 'jp': './assets/jp/exercise/ATTACKER_HP_AREA.png', 'tw': './assets/tw/exercise/ATTACKER_HP_AREA.png'}) +ATTACKER_HP_AREA_New = Button(area={'cn': (266, 40, 592, 49), 'en': (266, 40, 592, 49), 'jp': (266, 40, 592, 49), 'tw': (266, 40, 592, 49)}, color={'cn': (232, 82, 45), 'en': (232, 82, 45), 'jp': (232, 82, 45), 'tw': (232, 82, 45)}, button={'cn': (266, 40, 592, 49), 'en': (266, 40, 592, 49), 'jp': (266, 40, 592, 49), 'tw': (266, 40, 592, 49)}, file={'cn': './assets/cn/exercise/ATTACKER_HP_AREA_New.png', 'en': './assets/en/exercise/ATTACKER_HP_AREA_New.png', 'jp': './assets/jp/exercise/ATTACKER_HP_AREA_New.png', 'tw': './assets/tw/exercise/ATTACKER_HP_AREA_New.png'}) CLICK_SAFE_AREA = Button(area={'cn': (1215, 637, 1260, 686), 'en': (1215, 637, 1260, 686), 'jp': (1215, 637, 1260, 686), 'tw': (1215, 637, 1260, 686)}, color={'cn': (253, 180, 75), 'en': (253, 180, 75), 'jp': (253, 180, 75), 'tw': (253, 180, 75)}, button={'cn': (1215, 637, 1260, 686), 'en': (1215, 637, 1260, 686), 'jp': (1215, 637, 1260, 686), 'tw': (1215, 637, 1260, 686)}, file={'cn': './assets/cn/exercise/CLICK_SAFE_AREA.png', 'en': './assets/en/exercise/CLICK_SAFE_AREA.png', 'jp': './assets/jp/exercise/CLICK_SAFE_AREA.png', 'tw': './assets/tw/exercise/CLICK_SAFE_AREA.png'}) DEFENDER_HP_AREA = Button(area={'cn': (691, 43, 1004, 58), 'en': (691, 43, 1004, 58), 'jp': (691, 44, 1005, 56), 'tw': (691, 43, 1004, 58)}, color={'cn': (239, 51, 15), 'en': (239, 51, 15), 'jp': (244, 115, 98), 'tw': (239, 51, 15)}, button={'cn': (691, 43, 1004, 58), 'en': (691, 43, 1004, 58), 'jp': (691, 44, 1005, 56), 'tw': (691, 43, 1004, 58)}, file={'cn': './assets/cn/exercise/DEFENDER_HP_AREA.png', 'en': './assets/en/exercise/DEFENDER_HP_AREA.png', 'jp': './assets/jp/exercise/DEFENDER_HP_AREA.png', 'tw': './assets/tw/exercise/DEFENDER_HP_AREA.png'}) +DEFENDER_HP_AREA_New = Button(area={'cn': (692, 40, 1019, 49), 'en': (692, 40, 1019, 49), 'jp': (692, 40, 1019, 49), 'tw': (692, 40, 1019, 49)}, color={'cn': (231, 80, 45), 'en': (231, 80, 45), 'jp': (231, 80, 45), 'tw': (231, 80, 45)}, button={'cn': (692, 40, 1019, 49), 'en': (692, 40, 1019, 49), 'jp': (692, 40, 1019, 49), 'tw': (692, 40, 1019, 49)}, file={'cn': './assets/cn/exercise/DEFENDER_HP_AREA_New.png', 'en': './assets/en/exercise/DEFENDER_HP_AREA_New.png', 'jp': './assets/jp/exercise/DEFENDER_HP_AREA_New.png', 'tw': './assets/tw/exercise/DEFENDER_HP_AREA_New.png'}) EQUIP_EDIT_ACTIVE = Button(area={'cn': (51, 608, 245, 668), 'en': (50, 607, 247, 670), 'jp': (53, 610, 245, 667), 'tw': (51, 607, 247, 668)}, color={'cn': (191, 159, 109), 'en': (186, 157, 105), 'jp': (192, 159, 109), 'tw': (191, 159, 109)}, button={'cn': (51, 608, 245, 668), 'en': (50, 607, 247, 670), 'jp': (53, 610, 245, 667), 'tw': (51, 607, 247, 668)}, file={'cn': './assets/cn/exercise/EQUIP_EDIT_ACTIVE.png', 'en': './assets/en/exercise/EQUIP_EDIT_ACTIVE.png', 'jp': './assets/jp/exercise/EQUIP_EDIT_ACTIVE.png', 'tw': './assets/tw/exercise/EQUIP_EDIT_ACTIVE.png'}) EQUIP_EDIT_INACTIVE = Button(area={'cn': (51, 608, 246, 667), 'en': (50, 607, 247, 670), 'jp': (50, 610, 244, 668), 'tw': (50, 608, 246, 669)}, color={'cn': (89, 112, 158), 'en': (88, 111, 156), 'jp': (90, 113, 160), 'tw': (92, 115, 160)}, button={'cn': (51, 608, 246, 667), 'en': (50, 607, 247, 670), 'jp': (50, 610, 244, 668), 'tw': (50, 608, 246, 669)}, file={'cn': './assets/cn/exercise/EQUIP_EDIT_INACTIVE.png', 'en': './assets/en/exercise/EQUIP_EDIT_INACTIVE.png', 'jp': './assets/jp/exercise/EQUIP_EDIT_INACTIVE.png', 'tw': './assets/tw/exercise/EQUIP_EDIT_INACTIVE.png'}) EQUIP_ENTER = Button(area={'cn': (432, 283, 442, 293), 'en': (432, 283, 442, 293), 'jp': (432, 283, 442, 293), 'tw': (432, 283, 442, 293)}, color={'cn': (207, 206, 206), 'en': (207, 206, 206), 'jp': (207, 206, 206), 'tw': (207, 206, 206)}, button={'cn': (432, 283, 442, 293), 'en': (432, 283, 442, 293), 'jp': (432, 283, 442, 293), 'tw': (432, 283, 442, 293)}, file={'cn': './assets/cn/exercise/EQUIP_ENTER.png', 'en': './assets/en/exercise/EQUIP_ENTER.png', 'jp': './assets/jp/exercise/EQUIP_ENTER.png', 'tw': './assets/tw/exercise/EQUIP_ENTER.png'}) diff --git a/module/exercise/combat.py b/module/exercise/combat.py index da05658b6..64be71753 100644 --- a/module/exercise/combat.py +++ b/module/exercise/combat.py @@ -1,5 +1,5 @@ from module.combat.combat import * -from module.combat.combat import PAUSE, QUIT +from module.combat.combat import QUIT from module.exercise.assets import * from module.exercise.equipment import ExerciseEquipment from module.exercise.hp_daemon import HpDaemon @@ -47,16 +47,23 @@ class ExerciseCombat(HpDaemon, OpponentChoose, ExerciseEquipment, Combat): logger.info('Combat execute') self.device.stuck_record_clear() self.device.click_record_clear() - self.low_hp_confirm_timer = Timer(self.config.Exercise_LowHpConfirmWait, count=2).start() + self.low_hp_confirm_timer = Timer(1.5, count=2).start() show_hp_timer = Timer(5) pause_interval = Timer(0.5, count=1) + # Pause button to identify battle UI theme + pause = None success = True end = False while 1: self.device.screenshot() - if not self.is_combat_executing(): + p = self.is_combat_executing() + if p: + if pause is None: + pause = p + else: + self.low_hp_confirm_timer.reset() # Finish - S or D rank if self.appear_then_click(BATTLE_STATUS_S, interval=1): success = True @@ -93,9 +100,10 @@ class ExerciseCombat(HpDaemon, OpponentChoose, ExerciseEquipment, Combat): pause_interval.reset() continue if not end: - if self._at_low_hp(image=self.device.image): + if p and self._at_low_hp(image=self.device.image, pause=pause): logger.info('Exercise quit') - if pause_interval.reached() and self.appear_then_click(PAUSE): + if pause_interval.reached(): + self.device.click(p) pause_interval.reset() continue else: diff --git a/module/exercise/hp_daemon.py b/module/exercise/hp_daemon.py index 986a35f65..f1a0240d2 100644 --- a/module/exercise/hp_daemon.py +++ b/module/exercise/hp_daemon.py @@ -1,7 +1,8 @@ from module.base.base import ModuleBase from module.base.timer import Timer from module.base.utils import color_bar_percentage -from module.exercise.assets import ATTACKER_HP_AREA, DEFENDER_HP_AREA +from module.combat_ui.assets import PAUSE, PAUSE_Iridescent_Fantasy, PAUSE_New +from module.exercise.assets import * from module.logger import logger @@ -12,7 +13,7 @@ class HpDaemon(ModuleBase): low_hp_confirm_timer: Timer @staticmethod - def _calculate_hp(image, area, reverse=False, starter=2, prev_color=(239, 32, 33)): + def _calculate_hp(image, area, reverse=False, starter=2, prev_color=(239, 32, 33), threshold=30): """ Args: image: @@ -20,6 +21,7 @@ class HpDaemon(ModuleBase): reverse: True if HP is left align. starter: prev_color: + threshold: Returns: float: HP. 0 to 1. @@ -38,7 +40,8 @@ class HpDaemon(ModuleBase): # prev_index = index # # return prev_index / length - return color_bar_percentage(image, area, prev_color=prev_color, starter=starter, reverse=reverse) + return color_bar_percentage( + image, area, prev_color=prev_color, starter=starter, reverse=reverse, threshold=threshold) def _show_hp(self, low_hp_time=0): """ @@ -54,9 +57,21 @@ class HpDaemon(ModuleBase): text += ' - Low HP: %ss' % str(round(low_hp_time, 3)).ljust(5, '0') logger.info(text) - def _at_low_hp(self, image): - self.attacker_hp = self._calculate_hp(image, area=ATTACKER_HP_AREA.area, reverse=True) - self.defender_hp = self._calculate_hp(image, area=DEFENDER_HP_AREA.area, reverse=False) + def _at_low_hp(self, image, pause=PAUSE): + if pause == PAUSE: + self.attacker_hp = self._calculate_hp(image, area=ATTACKER_HP_AREA.area, reverse=True) + self.defender_hp = self._calculate_hp(image, area=DEFENDER_HP_AREA.area, reverse=False) + elif pause in [PAUSE_New, PAUSE_Iridescent_Fantasy]: + self.attacker_hp = self._calculate_hp(image, area=ATTACKER_HP_AREA_New.area, reverse=True) + self.defender_hp = self._calculate_hp(image, area=DEFENDER_HP_AREA_New.area, reverse=True) + else: + logger.warning(f'_at_low_hp received unknown pause: {pause}') + self.attacker_hp = self._calculate_hp(image, area=ATTACKER_HP_AREA.area, reverse=True) + self.defender_hp = self._calculate_hp(image, area=DEFENDER_HP_AREA.area, reverse=False) + + # Opponent died or HP bar get covered + if self.defender_hp < 0.01: + self.low_hp_confirm_timer.reset() if 0.01 < self.attacker_hp <= self.config.Exercise_LowHpThreshold: if self.low_hp_confirm_timer.reached() and self.low_hp_confirm_timer.current() < 300: self._show_hp(self.low_hp_confirm_timer.current()) diff --git a/module/freebies/assets.py b/module/freebies/assets.py index 1675bf8ce..c1214cb7a 100644 --- a/module/freebies/assets.py +++ b/module/freebies/assets.py @@ -9,8 +9,8 @@ BUY_CONFIRM = Button(area={'cn': (698, 579, 871, 636), 'en': (710, 583, 860, 633 DATA_KEY_COLLECT = Button(area={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, color={'cn': (144, 116, 77), 'en': (145, 109, 72), 'jp': (144, 111, 69), 'tw': (144, 116, 77)}, button={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECT.png', 'en': './assets/en/freebies/DATA_KEY_COLLECT.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECT.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECT.png'}) DATA_KEY_COLLECTED = Button(area={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, color={'cn': (102, 103, 103), 'en': (113, 113, 115), 'jp': (102, 103, 103), 'tw': (102, 103, 103)}, button={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECTED.png', 'en': './assets/en/freebies/DATA_KEY_COLLECTED.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECTED.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECTED.png'}) FREE_SUPPLY_PACK = Button(area={'cn': (525, 533, 579, 560), 'en': (523, 533, 582, 553), 'jp': (523, 530, 583, 559), 'tw': (524, 532, 582, 562)}, color={'cn': (144, 154, 164), 'en': (150, 160, 169), 'jp': (123, 137, 148), 'tw': (130, 143, 154)}, button={'cn': (378, 155, 577, 352), 'en': (426, 181, 557, 319), 'jp': (373, 177, 583, 356), 'tw': (388, 194, 554, 352)}, file={'cn': './assets/cn/freebies/FREE_SUPPLY_PACK.png', 'en': './assets/en/freebies/FREE_SUPPLY_PACK.png', 'jp': './assets/jp/freebies/FREE_SUPPLY_PACK.png', 'tw': './assets/tw/freebies/FREE_SUPPLY_PACK.png'}) -MAIL_BATCH_CLAIM = Button(area={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (594, 525, 686, 547), 'tw': (593, 524, 687, 546)}, color={'cn': (114, 209, 255), 'en': (147, 220, 255), 'jp': (128, 213, 255), 'tw': (114, 209, 255)}, button={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (594, 525, 686, 547), 'tw': (593, 524, 687, 546)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_CLAIM.png', 'en': './assets/en/freebies/MAIL_BATCH_CLAIM.png', 'jp': './assets/jp/freebies/MAIL_BATCH_CLAIM.png', 'tw': './assets/cn/freebies/MAIL_BATCH_CLAIM.png'}) -MAIL_BATCH_DELETE = Button(area={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 524, 865, 548), 'tw': (770, 523, 865, 547)}, color={'cn': (112, 209, 255), 'en': (150, 221, 255), 'jp': (126, 213, 255), 'tw': (112, 209, 255)}, button={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 524, 865, 548), 'tw': (770, 523, 865, 547)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_DELETE.png', 'en': './assets/en/freebies/MAIL_BATCH_DELETE.png', 'jp': './assets/jp/freebies/MAIL_BATCH_DELETE.png', 'tw': './assets/cn/freebies/MAIL_BATCH_DELETE.png'}) +MAIL_BATCH_CLAIM = Button(area={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, color={'cn': (114, 209, 255), 'en': (147, 220, 255), 'jp': (109, 207, 255), 'tw': (114, 209, 255)}, button={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_CLAIM.png', 'en': './assets/en/freebies/MAIL_BATCH_CLAIM.png', 'jp': './assets/jp/freebies/MAIL_BATCH_CLAIM.png', 'tw': './assets/cn/freebies/MAIL_BATCH_CLAIM.png'}) +MAIL_BATCH_DELETE = Button(area={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, color={'cn': (112, 209, 255), 'en': (150, 221, 255), 'jp': (114, 209, 255), 'tw': (112, 209, 255)}, button={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_DELETE.png', 'en': './assets/en/freebies/MAIL_BATCH_DELETE.png', 'jp': './assets/jp/freebies/MAIL_BATCH_DELETE.png', 'tw': './assets/cn/freebies/MAIL_BATCH_DELETE.png'}) MAIL_COLLECT = Button(area={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, color={'cn': (155, 184, 219), 'en': (151, 180, 216), 'jp': (116, 154, 203), 'tw': (145, 174, 212)}, button={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, file={'cn': './assets/cn/freebies/MAIL_COLLECT.png', 'en': './assets/en/freebies/MAIL_COLLECT.png', 'jp': './assets/jp/freebies/MAIL_COLLECT.png', 'tw': './assets/tw/freebies/MAIL_COLLECT.png'}) MAIL_COLLECTED = Button(area={'cn': (893, 578, 986, 607), 'en': (835, 578, 975, 606), 'jp': (861, 575, 951, 608), 'tw': (891, 576, 987, 609)}, color={'cn': (55, 61, 70), 'en': (54, 63, 71), 'jp': (48, 57, 65), 'tw': (55, 62, 72)}, button={'cn': (893, 578, 986, 607), 'en': (835, 578, 975, 606), 'jp': (861, 575, 951, 608), 'tw': (891, 576, 987, 609)}, file={'cn': './assets/cn/freebies/MAIL_COLLECTED.png', 'en': './assets/en/freebies/MAIL_COLLECTED.png', 'jp': './assets/jp/freebies/MAIL_COLLECTED.png', 'tw': './assets/tw/freebies/MAIL_COLLECTED.png'}) MAIL_DELETE = Button(area={'cn': (176, 560, 306, 590), 'en': (428, 567, 500, 584), 'jp': (177, 556, 307, 591), 'tw': (175, 559, 308, 592)}, color={'cn': (221, 171, 166), 'en': (216, 173, 169), 'jp': (210, 151, 146), 'tw': (217, 166, 162)}, button={'cn': (176, 560, 306, 590), 'en': (428, 567, 500, 584), 'jp': (177, 556, 307, 591), 'tw': (175, 559, 308, 592)}, file={'cn': './assets/cn/freebies/MAIL_DELETE.png', 'en': './assets/en/freebies/MAIL_DELETE.png', 'jp': './assets/jp/freebies/MAIL_DELETE.png', 'tw': './assets/tw/freebies/MAIL_DELETE.png'}) @@ -30,3 +30,4 @@ OCR_DATA_KEY = Button(area={'cn': (132, 42, 233, 70), 'en': (132, 42, 233, 70), PURCHASE_POPUP = Button(area={'cn': (907, 204, 934, 229), 'en': (907, 204, 934, 229), 'jp': (907, 204, 934, 229), 'tw': (907, 204, 934, 229)}, color={'cn': (176, 130, 110), 'en': (176, 130, 110), 'jp': (176, 130, 110), 'tw': (176, 130, 110)}, button={'cn': (907, 204, 934, 229), 'en': (907, 204, 934, 229), 'jp': (907, 204, 934, 229), 'tw': (907, 204, 934, 229)}, file={'cn': './assets/cn/freebies/PURCHASE_POPUP.png', 'en': './assets/en/freebies/PURCHASE_POPUP.png', 'jp': './assets/jp/freebies/PURCHASE_POPUP.png', 'tw': './assets/tw/freebies/PURCHASE_POPUP.png'}) REWARD_RECEIVE = Button(area={'cn': (1192, 520, 1255, 536), 'en': (1192, 522, 1254, 534), 'jp': (1186, 518, 1259, 536), 'tw': (1192, 520, 1255, 536)}, color={'cn': (191, 178, 163), 'en': (195, 182, 168), 'jp': (208, 197, 183), 'tw': (191, 178, 163)}, button={'cn': (1192, 520, 1255, 536), 'en': (1192, 522, 1254, 534), 'jp': (1186, 518, 1259, 536), 'tw': (1192, 520, 1255, 536)}, file={'cn': './assets/cn/freebies/REWARD_RECEIVE.png', 'en': './assets/en/freebies/REWARD_RECEIVE.png', 'jp': './assets/jp/freebies/REWARD_RECEIVE.png', 'tw': './assets/cn/freebies/REWARD_RECEIVE.png'}) REWARD_RECEIVE_SP = Button(area={'cn': (1105, 579, 1184, 597), 'en': (1090, 580, 1197, 596), 'jp': (1091, 599, 1171, 618), 'tw': (1105, 579, 1184, 597)}, color={'cn': (178, 143, 126), 'en': (168, 129, 111), 'jp': (168, 127, 109), 'tw': (178, 143, 126)}, button={'cn': (1105, 579, 1184, 597), 'en': (1090, 580, 1197, 596), 'jp': (1091, 599, 1171, 618), 'tw': (1105, 579, 1184, 597)}, file={'cn': './assets/cn/freebies/REWARD_RECEIVE_SP.png', 'en': './assets/en/freebies/REWARD_RECEIVE_SP.png', 'jp': './assets/jp/freebies/REWARD_RECEIVE_SP.png', 'tw': './assets/cn/freebies/REWARD_RECEIVE_SP.png'}) +REWARD_RECEIVE_WHITE = Button(area={'cn': (1119, 603, 1198, 622), 'en': (1115, 604, 1202, 620), 'jp': (1120, 604, 1198, 623), 'tw': (1119, 603, 1198, 622)}, color={'cn': (255, 211, 156), 'en': (255, 209, 153), 'jp': (255, 199, 131), 'tw': (255, 211, 156)}, button={'cn': (1119, 603, 1198, 622), 'en': (1115, 604, 1202, 620), 'jp': (1120, 604, 1198, 623), 'tw': (1119, 603, 1198, 622)}, file={'cn': './assets/cn/freebies/REWARD_RECEIVE_WHITE.png', 'en': './assets/en/freebies/REWARD_RECEIVE_WHITE.png', 'jp': './assets/jp/freebies/REWARD_RECEIVE_WHITE.png', 'tw': './assets/cn/freebies/REWARD_RECEIVE_WHITE.png'}) diff --git a/module/freebies/battle_pass.py b/module/freebies/battle_pass.py index 30172da31..c9986c1cc 100644 --- a/module/freebies/battle_pass.py +++ b/module/freebies/battle_pass.py @@ -69,14 +69,17 @@ class BattlePass(Combat, UI): else: self.device.screenshot() - if self.appear_then_click(REWARD_RECEIVE, offset=(20, 20), interval=2): + if self.appear_then_click(REWARD_RECEIVE, offset=(20, 20), interval=3): confirm_timer.reset() continue - if self.appear(REWARD_RECEIVE_SP, offset=(20, 20), interval=2) \ + if self.appear(REWARD_RECEIVE_SP, offset=(20, 20), interval=3) \ and REWARD_RECEIVE_SP.match_appear_on(self.device.image, threshold=15): self.device.click(REWARD_RECEIVE_SP) confirm_timer.reset() continue + if self.appear_then_click(REWARD_RECEIVE_WHITE, offset=(20, 20), interval=3): + confirm_timer.reset() + continue if self.handle_battle_pass_popup(): confirm_timer.reset() continue @@ -98,7 +101,9 @@ class BattlePass(Combat, UI): continue # End - if self.appear(BATTLE_PASS_CHECK, offset=(20, 20)) and not self.appear(REWARD_RECEIVE, offset=(20, 20)): + if self.appear(BATTLE_PASS_CHECK, offset=(20, 20)) \ + and not self.appear(REWARD_RECEIVE, offset=(20, 20)) \ + and not self.appear(REWARD_RECEIVE_WHITE, offset=(20, 20)): if confirm_timer.reached(): break else: diff --git a/module/handler/assets.py b/module/handler/assets.py index a7b7af1dd..9629b5c42 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -71,8 +71,8 @@ MAP_STAR_2 = Button(area={'cn': (532, 377, 540, 384), 'en': (518, 382, 526, 389) MAP_STAR_3 = Button(area={'cn': (818, 377, 827, 384), 'en': (804, 382, 812, 389), 'jp': (818, 377, 827, 384), 'tw': (818, 377, 827, 384)}, color={'cn': (251, 233, 143), 'en': (252, 234, 144), 'jp': (251, 233, 143), 'tw': (251, 233, 143)}, button={'cn': (818, 377, 827, 384), 'en': (804, 382, 812, 389), 'jp': (818, 377, 827, 384), 'tw': (818, 377, 827, 384)}, file={'cn': './assets/cn/handler/MAP_STAR_3.png', 'en': './assets/en/handler/MAP_STAR_3.png', 'jp': './assets/jp/handler/MAP_STAR_3.png', 'tw': './assets/tw/handler/MAP_STAR_3.png'}) MAP_WALK_OUT_OF_STEP = Button(area={'cn': (654, 312, 704, 335), 'en': (454, 314, 698, 338), 'jp': (736, 312, 783, 336), 'tw': (653, 309, 705, 334)}, color={'cn': (109, 113, 120), 'en': (108, 109, 116), 'jp': (137, 135, 143), 'tw': (118, 124, 132)}, button={'cn': (654, 312, 704, 335), 'en': (454, 314, 698, 338), 'jp': (736, 312, 783, 336), 'tw': (653, 309, 705, 334)}, file={'cn': './assets/cn/handler/MAP_WALK_OUT_OF_STEP.png', 'en': './assets/en/handler/MAP_WALK_OUT_OF_STEP.png', 'jp': './assets/jp/handler/MAP_WALK_OUT_OF_STEP.png', 'tw': './assets/tw/handler/MAP_WALK_OUT_OF_STEP.png'}) MAP_WALK_SPEEDUP = Button(area={'cn': (1025, 406, 1055, 436), 'en': (1025, 406, 1055, 436), 'jp': (1025, 406, 1055, 436), 'tw': (1025, 406, 1055, 436)}, color={'cn': (62, 97, 72), 'en': (62, 97, 72), 'jp': (62, 97, 72), 'tw': (62, 97, 72)}, button={'cn': (1025, 406, 1055, 436), 'en': (1025, 406, 1055, 436), 'jp': (1025, 406, 1055, 436), 'tw': (1025, 406, 1055, 436)}, file={'cn': './assets/cn/handler/MAP_WALK_SPEEDUP.png', 'en': './assets/en/handler/MAP_WALK_SPEEDUP.png', 'jp': './assets/jp/handler/MAP_WALK_SPEEDUP.png', 'tw': './assets/tw/handler/MAP_WALK_SPEEDUP.png'}) -MISSION_POPUP_ACK = Button(area={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, color={'cn': (181, 182, 184), 'en': (169, 170, 172), 'jp': (162, 164, 167), 'tw': (169, 170, 172)}, button={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, file={'cn': './assets/cn/handler/MISSION_POPUP_ACK.png', 'en': './assets/en/handler/MISSION_POPUP_ACK.png', 'jp': './assets/jp/handler/MISSION_POPUP_ACK.png', 'tw': './assets/tw/handler/MISSION_POPUP_ACK.png'}) -MISSION_POPUP_GO = Button(area={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, color={'cn': (125, 164, 214), 'en': (89, 138, 201), 'jp': (93, 142, 204), 'tw': (89, 138, 201)}, button={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, file={'cn': './assets/cn/handler/MISSION_POPUP_GO.png', 'en': './assets/en/handler/MISSION_POPUP_GO.png', 'jp': './assets/jp/handler/MISSION_POPUP_GO.png', 'tw': './assets/tw/handler/MISSION_POPUP_GO.png'}) +MISSION_POPUP_ACK = Button(area={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (441, 491, 536, 522)}, color={'cn': (181, 182, 184), 'en': (169, 170, 172), 'jp': (162, 164, 167), 'tw': (195, 195, 197)}, button={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (441, 491, 536, 522)}, file={'cn': './assets/cn/handler/MISSION_POPUP_ACK.png', 'en': './assets/en/handler/MISSION_POPUP_ACK.png', 'jp': './assets/jp/handler/MISSION_POPUP_ACK.png', 'tw': './assets/tw/handler/MISSION_POPUP_ACK.png'}) +MISSION_POPUP_GO = Button(area={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (726, 491, 855, 522)}, color={'cn': (125, 164, 214), 'en': (89, 138, 201), 'jp': (93, 142, 204), 'tw': (147, 178, 219)}, button={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (726, 491, 855, 522)}, file={'cn': './assets/cn/handler/MISSION_POPUP_GO.png', 'en': './assets/en/handler/MISSION_POPUP_GO.png', 'jp': './assets/jp/handler/MISSION_POPUP_GO.png', 'tw': './assets/tw/handler/MISSION_POPUP_GO.png'}) MOB_MOVE_CANCEL = Button(area={'cn': (1162, 646, 1220, 674), 'en': (1112, 646, 1211, 669), 'jp': (1162, 644, 1222, 675), 'tw': (1164, 647, 1219, 673)}, color={'cn': (224, 176, 173), 'en': (215, 169, 166), 'jp': (207, 140, 136), 'tw': (230, 185, 181)}, button={'cn': (1162, 646, 1220, 674), 'en': (1112, 646, 1211, 669), 'jp': (1162, 644, 1222, 675), 'tw': (1164, 647, 1219, 673)}, file={'cn': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'en': './assets/en/handler/MOB_MOVE_CANCEL.png', 'jp': './assets/jp/handler/MOB_MOVE_CANCEL.png', 'tw': './assets/tw/handler/MOB_MOVE_CANCEL.png'}) MOB_MOVE_ENTER = Button(area={'cn': (1102, 504, 1157, 578), 'en': (1102, 504, 1157, 578), 'jp': (1102, 504, 1157, 578), 'tw': (1102, 504, 1157, 578)}, color={'cn': (122, 124, 131), 'en': (122, 124, 131), 'jp': (122, 124, 131), 'tw': (122, 124, 131)}, button={'cn': (1102, 504, 1157, 578), 'en': (1102, 504, 1157, 578), 'jp': (1102, 504, 1157, 578), 'tw': (1102, 504, 1157, 578)}, file={'cn': './assets/cn/handler/MOB_MOVE_ENTER.png', 'en': './assets/en/handler/MOB_MOVE_ENTER.png', 'jp': './assets/jp/handler/MOB_MOVE_ENTER.png', 'tw': './assets/tw/handler/MOB_MOVE_ENTER.png'}) MONTHLY_PASS_NOTICE = Button(area={'cn': (554, 505, 726, 561), 'en': (716, 488, 869, 533), 'jp': (554, 505, 726, 561), 'tw': (554, 505, 726, 561)}, color={'cn': (109, 153, 208), 'en': (89, 138, 201), 'jp': (109, 153, 208), 'tw': (109, 153, 208)}, button={'cn': (872, 152, 939, 196), 'en': (863, 173, 929, 217), 'jp': (872, 152, 939, 196), 'tw': (872, 152, 939, 196)}, file={'cn': './assets/cn/handler/MONTHLY_PASS_NOTICE.png', 'en': './assets/en/handler/MONTHLY_PASS_NOTICE.png', 'jp': './assets/cn/handler/MONTHLY_PASS_NOTICE.png', 'tw': './assets/cn/handler/MONTHLY_PASS_NOTICE.png'}) diff --git a/module/meowfficer/enhance.py b/module/meowfficer/enhance.py index ef4551f06..3855ab1b7 100644 --- a/module/meowfficer/enhance.py +++ b/module/meowfficer/enhance.py @@ -14,6 +14,9 @@ MEOWFFICER_SELECT_GRID = ButtonGrid( MEOWFFICER_FEED_GRID = ButtonGrid( origin=(783, 189), delta=(130, 148), button_shape=(46, 46), grid_shape=(4, 3), name='MEOWFFICER_FEED_GRID') +MEOWFICER_FEED_LEVEL_GRID = ButtonGrid( + origin=(738, 211), delta=(130, 148), button_shape=(20, 22), grid_shape=(4, 3), + name='MEOWFFICER_FEED_LEVEL_GRID') MEOWFFICER_FEED = DigitCounter(OCR_MEOWFFICER_FEED, letter=(131, 121, 123), threshold=64) @@ -85,7 +88,26 @@ class MeowfficerEnhance(MeowfficerBase): list(Button) """ clickable = [] - for index, button in enumerate(MEOWFFICER_FEED_GRID.buttons): + + # Reset invalid value of MeowfficerTrain_MaxFeedLevel + # it can work without this code, just for rigor + reset_max_feed_level = -1 + if self.config.MeowfficerTrain_MaxFeedLevel < 1: + reset_max_feed_level = 1 + elif self.config.MeowfficerTrain_MaxFeedLevel > 30: + reset_max_feed_level = 30 + + if -1 != reset_max_feed_level: + logger.warning(f"Condition '1 <= MeowfficerTrain_MaxFeedLevel <= 30' needs to be satisfied, " + f'now MeowfficerTrain_MaxFeedLevel is {self.config.MeowfficerTrain_MaxFeedLevel}, ' + f'reset to {reset_max_feed_level}') + self.config.MeowfficerTrain_MaxFeedLevel = reset_max_feed_level + + # Get all the cat levels ready for enhance + feed_level_list = Digit(MEOWFICER_FEED_LEVEL_GRID.buttons, letter=(49, 48, 49), + name='FEED_MEOWFFICER_LEVEL').ocr(self.device.image) + + for index, (button, level) in enumerate(zip(MEOWFFICER_FEED_GRID.buttons, feed_level_list)): # Exit if 11th button; no need to validate as not # possible to click beyond this point if index >= 10: @@ -100,6 +122,11 @@ class MeowfficerEnhance(MeowfficerBase): if self.image_color_count(button, color=(95, 229, 108), threshold=221, count=150): continue + # Continue onto next If the target Meowfficer's level + # is greater than the maximum feed level set + if level > self.config.MeowfficerTrain_MaxFeedLevel: + continue + # Neither base case, so presume # button is clickable clickable.append(button) diff --git a/module/meta_reward/meta_reward.py b/module/meta_reward/meta_reward.py index 29f025ea5..16bc07b8b 100644 --- a/module/meta_reward/meta_reward.py +++ b/module/meta_reward/meta_reward.py @@ -117,7 +117,7 @@ class DossierReward(Combat, UI): in: dossier meta page """ self.device.screenshot() - if self.appear(DOSSIER_REWARD_RECEIVE, offset=(100, 100), threshold=30): + if self.appear(DOSSIER_REWARD_RECEIVE, offset=(-40, 10, -10, 40), threshold=0.7): logger.info('Found dossier reward red dot') return True else: diff --git a/module/minigame/minigame.py b/module/minigame/minigame.py index 3c9fd06de..048e752c8 100644 --- a/module/minigame/minigame.py +++ b/module/minigame/minigame.py @@ -59,6 +59,7 @@ class MinigameRun(UI): if self.deal_specific_popup(): return True if self.handle_popup_confirm('TICKETS_FULL'): + self.interval_reset(COIN_POPUP, interval=3) return True # coins more than 31, deal popup if self.appear_then_click(COIN_POPUP, offset=(5, 5), interval=3): diff --git a/module/os/map.py b/module/os/map.py index 4328cec41..4f9903c6e 100644 --- a/module/os/map.py +++ b/module/os/map.py @@ -560,11 +560,13 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler): if self.appear_then_click(AUTO_SEARCH_REWARD, offset=(50, 50), interval=3): continue - if pause_interval.reached() and self.is_combat_executing(): - self.device.click(PAUSE) - self.interval_reset(MAINTENANCE_ANNOUNCE) - pause_interval.reset() - continue + if pause_interval.reached(): + pause = self.is_combat_executing() + if pause: + self.device.click(pause) + self.interval_reset(MAINTENANCE_ANNOUNCE) + pause_interval.reset() + continue if self.handle_combat_quit(): self.interval_reset(MAINTENANCE_ANNOUNCE) pause_interval.reset() diff --git a/module/os/map_operation.py b/module/os/map_operation.py index a23844b68..422d3188f 100644 --- a/module/os/map_operation.py +++ b/module/os/map_operation.py @@ -77,7 +77,7 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle @Config.when(SERVER='jp') def get_zone_name(self): # For JP only - ocr = Ocr(MAP_NAME, lang='jp', letter=(214, 231, 255), threshold=127, name='OCR_OS_MAP_NAME') + ocr = Ocr(MAP_NAME, lang='jp', letter=(185, 192, 201), threshold=127, name='OCR_OS_MAP_NAME') name = ocr.ocr(self.device.image) self.is_zone_name_hidden = '安全' in name # Remove punctuations diff --git a/module/os_ash/ash.py b/module/os_ash/ash.py index 5aeeb40d7..967a9ed7e 100644 --- a/module/os_ash/ash.py +++ b/module/os_ash/ash.py @@ -1,5 +1,7 @@ from datetime import datetime, timedelta +import module.config.server as server + from module.base.utils import image_left_strip from module.combat.combat import BATTLE_PREPARATION, Combat from module.config.utils import DEFAULT_TIME @@ -95,10 +97,16 @@ class OSAsh(UI, MapEventHandler): return 0 if self.image_color_count(ASH_COLLECT_STATUS, color=(235, 235, 235), threshold=221, count=20): logger.info('Ash beacon status: light') - ocr_collect = DigitCounter( - ASH_COLLECT_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_COLLECT_STATUS') - ocr_daily = DailyDigitCounter( - ASH_DAILY_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_DAILY_STATUS') + if server.server != 'jp': + ocr_collect = DigitCounter( + ASH_COLLECT_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_COLLECT_STATUS') + ocr_daily = DailyDigitCounter( + ASH_DAILY_STATUS, letter=(235, 235, 235), threshold=160, name='OCR_ASH_DAILY_STATUS') + else: + ocr_collect = DigitCounter( + ASH_COLLECT_STATUS, letter=(193, 193, 193), threshold=160, name='OCR_ASH_COLLECT_STATUS') + ocr_daily = DailyDigitCounter( + ASH_DAILY_STATUS, letter=(193, 193, 193), threshold=160, name='OCR_ASH_DAILY_STATUS') elif self.image_color_count(ASH_COLLECT_STATUS, color=(140, 142, 140), threshold=221, count=20): logger.info('Ash beacon status: gray') ocr_collect = DigitCounter( diff --git a/module/os_ash/meta.py b/module/os_ash/meta.py index ed04d8a37..b1312d4da 100644 --- a/module/os_ash/meta.py +++ b/module/os_ash/meta.py @@ -1,3 +1,4 @@ +import re from enum import Enum import module.config.server as server @@ -22,7 +23,10 @@ class MetaState(Enum): OCR_BEACON_TIER = Digit(BEACON_TIER, name='OCR_ASH_TIER') -OCR_META_DAMAGE = Digit(META_DAMAGE, name='OCR_META_DAMAGE') +if server.server != 'jp': + OCR_META_DAMAGE = Digit(META_DAMAGE, name='OCR_META_DAMAGE') +else: + OCR_META_DAMAGE = Digit(META_DAMAGE, letter=(201, 201, 201), name='OCR_META_DAMAGE') class MetaDigitCounter(DigitCounter): @@ -33,13 +37,20 @@ class MetaDigitCounter(DigitCounter): if result.startswith('00/'): result = '100/' + result[3:] + # 23 -> 2/3 + if re.match(r'^[0123]3$', result): + result = f'{result[0]}/{result[1]}' + return result class Meta(UI, MapEventHandler): def digit_ocr_point_and_check(self, button: Button, check_number: int): - point_ocr = MetaDigitCounter(button, letter=(235, 235, 235), threshold=160, name='POINT_OCR') + if server.server != 'jp': + point_ocr = MetaDigitCounter(button, letter=(235, 235, 235), threshold=160, name='POINT_OCR') + else: + point_ocr = MetaDigitCounter(button, letter=(192, 192, 192), threshold=160, name='POINT_OCR') point, _, _ = point_ocr.ocr(self.device.image) if point >= check_number: return True @@ -67,7 +78,7 @@ class Meta(UI, MapEventHandler): def _server_support(): - return server.server in ['cn', 'en', 'jp','tw'] + return server.server in ['cn', 'en', 'jp', 'tw'] def _server_support_dossier_auto_attack(): @@ -454,7 +465,7 @@ class OpsiAshBeacon(Meta): skip_first_screenshot = False else: self.device.screenshot() - + if self.appear(DOSSIER_LIST, offset=(20, 20)): logger.info('In dossier page') return True diff --git a/module/os_handler/os_status.py b/module/os_handler/os_status.py index 387c0efd3..00e25e63d 100644 --- a/module/os_handler/os_status.py +++ b/module/os_handler/os_status.py @@ -1,6 +1,8 @@ import typing as t from datetime import datetime, timedelta +import module.config.server as server + from module.base.timer import Timer from module.config.config import Function from module.config.utils import get_server_next_update @@ -12,7 +14,10 @@ from module.os_shop.assets import OS_SHOP_CHECK, OS_SHOP_PURPLE_COINS, SHOP_PURP from module.ui.ui import UI from module.log_res.log_res import LogRes -OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(239, 239, 239), threshold=160, name='OCR_SHOP_YELLOW_COINS') +if server.server != 'jp': + OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(239, 239, 239), threshold=160, name='OCR_SHOP_YELLOW_COINS') +else: + OCR_SHOP_YELLOW_COINS = Digit(SHOP_YELLOW_COINS, letter=(193, 193, 193), threshold=160, name='OCR_SHOP_YELLOW_COINS') OCR_SHOP_PURPLE_COINS = Digit(SHOP_PURPLE_COINS, letter=(255, 255, 255), name='OCR_SHOP_PURPLE_COINS') OCR_OS_SHOP_PURPLE_COINS = Digit(OS_SHOP_PURPLE_COINS, letter=(255, 255, 255), name='OCR_OS_SHOP_PURPLE_COINS') diff --git a/module/research/assets.py b/module/research/assets.py index f23616fcc..bb5862dd7 100644 --- a/module/research/assets.py +++ b/module/research/assets.py @@ -33,7 +33,7 @@ OCR_RESEARCH_5 = Button(area={'cn': (998, 276, 1169, 329), 'en': (998, 276, 1169 QUEUE_CHECK = Button(area={'cn': (118, 16, 227, 39), 'en': (117, 16, 215, 38), 'jp': (116, 14, 232, 42), 'tw': (118, 14, 227, 39)}, color={'cn': (149, 166, 205), 'en': (125, 139, 179), 'jp': (147, 163, 199), 'tw': (155, 171, 210)}, button={'cn': (118, 16, 227, 39), 'en': (117, 16, 215, 38), 'jp': (116, 14, 232, 42), 'tw': (118, 14, 227, 39)}, file={'cn': './assets/cn/research/QUEUE_CHECK.png', 'en': './assets/en/research/QUEUE_CHECK.png', 'jp': './assets/jp/research/QUEUE_CHECK.png', 'tw': './assets/tw/research/QUEUE_CHECK.png'}) QUEUE_CLAIM_REWARD = Button(area={'cn': (1230, 275, 1272, 420), 'en': (1225, 258, 1270, 448), 'jp': (1219, 254, 1279, 460), 'tw': (1219, 253, 1280, 460)}, color={'cn': (249, 182, 121), 'en': (249, 171, 97), 'jp': (249, 170, 97), 'tw': (249, 174, 102)}, button={'cn': (1230, 275, 1272, 420), 'en': (1225, 258, 1270, 448), 'jp': (1219, 254, 1279, 460), 'tw': (1219, 253, 1280, 460)}, file={'cn': './assets/cn/research/QUEUE_CLAIM_REWARD.png', 'en': './assets/en/research/QUEUE_CLAIM_REWARD.png', 'jp': './assets/jp/research/QUEUE_CLAIM_REWARD.png', 'tw': './assets/tw/research/QUEUE_CLAIM_REWARD.png'}) QUEUE_REMAIN = Button(area={'cn': (156, 605, 272, 637), 'en': (151, 580, 278, 617), 'jp': (157, 605, 277, 636), 'tw': (165, 582, 275, 613)}, color={'cn': (193, 212, 240), 'en': (191, 210, 238), 'jp': (188, 208, 239), 'tw': (192, 211, 241)}, button={'cn': (156, 605, 272, 637), 'en': (151, 580, 278, 617), 'jp': (157, 605, 277, 636), 'tw': (165, 582, 275, 613)}, file={'cn': './assets/cn/research/QUEUE_REMAIN.png', 'en': './assets/en/research/QUEUE_REMAIN.png', 'jp': './assets/jp/research/QUEUE_REMAIN.png', 'tw': './assets/tw/research/QUEUE_REMAIN.png'}) -RESEARCH_COST_CHECKER = Button(area={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 365, 972, 386), 'tw': (809, 365, 972, 386)}, color={'cn': (105, 114, 128), 'en': (105, 114, 128), 'jp': (105, 114, 128), 'tw': (105, 114, 128)}, button={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 365, 972, 386), 'tw': (809, 365, 972, 386)}, file={'cn': './assets/cn/research/RESEARCH_COST_CHECKER.png', 'en': './assets/en/research/RESEARCH_COST_CHECKER.png', 'jp': './assets/jp/research/RESEARCH_COST_CHECKER.png', 'tw': './assets/tw/research/RESEARCH_COST_CHECKER.png'}) +RESEARCH_COST_CHECKER = Button(area={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 361, 971, 380), 'tw': (809, 365, 972, 386)}, color={'cn': (105, 114, 128), 'en': (105, 114, 128), 'jp': (94, 103, 118), 'tw': (105, 114, 128)}, button={'cn': (809, 365, 972, 386), 'en': (809, 365, 972, 386), 'jp': (809, 361, 971, 380), 'tw': (809, 365, 972, 386)}, file={'cn': './assets/cn/research/RESEARCH_COST_CHECKER.png', 'en': './assets/en/research/RESEARCH_COST_CHECKER.png', 'jp': './assets/jp/research/RESEARCH_COST_CHECKER.png', 'tw': './assets/tw/research/RESEARCH_COST_CHECKER.png'}) RESEARCH_DETAIL_QUIT = Button(area={'cn': (695, 656, 784, 707), 'en': (695, 656, 784, 707), 'jp': (695, 656, 784, 707), 'tw': (695, 656, 784, 707)}, color={'cn': (50, 57, 74), 'en': (50, 57, 74), 'jp': (50, 57, 74), 'tw': (50, 57, 74)}, button={'cn': (695, 656, 784, 707), 'en': (695, 656, 784, 707), 'jp': (695, 656, 784, 707), 'tw': (695, 656, 784, 707)}, file={'cn': './assets/cn/research/RESEARCH_DETAIL_QUIT.png', 'en': './assets/en/research/RESEARCH_DETAIL_QUIT.png', 'jp': './assets/jp/research/RESEARCH_DETAIL_QUIT.png', 'tw': './assets/tw/research/RESEARCH_DETAIL_QUIT.png'}) RESEARCH_FINISHED = Button(area={'cn': (384, 547, 502, 585), 'en': (382, 545, 504, 587), 'jp': (383, 546, 503, 586), 'tw': (384, 547, 502, 585)}, color={'cn': (233, 163, 69), 'en': (235, 174, 92), 'jp': (229, 159, 63), 'tw': (233, 163, 69)}, button={'cn': (384, 547, 502, 585), 'en': (382, 545, 504, 587), 'jp': (383, 546, 503, 586), 'tw': (384, 547, 502, 585)}, file={'cn': './assets/cn/research/RESEARCH_FINISHED.png', 'en': './assets/en/research/RESEARCH_FINISHED.png', 'jp': './assets/jp/research/RESEARCH_FINISHED.png', 'tw': './assets/tw/research/RESEARCH_FINISHED.png'}) RESEARCH_GOTO_QUEUE = Button(area={'cn': (4, 227, 51, 255), 'en': (4, 227, 51, 255), 'jp': (4, 227, 51, 255), 'tw': (4, 227, 51, 255)}, color={'cn': (49, 53, 82), 'en': (49, 53, 82), 'jp': (49, 53, 82), 'tw': (49, 53, 82)}, button={'cn': (4, 227, 51, 255), 'en': (4, 227, 51, 255), 'jp': (4, 227, 51, 255), 'tw': (4, 227, 51, 255)}, file={'cn': './assets/cn/research/RESEARCH_GOTO_QUEUE.png', 'en': './assets/en/research/RESEARCH_GOTO_QUEUE.png', 'jp': './assets/jp/research/RESEARCH_GOTO_QUEUE.png', 'tw': './assets/tw/research/RESEARCH_GOTO_QUEUE.png'}) diff --git a/module/retire/assets.py b/module/retire/assets.py index dd1d8b5fb..d4066e199 100644 --- a/module/retire/assets.py +++ b/module/retire/assets.py @@ -6,7 +6,7 @@ from module.base.template import Template COMMON_SHIP_FILTER_DISABLE = Button(area={'cn': (714, 13, 757, 41), 'en': (706, 15, 758, 41), 'jp': (711, 13, 759, 42), 'tw': (712, 12, 759, 42)}, color={'cn': (127, 143, 183), 'en': (86, 99, 138), 'jp': (119, 131, 170), 'tw': (117, 132, 173)}, button={'cn': (714, 13, 757, 41), 'en': (706, 15, 758, 41), 'jp': (711, 13, 759, 42), 'tw': (712, 12, 759, 42)}, file={'cn': './assets/cn/retire/COMMON_SHIP_FILTER_DISABLE.png', 'en': './assets/en/retire/COMMON_SHIP_FILTER_DISABLE.png', 'jp': './assets/jp/retire/COMMON_SHIP_FILTER_DISABLE.png', 'tw': './assets/tw/retire/COMMON_SHIP_FILTER_DISABLE.png'}) COMMON_SHIP_FILTER_ENABLE = Button(area={'cn': (713, 12, 758, 41), 'en': (707, 16, 758, 40), 'jp': (712, 13, 758, 42), 'tw': (712, 11, 759, 42)}, color={'cn': (214, 174, 130), 'en': (193, 149, 106), 'jp': (212, 171, 129), 'tw': (211, 170, 127)}, button={'cn': (713, 12, 758, 41), 'en': (707, 16, 758, 40), 'jp': (712, 13, 758, 42), 'tw': (712, 11, 759, 42)}, file={'cn': './assets/cn/retire/COMMON_SHIP_FILTER_ENABLE.png', 'en': './assets/en/retire/COMMON_SHIP_FILTER_ENABLE.png', 'jp': './assets/jp/retire/COMMON_SHIP_FILTER_ENABLE.png', 'tw': './assets/tw/retire/COMMON_SHIP_FILTER_ENABLE.png'}) -DOCK_AMOUNT = Button(area={'cn': (473, 17, 611, 41), 'en': (476, 9, 611, 44), 'jp': (473, 17, 611, 41), 'tw': (473, 17, 611, 41)}, color={'cn': (71, 74, 78), 'en': (50, 54, 58), 'jp': (71, 74, 78), 'tw': (71, 74, 78)}, button={'cn': (473, 17, 611, 41), 'en': (476, 9, 611, 44), 'jp': (473, 17, 611, 41), 'tw': (473, 17, 611, 41)}, file={'cn': './assets/cn/retire/DOCK_AMOUNT.png', 'en': './assets/en/retire/DOCK_AMOUNT.png', 'jp': './assets/jp/retire/DOCK_AMOUNT.png', 'tw': './assets/tw/retire/DOCK_AMOUNT.png'}) +DOCK_AMOUNT = Button(area={'cn': (473, 17, 611, 41), 'en': (476, 9, 611, 44), 'jp': (473, 14, 584, 42), 'tw': (473, 17, 611, 41)}, color={'cn': (71, 74, 78), 'en': (50, 54, 58), 'jp': (46, 53, 61), 'tw': (71, 74, 78)}, button={'cn': (473, 17, 611, 41), 'en': (476, 9, 611, 44), 'jp': (473, 14, 584, 42), 'tw': (473, 17, 611, 41)}, file={'cn': './assets/cn/retire/DOCK_AMOUNT.png', 'en': './assets/en/retire/DOCK_AMOUNT.png', 'jp': './assets/jp/retire/DOCK_AMOUNT.png', 'tw': './assets/tw/retire/DOCK_AMOUNT.png'}) DOCK_CHECK = Button(area={'cn': (121, 14, 175, 39), 'en': (121, 17, 189, 39), 'jp': (123, 15, 195, 38), 'tw': (121, 13, 176, 39)}, color={'cn': (156, 171, 207), 'en': (112, 125, 162), 'jp': (97, 108, 142), 'tw': (149, 164, 200)}, button={'cn': (121, 14, 175, 39), 'en': (121, 17, 189, 39), 'jp': (123, 15, 195, 38), 'tw': (121, 13, 176, 39)}, file={'cn': './assets/cn/retire/DOCK_CHECK.png', 'en': './assets/en/retire/DOCK_CHECK.png', 'jp': './assets/jp/retire/DOCK_CHECK.png', 'tw': './assets/tw/retire/DOCK_CHECK.png'}) DOCK_EMPTY = Button(area={'cn': (95, 347, 388, 378), 'en': (95, 318, 264, 339), 'jp': (96, 347, 252, 376), 'tw': (94, 347, 390, 379)}, color={'cn': (160, 154, 159), 'en': (106, 99, 106), 'jp': (159, 152, 156), 'tw': (163, 157, 162)}, button={'cn': (95, 347, 388, 378), 'en': (95, 318, 264, 339), 'jp': (96, 347, 252, 376), 'tw': (94, 347, 390, 379)}, file={'cn': './assets/cn/retire/DOCK_EMPTY.png', 'en': './assets/en/retire/DOCK_EMPTY.png', 'jp': './assets/jp/retire/DOCK_EMPTY.png', 'tw': './assets/tw/retire/DOCK_EMPTY.png'}) DOCK_FILTER = Button(area={'cn': (1099, 5, 1193, 48), 'en': (1098, 4, 1194, 49), 'jp': (1101, 6, 1192, 46), 'tw': (1099, 6, 1193, 47)}, color={'cn': (70, 87, 127), 'en': (73, 90, 128), 'jp': (67, 84, 125), 'tw': (78, 96, 137)}, button={'cn': (1099, 5, 1193, 48), 'en': (1098, 4, 1194, 49), 'jp': (1101, 6, 1192, 46), 'tw': (1099, 6, 1193, 47)}, file={'cn': './assets/cn/retire/DOCK_FILTER.png', 'en': './assets/en/retire/DOCK_FILTER.png', 'jp': './assets/jp/retire/DOCK_FILTER.png', 'tw': './assets/tw/retire/DOCK_FILTER.png'}) diff --git a/module/retire/dock.py b/module/retire/dock.py index d116ada90..b85e79e9c 100644 --- a/module/retire/dock.py +++ b/module/retire/dock.py @@ -1,3 +1,5 @@ +import module.config.server as server + import gl from module.base.button import ButtonGrid from module.base.decorator import cached_property @@ -22,8 +24,12 @@ DOCK_FAVOURITE.add_status('off', check_button=COMMON_SHIP_FILTER_DISABLE) CARD_GRIDS = ButtonGrid( origin=(93, 76), delta=(164 + 2 / 3, 227), button_shape=(138, 204), grid_shape=(7, 2), name='CARD') CARD_RARITY_GRIDS = CARD_GRIDS.crop(area=(0, 0, 138, 5), name='RARITY') -CARD_LEVEL_GRIDS = CARD_GRIDS.crop(area=(77, 5, 138, 27), name='LEVEL') -CARD_EMOTION_GRIDS = CARD_GRIDS.crop(area=(23, 29, 48, 52), name='EMOTION') +if server.server != 'jp': + CARD_LEVEL_GRIDS = CARD_GRIDS.crop(area=(77, 5, 138, 27), name='LEVEL') + CARD_EMOTION_GRIDS = CARD_GRIDS.crop(area=(23, 29, 48, 52), name='EMOTION') +else: + CARD_LEVEL_GRIDS = CARD_GRIDS.crop(area=(74, 5, 136, 27), name='LEVEL') + CARD_EMOTION_GRIDS = CARD_GRIDS.crop(area=(21, 29, 71, 48), name='EMOTION') DOCK_SCROLL = Scroll(DOCK_SCROLL, color=(247, 211, 66), name='DOCK_SCROLL') diff --git a/module/retire/enhancement.py b/module/retire/enhancement.py index 8852e0617..fd928c277 100644 --- a/module/retire/enhancement.py +++ b/module/retire/enhancement.py @@ -1,5 +1,6 @@ from random import choice +import module.config.server as server from module.base.timer import Timer from module.combat.assets import GET_ITEMS_1 from module.exception import GameStuckError, ScriptError @@ -9,8 +10,12 @@ from module.retire.assets import * from module.retire.dock import CARD_GRIDS, Dock VALID_SHIP_TYPES = ['dd', 'ss', 'cl', 'ca', 'bb', 'cv', 'repair', 'others'] -OCR_DOCK_AMOUNT = DigitCounter( - DOCK_AMOUNT, letter=(255, 255, 255), threshold=192) +if server.server != 'jp': + OCR_DOCK_AMOUNT = DigitCounter( + DOCK_AMOUNT, letter=(255, 255, 255), threshold=192) +else: + OCR_DOCK_AMOUNT = DigitCounter( + DOCK_AMOUNT, letter=(201, 201, 201), threshold=192) class Enhancement(Dock): @@ -220,9 +225,12 @@ class Enhancement(Dock): if state == "state_enhance_check": # Avoid too_many_click exception caused by multiple tries without material if state_list[-2:] == ["state_enhance_recommend", "state_enhance_fail"]: - if len(self.device.click_record): - while self.device.click_record[-1] in ['ENHANCE_RECOMMEND', 'EQUIP_SWIPE']: - self.device.click_record.pop() + while self.device.click_record and (self.device.click_record[-1] in ['ENHANCE_RECOMMEND', 'SHIP_SWIPE']): + self.device.click_record.pop() + # Avoid too_many_click exception caused by enhancement failure on in-battle ships + elif state_list[-3:] == ["state_enhance_attempt", "state_enhance_confirm", "state_enhance_fail"]: + while self.device.click_record and (self.device.click_record[-1] in ['ENHANCE_RECOMMEND', 'SHIP_SWIPE', 'ENHANCE_CONFIRM']): + self.device.click_record.pop() state_list.clear() state_list.append(state) if len(state_list) > 30: diff --git a/module/retire/retirement.py b/module/retire/retirement.py index 49bdb2e83..054e7a0b7 100644 --- a/module/retire/retirement.py +++ b/module/retire/retirement.py @@ -338,7 +338,7 @@ class Retirement(Enhancement, QuickRetireSettingHandler): break else: # Try to keep the one with the lowest level - ships.sort(key=lambda ship: -ship.level) + ships.sort(key=lambda s: -s.level) ships = ships[:-1] for ship in ships[:10]: @@ -472,8 +472,7 @@ class Retirement(Enhancement, QuickRetireSettingHandler): button (Button): Ship button to select skip_first_screenshot: """ - - retire_coin_timer = Timer(2) + count = 0 RETIRE_COIN.load_color(self.device.image) while 1: @@ -481,14 +480,19 @@ class Retirement(Enhancement, QuickRetireSettingHandler): skip_first_screenshot = False else: self.device.screenshot() + + # End + if not self.appear(RETIRE_COIN, threshold=0.97): + return True + if count > 3: + logger.warning('_retire_select_one failed after 3 trial') + return False + if self.appear(SHIP_CONFIRM_2, offset=(30, 30), interval=3): self.device.click(button) + count += 1 continue - if retire_coin_timer.reached() and not self.appear(RETIRE_COIN, threshold=0.97): - return True - return False - def retirement_get_common_rarity_cv_in_page(self): """ Returns: @@ -535,11 +539,11 @@ class Retirement(Enhancement, QuickRetireSettingHandler): if RETIRE_CONFIRM_SCROLL.at_bottom(main=self): logger.info('Scroll bar reached end, stop') break - + return button def keep_one_common_cv(self): button = self.retirement_get_common_rarity_cv() if button is not None: - self._retire_select_one(button, skip_first_screenshot=False) + self._retire_select_one(button) self._have_kept_cv = True diff --git a/module/retire/scanner.py b/module/retire/scanner.py index b8554497a..bac2e4ac9 100644 --- a/module/retire/scanner.py +++ b/module/retire/scanner.py @@ -5,8 +5,9 @@ from typing import Any, Dict, List, Tuple, Union import cv2 import numpy as np +import module.config.server as server from module.base.button import ButtonGrid -from module.base.utils import color_similar, crop, get_color, limit_in +from module.base.utils import color_similar, crop, extract_letters, get_color, limit_in, save_image from module.combat.level import LevelOcr from module.logger import logger from module.ocr.ocr import Digit @@ -20,6 +21,15 @@ from module.retire.dock import (CARD_EMOTION_GRIDS, CARD_GRIDS, class EmotionDigit(Digit): + def pre_process(self, image): + if server.server == 'jp': + image_gray = extract_letters(image, letter=(255, 255, 255), threshold=self.threshold) + right_side = np.nonzero(image_gray[0:16, :].min(axis=0) > 176)[-1] + image = image[:, :right_side[-1]] + + image = super().pre_process(image) + return image + def after_process(self, result): # Random OCR error on Downes' hair # OCR DOCK_EMOTION_OCR: Result "044" is revised to "44" @@ -132,8 +142,14 @@ class EmotionScanner(Scanner): super().__init__() self._results = [] self.grids = CARD_EMOTION_GRIDS - self.ocr_model = EmotionDigit(self.grids.buttons, + if server.server != 'jp': + self.ocr_model = EmotionDigit(self.grids.buttons, name='DOCK_EMOTION_OCR', threshold=176) + else: + self.ocr_model = EmotionDigit(self.grids.buttons, + name='DOCK_EMOTION_OCR', + letter=(201, 201, 201), + threshold=176) def _scan(self, image) -> List: return self.ocr_model.ocr(image) diff --git a/module/storage/assets.py b/module/storage/assets.py index 701727fef..c8c630cd4 100644 --- a/module/storage/assets.py +++ b/module/storage/assets.py @@ -4,7 +4,7 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -BOX_USE = Button(area={'cn': (768, 486, 834, 522), 'en': (784, 497, 843, 523), 'jp': (823, 485, 919, 520), 'tw': (768, 486, 834, 522)}, color={'cn': (141, 173, 212), 'en': (156, 184, 220), 'jp': (141, 177, 223), 'tw': (141, 173, 212)}, button={'cn': (756, 480, 916, 528), 'en': (750, 483, 919, 535), 'jp': (757, 475, 919, 533), 'tw': (756, 480, 916, 528)}, file={'cn': './assets/cn/storage/BOX_USE.png', 'en': './assets/en/storage/BOX_USE.png', 'jp': './assets/jp/storage/BOX_USE.png', 'tw': './assets/cn/storage/BOX_USE.png'}) +BOX_USE = Button(area={'cn': (768, 486, 834, 522), 'en': (784, 497, 843, 523), 'jp': (827, 491, 918, 528), 'tw': (768, 486, 834, 522)}, color={'cn': (141, 173, 212), 'en': (156, 184, 220), 'jp': (128, 168, 219), 'tw': (141, 173, 212)}, button={'cn': (756, 480, 916, 528), 'en': (750, 483, 919, 535), 'jp': (755, 483, 919, 537), 'tw': (756, 480, 916, 528)}, file={'cn': './assets/cn/storage/BOX_USE.png', 'en': './assets/en/storage/BOX_USE.png', 'jp': './assets/jp/storage/BOX_USE.png', 'tw': './assets/cn/storage/BOX_USE.png'}) DISASSEMBLE = Button(area={'cn': (357, 666, 456, 690), 'en': (346, 668, 467, 684), 'jp': (357, 663, 456, 691), 'tw': (357, 666, 456, 690)}, color={'cn': (191, 192, 192), 'en': (193, 193, 194), 'jp': (169, 170, 170), 'tw': (191, 192, 192)}, button={'cn': (348, 661, 466, 696), 'en': (346, 659, 467, 698), 'jp': (349, 657, 468, 700), 'tw': (348, 661, 466, 696)}, file={'cn': './assets/cn/storage/DISASSEMBLE.png', 'en': './assets/en/storage/DISASSEMBLE.png', 'jp': './assets/jp/storage/DISASSEMBLE.png', 'tw': './assets/cn/storage/DISASSEMBLE.png'}) DISASSEMBLE_CANCEL = Button(area={'cn': (900, 659, 973, 690), 'en': (881, 659, 993, 684), 'jp': (899, 658, 971, 691), 'tw': (900, 659, 973, 690)}, color={'cn': (186, 186, 187), 'en': (192, 192, 193), 'jp': (167, 167, 168), 'tw': (186, 186, 187)}, button={'cn': (863, 649, 1015, 700), 'en': (854, 649, 1021, 699), 'jp': (860, 647, 1021, 704), 'tw': (863, 649, 1015, 700)}, file={'cn': './assets/cn/storage/DISASSEMBLE_CANCEL.png', 'en': './assets/en/storage/DISASSEMBLE_CANCEL.png', 'jp': './assets/jp/storage/DISASSEMBLE_CANCEL.png', 'tw': './assets/cn/storage/DISASSEMBLE_CANCEL.png'}) DISASSEMBLE_CONFIRM = Button(area={'cn': (1108, 657, 1183, 690), 'en': (1063, 658, 1230, 681), 'jp': (1108, 657, 1185, 691), 'tw': (1108, 657, 1183, 690)}, color={'cn': (202, 149, 143), 'en': (204, 152, 145), 'jp': (198, 134, 126), 'tw': (202, 149, 143)}, button={'cn': (1067, 650, 1225, 698), 'en': (1063, 651, 1230, 697), 'jp': (1070, 645, 1230, 704), 'tw': (1067, 650, 1225, 698)}, file={'cn': './assets/cn/storage/DISASSEMBLE_CONFIRM.png', 'en': './assets/en/storage/DISASSEMBLE_CONFIRM.png', 'jp': './assets/jp/storage/DISASSEMBLE_CONFIRM.png', 'tw': './assets/cn/storage/DISASSEMBLE_CONFIRM.png'}) @@ -15,7 +15,7 @@ EQUIPMENT_ENTER = Button(area={'cn': (1021, 667, 1077, 691), 'en': (1020, 669, 1 EQUIPMENT_FILTER = Button(area={'cn': (805, 23, 841, 38), 'en': (746, 23, 781, 36), 'jp': (792, 22, 854, 38), 'tw': (805, 23, 841, 38)}, color={'cn': (155, 171, 210), 'en': (142, 160, 201), 'jp': (96, 112, 160), 'tw': (155, 171, 210)}, button={'cn': (794, 7, 883, 45), 'en': (742, 13, 819, 36), 'jp': (791, 7, 885, 46), 'tw': (794, 7, 883, 45)}, file={'cn': './assets/cn/storage/EQUIPMENT_FILTER.png', 'en': './assets/en/storage/EQUIPMENT_FILTER.png', 'jp': './assets/jp/storage/EQUIPMENT_FILTER.png', 'tw': './assets/cn/storage/EQUIPMENT_FILTER.png'}) EQUIPMENT_FILTER_CONFIRM = Button(area={'cn': (763, 615, 837, 646), 'en': (734, 620, 865, 643), 'jp': (761, 613, 838, 648), 'tw': (763, 615, 837, 646)}, color={'cn': (140, 172, 211), 'en': (156, 183, 217), 'jp': (120, 157, 203), 'tw': (140, 172, 211)}, button={'cn': (721, 605, 881, 657), 'en': (727, 608, 872, 653), 'jp': (721, 602, 885, 660), 'tw': (721, 605, 881, 657)}, file={'cn': './assets/cn/storage/EQUIPMENT_FILTER_CONFIRM.png', 'en': './assets/en/storage/EQUIPMENT_FILTER_CONFIRM.png', 'jp': './assets/jp/storage/EQUIPMENT_FILTER_CONFIRM.png', 'tw': './assets/cn/storage/EQUIPMENT_FILTER_CONFIRM.png'}) EQUIPMENT_FULL = Button(area={'cn': (453, 498, 527, 528), 'en': (460, 499, 521, 520), 'jp': (450, 496, 529, 529), 'tw': (453, 498, 527, 528)}, color={'cn': (154, 183, 221), 'en': (168, 194, 226), 'jp': (134, 170, 216), 'tw': (154, 183, 221)}, button={'cn': (413, 487, 569, 538), 'en': (421, 489, 566, 534), 'jp': (410, 482, 574, 540), 'tw': (413, 487, 569, 538)}, file={'cn': './assets/cn/storage/EQUIPMENT_FULL.png', 'en': './assets/en/storage/EQUIPMENT_FULL.png', 'jp': './assets/jp/storage/EQUIPMENT_FULL.png', 'tw': './assets/cn/storage/EQUIPMENT_FULL.png'}) -MATERIAL_CHECK = Button(area={'cn': (258, 664, 305, 687), 'en': (1123, 658, 1156, 691), 'jp': (90, 664, 137, 689), 'tw': (258, 664, 305, 687)}, color={'cn': (106, 106, 111), 'en': (195, 161, 99), 'jp': (117, 116, 122), 'tw': (106, 106, 111)}, button={'cn': (258, 664, 305, 687), 'en': (1123, 658, 1156, 691), 'jp': (90, 664, 137, 689), 'tw': (258, 664, 305, 687)}, file={'cn': './assets/cn/storage/MATERIAL_CHECK.png', 'en': './assets/en/storage/MATERIAL_CHECK.png', 'jp': './assets/jp/storage/MATERIAL_CHECK.png', 'tw': './assets/cn/storage/MATERIAL_CHECK.png'}) +MATERIAL_CHECK = Button(area={'cn': (258, 664, 305, 687), 'en': (1123, 658, 1156, 691), 'jp': (89, 662, 138, 690), 'tw': (258, 664, 305, 687)}, color={'cn': (106, 106, 111), 'en': (195, 161, 99), 'jp': (94, 93, 99), 'tw': (106, 106, 111)}, button={'cn': (258, 664, 305, 687), 'en': (1123, 658, 1156, 691), 'jp': (89, 662, 138, 690), 'tw': (258, 664, 305, 687)}, file={'cn': './assets/cn/storage/MATERIAL_CHECK.png', 'en': './assets/en/storage/MATERIAL_CHECK.png', 'jp': './assets/jp/storage/MATERIAL_CHECK.png', 'tw': './assets/cn/storage/MATERIAL_CHECK.png'}) MATERIAL_ENTER = Button(area={'cn': (1180, 666, 1237, 691), 'en': (1184, 669, 1227, 685), 'jp': (1178, 666, 1238, 692), 'tw': (1180, 666, 1237, 691)}, color={'cn': (217, 179, 119), 'en': (202, 163, 103), 'jp': (217, 176, 116), 'tw': (217, 179, 119)}, button={'cn': (1114, 656, 1251, 698), 'en': (1121, 663, 1243, 685), 'jp': (1107, 652, 1256, 702), 'tw': (1114, 656, 1251, 698)}, file={'cn': './assets/cn/storage/MATERIAL_ENTER.png', 'en': './assets/en/storage/MATERIAL_ENTER.png', 'jp': './assets/jp/storage/MATERIAL_ENTER.png', 'tw': './assets/cn/storage/MATERIAL_ENTER.png'}) MATERIAL_STABLE_CHECK = Button(area={'cn': (858, 422, 1231, 631), 'en': (858, 422, 1231, 631), 'jp': (858, 422, 1231, 631), 'tw': (858, 422, 1231, 631)}, color={'cn': (116, 127, 145), 'en': (116, 127, 145), 'jp': (116, 127, 145), 'tw': (116, 127, 145)}, button={'cn': (858, 422, 1231, 631), 'en': (858, 422, 1231, 631), 'jp': (858, 422, 1231, 631), 'tw': (858, 422, 1231, 631)}, file={'cn': './assets/cn/storage/MATERIAL_STABLE_CHECK.png', 'en': './assets/en/storage/MATERIAL_STABLE_CHECK.png', 'jp': './assets/jp/storage/MATERIAL_STABLE_CHECK.png', 'tw': './assets/tw/storage/MATERIAL_STABLE_CHECK.png'}) METERIAL_SCROLL = Button(area={'cn': (1257, 94, 1263, 585), 'en': (1257, 94, 1263, 585), 'jp': (1257, 94, 1263, 585), 'tw': (1257, 94, 1263, 585)}, color={'cn': (101, 93, 56), 'en': (101, 93, 56), 'jp': (101, 93, 56), 'tw': (101, 93, 56)}, button={'cn': (1257, 94, 1263, 585), 'en': (1257, 94, 1263, 585), 'jp': (1257, 94, 1263, 585), 'tw': (1257, 94, 1263, 585)}, file={'cn': './assets/cn/storage/METERIAL_SCROLL.png', 'en': './assets/en/storage/METERIAL_SCROLL.png', 'jp': './assets/jp/storage/METERIAL_SCROLL.png', 'tw': './assets/tw/storage/METERIAL_SCROLL.png'}) diff --git a/module/tactical/assets.py b/module/tactical/assets.py index 5f0529423..9792fdf09 100644 --- a/module/tactical/assets.py +++ b/module/tactical/assets.py @@ -6,7 +6,7 @@ from module.base.template import Template ADD_NEW_STUDENT = Button(area={'cn': (417, 375, 438, 398), 'en': (417, 375, 438, 398), 'jp': (410, 371, 440, 402), 'tw': (417, 375, 438, 398)}, color={'cn': (81, 91, 106), 'en': (81, 91, 106), 'jp': (75, 84, 100), 'tw': (81, 91, 106)}, button={'cn': (417, 375, 438, 398), 'en': (417, 375, 438, 398), 'jp': (410, 371, 440, 402), 'tw': (417, 375, 438, 398)}, file={'cn': './assets/cn/tactical/ADD_NEW_STUDENT.png', 'en': './assets/en/tactical/ADD_NEW_STUDENT.png', 'jp': './assets/jp/tactical/ADD_NEW_STUDENT.png', 'tw': './assets/cn/tactical/ADD_NEW_STUDENT.png'}) BOOK_EMPTY_POPUP = Button(area={'cn': (880, 180, 908, 209), 'en': (880, 180, 908, 209), 'jp': (880, 180, 908, 209), 'tw': (880, 180, 908, 209)}, color={'cn': (211, 109, 105), 'en': (211, 109, 105), 'jp': (211, 109, 105), 'tw': (211, 109, 105)}, button={'cn': (880, 180, 908, 209), 'en': (880, 180, 908, 209), 'jp': (880, 180, 908, 209), 'tw': (880, 180, 908, 209)}, file={'cn': './assets/cn/tactical/BOOK_EMPTY_POPUP.png', 'en': './assets/en/tactical/BOOK_EMPTY_POPUP.png', 'jp': './assets/jp/tactical/BOOK_EMPTY_POPUP.png', 'tw': './assets/tw/tactical/BOOK_EMPTY_POPUP.png'}) -OCR_SKILL_EXP = Button(area={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (771, 191, 951, 209), 'tw': (771, 191, 951, 209)}, color={'cn': (72, 82, 83), 'en': (72, 82, 83), 'jp': (72, 82, 83), 'tw': (72, 82, 83)}, button={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (771, 191, 951, 209), 'tw': (771, 191, 951, 209)}, file={'cn': './assets/cn/tactical/OCR_SKILL_EXP.png', 'en': './assets/en/tactical/OCR_SKILL_EXP.png', 'jp': './assets/jp/tactical/OCR_SKILL_EXP.png', 'tw': './assets/tw/tactical/OCR_SKILL_EXP.png'}) +OCR_SKILL_EXP = Button(area={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (728, 189, 950, 211), 'tw': (771, 191, 951, 209)}, color={'cn': (72, 82, 83), 'en': (72, 82, 83), 'jp': (69, 78, 82), 'tw': (72, 82, 83)}, button={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (728, 189, 950, 211), 'tw': (771, 191, 951, 209)}, file={'cn': './assets/cn/tactical/OCR_SKILL_EXP.png', 'en': './assets/en/tactical/OCR_SKILL_EXP.png', 'jp': './assets/jp/tactical/OCR_SKILL_EXP.png', 'tw': './assets/tw/tactical/OCR_SKILL_EXP.png'}) RAPID_TRAINING = Button(area={'cn': (518, 566, 583, 582), 'en': (518, 568, 585, 580), 'jp': (518, 566, 584, 583), 'tw': (518, 566, 583, 582)}, color={'cn': (233, 212, 171), 'en': (229, 205, 156), 'jp': (232, 209, 165), 'tw': (233, 212, 171)}, button={'cn': (518, 566, 583, 582), 'en': (518, 568, 585, 580), 'jp': (518, 566, 584, 583), 'tw': (518, 566, 583, 582)}, file={'cn': './assets/cn/tactical/RAPID_TRAINING.png', 'en': './assets/en/tactical/RAPID_TRAINING.png', 'jp': './assets/jp/tactical/RAPID_TRAINING.png', 'tw': './assets/cn/tactical/RAPID_TRAINING.png'}) REWARD_2 = Button(area={'cn': (418, 413, 468, 434), 'en': (403, 416, 504, 432), 'jp': (432, 415, 476, 436), 'tw': (418, 413, 468, 434)}, color={'cn': (240, 191, 120), 'en': (240, 201, 145), 'jp': (240, 191, 121), 'tw': (240, 191, 120)}, button={'cn': (383, 404, 503, 444), 'en': (392, 404, 515, 445), 'jp': (383, 404, 503, 444), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/tactical/REWARD_2.png', 'en': './assets/en/tactical/REWARD_2.png', 'jp': './assets/jp/tactical/REWARD_2.png', 'tw': './assets/tw/tactical/REWARD_2.png'}) SKILL_CONFIRM = Button(area={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (577, 563, 704, 593)}, color={'cn': (147, 177, 216), 'en': (167, 191, 223), 'jp': (136, 170, 213), 'tw': (161, 187, 220)}, button={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (577, 563, 704, 593)}, file={'cn': './assets/cn/tactical/SKILL_CONFIRM.png', 'en': './assets/en/tactical/SKILL_CONFIRM.png', 'jp': './assets/jp/tactical/SKILL_CONFIRM.png', 'tw': './assets/tw/tactical/SKILL_CONFIRM.png'}) diff --git a/module/tactical/tactical_class.py b/module/tactical/tactical_class.py index 015fbf28b..f7a7149f5 100644 --- a/module/tactical/tactical_class.py +++ b/module/tactical/tactical_class.py @@ -20,7 +20,10 @@ from module.ui.page import page_reward from module.ui_white.assets import REWARD_2_WHITE, REWARD_GOTO_TACTICAL_WHITE SKILL_GRIDS = ButtonGrid(origin=(315, 140), delta=(621, 132), button_shape=(621, 119), grid_shape=(1, 3), name='SKILL') -SKILL_LEVEL_GRIDS = SKILL_GRIDS.crop(area=(406, 98, 618, 116), name='EXP') +if server.server != 'jp': + SKILL_LEVEL_GRIDS = SKILL_GRIDS.crop(area=(406, 98, 618, 116), name='EXP') +else: + SKILL_LEVEL_GRIDS = SKILL_GRIDS.crop(area=(406, 98, 621, 118), name='EXP') class ExpOnBookSelect(DigitCounter): @@ -49,6 +52,9 @@ class ExpOnBookSelect(DigitCounter): if server.server == 'en': # Bold `Next:` image = image_left_strip(image, threshold=105, length=46) + elif server.server == 'jp': + # Wide `Next:` + image = image_left_strip(image, threshold=105, length=55) else: image = image_left_strip(image, threshold=105, length=42) return image @@ -81,6 +87,9 @@ class ExpOnSkillSelect(Ocr): if server.server == 'en': # Bold `Next:` image = image_left_strip(image, threshold=105, length=46) + elif server.server == 'jp': + # Wide `Next:` + image = image_left_strip(image, threshold=105, length=53) else: image = image_left_strip(image, threshold=105, length=42) return image diff --git a/module/ui/assets.py b/module/ui/assets.py index 6f244ee79..e9a18d95e 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -8,7 +8,7 @@ ACADEMY_CHECK = Button(area={'cn': (121, 14, 175, 39), 'en': (122, 19, 258, 35), ACADEMY_GOTO_GAME_ROOM = Button(area={'cn': (1074, 340, 1103, 374), 'en': (1074, 340, 1103, 374), 'jp': (1074, 340, 1103, 374), 'tw': (1074, 340, 1103, 374)}, color={'cn': (208, 185, 150), 'en': (208, 185, 150), 'jp': (208, 185, 150), 'tw': (208, 185, 150)}, button={'cn': (1074, 340, 1103, 374), 'en': (1074, 340, 1103, 374), 'jp': (1074, 340, 1103, 374), 'tw': (1074, 340, 1103, 374)}, file={'cn': './assets/cn/ui/ACADEMY_GOTO_GAME_ROOM.png', 'en': './assets/en/ui/ACADEMY_GOTO_GAME_ROOM.png', 'jp': './assets/jp/ui/ACADEMY_GOTO_GAME_ROOM.png', 'tw': './assets/tw/ui/ACADEMY_GOTO_GAME_ROOM.png'}) ACADEMY_GOTO_MUNITIONS = Button(area={'cn': (1046, 188, 1137, 210), 'en': (1039, 185, 1145, 209), 'jp': (1057, 188, 1126, 210), 'tw': (1044, 184, 1139, 213)}, color={'cn': (133, 135, 165), 'en': (115, 120, 153), 'jp': (129, 133, 162), 'tw': (113, 119, 149)}, button={'cn': (1046, 188, 1137, 210), 'en': (1039, 185, 1145, 209), 'jp': (1057, 188, 1126, 210), 'tw': (1044, 184, 1139, 213)}, file={'cn': './assets/cn/ui/ACADEMY_GOTO_MUNITIONS.png', 'en': './assets/en/ui/ACADEMY_GOTO_MUNITIONS.png', 'jp': './assets/jp/ui/ACADEMY_GOTO_MUNITIONS.png', 'tw': './assets/tw/ui/ACADEMY_GOTO_MUNITIONS.png'}) BACK_ARROW = Button(area={'cn': (33, 44, 47, 64), 'en': (33, 44, 47, 64), 'jp': (33, 44, 47, 64), 'tw': (33, 44, 47, 64)}, color={'cn': (112, 118, 152), 'en': (112, 118, 152), 'jp': (112, 118, 152), 'tw': (112, 118, 152)}, button={'cn': (33, 31, 81, 78), 'en': (33, 31, 81, 78), 'jp': (33, 31, 81, 78), 'tw': (33, 31, 81, 78)}, file={'cn': './assets/cn/ui/BACK_ARROW.png', 'en': './assets/en/ui/BACK_ARROW.png', 'jp': './assets/jp/ui/BACK_ARROW.png', 'tw': './assets/tw/ui/BACK_ARROW.png'}) -BATTLE_PASS_CHECK = Button(area={'cn': (130, 20, 240, 44), 'en': (133, 27, 238, 36), 'jp': (112, 18, 279, 42), 'tw': (130, 18, 241, 45)}, color={'cn': (182, 175, 165), 'en': (96, 88, 76), 'jp': (128, 123, 114), 'tw': (174, 166, 156)}, button={'cn': (130, 20, 240, 44), 'en': (133, 27, 238, 36), 'jp': (112, 18, 279, 42), 'tw': (130, 18, 241, 45)}, file={'cn': './assets/cn/ui/BATTLE_PASS_CHECK.png', 'en': './assets/en/ui/BATTLE_PASS_CHECK.png', 'jp': './assets/jp/ui/BATTLE_PASS_CHECK.png', 'tw': './assets/tw/ui/BATTLE_PASS_CHECK.png'}) +BATTLE_PASS_CHECK = Button(area={'cn': (701, 674, 723, 699), 'en': (701, 674, 723, 699), 'jp': (701, 674, 723, 699), 'tw': (130, 18, 241, 45)}, color={'cn': (129, 130, 134), 'en': (129, 130, 134), 'jp': (129, 130, 134), 'tw': (174, 166, 156)}, button={'cn': (701, 674, 723, 699), 'en': (701, 674, 723, 699), 'jp': (701, 674, 723, 699), 'tw': (130, 18, 241, 45)}, file={'cn': './assets/cn/ui/BATTLE_PASS_CHECK.png', 'en': './assets/en/ui/BATTLE_PASS_CHECK.png', 'jp': './assets/jp/ui/BATTLE_PASS_CHECK.png', 'tw': './assets/tw/ui/BATTLE_PASS_CHECK.png'}) BUILD_CHECK = Button(area={'cn': (121, 15, 175, 40), 'en': (121, 17, 191, 39), 'jp': (121, 15, 175, 40), 'tw': (116, 11, 179, 41)}, color={'cn': (163, 179, 215), 'en': (129, 144, 185), 'jp': (166, 180, 215), 'tw': (128, 142, 179)}, button={'cn': (121, 15, 175, 40), 'en': (121, 17, 191, 39), 'jp': (121, 15, 175, 40), 'tw': (116, 11, 179, 41)}, file={'cn': './assets/cn/ui/BUILD_CHECK.png', 'en': './assets/en/ui/BUILD_CHECK.png', 'jp': './assets/jp/ui/BUILD_CHECK.png', 'tw': './assets/tw/ui/BUILD_CHECK.png'}) CAMPAIGN_CHECK = Button(area={'cn': (173, 78, 194, 98), 'en': (136, 79, 183, 91), 'jp': (172, 77, 192, 98), 'tw': (173, 78, 194, 98)}, color={'cn': (165, 182, 221), 'en': (109, 126, 172), 'jp': (163, 181, 220), 'tw': (165, 182, 221)}, button={'cn': (173, 78, 194, 98), 'en': (136, 79, 183, 91), 'jp': (172, 77, 192, 98), 'tw': (173, 78, 194, 98)}, file={'cn': './assets/cn/ui/CAMPAIGN_CHECK.png', 'en': './assets/en/ui/CAMPAIGN_CHECK.gif', 'jp': './assets/jp/ui/CAMPAIGN_CHECK.png', 'tw': './assets/tw/ui/CAMPAIGN_CHECK.png'}) CAMPAIGN_GOTO_DAILY = Button(area={'cn': (804, 648, 892, 703), 'en': (807, 648, 891, 703), 'jp': (791, 647, 893, 703), 'tw': (804, 648, 892, 703)}, color={'cn': (189, 145, 78), 'en': (165, 123, 54), 'jp': (176, 141, 73), 'tw': (189, 145, 78)}, button={'cn': (804, 648, 892, 703), 'en': (807, 648, 891, 703), 'jp': (791, 647, 893, 703), 'tw': (804, 648, 892, 703)}, file={'cn': './assets/cn/ui/CAMPAIGN_GOTO_DAILY.png', 'en': './assets/en/ui/CAMPAIGN_GOTO_DAILY.png', 'jp': './assets/jp/ui/CAMPAIGN_GOTO_DAILY.png', 'tw': './assets/tw/ui/CAMPAIGN_GOTO_DAILY.png'}) diff --git a/module/ui/ui.py b/module/ui/ui.py index 6f8034912..be5079821 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -419,7 +419,7 @@ class UI(InfoHandler): return True if self.appear_then_click(LOGIN_RETURN_SIGN, offset=(30, 30), interval=3): return True - if self.appear(EVENT_LIST_CHECK, offset=(30, 30), interval=3): + if self.appear(EVENT_LIST_CHECK, offset=(30, 30), interval=5): logger.info(f'UI additional: {EVENT_LIST_CHECK} -> {GOTO_MAIN}') if self.appear_then_click(GOTO_MAIN, offset=(30, 30)): return True @@ -438,11 +438,11 @@ class UI(InfoHandler): if self.handle_popup_single_white(): return True # Routed from confirm click - if self.appear(SHIPYARD_CHECK, offset=(30, 30), interval=3): + if self.appear(SHIPYARD_CHECK, offset=(30, 30), interval=5): logger.info(f'UI additional: {SHIPYARD_CHECK} -> {GOTO_MAIN}') if self.appear_then_click(GOTO_MAIN, offset=(30, 30)): return True - if self.appear(META_CHECK, offset=(30, 30), interval=3): + if self.appear(META_CHECK, offset=(30, 30), interval=5): logger.info(f'UI additional: {META_CHECK} -> {GOTO_MAIN}') if self.appear_then_click(GOTO_MAIN, offset=(30, 30)): return True @@ -609,6 +609,8 @@ class UI(InfoHandler): for switch_button in page_main.links.values(): if button == switch_button: self.interval_reset(GET_SHIP) + if button in [MAIN_GOTO_REWARD, MAIN_GOTO_REWARD_WHITE]: + self.interval_reset(GET_SHIP) if button in [MAIN_GOTO_CAMPAIGN, MAIN_GOTO_CAMPAIGN_WHITE]: self.interval_reset(GET_SHIP) # Shinano event has the same title as raid diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index e55421fa1..7ddba0dc4 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -10,6 +10,7 @@ TEMPLATE_AURORA_NOCTIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'en': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'jp': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'tw': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png'}) TEMPLATE_CRESCENDO_OF_POLARIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'en': './assets/en/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'jp': './assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png'}) TEMPLATE_CRIMSON_ECHOES = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'en': './assets/en/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'jp': './assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'tw': './assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png'}) +TEMPLATE_DAEDALIAN_HYMN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png', 'en': './assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png', 'jp': './assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png', 'tw': './assets/cn/war_archives/TEMPLATE_DAEDALIAN_HYMN.png'}) TEMPLATE_DIVERGENT_CHESSBOARD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'en': './assets/en/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'jp': './assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'tw': './assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png'}) TEMPLATE_DREAMWAKERS_BUTTERFLY = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png', 'en': './assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png', 'jp': './assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png', 'tw': './assets/cn/war_archives/TEMPLATE_DREAMWAKERS_BUTTERFLY.png'}) TEMPLATE_EMPYREAL_TRAGICOMEDY = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png', 'en': './assets/en/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png', 'jp': './assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png', 'tw': './assets/cn/war_archives/TEMPLATE_EMPYREAL_TRAGICOMEDY.png'}) @@ -28,11 +29,15 @@ TEMPLATE_SCHERZO_OF_IRON_AND_BLOOD = Template(file={'cn': './assets/cn/war_archi TEMPLATE_SKYBOUND_ORATORIO = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png', 'en': './assets/en/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png', 'jp': './assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png', 'tw': './assets/cn/war_archives/TEMPLATE_SKYBOUND_ORATORIO.png'}) TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png', 'en': './assets/en/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png', 'jp': './assets/cn/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png', 'tw': './assets/tw/war_archives/TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD.png'}) TEMPLATE_STRIVE_WISH_AND_STRATEGIZE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png', 'en': './assets/en/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png', 'jp': './assets/jp/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png', 'tw': './assets/tw/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png'}) +TEMPLATE_SUNDERED_BLUE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png', 'en': './assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png', 'jp': './assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png', 'tw': './assets/cn/war_archives/TEMPLATE_SUNDERED_BLUE.png'}) TEMPLATE_SWIRLING_CHERRY_BLOSSOMS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'en': './assets/en/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'jp': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'tw': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png'}) TEMPLATE_THE_ENIGMA_AND_THE_SHARK = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'en': './assets/en/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png'}) +TEMPLATE_THE_FLAME_TOUCHED_DAGGER = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png', 'en': './assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_FLAME_TOUCHED_DAGGER.png'}) TEMPLATE_THE_SOLOMON_RANGER = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'en': './assets/en/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png'}) TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png', 'en': './assets/en/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png'}) +TEMPLATE_TOWER_OF_TRANSCENDENCE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'en': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'jp': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'tw': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png'}) TEMPLATE_UNIVERSE_IN_UNISON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'en': './assets/en/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'jp': './assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'tw': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png'}) +TEMPLATE_UPON_THE_SHIMMERING_BLUE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'en': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'jp': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'tw': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png'}) TEMPLATE_VISITORS_DYED_IN_RED = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'en': './assets/en/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'jp': './assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'tw': './assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png'}) TEMPLATE_WINTERS_CROWN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png', 'en': './assets/en/war_archives/TEMPLATE_WINTERS_CROWN.png', 'jp': './assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png', 'tw': './assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png'}) WAR_ARCHIVES_CAMPAIGN_CHECK = Button(area={'cn': (1150, 101, 1166, 130), 'en': (1150, 101, 1166, 130), 'jp': (1150, 101, 1166, 130), 'tw': (1150, 101, 1166, 130)}, color={'cn': (134, 175, 207), 'en': (134, 175, 207), 'jp': (134, 175, 207), 'tw': (134, 175, 207)}, button={'cn': (1150, 101, 1166, 130), 'en': (1150, 101, 1166, 130), 'jp': (1150, 101, 1166, 130), 'tw': (1150, 101, 1166, 130)}, file={'cn': './assets/cn/war_archives/WAR_ARCHIVES_CAMPAIGN_CHECK.png', 'en': './assets/en/war_archives/WAR_ARCHIVES_CAMPAIGN_CHECK.png', 'jp': './assets/jp/war_archives/WAR_ARCHIVES_CAMPAIGN_CHECK.png', 'tw': './assets/tw/war_archives/WAR_ARCHIVES_CAMPAIGN_CHECK.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index b232fa86f..4ef64bf31 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -31,4 +31,9 @@ dic_archives_template = { 'war_archives_20190314_en': TEMPLATE_PRELUDE_UNDER_THE_MOON, 'war_archives_20200312_cn': TEMPLATE_THE_SOLOMON_RANGER, 'war_archives_20200507_cn': TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT, + 'war_archives_20201012_cn': TEMPLATE_SUNDERED_BLUE, + 'war_archives_20211111_cn': TEMPLATE_THE_FLAME_TOUCHED_DAGGER, + 'war_archives_20210916_cn': TEMPLATE_UPON_THE_SHIMMERING_BLUE, + 'war_archives_20210422_cn': TEMPLATE_DAEDALIAN_HYMN, + 'war_archives_20211229_cn': TEMPLATE_TOWER_OF_TRANSCENDENCE, } diff --git a/module/war_archives/war_archives.py b/module/war_archives/war_archives.py index 40e2c9a46..d4943c1db 100644 --- a/module/war_archives/war_archives.py +++ b/module/war_archives/war_archives.py @@ -31,7 +31,5 @@ class CampaignWarArchives(CampaignRun, CampaignBase): return False def run(self, name=None, folder='campaign_main', mode='normal', total=0): - backup = self.config.temporary(USE_DATA_KEY=True) + self.config.override(USE_DATA_KEY=True) super().run(name, folder, mode, total) - backup.recover() - self.ui_goto_main() # Go to main, as remaining in page can throw off Event task diff --git a/submodule/AlasMaaBridge/module/handler/handler.py b/submodule/AlasMaaBridge/module/handler/handler.py index 28800e50f..59de4259b 100644 --- a/submodule/AlasMaaBridge/module/handler/handler.py +++ b/submodule/AlasMaaBridge/module/handler/handler.py @@ -131,8 +131,12 @@ class AssistantHandler: self.callback_list.remove(self.penguin_id_callback) def annihilation_callback(self, m, d): - if m == self.Message.SubTaskError: - self.signal = m + # Skip annihilation error task callback temporary + # https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/10623 + ignoreErrorKeywords = ["FightSeries-Indicator","FightSeries-Icon"] + if m == self.Message.SubTaskError \ + and deep_get(d, keys='first') != ignoreErrorKeywords: + self.signal = m def fight_stop_count_callback(self, m, d): if m == self.Message.SubTaskCompleted: