mirror of
https://github.com/LmeSzinc/StarRailCopilot.git
synced 2024-11-26 18:20:42 +00:00
97 lines
3.0 KiB
Python
97 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.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
|