1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-13 00:57:01 +08:00

Fix: use _raid_has_oil_icon for new UI design

This commit is contained in:
sui-feng-cb
2026-02-05 20:44:16 +08:00
parent b8144ce41a
commit 6f1bdf1315
9 changed files with 71 additions and 32 deletions

View File

@@ -2,18 +2,17 @@ import cv2
import numpy as np
import module.config.server as server
from module.base.decorator import run_once
from module.base.timer import Timer
from module.campaign.campaign_event import CampaignEvent
from module.combat.assets import *
from module.event_hospital.assets import *
from module.exception import OilExhausted, ScriptError
from module.exception import ScriptError
from module.logger import logger
from module.map.map_operation import MapOperation
from module.ocr.ocr import Digit, DigitCounter
from module.raid.assets import *
from module.raid.combat import RaidCombat
from module.ui.assets import RAID_CHECK
from module.ui.assets import BACK_ARROW, RAID_CHECK
from module.ui.page import page_rpg_stage
@@ -195,6 +194,59 @@ def pt_ocr(raid):
class Raid(MapOperation, RaidCombat, CampaignEvent):
@property
def _raid_has_oil_icon(self):
"""
Game devs are too asshole to drop oil display for UI design
https://github.com/LmeSzinc/AzurLaneAutoScript/issues/5214
"""
if self.config.Campaign_Event == 'raid_20240328':
return False
return True
def check_oil(self):
limit = max(500, self.config.StopCondition_OilLimit)
if not (self.get_oil() < limit):
return False
timeout = Timer(1, count=2).start()
while True:
self.device.screenshot()
if self.appear(BACK_ARROW, offset=(5, 2)):
break
if timeout.reached():
logger.warning('Assumes that OCR_OIL is stable')
break
if self.get_oil() < limit:
return True
else:
return False
def triggered_stop_condition(self, oil_check=False, pt_check=False, coin_check=False):
"""
Returns:
bool: If triggered a stop condition.
"""
# Oil limit
if oil_check:
if self.check_oil():
logger.hr('Triggered stop condition: Oil limit')
self.config.task_delay(minute=(120, 240))
return True
# Event limit
if pt_check:
if self.event_pt_limit_triggered():
logger.hr('Triggered stop condition: Event PT limit')
return True
# TaskBalancer
if coin_check:
if self.config.TaskBalancer_Enable and self.triggered_task_balancer():
logger.hr('Triggered stop condition: Coin limit')
self.handle_task_balancer()
return True
return False
def combat_preparation(self, balance_hp=False, emotion_reduce=False, auto='combat_auto', fleet_index=1):
"""
Args:
@@ -204,32 +256,17 @@ class Raid(MapOperation, RaidCombat, CampaignEvent):
fleet_index (int):
"""
logger.info('Combat preparation.')
skip_first_screenshot = True
# No need, already waited in `raid_execute_once()`
# if emotion_reduce:
# self.emotion.wait(fleet_index)
@run_once
def check_oil():
if self.get_oil() < max(500, self.config.StopCondition_OilLimit):
logger.hr('Triggered oil limit')
raise OilExhausted
@run_once
def check_coin():
if self.config.TaskBalancer_Enable and self.triggered_task_balancer():
logger.hr('Triggered stop condition: Coin limit')
self.handle_task_balancer()
return True
for _ in self.loop():
if self.appear(BATTLE_PREPARATION, offset=(30, 20)):
if self.handle_combat_automation_set(auto=auto == 'combat_auto'):
continue
check_oil()
check_coin()
if self._raid_has_oil_icon and self.triggered_stop_condition(oil_check=True, coin_check=True):
self.config.task_stop()
if self.handle_raid_ticket_use():
continue
if self.handle_retirement():
@@ -286,7 +323,7 @@ class Raid(MapOperation, RaidCombat, CampaignEvent):
if self.appear(entrance, offset=(10, 10), interval=5):
# Items appear from right
# Check PT when entrance appear
if self.event_pt_limit_triggered():
if self.triggered_stop_condition(pt_check=True):
self.config.task_stop()
self.device.click(entrance)
continue