From eb5d41914c718904f42b4b419956c257f3966169 Mon Sep 17 00:00:00 2001 From: RedDeadDepresso <94017243+RedDeadDepresso@users.noreply.github.com> Date: Mon, 1 Jan 2024 14:59:49 +0000 Subject: [PATCH] refactor: mission --- MCE Manager.py | 4 +- .../en/mission/{CHECK_IR.png => CHECK_CR.png} | Bin .../en/mission/{CHECK_BD.png => CHECK_XP.png} | Bin .../mission/{SELECT_IR.png => SELECT_CR.png} | Bin .../mission/{SELECT_BD.png => SELECT_XP.png} | Bin tasks/mission/assets/assets_mission.py | 56 ++++++++-------- tasks/mission/mission.py | 62 +++++++++++------- tasks/mission/ui.py | 45 ++++++++----- 8 files changed, 95 insertions(+), 72 deletions(-) rename assets/en/mission/{CHECK_IR.png => CHECK_CR.png} (100%) rename assets/en/mission/{CHECK_BD.png => CHECK_XP.png} (100%) rename assets/en/mission/{SELECT_IR.png => SELECT_CR.png} (100%) rename assets/en/mission/{SELECT_BD.png => SELECT_XP.png} (100%) diff --git a/MCE Manager.py b/MCE Manager.py index efec62e..9c2c827 100644 --- a/MCE Manager.py +++ b/MCE Manager.py @@ -134,7 +134,7 @@ class MCE_Manager(customtkinter.CTk): self.template_labels.grid(row=0, column=0, sticky="ew") self.mode_label = customtkinter.CTkLabel(self.template_labels, text="Mode:", font=customtkinter.CTkFont(underline=True)) - self.mode_tooltip = CTkToolTip(self.mode_label, message="N:Mission Normal\nH:Mission Hard\nE:Event Quest\nBD:Commissions EXP\nIR:Commissions Credits\n") + self.mode_tooltip = CTkToolTip(self.mode_label, message="N : Mission Normal\nH : Mission Hard\nE : Event Quest\nXP : Commissions EXP\nCR : Commissions Credits\n", justify=tk.LEFT) self.mode_label.grid(row=1, column=0, padx=(130, 0), pady=5) self.stage_label = customtkinter.CTkLabel(self.template_labels, text="Stage:", font=customtkinter.CTkFont(underline=True)) @@ -269,7 +269,7 @@ class MCE_Manager(customtkinter.CTk): down_button = customtkinter.CTkButton(frame, text="Down", width=5, command=lambda f=frame, queue=queue: self.move_frame_down(f, queue), state=state) down_button.grid(row=0, column=1, padx=5, pady=5, sticky="w") # Dropdown menu for mode - mode_optionmenu = customtkinter.CTkOptionMenu(frame, width=60, values=["N", "H", "E", "BD", "IR"], state=state) + mode_optionmenu = customtkinter.CTkOptionMenu(frame, width=60, values=["N", "H", "E", "XP", "CR"], state=state) mode_optionmenu.set(inner_list[0] if inner_list else "N") mode_optionmenu.grid(row=0, column=2, padx=5, pady=5, sticky="w") # Entry widget for stage diff --git a/assets/en/mission/CHECK_IR.png b/assets/en/mission/CHECK_CR.png similarity index 100% rename from assets/en/mission/CHECK_IR.png rename to assets/en/mission/CHECK_CR.png diff --git a/assets/en/mission/CHECK_BD.png b/assets/en/mission/CHECK_XP.png similarity index 100% rename from assets/en/mission/CHECK_BD.png rename to assets/en/mission/CHECK_XP.png diff --git a/assets/en/mission/SELECT_IR.png b/assets/en/mission/SELECT_CR.png similarity index 100% rename from assets/en/mission/SELECT_IR.png rename to assets/en/mission/SELECT_CR.png diff --git a/assets/en/mission/SELECT_BD.png b/assets/en/mission/SELECT_XP.png similarity index 100% rename from assets/en/mission/SELECT_BD.png rename to assets/en/mission/SELECT_XP.png diff --git a/tasks/mission/assets/assets_mission.py b/tasks/mission/assets/assets_mission.py index caecaed..191f2a4 100644 --- a/tasks/mission/assets/assets_mission.py +++ b/tasks/mission/assets/assets_mission.py @@ -3,17 +3,6 @@ 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 ``` -CHECK_BD = ButtonWrapper( - name='CHECK_BD', - jp=None, - en=Button( - file='./assets/en/mission/CHECK_BD.png', - area=(94, 135, 325, 194), - search=(74, 115, 345, 214), - color=(208, 215, 220), - button=(94, 135, 325, 194), - ), -) CHECK_COMMISSIONS = ButtonWrapper( name='CHECK_COMMISSIONS', jp=None, @@ -25,11 +14,11 @@ CHECK_COMMISSIONS = ButtonWrapper( button=(646, 78, 909, 135), ), ) -CHECK_IR = ButtonWrapper( - name='CHECK_IR', +CHECK_CR = ButtonWrapper( + name='CHECK_CR', jp=None, en=Button( - file='./assets/en/mission/CHECK_IR.png', + file='./assets/en/mission/CHECK_CR.png', area=(97, 137, 340, 191), search=(77, 117, 360, 211), color=(213, 220, 223), @@ -47,6 +36,17 @@ CHECK_MISSION_SWEEP = ButtonWrapper( button=(654, 184, 703, 209), ), ) +CHECK_XP = ButtonWrapper( + name='CHECK_XP', + jp=None, + en=Button( + file='./assets/en/mission/CHECK_XP.png', + area=(94, 135, 325, 194), + search=(74, 115, 345, 214), + color=(208, 215, 220), + button=(94, 135, 325, 194), + ), +) HARD_OFF = ButtonWrapper( name='HARD_OFF', jp=None, @@ -146,25 +146,25 @@ RIGHT = ButtonWrapper( button=(1202, 311, 1280, 412), ), ) -SELECT_BD = ButtonWrapper( - name='SELECT_BD', +SELECT_CR = ButtonWrapper( + name='SELECT_CR', jp=None, en=Button( - file='./assets/en/mission/SELECT_BD.png', - area=(1016, 165, 1227, 211), - search=(996, 145, 1247, 231), - color=(205, 212, 220), - button=(1016, 165, 1227, 211), - ), -) -SELECT_IR = ButtonWrapper( - name='SELECT_IR', - jp=None, - en=Button( - file='./assets/en/mission/SELECT_IR.png', + file='./assets/en/mission/SELECT_CR.png', area=(1004, 267, 1237, 321), search=(984, 247, 1257, 341), color=(214, 220, 227), button=(1004, 267, 1237, 321), ), ) +SELECT_XP = ButtonWrapper( + name='SELECT_XP', + jp=None, + en=Button( + file='./assets/en/mission/SELECT_XP.png', + area=(1016, 165, 1227, 211), + search=(996, 145, 1247, 231), + color=(205, 212, 220), + button=(1016, 165, 1227, 211), + ), +) diff --git a/tasks/mission/mission.py b/tasks/mission/mission.py index 5b6d103..45c6ff9 100644 --- a/tasks/mission/mission.py +++ b/tasks/mission/mission.py @@ -3,7 +3,7 @@ from enum import Enum from module.base.timer import Timer from module.exception import RequestHumanTakeover from module.logger import logger -from tasks.mission.ui import MissionUI, CommissionsUI +from tasks.mission.ui import MissionUI, CommissionsUI, SWITCH_QUEST from tasks.stage.ap import AP from tasks.cafe.cafe import Cafe from tasks.circle.circle import Circle @@ -13,7 +13,7 @@ from tasks.item.data_update import DataUpdate import json import math from filelock import FileLock -from datetime import datetime +from datetime import datetime, timedelta class MissionStatus(Enum): AP = 0 # Calculate AP and decide to terminate Mission module or not @@ -45,8 +45,8 @@ class Mission(MissionUI, CommissionsUI): "N" : Normal Mission "H" : Hard Mission "E" : Event Quest - "IR" : Item Retrieval / Commission where you get credit - "BD" : Base Defense / Commission where you get exp + "CR" : Item Retrieval / Commission where you get credit + "XP" : Base Defense / Commission where you get exp Returns: list of list @@ -70,7 +70,7 @@ class Mission(MissionUI, CommissionsUI): logger.error("Failed to read configuration file") finally: return queue - + def check_reset_daily(self): # Check if it's time to reset the queue if self.reset_daily: @@ -80,10 +80,21 @@ class Mission(MissionUI, CommissionsUI): last_run_datetime = datetime.strptime(self.last_run, "%Y-%m-%d %H:%M:%S") reset_time = datetime.strptime(self.reset_time, "%H:%M:%S").time() - if current_date != last_run_datetime.date() and current_time >= reset_time: - self.last_run = str(datetime.now().replace(microsecond=0)) - logger.info("Reset Daily activated.") + # Check if the difference between the current date and last run date is 2 or greater days + if (current_date - last_run_datetime.date()).days >= 2: + # Set self.last_run to yesterday's date with time as reset_time + yesterday_datetime = current_datetime - timedelta(days=1) + yesterday_date = yesterday_datetime.date() + self.last_run = str(datetime.combine(yesterday_date, reset_time)) + logger.info("Reset Daily activated") return True + + # Check if the current date is different from the last run date and the current time is greater than or equal to the reset time + elif current_date != last_run_datetime.date() and current_time >= reset_time: + self.last_run = str(datetime.now().replace(microsecond=0)) + logger.info("Reset Daily activated") + return True + return False @property @@ -122,10 +133,10 @@ class Mission(MissionUI, CommissionsUI): """ if self.current_mode in ["N", "H"]: return self.select_mission(self.current_mode, self.current_stage) - elif self.current_mode in ["BD", "IR"]: + elif self.current_mode in ["CR", "XP"]: return self.select_commission(self.current_mode) elif self.current_mode == "E": - return self.select_event() + return self.select_mode(SWITCH_QUEST) else: logger.error("Uknown mode") return False @@ -235,24 +246,25 @@ class Mission(MissionUI, CommissionsUI): with self.lock.acquire(): self.previous_mode = None self.task = self.valid_task - action_timer = Timer(0.5, 1) - status = MissionStatus.AP - - """Update the dashboard to accurately calculate AP""" - DataUpdate(config=self.config, device=self.device).run() - - while 1: - self.device.screenshot() + if self.task: + action_timer = Timer(0.5, 1) + status = MissionStatus.AP + + """Update the dashboard to accurately calculate AP""" + DataUpdate(config=self.config, device=self.device).run() + + while 1: + self.device.screenshot() - if self.ui_additional(): - continue + if self.ui_additional(): + continue - if action_timer.reached_and_reset(): - logger.attr('Status', status) - status = self.handle_mission(status) + if action_timer.reached_and_reset(): + logger.attr('Status', status) + status = self.handle_mission(status) - if status == MissionStatus.FINISH: - break + if status == MissionStatus.FINISH: + break self.config.task_delay(server_update=True) \ No newline at end of file diff --git a/tasks/mission/ui.py b/tasks/mission/ui.py index c10e837..25fdbe0 100644 --- a/tasks/mission/ui.py +++ b/tasks/mission/ui.py @@ -2,19 +2,18 @@ from module.base.timer import Timer from module.logger import logger from module.ui.switch import Switch from module.ocr.ocr import Digit -from tasks.base.assets.assets_base_page import BACK, MISSION_CHECK, EVENT_CHECK -from tasks.base.page import page_mission, page_commissions #,page_event +from tasks.base.assets.assets_base_page import BACK, MISSION_CHECK, EVENT_CHECK, WORK_GO_TO_EVENT +from tasks.base.page import page_mission, page_commissions, page_work #,page_event from tasks.base.ui import UI from tasks.mission.assets.assets_mission import * from tasks.stage.ap import AP from tasks.stage.mission_list import StageList from tasks.stage.sweep import StageSweep - SHARED_LIST = StageList('SharedList') -MISSION_SWEEP = StageSweep('MissionSweep', 60) -MISSION_SWEEP.set_button(button_check=CHECK_MISSION_SWEEP) # Check sweep is different for mission -SHARED_SWEEP = StageSweep('SharedSweep', 60) +SHARED_SWEEP = StageSweep('MissionSweep', 99) +SHARED_SWEEP.set_button(button_check=CHECK_MISSION_SWEEP) # Check sweep is different for mission, event +COMMISSIONS_SWEEP = StageSweep('SharedSweep', 99) SWITCH_NORMAL = Switch("Normal_switch") SWITCH_NORMAL.add_state("on", NORMAL_ON) @@ -36,8 +35,8 @@ Missing for "E" because there are no event in Global and no page_event MODE_TO_PAGE = { "N": (MISSION_CHECK, page_mission), "H": (MISSION_CHECK, page_mission), - "BD": (CHECK_BD, page_commissions), - "IR": (CHECK_IR, page_commissions), + "XP": (CHECK_XP, page_commissions), + "CR": (CHECK_CR, page_commissions), "E" : (EVENT_CHECK) #page_event } @@ -94,9 +93,6 @@ class MissionUI(UI, AP): return False switch.set('on', main=self) return True - - def select_event(self): - return self.select_mode(SWITCH_QUEST) def enter_stage(self, index: int) -> bool: if not index: @@ -106,8 +102,8 @@ class MissionUI(UI, AP): return False def do_sweep(self, mode, num: int) -> bool: - if mode in ["N", "H", "E"]: - return MISSION_SWEEP.do_sweep(self, num=num) + if mode in ["XP", "CR"]: + return COMMISSIONS_SWEEP.do_sweep(self, num=num) else: return SHARED_SWEEP.do_sweep(self, num=num) @@ -120,10 +116,10 @@ class MissionUI(UI, AP): """ if prev==next or (prev in ["N", "H"] and next in ["N", "H"]): self.go_back(MODE_TO_PAGE[next][0]) - elif prev in ["BD", "IR"] and next in ["BD", "IR"]: + elif prev in ["XP", "CR"] and next in ["XP", "CR"]: self.go_back(CHECK_COMMISSIONS) else: - self.ui_ensure(MODE_TO_PAGE[next][1]) + self.goto_event() if next == "E" else self.ui_ensure(MODE_TO_PAGE[next][1]) def go_back(self, check): while 1: @@ -132,12 +128,27 @@ class MissionUI(UI, AP): return True self.click_with_interval(BACK, interval=2) + def goto_event(self): + """ + Should be removed after implementing ui_ensure(page_event) + """ + self.ui_ensure(page_work) + timer = Timer(1).start() + while 1: + self.device.screenshot() + if self.appear(EVENT_CHECK): + break + self.appear_then_click(WORK_GO_TO_EVENT) + self.device.swipe((40,160), (260, 40)) + while not timer.reached_and_reset(): + pass + class CommissionsUI(UI, AP): """Works the same way as select_bounty""" def select_commission(self, mode): to_button = { - "IR": (SELECT_IR, CHECK_IR), - "BD": (SELECT_BD, CHECK_BD) + "CR": (SELECT_CR, CHECK_CR), + "XP": (SELECT_XP, CHECK_XP) } dest_enter, dest_check = to_button[mode] timer = Timer(5, 10).start()