feat: 借助战作战从json中读取关卡名

This commit is contained in:
Hydrogina
2022-11-24 19:01:33 +08:00
parent b3c209a235
commit 86c052aa82
7 changed files with 30 additions and 19 deletions

View File

@@ -42,6 +42,6 @@
}
],
"opers": [],
"stage_name": "activities/act3d0/level_act3d0_01",
"stage_name": "OF-1",
"difficulty": 3
}

View File

@@ -7,6 +7,7 @@
bool asst::CopilotConfiger::parse(const json::value& json)
{
std::string stage_name = json.at("stage_name").as_string();
m_stage_name = stage_name;
BattleCopilotData battle_actions;
battle_actions.title = json.get("doc", "title", std::string());

View File

@@ -16,9 +16,12 @@ namespace asst
auto get_actions(const std::string& stage_name) const noexcept { return m_battle_actions.at(stage_name); }
auto get_stage_name() { return m_stage_name; }
protected:
virtual bool parse(const json::value& json) override;
std::unordered_map<std::string, BattleCopilotData> m_battle_actions;
std::string m_stage_name = "";
};
inline static auto& Copilot = CopilotConfiger::get_instance();

View File

@@ -51,3 +51,12 @@ bool asst::CopilotTask::set_params(const json::value& params)
const std::string& filename = filename_opt.value();
return Copilot.load(utils::path(filename));
}
std::string asst::CopilotTask::get_stage_name(std::string filename)
{
if (!Copilot.load(utils::path(filename))) {
return "";
}
return Copilot.get_stage_name();
}

View File

@@ -19,6 +19,8 @@ namespace asst
static constexpr const char* TaskType = "Copilot";
std::string get_stage_name(std::string filename);
private:
std::shared_ptr<BattleFormationTask> m_formation_task_ptr = nullptr;
std::shared_ptr<BattleProcessTask> m_battle_task_ptr = nullptr;

View File

@@ -14,28 +14,27 @@
asst::CreditFightTask::CreditFightTask(AsstCallback callback, void* callback_arg)
: PackageTask(std::move(callback), callback_arg, TaskType)
{
std::shared_ptr<ProcessTask> start_up_task_ptr =
std::make_shared<ProcessTask>(m_callback, m_callback_arg, m_task_chain);
std::shared_ptr<StageNavigationTask> stage_navigation_task_ptr =
std::make_shared<StageNavigationTask>(m_callback, m_callback_arg, m_task_chain);
std::shared_ptr<ProcessTask> fight_task_ptr =
std::make_shared<ProcessTask>(m_callback, m_callback_arg, m_task_chain);
std::shared_ptr<CopilotTask> copilot_task_ptr = std::make_shared<CopilotTask>(m_callback, m_callback_arg);
std::shared_ptr<GameCrashRestartTaskPlugin> game_restart_plugin_ptr = nullptr;
stage_navigation_task_ptr->set_enable(false).set_ignore_error(false);
auto start_up_task_ptr = std::make_shared<ProcessTask>(m_callback, m_callback_arg, m_task_chain);
auto stage_navigation_task_ptr = std::make_shared<StageNavigationTask>(m_callback, m_callback_arg, m_task_chain);
auto fight_task_ptr = std::make_shared<ProcessTask>(m_callback, m_callback_arg, m_task_chain);
auto copilot_task_ptr = std::make_shared<CopilotTask>(m_callback, m_callback_arg);
// 读取关卡名
std::string copilot_path = utils::path_to_utf8_string(ResDir.get() / "resource" / "credit_fight_copilot.json");
std::string stage_name = copilot_task_ptr->get_stage_name(copilot_path); // OF-1
const std::string stage = "OF-1";
// 开始
start_up_task_ptr->set_tasks({ "StageBegin" }).set_times_limit("GoLastBattle", 0);
// 关卡导航
stage_navigation_task_ptr->set_stage_name(stage);
stage_navigation_task_ptr->set_enable(true);
stage_navigation_task_ptr->set_stage_name(stage_name);
stage_navigation_task_ptr->set_enable(true).set_ignore_error(false);
// 自动战斗
json::value copilotparams;
copilotparams["stage_name"] = "activities/act3d0/level_act3d0_01"; // OF-1
copilotparams["stage_name"] = stage_name;
std::string copilot_path = utils::path_to_utf8_string(ResDir.get()) + "\\resource\\credit_fight_copilot.json";
copilotparams["filename"] = copilot_path;
copilotparams["formation"] = true;
copilotparams["support_unit_name"] = "_RANDOM_";
@@ -44,7 +43,7 @@ asst::CreditFightTask::CreditFightTask(AsstCallback callback, void* callback_arg
// 战斗结束后
fight_task_ptr->set_tasks({ "EndOfActionAndStop" }).set_ignore_error(false);
game_restart_plugin_ptr = fight_task_ptr->register_plugin<GameCrashRestartTaskPlugin>();
auto game_restart_plugin_ptr = fight_task_ptr->register_plugin<GameCrashRestartTaskPlugin>();
game_restart_plugin_ptr->set_retry_times(0);
m_subtasks.emplace_back(start_up_task_ptr);

View File

@@ -71,9 +71,6 @@ namespace MeoAsstGui
// 剿灭模式
{ "Annihilation", new StageInfo { Display = Localization.GetString("Annihilation"), Value = "Annihilation" } },
// 别传 火蓝之心
{ "OF-1", new StageInfo { Display = "OF-1", Value = "OF-1" } },
// 芯片本
{ "PR-A-1", new StageInfo("PR-A-1", "PR-ATip", new[] { DayOfWeek.Monday, DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Sunday }, resourceCollection) },
{ "PR-A-2", new StageInfo("PR-A-2", string.Empty, new[] { DayOfWeek.Monday, DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Sunday }, resourceCollection) },