Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
code clean up
Browse files Browse the repository at this point in the history
Shawnsdaddy committed Feb 1, 2025
1 parent d8e776f commit cc5e479
Showing 5 changed files with 93 additions and 326 deletions.
2 changes: 1 addition & 1 deletion arknights_mower/__init__.py
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
import sys
from pathlib import Path

__version__ = "2025.1.2"
__version__ = "2025.2.1"

if getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS"):
__rootdir__ = Path(sys._MEIPASS).joinpath("arknights_mower").resolve()
2 changes: 1 addition & 1 deletion arknights_mower/__main__.py
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@ def initialize(
ling_xi=config.plan.conf.ling_xi,
workaholic=config.plan.conf.workaholic,
free_blacklist=conf.free_blacklist,
ope_resting_priority=conf.ope_resting_priority,
ope_resting_priority=config.plan.conf.ope_resting_priority,
resting_threshold=conf.resting_threshold,
refresh_trading_config=config.plan.conf.refresh_trading,
refresh_drained=config.plan.conf.refresh_drained,
232 changes: 1 addition & 231 deletions arknights_mower/solvers/base_schedule.py
Original file line number Diff line number Diff line change
@@ -28,7 +28,6 @@
from arknights_mower.utils.datetime import (
format_time,
get_server_weekday,
pass_deadline,
)
from arknights_mower.utils.device.device import Device
from arknights_mower.utils.digit_reader import DigitReader
@@ -43,10 +42,8 @@
from arknights_mower.utils.scheduler_task import (
SchedulerTask,
TaskTypes,
add_release_dorm,
check_dorm_ordering,
find_next_task,
merge_release_dorm,
plan_metadata,
scheduling,
try_add_release_dorm,
@@ -386,234 +383,7 @@ def plan_fia(self):
self.tasks.sort(key=lambda task: task.time)

def plan_metadata(self):
if config.conf.flexible_shift_mode or pass_deadline():
self.tasks = plan_metadata(self.op_data, self.tasks)
else:
planned_index = []
# 移除当前 SHIFT_ON 重新刷新
for t in self.tasks:
if "dorm" in t.meta_data:
planned_index.extend([int(w[4:]) for w in t.meta_data.split(",")])
_time = datetime.max
min_resting_time = datetime.max
_plan = {}
_type = []
# 第一个心情低的且小于3 则只休息半小时
short_rest = False
self.total_agent = list(
v
for k, v in self.op_data.operators.items()
if v.is_high() and not v.room.startswith("dorm") and not v.is_resting()
)
self.total_agent.sort(
key=lambda x: x.current_mood() - x.lower_limit, reverse=False
)
if (
next(
(
a
for a in self.total_agent
if (a.name not in self.op_data.exhaust_agent)
and not a.workaholic
and a.current_mood() <= 3
),
None,
)
is not None
):
short_rest = True
if not short_rest:
for x in self.total_agent:
if (
not x.workaholic
and not x.exhaust_require
and x.room not in ["factory", "train"]
):
min_resting_time = min(min_resting_time, x.predict_exhaust())
logger.debug(f"预测最低休息时间为:{min_resting_time}")
low_priority = []
for idx, dorm in enumerate(self.op_data.dorm):
logger.debug(f"开始计算{dorm}")
# 如果已经plan了,则跳过
if idx in planned_index or idx in low_priority:
continue
_name = dorm.name
if _name == "":
continue
# 如果是rest in full,则新增单独任务..
if (
_name in self.op_data.operators.keys()
and self.op_data.operators[_name].is_high()
and self.op_data.operators[_name].rest_in_full
):
__plan = {}
__rest_agent = []
__type = []
if self.op_data.operators[dorm.name].group == "":
__rest_agent.append(dorm.name)
else:
__rest_agent.extend(
self.op_data.groups[self.op_data.operators[dorm.name].group]
)
if dorm.time is not None:
__time = dorm.time
else:
__time = datetime.max
need_early = True
for x in __rest_agent:
# 如果小组内没有耗尽,则提前8分钟上班
if self.op_data.operators[x].exhaust_require:
need_early = False
# 如果同小组也是rest_in_full则取最大休息时间 否则忽略
if x in low_priority:
logger.debug("检测到回满组已经安排")
_plan = {}
_idx, __dorm = self.op_data.get_dorm_by_name(x)
if (
x in self.op_data.operators.keys()
and self.op_data.operators[x].rest_in_full
):
if __dorm is not None and __dorm.time is not None:
if (
__dorm.time > __time
and self.op_data.operators[x].resting_priority
== "high"
):
__time = __dorm.time
if _idx is not None:
__type.append("dorm" + str(_idx))
planned_index.append(_idx)
logger.debug(f"计划干员为{x}")
__room = self.op_data.operators[x].room
if __room not in __plan.keys():
__plan[__room] = ["Current"] * len(
self.op_data.plan[__room]
)
__plan[__room][self.op_data.operators[x].index] = x
if __time < datetime.now():
__time = datetime.now()
if __time != datetime.max:
if need_early:
__time -= timedelta(minutes=8)
logger.info("全组无耗尽,提前8分钟上班")
self.tasks.append(
SchedulerTask(
time=__time,
task_type=TaskTypes.SHIFT_ON,
task_plan=__plan,
meta_data=",".join(__type),
)
)
try_add_release_dorm(__plan, __time, self.op_data, self.tasks)
else:
self.op_data.reset_dorm_time()
self.error = True
# 如果非 rest in full, 则同组取时间最小值
elif (
_name in self.op_data.operators.keys()
and not self.op_data.operators[_name].is_high()
and self.op_data.config.free_room
):
# 释放满心情其他干员
add_release_dorm(self.tasks, self.op_data, _name)
elif self.op_data.operators[_name].is_high():
if dorm.time is not None and dorm.time < _time:
logger.debug(f"更新任务时间{dorm.time}")
_time = dorm.time
__room = self.op_data.operators[_name].room
__rest_agent = []
if self.op_data.operators[_name].group == "":
__rest_agent.append(_name)
else:
__rest_agent.extend(
self.op_data.groups[self.op_data.operators[_name].group]
)
logger.debug(f"小组分组为{__rest_agent}")
# 如果小组有其他人是rest_in_full则跳过
if next(
(
d
for d in __rest_agent
if d in self.op_data.operators.keys()
and self.op_data.operators[d].rest_in_full
),
None,
):
continue
for x in __rest_agent:
if x in low_priority:
continue
__room = self.op_data.operators[x].room
if __room not in base_room_list:
continue
if __room not in _plan.keys():
_plan[__room] = ["Current"] * len(self.op_data.plan[__room])
_plan[__room][self.op_data.operators[x].index] = x
_dorm_idx, __dorm = self.op_data.get_dorm_by_name(x)
if __dorm is not None:
_type.append("dorm" + str(_dorm_idx))
planned_index.append(_dorm_idx)
if (
__dorm.time is not None
and __dorm.time < _time
and self.op_data.operators[x].resting_priority == "high"
):
logger.debug(f"更新任务时间{dorm.time}")
_time = __dorm.time

if x not in low_priority:
low_priority.append(x)
# 生成单个任务
if len(_plan.items()) > 0:
if _time != datetime.max:
_time = min(_time, min_resting_time)
_time -= timedelta(minutes=8)
if _time < datetime.now():
_time = datetime.now()
_time = (
_time
if not short_rest
else (datetime.now() + timedelta(hours=0.5))
)
self.tasks.append(
SchedulerTask(
time=_time,
task_plan=_plan,
task_type=TaskTypes.SHIFT_ON,
meta_data=",".join(_type),
)
)
try_add_release_dorm(_plan, _time, self.op_data, self.tasks)
else:
logger.debug("检测到时间数据不存在")
self.op_data.reset_dorm_time()
self.error = True
# 最后再做不养闲人刷新
if self.op_data.config.free_room:

def should_keep(task):
if task.type != TaskTypes.RELEASE_DORM:
return True
elif len(task.plan) == 0:
return False
name = task.meta_data
free_room = list(task.plan.keys())[0]
free_op = task.plan[free_room]
if (
self.op_data.operators[name].current_room != free_room
or free_op[self.op_data.operators[name].current_index] != "Free"
):
logger.info(f"检测到{task.meta_data}不在对应位置,移除相关任务")
return False
i, d = self.op_data.get_dorm_by_name(task.meta_data)
if i is None:
logger.info(f"检测到{task.meta_data}不在宿舍,移除相关任务")
return False
return True

self.tasks = [t for t in self.tasks if should_keep(t)]
merge_interval = config.conf.merge_interval
merge_release_dorm(self.tasks, merge_interval)
self.tasks = plan_metadata(self.op_data, self.tasks)

def infra_main(self):
"""位于基建首页"""
4 changes: 0 additions & 4 deletions arknights_mower/utils/datetime.py
Original file line number Diff line number Diff line change
@@ -23,10 +23,6 @@ def get_server_time():
return datetime.now(pytz.timezone("Asia/Dubai"))


def pass_deadline():
return get_server_time() > datetime(2025, 1, 1, tzinfo=pytz.timezone("Asia/Dubai"))


# newbing说用这个来定义休息时间省事
def format_time(seconds):
if seconds < 0: # 权宜之计 配合刷生息演算
179 changes: 90 additions & 89 deletions ui/components.d.ts
Original file line number Diff line number Diff line change
@@ -7,94 +7,95 @@ export {}

declare module 'vue' {
export interface GlobalComponents {
Buffer: typeof import('./src/components/buffer.vue')['default']
Bufferinfo: typeof import('./src/components/bufferinfo.vue')['default']
Clue: typeof import('./src/components/Clue.vue')['default']
DailyMission: typeof import('./src/components/DailyMission.vue')['default']
Depotswitch: typeof import('./src/components/Depotswitch.vue')['default']
DropDown: typeof import('./src/components/DropDown.vue')['default']
Email: typeof import('./src/components/Email.vue')['default']
Feedback: typeof import('./src/components/Feedback.vue')['default']
HelpText: typeof import('./src/components/HelpText.vue')['default']
LongTasks: typeof import('./src/components/LongTasks.vue')['default']
MaaBasic: typeof import('./src/components/MaaBasic.vue')['default']
MaaReward: typeof import('./src/components/MaaReward.vue')['default']
MaaRogue: typeof import('./src/components/MaaRogue.vue')['default']
MaaSss: typeof import('./src/components/MaaSss.vue')['default']
MaaWeekly: typeof import('./src/components/MaaWeekly.vue')['default']
MaaWeeklyNew: typeof import('./src/components/MaaWeeklyNew.vue')['default']
NA: typeof import('naive-ui')['NA']
NAlert: typeof import('naive-ui')['NAlert']
NAutoComplete: typeof import('naive-ui')['NAutoComplete']
NAvatar: typeof import('naive-ui')['NAvatar']
NButton: typeof import('naive-ui')['NButton']
NButtonGroup: typeof import('naive-ui')['NButtonGroup']
NCard: typeof import('naive-ui')['NCard']
NCheckbox: typeof import('naive-ui')['NCheckbox']
NCode: typeof import('naive-ui')['NCode']
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
NDataTable: typeof import('naive-ui')['NDataTable']
NDatePicker: typeof import('naive-ui')['NDatePicker']
NDialogProvider: typeof import('naive-ui')['NDialogProvider']
NDivider: typeof import('naive-ui')['NDivider']
NDropdown: typeof import('naive-ui')['NDropdown']
NDynamicInput: typeof import('naive-ui')['NDynamicInput']
NDynamicTags: typeof import('naive-ui')['NDynamicTags']
NFlex: typeof import('naive-ui')['NFlex']
NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem']
NFormItemGi: typeof import('naive-ui')['NFormItemGi']
NGi: typeof import('naive-ui')['NGi']
NGlobalStyle: typeof import('naive-ui')['NGlobalStyle']
NGrid: typeof import('naive-ui')['NGrid']
NH1: typeof import('naive-ui')['NH1']
NH2: typeof import('naive-ui')['NH2']
NIcon: typeof import('naive-ui')['NIcon']
NImage: typeof import('naive-ui')['NImage']
NInput: typeof import('naive-ui')['NInput']
NInputNumber: typeof import('naive-ui')['NInputNumber']
NLayout: typeof import('naive-ui')['NLayout']
NLayoutContent: typeof import('naive-ui')['NLayoutContent']
NLayoutFooter: typeof import('naive-ui')['NLayoutFooter']
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
NLoadingBarProvider: typeof import('naive-ui')['NLoadingBarProvider']
NLog: typeof import('naive-ui')['NLog']
NMenu: typeof import('naive-ui')['NMenu']
NMessageProvider: typeof import('naive-ui')['NMessageProvider']
NModal: typeof import('naive-ui')['NModal']
NRadio: typeof import('naive-ui')['NRadio']
NRadioButton: typeof import('naive-ui')['NRadioButton']
NRadioGroup: typeof import('naive-ui')['NRadioGroup']
NScrollbar: typeof import('naive-ui')['NScrollbar']
NSelect: typeof import('naive-ui')['NSelect']
NSkeleton: typeof import('naive-ui')['NSkeleton']
NSlider: typeof import('naive-ui')['NSlider']
NSpace: typeof import('naive-ui')['NSpace']
NSwitch: typeof import('naive-ui')['NSwitch']
NTab: typeof import('naive-ui')['NTab']
NTable: typeof import('naive-ui')['NTable']
NTabs: typeof import('naive-ui')['NTabs']
NTag: typeof import('naive-ui')['NTag']
NTd: typeof import('naive-ui')['NTd']
NThing: typeof import('naive-ui')['NThing']
NTimePicker: typeof import('naive-ui')['NTimePicker']
NTooltip: typeof import('naive-ui')['NTooltip']
NTr: typeof import('naive-ui')['NTr']
NUpload: typeof import('naive-ui')['NUpload']
NVirtualList: typeof import('naive-ui')['NVirtualList']
NWatermark: typeof import('naive-ui')['NWatermark']
PlanEditor: typeof import('./src/components/PlanEditor.vue')['default']
ReclamationAlgorithm: typeof import('./src/components/ReclamationAlgorithm.vue')['default']
Recruit: typeof import('./src/components/Recruit.vue')['default']
RenameDialog: typeof import('./src/components/RenameDialog.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
SecretFront: typeof import('./src/components/SecretFront.vue')['default']
SKLand: typeof import('./src/components/SKLand.vue')['default']
SlickOperatorSelect: typeof import('./src/components/SlickOperatorSelect.vue')['default']
TaskDialog: typeof import('./src/components/TaskDialog.vue')['default']
TriggerDialog: typeof import('./src/components/TriggerDialog.vue')['default']
TriggerEditor: typeof import('./src/components/TriggerEditor.vue')['default']
TriggerString: typeof import('./src/components/TriggerString.vue')['default']
Buffer: (typeof import('./src/components/buffer.vue'))['default']
Bufferinfo: (typeof import('./src/components/bufferinfo.vue'))['default']
Clue: (typeof import('./src/components/Clue.vue'))['default']
DailyMission: (typeof import('./src/components/DailyMission.vue'))['default']
Depotswitch: (typeof import('./src/components/Depotswitch.vue'))['default']
DropDown: (typeof import('./src/components/DropDown.vue'))['default']
Email: (typeof import('./src/components/Email.vue'))['default']
Feedback: (typeof import('./src/components/Feedback.vue'))['default']
HelpText: (typeof import('./src/components/HelpText.vue'))['default']
LongTasks: (typeof import('./src/components/LongTasks.vue'))['default']
MaaBasic: (typeof import('./src/components/MaaBasic.vue'))['default']
MaaReward: (typeof import('./src/components/MaaReward.vue'))['default']
MaaRogue: (typeof import('./src/components/MaaRogue.vue'))['default']
MaaSss: (typeof import('./src/components/MaaSss.vue'))['default']
MaaWeekly: (typeof import('./src/components/MaaWeekly.vue'))['default']
MaaWeeklyNew: (typeof import('./src/components/MaaWeeklyNew.vue'))['default']
NA: (typeof import('naive-ui'))['NA']
NAlert: (typeof import('naive-ui'))['NAlert']
NAutoComplete: (typeof import('naive-ui'))['NAutoComplete']
NAvatar: (typeof import('naive-ui'))['NAvatar']
NButton: (typeof import('naive-ui'))['NButton']
NButtonGroup: (typeof import('naive-ui'))['NButtonGroup']
NCard: (typeof import('naive-ui'))['NCard']
NCheckbox: (typeof import('naive-ui'))['NCheckbox']
NCode: (typeof import('naive-ui'))['NCode']
NConfigProvider: (typeof import('naive-ui'))['NConfigProvider']
NDataTable: (typeof import('naive-ui'))['NDataTable']
NDatePicker: (typeof import('naive-ui'))['NDatePicker']
NDialogProvider: (typeof import('naive-ui'))['NDialogProvider']
NDivider: (typeof import('naive-ui'))['NDivider']
NDropdown: (typeof import('naive-ui'))['NDropdown']
NDynamicInput: (typeof import('naive-ui'))['NDynamicInput']
NDynamicTags: (typeof import('naive-ui'))['NDynamicTags']
NFlex: (typeof import('naive-ui'))['NFlex']
NForm: (typeof import('naive-ui'))['NForm']
NFormItem: (typeof import('naive-ui'))['NFormItem']
NFormItemGi: (typeof import('naive-ui'))['NFormItemGi']
NGi: (typeof import('naive-ui'))['NGi']
NGlobalStyle: (typeof import('naive-ui'))['NGlobalStyle']
NGrid: (typeof import('naive-ui'))['NGrid']
NH1: (typeof import('naive-ui'))['NH1']
NH2: (typeof import('naive-ui'))['NH2']
NIcon: (typeof import('naive-ui'))['NIcon']
NImage: (typeof import('naive-ui'))['NImage']
NInput: (typeof import('naive-ui'))['NInput']
NInputNumber: (typeof import('naive-ui'))['NInputNumber']
NLayout: (typeof import('naive-ui'))['NLayout']
NLayoutContent: (typeof import('naive-ui'))['NLayoutContent']
NLayoutFooter: (typeof import('naive-ui'))['NLayoutFooter']
NLayoutSider: (typeof import('naive-ui'))['NLayoutSider']
NLoadingBarProvider: (typeof import('naive-ui'))['NLoadingBarProvider']
NLog: (typeof import('naive-ui'))['NLog']
NMenu: (typeof import('naive-ui'))['NMenu']
NMessageProvider: (typeof import('naive-ui'))['NMessageProvider']
NModal: (typeof import('naive-ui'))['NModal']
NRadio: (typeof import('naive-ui'))['NRadio']
NRadioButton: (typeof import('naive-ui'))['NRadioButton']
NRadioGroup: (typeof import('naive-ui'))['NRadioGroup']
NScrollbar: (typeof import('naive-ui'))['NScrollbar']
NSelect: (typeof import('naive-ui'))['NSelect']
NSkeleton: (typeof import('naive-ui'))['NSkeleton']
NSlider: (typeof import('naive-ui'))['NSlider']
NSpace: (typeof import('naive-ui'))['NSpace']
NSwitch: (typeof import('naive-ui'))['NSwitch']
NTab: (typeof import('naive-ui'))['NTab']
NTable: (typeof import('naive-ui'))['NTable']
NTabs: (typeof import('naive-ui'))['NTabs']
NTag: (typeof import('naive-ui'))['NTag']
NTd: (typeof import('naive-ui'))['NTd']
NThing: (typeof import('naive-ui'))['NThing']
NTimePicker: (typeof import('naive-ui'))['NTimePicker']
NTooltip: (typeof import('naive-ui'))['NTooltip']
NTr: (typeof import('naive-ui'))['NTr']
NUpload: (typeof import('naive-ui'))['NUpload']
NVirtualList: (typeof import('naive-ui'))['NVirtualList']
NWatermark: (typeof import('naive-ui'))['NWatermark']
PlanEditor: (typeof import('./src/components/PlanEditor.vue'))['default']
ReclamationAlgorithm: (typeof import('./src/components/ReclamationAlgorithm.vue'))['default']
Recruit: (typeof import('./src/components/Recruit.vue'))['default']
RenameDialog: (typeof import('./src/components/RenameDialog.vue'))['default']
RouterLink: (typeof import('vue-router'))['RouterLink']
RouterView: (typeof import('vue-router'))['RouterView']
SecretFront: (typeof import('./src/components/SecretFront.vue'))['default']
SKLand: (typeof import('./src/components/SKLand.vue'))['default']
SlickDormSelect: (typeof import('./src/components/SlickDormSelect.vue'))['default']
SlickOperatorSelect: (typeof import('./src/components/SlickOperatorSelect.vue'))['default']
TaskDialog: (typeof import('./src/components/TaskDialog.vue'))['default']
TriggerDialog: (typeof import('./src/components/TriggerDialog.vue'))['default']
TriggerEditor: (typeof import('./src/components/TriggerEditor.vue'))['default']
TriggerString: (typeof import('./src/components/TriggerString.vue'))['default']
}
}

0 comments on commit cc5e479

Please sign in to comment.