diff --git a/aas.py b/aas.py index 4a3997c..41b1353 100644 --- a/aas.py +++ b/aas.py @@ -46,6 +46,10 @@ class ArisuAutoSweeper(AzurLaneAutoScript): from tasks.tactical_challenge.tactical_challenge import TacticalChallenge TacticalChallenge(config=self.config, device=self.device).run() + def task(self): + from tasks.task.task import Task + Task(config=self.config, device=self.device).run() + def data_update(self): from tasks.item.data_update import DataUpdate DataUpdate(config=self.config, device=self.device).run() diff --git a/assets/en/task/CLAIM.BUTTON.png b/assets/en/task/CLAIM.BUTTON.png new file mode 100644 index 0000000..c0cb101 Binary files /dev/null and b/assets/en/task/CLAIM.BUTTON.png differ diff --git a/assets/en/task/CLAIM.png b/assets/en/task/CLAIM.png new file mode 100644 index 0000000..09b0050 Binary files /dev/null and b/assets/en/task/CLAIM.png differ diff --git a/assets/en/task/CLAIMED.BUTTON.png b/assets/en/task/CLAIMED.BUTTON.png new file mode 100644 index 0000000..d68341a Binary files /dev/null and b/assets/en/task/CLAIMED.BUTTON.png differ diff --git a/assets/en/task/CLAIMED.png b/assets/en/task/CLAIMED.png new file mode 100644 index 0000000..2a0ca75 Binary files /dev/null and b/assets/en/task/CLAIMED.png differ diff --git a/assets/en/task/CLAIMED_ALL.BUTTON.png b/assets/en/task/CLAIMED_ALL.BUTTON.png new file mode 100644 index 0000000..cd0060f Binary files /dev/null and b/assets/en/task/CLAIMED_ALL.BUTTON.png differ diff --git a/assets/en/task/CLAIMED_ALL.png b/assets/en/task/CLAIMED_ALL.png new file mode 100644 index 0000000..13d69ac Binary files /dev/null and b/assets/en/task/CLAIMED_ALL.png differ diff --git a/assets/en/task/CLAIM_ALL.BUTTON.png b/assets/en/task/CLAIM_ALL.BUTTON.png new file mode 100644 index 0000000..f5a69a4 Binary files /dev/null and b/assets/en/task/CLAIM_ALL.BUTTON.png differ diff --git a/assets/en/task/CLAIM_ALL.png b/assets/en/task/CLAIM_ALL.png new file mode 100644 index 0000000..0de97a3 Binary files /dev/null and b/assets/en/task/CLAIM_ALL.png differ diff --git a/config/template.json b/config/template.json index a41942a..fa4304e 100644 --- a/config/template.json +++ b/config/template.json @@ -127,6 +127,14 @@ "PlayerSelect": 0 } }, + "Task": { + "Scheduler": { + "Enable": false, + "NextRun": "2020-01-01 00:00:00", + "Command": "Task", + "ServerUpdate": "04:00" + } + }, "DataUpdate": { "Scheduler": { "Enable": true, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 85d4080..ca8b9b5 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -523,6 +523,33 @@ } } }, + "Task": { + "Scheduler": { + "Enable": { + "type": "checkbox", + "value": false, + "option": [ + true, + false + ] + }, + "NextRun": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + }, + "Command": { + "type": "input", + "value": "Task", + "display": "hide" + }, + "ServerUpdate": { + "type": "input", + "value": "04:00", + "display": "hide" + } + } + }, "DataUpdate": { "Scheduler": { "Enable": { diff --git a/module/config/argument/menu.json b/module/config/argument/menu.json index 7ecbc17..a6dae3f 100644 --- a/module/config/argument/menu.json +++ b/module/config/argument/menu.json @@ -17,6 +17,7 @@ "Bounty", "Scrimmage", "TacticalChallenge", + "Task", "DataUpdate" ] } diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index b7f5839..4e8e437 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -45,6 +45,8 @@ Daily: TacticalChallenge: - Scheduler - TacticalChallenge + Task: + - Scheduler DataUpdate: - Scheduler - ItemStorage \ No newline at end of file diff --git a/module/config/config_manual.py b/module/config/config_manual.py index f1395df..4493502 100644 --- a/module/config/config_manual.py +++ b/module/config/config_manual.py @@ -9,7 +9,7 @@ class ManualConfig: SCHEDULER_PRIORITY = """ Restart > Cafe > Circle > Mail > DataUpdate > Bounty - > Scrimmage > TacticalChallenge + > Scrimmage > TacticalChallenge > Task """ """ diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 13c3fc5..1397686 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -42,6 +42,10 @@ "name": "Tactical Challenge", "help": "" }, + "Task": { + "name": "Tasks", + "help": "" + }, "DataUpdate": { "name": "Dashboard Upd", "help": "" diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 7592686..a37fa9a 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -42,6 +42,10 @@ "name": "战术对抗赛", "help": "战术大赛 / 竞技场" }, + "Task": { + "name": "Task.Task.name", + "help": "Task.Task.help" + }, "DataUpdate": { "name": "仪表盘更新", "help": "" diff --git a/module/config/stored/stored_generated.py b/module/config/stored/stored_generated.py index 64feb48..4e991de 100644 --- a/module/config/stored/stored_generated.py +++ b/module/config/stored/stored_generated.py @@ -1,6 +1,10 @@ from module.config.stored.classes import ( StoredAP, + StoredBase, StoredBountyTicket, + StoredCounter, + StoredExpiredAt0400, + StoredExpiredAtMonday0400, StoredInt, StoredScrimmageTicket, StoredTacticalChallengeTicket, diff --git a/tasks/task/assets/assets_task.py b/tasks/task/assets/assets_task.py new file mode 100644 index 0000000..7df87bf --- /dev/null +++ b/tasks/task/assets/assets_task.py @@ -0,0 +1,49 @@ +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 = ButtonWrapper( + name='CLAIM', + jp=None, + en=Button( + file='./assets/en/task/CLAIM.png', + area=(941, 656, 1009, 684), + search=(921, 636, 1029, 704), + color=(213, 190, 58), + button=(935, 639, 1015, 698), + ), +) +CLAIMED = ButtonWrapper( + name='CLAIMED', + jp=None, + en=Button( + file='./assets/en/task/CLAIMED.png', + area=(941, 653, 1007, 682), + search=(921, 633, 1027, 702), + color=(205, 205, 204), + button=(936, 643, 1012, 698), + ), +) +CLAIMED_ALL = ButtonWrapper( + name='CLAIMED_ALL', + jp=None, + en=Button( + file='./assets/en/task/CLAIMED_ALL.png', + area=(1088, 650, 1215, 687), + search=(1068, 630, 1235, 707), + color=(181, 182, 185), + button=(1052, 644, 1250, 700), + ), +) +CLAIM_ALL = ButtonWrapper( + name='CLAIM_ALL', + jp=None, + en=Button( + file='./assets/en/task/CLAIM_ALL.png', + area=(1086, 652, 1216, 685), + search=(1066, 632, 1236, 705), + color=(215, 198, 64), + button=(1054, 642, 1243, 700), + ), +) diff --git a/tasks/task/task.py b/tasks/task/task.py new file mode 100644 index 0000000..b86ad3f --- /dev/null +++ b/tasks/task/task.py @@ -0,0 +1,56 @@ +from enum import Enum + +from module.base.timer import Timer +from module.logger import logger +from tasks.base.page import page_task +from tasks.base.ui import UI +from tasks.task.assets.assets_task import * + + +class TaskStatus(Enum): + """ + Task status + """ + CLAIM_ALL = 0 + CLAIM = 1 + FINISHED = -1 + +class Task(UI): + def _handle_task(self, status): + match status: + case TaskStatus.CLAIM_ALL: + if self.match_color(CLAIM_ALL): + self.device.click(CLAIM_ALL) + logger.info("Click Claim All") + else: + return TaskStatus.CLAIM + case TaskStatus.CLAIM: + if self.match_color(CLAIM): + self.device.click(CLAIM) + logger.info("Click Claim") + else: + return TaskStatus.FINISHED + case _: + logger.warning(f"Invalid status: {status}") + return status + + def run(self): + self.ui_ensure(page_task) + + status = TaskStatus.CLAIM_ALL + action_timer = Timer(0.5) + + while 1: + self.device.screenshot() + + if self.ui_additional(): + continue + + if action_timer.reached_and_reset(): + logger.attr('Status', status) + status = self._handle_task(status) + + if status is TaskStatus.FINISHED: + break + + self.config.task_delay(server_update=True)