1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 12:59:25 +08:00

add: migrate exercise delay implementation

This commit is contained in:
0O0o0oOoO00
2025-09-15 18:01:01 +08:00
parent 5e4e00eacb
commit e4323b6c77

View File

@@ -250,9 +250,14 @@ class Exercise(ExerciseCombat):
self.config.task_delay(success=False)
import datetime
from module.config.utils import get_server_next_update
class Exercise(Exercise):
def run(self):
self.ui_ensure(page_exercise)
server_update = self.config.Scheduler_ServerUpdate
self.opponent_change_count = self._get_opponent_change_count()
logger.attr("Change_opponent_count", self.opponent_change_count)
@@ -262,7 +267,7 @@ class Exercise(Exercise):
if not self.server_support_ocr_reset_remain():
logger.info(f'Server {self.config.SERVER} does not yet support OCR exercise reset remain time')
logger.info('Please contact the developer to improve as soon as possible')
remain_time = timedelta(days=0)
remain_time = datetime.timedelta(days=0)
else:
remain_time = OCR_PERIOD_REMAIN.ocr(self.device.image)
logger.info(f'Exercise period remain: {remain_time}')
@@ -273,13 +278,28 @@ class Exercise(Exercise):
if admiral_start > int(remain_time.total_seconds() // 3600) >= admiral_end: # set time for getting admiral
logger.info('Reach set time for admiral trial, using all attempts.')
self.preserve = 0
forced_run = True
elif int(remain_time.total_seconds() // 3600) < 6: # if not set to "sun18", still depleting at sunday 18pm.
logger.info('Exercise period remain less than 6 hours, using all attempts.')
self.preserve = 0
forced_run = True
else:
logger.info(f'Preserve {self.preserve} exercise')
forced_run = False
else:
forced_run = False
while 1:
# Delay task to the configured time
if ((get_server_next_update(server_update) - datetime.datetime.now()).seconds >
3600 * self.config.Exercise_DelayUntilHoursBeforeNextUpdate) \
and not forced_run:
logger.warning(f'Exercise should run at {self.config.Exercise_DelayUntilHoursBeforeNextUpdate} '
f'hours before next update. Delay task to it.')
run = False
else:
run = True
while run:
self.remain = OCR_EXERCISE_REMAIN.ocr(self.device.image)
if self.remain <= self.preserve:
break
@@ -300,6 +320,13 @@ class Exercise(Exercise):
with self.config.multi_set():
self.config.set_record(Exercise_OpponentRefreshValue=self.opponent_change_count)
if self.remain <= self.preserve or self.opponent_change_count >= 5:
self.config.task_delay(server_update=True)
next_run = get_server_next_update(server_update) \
- datetime.timedelta(hours=self.config.Exercise_DelayUntilHoursBeforeNextUpdate)
now = datetime.datetime.now()
if next_run < now or run:
self.config.task_delay(server_update=True)
return
minutes_to_delay = int((next_run - now).total_seconds() / 60 + 1)
self.config.task_delay(minute=minutes_to_delay)
else:
self.config.task_delay(success=False)