mirror of
https://gitee.com/sui-feng-cb/AzurLaneAutoScript1
synced 2026-05-11 20:58:27 +08:00
Add: buy dorm food when oil overflow during commission receive
This commit is contained in:
@@ -21,6 +21,7 @@ MASK_DORM = Mask(file='./assets/mask/MASK_DORM.png')
|
||||
DORM_CAMERA_SWIPE = (300, 250)
|
||||
DORM_CAMERA_RANDOM = (-20, -20, 20, 20)
|
||||
OCR_SLOT = DigitCounter(OCR_DORM_SLOT, letter=(107, 89, 82), threshold=128, name='OCR_DORM_SLOT')
|
||||
OCR_BUY_FOOD_AMOUNT = Digit(OCR_DORM_BUY_FOOD_AMOUNT, letter=(96, 96, 100), threshold=128, name='OCR_DORM_BUY_FOOD_AMOUNT')
|
||||
|
||||
|
||||
class OcrDormFood(DigitCounter):
|
||||
@@ -199,7 +200,7 @@ class RewardDorm(UI):
|
||||
f'does not support DOWN/UP events, use multi-click instead')
|
||||
self.device.multi_click(button, count)
|
||||
|
||||
def dorm_view_reset(self, skip_first_screenshot=True):
|
||||
def dorm_view_reset(self):
|
||||
"""
|
||||
Use Dorm manage and Back to reset dorm view.
|
||||
|
||||
@@ -208,12 +209,7 @@ class RewardDorm(UI):
|
||||
out: page_dorm
|
||||
"""
|
||||
logger.info('Dorm view reset')
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop():
|
||||
# End
|
||||
if self.appear(DORM_MANAGE_CHECK, offset=(20, 20)):
|
||||
break
|
||||
@@ -226,13 +222,7 @@ class RewardDorm(UI):
|
||||
if self.appear_then_click(DORM_FURNITURE_CONFIRM, offset=(30, 30), interval=3):
|
||||
continue
|
||||
|
||||
skip_first_screenshot = True
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop():
|
||||
if self.appear(DORM_MANAGE, offset=(20, 20)):
|
||||
break
|
||||
|
||||
@@ -251,17 +241,11 @@ class RewardDorm(UI):
|
||||
logger.hr('Dorm collect')
|
||||
|
||||
self.ensure_no_info_bar()
|
||||
skip_first_screenshot = True
|
||||
|
||||
# Set a timer to avoid Alas failing to detect the info_bar by accident.
|
||||
timeout = Timer(1.5, count=3).start()
|
||||
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop():
|
||||
# Handle all popups
|
||||
if self.ui_additional(get_ship=False):
|
||||
continue
|
||||
@@ -312,11 +296,7 @@ class RewardDorm(UI):
|
||||
skip_first_screenshot = True
|
||||
|
||||
self.popup_interval_clear()
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
for _ in self.loop(skip_first=skip_first_screenshot):
|
||||
# End
|
||||
if self.appear(DORM_FEED_CHECK, offset=(20, 20)):
|
||||
break
|
||||
@@ -354,13 +334,7 @@ class RewardDorm(UI):
|
||||
timeout = Timer(1.5, count=3).start()
|
||||
food: t.List[Food] = []
|
||||
fill: int = 0
|
||||
skip_first_screenshot = True
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop():
|
||||
# End
|
||||
if timeout.reached():
|
||||
logger.warning('Get dorm food timeout, probably because food is empty')
|
||||
@@ -406,19 +380,14 @@ class RewardDorm(UI):
|
||||
logger.warning('Dorm feed run count reached')
|
||||
return 10
|
||||
|
||||
def dorm_feed_enter(self, skip_first_screenshot=False):
|
||||
def dorm_feed_enter(self):
|
||||
"""
|
||||
Pages:
|
||||
in: DORM_CHECK
|
||||
out: DORM_FEED_CHECK
|
||||
"""
|
||||
self.interval_clear(DORM_CHECK)
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop(skip_first=False):
|
||||
# End
|
||||
if self.appear(DORM_FEED_CHECK, offset=(20, 20)):
|
||||
break
|
||||
@@ -442,19 +411,14 @@ class RewardDorm(UI):
|
||||
logger.info(f'{DORM_FURNITURE_SHOP_FIRST_SELECTED} -> {DORM_FURNITURE_SHOP_QUIT}')
|
||||
continue
|
||||
|
||||
def dorm_feed_quit(self, skip_first_screenshot=True):
|
||||
def dorm_feed_quit(self):
|
||||
"""
|
||||
Pages:
|
||||
in: DORM_FEED_CHECK
|
||||
out: DORM_CHECK
|
||||
"""
|
||||
self.interval_clear(DORM_FEED_CHECK)
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop():
|
||||
# End
|
||||
if self.appear(DORM_CHECK):
|
||||
break
|
||||
@@ -469,13 +433,61 @@ class RewardDorm(UI):
|
||||
self.interval_clear(DORM_CHECK)
|
||||
continue
|
||||
|
||||
def dorm_run(self, feed=True, collect=True, buy_furniture=False):
|
||||
def dorm_buy_food_enter(self):
|
||||
"""
|
||||
Pages:
|
||||
in: DORM_FEED_CHECK
|
||||
out: DORM_BUY_FOOD_CHECK
|
||||
"""
|
||||
self.interval_clear(DORM_FEED_CHECK)
|
||||
for _ in self.loop():
|
||||
# End
|
||||
if self.appear(DORM_BUY_FOOD_CHECK, offset=(20, 20)):
|
||||
break
|
||||
|
||||
if self.match_template_color(DORM_FEED_CHECK, offset=(20, 20), interval=5):
|
||||
self.device.click(DORM_BUY_FOOD_ENTER)
|
||||
continue
|
||||
|
||||
def dorm_buy_food(self, amount):
|
||||
"""
|
||||
Pages:
|
||||
in: DORM_BUY_FOOD_CHECK
|
||||
out: DORM_BUY_FOOD_CHECK
|
||||
"""
|
||||
logger.hr('Dorm buy food')
|
||||
index_offset = (20, 20)
|
||||
# In case either -/+ shift position, use
|
||||
# shipyard ocr trick to accurately parse
|
||||
self.appear(FOOD_PLUS, offset=index_offset)
|
||||
self.appear(FOOD_MINUS, offset=index_offset)
|
||||
|
||||
self.ui_ensure_index(amount, letter=OCR_BUY_FOOD_AMOUNT, prev_button=FOOD_MINUS, next_button=FOOD_PLUS,
|
||||
skip_first_screenshot=True)
|
||||
return True
|
||||
|
||||
def dorm_buy_food_confirm(self):
|
||||
"""
|
||||
Pages:
|
||||
in: DORM_BUY_FOOD_CHECK
|
||||
out: DORM_FEED_CHECK
|
||||
"""
|
||||
self.interval_clear(DORM_BUY_FOOD_CONFIRM)
|
||||
for _ in self.loop():
|
||||
# End
|
||||
if self.match_template_color(DORM_FEED_CHECK, offset=(20, 20)):
|
||||
break
|
||||
|
||||
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):
|
||||
"""
|
||||
Pages:
|
||||
in: Any page
|
||||
out: page_dorm
|
||||
"""
|
||||
if not feed and not collect and not buy_furniture:
|
||||
if not feed and not collect and not buy_furniture and buy_food <= 0:
|
||||
return
|
||||
|
||||
self.ui_ensure(page_dormmenu)
|
||||
@@ -504,7 +516,15 @@ class RewardDorm(UI):
|
||||
logger.hr('Dorm buy furniture', level=1)
|
||||
BuyFurniture(self.config, self.device).run()
|
||||
|
||||
def get_dorm_ship_amount(self, skip_first_screenshot=True):
|
||||
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:
|
||||
@@ -517,12 +537,7 @@ class RewardDorm(UI):
|
||||
"""
|
||||
timeout = Timer(2, count=4).start()
|
||||
current = 0
|
||||
while 1:
|
||||
if skip_first_screenshot:
|
||||
skip_first_screenshot = False
|
||||
else:
|
||||
self.device.screenshot()
|
||||
|
||||
for _ in self.loop():
|
||||
# Handle popups
|
||||
if self.appear_then_click(DORM_FURNITURE_CONFIRM, offset=(30, 30), interval=3):
|
||||
timeout.reset()
|
||||
|
||||
Reference in New Issue
Block a user