refactor: mission
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@ -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),
|
||||
),
|
||||
)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||