From 51e49e20770bd76e4c319c83a2025b07175c2095 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 31 Aug 2023 01:06:24 +0800 Subject: [PATCH] Add: Link task BattlePass to Dungeon, Assignment, DailyQuest --- config/template.json | 4 ++ module/config/argument/args.json | 20 +++++++- module/config/argument/argument.yaml | 12 ++++- module/config/argument/stored.json | 40 +++++++++++++-- module/config/argument/task.yaml | 1 + module/config/config.py | 14 +++++- module/config/config_generated.py | 4 ++ module/config/config_manual.py | 2 +- module/config/i18n/en-US.json | 14 ++++++ module/config/i18n/ja-JP.json | 14 ++++++ module/config/i18n/zh-CN.json | 14 ++++++ module/config/i18n/zh-TW.json | 14 ++++++ module/config/stored/classes.py | 62 +++++++++++++++++++++++- module/config/stored/stored_generated.py | 4 ++ module/webui/app.py | 3 ++ tasks/assignment/assignment.py | 12 +++++ tasks/assignment/dispatch.py | 2 + tasks/battle_pass/battle_pass.py | 21 ++++++-- tasks/daily/daily_quest.py | 20 +++++++- tasks/dungeon/dungeon.py | 10 +++- 20 files changed, 268 insertions(+), 19 deletions(-) diff --git a/config/template.json b/config/template.json index c05b72df5..172acfe23 100644 --- a/config/template.json +++ b/config/template.json @@ -106,6 +106,10 @@ "NextRun": "2020-01-01 00:00:00", "Command": "BattlePass", "ServerUpdate": "04:00" + }, + "BattlePassStorage": { + "BattlePassLevel": {}, + "BattlePassTodayQuest": {} } }, "Assignment": { diff --git a/module/config/argument/args.json b/module/config/argument/args.json index ae1001b9f..c745ba0d3 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -384,7 +384,7 @@ "value": {}, "display": "hide", "stored": "StoredSimulatedUniverse", - "order": 5, + "order": 6, "color": "#8fb5fe" } } @@ -834,6 +834,22 @@ "value": "04:00", "display": "hide" } + }, + "BattlePassStorage": { + "BattlePassLevel": { + "type": "stored", + "value": {}, + "display": "hide", + "stored": "StoredBattlePassLevel", + "order": 5, + "color": "#cbe45b" + }, + "BattlePassTodayQuest": { + "type": "stored", + "value": {}, + "display": "hide", + "stored": "StoredBattlePassTodayQuest" + } } }, "Assignment": { @@ -963,7 +979,7 @@ "display": "hide", "stored": "StoredAssignment", "order": 3, - "color": "#deba95" + "color": "#79dbc4" } } } diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 383436c54..79395b9d1 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -117,7 +117,7 @@ DungeonStorage: stored: StoredDungeonDouble SimulatedUniverse: stored: StoredSimulatedUniverse - order: 5 + order: 6 color: "#8fb5fe" AchievableQuest: @@ -135,6 +135,14 @@ DailyStorage: DailyQuest: stored: StoredDaily +BattlePassStorage: + BattlePassLevel: + stored: StoredBattlePassLevel + order: 5 + color: "#cbe45b" + BattlePassTodayQuest: + stored: StoredBattlePassTodayQuest + Assignment: # Options in Name_x will be injected in config updater Name_1: @@ -155,4 +163,4 @@ Assignment: Assignment: stored: StoredAssignment order: 3 - color: "#deba95" + color: "#79dbc4" diff --git a/module/config/argument/stored.json b/module/config/argument/stored.json index a42f73750..d495e6aa3 100644 --- a/module/config/argument/stored.json +++ b/module/config/argument/stored.json @@ -6,7 +6,7 @@ "stored": "StoredTrailblazePower", "attrs": { "time": "2020-01-01 00:00:00", - "total": 180, + "total": 240, "value": 0 }, "order": 1, @@ -36,7 +36,20 @@ "value": 0 }, "order": 3, - "color": "#deba95" + "color": "#79dbc4" + }, + "BattlePassLevel": { + "name": "BattlePassLevel", + "path": "BattlePass.BattlePassStorage.BattlePassLevel", + "i18n": "BattlePassStorage.BattlePassLevel.name", + "stored": "StoredBattlePassLevel", + "attrs": { + "time": "2020-01-01 00:00:00", + "total": 50, + "value": 0 + }, + "order": 5, + "color": "#cbe45b" }, "SimulatedUniverse": { "name": "SimulatedUniverse", @@ -48,7 +61,7 @@ "total": 0, "value": 0 }, - "order": 5, + "order": 6, "color": "#8fb5fe" }, "DungeonDouble": { @@ -76,7 +89,26 @@ "quest3": "", "quest4": "", "quest5": "", - "quest6": "" + "quest6": "", + "total": 6, + "value": 0 + }, + "order": 0, + "color": "#777777" + }, + "BattlePassTodayQuest": { + "name": "BattlePassTodayQuest", + "path": "BattlePass.BattlePassStorage.BattlePassTodayQuest", + "i18n": "BattlePassStorage.BattlePassTodayQuest.name", + "stored": "StoredBattlePassTodayQuest", + "attrs": { + "time": "2020-01-01 00:00:00", + "quest1": "", + "quest2": "", + "quest3": "", + "quest4": "", + "total": 4, + "value": 0 }, "order": 0, "color": "#777777" diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index c6cb6e65a..f9e9a069e 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -34,6 +34,7 @@ Daily: - DailyStorage BattlePass: - Scheduler + - BattlePassStorage Assignment: - Scheduler - Assignment diff --git a/module/config/config.py b/module/config/config.py index 79d16abf8..a54d475b4 100644 --- a/module/config/config.py +++ b/module/config/config.py @@ -490,14 +490,24 @@ class AzurLaneConfig(ConfigUpdater, ManualConfig, GeneratedConfig, ConfigWatcher TaskEnd: Call task `DailyQuest` and stop current task """ if self.stored.DailyActivity.is_expired(): - logger.info('Daily activity expired, call task to update') + logger.info('DailyActivity expired, call task to update') self.task_call('DailyQuest') self.task_stop() if self.stored.DailyQuest.is_expired(): - logger.info('Daily quests expired, call task to update') + logger.info('DailyQuest expired, call task to update') self.task_call('DailyQuest') self.task_stop() + def update_battle_pass_quests(self): + """ + Raises: + TaskEnd: Call task `BattlePass` and stop current task + """ + if self.stored.BattlePassTodayQuest.is_expired(): + logger.info('BattlePassTodayQuest expired, call task to update') + self.task_call('BattlePass') + self.task_stop() + @property def DEVICE_SCREENSHOT_METHOD(self): return self.Emulator_ScreenshotMethod diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 586279fd8..4ef5f57d3 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -90,6 +90,10 @@ class GeneratedConfig: DailyStorage_DailyActivity = {} DailyStorage_DailyQuest = {} + # Group `BattlePassStorage` + BattlePassStorage_BattlePassLevel = {} + BattlePassStorage_BattlePassTodayQuest = {} + # Group `Assignment` Assignment_Name_1 = 'Nameless_Land_Nameless_People' # Nine_Billion_Names, Destruction_of_the_Destroyer, Winter_Soldiers, Born_to_Obey, Root_Out_the_Turpitude, Fire_Lord_Inflames_Blades_of_War, Nameless_Land_Nameless_People, Akashic_Records, The_Invisible_Hand, Abandoned_and_Insulted, Spring_of_Life, The_Land_of_Gold, The_Blossom_in_the_Storm, Legend_of_the_Puppet_Master, The_Wages_of_Humanity Assignment_Name_2 = 'Akashic_Records' # Nine_Billion_Names, Destruction_of_the_Destroyer, Winter_Soldiers, Born_to_Obey, Root_Out_the_Turpitude, Fire_Lord_Inflames_Blades_of_War, Nameless_Land_Nameless_People, Akashic_Records, The_Invisible_Hand, Abandoned_and_Insulted, Spring_of_Life, The_Land_of_Gold, The_Blossom_in_the_Storm, Legend_of_the_Puppet_Master, The_Wages_of_Humanity diff --git a/module/config/config_manual.py b/module/config/config_manual.py index 1f4893bbc..cec7af792 100644 --- a/module/config/config_manual.py +++ b/module/config/config_manual.py @@ -8,7 +8,7 @@ class ManualConfig: SCHEDULER_PRIORITY = """ Restart - > DailyQuest > Dungeon > Assignment > BattlePass + > BattlePass > DailyQuest > Dungeon > Assignment """ """ diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index a298e8d0e..d0d15b34c 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -570,6 +570,20 @@ "help": "" } }, + "BattlePassStorage": { + "_info": { + "name": "BattlePassStorage._info.name", + "help": "BattlePassStorage._info.help" + }, + "BattlePassLevel": { + "name": "Honor", + "help": "" + }, + "BattlePassTodayQuest": { + "name": "Honor Mission", + "help": "" + } + }, "Assignment": { "_info": { "name": "Assignment Settings", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 29b2f2a07..aabad204a 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -570,6 +570,20 @@ "help": "DailyStorage.DailyQuest.help" } }, + "BattlePassStorage": { + "_info": { + "name": "BattlePassStorage._info.name", + "help": "BattlePassStorage._info.help" + }, + "BattlePassLevel": { + "name": "BattlePassStorage.BattlePassLevel.name", + "help": "BattlePassStorage.BattlePassLevel.help" + }, + "BattlePassTodayQuest": { + "name": "BattlePassStorage.BattlePassTodayQuest.name", + "help": "BattlePassStorage.BattlePassTodayQuest.help" + } + }, "Assignment": { "_info": { "name": "依頼設定", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 66fdf8950..1e69c3f04 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -570,6 +570,20 @@ "help": "" } }, + "BattlePassStorage": { + "_info": { + "name": "BattlePassStorage._info.name", + "help": "BattlePassStorage._info.help" + }, + "BattlePassLevel": { + "name": "无名勋礼", + "help": "" + }, + "BattlePassTodayQuest": { + "name": "无名勋礼任务", + "help": "" + } + }, "Assignment": { "_info": { "name": "委托设置", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 134e733f7..7f5a63e58 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -570,6 +570,20 @@ "help": "" } }, + "BattlePassStorage": { + "_info": { + "name": "BattlePassStorage._info.name", + "help": "BattlePassStorage._info.help" + }, + "BattlePassLevel": { + "name": "無名勳禮", + "help": "" + }, + "BattlePassTodayQuest": { + "name": "無名勳禮任務", + "help": "" + } + }, "Assignment": { "_info": { "name": "委託設定", diff --git a/module/config/stored/classes.py b/module/config/stored/classes.py index 9548b523d..e292e4931 100644 --- a/module/config/stored/classes.py +++ b/module/config/stored/classes.py @@ -177,7 +177,7 @@ class StoredAssignment(StoredCounter): pass -class StoredDaily(StoredExpiredAt0400): +class StoredDaily(StoredCounter, StoredExpiredAt0400): quest1 = '' quest2 = '' quest3 = '' @@ -185,6 +185,8 @@ class StoredDaily(StoredExpiredAt0400): quest5 = '' quest6 = '' + FIXED_TOTAL = 6 + def load_quests(self): """ Returns: @@ -211,6 +213,7 @@ class StoredDaily(StoredExpiredAt0400): from tasks.daily.keywords import DailyQuest quests = [q.name if isinstance(q, DailyQuest) else q for q in quests] with self._config.multi_set(): + self.set(value=max(self.FIXED_TOTAL - len(quests), 0)) try: self.quest1 = quests[0] except IndexError: @@ -240,3 +243,60 @@ class StoredDaily(StoredExpiredAt0400): class StoredDungeonDouble(StoredExpiredAt0400): calyx = 0 relic = 0 + + +class StoredBattlePassLevel(StoredCounter): + FIXED_TOTAL = 50 + + +class StoredBattlePassTodayQuest(StoredCounter, StoredExpiredAt0400): + quest1 = '' + quest2 = '' + quest3 = '' + quest4 = '' + + FIXED_TOTAL = 4 + + def load_quests(self): + """ + Returns: + list[DailyQuest]: Note that must check if quests are expired + """ + # BattlePassQuest should be lazy loaded + from tasks.battle_pass.keywords import BattlePassQuest + quests = [] + for name in [self.quest1, self.quest2, self.quest3, self.quest4]: + if not name: + continue + try: + quest = BattlePassQuest.find(name) + quests.append(quest) + except ScriptError: + pass + return quests + + def write_quests(self, quests): + """ + Args: + quests (list[DailyQuest, str]): + """ + from tasks.battle_pass.keywords import BattlePassQuest + quests = [q.name if isinstance(q, BattlePassQuest) else q for q in quests] + with self._config.multi_set(): + self.set(value=max(self.FIXED_TOTAL - len(quests), 0)) + try: + self.quest1 = quests[0] + except IndexError: + self.quest1 = '' + try: + self.quest2 = quests[1] + except IndexError: + self.quest2 = '' + try: + self.quest3 = quests[2] + except IndexError: + self.quest3 = '' + try: + self.quest4 = quests[3] + except IndexError: + self.quest4 = '' diff --git a/module/config/stored/stored_generated.py b/module/config/stored/stored_generated.py index 18f8fe087..903a4ad20 100644 --- a/module/config/stored/stored_generated.py +++ b/module/config/stored/stored_generated.py @@ -1,6 +1,8 @@ from module.config.stored.classes import ( StoredAssignment, StoredBase, + StoredBattlePassLevel, + StoredBattlePassTodayQuest, StoredCounter, StoredDaily, StoredDailyActivity, @@ -21,4 +23,6 @@ class StoredGenerated: SimulatedUniverse = StoredSimulatedUniverse("Dungeon.DungeonStorage.SimulatedUniverse") DailyActivity = StoredDailyActivity("DailyQuest.DailyStorage.DailyActivity") DailyQuest = StoredDaily("DailyQuest.DailyStorage.DailyQuest") + BattlePassLevel = StoredBattlePassLevel("BattlePass.BattlePassStorage.BattlePassLevel") + BattlePassTodayQuest = StoredBattlePassTodayQuest("BattlePass.BattlePassStorage.BattlePassTodayQuest") Assignment = StoredAssignment("Assignment.Assignment.Assignment") diff --git a/module/webui/app.py b/module/webui/app.py index e220fd47c..d916b22ca 100644 --- a/module/webui/app.py +++ b/module/webui/app.py @@ -587,6 +587,9 @@ class AlasGUI(Frame): put_text(t("Gui.Overview.NoTask")).style("--overview-notask-text--") for arg, arg_dict in self.ALAS_STORED.items(): + # Skip order=0 + if not arg_dict.get("order", 0): + continue path = arg_dict["path"] if self.scope_expired_then_add(f"dashboard-time-value-{arg}", [ deep_get(self.alas_config.data, keys=f"{path}.value"), diff --git a/tasks/assignment/assignment.py b/tasks/assignment/assignment.py index e15877253..93abbe6ce 100644 --- a/tasks/assignment/assignment.py +++ b/tasks/assignment/assignment.py @@ -13,12 +13,14 @@ from tasks.assignment.keywords import ( KEYWORDS_ASSIGNMENT_GROUP, ) from tasks.base.page import page_assignment, page_menu +from tasks.battle_pass.keywords import KEYWORD_BATTLE_PASS_QUEST from tasks.daily.keywords import KEYWORDS_DAILY_QUEST from tasks.daily.synthesize import SynthesizeUI class Assignment(AssignmentClaim, SynthesizeUI): def run(self, assignments: list[AssignmentEntry] = None, duration: int = None): + self.config.update_battle_pass_quests() self.config.update_daily_quests() if assignments is None: @@ -35,6 +37,7 @@ class Assignment(AssignmentClaim, SynthesizeUI): duration = self.config.Assignment_Duration self.dispatched = dict() + self.has_new_dispatch = False self.ensure_scroll_top(page_menu) self.ui_ensure(page_assignment) # Iterate in user-specified order, return undispatched ones @@ -52,13 +55,22 @@ class Assignment(AssignmentClaim, SynthesizeUI): self._dispatch_remain(duration, remain - len(undispatched)) # Scheduler + logger.attr('has_new_dispatch', self.has_new_dispatch) delay = min(self.dispatched.values()) logger.info(f'Delay assignment check to {str(delay)}') with self.config.multi_set(): + # Check battle pass + quests = self.config.stored.BattlePassTodayQuest.load_quests() + if self.has_new_dispatch: + if KEYWORD_BATTLE_PASS_QUEST.Dispatch_1_assignments in quests: + logger.info('Achieved battle pass quest Dispatch_1_assignments') + self.config.task_call('BattlePass') + # Check daily quests = self.config.stored.DailyQuest.load_quests() if KEYWORDS_DAILY_QUEST.Go_on_assignment_1_time in quests: logger.info('Achieved daily quest Go_on_assignment_1_time') self.config.task_call('DailyQuest') + # Delay self self.config.task_delay(target=delay) def _check_inlist(self, assignments: list[AssignmentEntry], duration: int): diff --git a/tasks/assignment/dispatch.py b/tasks/assignment/dispatch.py index 04405f1f9..da556f025 100644 --- a/tasks/assignment/dispatch.py +++ b/tasks/assignment/dispatch.py @@ -19,6 +19,7 @@ ASSIGNMENT_DURATION_SWITCH.add_state('20', DURATION_20) class AssignmentDispatch(AssignmentUI): dispatched: dict[AssignmentEntry, datetime] = dict() + has_new_dispatch: bool = False def dispatch(self, assignment: AssignmentEntry, duration: int): """ @@ -39,6 +40,7 @@ class AssignmentDispatch(AssignmentUI): self._wait_until_assignment_started() self.dispatched[assignment] = datetime.now() + \ timedelta(hours=duration) + self.has_new_dispatch = True def _select_characters(self): """ diff --git a/tasks/battle_pass/battle_pass.py b/tasks/battle_pass/battle_pass.py index b4677b8ae..23ac94ad4 100644 --- a/tasks/battle_pass/battle_pass.py +++ b/tasks/battle_pass/battle_pass.py @@ -232,11 +232,18 @@ class BattlePassUI(UI): self.device.screenshot() self.claim_battle_pass_rewards() """ - previous_level = self._get_battle_pass_level() + with self.config.multi_set(): + previous_level = self._get_battle_pass_level() + self.config.stored.BattlePassLevel.set(previous_level) + quests = self.battle_pass_quests_recognition( + KEYWORD_BATTLE_PASS_MISSION_TAB.Today_Missions, has_scroll=False) + self.config.stored.BattlePassTodayQuest.write_quests(quests) if previous_level == self.MAX_LEVEL: return previous_level + claimed_exp = self._claim_exp() current_level = self._get_battle_pass_level() + self.config.stored.BattlePassLevel.set(current_level) if claimed_exp and current_level > previous_level: logger.info("Upgraded, go to claim rewards") self._claim_rewards() @@ -255,11 +262,17 @@ class BattlePassUI(UI): return [incomplete_quest for incomplete_quest, _ in split_and_pair_buttons(results, split_func=completed_state, relative_area=(0, 0, 800, 100))] - def battle_pass_quests_recognition(self, page: KEYWORD_BATTLE_PASS_MISSION_TAB, - has_scroll=True) -> list[BattlePassQuest]: + def battle_pass_quests_recognition( + self, + page: KEYWORD_BATTLE_PASS_MISSION_TAB, + has_scroll=True, + ) -> list[BattlePassQuest]: """ Args: - page: + page: One of the followings: + KEYWORD_BATTLE_PASS_MISSION_TAB.Today_Missions + KEYWORD_BATTLE_PASS_MISSION_TAB.This_Week_Missions + KEYWORD_BATTLE_PASS_MISSION_TAB.This_Period_Missions has_scroll: need to scroll to recognize all quests Returns: diff --git a/tasks/daily/daily_quest.py b/tasks/daily/daily_quest.py index ef1309690..18b45c72f 100644 --- a/tasks/daily/daily_quest.py +++ b/tasks/daily/daily_quest.py @@ -6,7 +6,12 @@ from module.ocr.ocr import Ocr, OcrResultButton from module.ocr.utils import split_and_pair_buttons from tasks.daily.assets.assets_daily_reward import * from tasks.daily.camera import CameraUI -from tasks.daily.keywords import DailyQuest, DailyQuestState, KEYWORDS_DAILY_QUEST, KEYWORDS_DAILY_QUEST_STATE +from tasks.daily.keywords import ( + DailyQuest, + DailyQuestState, + KEYWORDS_DAILY_QUEST, + KEYWORDS_DAILY_QUEST_STATE, +) from tasks.daily.synthesize import SynthesizeConsumablesUI, SynthesizeMaterialUI from tasks.daily.use_technique import UseTechniqueUI from tasks.dungeon.assets.assets_dungeon_ui import DAILY_TRAINING_CHECK @@ -14,6 +19,7 @@ from tasks.dungeon.keywords import KEYWORDS_DUNGEON_TAB from tasks.dungeon.ui import DungeonUI from tasks.item.consumable_usage import ConsumableUsageUI from tasks.item.relics import RelicsUI +from tasks.battle_pass.keywords import KEYWORD_BATTLE_PASS_QUEST class DailyQuestOcr(Ocr): @@ -231,6 +237,8 @@ class DailyQuestUI(DungeonUI): return done def run(self): + self.config.update_battle_pass_quests() + for _ in range(5): got = self.get_daily_rewards() if got: @@ -241,4 +249,12 @@ class DailyQuestUI(DungeonUI): break # Scheduler - self.config.task_delay(server_update=True) + with self.config.multi_set(): + # Check battle pass + if self.config.stored.DailyActivity.value == 500: + quests = self.config.stored.BattlePassTodayQuest.load_quests() + if KEYWORD_BATTLE_PASS_QUEST.Reach_500_on_Daily_Training_Activity in quests: + logger.info('Achieved battle pass quest Reach_500_on_Daily_Training_Activity') + self.config.task_call('BattlePass') + # Delay self + self.config.task_delay(server_update=True) diff --git a/tasks/dungeon/dungeon.py b/tasks/dungeon/dungeon.py index 7185ba774..a970a4590 100644 --- a/tasks/dungeon/dungeon.py +++ b/tasks/dungeon/dungeon.py @@ -5,7 +5,7 @@ from tasks.daily.keywords import KEYWORDS_DAILY_QUEST from tasks.dungeon.event import DungeonEvent from tasks.dungeon.keywords import DungeonList, KEYWORDS_DUNGEON_LIST, KEYWORDS_DUNGEON_TAB from tasks.dungeon.ui import DungeonUI - +from tasks.battle_pass.keywords import KEYWORD_BATTLE_PASS_QUEST class Dungeon(DungeonUI, DungeonEvent, Combat): called_daily_support = False @@ -117,6 +117,7 @@ class Dungeon(DungeonUI, DungeonEvent, Combat): support_character=support_character) def run(self): + self.config.update_battle_pass_quests() self.config.update_daily_quests() self.called_daily_support = False self.achieved_daily_quest = False @@ -220,8 +221,15 @@ class Dungeon(DungeonUI, DungeonEvent, Combat): logger.info(f'Currently has {current} need {cover} minutes to reach {limit}') logger.attr('achieved_daily_quest', self.achieved_daily_quest) with self.config.multi_set(): + # Check battle pass + quests = self.config.stored.BattlePassTodayQuest.load_quests() + if KEYWORD_BATTLE_PASS_QUEST.Consume_1_Trailblaze_Power in quests: + logger.info('Probably achieved battle pass quest Consume_1_Trailblaze_Power') + self.config.task_call('BattlePass') + # Check daily if self.achieved_daily_quest: self.config.task_call('DailyQuest') + # Delay self self.config.task_delay(minute=cover) self.config.task_stop()