Add: Rogue stop condition: weekly_point_reward

This commit is contained in:
LmeSzinc 2023-10-19 02:13:51 +08:00
parent 0237064dd0
commit c004af5346
6 changed files with 58 additions and 5 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -178,7 +178,7 @@ class StoredTrailblazePower(StoredCounter):
FIXED_TOTAL = 240 FIXED_TOTAL = 240
class StoredSimulatedUniverse(StoredCounter, StoredExpiredAt0400): class StoredSimulatedUniverse(StoredCounter, StoredExpiredAtMonday0400):
pass pass

View File

@ -13,6 +13,16 @@ LEVEL_CONFIRM = ButtonWrapper(
button=(990, 638, 1223, 676), button=(990, 638, 1223, 676),
), ),
) )
OCR_WEEKLY_POINT = ButtonWrapper(
name='OCR_WEEKLY_POINT',
share=Button(
file='./assets/share/rogue/entry/OCR_WEEKLY_POINT.png',
area=(130, 602, 382, 635),
search=(110, 582, 402, 655),
color=(54, 51, 50),
button=(130, 602, 382, 635),
),
)
OCR_WORLD = ButtonWrapper( OCR_WORLD = ButtonWrapper(
name='OCR_WORLD', name='OCR_WORLD',
share=Button( share=Button(

View File

@ -1,9 +1,10 @@
import re import re
from datetime import datetime, timedelta
from module.base.timer import Timer from module.base.timer import Timer
from module.exception import RequestHumanTakeover from module.exception import RequestHumanTakeover
from module.logger import logger from module.logger import logger
from module.ocr.ocr import Ocr from module.ocr.ocr import DigitCounter, Ocr
from tasks.base.assets.assets_base_main_page import ROGUE_LEAVE_FOR_NOW from tasks.base.assets.assets_base_main_page import ROGUE_LEAVE_FOR_NOW
from tasks.base.assets.assets_base_page import MAP_EXIT from tasks.base.assets.assets_base_page import MAP_EXIT
from tasks.base.page import page_guide, page_main, page_rogue from tasks.base.page import page_guide, page_main, page_rogue
@ -12,12 +13,20 @@ from tasks.dungeon.keywords.dungeon import Simulated_Universe_World_1
from tasks.dungeon.keywords.tab import Survival_Index from tasks.dungeon.keywords.tab import Survival_Index
from tasks.dungeon.ui import DungeonUI from tasks.dungeon.ui import DungeonUI
from tasks.forgotten_hall.assets.assets_forgotten_hall_ui import TELEPORT from tasks.forgotten_hall.assets.assets_forgotten_hall_ui import TELEPORT
from tasks.rogue.assets.assets_rogue_entry import LEVEL_CONFIRM, OCR_WORLD, WORLD_ENTER, WORLD_NEXT, WORLD_PREV from tasks.rogue.assets.assets_rogue_entry import (
LEVEL_CONFIRM,
OCR_WEEKLY_POINT,
OCR_WORLD,
WORLD_ENTER,
WORLD_NEXT,
WORLD_PREV,
)
from tasks.rogue.assets.assets_rogue_path import CONFIRM_PATH from tasks.rogue.assets.assets_rogue_path import CONFIRM_PATH
from tasks.rogue.assets.assets_rogue_reward import REWARD_CLOSE, REWARD_ENTER from tasks.rogue.assets.assets_rogue_reward import REWARD_CLOSE, REWARD_ENTER
from tasks.rogue.assets.assets_rogue_ui import ROGUE_LAUNCH from tasks.rogue.assets.assets_rogue_ui import ROGUE_LAUNCH
from tasks.rogue.entry.path import RoguePathHandler from tasks.rogue.entry.path import RoguePathHandler
from tasks.rogue.entry.reward import RogueRewardHandler from tasks.rogue.entry.reward import RogueRewardHandler
from tasks.rogue.exception import RogueReachedWeeklyPointLimit
def chinese_to_arabic(chinese_number: str) -> int: def chinese_to_arabic(chinese_number: str) -> int:
@ -248,6 +257,15 @@ class RogueEntry(DungeonUI, RogueRewardHandler, RoguePathHandler):
else: else:
self.goto_rogue() self.goto_rogue()
# Update rogue points
if datetime.now() - self.config.stored.SimulatedUniverse.time > timedelta(minutes=2):
ocr = DigitCounter(OCR_WEEKLY_POINT)
value, _, total = ocr.ocr_single_line(self.device.image)
self.config.stored.SimulatedUniverse.set(value, total)
# Check stop condition
if self.config.RogueWorld_StopCondition == 'weekly_point_reward':
if self.config.stored.SimulatedUniverse.is_full():
raise RogueReachedWeeklyPointLimit
# Enter # Enter
self._rogue_world_set(world) self._rogue_world_set(world)
self._rogue_world_enter() self._rogue_world_enter()

View File

@ -8,3 +8,11 @@ class RogueDomainExitNotFound(Exception):
class RogueRouteError(Exception): class RogueRouteError(Exception):
pass pass
class RogueReachedWeeklyPointLimit(Exception):
pass
class RogueReached100EliteBossLimit(Exception):
pass

View File

@ -1,6 +1,6 @@
from module.logger import logger from module.logger import logger
from tasks.rogue.entry.entry import RogueEntry from tasks.rogue.entry.entry import RogueEntry
from tasks.rogue.exception import RogueTeamNotPrepared from tasks.rogue.exception import RogueReachedWeeklyPointLimit, RogueTeamNotPrepared
from tasks.rogue.route.loader import RouteLoader from tasks.rogue.route.loader import RouteLoader
@ -19,13 +19,30 @@ class Rogue(RouteLoader, RogueEntry):
logger.error(f'Please prepare your team in {self.config.RogueWorld_World}') logger.error(f'Please prepare your team in {self.config.RogueWorld_World}')
self.rogue_world_exit() self.rogue_world_exit()
return False return False
except RogueReachedWeeklyPointLimit:
logger.hr('Reached rogue weekly point limit')
return False
self.rogue_run() self.rogue_run()
self.rogue_reward_claim() self.rogue_reward_claim()
return True return True
def run(self): def run(self):
self.rogue_once() while 1:
# Check stop condition
if self.config.RogueWorld_StopCondition == 'weekly_point_reward':
if self.config.stored.SimulatedUniverse.is_expired():
# Expired, do rogue
pass
elif self.config.stored.SimulatedUniverse.is_full():
logger.hr('Reached rogue weekly point limit')
break
# Run
success = self.rogue_once()
if not success:
break
self.config.task_delay(server_update=True) self.config.task_delay(server_update=True)