1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-05-21 03:42:25 +08:00
This commit is contained in:
2026-05-11 19:49:34 +08:00
11 changed files with 130 additions and 25 deletions

View File

@@ -15,6 +15,7 @@ EVENT_20201126_DETAIL = Button(area={'cn': (617, 470, 659, 510), 'en': (617, 470
EVENT_20201126_DETAIL_CHECK = Button(area={'cn': (1198, 20, 1244, 65), 'en': (1198, 20, 1244, 65), 'jp': (1198, 20, 1244, 65), 'tw': (1198, 20, 1244, 65)}, color={'cn': (176, 138, 121), 'en': (176, 138, 121), 'jp': (176, 138, 121), 'tw': (176, 138, 121)}, button={'cn': (1198, 20, 1244, 65), 'en': (1198, 20, 1244, 65), 'jp': (1198, 20, 1244, 65), 'tw': (1198, 20, 1244, 65)}, file={'cn': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png', 'en': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png', 'jp': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png', 'tw': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png'})
EVENT_20201126_DETAIL_WHITE = Button(area={'cn': (969, 94, 1030, 156), 'en': (969, 94, 1030, 156), 'jp': (969, 94, 1030, 156), 'tw': (969, 94, 1030, 156)}, color={'cn': (178, 148, 165), 'en': (178, 148, 165), 'jp': (178, 148, 165), 'tw': (178, 148, 165)}, button={'cn': (969, 94, 1030, 156), 'en': (969, 94, 1030, 156), 'jp': (969, 94, 1030, 156), 'tw': (969, 94, 1030, 156)}, file={'cn': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png', 'en': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png', 'jp': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png', 'tw': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png'})
EVENT_20201126_ENTRANCE = Button(area={'cn': (927, 599, 1054, 631), 'en': (927, 599, 1054, 631), 'jp': (927, 599, 1054, 631), 'tw': (927, 599, 1054, 631)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (927, 599, 1054, 631), 'en': (927, 599, 1054, 631), 'jp': (927, 599, 1054, 631), 'tw': (927, 599, 1054, 631)}, file={'cn': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png'})
EVENT_20201126_ENTRANCE_TEMP = Button(area={'cn': (1022, 375, 1100, 398), 'en': (1022, 375, 1100, 398), 'jp': (1022, 375, 1100, 398), 'tw': (1022, 375, 1100, 398)}, color={'cn': (143, 197, 241), 'en': (143, 197, 241), 'jp': (143, 197, 241), 'tw': (143, 197, 241)}, button={'cn': (1022, 375, 1100, 398), 'en': (1022, 375, 1100, 398), 'jp': (1022, 375, 1100, 398), 'tw': (1022, 375, 1100, 398)}, file={'cn': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'en': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'jp': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'tw': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png'})
EVENT_20201126_PT_ICON = Button(area={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, color={'cn': (231, 121, 159), 'en': (231, 121, 159), 'jp': (231, 121, 159), 'tw': (231, 121, 159)}, button={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, file={'cn': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20201126_PT_ICON.png'})
EVENT_20221124_ENTRANCE = Button(area={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, color={'cn': (207, 168, 148), 'en': (207, 168, 148), 'jp': (207, 168, 148), 'tw': (207, 168, 148)}, button={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, file={'cn': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png'})
EVENT_20221124_PT_ICON = Button(area={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, color={'cn': (151, 116, 139), 'en': (152, 115, 138), 'jp': (151, 116, 139), 'tw': (151, 116, 139)}, button={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, file={'cn': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20221124_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20221124_PT_ICON.png'})

View File

@@ -12,7 +12,7 @@ from module.commission.project import COMMISSION_FILTER, Commission
from module.config.config_generated import GeneratedConfig
from module.config.utils import get_server_last_update, get_server_next_update, nearest_future
from module.dorm.dorm import RewardDorm
from module.exception import GameStuckError
from module.exception import GameStuckError, OilMaxed, RequestHumanTakeover
from module.handler.info_handler import InfoHandler
from module.logger import logger
from module.map.map_grids import SelectedGrids
@@ -491,7 +491,7 @@ class RewardCommission(UI, InfoHandler):
if not self.daily_choose and not self.urgent_choose:
logger.info('No commission chose')
def commission_receive(self, skip_first_screenshot=True):
def _commission_receive(self, skip_first_screenshot=True):
"""
Args:
skip_first_screenshot:
@@ -559,11 +559,7 @@ class RewardCommission(UI, InfoHandler):
# handle oil maxed
if self.config.SERVER in ['cn']:
if self.appear(OIL_MAXED, offset=(20, 20), interval=3):
logger.info("Oil maxed, buy food to consume oil")
RewardDorm(self.config, self.device).dorm_run(
feed=False, collect=False, buy_furniture=False, buy_food=10)
self.ui_ensure(page_reward)
continue
raise OilMaxed
# Check GET_SHIP at last to handle random white background at page_main
for button in [GET_SHIP]:
if click_timer.reached() and self.appear(button, interval=1):
@@ -581,6 +577,27 @@ class RewardCommission(UI, InfoHandler):
return reward
def commission_receive(self):
"""
Returns:
bool: If rewarded.
Pages:
in: page_reward
out: page_commission
"""
for _ in range(3):
try:
reward = self._commission_receive()
return reward
except OilMaxed:
logger.info("Oil maxed, buy food to consume oil")
RewardDorm(self.config, self.device).dorm_food_run(amount=10)
self.ui_ensure(page_reward)
logger.critical(f'Failed to handle oil maxed after 3 trial')
raise RequestHumanTakeover
def run(self):
"""
Pages:

View File

@@ -1995,6 +1995,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -2423,6 +2424,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -2845,6 +2847,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -4670,6 +4673,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -5110,6 +5114,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -5550,6 +5555,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -5990,6 +5996,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [
@@ -6420,6 +6427,7 @@
"event_20260417_cn"
],
"option_tw": [
"event_20201126_cn",
"event_20260417_cn"
],
"option_bold": [

View File

@@ -742,7 +742,7 @@
"event_20201002_en": "Counterattack Within the Fjord",
"event_20201012_cn": "復刻劃破海空之翼",
"event_20201029_cn": "激唱的UNIVERSE",
"event_20201126_cn": "假日航線",
"event_20201126_cn": "復刻假日航線",
"event_20201229_cn": "復刻-負象限作戰",
"event_20210121_cn": "復刻神聖的悲喜劇",
"event_20210225_cn": "復刻破曉冰華",

View File

@@ -481,13 +481,35 @@ class RewardDorm(UI):
if self.appear_then_click(DORM_BUY_FOOD_CONFIRM, offset=(20, 20), interval=5):
continue
def dorm_run(self, feed=True, collect=True, buy_furniture=False, buy_food=0):
def dorm_food_run(self, amount):
"""
Args:
amount (int): amount of food to buy
Pages:
in: Any page
out: page_dorm
"""
if amount <= 0:
return
self.ui_ensure(page_dormmenu)
self.handle_info_bar()
self.ui_goto(page_dorm, skip_first_screenshot=True)
logger.hr('Dorm buy food', level=1)
self.dorm_feed_enter()
self.dorm_buy_food_enter()
self.dorm_buy_food(amount=amount)
self.dorm_buy_food_confirm()
self.dorm_feed_quit()
def dorm_run(self, feed=True, collect=True, buy_furniture=False):
"""
Pages:
in: Any page
out: page_dorm
"""
if not feed and not collect and not buy_furniture and buy_food <= 0:
if not feed and not collect and not buy_furniture:
return
self.ui_ensure(page_dormmenu)
@@ -516,19 +538,8 @@ class RewardDorm(UI):
logger.hr('Dorm buy furniture', level=1)
BuyFurniture(self.config, self.device).run()
if buy_food > 0:
logger.hr('Dorm buy food', level=1)
self.dorm_feed_enter()
self.dorm_buy_food_enter()
self.dorm_buy_food(amount=buy_food)
self.dorm_buy_food_confirm()
self.dorm_feed_quit()
def get_dorm_ship_amount(self):
"""
Args:
skip_first_screenshot:
Returns:
int: Number of ships in dorm

View File

@@ -6,6 +6,10 @@ class OilExhausted(Exception):
pass
class OilMaxed(Exception):
pass
class MapDetectionError(Exception):
pass

View File

@@ -337,8 +337,8 @@ class InfoHandler(ModuleBase):
list[Button]: List of story options, from upper to bottom. If no option found, return an empty list.
"""
# Area to detect the options, should include at least 3 options.
story_option_area = (315, 130, 965, 555)
story_detect_area = (330, 130, 355, 555)
story_option_area = (330, 135, 980, 555)
story_detect_area = (330, 135, 355, 555)
story_option_color = (247, 247, 247)
image = color_similarity_2d(self.image_crop(story_detect_area, copy=False), color=story_option_color)