From 982697e18fa0325d37ee69c27c67084701ebda59 Mon Sep 17 00:00:00 2001 From: moon-dim <1186613358@qq.com> Date: Mon, 11 May 2026 21:55:41 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=81=93?= =?UTF-8?q?=E4=B8=AD=E6=88=98=E6=96=97=E5=A4=B1=E8=B4=A5=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BD=BF=E7=94=A8=E5=8F=A6=E4=B8=80=E9=98=9F=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E6=88=98=E6=96=97=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=B2=89?= =?UTF-8?q?=E8=88=B9=E6=97=B6=E5=BF=83=E6=83=85=E6=B6=88=E8=80=97=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/cn/map/FLEET_WITHDRAW.png | Bin 0 -> 8031 bytes config/template.json | 60 +++++++++++++------- module/campaign/campaign_base.py | 1 + module/combat/auto_search_combat.py | 38 ++++++++++--- module/combat/emotion.py | 15 ++++- module/config/argument/args.json | 80 +++++++++++++++++++++++++++ module/config/argument/argument.yaml | 1 + module/config/config_generated.py | 1 + module/config/i18n/en-US.json | 4 ++ module/config/i18n/ja-JP.json | 4 ++ module/config/i18n/zh-CN.json | 4 ++ module/config/i18n/zh-MIAO.json | 4 ++ module/config/i18n/zh-TW.json | 4 ++ module/map/assets.py | 1 + 14 files changed, 186 insertions(+), 31 deletions(-) create mode 100644 assets/cn/map/FLEET_WITHDRAW.png diff --git a/assets/cn/map/FLEET_WITHDRAW.png b/assets/cn/map/FLEET_WITHDRAW.png new file mode 100644 index 0000000000000000000000000000000000000000..a364d5d078a9d82a15796aea5f777748311393e9 GIT binary patch literal 8031 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 bm-??syt(CgT1yy8=Gfsw7Px!gpSk!?58KIf literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index 4af905b9b..f17bdd096 100644 --- a/config/template.json +++ b/config/template.json @@ -198,7 +198,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -276,7 +277,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -354,7 +356,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -447,7 +450,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -527,7 +531,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -607,7 +612,8 @@ "UseAutoSearch": false, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -686,7 +692,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -764,7 +771,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -842,7 +850,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -924,7 +933,8 @@ "UseAutoSearch": false, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -979,7 +989,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1084,7 +1095,8 @@ "UseAutoSearch": false, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "Coalition": { "Mode": "hard", @@ -1171,7 +1183,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1253,7 +1266,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1335,7 +1349,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1417,7 +1432,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1499,7 +1515,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1577,7 +1594,8 @@ "UseAutoSearch": true, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1658,7 +1676,8 @@ "UseAutoSearch": false, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "StopCondition": { "OilLimit": 1000, @@ -1706,7 +1725,8 @@ "UseAutoSearch": false, "Use2xBook": false, "AmbushEvade": true, - "UseRecommendFleet": false + "UseRecommendFleet": false, + "DefeatWithdraw": true }, "Coalition": { "Mode": "hard", diff --git a/module/campaign/campaign_base.py b/module/campaign/campaign_base.py index cd8a403a4..21a98f15b 100644 --- a/module/campaign/campaign_base.py +++ b/module/campaign/campaign_base.py @@ -133,6 +133,7 @@ class CampaignBase(CampaignUI, Map, AutoSearchCombat): else: self.map = self.MAP self.battle_count = 0 + self.fleet_alive_multiple = self.config.Fleet_Fleet2 != 0 self.lv_reset() self.lv_get() diff --git a/module/combat/auto_search_combat.py b/module/combat/auto_search_combat.py index 07afa9656..c92b64045 100644 --- a/module/combat/auto_search_combat.py +++ b/module/combat/auto_search_combat.py @@ -5,7 +5,7 @@ from module.combat.combat import Combat from module.exception import CampaignEnd from module.handler.assets import AUTO_SEARCH_MAP_OPTION_ON, GET_MISSION from module.logger import logger -from module.map.assets import WITHDRAW +from module.map.assets import WITHDRAW, SWITCH_OVER, FLEET_WITHDRAW from module.map.map_operation import MapOperation @@ -285,15 +285,23 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): if self.handle_get_ship(): continue if self.appear_then_click(OPTS_INFO_D, offset=(30, 30), interval=2): + if emotion_reduce: + self.emotion.reduce(fleet_index, shipwreck=True) self._withdraw = True - continue + break if confirm_timer.reached(): self._withdraw = True self.device.click(OPTS_INFO_D) + if emotion_reduce: + self.emotion.reduce(fleet_index, shipwreck=True) confirm_timer.reset() - continue - if self.appear(BATTLE_STATUS_S) or self.appear(BATTLE_STATUS_A) or self.appear(BATTLE_STATUS_B) \ - or self.appear(EXP_INFO_S) or self.appear(EXP_INFO_A) or self.appear(EXP_INFO_B) \ + break + if self.appear(BATTLE_STATUS_A) or self.appear(BATTLE_STATUS_B) \ + or self.appear(EXP_INFO_A) or self.appear(EXP_INFO_B): + if emotion_reduce: + self.emotion.reduce(fleet_index, shipwreck=True) + break + if self.appear(BATTLE_STATUS_S) or self.appear(EXP_INFO_S) \ or self.appear(GET_MISSION) or self.is_auto_search_running(): self.device.screenshot_interval_set() break @@ -325,10 +333,24 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): raise CampaignEnd # Withdraw - if self._withdraw and get_urgent_commission and self.appear(WITHDRAW, offset=(30, 30)): + if self._withdraw and self.appear(WITHDRAW, offset=(30, 30)): + logger.info(f'fleet_alive_multiple: {self.fleet_alive_multiple}') self._withdraw = False - self.withdraw() - break + if self.config.Campaign_DefeatWithdraw or not self.fleet_alive_multiple: + self.withdraw() + break + elif get_urgent_commission: + self.fleet_alive_multiple = False + continue + else: + while True: + self.device.screenshot() + if self.appear_then_click(FLEET_WITHDRAW, offset=(30, 30)): + break + if self.appear_then_click(SWITCH_OVER,interval=2): + continue + self.fleet_alive_multiple = False + continue # Combat status if self.handle_get_ship(): diff --git a/module/combat/emotion.py b/module/combat/emotion.py index d8ae5672e..d9de3dcb2 100644 --- a/module/combat/emotion.py +++ b/module/combat/emotion.py @@ -248,6 +248,10 @@ class Emotion: return 4 else: return 2 + + @property + def reduce_shipwreck(self): + return 10 def _check_reduce(self, battle): """ @@ -339,7 +343,7 @@ class Emotion: logger.attr('Wait until', recovered) sleep(60) - def reduce(self, fleet_index): + def reduce(self, fleet_index, shipwreck=False): """ Reduce emotion of specific fleet. Should be called after battle executing. @@ -347,6 +351,7 @@ class Emotion: Args: fleet_index (int): 1 or 2. + shipwreck (bool): Whether the fleet is at shipwreck. """ logger.hr('Emotion reduce') self.update() @@ -356,8 +361,12 @@ class Emotion: else: fleet = self.fleets[fleet_index - 1] - fleet.current -= self.reduce_per_battle - self.total_reduced += self.reduce_per_battle + if not shipwreck: + fleet.current -= self.reduce_per_battle + self.total_reduced += self.reduce_per_battle + else: + fleet.current -= self.reduce_shipwreck + self.total_reduced += self.reduce_shipwreck self.record() self.show() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 7238d22f8..60fc814b9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -878,6 +878,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -1274,6 +1278,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -1670,6 +1678,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -2198,6 +2210,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -2693,6 +2709,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -3153,6 +3173,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -3589,6 +3613,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -4024,6 +4052,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -4458,6 +4490,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -4896,6 +4932,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -5167,6 +5207,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -5727,6 +5771,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "Coalition": { @@ -6378,6 +6426,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -6825,6 +6877,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -7277,6 +7333,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -7729,6 +7789,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -8181,6 +8245,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -8623,6 +8691,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -9057,6 +9129,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "StopCondition": { @@ -9302,6 +9378,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": false + }, + "DefeatWithdraw": { + "type": "checkbox", + "value": true } }, "Coalition": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 119b2d9c1..409de01f5 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -292,6 +292,7 @@ Campaign: Use2xBook: false AmbushEvade: true UseRecommendFleet: false + DefeatWithdraw: true StopCondition: OilLimit: 1000 CoinLimit: 0 diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 18f74075d..5e54fb15e 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -178,6 +178,7 @@ class GeneratedConfig: Campaign_Use2xBook = False Campaign_AmbushEvade = True Campaign_UseRecommendFleet = False + Campaign_DefeatWithdraw = True # Group `StopCondition` StopCondition_OilLimit = 1000 diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 0643aa387..4e297d13f 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1046,6 +1046,10 @@ "UseRecommendFleet": { "name": "Auto Fleet Composition", "help": "Use the game's built-in recommended fleet to automatically compose hard mode fleets" + }, + "DefeatWithdraw": { + "name": "Retreat after defeat in Mob", + "help": "The handling method for defeat in Mob during the journey. Upon initiation, exit the sea area directly; upon termination, attempt to have another team take over the subsequent battle." } }, "StopCondition": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 5a5f1bdec..c21b9bfca 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -1046,6 +1046,10 @@ "UseRecommendFleet": { "name": "自動編成", "help": "ゲーム内蔵の推奨編成を使用してハードステージの編成を自動的に完了します" + }, + "DefeatWithdraw": { + "name": "道中での戦闘で敗北し撤退", + "help": "道中戦闘で敗北した際の処理方法。オンの場合は海域から直接退出し、オフの場合は別のチームが引き継いで後続の戦闘を試みる。" } }, "StopCondition": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b5fc2a632..693333d3e 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1046,6 +1046,10 @@ "UseRecommendFleet": { "name": "自动配队", "help": "使用游戏内置的推荐阵容自动完成困难图配队" + }, + "DefeatWithdraw": { + "name": "道中战斗失败撤退", + "help": "道中战斗战败时的处理方式。开启时直接退出海域,关闭时尝试由另一队接管后续战斗。" } }, "StopCondition": { diff --git a/module/config/i18n/zh-MIAO.json b/module/config/i18n/zh-MIAO.json index 6024a69fe..cdadff9ab 100644 --- a/module/config/i18n/zh-MIAO.json +++ b/module/config/i18n/zh-MIAO.json @@ -1046,6 +1046,10 @@ "UseRecommendFleet": { "name": "自动配队困难图 (`・ω・´)ゞ", "help": "使用游戏推荐阵容自动完成困难配队喵~" + }, + "DefeatWithdraw": { + "name": "道中战斗失败撤退 (`・ω・´)", + "help": "道中战斗战败时的处理方式喵。开启时直接退出海域,关闭时尝试由另一队接管后续战斗喵。" } }, "StopCondition": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index dcb979b2e..a0a77d787 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1046,6 +1046,10 @@ "UseRecommendFleet": { "name": "自動配隊", "help": "使用遊戲內建的推薦陣容自動完成困難圖配隊" + }, + "DefeatWithdraw": { + "name": "道中戰鬥失敗撤退", + "help": "道中戰鬥戰敗時的處理方式。開啟時直接退出海域,關閉時嘗試由另一隊接管後續戰鬥。" } }, "StopCondition": { diff --git a/module/map/assets.py b/module/map/assets.py index 71c717bee..325296dbf 100644 --- a/module/map/assets.py +++ b/module/map/assets.py @@ -22,6 +22,7 @@ FLEET_NUM_2 = Button(area={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), FLEET_PREPARATION = Button(area={'cn': (1013, 558, 1141, 588), 'en': (1048, 569, 1086, 595), 'jp': (1046, 558, 1107, 587), 'tw': (1014, 557, 1142, 588)}, color={'cn': (242, 211, 160), 'en': (241, 201, 148), 'jp': (241, 205, 151), 'tw': (242, 208, 157)}, button={'cn': (980, 549, 1181, 612), 'en': (988, 556, 1145, 606), 'jp': (983, 549, 1185, 612), 'tw': (980, 548, 1180, 612)}, file={'cn': './assets/cn/map/FLEET_PREPARATION.png', 'en': './assets/en/map/FLEET_PREPARATION.png', 'jp': './assets/jp/map/FLEET_PREPARATION.png', 'tw': './assets/tw/map/FLEET_PREPARATION.png'}) FLEET_PREPARATION_CHECK = Button(area={'cn': (1146, 107, 1174, 136), 'en': (1129, 111, 1158, 140), 'jp': (1146, 107, 1174, 136), 'tw': (1145, 106, 1175, 136)}, color={'cn': (180, 98, 111), 'en': (189, 105, 109), 'jp': (180, 98, 111), 'tw': (180, 90, 92)}, button={'cn': (1146, 107, 1174, 136), 'en': (1129, 111, 1158, 140), 'jp': (1146, 107, 1174, 136), 'tw': (1145, 106, 1175, 136)}, file={'cn': './assets/cn/map/FLEET_PREPARATION_CHECK.png', 'en': './assets/en/map/FLEET_PREPARATION_CHECK.png', 'jp': './assets/jp/map/FLEET_PREPARATION_CHECK.png', 'tw': './assets/tw/map/FLEET_PREPARATION_CHECK.png'}) FLEET_SUPPORT_EMPTY = Button(area={'cn': (454, 470, 538, 540), 'en': (454, 470, 538, 540), 'jp': (454, 470, 538, 540), 'tw': (454, 470, 538, 540)}, color={'cn': (47, 54, 77), 'en': (47, 54, 77), 'jp': (47, 54, 77), 'tw': (47, 54, 77)}, button={'cn': (454, 470, 538, 540), 'en': (454, 470, 538, 540), 'jp': (454, 470, 538, 540), 'tw': (454, 470, 538, 540)}, file={'cn': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'en': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'jp': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'tw': './assets/cn/map/FLEET_SUPPORT_EMPTY.png'}) +FLEET_WITHDRAW = Button(area={'cn': (714, 356, 773, 380), 'en': (714, 356, 773, 380), 'jp': (714, 356, 773, 380), 'tw': (714, 356, 773, 380)}, color={'cn': (175, 188, 201), 'en': (175, 188, 201), 'jp': (175, 188, 201), 'tw': (175, 188, 201)}, button={'cn': (714, 356, 773, 380), 'en': (714, 356, 773, 380), 'jp': (714, 356, 773, 380), 'tw': (714, 356, 773, 380)}, file={'cn': './assets/cn/map/FLEET_WITHDRAW.png', 'en': './assets/cn/map/FLEET_WITHDRAW.png', 'jp': './assets/cn/map/FLEET_WITHDRAW.png', 'tw': './assets/cn/map/FLEET_WITHDRAW.png'}) MAP_CAT_ATTACK = Button(area={'cn': (1237, 103, 1252, 153), 'en': (1237, 103, 1252, 153), 'jp': (1237, 103, 1252, 153), 'tw': (1237, 103, 1252, 153)}, color={'cn': (43, 45, 52), 'en': (43, 45, 52), 'jp': (43, 45, 52), 'tw': (43, 45, 52)}, button={'cn': (1148, 653, 1262, 705), 'en': (1147, 651, 1263, 701), 'jp': (1149, 653, 1261, 704), 'tw': (1148, 653, 1262, 705)}, file={'cn': './assets/cn/map/MAP_CAT_ATTACK.png', 'en': './assets/en/map/MAP_CAT_ATTACK.png', 'jp': './assets/jp/map/MAP_CAT_ATTACK.png', 'tw': './assets/tw/map/MAP_CAT_ATTACK.png'}) MAP_CAT_ATTACK_MIRROR = Button(area={'cn': (147, 145, 187, 157), 'en': (147, 145, 187, 157), 'jp': (147, 145, 187, 157), 'tw': (147, 145, 187, 157)}, color={'cn': (214, 191, 99), 'en': (214, 191, 99), 'jp': (214, 191, 99), 'tw': (214, 191, 99)}, button={'cn': (147, 145, 187, 157), 'en': (147, 145, 187, 157), 'jp': (147, 145, 187, 157), 'tw': (147, 145, 187, 157)}, file={'cn': './assets/cn/map/MAP_CAT_ATTACK_MIRROR.png', 'en': './assets/en/map/MAP_CAT_ATTACK_MIRROR.png', 'jp': './assets/jp/map/MAP_CAT_ATTACK_MIRROR.png', 'tw': './assets/tw/map/MAP_CAT_ATTACK_MIRROR.png'}) MAP_MODE_SWITCH_HARD = Button(area={'cn': (341, 580, 374, 617), 'en': (341, 580, 374, 617), 'jp': (341, 580, 374, 617), 'tw': (341, 580, 374, 617)}, color={'cn': (234, 179, 179), 'en': (234, 179, 179), 'jp': (234, 179, 179), 'tw': (234, 179, 179)}, button={'cn': (341, 580, 374, 617), 'en': (341, 580, 374, 617), 'jp': (341, 580, 374, 617), 'tw': (341, 580, 374, 617)}, file={'cn': './assets/cn/map/MAP_MODE_SWITCH_HARD.png', 'en': './assets/cn/map/MAP_MODE_SWITCH_HARD.png', 'jp': './assets/cn/map/MAP_MODE_SWITCH_HARD.png', 'tw': './assets/cn/map/MAP_MODE_SWITCH_HARD.png'}) From 71cb6f4c9841b13c23933836beffed57c6ceda38 Mon Sep 17 00:00:00 2001 From: wess09 Date: Tue, 12 May 2026 18:42:39 +0800 Subject: [PATCH 2/4] new --- module/webui/app.py | 2 +- webapp/ap_chart.js | 180 ++++++++++++++++---------------------------- 2 files changed, 67 insertions(+), 115 deletions(-) diff --git a/module/webui/app.py b/module/webui/app.py index 8e0e3eedb..e5ec0d17f 100644 --- a/module/webui/app.py +++ b/module/webui/app.py @@ -623,7 +623,7 @@ class AlasGUI(Frame): coins_legend_html += '紫币' chart_id = f"ap_cv_{id(self)}" - detail_controls_display = 'display:flex;' if is_detail_mode else 'display:none;' + detail_controls_display = 'display:flex;' if current_view in ('line', 'detail') else 'display:none;' html_tpl = read_webapp_template('ap_chart_panel.html') html = html_tpl.format( diff --git a/webapp/ap_chart.js b/webapp/ap_chart.js index 48d993a5d..2c1ee0518 100644 --- a/webapp/ap_chart.js +++ b/webapp/ap_chart.js @@ -340,123 +340,75 @@ oc.scale(dpr, dpr); if (chartType === 'line') { + var visibleStart = Math.max(0, Math.floor(panOffset)); + var visibleCount = Math.ceil(nn / zoomLevel); + var visibleEnd = Math.min(nn, visibleStart + visibleCount); + var visibleNn = visibleEnd - visibleStart; + + var dMin = Infinity, dMax = -Infinity; + for (var i = visibleStart; i < visibleEnd; i++) { + if (ap[i] < dMin) dMin = ap[i]; + if (ap[i] > dMax) dMax = ap[i]; + } + if (dMin === Infinity) dMin = 0; + if (dMax === -Infinity) dMax = 100; + var drng = dMax - dMin || 1; + dMin -= drng * 0.1; + dMax += drng * 0.1; + + var xScale = gW / visibleNn; + var idx = Math.floor(panOffset + (mx_ - pad.l) / xScale); + idx = Math.max(0, Math.min(nn - 1, idx)); + var px = pad.l + (idx - visibleStart) * xScale; + var py = pad.t + gH - (ap[idx] - dMin) / (dMax - dMin) * gH; + + oc.strokeStyle = "rgba(255,255,255,0.18)"; + oc.lineWidth = 1; + oc.setLineDash([4, 3]); + oc.beginPath(); oc.moveTo(px, pad.t); oc.lineTo(px, pad.t + gH); oc.stroke(); + oc.beginPath(); oc.moveTo(pad.l, py); oc.lineTo(W - pad.r, py); oc.stroke(); + oc.setLineDash([]); + + oc.beginPath(); oc.arc(px, py, 6, 0, Math.PI * 2); + oc.fillStyle = "rgba(100,181,246,0.3)"; oc.fill(); + oc.beginPath(); oc.arc(px, py, 4, 0, Math.PI * 2); + oc.fillStyle = "#64b5f6"; oc.fill(); + oc.strokeStyle = "#fff"; oc.lineWidth = 2; oc.stroke(); + oc.setTransform(1, 0, 0, 1, 0, 0); + + var diff = idx > 0 ? (ap[idx] - ap[idx - 1]) : 0; + var isUp = diff >= 0; + var dc = isUp ? "#ef5350" : "#26a69a"; + var ds = (isUp ? "+" : "") + diff; + var tooltipRows = [ + { style: { color: "#888", marginBottom: "4px", fontWeight: "600" }, parts: [{ type: 'text', value: labels[idx] }] }, + { parts: [{ type: 'text', value: "体力: " }, { type: 'bold', value: String(ap[idx]), style: { color: "#64b5f6" } }] }, + { parts: [{ type: 'text', value: "单次变化: " }, { type: 'bold', value: ds, style: { color: dc } }] } + ]; + if (isDetailMode) { - var visibleStart = Math.max(0, Math.floor(panOffset)); - var visibleCount = Math.ceil(nn / zoomLevel); - var visibleEnd = Math.min(nn, visibleStart + visibleCount); - var visibleNn = visibleEnd - visibleStart; - - var dMin = Infinity, dMax = -Infinity; - for (var i = visibleStart; i < visibleEnd; i++) { - if (ap[i] < dMin) dMin = ap[i]; - if (ap[i] > dMax) dMax = ap[i]; - } - if (dMin === Infinity) dMin = 0; - if (dMax === -Infinity) dMax = 100; - var drng = dMax - dMin || 1; - dMin -= drng * 0.1; - dMax += drng * 0.1; - - var xScale = gW / visibleNn; - var idx = Math.floor(panOffset + (mx_ - pad.l) / xScale); - idx = Math.max(0, Math.min(nn - 1, idx)); - var px = pad.l + (idx - visibleStart) * xScale; - var py = pad.t + gH - (ap[idx] - dMin) / (dMax - dMin) * gH; - - oc.strokeStyle = "rgba(255,255,255,0.18)"; - oc.lineWidth = 1; - oc.setLineDash([4, 3]); - oc.beginPath(); oc.moveTo(px, pad.t); oc.lineTo(px, pad.t + gH); oc.stroke(); - oc.beginPath(); oc.moveTo(pad.l, py); oc.lineTo(W - pad.r, py); oc.stroke(); - oc.setLineDash([]); - - oc.beginPath(); oc.arc(px, py, 6, 0, Math.PI * 2); - oc.fillStyle = "rgba(100,181,246,0.3)"; oc.fill(); - oc.beginPath(); oc.arc(px, py, 4, 0, Math.PI * 2); - oc.fillStyle = "#64b5f6"; oc.fill(); - oc.strokeStyle = "#fff"; oc.lineWidth = 2; oc.stroke(); - oc.setTransform(1, 0, 0, 1, 0, 0); - - var diff = idx > 0 ? (ap[idx] - ap[idx - 1]) : 0; - var isUp = diff >= 0; - var dc = isUp ? "#ef5350" : "#26a69a"; - var ds = (isUp ? "+" : "") + diff; var source = sources && sources[idx] ? sources[idx] : '-'; var sourceColor = source === 'cl1' ? '#64b5f6' : (source === 'meow' ? '#ff9800' : '#888'); - - var tooltipRows = [ - { style: { color: "#888", marginBottom: "4px", fontWeight: "600" }, parts: [{ type: 'text', value: labels[idx] }] }, - { parts: [{ type: 'text', value: "体力: " }, { type: 'bold', value: String(ap[idx]), style: { color: "#64b5f6" } }] }, - { parts: [{ type: 'text', value: "单次变化: " }, { type: 'bold', value: ds, style: { color: dc } }] }, - { parts: [{ type: 'text', value: "来源: " }, { type: 'bold', value: source, style: { color: sourceColor } }] } - ]; - - if (showCoins && yellowCoinsLen > 0 && idx < yellowCoinsLen && yellowCoins[idx] !== null && yellowCoins[idx] !== undefined) { - var yc = yellowCoins[idx]; - var ycDiff = idx > 0 && yellowCoins[idx - 1] !== null && yellowCoins[idx - 1] !== undefined ? (yc - yellowCoins[idx - 1]) : 0; - var ycColor = ycDiff >= 0 ? "#ef5350" : "#26a69a"; - var ycDiffStr = (ycDiff >= 0 ? "+" : "") + ycDiff; - tooltipRows.push({ parts: [{ type: 'text', value: "黄币: " }, { type: 'bold', value: String(yc), style: { color: "#ffd54f" } }, { type: 'text', value: " (" + ycDiffStr + ")", style: { color: ycColor } }] }); - } - - if (showCoins && purpleCoinsLen > 0 && idx < purpleCoinsLen && purpleCoins[idx] !== null && purpleCoins[idx] !== undefined) { - var pc = purpleCoins[idx]; - var pcDiff = idx > 0 && purpleCoins[idx - 1] !== null && purpleCoins[idx - 1] !== undefined ? (pc - purpleCoins[idx - 1]) : 0; - var pcColor = pcDiff >= 0 ? "#ef5350" : "#26a69a"; - var pcDiffStr = (pcDiff >= 0 ? "+" : "") + pcDiff; - tooltipRows.push({ parts: [{ type: 'text', value: "紫币: " }, { type: 'bold', value: String(pc), style: { color: "#ce93d8" } }, { type: 'text', value: " (" + pcDiffStr + ")", style: { color: pcColor } }] }); - } - - setTooltipContent(tipEl, tooltipRows); - } else { - var ratio = (mx_ - pad.l) / gW; - var idx = Math.round(ratio * (nn - 1)); - idx = Math.max(0, Math.min(nn - 1, idx)); - var px = xOfLine(idx), py = yOf(ap[idx]); - - oc.strokeStyle = "rgba(255,255,255,0.18)"; - oc.lineWidth = 1; - oc.setLineDash([4, 3]); - oc.beginPath(); oc.moveTo(px, pad.t); oc.lineTo(px, pad.t + gH); oc.stroke(); - oc.beginPath(); oc.moveTo(pad.l, py); oc.lineTo(W - pad.r, py); oc.stroke(); - oc.setLineDash([]); - - oc.beginPath(); oc.arc(px, py, 6, 0, Math.PI * 2); - oc.fillStyle = "rgba(100,181,246,0.3)"; oc.fill(); - oc.beginPath(); oc.arc(px, py, 4, 0, Math.PI * 2); - oc.fillStyle = "#64b5f6"; oc.fill(); - oc.strokeStyle = "#fff"; oc.lineWidth = 2; oc.stroke(); - oc.setTransform(1, 0, 0, 1, 0, 0); - - var diff = idx > 0 ? (ap[idx] - ap[idx - 1]) : 0; - var isUp = diff >= 0; - var dc = isUp ? "#ef5350" : "#26a69a"; - var ds = (isUp ? "+" : "") + diff; - - var tooltipRows = [ - { style: { color: "#888", marginBottom: "4px", fontWeight: "600" }, parts: [{ type: 'text', value: labels[idx] }] }, - { parts: [{ type: 'text', value: "体力: " }, { type: 'bold', value: String(ap[idx]), style: { color: "#64b5f6" } }] }, - { parts: [{ type: 'text', value: "单次变化: " }, { type: 'bold', value: ds, style: { color: dc } }] } - ]; - - if (showCoins && yellowCoinsLen > 0 && idx < yellowCoinsLen && yellowCoins[idx] !== null && yellowCoins[idx] !== undefined) { - var yc = yellowCoins[idx]; - var ycDiff = idx > 0 && yellowCoins[idx - 1] !== null && yellowCoins[idx - 1] !== undefined ? (yc - yellowCoins[idx - 1]) : 0; - var ycColor = ycDiff >= 0 ? "#ef5350" : "#26a69a"; - var ycDiffStr = (ycDiff >= 0 ? "+" : "") + ycDiff; - tooltipRows.push({ parts: [{ type: 'text', value: "黄币: " }, { type: 'bold', value: String(yc), style: { color: "#ffd54f" } }, { type: 'text', value: " (" + ycDiffStr + ")", style: { color: ycColor } }] }); - } - - if (showCoins && purpleCoinsLen > 0 && idx < purpleCoinsLen && purpleCoins[idx] !== null && purpleCoins[idx] !== undefined) { - var pc = purpleCoins[idx]; - var pcDiff = idx > 0 && purpleCoins[idx - 1] !== null && purpleCoins[idx - 1] !== undefined ? (pc - purpleCoins[idx - 1]) : 0; - var pcColor = pcDiff >= 0 ? "#ef5350" : "#26a69a"; - var pcDiffStr = (pcDiff >= 0 ? "+" : "") + pcDiff; - tooltipRows.push({ parts: [{ type: 'text', value: "紫币: " }, { type: 'bold', value: String(pc), style: { color: "#ce93d8" } }, { type: 'text', value: " (" + pcDiffStr + ")", style: { color: pcColor } }] }); - } - - setTooltipContent(tipEl, tooltipRows); + tooltipRows.push({ parts: [{ type: 'text', value: "来源: " }, { type: 'bold', value: source, style: { color: sourceColor } }] }); } + + if (showCoins && yellowCoinsLen > 0 && idx < yellowCoinsLen && yellowCoins[idx] !== null && yellowCoins[idx] !== undefined) { + var yc = yellowCoins[idx]; + var ycDiff = idx > 0 && yellowCoins[idx - 1] !== null && yellowCoins[idx - 1] !== undefined ? (yc - yellowCoins[idx - 1]) : 0; + var ycColor = ycDiff >= 0 ? "#ef5350" : "#26a69a"; + var ycDiffStr = (ycDiff >= 0 ? "+" : "") + ycDiff; + tooltipRows.push({ parts: [{ type: 'text', value: "黄币: " }, { type: 'bold', value: String(yc), style: { color: "#ffd54f" } }, { type: 'text', value: " (" + ycDiffStr + ")", style: { color: ycColor } }] }); + } + + if (showCoins && purpleCoinsLen > 0 && idx < purpleCoinsLen && purpleCoins[idx] !== null && purpleCoins[idx] !== undefined) { + var pc = purpleCoins[idx]; + var pcDiff = idx > 0 && purpleCoins[idx - 1] !== null && purpleCoins[idx - 1] !== undefined ? (pc - purpleCoins[idx - 1]) : 0; + var pcColor = pcDiff >= 0 ? "#ef5350" : "#26a69a"; + var pcDiffStr = (pcDiff >= 0 ? "+" : "") + pcDiff; + tooltipRows.push({ parts: [{ type: 'text', value: "紫币: " }, { type: 'bold', value: String(pc), style: { color: "#ce93d8" } }, { type: 'text', value: " (" + pcDiffStr + ")", style: { color: pcColor } }] }); + } + + setTooltipContent(tipEl, tooltipRows); } else { var idx = Math.floor((mx_ - pad.l) / candleSpace); idx = Math.max(0, Math.min(nn - 1, idx)); @@ -529,7 +481,7 @@ oc.clearRect(0, 0, ovCv.width, ovCv.height); }); - if (isDetailMode) { + if (chartType === 'line') { var zoomLevel = 1.0; var panOffset = 0; var maxZoom = 5.0; From 644181076a9c06819930d4f8dd5d8dcb3c4099aa Mon Sep 17 00:00:00 2001 From: wess09 Date: Tue, 12 May 2026 18:55:06 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=86=E6=97=B6=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8B=96=E5=8A=A8=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/ap_chart.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/webapp/ap_chart.js b/webapp/ap_chart.js index 2c1ee0518..86704a85c 100644 --- a/webapp/ap_chart.js +++ b/webapp/ap_chart.js @@ -356,8 +356,8 @@ dMin -= drng * 0.1; dMax += drng * 0.1; - var xScale = gW / visibleNn; - var idx = Math.floor(panOffset + (mx_ - pad.l) / xScale); + var xScale = gW / Math.max(visibleNn - 1, 1); + var idx = Math.round(visibleStart + (mx_ - pad.l) / xScale); idx = Math.max(0, Math.min(nn - 1, idx)); var px = pad.l + (idx - visibleStart) * xScale; var py = pad.t + gH - (ap[idx] - dMin) / (dMax - dMin) * gH; @@ -535,7 +535,7 @@ ctx.textAlign = "center"; ctx.textBaseline = "top"; - var xScale = gW / visibleNn; + var xScale = gW / Math.max(visibleNn - 1, 1); function dxOf(i) { return pad.l + (i - visibleStart) * xScale; } function dyOf(v) { return pad.t + gH - (v - dMin) / (dMax - dMin) * gH; } @@ -602,7 +602,7 @@ if (!isDragging) return; var dx = e.clientX - dragStartX; var visibleCount = Math.ceil(nn / zoomLevel); - var xScale = gW / visibleCount; + var xScale = gW / Math.max(visibleCount - 1, 1); var newPan = dragStartPan - dx / xScale; var maxPan = Math.max(0, nn - visibleCount); panOffset = Math.max(0, Math.min(maxPan, newPan)); @@ -625,10 +625,10 @@ if (newZoom !== zoomLevel) { var visibleCountBefore = Math.ceil(nn / zoomLevel); var visibleCountAfter = Math.ceil(nn / newZoom); - var xScaleBefore = gW / visibleCountBefore; + var xScaleBefore = gW / Math.max(visibleCountBefore - 1, 1); var mouseIdx = panOffset + (mx - pad.l) / xScaleBefore; zoomLevel = newZoom; - var xScaleAfter = gW / visibleCountAfter; + var xScaleAfter = gW / Math.max(visibleCountAfter - 1, 1); panOffset = Math.max(0, mouseIdx - (mx - pad.l) / xScaleAfter); var maxPan = Math.max(0, nn - visibleCountAfter); panOffset = Math.max(0, Math.min(maxPan, panOffset)); From 506a1d12cfe3c72a6733f22e8620f759509ac411 Mon Sep 17 00:00:00 2001 From: wess09 Date: Tue, 12 May 2026 19:23:00 +0800 Subject: [PATCH 4/4] fix Bug --- assets/cn/map/FLEET_SWITCH_CONFIRM.png | Bin 0 -> 13213 bytes module/combat/auto_search_combat.py | 11 ++++++++--- module/map/assets.py | 1 + module/map/map_operation.py | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 assets/cn/map/FLEET_SWITCH_CONFIRM.png diff --git a/assets/cn/map/FLEET_SWITCH_CONFIRM.png b/assets/cn/map/FLEET_SWITCH_CONFIRM.png new file mode 100644 index 0000000000000000000000000000000000000000..d08d60038badeee63604bfa3d21f2abb3b46d861 GIT binary patch literal 13213 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 I`NqBf0ak5!9RL6T literal 0 HcmV?d00001 diff --git a/module/combat/auto_search_combat.py b/module/combat/auto_search_combat.py index c92b64045..c5978194e 100644 --- a/module/combat/auto_search_combat.py +++ b/module/combat/auto_search_combat.py @@ -5,7 +5,7 @@ from module.combat.combat import Combat from module.exception import CampaignEnd from module.handler.assets import AUTO_SEARCH_MAP_OPTION_ON, GET_MISSION from module.logger import logger -from module.map.assets import WITHDRAW, SWITCH_OVER, FLEET_WITHDRAW +from module.map.assets import WITHDRAW, SWITCH_OVER, FLEET_WITHDRAW, FLEET_SWITCH_CONFIRM from module.map.map_operation import MapOperation @@ -333,7 +333,12 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): raise CampaignEnd # Withdraw - if self._withdraw and self.appear(WITHDRAW, offset=(30, 30)): + if self._withdraw: + if self.appear_then_click(FLEET_SWITCH_CONFIRM, offset=(30, 30)): + continue + if not self.appear(WITHDRAW, offset=(30, 30)): + continue + logger.info(f'fleet_alive_multiple: {self.fleet_alive_multiple}') self._withdraw = False if self.config.Campaign_DefeatWithdraw or not self.fleet_alive_multiple: @@ -347,7 +352,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): self.device.screenshot() if self.appear_then_click(FLEET_WITHDRAW, offset=(30, 30)): break - if self.appear_then_click(SWITCH_OVER,interval=2): + if self.appear_then_click(SWITCH_OVER, interval=2): continue self.fleet_alive_multiple = False continue diff --git a/module/map/assets.py b/module/map/assets.py index 325296dbf..f68a27dfc 100644 --- a/module/map/assets.py +++ b/module/map/assets.py @@ -22,6 +22,7 @@ FLEET_NUM_2 = Button(area={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), FLEET_PREPARATION = Button(area={'cn': (1013, 558, 1141, 588), 'en': (1048, 569, 1086, 595), 'jp': (1046, 558, 1107, 587), 'tw': (1014, 557, 1142, 588)}, color={'cn': (242, 211, 160), 'en': (241, 201, 148), 'jp': (241, 205, 151), 'tw': (242, 208, 157)}, button={'cn': (980, 549, 1181, 612), 'en': (988, 556, 1145, 606), 'jp': (983, 549, 1185, 612), 'tw': (980, 548, 1180, 612)}, file={'cn': './assets/cn/map/FLEET_PREPARATION.png', 'en': './assets/en/map/FLEET_PREPARATION.png', 'jp': './assets/jp/map/FLEET_PREPARATION.png', 'tw': './assets/tw/map/FLEET_PREPARATION.png'}) FLEET_PREPARATION_CHECK = Button(area={'cn': (1146, 107, 1174, 136), 'en': (1129, 111, 1158, 140), 'jp': (1146, 107, 1174, 136), 'tw': (1145, 106, 1175, 136)}, color={'cn': (180, 98, 111), 'en': (189, 105, 109), 'jp': (180, 98, 111), 'tw': (180, 90, 92)}, button={'cn': (1146, 107, 1174, 136), 'en': (1129, 111, 1158, 140), 'jp': (1146, 107, 1174, 136), 'tw': (1145, 106, 1175, 136)}, file={'cn': './assets/cn/map/FLEET_PREPARATION_CHECK.png', 'en': './assets/en/map/FLEET_PREPARATION_CHECK.png', 'jp': './assets/jp/map/FLEET_PREPARATION_CHECK.png', 'tw': './assets/tw/map/FLEET_PREPARATION_CHECK.png'}) FLEET_SUPPORT_EMPTY = Button(area={'cn': (454, 470, 538, 540), 'en': (454, 470, 538, 540), 'jp': (454, 470, 538, 540), 'tw': (454, 470, 538, 540)}, color={'cn': (47, 54, 77), 'en': (47, 54, 77), 'jp': (47, 54, 77), 'tw': (47, 54, 77)}, button={'cn': (454, 470, 538, 540), 'en': (454, 470, 538, 540), 'jp': (454, 470, 538, 540), 'tw': (454, 470, 538, 540)}, file={'cn': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'en': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'jp': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'tw': './assets/cn/map/FLEET_SUPPORT_EMPTY.png'}) +FLEET_SWITCH_CONFIRM = Button(area={'cn': (553, 481, 728, 541), 'en': (553, 481, 728, 541), 'jp': (553, 481, 728, 541), 'tw': (553, 481, 728, 541)}, color={'cn': (98, 144, 201), 'en': (98, 144, 201), 'jp': (98, 144, 201), 'tw': (98, 144, 201)}, button={'cn': (553, 481, 728, 541), 'en': (553, 481, 728, 541), 'jp': (553, 481, 728, 541), 'tw': (553, 481, 728, 541)}, file={'cn': './assets/cn/map/FLEET_SWITCH_CONFIRM.png', 'en': './assets/cn/map/FLEET_SWITCH_CONFIRM.png', 'jp': './assets/cn/map/FLEET_SWITCH_CONFIRM.png', 'tw': './assets/cn/map/FLEET_SWITCH_CONFIRM.png'}) FLEET_WITHDRAW = Button(area={'cn': (714, 356, 773, 380), 'en': (714, 356, 773, 380), 'jp': (714, 356, 773, 380), 'tw': (714, 356, 773, 380)}, color={'cn': (175, 188, 201), 'en': (175, 188, 201), 'jp': (175, 188, 201), 'tw': (175, 188, 201)}, button={'cn': (714, 356, 773, 380), 'en': (714, 356, 773, 380), 'jp': (714, 356, 773, 380), 'tw': (714, 356, 773, 380)}, file={'cn': './assets/cn/map/FLEET_WITHDRAW.png', 'en': './assets/cn/map/FLEET_WITHDRAW.png', 'jp': './assets/cn/map/FLEET_WITHDRAW.png', 'tw': './assets/cn/map/FLEET_WITHDRAW.png'}) MAP_CAT_ATTACK = Button(area={'cn': (1237, 103, 1252, 153), 'en': (1237, 103, 1252, 153), 'jp': (1237, 103, 1252, 153), 'tw': (1237, 103, 1252, 153)}, color={'cn': (43, 45, 52), 'en': (43, 45, 52), 'jp': (43, 45, 52), 'tw': (43, 45, 52)}, button={'cn': (1148, 653, 1262, 705), 'en': (1147, 651, 1263, 701), 'jp': (1149, 653, 1261, 704), 'tw': (1148, 653, 1262, 705)}, file={'cn': './assets/cn/map/MAP_CAT_ATTACK.png', 'en': './assets/en/map/MAP_CAT_ATTACK.png', 'jp': './assets/jp/map/MAP_CAT_ATTACK.png', 'tw': './assets/tw/map/MAP_CAT_ATTACK.png'}) MAP_CAT_ATTACK_MIRROR = Button(area={'cn': (147, 145, 187, 157), 'en': (147, 145, 187, 157), 'jp': (147, 145, 187, 157), 'tw': (147, 145, 187, 157)}, color={'cn': (214, 191, 99), 'en': (214, 191, 99), 'jp': (214, 191, 99), 'tw': (214, 191, 99)}, button={'cn': (147, 145, 187, 157), 'en': (147, 145, 187, 157), 'jp': (147, 145, 187, 157), 'tw': (147, 145, 187, 157)}, file={'cn': './assets/cn/map/MAP_CAT_ATTACK_MIRROR.png', 'en': './assets/en/map/MAP_CAT_ATTACK_MIRROR.png', 'jp': './assets/jp/map/MAP_CAT_ATTACK_MIRROR.png', 'tw': './assets/tw/map/MAP_CAT_ATTACK_MIRROR.png'}) diff --git a/module/map/map_operation.py b/module/map/map_operation.py index 34d9e7427..a55569be6 100644 --- a/module/map/map_operation.py +++ b/module/map/map_operation.py @@ -378,6 +378,8 @@ class MapOperation(MysteryHandler, FleetPreparation, Retirement, FastForwardHand else: self.device.screenshot() + if self.appear_then_click(FLEET_SWITCH_CONFIRM, offset=(30, 30)): + continue if self.handle_popup_confirm('WITHDRAW'): continue if self.appear_then_click(WITHDRAW, interval=5):