1
0
mirror of https://github.com/TheFunny/ArisuAutoSweeper synced 2025-12-17 00:15:13 +00:00

refactor: mission

This commit is contained in:
RedDeadDepresso 2024-01-01 14:59:49 +00:00
parent 668d77363a
commit eb5d41914c
8 changed files with 95 additions and 72 deletions

View File

@ -134,7 +134,7 @@ class MCE_Manager(customtkinter.CTk):
self.template_labels.grid(row=0, column=0, sticky="ew") 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_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.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)) 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 = 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") down_button.grid(row=0, column=1, padx=5, pady=5, sticky="w")
# Dropdown menu for mode # 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.set(inner_list[0] if inner_list else "N")
mode_optionmenu.grid(row=0, column=2, padx=5, pady=5, sticky="w") mode_optionmenu.grid(row=0, column=2, padx=5, pady=5, sticky="w")
# Entry widget for stage # Entry widget for stage

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -3,17 +3,6 @@ from module.base.button import Button, ButtonWrapper
# This file was auto-generated, do not modify it manually. To generate: # This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.button_extract ``` # ``` 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( CHECK_COMMISSIONS = ButtonWrapper(
name='CHECK_COMMISSIONS', name='CHECK_COMMISSIONS',
jp=None, jp=None,
@ -25,11 +14,11 @@ CHECK_COMMISSIONS = ButtonWrapper(
button=(646, 78, 909, 135), button=(646, 78, 909, 135),
), ),
) )
CHECK_IR = ButtonWrapper( CHECK_CR = ButtonWrapper(
name='CHECK_IR', name='CHECK_CR',
jp=None, jp=None,
en=Button( en=Button(
file='./assets/en/mission/CHECK_IR.png', file='./assets/en/mission/CHECK_CR.png',
area=(97, 137, 340, 191), area=(97, 137, 340, 191),
search=(77, 117, 360, 211), search=(77, 117, 360, 211),
color=(213, 220, 223), color=(213, 220, 223),
@ -47,6 +36,17 @@ CHECK_MISSION_SWEEP = ButtonWrapper(
button=(654, 184, 703, 209), 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( HARD_OFF = ButtonWrapper(
name='HARD_OFF', name='HARD_OFF',
jp=None, jp=None,
@ -146,25 +146,25 @@ RIGHT = ButtonWrapper(
button=(1202, 311, 1280, 412), button=(1202, 311, 1280, 412),
), ),
) )
SELECT_BD = ButtonWrapper( SELECT_CR = ButtonWrapper(
name='SELECT_BD', name='SELECT_CR',
jp=None, jp=None,
en=Button( en=Button(
file='./assets/en/mission/SELECT_BD.png', file='./assets/en/mission/SELECT_CR.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',
area=(1004, 267, 1237, 321), area=(1004, 267, 1237, 321),
search=(984, 247, 1257, 341), search=(984, 247, 1257, 341),
color=(214, 220, 227), color=(214, 220, 227),
button=(1004, 267, 1237, 321), 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),
),
)

View File

@ -3,7 +3,7 @@ from enum import Enum
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 tasks.mission.ui import MissionUI, CommissionsUI from tasks.mission.ui import MissionUI, CommissionsUI, SWITCH_QUEST
from tasks.stage.ap import AP from tasks.stage.ap import AP
from tasks.cafe.cafe import Cafe from tasks.cafe.cafe import Cafe
from tasks.circle.circle import Circle from tasks.circle.circle import Circle
@ -13,7 +13,7 @@ from tasks.item.data_update import DataUpdate
import json import json
import math import math
from filelock import FileLock from filelock import FileLock
from datetime import datetime from datetime import datetime, timedelta
class MissionStatus(Enum): class MissionStatus(Enum):
AP = 0 # Calculate AP and decide to terminate Mission module or not AP = 0 # Calculate AP and decide to terminate Mission module or not
@ -45,8 +45,8 @@ class Mission(MissionUI, CommissionsUI):
"N" : Normal Mission "N" : Normal Mission
"H" : Hard Mission "H" : Hard Mission
"E" : Event Quest "E" : Event Quest
"IR" : Item Retrieval / Commission where you get credit "CR" : Item Retrieval / Commission where you get credit
"BD" : Base Defense / Commission where you get exp "XP" : Base Defense / Commission where you get exp
Returns: Returns:
list of list list of list
@ -80,10 +80,21 @@ class Mission(MissionUI, CommissionsUI):
last_run_datetime = datetime.strptime(self.last_run, "%Y-%m-%d %H:%M:%S") 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() reset_time = datetime.strptime(self.reset_time, "%H:%M:%S").time()
if current_date != last_run_datetime.date() and current_time >= reset_time: # Check if the difference between the current date and last run date is 2 or greater days
self.last_run = str(datetime.now().replace(microsecond=0)) if (current_date - last_run_datetime.date()).days >= 2:
logger.info("Reset Daily activated.") # 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 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 return False
@property @property
@ -122,10 +133,10 @@ class Mission(MissionUI, CommissionsUI):
""" """
if self.current_mode in ["N", "H"]: if self.current_mode in ["N", "H"]:
return self.select_mission(self.current_mode, self.current_stage) 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) return self.select_commission(self.current_mode)
elif self.current_mode == "E": elif self.current_mode == "E":
return self.select_event() return self.select_mode(SWITCH_QUEST)
else: else:
logger.error("Uknown mode") logger.error("Uknown mode")
return False return False
@ -235,24 +246,25 @@ class Mission(MissionUI, CommissionsUI):
with self.lock.acquire(): with self.lock.acquire():
self.previous_mode = None self.previous_mode = None
self.task = self.valid_task self.task = self.valid_task
action_timer = Timer(0.5, 1) if self.task:
status = MissionStatus.AP action_timer = Timer(0.5, 1)
status = MissionStatus.AP
"""Update the dashboard to accurately calculate AP""" """Update the dashboard to accurately calculate AP"""
DataUpdate(config=self.config, device=self.device).run() DataUpdate(config=self.config, device=self.device).run()
while 1: while 1:
self.device.screenshot() self.device.screenshot()
if self.ui_additional(): if self.ui_additional():
continue continue
if action_timer.reached_and_reset(): if action_timer.reached_and_reset():
logger.attr('Status', status) logger.attr('Status', status)
status = self.handle_mission(status) status = self.handle_mission(status)
if status == MissionStatus.FINISH: if status == MissionStatus.FINISH:
break break
self.config.task_delay(server_update=True) self.config.task_delay(server_update=True)

View File

@ -2,19 +2,18 @@ from module.base.timer import Timer
from module.logger import logger from module.logger import logger
from module.ui.switch import Switch from module.ui.switch import Switch
from module.ocr.ocr import Digit from module.ocr.ocr import Digit
from tasks.base.assets.assets_base_page import BACK, MISSION_CHECK, EVENT_CHECK 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_event from tasks.base.page import page_mission, page_commissions, page_work #,page_event
from tasks.base.ui import UI from tasks.base.ui import UI
from tasks.mission.assets.assets_mission import * from tasks.mission.assets.assets_mission import *
from tasks.stage.ap import AP from tasks.stage.ap import AP
from tasks.stage.mission_list import StageList from tasks.stage.mission_list import StageList
from tasks.stage.sweep import StageSweep from tasks.stage.sweep import StageSweep
SHARED_LIST = StageList('SharedList') SHARED_LIST = StageList('SharedList')
MISSION_SWEEP = StageSweep('MissionSweep', 60) SHARED_SWEEP = StageSweep('MissionSweep', 99)
MISSION_SWEEP.set_button(button_check=CHECK_MISSION_SWEEP) # Check sweep is different for mission SHARED_SWEEP.set_button(button_check=CHECK_MISSION_SWEEP) # Check sweep is different for mission, event
SHARED_SWEEP = StageSweep('SharedSweep', 60) COMMISSIONS_SWEEP = StageSweep('SharedSweep', 99)
SWITCH_NORMAL = Switch("Normal_switch") SWITCH_NORMAL = Switch("Normal_switch")
SWITCH_NORMAL.add_state("on", NORMAL_ON) 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 = { MODE_TO_PAGE = {
"N": (MISSION_CHECK, page_mission), "N": (MISSION_CHECK, page_mission),
"H": (MISSION_CHECK, page_mission), "H": (MISSION_CHECK, page_mission),
"BD": (CHECK_BD, page_commissions), "XP": (CHECK_XP, page_commissions),
"IR": (CHECK_IR, page_commissions), "CR": (CHECK_CR, page_commissions),
"E" : (EVENT_CHECK) #page_event "E" : (EVENT_CHECK) #page_event
} }
@ -95,9 +94,6 @@ class MissionUI(UI, AP):
switch.set('on', main=self) switch.set('on', main=self)
return True return True
def select_event(self):
return self.select_mode(SWITCH_QUEST)
def enter_stage(self, index: int) -> bool: def enter_stage(self, index: int) -> bool:
if not index: if not index:
index = SHARED_LIST.insight_max_sweepable_index(self) index = SHARED_LIST.insight_max_sweepable_index(self)
@ -106,8 +102,8 @@ class MissionUI(UI, AP):
return False return False
def do_sweep(self, mode, num: int) -> bool: def do_sweep(self, mode, num: int) -> bool:
if mode in ["N", "H", "E"]: if mode in ["XP", "CR"]:
return MISSION_SWEEP.do_sweep(self, num=num) return COMMISSIONS_SWEEP.do_sweep(self, num=num)
else: else:
return SHARED_SWEEP.do_sweep(self, num=num) 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"]): if prev==next or (prev in ["N", "H"] and next in ["N", "H"]):
self.go_back(MODE_TO_PAGE[next][0]) 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) self.go_back(CHECK_COMMISSIONS)
else: 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): def go_back(self, check):
while 1: while 1:
@ -132,12 +128,27 @@ class MissionUI(UI, AP):
return True return True
self.click_with_interval(BACK, interval=2) 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): class CommissionsUI(UI, AP):
"""Works the same way as select_bounty""" """Works the same way as select_bounty"""
def select_commission(self, mode): def select_commission(self, mode):
to_button = { to_button = {
"IR": (SELECT_IR, CHECK_IR), "CR": (SELECT_CR, CHECK_CR),
"BD": (SELECT_BD, CHECK_BD) "XP": (SELECT_XP, CHECK_XP)
} }
dest_enter, dest_check = to_button[mode] dest_enter, dest_check = to_button[mode]
timer = Timer(5, 10).start() timer = Timer(5, 10).start()