mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-18 18:20:39 +08:00
feat: 增加模板任务逻辑
This commit is contained in:
@@ -1939,10 +1939,10 @@
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"TodaysSupplies",
|
||||
"ReturnToTerminal",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"Terminal@TodaysSupplies",
|
||||
"Terminal@ReturnTo",
|
||||
"OfflineConfirm",
|
||||
"EndOfAction",
|
||||
"StageSNFlag"
|
||||
@@ -1963,10 +1963,10 @@
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"OfflineConfirm",
|
||||
"TodaysSupplies"
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"Annihilation": {
|
||||
@@ -1990,11 +1990,11 @@
|
||||
"algorithm": "JustReturn",
|
||||
"action": "DoNothing",
|
||||
"next": [
|
||||
"ReturnToTerminal",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"StageSNReturnToTerminal",
|
||||
"TodaysSupplies"
|
||||
"Terminal@ReturnTo",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"Terminal@StageSNReturnTo",
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"FightBegin": {
|
||||
@@ -2036,10 +2036,10 @@
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"OfflineConfirm",
|
||||
"TodaysSupplies"
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"StartUpConnectingFlag": {
|
||||
@@ -2055,10 +2055,10 @@
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"StartUpConnectingFlag",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"OfflineConfirm",
|
||||
"TodaysSupplies"
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"StartLoginBServer": {
|
||||
@@ -2073,13 +2073,13 @@
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"OfflineConfirm",
|
||||
"TodaysSupplies"
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"ReturnToTerminal": {
|
||||
"ReturnTo": {
|
||||
"template": "Return.png",
|
||||
"templThreshold": 0.7,
|
||||
"action": "ClickSelf",
|
||||
@@ -2090,14 +2090,15 @@
|
||||
80
|
||||
],
|
||||
"next": [
|
||||
"ReturnToTerminal",
|
||||
"Terminal",
|
||||
"ReturnToTerminalConfirm",
|
||||
"ReturnTo",
|
||||
"Main",
|
||||
"ReturnToConfirm",
|
||||
"CloseAnno",
|
||||
"StageSNReturnToTerminal"
|
||||
"StageSNReturnTo",
|
||||
"TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"ReturnToTerminalConfirm": {
|
||||
"ReturnToConfirm": {
|
||||
"template": "PopupConfirm.png",
|
||||
"action": "ClickSelf",
|
||||
"roi": [
|
||||
@@ -2107,11 +2108,11 @@
|
||||
160
|
||||
],
|
||||
"next": [
|
||||
"ReturnToTerminal",
|
||||
"Terminal",
|
||||
"ReturnTo",
|
||||
"Main",
|
||||
"CloseAnno",
|
||||
"StageSNReturnToTerminal",
|
||||
"ReturnToTerminalConfirm"
|
||||
"StageSNReturnTo",
|
||||
"TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"UsePrts": {
|
||||
@@ -2225,26 +2226,6 @@
|
||||
"Stop"
|
||||
]
|
||||
},
|
||||
"StageSNReturnToAward": {
|
||||
"template": "StageSNReturnFlag.png",
|
||||
"action": "ClickRect",
|
||||
"cache": false,
|
||||
"roi": [
|
||||
284,
|
||||
509,
|
||||
242,
|
||||
141
|
||||
],
|
||||
"specificRect": [
|
||||
20,
|
||||
20,
|
||||
135,
|
||||
35
|
||||
],
|
||||
"next": [
|
||||
"ReturnToAward"
|
||||
]
|
||||
},
|
||||
"StageSNReturnToFriends": {
|
||||
"template": "StageSNReturnFlag.png",
|
||||
"action": "ClickRect",
|
||||
@@ -2345,7 +2326,7 @@
|
||||
"ReturnToRoguelike1"
|
||||
]
|
||||
},
|
||||
"StageSNReturnToTerminal": {
|
||||
"StageSNReturnTo": {
|
||||
"template": "StageSNReturnFlag.png",
|
||||
"action": "ClickRect",
|
||||
"cache": false,
|
||||
@@ -2362,7 +2343,7 @@
|
||||
35
|
||||
],
|
||||
"next": [
|
||||
"ReturnToTerminal"
|
||||
"ReturnTo"
|
||||
]
|
||||
},
|
||||
"StartButton2": {
|
||||
@@ -2590,9 +2571,9 @@
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"TodaysSupplies",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"Terminal@TodaysSupplies",
|
||||
"OfflineConfirm"
|
||||
]
|
||||
},
|
||||
@@ -2833,13 +2814,13 @@
|
||||
255
|
||||
],
|
||||
"next": [
|
||||
"CloseAnno",
|
||||
"Terminal@CloseAnno",
|
||||
"StartToWakeUp",
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"OfflineConfirmImpl",
|
||||
"TodaysSupplies"
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"StartToWakeUp": {
|
||||
@@ -2855,10 +2836,10 @@
|
||||
"StartUpConnectingFlag",
|
||||
"StartLoginBServer",
|
||||
"BServerPrivacyPolicy",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"OfflineConfirm",
|
||||
"TodaysSupplies"
|
||||
"Terminal@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"CloseAnno": {
|
||||
@@ -2871,12 +2852,19 @@
|
||||
200
|
||||
],
|
||||
"next": [
|
||||
"Terminal",
|
||||
"Main",
|
||||
"CloseAnno",
|
||||
"ReturnTo",
|
||||
"StageSNReturnTo",
|
||||
"TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"Terminal": {
|
||||
"Main": {
|
||||
"Doc": "base_task: Main",
|
||||
"template": "empty.png"
|
||||
},
|
||||
"Terminal@Main": {
|
||||
"template": "Terminal.png",
|
||||
"action": "ClickSelf",
|
||||
"roi": [
|
||||
880,
|
||||
@@ -2885,15 +2873,15 @@
|
||||
120
|
||||
],
|
||||
"exceededNext": [
|
||||
"TodaysSupplies",
|
||||
"CloseAnno",
|
||||
"Terminal@TodaysSupplies",
|
||||
"Terminal@CloseAnno",
|
||||
"Stop"
|
||||
],
|
||||
"next": [
|
||||
"GoLastBattle",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"TodaysSupplies",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"Terminal@TodaysSupplies",
|
||||
"Stop"
|
||||
],
|
||||
"rearDelay": 3000
|
||||
@@ -2918,7 +2906,7 @@
|
||||
],
|
||||
"next": [
|
||||
"CloseAnno",
|
||||
"Terminal"
|
||||
"Main"
|
||||
]
|
||||
},
|
||||
"LastOrCurBattleBegin": {
|
||||
@@ -2929,11 +2917,11 @@
|
||||
"StartButton1",
|
||||
"UsePrts",
|
||||
"UsePrts-StageSN",
|
||||
"ReturnToTerminal",
|
||||
"Terminal",
|
||||
"CloseAnno",
|
||||
"StageSNReturnToTerminal",
|
||||
"TodaysSupplies",
|
||||
"Terminal@ReturnTo",
|
||||
"Terminal@Main",
|
||||
"Terminal@CloseAnno",
|
||||
"Terminal@StageSNReturnTo",
|
||||
"Terminal@TodaysSupplies",
|
||||
"PRTS3",
|
||||
"PRTS",
|
||||
"PRTS2",
|
||||
@@ -3414,40 +3402,17 @@
|
||||
"algorithm": "JustReturn",
|
||||
"action": "DoNothing",
|
||||
"next": [
|
||||
"ReturnToAward",
|
||||
"Award",
|
||||
"Award@ReturnTo",
|
||||
"Award@Main",
|
||||
"ReceiveAward",
|
||||
"DailyTask",
|
||||
"WeeklyTask",
|
||||
"ReturnToAwardCloseAnno",
|
||||
"StageSNReturnToAward",
|
||||
"TodaysSuppliesToAward"
|
||||
"Award@CloseAnno",
|
||||
"Award@StageSNReturnTo",
|
||||
"Award@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"TodaysSuppliesToAward": {
|
||||
"algorithm": "OcrDetect",
|
||||
"text": [
|
||||
"今日配给"
|
||||
],
|
||||
"action": "ClickRect",
|
||||
"specificRect": [
|
||||
1000,
|
||||
1,
|
||||
270,
|
||||
340
|
||||
],
|
||||
"roi": [
|
||||
500,
|
||||
50,
|
||||
300,
|
||||
150
|
||||
],
|
||||
"next": [
|
||||
"ReturnToAwardCloseAnno",
|
||||
"Award"
|
||||
]
|
||||
},
|
||||
"Award": {
|
||||
"Award@Main": {
|
||||
"template": "Task.png",
|
||||
"action": "ClickSelf",
|
||||
"roi": [
|
||||
@@ -3460,9 +3425,9 @@
|
||||
"ReceiveAward",
|
||||
"DailyTask",
|
||||
"WeeklyTask",
|
||||
"Award",
|
||||
"ReturnToAwardCloseAnno",
|
||||
"TodaysSuppliesToAward"
|
||||
"Award@Main",
|
||||
"Award@CloseAnno",
|
||||
"Award@TodaysSupplies"
|
||||
]
|
||||
},
|
||||
"ReceiveAward": {
|
||||
@@ -3548,61 +3513,6 @@
|
||||
"Stop"
|
||||
]
|
||||
},
|
||||
"ReturnToAward": {
|
||||
"template": "Return.png",
|
||||
"templThreshold": 0.7,
|
||||
"action": "ClickSelf",
|
||||
"roi": [
|
||||
0,
|
||||
0,
|
||||
180,
|
||||
80
|
||||
],
|
||||
"next": [
|
||||
"Award",
|
||||
"ReturnToAward",
|
||||
"ReturnToAwardConfirm",
|
||||
"ReturnToAwardCloseAnno",
|
||||
"StageSNReturnToAward",
|
||||
"TodaysSuppliesToAward"
|
||||
]
|
||||
},
|
||||
"ReturnToAwardConfirm": {
|
||||
"template": "PopupConfirm.png",
|
||||
"action": "ClickSelf",
|
||||
"roi": [
|
||||
630,
|
||||
400,
|
||||
650,
|
||||
160
|
||||
],
|
||||
"next": [
|
||||
"Award",
|
||||
"ReturnToAward",
|
||||
"ReturnToAwardCloseAnno",
|
||||
"StageSNReturnToAward",
|
||||
"TodaysSuppliesToAward",
|
||||
"ReturnToAwardConfirm"
|
||||
]
|
||||
},
|
||||
"ReturnToAwardCloseAnno": {
|
||||
"template": "CloseAnno.png",
|
||||
"action": "ClickSelf",
|
||||
"cache": false,
|
||||
"roi": [
|
||||
1100,
|
||||
0,
|
||||
180,
|
||||
200
|
||||
],
|
||||
"next": [
|
||||
"Award",
|
||||
"ReturnToAwardCloseAnno",
|
||||
"ReturnToAward",
|
||||
"StageSNReturnToAward",
|
||||
"TodaysSuppliesToAward"
|
||||
]
|
||||
},
|
||||
"VisitBegin": {
|
||||
"algorithm": "JustReturn",
|
||||
"action": "DoNothing",
|
||||
|
||||
@@ -170,7 +170,7 @@ bool asst::TaskData::parse(const json::value& json)
|
||||
#ifdef ASST_DEBUG
|
||||
for (const auto& [name, task] : m_all_tasks_info) {
|
||||
for (const auto& next : task->next) {
|
||||
if (m_all_tasks_info.find(next) == m_all_tasks_info.cend()) {
|
||||
if (get(next) == nullptr) {
|
||||
Log.error(name, "'s next", next, "is null");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -14,33 +14,82 @@ namespace asst
|
||||
|
||||
class TaskData final : public SingletonHolder<TaskData>, public AbstractConfigerWithTempl
|
||||
{
|
||||
private:
|
||||
std::shared_ptr<TaskInfo> generate_task_info(const std::shared_ptr<TaskInfo>& base_ptr,
|
||||
const std::string& task_prefix) const
|
||||
{
|
||||
std::shared_ptr<TaskInfo> task_info_ptr;
|
||||
switch (base_ptr->algorithm) {
|
||||
case AlgorithmType::MatchTemplate:
|
||||
task_info_ptr = std::make_shared<MatchTaskInfo>(*std::dynamic_pointer_cast<MatchTaskInfo>(base_ptr));
|
||||
break;
|
||||
case AlgorithmType::OcrDetect:
|
||||
task_info_ptr = std::make_shared<OcrTaskInfo>(*std::dynamic_pointer_cast<OcrTaskInfo>(base_ptr));
|
||||
break;
|
||||
case AlgorithmType::Hash:
|
||||
task_info_ptr = std::make_shared<HashTaskInfo>(*std::dynamic_pointer_cast<HashTaskInfo>(base_ptr));
|
||||
break;
|
||||
default:
|
||||
task_info_ptr = std::make_shared<TaskInfo>(*base_ptr);
|
||||
break;
|
||||
}
|
||||
task_info_ptr->on_error_next = {};
|
||||
for (const std::string& on_error_next : base_ptr->on_error_next) {
|
||||
task_info_ptr->on_error_next.emplace_back(task_prefix + on_error_next);
|
||||
}
|
||||
task_info_ptr->exceeded_next = {};
|
||||
for (const std::string& exceeded_next : base_ptr->exceeded_next) {
|
||||
task_info_ptr->exceeded_next.emplace_back(task_prefix + exceeded_next);
|
||||
}
|
||||
task_info_ptr->next = {};
|
||||
for (const std::string& next : base_ptr->next) {
|
||||
task_info_ptr->next.emplace_back(task_prefix + next);
|
||||
}
|
||||
return task_info_ptr;
|
||||
}
|
||||
|
||||
public:
|
||||
virtual ~TaskData() override = default;
|
||||
virtual const std::unordered_set<std::string>& get_templ_required() const noexcept override;
|
||||
|
||||
template <typename TargetTaskInfoType>
|
||||
requires std::derived_from<TargetTaskInfoType, TaskInfo> &&
|
||||
(!std::same_as<TargetTaskInfoType, TaskInfo>) // Parameter must be a TaskInfo and not same as TaskInfo
|
||||
std::shared_ptr<TargetTaskInfoType> get(const std::string& name)
|
||||
{
|
||||
auto it = m_all_tasks_info.find(name);
|
||||
if (it == m_all_tasks_info.cend()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return std::dynamic_pointer_cast<TargetTaskInfoType>(it->second);
|
||||
}
|
||||
|
||||
template <typename TargetTaskInfoType = TaskInfo>
|
||||
requires std::same_as<TargetTaskInfoType, TaskInfo> // Parameter must be a TaskInfo
|
||||
requires (std::derived_from<TargetTaskInfoType, TaskInfo> ||
|
||||
std::same_as<TargetTaskInfoType, TaskInfo>) // Parameter must be a TaskInfo
|
||||
std::shared_ptr<TargetTaskInfoType> get(const std::string& name)
|
||||
{
|
||||
auto it = m_all_tasks_info.find(name);
|
||||
if (it == m_all_tasks_info.cend()) {
|
||||
if (size_t name_split_pos = name.find('@');
|
||||
name_split_pos == std::string::npos) {
|
||||
return nullptr;
|
||||
}
|
||||
else {
|
||||
size_t name_len = name_split_pos + 1;
|
||||
std::string base_task_name = std::string(name, name_len);
|
||||
std::string derived_task_name = std::string(name, 0, name_len);
|
||||
if (auto base_task_iter = get(base_task_name);
|
||||
base_task_iter != nullptr) {
|
||||
if (auto task_info_ptr = generate_task_info(base_task_iter, derived_task_name);
|
||||
task_info_ptr != nullptr) {
|
||||
m_all_tasks_info[name] = task_info_ptr;
|
||||
if constexpr (std::same_as<TargetTaskInfoType, TaskInfo>) {
|
||||
return task_info_ptr;
|
||||
}
|
||||
else {
|
||||
return std::dynamic_pointer_cast<TargetTaskInfoType>(task_info_ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return it->second;
|
||||
if constexpr (std::same_as<TargetTaskInfoType, TaskInfo>) {
|
||||
return it->second;
|
||||
}
|
||||
else {
|
||||
return std::dynamic_pointer_cast<TargetTaskInfoType>(it->second);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user