feat: 增加模板任务逻辑

This commit is contained in:
zzyyyl
2022-10-03 22:02:23 +08:00
parent deb2213d1c
commit 47b5ecf40b
3 changed files with 136 additions and 177 deletions

View File

@@ -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",

View File

@@ -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;
}

View File

@@ -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: