Add: Claim weekly rogue rewards (#147)

This commit is contained in:
LmeSzinc 2023-10-15 00:32:40 +08:00
parent 7f6bc78ccc
commit 16b8dc4a1d
10 changed files with 190 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -3,6 +3,56 @@ from module.base.button import Button, ButtonWrapper
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.button_extract ```
CLAIM_ALL = ButtonWrapper(
name='CLAIM_ALL',
share=Button(
file='./assets/share/rogue/reward/CLAIM_ALL.png',
area=(871, 524, 1146, 560),
search=(851, 504, 1166, 580),
color=(238, 186, 85),
button=(871, 524, 1146, 560),
),
)
REWARD_CHECK = ButtonWrapper(
name='REWARD_CHECK',
share=Button(
file='./assets/share/rogue/reward/REWARD_CHECK.png',
area=(152, 504, 187, 532),
search=(132, 484, 207, 552),
color=(131, 130, 126),
button=(152, 504, 187, 532),
),
)
REWARD_CLOSE = ButtonWrapper(
name='REWARD_CLOSE',
share=Button(
file='./assets/share/rogue/reward/REWARD_CLOSE.png',
area=(1139, 137, 1169, 167),
search=(1119, 117, 1189, 187),
color=(64, 64, 64),
button=(1139, 137, 1169, 167),
),
)
REWARD_ENTER = ButtonWrapper(
name='REWARD_ENTER',
share=Button(
file='./assets/share/rogue/reward/REWARD_ENTER.png',
area=(59, 601, 92, 629),
search=(39, 581, 112, 649),
color=(128, 128, 129),
button=(43, 583, 117, 657),
),
)
REWARD_RED_DOT = ButtonWrapper(
name='REWARD_RED_DOT',
share=Button(
file='./assets/share/rogue/reward/REWARD_RED_DOT.png',
area=(94, 582, 122, 610),
search=(74, 562, 142, 630),
color=(130, 67, 71),
button=(94, 582, 122, 610),
),
)
ROGUE_REPORT = ButtonWrapper(
name='ROGUE_REPORT',
share=Button(

View File

@ -4,6 +4,7 @@ from module.base.utils import area_offset
from module.logger import logger
from module.ocr.ocr import Digit, Ocr, OcrResultButton
from tasks.base.ui import UI
from tasks.rogue.assets.assets_rogue_reward import REWARD_ENTER
from tasks.rogue.assets.assets_rogue_ui import *
from tasks.rogue.keywords import RoguePath
@ -45,6 +46,9 @@ class RogueUI(UI):
def is_page_event(self):
return self.appear(PAGE_EVENT)
def is_page_rogue_main(self):
return self.appear(REWARD_ENTER)
def handle_obtain_item_popup(self, interval=5) -> bool:
"""After selecting some curio (e.g. Sealing_Wax_of_*), there will be a popup after back to main page"""
if self.appear_then_click(OBTAIN_ITEM_POPUP, interval=interval):

115
tasks/rogue/reward.py Normal file
View File

@ -0,0 +1,115 @@
from module.base.timer import Timer
from module.logger import logger
from tasks.rogue.assets.assets_rogue_reward import CLAIM_ALL, REWARD_CHECK, REWARD_CLOSE, REWARD_ENTER, REWARD_RED_DOT
from tasks.rogue.bleesing.ui import RogueUI
class RogueRewardHandler(RogueUI):
def _rogue_reward_appear(self) -> bool:
"""
Pages:
in: is_page_rogue_main()
"""
if self.image_color_count(REWARD_RED_DOT, color=(214, 45, 47), threshold=221, count=50):
return True
return False
def _rogue_reward_enter(self, skip_first_screenshot=True):
"""
Pages:
in: is_page_rogue_main()
out: REWARD_CHECK
"""
logger.info('Rogue reward enter')
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.appear(REWARD_CHECK):
break
if self.appear_then_click(REWARD_ENTER, interval=2):
continue
def _rogue_reward_exit(self, skip_first_screenshot=True):
"""
Pages:
in: REWARD_CHECK
out: is_page_rogue_main()
"""
logger.info('Rogue reward exit')
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.is_page_rogue_main():
break
if self.appear_then_click(REWARD_CLOSE, interval=2):
continue
if self.handle_reward():
continue
def _rogue_reward_claim(self, skip_first_screenshot=True):
"""
Pages:
in: REWARD_CHECK, CLAIM_ALL
out: REWARD_CHECK
"""
logger.info('Rogue reward claim')
claimed = False
appear = False
timeout = Timer(2, count=10).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if claimed:
if self.appear(REWARD_CHECK):
break
if self.is_page_rogue_main():
break
if not appear and timeout.reached():
logger.warning('Rogue reward claim timeout, CLAIM_ALL not found')
break
if self.handle_reward():
claimed = True
continue
if self.interval_is_reached(CLAIM_ALL, interval=1):
if self.image_color_count(CLAIM_ALL, color=(255, 199, 89), threshold=221, count=500):
self.device.click(CLAIM_ALL)
self.interval_reset(CLAIM_ALL)
appear = True
continue
def rogue_reward_claim(self):
"""
Claim possible rogue rewards.
Returns:
bool: If claimed.
Pages:
in: is_page_rogue_main()
out: is_page_rogue_main()
"""
if self._rogue_reward_appear():
logger.hr('Rogue reward claim', level=2)
self._rogue_reward_enter()
self._rogue_reward_claim()
self._rogue_reward_exit()
return True
else:
logger.info('No rogue reward')
return False

21
tasks/rogue/rogue.py Normal file
View File

@ -0,0 +1,21 @@
from tasks.rogue.reward import RogueRewardHandler
from tasks.rogue.route.loader import RouteLoader
class RogueHandler(RouteLoader, RogueRewardHandler):
def rogue_once(self):
"""
Do a complete rogue run.
Pages:
in: page_rogue, is_page_rogue_main()
out: page_rogue, is_page_rogue_main()
"""
self.rogue_run()
self.rogue_reward_claim()
if __name__ == '__main__':
self = RogueHandler('src', task='Rogue')
self.device.screenshot()
self.rogue_once()