From 9f022c818810af2092b0f02f1a2af52ee397f02f Mon Sep 17 00:00:00 2001 From: W1NDes Date: Sat, 7 Feb 2026 02:47:35 +0800 Subject: [PATCH] =?UTF-8?q?Add(raid):=20=E5=85=B1=E6=96=97=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=98=9F=E4=BC=8D=E6=8E=A8=E8=8D=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/raid/raid.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/module/raid/raid.py b/module/raid/raid.py index 5d7d368b0..d4ca2acba 100644 --- a/module/raid/raid.py +++ b/module/raid/raid.py @@ -7,6 +7,9 @@ from module.campaign.campaign_event import CampaignEvent from module.combat.assets import * from module.exception import ScriptError from module.logger import logger +from module.map.assets import (FLEET_1_CHOOSE, FLEET_1_ADVICE, FLEET_1_BAR, + FLEET_1_CLEAR, FLEET_1_IN_USE, FLEET_1_HARD_SATIESFIED) +from module.map.map_fleet_preparation import FleetOperator from module.map.map_operation import MapOperation from module.ocr.ocr import Digit, DigitCounter from module.raid.assets import * @@ -282,6 +285,29 @@ class Raid(MapOperation, RaidCombat, CampaignEvent): return False + def handle_raid_fleet_recommend(self): + """ + If fleet is empty on raid fleet preparation page, click recommend to auto-fill. + Uses the same fleet preparation assets as main campaign hard mode. + + Returns: + bool: If fleet was recommended. + """ + if not self.appear(FLEET_1_CLEAR, offset=FleetOperator.OFFSET): + logger.info('Fleet preparation assets not found on raid page, skip recommend') + return False + + fleet_1 = FleetOperator( + choose=FLEET_1_CHOOSE, advice=FLEET_1_ADVICE, bar=FLEET_1_BAR, clear=FLEET_1_CLEAR, + in_use=FLEET_1_IN_USE, hard_satisfied=FLEET_1_HARD_SATIESFIED, main=self) + + if not fleet_1.in_use(): + logger.info('Fleet 1 is empty on raid fleet preparation, recommending') + fleet_1.recommend() + return True + + return False + def raid_enter(self, mode, raid, skip_first_screenshot=True): """ Args: @@ -294,6 +320,7 @@ class Raid(MapOperation, RaidCombat, CampaignEvent): out: BATTLE_PREPARATION """ entrance = raid_entrance(raid=raid, mode=mode) + fleet_checked = False while 1: if skip_first_screenshot: skip_first_screenshot = False @@ -307,6 +334,12 @@ class Raid(MapOperation, RaidCombat, CampaignEvent): self.config.task_stop() self.device.click(entrance) continue + + # Recommend fleet if empty + if not fleet_checked and self.appear(RAID_FLEET_PREPARATION, offset=(20, 20)): + self.handle_raid_fleet_recommend() + fleet_checked = True + if self.appear_then_click(RAID_FLEET_PREPARATION, offset=(20, 20), interval=5): continue