1
0
mirror of https://github.com/sui-feng-cb/AzurLaneAutoScript1.git synced 2026-07-03 03:33:26 +08:00

Upd: GemsFarming

This commit is contained in:
2026-06-20 00:57:57 +08:00
parent 8cdb84adc6
commit b69311d96b
4 changed files with 206 additions and 427 deletions

View File

@@ -1,4 +1,7 @@
from datetime import datetime
from module.base.decorator import cached_property
from module.base.timer import Timer
from module.campaign.campaign_base import CampaignBase
from module.campaign.run import CampaignRun
from module.combat.assets import BATTLE_PREPARATION
@@ -16,8 +19,9 @@ from module.retire.assets import (
TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2,
TEMPLATE_AULICK, TEMPLATE_FOOTE
)
from module.retire.dock import Dock
# TEMPLATE_COMMON_CV and TEMPLATE_COMMON_DD are both used in function find_custom_candidates
from module.retire.retirement import Retirement, TEMPLATE_COMMON_CV, TEMPLATE_COMMON_DD
from module.retire.retirement import TEMPLATE_COMMON_CV, TEMPLATE_COMMON_DD
from module.retire.scanner import ShipScanner
from module.ui.assets import BACK_ARROW, FLEET_CHECK
from module.ui.page import page_fleet
@@ -47,7 +51,16 @@ class GemsEmotion(Emotion):
raise CampaignEnd('Emotion control')
def wait(self, fleet_index):
pass
"""
Override Emotion.wait to trigger stop condition when emotion is too low after battle.
"""
self.update()
self.record()
self.show()
fleet = self.fleets[fleet_index - 1]
recovered = fleet.get_recovered(expected_reduce=self.reduce_per_battle)
if recovered > datetime.now():
self.config.GEMS_EMOTION_TRIGGERED = True
class GemsCampaignOverride(CampaignBase):
@@ -95,47 +108,7 @@ class GemsCampaignOverride(CampaignBase):
raise CampaignEnd('Emotion withdraw')
class GemsEquipmentHandler(EquipmentCodeHandler):
def __init__(self, config, device=None, task=None):
super().__init__(config=config,
device=device,
task=task,
key="GemsFarming.GemsFarming.EquipmentCode",
ships=['DD', 'bogue', 'hermes', 'langley', 'ranger'])
def current_ship(self, skip_first_screenshot=True):
"""
Reuse templates in module.retire.assets,
which needs different rescaling to match each current flagship.
Pages:
in: gear_code
"""
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if not self.appear(EMPTY_SHIP_R):
break
else:
logger.info('Waiting ship icon loading.')
if TEMPLATE_BOGUE.match(self.device.image, scaling=1.46): # image has rotation
return 'bogue'
if TEMPLATE_HERMES.match(self.device.image, scaling=124/89):
return 'hermes'
if TEMPLATE_RANGER.match(self.device.image, scaling=4/3):
return 'ranger'
if TEMPLATE_LANGLEY.match(self.device.image, scaling=25/21):
return 'langley'
return 'DD'
class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
class GemsFarming(CampaignRun, Dock):
def hard_mode_override(self):
if self.campaign.config.Campaign_Mode == 'hard':
logger.info('Is in hard mode, switch ship changing method.')
@@ -217,19 +190,25 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
def _fleet_detail_enter_hard(self, fleet):
if self.appear(FLEET_PREPARATION, offset=(20, 50)):
return
self.campaign.ensure_campaign_ui(self.stage)
self.ui_click(click_button=self.campaign.ENTRANCE, appear_button=BACK_ARROW, check_button=MAP_PREPARATION)
while 1:
self.device.screenshot()
if self.appear_then_click(MAP_PREPARATION, interval=1):
continue
if self.handle_retirement():
continue
self.campaign.ensure_campaign_ui(self.stage, 'hard')
self.campaign.ENTRANCE.area = self.campaign.ENTRANCE.button
campaign_timer = Timer(5)
map_timer = Timer(5)
for _ in self.loop():
if self.appear(FLEET_PREPARATION, offset=(20, 50)):
break
if map_timer.reached() \
and self.campaign.handle_map_mode_switch('hard') \
and self.campaign.handle_map_preparation():
self.device.click(MAP_PREPARATION)
map_timer.reset()
campaign_timer.reset()
# Retire
if self.campaign.handle_retirement():
continue
if campaign_timer.reached() and self.appear_then_click(self.campaign.ENTRANCE):
campaign_timer.reset()
continue
def _ship_detail_enter_hard(self, button):
self.ship_info_enter(button)
@@ -254,7 +233,7 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
if self.change_flagship_equip:
logger.hr('Unmount flagship equipments', level=2)
self._ship_detail_enter(self.fleet_detail_enter_flagship)
self.clear_all_equip()
self.ship_equipment_take_off()
self._fleet_back()
logger.hr('Change flagship', level=2)
@@ -263,7 +242,7 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
if self.change_flagship_equip:
logger.hr('Mount flagship equipments', level=2)
self._ship_detail_enter(self.fleet_detail_enter_flagship)
self.apply_equip_code()
self.ship_equipment_take_on()
self._fleet_back()
return success
@@ -281,7 +260,7 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
if self.change_vanguard_equip:
logger.hr('Unmount vanguard equipments', level=2)
self._ship_detail_enter(self.fleet_detail_enter)
self.clear_all_equip()
self.ship_equipment_take_off()
self._fleet_back()
logger.hr('Change vanguard', level=2)
@@ -290,19 +269,14 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
if self.change_vanguard_equip:
logger.hr('Mount vanguard equipments', level=2)
self._ship_detail_enter(self.fleet_detail_enter)
self.apply_equip_code()
self.ship_equipment_take_on()
self._fleet_back()
return success
def _dock_reset(self):
self.dock_favourite_set(False, wait_loading=False)
self.dock_sort_method_dsc_set(wait_loading=False)
self.dock_filter_set()
def _ship_change_confirm(self, button):
self.dock_select_one(button)
self._dock_reset()
self.dock_reset()
self.dock_select_confirm(check_button=self.page_fleet_check_button)
def get_common_rarity_cv(self, lv=31, emotion=16):
@@ -480,7 +454,7 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
filter_string = self.config.__getattribute__(f'GemsFarming_Common{ship_type}Filter')
sort_dsc_first = ship_type.lower() == 'dd'
common_ship = self.get_common_ship_filter(filter_string, ship_type=ship_type)
common_ship = self.campaign.get_common_ship_filter(filter_string, ship_type=ship_type)
templates = globals()[f'TEMPLATE_COMMON_{ship_type}']
find_first = True
common_ship_candidates = {}
@@ -614,7 +588,7 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
else:
if self.hard_mode:
raise RequestHumanTakeover
self._dock_reset()
self.dock_reset()
self.ui_back(check_button=self.page_fleet_check_button)
return False
@@ -659,7 +633,7 @@ class GemsFarming(CampaignRun, GemsEquipmentHandler, Retirement):
else:
if self.hard_mode:
raise RequestHumanTakeover
self._dock_reset()
self.dock_reset()
self.ui_back(check_button=self.page_fleet_check_button)
return False