Merge pull request #2096 from MaaAssistantArknights/perf/fight

rft: 重构当前/上次作战的逻辑
This commit is contained in:
MistEO
2022-10-03 02:31:56 +08:00
committed by GitHub
3 changed files with 14 additions and 35 deletions

View File

@@ -1946,11 +1946,7 @@
"Terminal",
"CloseAnno",
"StageSNReturnToTerminal",
"TodaysSupplies",
"PRTS3",
"PRTS",
"PRTS2",
"EndOfAction"
"TodaysSupplies"
]
},
"FightBegin": {
@@ -2871,8 +2867,7 @@
"Terminal"
]
},
"LastBattle": {
"Doc": "当前或上次作战",
"LastOrCurBattleBegin": {
"algorithm": "JustReturn",
"action": "DoNothing",
"next": [
@@ -2880,6 +2875,11 @@
"StartButton1",
"UsePrts",
"UsePrts-StageSN",
"ReturnToTerminal",
"Terminal",
"CloseAnno",
"StageSNReturnToTerminal",
"TodaysSupplies",
"PRTS3",
"PRTS",
"PRTS2",

View File

@@ -14,27 +14,13 @@
asst::FightTask::FightTask(AsstCallback callback, void* callback_arg)
: PackageTask(std::move(callback), callback_arg, TaskType),
m_start_up_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskType)),
m_last_battle_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskType)),
m_stage_navigation_task_ptr(std::make_shared<StageNavigationTask>(m_callback, m_callback_arg, TaskType)),
m_fight_task_ptr(std::make_shared<ProcessTask>(m_callback, m_callback_arg, TaskType))
{
// 进入选关界面(主界面的“终端”点进去)
m_start_up_task_ptr->set_times_limit("GoLastBattle", 0)
.set_times_limit("StartButton1", 0)
.set_times_limit("StartButton2", 0)
.set_times_limit("MedicineConfirm", 0)
.set_times_limit("StoneConfirm", 0)
.set_times_limit("StageSNReturnFlag", 0)
.set_times_limit("PRTS3", 0)
.set_times_limit("PRTS", 0)
.set_times_limit("PRTS2", 0)
.set_times_limit("EndOfAction", 0)
.set_ignore_error(false)
.set_retry_times(5);
// 进入上次战斗
m_last_battle_task_ptr->set_tasks({ "LastBattle" })
.set_times_limit("StartButton1", 0)
// 进入选关界面
// 对于指定关卡,就是主界面的“终端”点进去
// 对于当前/上次,就是点到 蓝色开始行动 为止。
m_start_up_task_ptr->set_times_limit("StartButton1", 0)
.set_times_limit("StartButton2", 0)
.set_times_limit("MedicineConfirm", 0)
.set_times_limit("StoneConfirm", 0)
@@ -64,7 +50,6 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg)
m_dr_grandet_task_plugin_ptr->set_enable(false);
m_subtasks.emplace_back(m_start_up_task_ptr);
m_subtasks.emplace_back(m_last_battle_task_ptr);
m_subtasks.emplace_back(m_stage_navigation_task_ptr);
m_subtasks.emplace_back(m_fight_task_ptr);
}
@@ -91,16 +76,11 @@ bool asst::FightTask::set_params(const json::value& params)
if (!m_running) {
if (stage.empty()) {
// m_start_up_task_ptr->set_tasks({ "UsePrts", "UsePrts-StageSN", "StartButton1", "StageBegin" });
std::vector<std::string> tasks = { "UsePrts", "UsePrts-StageSN", "StartButton1" };
ranges::copy(Task.get("StageBegin")->next, std::back_inserter(tasks));
m_start_up_task_ptr->set_tasks(std::move(tasks));
m_last_battle_task_ptr->set_enable(true);
m_start_up_task_ptr->set_tasks({ "LastOrCurBattleBegin" }).set_times_limit("GoLastBattle", INT_MAX);
m_stage_navigation_task_ptr->set_enable(false);
}
else {
m_start_up_task_ptr->set_tasks({ "StageBegin" });
m_last_battle_task_ptr->set_enable(false);
m_start_up_task_ptr->set_tasks({ "StageBegin" }).set_times_limit("GoLastBattle", 0);
m_stage_navigation_task_ptr->set_stage_name(stage);
m_stage_navigation_task_ptr->set_enable(true);
}

View File

@@ -23,9 +23,8 @@ namespace asst
protected:
std::shared_ptr<ProcessTask> m_start_up_task_ptr = nullptr;
std::shared_ptr<ProcessTask> m_last_battle_task_ptr = nullptr;
std::shared_ptr<StageNavigationTask> m_stage_navigation_task_ptr = nullptr;
std::shared_ptr<ProcessTask> m_fight_task_ptr = nullptr;
std::shared_ptr<StageNavigationTask> m_stage_navigation_task_ptr = nullptr;
std::shared_ptr<StageDropsTaskPlugin> m_stage_drops_plugin_ptr = nullptr;
std::shared_ptr<GameCrashRestartTaskPlugin> m_game_restart_plugin_ptr = nullptr;
std::shared_ptr<DrGrandetTaskPlugin> m_dr_grandet_task_plugin_ptr = nullptr;