StarRailCopilot/campaign/campaign_hard/campaign_hard.py
LmeSzinc 87554793d3 Fix: 修复了一堆bug
- 修复了上一场战斗的队伍位置信息会保留到下一场战斗的问题
- 修复了领取大量任务时, 不会等待的问题
- 修复了不计算BOSS队心情消耗的问题
- 增加了碰磁BOSS所有刷新点的方法
- 修复了没有检测到BOSS时停滞的问题
- 修复了处理夜间委托
- 修复了丢失地图信息补全不起作用的问题
- 修复了换装滑动失败后, 陷入死循环的问题
- 删除了微层混合AB图的一些多余逻辑
- 7-2现在会优先捡全部问号了, 不需要先捡附近的来减少行走距离.
2020-04-07 11:20:38 +08:00

96 lines
3.0 KiB
Python

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.map.exception import CampaignEnd
from module.ui.ui import CAMPAIGN_CHECK
class Config:
MAP_HAS_AMBUSH = False
EMOTION_REDUCE = 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()
@property
def _expected_combat_end(self):
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])
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