from module.base.timer import Timer from module.campaign.campaign_base import CampaignBase from module.hard.equipment import HardEquipment from module.logger import logger from module.map.assets import MAP_PREPARATION, FLEET_PREPARATION from module.exception import CampaignEnd from module.ui.ui import CAMPAIGN_CHECK class Config: MAP_HAS_AMBUSH = False ENABLE_EMOTION_REDUCE = False ENABLE_HP_BALANCE = False class Campaign(CampaignBase, HardEquipment): def run(self): logger.hr(self.ENTRANCE, level=2) self.enter_map(self.ENTRANCE, mode='hard') self.map = self.MAP self.map.reset() if self.config.FLEET_HARD == 1: self.ensure_edge_insight(reverse=True) self.full_scan_find_boss() else: self.fleet_switch_click() self.ensure_no_info_bar() self.ensure_edge_insight() self.full_scan_find_boss() try: self.clear_boss() except CampaignEnd: logger.hr('Campaign end') def fleet_preparation(self): self.equipment_take_on() def _expected_combat_end(self, expected): return 'in_stage' def clear_boss(self): grids = self.map.select(is_boss=True) grids = grids.add(self.map.select(may_boss=True, is_enemy=True)) logger.info('May boss: %s' % self.map.select(may_boss=True)) logger.info('May boss and is enemy: %s' % self.map.select(may_boss=True, is_enemy=True)) logger.info('Is boss: %s' % self.map.select(is_boss=True)) # logger.info('Grids: %s' % grids) if grids: logger.hr('Clear BOSS') grids = grids.sort(cost=True, weight=True) logger.info('Grids: %s' % str(grids)) self._goto(grids[0], expected='boss') raise CampaignEnd('BOSS Clear.') logger.warning('BOSS not detected, trying all boss spawn point.') self.clear_potential_boss() return False def equipment_take_off_when_finished(self): logger.info('equipment_take_off_when_finished') campaign_timer = Timer(2) map_timer = Timer(1) fleet_timer = Timer(1) while 1: self.device.screenshot() # Enter campaign if campaign_timer.reached() and self.appear_then_click(self.ENTRANCE): campaign_timer.reset() continue # Map preparation if map_timer.reached() and self.appear(MAP_PREPARATION): self.device.click(MAP_PREPARATION) map_timer.reset() campaign_timer.reset() continue # Fleet preparation if fleet_timer.reached() and self.appear(FLEET_PREPARATION): self.equipment_take_off() self.ui_back(check_button=CAMPAIGN_CHECK, appear_button=FLEET_PREPARATION) break # Retire if self.handle_retirement(): continue # Emotion pass return True