From d52eb1f136a541b22541702f48fbc945b13bfac0 Mon Sep 17 00:00:00 2001 From: status102 Date: Tue, 31 Oct 2023 21:55:44 +0800 Subject: [PATCH 01/84] =?UTF-8?q?refactor:=20=E4=B8=8D=E5=86=8D=E7=BB=A7?= =?UTF-8?q?=E6=89=BFRoguelikeConfig=EF=BC=8C=E4=BD=BF=E7=94=A8AbstractRogu?= =?UTF-8?q?elikeTaskPlugin=E7=BB=9F=E4=B8=80=E5=85=B1=E4=BA=ABRoguelikeCon?= =?UTF-8?q?fig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/MaaCore.vcxproj | 2 + src/MaaCore/MaaCore.vcxproj.filters | 8 +-- src/MaaCore/Task/Interface/RoguelikeTask.cpp | 53 ++++++++++--------- src/MaaCore/Task/Interface/RoguelikeTask.h | 2 + .../Roguelike/AbstractRoguelikeTaskPlugin.cpp | 7 +++ .../Roguelike/AbstractRoguelikeTaskPlugin.h | 19 +++++++ .../Roguelike/RoguelikeBattleTaskPlugin.cpp | 24 +++++---- .../Roguelike/RoguelikeBattleTaskPlugin.h | 7 ++- .../Task/Roguelike/RoguelikeConfig.cpp | 6 +-- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 8 ++- .../Roguelike/RoguelikeControlTaskPlugin.cpp | 6 +-- .../Roguelike/RoguelikeControlTaskPlugin.h | 7 ++- .../RoguelikeCustomStartTaskPlugin.cpp | 4 +- .../RoguelikeCustomStartTaskPlugin.h | 7 ++- .../Roguelike/RoguelikeDebugTaskPlugin.cpp | 4 +- .../Task/Roguelike/RoguelikeDebugTaskPlugin.h | 7 ++- ...RoguelikeDifficultySelectionTaskPlugin.cpp | 12 ++--- .../RoguelikeDifficultySelectionTaskPlugin.h | 7 ++- .../RoguelikeFoldartalGainTaskPlugin.cpp | 8 +-- .../RoguelikeFoldartalGainTaskPlugin.h | 7 ++- .../RoguelikeFoldartalUseTaskPlugin.cpp | 24 ++++----- .../RoguelikeFoldartalUseTaskPlugin.h | 7 ++- .../RoguelikeFormationTaskPlugin.cpp | 10 ++-- .../Roguelike/RoguelikeFormationTaskPlugin.h | 8 +-- .../RoguelikeLastRewardTaskPlugin.cpp | 8 +-- .../Roguelike/RoguelikeLastRewardTaskPlugin.h | 7 ++- .../Roguelike/RoguelikeRecruitTaskPlugin.cpp | 16 +++--- .../Roguelike/RoguelikeRecruitTaskPlugin.h | 7 ++- .../Roguelike/RoguelikeResetTaskPlugin.cpp | 7 ++- .../Task/Roguelike/RoguelikeResetTaskPlugin.h | 7 ++- .../Roguelike/RoguelikeShoppingTaskPlugin.cpp | 10 ++-- .../Roguelike/RoguelikeShoppingTaskPlugin.h | 7 ++- .../RoguelikeSkillSelectionTaskPlugin.cpp | 6 +-- .../RoguelikeSkillSelectionTaskPlugin.h | 8 +-- .../RoguelikeStageEncounterTaskPlugin.cpp | 10 ++-- .../RoguelikeStageEncounterTaskPlugin.h | 7 ++- .../RoguelikeStrategyChangeTaskPlugin.cpp | 6 +-- .../RoguelikeStrategyChangeTaskPlugin.h | 7 ++- 38 files changed, 198 insertions(+), 169 deletions(-) create mode 100644 src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp create mode 100644 src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj index c746c2a24c..2df60d58ae 100644 --- a/src/MaaCore/MaaCore.vcxproj +++ b/src/MaaCore/MaaCore.vcxproj @@ -89,6 +89,7 @@ + @@ -260,6 +261,7 @@ + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index 74e958498e..67f25a5067 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -558,9 +558,6 @@ Source\Controller - - Source\Controller - Source\Controller @@ -672,6 +669,7 @@ Source\Task\Miscellaneous + @@ -1118,5 +1116,7 @@ Source\Task\Fight + + - + \ No newline at end of file diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 54c8e30c94..f537efdb7b 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -6,6 +6,7 @@ #include "Task/Miscellaneous/ScreenshotTaskPlugin.h" #include "Task/ProcessTask.h" #include "Task/Roguelike/RoguelikeBattleTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" #include "Task/Roguelike/RoguelikeControlTaskPlugin.h" #include "Task/Roguelike/RoguelikeCustomStartTaskPlugin.h" #include "Task/Roguelike/RoguelikeDebugTaskPlugin.h" @@ -26,35 +27,45 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, Assistant* inst) : InterfaceTask(callback, inst, TaskType), - m_roguelike_task_ptr(std::make_shared(callback, inst, TaskType)) + m_roguelike_task_ptr(std::make_shared(callback, inst, TaskType)), + m_roguelike_config_ptr(std::make_shared()) { LogTraceFunction; m_roguelike_task_ptr->set_ignore_error(true); m_screenshot_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_formation_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_control_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_reset_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_debug_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_shopping_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_formation_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_control_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_reset_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_debug_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_shopping_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); m_shopping_plugin_ptr->set_retry_times(0); - m_custom_start_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_battle_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_custom_start_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_battle_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); m_battle_plugin_ptr->set_retry_times(0).set_ignore_error(true); - m_recruit_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_recruit_plugin_ptr = m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); m_recruit_plugin_ptr->set_retry_times(2).set_ignore_error(true); - m_skill_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_skill_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); m_skill_plugin_ptr->set_retry_times(2).set_ignore_error(true); - m_stage_encounter_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_stage_encounter_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); m_stage_encounter_plugin_ptr->set_retry_times(0); - m_last_reward_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_difficulty_selection_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_strategy_change_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_last_reward_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_difficulty_selection_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_strategy_change_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); - m_foldartal_gain_plugin_ptr = m_roguelike_task_ptr->register_plugin(); - m_foldartal_use_plugin_ptr = m_roguelike_task_ptr->register_plugin(); + m_foldartal_gain_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); + m_foldartal_use_plugin_ptr = + m_roguelike_task_ptr->register_plugin(m_roguelike_config_ptr); // 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加一点。先这样凑合用 for (int i = 0; i != 100; ++i) { @@ -78,15 +89,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params) return false; } - for (const auto& plugin : m_roguelike_task_ptr->get_plugins()) { - if (auto ptr = std::dynamic_pointer_cast(plugin)) { - ptr->set_roguelike_theme(theme); - } - } - - m_foldartal_gain_plugin_ptr->set_roguelike_theme(theme); - m_foldartal_use_plugin_ptr->set_roguelike_theme(theme); - + m_roguelike_config_ptr->set_roguelike_theme(theme); m_roguelike_task_ptr->set_tasks({ theme + "@Roguelike@Begin" }); // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略 diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.h b/src/MaaCore/Task/Interface/RoguelikeTask.h index cf493e1b72..aede3206ee 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.h +++ b/src/MaaCore/Task/Interface/RoguelikeTask.h @@ -5,6 +5,7 @@ namespace asst { class ProcessTask; class ScreenshotTaskPlugin; + class RoguelikeConfig; class RoguelikeBattleTaskPlugin; class RoguelikeControlTaskPlugin; class RoguelikeCustomStartTaskPlugin; @@ -35,6 +36,7 @@ namespace asst private: std::shared_ptr m_roguelike_task_ptr = nullptr; std::shared_ptr m_screenshot_plugin_ptr = nullptr; + std::shared_ptr m_roguelike_config_ptr = nullptr; std::shared_ptr m_control_plugin_ptr = nullptr; std::shared_ptr m_recruit_plugin_ptr = nullptr; std::shared_ptr m_skill_plugin_ptr = nullptr; diff --git a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp new file mode 100644 index 0000000000..3e0f8cc4af --- /dev/null +++ b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp @@ -0,0 +1,7 @@ +#include "AbstractRoguelikeTaskPlugin.h" + +asst::AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin(const AsstCallback& callback, Assistant* inst, + std::string_view task_chain, + std::shared_ptr roguelike_config) + : AbstractTaskPlugin(callback, inst, task_chain), m_roguelike_config(roguelike_config) +{} diff --git a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h new file mode 100644 index 0000000000..fdd1902337 --- /dev/null +++ b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "Task/AbstractTaskPlugin.h" +#include "Task/Roguelike/RoguelikeConfig.h" + +namespace asst +{ + class AbstractRoguelikeTaskPlugin : public AbstractTaskPlugin + { + public: + AbstractRoguelikeTaskPlugin(const AsstCallback& callback, Assistant* inst, std::string_view task_chain, + std::shared_ptr roguelike_data); + + protected: + std::shared_ptr m_roguelike_config; + }; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp index 8dc931f15b..25c131c90f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp @@ -24,8 +24,9 @@ using namespace asst::battle; using namespace asst::battle::roguelike; asst::RoguelikeBattleTaskPlugin::RoguelikeBattleTaskPlugin(const AsstCallback& callback, Assistant* inst, - std::string_view task_chain) - : AbstractTaskPlugin(callback, inst, task_chain), BattleHelper(inst) + std::string_view task_chain, + std::shared_ptr roguelike_config_ptr) + : AbstractRoguelikeTaskPlugin(callback, inst, task_chain, roguelike_config_ptr), BattleHelper(inst) {} bool asst::RoguelikeBattleTaskPlugin::verify(AsstMsg msg, const json::value& details) const @@ -34,11 +35,11 @@ bool asst::RoguelikeBattleTaskPlugin::verify(AsstMsg msg, const json::value& det return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -94,7 +95,7 @@ bool asst::RoguelikeBattleTaskPlugin::_run() void asst::RoguelikeBattleTaskPlugin::wait_until_start_button_clicked() { - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@WaitForStartButtonClicked" }) + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@WaitForStartButtonClicked" }) .set_task_delay(0) .set_retry_times(0) .run(); @@ -330,7 +331,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() // 构造当前地图的部署指令列表 std::vector deploy_plan_list; // 获取当前肉鸽的分组信息[干员组1名称,干员组2名称,...] - const auto& groups = RoguelikeRecruit.get_group_info(m_roguelike_theme); + const auto& groups = RoguelikeRecruit.get_group_info(m_roguelike_config->get_theme()); // 获取当前肉鸽的分组内排名信息 // const auto& group_rank = RoguelikeRecruit.get_group_rank(rogue_theme); for (const auto& [name, oper] : m_cur_deployment_opers) { @@ -342,9 +343,9 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() const std::string& oper_name = oper_name_in_config(oper); // 获取招募信息 - const auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, oper_name); + const auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), oper_name); // 获取会用到该干员的干员组[干员组1序号,干员组2序号,...] - std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_theme, oper_name); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_config->get_theme(), oper_name); for (const auto& group_id : group_ids) { // 当前干员组名,string类型 @@ -393,7 +394,8 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() auto deployed_time = std::chrono::steady_clock::now(); m_deployed_time.insert_or_assign(deploy_plan.oper_name, deployed_time); // 获取技能用法和使用次数 - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, deploy_plan.oper_name); + const auto& oper_info = + RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), deploy_plan.oper_name); m_skill_usage[deploy_plan.oper_name] = oper_info.skill_usage; m_skill_times[deploy_plan.oper_name] = oper_info.skill_times; Log.trace(" best deploy is", deploy_plan.oper_name, "with rank", deploy_plan.rank); @@ -422,7 +424,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() auto pre_battlefield = m_battlefield_opers; for (const auto& [name, loc] : pre_battlefield) { - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), name); auto iter = m_deployed_time.find(name); if (iter != m_deployed_time.end() && oper_info.auto_retreat > 0) { if (std::chrono::steady_clock::now() - m_deployed_time.at(name) >= @@ -518,7 +520,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() auto deployed_time = std::chrono::steady_clock::now(); m_deployed_time.insert_or_assign(best_oper.name, deployed_time); // 获取技能用法和使用次数 - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, best_oper.name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), best_oper.name); m_skill_usage[best_oper.name] = oper_info.skill_usage; m_skill_times[best_oper.name] = oper_info.skill_times; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h index 2250489043..83bf2930ce 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.h @@ -3,23 +3,22 @@ #include #include +#include "AbstractRoguelikeTaskPlugin.h" #include "Common/AsstBattleDef.h" #include "Common/AsstTypes.h" #include "Config/Miscellaneous/TilePack.h" -#include "Task/AbstractTaskPlugin.h" #include "Task/BattleHelper.h" -#include "Task/Roguelike/RoguelikeConfig.h" namespace asst { - class RoguelikeBattleTaskPlugin : public AbstractTaskPlugin, private BattleHelper, public RoguelikeConfig + class RoguelikeBattleTaskPlugin : public AbstractRoguelikeTaskPlugin, private BattleHelper { using Time_Point = std::chrono::time_point; inline static const std::unordered_set DiceSet = { "骰子", "8面骰子", "12面骰子" }; public: - RoguelikeBattleTaskPlugin(const AsstCallback& callback, Assistant* inst, std::string_view task_chain); + RoguelikeBattleTaskPlugin(const AsstCallback& callback, Assistant* inst, std::string_view task_chain, std::shared_ptrroguelike_config_ptr); virtual ~RoguelikeBattleTaskPlugin() override = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 4d11638348..5f80198289 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -1,6 +1,6 @@ #include "RoguelikeConfig.h" -void asst::RoguelikeConfig::set_roguelike_theme(std::string roguelike_theme) -{ - m_roguelike_theme = std::move(roguelike_theme); +void asst::RoguelikeConfig::clear() { + + } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 0958e37e0a..239a71ca29 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -6,10 +6,14 @@ namespace asst class RoguelikeConfig { public: - void set_roguelike_theme(std::string roguelike_theme); + void clear(); + + public: + void set_roguelike_theme(std::string roguelike_theme) { m_roguelike_config->get_theme() = std::move(roguelike_theme); } + std::string get_theme() { return m_roguelike_config->get_theme(); } protected: // 肉鸽主题 - std::string m_roguelike_theme; + std::string m_roguelike_config->get_theme(); }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp index ba4b0896ee..de652cd667 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp @@ -10,11 +10,11 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -34,7 +34,7 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de void asst::RoguelikeControlTaskPlugin::exit_then_stop() { - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ExitThenAbandon" }) + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@StartExplore", 0) .set_times_limit("Roguelike@Abandon", 0) .run(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h index 817b6fcf41..d302e3d8c4 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeControlTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeControlTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeControlTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp index aa4e33b3ce..69e022e627 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp @@ -14,11 +14,11 @@ bool asst::RoguelikeCustomStartTaskPlugin::verify(AsstMsg msg, const json::value return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h index eb93ce670e..c0232597a6 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.h @@ -1,6 +1,5 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { @@ -15,10 +14,10 @@ namespace asst // CoCoreChar, // 次选干员, 干员名 }; - class RoguelikeCustomStartTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeCustomStartTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeCustomStartTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp index 0b9ef7a55d..35c7f39a30 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp @@ -14,11 +14,11 @@ bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& deta return true; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h index cf13bcadd9..9044605de2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeDebugTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeDebugTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeDebugTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp index b43b602cb0..c3298025db 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -10,11 +10,11 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::verify(AsstMsg msg, const jso return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -37,14 +37,14 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() // 当前难度 std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value(); - if (m_roguelike_theme != "Phantom" && mode == "4") { + if (m_roguelike_config->get_theme() != "Phantom" && mode == "4") { if (difficulty == "max") { - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficulty_Hardest" }).run(); + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ChooseDifficulty_Hardest" }).run(); } else { - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficulty_Easiest" }).run(); + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ChooseDifficulty_Easiest" }).run(); } - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ChooseDifficultyConfirm" }).run(); + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ChooseDifficultyConfirm" }).run(); } return true; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h index 53bd9102f9..c594899781 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeDifficultySelectionTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeDifficultySelectionTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeDifficultySelectionTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp index 2678a162cd..8a6da5640a 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp @@ -11,14 +11,14 @@ bool asst::RoguelikeFoldartalGainTaskPlugin::verify(AsstMsg msg, const json::val return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - if (m_roguelike_theme != "Sami") { + if (m_roguelike_config->get_theme() != "Sami") { return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; @@ -56,7 +56,7 @@ bool asst::RoguelikeFoldartalGainTaskPlugin::_run() { LogTraceFunction; - std::string theme = m_roguelike_theme; + std::string theme = m_roguelike_config->get_theme(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); auto image = ctrler()->get_image(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h index 53fab469f4..170a012e89 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "RoguelikeConfig.h" -#include "Task/AbstractTaskPlugin.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeFoldartalGainTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeFoldartalGainTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeFoldartalGainTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp index b51a8e8c4e..f0dd74721e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp @@ -14,15 +14,15 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::verify(AsstMsg msg, const json::valu return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - if (m_roguelike_theme != "Sami") { + if (m_roguelike_config->get_theme() != "Sami") { return false; } std::string mode = status()->get_properties(Status::RoguelikeMode).value(); - std::string task_name_pre = m_roguelike_theme + "@Roguelike@Stage"; + std::string task_name_pre = m_roguelike_config->get_theme() + "@Roguelike@Stage"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; @@ -73,9 +73,9 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::_run() { LogTraceFunction; - std::string theme = m_roguelike_theme; + std::string theme = m_roguelike_config->get_theme(); - std::vector combination = RoguelikeFoldartal.get_combination(m_roguelike_theme); + std::vector combination = RoguelikeFoldartal.get_combination(m_roguelike_config->get_theme()); std::string overview_str = status()->get_str(Status::RoguelikeFoldartalOverview).value_or(json::value().to_string()); @@ -139,16 +139,16 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::use_board(const std::string& up_boar { Log.trace("Try to use the board pair", up_board, down_board); - if (ProcessTask(*this, { m_roguelike_theme + "@Roguelike@Foldartal" }).run()) { + if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@Foldartal" }).run()) { swipe_to_top(); // todo:插入一个滑动时顺便更新密文板overview,因为有的板子可以用两次 if (search_and_click_board(up_board) && search_and_click_board(down_board)) { search_and_click_stage(); - if (ProcessTask(*this, { m_roguelike_theme + "@Roguelike@FoldartalUseConfirm" }).run()) { + if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseConfirm" }).run()) { return true; } } - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@FoldartalBack" }).run(); + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalBack" }).run(); } return false; } @@ -161,7 +161,7 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::search_and_click_board(const std::st int try_time = 0; while (try_time < max_retry && !need_exit()) { OCRer analyzer(ctrler()->get_image()); - std::string task_name = m_roguelike_theme + "@Roguelike@FoldartalUseOcr"; + std::string task_name = m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOcr"; analyzer.set_task_info(task_name); analyzer.set_required({ board }); if (!analyzer.analyze()) { @@ -187,13 +187,13 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::search_and_click_stage() sleep(1000); // 节点会闪烁,所以这里不用单次Match - if (ProcessTask(*this, { m_roguelike_theme + "@Roguelike@FoldartalUseOnStage" }).run()) { + if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOnStage" }).run()) { return true; } // 滑到最右边,萨米的地图只有两页,暂时先这么糊着,出现识别不到再写循环 ProcessTask(*this, { "SwipeToTheRight" }).run(); sleep(1000); - if (ProcessTask(*this, { m_roguelike_theme + "@Roguelike@FoldartalUseOnStage" }).run()) { + if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOnStage" }).run()) { return true; } return false; @@ -209,7 +209,7 @@ void asst::RoguelikeFoldartalUseTaskPlugin::swipe_to_top() while (try_time < max_retry && !need_exit()) { while (try_time < max_retry && !need_exit()) { OCRer analyzer(ctrler()->get_image()); - analyzer.set_task_info(m_roguelike_theme + "@Roguelike@FoldartalUseOcr"); + analyzer.set_task_info(m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOcr"); if (analyzer.analyze()) { return; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h index 88c085f4c2..82a0f7a196 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "RoguelikeConfig.h" -#include "Task/AbstractTaskPlugin.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeFoldartalUseTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeFoldartalUseTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeFoldartalUseTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp index 126dfe713a..0a71cf45aa 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp @@ -15,11 +15,11 @@ bool asst::RoguelikeFormationTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -102,14 +102,14 @@ void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() Log.info(__FUNCTION__, "max_page: ", max_page, " oper_count: ", oper_list.size()); std::vector sorted_oper_list; - const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_theme); - const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_theme); + const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_config->get_theme()); + const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_config->get_theme()); for (const auto& condition : team_complete_condition) { // 优先选择阵容核心干员 int count = 0; int require = condition.threshold; for (const std::string& group_name : condition.groups) { for (const auto& oper : oper_list) { - std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_theme, oper.name); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_config->get_theme(), oper.name); for (const auto& group_id : group_ids) { std::string oper_group = group_list[group_id]; if (oper_group == group_name) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h index 4dd406d607..7766e4e17a 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h @@ -1,18 +1,18 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" + +#include "AbstractRoguelikeTaskPlugin.h" #include "Vision/Roguelike/RoguelikeFormationImageAnalyzer.h" namespace asst { // 集成战略模式快捷编队任务 - class RoguelikeFormationTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeFormationTaskPlugin : public AbstractRoguelikeTaskPlugin { public: static constexpr size_t MaxNumOfOperPerPage = 8; public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeFormationTaskPlugin() override = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index be65cf6f00..cb95d26f18 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -11,11 +11,11 @@ bool asst::RoguelikeLastRewardTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -45,7 +45,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() LogTraceFunction; std::string mode = status()->get_properties(Status::RoguelikeMode).value(); - std::string stages_task_name = m_roguelike_theme + "@Roguelike@Stages"; + std::string stages_task_name = m_roguelike_config->get_theme() + "@Roguelike@Stages"; std::string strategy_task_name = stages_task_name + "_default"; if (Task.get(strategy_task_name) == nullptr) { @@ -59,7 +59,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() // 需要开局凹直升 bool start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value() == std::to_string(true); - if (m_roguelike_theme != "Phantom" && mode == "4") { + if (m_roguelike_config->get_theme() != "Phantom" && mode == "4") { if (m_is_next_hardest) { status()->set_properties(Status::RoguelikeDifficulty, "max"); // 获得热水壶和演讲时停止肉鸽(凹直升则继续),获得其他奖励时重开 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h index 8e817f8862..b5855035cc 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeLastRewardTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeLastRewardTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeLastRewardTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index c1a54e844b..3441588927 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -21,11 +21,11 @@ bool asst::RoguelikeRecruitTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -99,9 +99,9 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // __________________will-be-removed-end__________________ std::unordered_map group_count; - const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_theme); + const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_config->get_theme()); for (const auto& oper : chars_map) { - std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_theme, oper.first); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_config->get_theme(), oper.first); for (const auto& group_id : group_ids) { const std::string& group_name = group_list[group_id]; group_count[group_name]++; @@ -110,7 +110,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() if (!start_complete) { for (const auto& oper : chars_map) { - auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, oper.first); + auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), oper.first); if (recruit_info.is_start) start_complete = true; } } @@ -119,7 +119,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() bool complete = true; int complete_count = 0; int complete_require = 0; - const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_theme); + const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_config->get_theme()); for (const auto& condition : team_complete_condition) { int count = 0; complete_require += condition.threshold; @@ -217,7 +217,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() } // 查询招募配置 - auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, oper_info.name); + auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), oper_info.name); int priority = 0; // 查询编队是否已持有该干员 @@ -468,7 +468,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& else { // 重置难度并放弃 status()->set_properties(Status::RoguelikeDifficulty, "0"); - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@ExitThenAbandon" }) + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@Abandon", 0) .run(); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h index 444ac8b5a6..417a89806a 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.h @@ -1,7 +1,6 @@ #pragma once #include "Common/AsstBattleDef.h" -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { @@ -13,10 +12,10 @@ namespace asst int page_index = 0; // 所在页码 (用于判断翻页方向) bool is_alternate = false; // 是否后备干员 (允许重复招募、划到后备干员时不再往右划动) }; - class RoguelikeRecruitTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeRecruitTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeRecruitTaskPlugin() override = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp index d91104c3b8..675ec0385d 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp @@ -9,11 +9,11 @@ bool asst::RoguelikeResetTaskPlugin::verify(AsstMsg msg, const json::value& deta return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -29,8 +29,11 @@ bool asst::RoguelikeResetTaskPlugin::verify(AsstMsg msg, const json::value& deta bool asst::RoguelikeResetTaskPlugin::_run() { + // 改完全部肉鸽数据之后一起删掉! // 简单粗暴,后面如果多任务间有联动可能要改改 status()->clear_number(); status()->clear_str(); + + m_roguelike_config->clear(); return true; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h index c0a921bf2c..5f048e6c49 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeResetTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeResetTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeResetTaskPlugin() = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp index 9fd2e7fcf9..f3585551bc 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp @@ -16,11 +16,11 @@ bool asst::RoguelikeShoppingTaskPlugin::verify(AsstMsg msg, const json::value& d return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -104,8 +104,8 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() } bool bought = false; - auto& all_goods = RoguelikeShopping.get_goods(m_roguelike_theme); - std::vector all_foldartal = m_roguelike_theme == "Sami" + auto& all_goods = RoguelikeShopping.get_goods(m_roguelike_config->get_theme()); + std::vector all_foldartal = m_roguelike_config->get_theme() == "Sami" ? Task.get("Sami@Roguelike@FoldartalGainOcr")->text : std::vector(); for (const auto& goods : all_goods) { @@ -170,7 +170,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() Log.info("Ready to buy", goods.name); ctrler()->click(find_it->rect); bought = true; - if (m_roguelike_theme == "Sami") { + if (m_roguelike_config->get_theme() == "Sami") { auto iter = std::find(all_foldartal.begin(), all_foldartal.end(), goods.name); if (iter != all_foldartal.end()) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h index db151729ea..c6bd8dd3ed 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeShoppingTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeShoppingTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeShoppingTaskPlugin() override = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp index 492decbff9..fd53f442f9 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp @@ -13,11 +13,11 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -45,7 +45,7 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() int delay = Task.get("RoguelikeSkillSelectionMove1")->post_delay; bool has_rookie = false; for (const auto& [name, skill_vec] : analyzer.get_result()) { - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_theme, name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), name); if (oper_info.name.empty()) { Log.warn("Unknown oper", name); continue; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h index 13c2f526cf..efb55e099b 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.h @@ -1,15 +1,15 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" #include +#include "AbstractRoguelikeTaskPlugin.h" + namespace asst { - class RoguelikeSkillSelectionTaskPlugin final : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeSkillSelectionTaskPlugin final : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeSkillSelectionTaskPlugin() override = default; virtual bool verify(AsstMsg msg, const json::value& details) const override; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp index e1d889c1ae..b8c158f229 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp @@ -16,11 +16,11 @@ bool asst::RoguelikeStageEncounterTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -39,10 +39,10 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() LogTraceFunction; std::string rogue_mode = status()->get_properties(Status::RoguelikeMode).value(); - std::vector events = RoguelikeStageEncounter.get_events(m_roguelike_theme); + std::vector events = RoguelikeStageEncounter.get_events(m_roguelike_config->get_theme()); // 刷源石锭模式和烧水模式 if (rogue_mode == "1" || rogue_mode == "4") { - events = RoguelikeStageEncounter.get_events(m_roguelike_theme + "_deposit"); + events = RoguelikeStageEncounter.get_events(m_roguelike_config->get_theme() + "_deposit"); } std::vector event_names; std::unordered_map event_map; @@ -79,7 +79,7 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() info["details"]["default_choose"] = event.default_choose; callback(AsstMsg::SubTaskExtraInfo, info); for (int j = 0; j < 2; ++j) { - ProcessTask(*this, { m_roguelike_theme + "@Roguelike@OptionChoose" + std::to_string(event.option_num) + "-" + + ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@OptionChoose" + std::to_string(event.option_num) + "-" + std::to_string(event.default_choose) }) .run(); sleep(300); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h index 1c29762f24..7793e51bf3 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "Task/AbstractTaskPlugin.h" -#include "Task/Roguelike/RoguelikeConfig.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeStageEncounterTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeStageEncounterTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeStageEncounterTaskPlugin() override = default; public: diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp index 21b0bf9a01..1e0b9f6c7c 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp @@ -13,11 +13,11 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (m_roguelike_theme.empty()) { + if (m_roguelike_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_theme + "@"; + const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -35,7 +35,7 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::_run() { LogTraceFunction; - std::string theme = m_roguelike_theme; + std::string theme = m_roguelike_config->get_theme(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); // TODO: 这段识别有点冗余,要是 plugin 能获取识别结果就好了 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h index 36ed680882..f711173808 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h @@ -1,13 +1,12 @@ #pragma once -#include "RoguelikeConfig.h" -#include "Task/AbstractTaskPlugin.h" +#include "AbstractRoguelikeTaskPlugin.h" namespace asst { - class RoguelikeStrategyChangeTaskPlugin : public AbstractTaskPlugin, public RoguelikeConfig + class RoguelikeStrategyChangeTaskPlugin : public AbstractRoguelikeTaskPlugin { public: - using AbstractTaskPlugin::AbstractTaskPlugin; + using AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin; virtual ~RoguelikeStrategyChangeTaskPlugin() override = default; public: From e0a2259b9e7ba05e2b34447fd8ae95db7d90e175 Mon Sep 17 00:00:00 2001 From: status102 Date: Tue, 31 Oct 2023 22:04:31 +0800 Subject: [PATCH 02/84] =?UTF-8?q?fix:=20=E5=85=A8=E5=B1=80=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E9=81=97=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index 239a71ca29..a801c32bd1 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -9,11 +9,11 @@ namespace asst void clear(); public: - void set_roguelike_theme(std::string roguelike_theme) { m_roguelike_config->get_theme() = std::move(roguelike_theme); } - std::string get_theme() { return m_roguelike_config->get_theme(); } + void set_roguelike_theme(std::string roguelike_theme) { m_roguelike_theme = std::move(roguelike_theme); } + std::string get_theme() { return m_roguelike_theme; } protected: // 肉鸽主题 - std::string m_roguelike_config->get_theme(); + std::string m_roguelike_theme; }; } From 94d6c5b3b2b00da6146f95efae1509ba062b4504 Mon Sep 17 00:00:00 2001 From: status102 Date: Tue, 31 Oct 2023 22:50:06 +0800 Subject: [PATCH 03/84] perf: set_roguelike_theme -> set_theme --- src/MaaCore/Task/Interface/RoguelikeTask.cpp | 2 +- src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp | 5 +---- src/MaaCore/Task/Roguelike/RoguelikeConfig.h | 6 +++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index f537efdb7b..6c22045c32 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -89,7 +89,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params) return false; } - m_roguelike_config_ptr->set_roguelike_theme(theme); + m_roguelike_config_ptr->set_theme(theme); m_roguelike_task_ptr->set_tasks({ theme + "@Roguelike@Begin" }); // 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp index 5f80198289..ea66e153fe 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.cpp @@ -1,6 +1,3 @@ #include "RoguelikeConfig.h" -void asst::RoguelikeConfig::clear() { - - -} +void asst::RoguelikeConfig::clear() {} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h index a801c32bd1..a4f5b8ddf2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeConfig.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeConfig.h @@ -9,11 +9,11 @@ namespace asst void clear(); public: - void set_roguelike_theme(std::string roguelike_theme) { m_roguelike_theme = std::move(roguelike_theme); } - std::string get_theme() { return m_roguelike_theme; } + void set_theme(std::string roguelike_theme) { m_theme = std::move(roguelike_theme); } + std::string get_theme() { return m_theme; } protected: // 肉鸽主题 - std::string m_roguelike_theme; + std::string m_theme; }; } From 3a3532f3e7854cc129bcd3ff4942b2c43286a2c9 Mon Sep 17 00:00:00 2001 From: status102 Date: Fri, 3 Nov 2023 21:09:17 +0800 Subject: [PATCH 04/84] perf: m_roguelike_config -> m_config --- .../Roguelike/AbstractRoguelikeTaskPlugin.cpp | 4 ++-- .../Roguelike/AbstractRoguelikeTaskPlugin.h | 4 ++-- .../Roguelike/RoguelikeBattleTaskPlugin.cpp | 18 +++++++------- .../Roguelike/RoguelikeControlTaskPlugin.cpp | 6 ++--- .../RoguelikeCustomStartTaskPlugin.cpp | 4 ++-- .../Roguelike/RoguelikeDebugTaskPlugin.cpp | 4 ++-- ...RoguelikeDifficultySelectionTaskPlugin.cpp | 12 +++++----- .../RoguelikeFoldartalGainTaskPlugin.cpp | 8 +++---- .../RoguelikeFoldartalUseTaskPlugin.cpp | 24 +++++++++---------- .../RoguelikeFormationTaskPlugin.cpp | 10 ++++---- .../RoguelikeLastRewardTaskPlugin.cpp | 8 +++---- .../Roguelike/RoguelikeRecruitTaskPlugin.cpp | 16 ++++++------- .../Roguelike/RoguelikeResetTaskPlugin.cpp | 6 ++--- .../Roguelike/RoguelikeShoppingTaskPlugin.cpp | 10 ++++---- .../RoguelikeSkillSelectionTaskPlugin.cpp | 6 ++--- .../RoguelikeStageEncounterTaskPlugin.cpp | 10 ++++---- .../RoguelikeStrategyChangeTaskPlugin.cpp | 6 ++--- 17 files changed, 78 insertions(+), 78 deletions(-) diff --git a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp index 3e0f8cc4af..e316fe4801 100644 --- a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.cpp @@ -2,6 +2,6 @@ asst::AbstractRoguelikeTaskPlugin::AbstractRoguelikeTaskPlugin(const AsstCallback& callback, Assistant* inst, std::string_view task_chain, - std::shared_ptr roguelike_config) - : AbstractTaskPlugin(callback, inst, task_chain), m_roguelike_config(roguelike_config) + std::shared_ptr config) + : AbstractTaskPlugin(callback, inst, task_chain), m_config(config) {} diff --git a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h index fdd1902337..b924e92d5f 100644 --- a/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/AbstractRoguelikeTaskPlugin.h @@ -11,9 +11,9 @@ namespace asst { public: AbstractRoguelikeTaskPlugin(const AsstCallback& callback, Assistant* inst, std::string_view task_chain, - std::shared_ptr roguelike_data); + std::shared_ptr data); protected: - std::shared_ptr m_roguelike_config; + std::shared_ptr m_config; }; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp index 25c131c90f..bfbe2f3def 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeBattleTaskPlugin.cpp @@ -35,11 +35,11 @@ bool asst::RoguelikeBattleTaskPlugin::verify(AsstMsg msg, const json::value& det return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -95,7 +95,7 @@ bool asst::RoguelikeBattleTaskPlugin::_run() void asst::RoguelikeBattleTaskPlugin::wait_until_start_button_clicked() { - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@WaitForStartButtonClicked" }) + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@WaitForStartButtonClicked" }) .set_task_delay(0) .set_retry_times(0) .run(); @@ -331,7 +331,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() // 构造当前地图的部署指令列表 std::vector deploy_plan_list; // 获取当前肉鸽的分组信息[干员组1名称,干员组2名称,...] - const auto& groups = RoguelikeRecruit.get_group_info(m_roguelike_config->get_theme()); + const auto& groups = RoguelikeRecruit.get_group_info(m_config->get_theme()); // 获取当前肉鸽的分组内排名信息 // const auto& group_rank = RoguelikeRecruit.get_group_rank(rogue_theme); for (const auto& [name, oper] : m_cur_deployment_opers) { @@ -343,9 +343,9 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() const std::string& oper_name = oper_name_in_config(oper); // 获取招募信息 - const auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), oper_name); + const auto& recruit_info = RoguelikeRecruit.get_oper_info(m_config->get_theme(), oper_name); // 获取会用到该干员的干员组[干员组1序号,干员组2序号,...] - std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_config->get_theme(), oper_name); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_config->get_theme(), oper_name); for (const auto& group_id : group_ids) { // 当前干员组名,string类型 @@ -395,7 +395,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_best_deploy() m_deployed_time.insert_or_assign(deploy_plan.oper_name, deployed_time); // 获取技能用法和使用次数 const auto& oper_info = - RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), deploy_plan.oper_name); + RoguelikeRecruit.get_oper_info(m_config->get_theme(), deploy_plan.oper_name); m_skill_usage[deploy_plan.oper_name] = oper_info.skill_usage; m_skill_times[deploy_plan.oper_name] = oper_info.skill_times; Log.trace(" best deploy is", deploy_plan.oper_name, "with rank", deploy_plan.rank); @@ -424,7 +424,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() auto pre_battlefield = m_battlefield_opers; for (const auto& [name, loc] : pre_battlefield) { - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_config->get_theme(), name); auto iter = m_deployed_time.find(name); if (iter != m_deployed_time.end() && oper_info.auto_retreat > 0) { if (std::chrono::steady_clock::now() - m_deployed_time.at(name) >= @@ -520,7 +520,7 @@ bool asst::RoguelikeBattleTaskPlugin::do_once() auto deployed_time = std::chrono::steady_clock::now(); m_deployed_time.insert_or_assign(best_oper.name, deployed_time); // 获取技能用法和使用次数 - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), best_oper.name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_config->get_theme(), best_oper.name); m_skill_usage[best_oper.name] = oper_info.skill_usage; m_skill_times[best_oper.name] = oper_info.skill_times; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp index de652cd667..1fb6c7c7c4 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeControlTaskPlugin.cpp @@ -10,11 +10,11 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -34,7 +34,7 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de void asst::RoguelikeControlTaskPlugin::exit_then_stop() { - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ExitThenAbandon" }) + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@StartExplore", 0) .set_times_limit("Roguelike@Abandon", 0) .run(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp index 69e022e627..4d0c0ebf5e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeCustomStartTaskPlugin.cpp @@ -14,11 +14,11 @@ bool asst::RoguelikeCustomStartTaskPlugin::verify(AsstMsg msg, const json::value return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp index 35c7f39a30..4466f026c0 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDebugTaskPlugin.cpp @@ -14,11 +14,11 @@ bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& deta return true; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp index c3298025db..53fcf8a73e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeDifficultySelectionTaskPlugin.cpp @@ -10,11 +10,11 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::verify(AsstMsg msg, const jso return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -37,14 +37,14 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run() // 当前难度 std::string difficulty = status()->get_properties(Status::RoguelikeDifficulty).value(); - if (m_roguelike_config->get_theme() != "Phantom" && mode == "4") { + if (m_config->get_theme() != "Phantom" && mode == "4") { if (difficulty == "max") { - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ChooseDifficulty_Hardest" }).run(); + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ChooseDifficulty_Hardest" }).run(); } else { - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ChooseDifficulty_Easiest" }).run(); + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ChooseDifficulty_Easiest" }).run(); } - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ChooseDifficultyConfirm" }).run(); + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ChooseDifficultyConfirm" }).run(); } return true; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp index 8a6da5640a..0605610674 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalGainTaskPlugin.cpp @@ -11,14 +11,14 @@ bool asst::RoguelikeFoldartalGainTaskPlugin::verify(AsstMsg msg, const json::val return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - if (m_roguelike_config->get_theme() != "Sami") { + if (m_config->get_theme() != "Sami") { return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; @@ -56,7 +56,7 @@ bool asst::RoguelikeFoldartalGainTaskPlugin::_run() { LogTraceFunction; - std::string theme = m_roguelike_config->get_theme(); + std::string theme = m_config->get_theme(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); auto image = ctrler()->get_image(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp index f0dd74721e..f7ceca7931 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFoldartalUseTaskPlugin.cpp @@ -14,15 +14,15 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::verify(AsstMsg msg, const json::valu return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - if (m_roguelike_config->get_theme() != "Sami") { + if (m_config->get_theme() != "Sami") { return false; } std::string mode = status()->get_properties(Status::RoguelikeMode).value(); - std::string task_name_pre = m_roguelike_config->get_theme() + "@Roguelike@Stage"; + std::string task_name_pre = m_config->get_theme() + "@Roguelike@Stage"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; @@ -73,9 +73,9 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::_run() { LogTraceFunction; - std::string theme = m_roguelike_config->get_theme(); + std::string theme = m_config->get_theme(); - std::vector combination = RoguelikeFoldartal.get_combination(m_roguelike_config->get_theme()); + std::vector combination = RoguelikeFoldartal.get_combination(m_config->get_theme()); std::string overview_str = status()->get_str(Status::RoguelikeFoldartalOverview).value_or(json::value().to_string()); @@ -139,16 +139,16 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::use_board(const std::string& up_boar { Log.trace("Try to use the board pair", up_board, down_board); - if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@Foldartal" }).run()) { + if (ProcessTask(*this, { m_config->get_theme() + "@Roguelike@Foldartal" }).run()) { swipe_to_top(); // todo:插入一个滑动时顺便更新密文板overview,因为有的板子可以用两次 if (search_and_click_board(up_board) && search_and_click_board(down_board)) { search_and_click_stage(); - if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseConfirm" }).run()) { + if (ProcessTask(*this, { m_config->get_theme() + "@Roguelike@FoldartalUseConfirm" }).run()) { return true; } } - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalBack" }).run(); + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@FoldartalBack" }).run(); } return false; } @@ -161,7 +161,7 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::search_and_click_board(const std::st int try_time = 0; while (try_time < max_retry && !need_exit()) { OCRer analyzer(ctrler()->get_image()); - std::string task_name = m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOcr"; + std::string task_name = m_config->get_theme() + "@Roguelike@FoldartalUseOcr"; analyzer.set_task_info(task_name); analyzer.set_required({ board }); if (!analyzer.analyze()) { @@ -187,13 +187,13 @@ bool asst::RoguelikeFoldartalUseTaskPlugin::search_and_click_stage() sleep(1000); // 节点会闪烁,所以这里不用单次Match - if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOnStage" }).run()) { + if (ProcessTask(*this, { m_config->get_theme() + "@Roguelike@FoldartalUseOnStage" }).run()) { return true; } // 滑到最右边,萨米的地图只有两页,暂时先这么糊着,出现识别不到再写循环 ProcessTask(*this, { "SwipeToTheRight" }).run(); sleep(1000); - if (ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOnStage" }).run()) { + if (ProcessTask(*this, { m_config->get_theme() + "@Roguelike@FoldartalUseOnStage" }).run()) { return true; } return false; @@ -209,7 +209,7 @@ void asst::RoguelikeFoldartalUseTaskPlugin::swipe_to_top() while (try_time < max_retry && !need_exit()) { while (try_time < max_retry && !need_exit()) { OCRer analyzer(ctrler()->get_image()); - analyzer.set_task_info(m_roguelike_config->get_theme() + "@Roguelike@FoldartalUseOcr"); + analyzer.set_task_info(m_config->get_theme() + "@Roguelike@FoldartalUseOcr"); if (analyzer.analyze()) { return; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp index 0a71cf45aa..b578b16772 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp @@ -15,11 +15,11 @@ bool asst::RoguelikeFormationTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -102,14 +102,14 @@ void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() Log.info(__FUNCTION__, "max_page: ", max_page, " oper_count: ", oper_list.size()); std::vector sorted_oper_list; - const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_config->get_theme()); - const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_config->get_theme()); + const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_config->get_theme()); + const auto& group_list = RoguelikeRecruit.get_group_info(m_config->get_theme()); for (const auto& condition : team_complete_condition) { // 优先选择阵容核心干员 int count = 0; int require = condition.threshold; for (const std::string& group_name : condition.groups) { for (const auto& oper : oper_list) { - std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_config->get_theme(), oper.name); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_config->get_theme(), oper.name); for (const auto& group_id : group_ids) { std::string oper_group = group_list[group_id]; if (oper_group == group_name) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp index cb95d26f18..5cbcca33c3 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeLastRewardTaskPlugin.cpp @@ -11,11 +11,11 @@ bool asst::RoguelikeLastRewardTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -45,7 +45,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() LogTraceFunction; std::string mode = status()->get_properties(Status::RoguelikeMode).value(); - std::string stages_task_name = m_roguelike_config->get_theme() + "@Roguelike@Stages"; + std::string stages_task_name = m_config->get_theme() + "@Roguelike@Stages"; std::string strategy_task_name = stages_task_name + "_default"; if (Task.get(strategy_task_name) == nullptr) { @@ -59,7 +59,7 @@ bool asst::RoguelikeLastRewardTaskPlugin::_run() // 需要开局凹直升 bool start_with_elite_two = status()->get_properties(Status::RoguelikeStartWithEliteTwo).value() == std::to_string(true); - if (m_roguelike_config->get_theme() != "Phantom" && mode == "4") { + if (m_config->get_theme() != "Phantom" && mode == "4") { if (m_is_next_hardest) { status()->set_properties(Status::RoguelikeDifficulty, "max"); // 获得热水壶和演讲时停止肉鸽(凹直升则继续),获得其他奖励时重开 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp index 3441588927..15c902a1f2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeRecruitTaskPlugin.cpp @@ -21,11 +21,11 @@ bool asst::RoguelikeRecruitTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -99,9 +99,9 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // __________________will-be-removed-end__________________ std::unordered_map group_count; - const auto& group_list = RoguelikeRecruit.get_group_info(m_roguelike_config->get_theme()); + const auto& group_list = RoguelikeRecruit.get_group_info(m_config->get_theme()); for (const auto& oper : chars_map) { - std::vector group_ids = RoguelikeRecruit.get_group_id(m_roguelike_config->get_theme(), oper.first); + std::vector group_ids = RoguelikeRecruit.get_group_id(m_config->get_theme(), oper.first); for (const auto& group_id : group_ids) { const std::string& group_name = group_list[group_id]; group_count[group_name]++; @@ -110,7 +110,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() if (!start_complete) { for (const auto& oper : chars_map) { - auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), oper.first); + auto& recruit_info = RoguelikeRecruit.get_oper_info(m_config->get_theme(), oper.first); if (recruit_info.is_start) start_complete = true; } } @@ -119,7 +119,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() bool complete = true; int complete_count = 0; int complete_require = 0; - const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_roguelike_config->get_theme()); + const auto& team_complete_condition = RoguelikeRecruit.get_team_complete_info(m_config->get_theme()); for (const auto& condition : team_complete_condition) { int count = 0; complete_require += condition.threshold; @@ -217,7 +217,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() } // 查询招募配置 - auto& recruit_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), oper_info.name); + auto& recruit_info = RoguelikeRecruit.get_oper_info(m_config->get_theme(), oper_info.name); int priority = 0; // 查询编队是否已持有该干员 @@ -468,7 +468,7 @@ bool asst::RoguelikeRecruitTaskPlugin::recruit_appointed_char(const std::string& else { // 重置难度并放弃 status()->set_properties(Status::RoguelikeDifficulty, "0"); - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@ExitThenAbandon" }) + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ExitThenAbandon" }) .set_times_limit("Roguelike@Abandon", 0) .run(); } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp index 675ec0385d..c88b35937e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeResetTaskPlugin.cpp @@ -9,11 +9,11 @@ bool asst::RoguelikeResetTaskPlugin::verify(AsstMsg msg, const json::value& deta return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -34,6 +34,6 @@ bool asst::RoguelikeResetTaskPlugin::_run() status()->clear_number(); status()->clear_str(); - m_roguelike_config->clear(); + m_config->clear(); return true; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp index f3585551bc..c6e1351566 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeShoppingTaskPlugin.cpp @@ -16,11 +16,11 @@ bool asst::RoguelikeShoppingTaskPlugin::verify(AsstMsg msg, const json::value& d return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -104,8 +104,8 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() } bool bought = false; - auto& all_goods = RoguelikeShopping.get_goods(m_roguelike_config->get_theme()); - std::vector all_foldartal = m_roguelike_config->get_theme() == "Sami" + auto& all_goods = RoguelikeShopping.get_goods(m_config->get_theme()); + std::vector all_foldartal = m_config->get_theme() == "Sami" ? Task.get("Sami@Roguelike@FoldartalGainOcr")->text : std::vector(); for (const auto& goods : all_goods) { @@ -170,7 +170,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() Log.info("Ready to buy", goods.name); ctrler()->click(find_it->rect); bought = true; - if (m_roguelike_config->get_theme() == "Sami") { + if (m_config->get_theme() == "Sami") { auto iter = std::find(all_foldartal.begin(), all_foldartal.end(), goods.name); if (iter != all_foldartal.end()) { diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp index fd53f442f9..2c93258d8d 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeSkillSelectionTaskPlugin.cpp @@ -13,11 +13,11 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -45,7 +45,7 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() int delay = Task.get("RoguelikeSkillSelectionMove1")->post_delay; bool has_rookie = false; for (const auto& [name, skill_vec] : analyzer.get_result()) { - const auto& oper_info = RoguelikeRecruit.get_oper_info(m_roguelike_config->get_theme(), name); + const auto& oper_info = RoguelikeRecruit.get_oper_info(m_config->get_theme(), name); if (oper_info.name.empty()) { Log.warn("Unknown oper", name); continue; diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp index b8c158f229..d5bfc39730 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp @@ -16,11 +16,11 @@ bool asst::RoguelikeStageEncounterTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -39,10 +39,10 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() LogTraceFunction; std::string rogue_mode = status()->get_properties(Status::RoguelikeMode).value(); - std::vector events = RoguelikeStageEncounter.get_events(m_roguelike_config->get_theme()); + std::vector events = RoguelikeStageEncounter.get_events(m_config->get_theme()); // 刷源石锭模式和烧水模式 if (rogue_mode == "1" || rogue_mode == "4") { - events = RoguelikeStageEncounter.get_events(m_roguelike_config->get_theme() + "_deposit"); + events = RoguelikeStageEncounter.get_events(m_config->get_theme() + "_deposit"); } std::vector event_names; std::unordered_map event_map; @@ -79,7 +79,7 @@ bool asst::RoguelikeStageEncounterTaskPlugin::_run() info["details"]["default_choose"] = event.default_choose; callback(AsstMsg::SubTaskExtraInfo, info); for (int j = 0; j < 2; ++j) { - ProcessTask(*this, { m_roguelike_config->get_theme() + "@Roguelike@OptionChoose" + std::to_string(event.option_num) + "-" + + ProcessTask(*this, { m_config->get_theme() + "@Roguelike@OptionChoose" + std::to_string(event.option_num) + "-" + std::to_string(event.default_choose) }) .run(); sleep(300); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp index 1e0b9f6c7c..26e482b16a 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp @@ -13,11 +13,11 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (m_roguelike_config->get_theme().empty()) { + if (m_config->get_theme().empty()) { Log.error("Roguelike name doesn't exist!"); return false; } - const std::string roguelike_name = m_roguelike_config->get_theme() + "@"; + const std::string roguelike_name = m_config->get_theme() + "@"; const std::string& task = details.get("details", "task", ""); std::string_view task_view = task; if (task_view.starts_with(roguelike_name)) { @@ -35,7 +35,7 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::_run() { LogTraceFunction; - std::string theme = m_roguelike_config->get_theme(); + std::string theme = m_config->get_theme(); std::string mode = status()->get_properties(Status::RoguelikeMode).value(); // TODO: 这段识别有点冗余,要是 plugin 能获取识别结果就好了 From aa2de3c197dea6ad4559fbce2a4f54c837a63669 Mon Sep 17 00:00:00 2001 From: status102 Date: Sun, 5 Nov 2023 15:46:44 +0800 Subject: [PATCH 05/84] =?UTF-8?q?perf:=20=E8=87=AA=E5=8A=A8=E5=9C=A8?= =?UTF-8?q?=E5=88=B7=E7=90=86=E6=99=BA=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E6=97=B6=E8=B0=83=E6=95=B4=E8=BF=9E=E6=88=98=E6=AC=A1?= =?UTF-8?q?=E6=95=B0=E4=B8=BA1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 38 +++++++++++++++++++- resource/template/FightSeries-Default-1.png | Bin 0 -> 2251 bytes resource/template/FightSeries-Icon.png | Bin 0 -> 2028 bytes resource/template/FightSeries-List-1.png | Bin 0 -> 2503 bytes src/MaaCore/MaaCore.vcxproj | 2 ++ src/MaaCore/MaaCore.vcxproj.filters | 12 ++++--- src/MaaCore/Task/Fight/FightTimesPlugin.cpp | 25 +++++++++++++ src/MaaCore/Task/Fight/FightTimesPlugin.h | 20 +++++++++++ src/MaaCore/Task/Interface/FightTask.cpp | 2 ++ 9 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 resource/template/FightSeries-Default-1.png create mode 100644 resource/template/FightSeries-Icon.png create mode 100644 resource/template/FightSeries-List-1.png create mode 100644 src/MaaCore/Task/Fight/FightTimesPlugin.cpp create mode 100644 src/MaaCore/Task/Fight/FightTimesPlugin.h diff --git a/resource/tasks.json b/resource/tasks.json index 9de9a065af..4fc9076cc0 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -3948,7 +3948,43 @@ "StartButton1" ] }, + "FightSeries-Default-1": { + "action": "DoNothing", + "roi": [ + 945, + 580, + 100, + 50 + ] + }, + "FightSeries-Icon": { + "action": "ClickSelf", + "roi": [ + 945, + 580, + 100, + 50 + ], + "next": [ + "FightSeries-List-1" + ] + }, + "FightSeries-List": { + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 950, + 180, + 100, + 400 + ] + }, + "FightSeries-List-1": { + "baseTask": "FightSeries-List", + "template": "FightSeries-List-1.png" + }, "StartButton1": { + "doc": "绑定插件调整连战次数", "algorithm": "OcrDetect", "action": "ClickSelf", "text": [ @@ -15939,4 +15975,4 @@ "Stop" ] } -} \ No newline at end of file +} diff --git a/resource/template/FightSeries-Default-1.png b/resource/template/FightSeries-Default-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec13473bfe6a9f39bacb9b06a7454970126fddf GIT binary patch literal 2251 zcmV;+2sHPJP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2w+J>K~!i%?V8U7fCCO`l`n3{j+%1-z0-rfIRpS_9w=U@M9m1}j``LrvQYE^3WnlzhD z=|xOS%U$+>`T()WJ^i{|DY*5;kIEJK^W8f+IzE<0qhSk+#bTZEe<(@2dwWt>a_Wt` zm6m=&lFm)km6xI}V%L|JT9D+|6eT8=O3B2;gp7`k%GlUgPaBd~Q&l}yDJ+$WQm;Fb z|91#-Ywb(Y`1rWY%*-f3(~?flv`I=RNePL^_Z6pII1ic%;Pw4tjx{L$;|W&tcl)WZ7>5#?h3?YWMo9^^qyAB$k|i% z-QC@lPoF+Xxm@lc^((kXI)v?E{SQT(q{VDj*VmHi>1iVjueG%`xpwWEsTyFh?%Q2^Zcs7T z<|-1Zh7d|!vrUq9QlNU9>NyLA&t|WHAJ=fzNLpWCHUz%K@=D5*5?js2l?NYcO5 zR7&mFv`kJ-NnBOWRvRoBJN4%uf0zo^>#lEysH;R0lSbWc+_+&SnM|6;!mc0<#efCgP08H+yxB3v2~`!FwYR$`zyJPH4s@KWLXulU%uL0|)YQ}lHl?P~ z_R-;?d9iw}CfjOH-l?j5{`^@gl}dME5!5w8Kh%Cm4AREn6G|N4jLSok$#Ih+?(=GA z7(~VoCJE1e>((t;$RI{+BO~q&9IB2;w;`E*^8C!dbxl*kwpX z>OD~q0zo9=zHJzi?%lg5w{PFJv7bGACXXIHGE)(5p3Ra3miTD?6t#Hta1oB8|AVN-T?cC7s@c>MUWJb(UN zo<4ml8yg$);>8Q&;46~&ol;R-US5{8il4uB@(Ds^fyo-VyToC0Scv zleL>SC8rXRXh-=c0dhWSJ_u3XYqAjL>On$Hh(XL2V!&P+hzB1$cp&%h-#3CFn{j(c z@(-f0Go&WT3)&~fBw4&c)V9SA#O>D; z>{&lx%rWpjN%y!YWkwRlvtFxP@aMDrK{#O@Jt!4R@?Hr)Jang&Cd&FpUvfmB7oPO2 z5V&f*7}DawTn`Qodh$U?Le(!5MiMa+!Pv;?**zOTB2EJ8w7tD$39<(^V_1R!F-+7* zW5|*Ga4a_CvQwYVQ|IP1$Qw_#f1M3ykto#e{rmSu6sm`cu{d(WVZbv2sTZI_8S%u{gv3z-E=9e~xJDl3EGjb~Mz!e6>ToWfr^`JEjlsOlt(dxkNx*f=B+ zQXs>7G1Lvuw!gn`L}C*!6CFt+u)}39W*57L?-Gb2FvEKx2^{5m_dP5@05XtD$cnmo zB$YO7)UYAIX;3xqP87Yrp#h~&QJ{y`;g-?|N;WS9FtmOF7asFFA|4u5z)rMzzlANmO zjqM3QlCvwW!XJBhmGUGX6c6Opt5U)9-bQe$ih}tP$9(0Zrv@my@zg`njZ*PAzPlG$|O5O$0ZroNr*)b%Ir-`n?T&VC9V7~fW}3fC4oWfIEgyizUud*NV>L^Z-wf> zg30B`m3;9BXm~BW9rqv|^yBRM_~=-QrJ@CRWc9~^s|V*L3H0<0JJ8UV$;(G)+x}>qwj+H_C5d-)cs>Xs*gHwJqU#xa=Kzwxz=m&!*ss6* zqxEj{gEZ-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2Z2dMK~!i%)tT9D z8#fe&Ig(}V-nDtD5x4gVP@uhNulgYAtN1Y+1VIctj(6GBzE970C`zM=#_|$7=&vv% z4Tt3Uc~*|SzyAEg@AL=e^6J`jdp*-1^v!5AGPCfc`S$A!xF3KQdS>2`S3<1S>6)YC zW7BH4&2TtWVLZ>9wErt&*Ect2AcO|Pfi_=0L1IrP_XD*Byq!wLhnSNiOeUAhnRGgB zmX?;x^78Ub9~$n98Mj5-jYi!J26kh9G$}BbSTdP3D=RBPDsNU-SH{E=LM&lov6v+% z1BRoal54j+re3c}tD9=IYFe$<96x@Zld*lX+f?SUj7} z9^xZ?sXAKCrbfR(zi-aPKaRzWZf|c*x7(cx6T(0$m8OhCGiVi3X(8)^2L6>wB~@EI z=S)%&Mc{i7OQ%wY9zw_u7Hx`fx3_m1-MT$Xh(6nb-}y{sK$~n#r_(lxM8cAbTg^dG zHc&SR@{?5H28R)K{}G6be;n#e*ch40JuAAwjwa+V9%i@}Pvh1Yh!xst3gW3&U98I6+k^Ac$AyBS~m9$>1# zbg}*YeRX;ki^9C+xrdUYP`$01Ds`w>02uirvz%NuTbo-Nd4<-a$zjgOTPl@i$~*iy zCjrd$;R>;h4V#o*{(3G{Q2t4~l&DH{4Pry0r?g8-aB> za*%)&#k%X85TnQ?e{C!<$uOdYbe(DX3Rv z?pZ6qCo1KNo+5OoC1O4VkVhL~zjdHef)tye#Jb&{xvAdhAi^>vp97LRtv8N{QJ`Go z1i$Dx2V`}J-Y|lFsw{4HyB)RRPoF-SlamuwX%xmWU;_6$c#j0kd?e%H5EHXc*pK~% zznq<&P1kZZKgSG#i+)%X{y7f>6x=|gB{y*3fgJHksIH2S!aZxxpiys_FS1F^rY)gd z8elA?m#ahXTPp~BmFS079FVnEtIhZ)#Bc*8hBK1j;!6*Yh=85H5188d`I(kz4*0-h zNdfX$&_&Sng&bzFu;5&5paz$B@7_sNB*9LF7O9>L@yf_zaEq`(IB z(H4Qz1HjA(`9weNL5N_2Z;>B4K`{R$+$W@?*O#LUrZ_$jA~_YpQ{aSUu8u665P|BV zt+TIRWw+a^?T3z%4sfw-UAP2SR#TS{Q z6CRDZT%NqMEaI&RN`XrGrlScBW;XV19+v9M3^{(>r*Qia!V z;p7?xDu_a1OCwSuVe^a%FQhPQ8x>z#PgBID06xrQvSOdph(lD#=kl5_uv>(}Nx3@H zqRD@nDkwTDm5Npx6x2|{k9ZLaoOZq&t>8q#$pdEK{qpmHzxUHmrd%pZy_m293v4Qt zs3v)+A&!dwxi`PM`wHtjluf*)S{m1HL_!iYt=ox?vQH-Z5Mt$0$*0<$kQ0-l-x0HB zBoB@ULCpGzz2S}^_BpFjP?J;i$B!TNuosPK!$g7^*Z z2y=3W_aW0A_dVv{^B$M zs39plIfz<+l0NB2%OfGipLWSlkfIp9&+Ni7L_Zlp3`BO!!u$QVU;X2gQ!RZ!n3xL+ zcD|q}3ub;Mo=YsYvYL^Eyf;0-p$#G88uJ9{ye8(#&dr5;YRrEZi(&`EEvFj*0000< KMNUMnLSTYcNyQ8R literal 0 HcmV?d00001 diff --git a/resource/template/FightSeries-List-1.png b/resource/template/FightSeries-List-1.png new file mode 100644 index 0000000000000000000000000000000000000000..33c73cfa563bed37e98b3982b054edfe2fb882aa GIT binary patch literal 2503 zcmV;&2{`tNP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D30z4;K~!i%&6>+{ zQ&$#-mn7T4Hw@TZ3aUC3$%HBx=Q2r8$rPRf#tfvfGE3P`e(plZ+MzD;jj(Ksqo+x=#=Yc%#PSu!~6?LkVY z6VT8_rsCu@q>!t-9}1EYA6}NpMQPIeG6s8UwGkQ6uuGRN+5P(u?8%cS_W1E*yLa!N z!BsWM(e!9SAgzY9LPktP=mLR?Ty8v~&dXKN)Yx9Gw96F+P8_5)nkeR~DG;Mr)Am#e zX-)>UD8~myX(i*lpFXvbn#iiz*yxCTHioA)b?cT*PM^1iybFHthUw{P zyLt0-`|`^#Y)a`+Eg2xt2Gwhbz!|1B^ zQ*38%gZMq|Y3@-XVUPU-D4hvyus39C=%)vhUe|uco<^RwsrlfEb1%V=kuZep{$b`gh1=JHw%J(N<`HBvlq;vkBpH9x;-n;RQawCMy* zj8C}d&77b1cASn|TU)lcxah&n%0{`yK`hDT!{2?-%nng&(3uC5t zwzuuWhY$Ag<43B=>Mwpno^51u<5K^k!@WMsKqWinNfZ+T}!Cqj4`^|Y6+tW}gq zfW)B@7pLbnT{mXZ@y?^+o`-T16BAxPGc)6NHT1+I-B@Vj(-|aza8v}T-0Ol+?s3@* z+dz?%r?v`Bk?EdEzf?Um;_~SUIM_Bfw{3Z8(Y7|%bS(+x$H&j9O%qt_xNHre1A@f9^Ohn|D+f{ z#BpM-tgPr%-LQp)1zjmV+S+>E*8fqKN+Wn>ib)D(o=AG2&?{OYmU2q#ndJ~$NPO_8~2 z>#Hlel5FbO--^8lHT9t#x)-zEBk1Yl@bq`wg4|Y{2;L$xpeRp81Q^Pp4Xuiy5eEUw z%gcTTD_(g7UTfAj_S_@q=YO}F)vZ>EuY4d6(m3fFeiA|iz7(;0BBeasph(wLK_J~m zIQ6MbQCIv$og-(8f`i~f^S4Nz9h@8ys8?4vhPREXPFq$guj(28;;t+nNsML0Tw!*1 zw(Zwn|7}10^iTWkxBtY7^A_GJ{ve7Dd~%@P)8+c`R$}szZf~Pd@nuZiae;2Vx+T4P z)^~#Txc~TP5XasYJ$LJR!PkpKCeXKPDa$*s6G)BHexP_z+dOy=cy-S<^JD{p})ydcGgq6M?x;8`PB6cw>Z8VWfIP@^ps# z9TM42Tt^Sz8bbDPi7V9Tv><8GO&RyTF%*tGF|XZa0x>exrZ}aFY%eoYgHnI!YITfq za_p&WA@Q0xMB)k?Ksl2%I7|_~6d2X(S^1q?IVWvT2M8}FY}^Ryl+`x2aM)PLr%$!2 zO#;I5E}))XSFKbv)L~*i4ce41XVUOT(SmLxB5+JgI4-!c4~4_{Lh^&6xsNC6{?~|s zvW?NM1(u!1=}}8WAt}cocjMb(ChADUg=j&E&Vi4ELJlZrN-~cs-n;7&UPuxvT88EU za;_z}eFS<$oYAR4)Ns$-)76NHpoIt*#RnP(TEYY}JzE}*)ZJ0YEf*#nReonz9EY1p z;W6$>?1aYyr3J>7(NPNe-@x;-#xC)?rtRXv$Wj)2#lPV zG{!k`=aZxFQfwMSY3;6b{iBXF3t5 zv+e+Kh|8f3-3nzmw)?#&N?OPT2P#S^$vZIK&~UPmMcgS=R#$p+!E`C75Cu-zeQ3~u zYSo$aPvVmRL)j>ckPA + @@ -241,6 +242,7 @@ + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index 74e958498e..701c886351 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -558,9 +558,6 @@ Source\Controller - - Source\Controller - Source\Controller @@ -672,6 +669,9 @@ Source\Task\Miscellaneous + + Source\Task\Fight + @@ -1118,5 +1118,9 @@ Source\Task\Fight + + + Source\Task\Fight + - + \ No newline at end of file diff --git a/src/MaaCore/Task/Fight/FightTimesPlugin.cpp b/src/MaaCore/Task/Fight/FightTimesPlugin.cpp new file mode 100644 index 0000000000..48e570a4f1 --- /dev/null +++ b/src/MaaCore/Task/Fight/FightTimesPlugin.cpp @@ -0,0 +1,25 @@ +#include "FightTimesPlugin.h" + +#include "Task/ProcessTask.h" + +bool asst::FightTimesPlugin::verify(AsstMsg msg, const json::value& details) const +{ + if (msg != AsstMsg::SubTaskStart || details.get("subtask", std::string()) != "ProcessTask") { + return false; + } + + return !inited && details.at("details").at("task").as_string().ends_with("StartButton1"); +} + +bool asst::FightTimesPlugin::_run() +{ + // 目前也可以做成subtask,但是给以后糊屎留个地方 + bool result = ProcessTask(*this, { "FightSeries-Default-1", "FightSeries-Icon" }).run(); + + if (!result) { + return false; + } + + inited = true; + return true; +} diff --git a/src/MaaCore/Task/Fight/FightTimesPlugin.h b/src/MaaCore/Task/Fight/FightTimesPlugin.h new file mode 100644 index 0000000000..5f70a0033f --- /dev/null +++ b/src/MaaCore/Task/Fight/FightTimesPlugin.h @@ -0,0 +1,20 @@ +#pragma once +#include "Task/AbstractTaskPlugin.h" +namespace asst +{ + class FightTimesPlugin : public AbstractTaskPlugin + { + public: + using AbstractTaskPlugin::AbstractTaskPlugin; + virtual ~FightTimesPlugin() override = default; + + virtual bool verify(AsstMsg msg, const json::value& details) const override; + + protected: + virtual bool _run() override; + + private: + // 是否成功初始化为1次 + bool inited = false; + }; +} diff --git a/src/MaaCore/Task/Interface/FightTask.cpp b/src/MaaCore/Task/Interface/FightTask.cpp index b834178e4e..6819854c2f 100644 --- a/src/MaaCore/Task/Interface/FightTask.cpp +++ b/src/MaaCore/Task/Interface/FightTask.cpp @@ -4,6 +4,7 @@ #include "Config/TaskData.h" #include "Task/Fight/DrGrandetTaskPlugin.h" +#include "Task/Fight/FightTimesPlugin.h" #include "Task/Fight/MedicineCounterPlugin.h" #include "Task/Fight/SanityBeforeStagePlugin.h" #include "Task/Fight/SideStoryReopenTask.h" @@ -50,6 +51,7 @@ asst::FightTask::FightTask(const AsstCallback& callback, Assistant* inst) m_dr_grandet_task_plugin_ptr = m_fight_task_ptr->register_plugin(); m_dr_grandet_task_plugin_ptr->set_enable(false); m_fight_task_ptr->register_plugin(); + m_fight_task_ptr->register_plugin(); m_medicine_plugin = m_fight_task_ptr->register_plugin(); m_subtasks.emplace_back(m_start_up_task_ptr); From f2ccf78db0f6e5b5638aa7156da7beec93b3fbdf Mon Sep 17 00:00:00 2001 From: status102 Date: Sun, 5 Nov 2023 22:57:37 +0800 Subject: [PATCH 06/84] =?UTF-8?q?fix:=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=83=A8=E7=BD=B2=E6=97=B6=E6=BB=91=E5=8A=A8=E8=B6=85?= =?UTF-8?q?=E5=87=BA=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 2 +- src/MaaCore/Task/BattleHelper.cpp | 64 ++++++++++++++++++++++++++++--- src/MaaCore/Task/BattleHelper.h | 2 + 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index 9de9a065af..8ccbb76ce6 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -8125,7 +8125,7 @@ "postDelay": 100, "Doc": "pre 是将干员滑动到场上的 duration 系数;post 是设置干员朝向滑动的 duration", "specialParams": [ - 400, + 200, 2, 0, 100 diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index d848043e64..6b5fb012dd 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -287,7 +287,7 @@ bool asst::BattleHelper::deploy_oper(const std::string& name, const Point& loc, Log.error("No loc", loc); return false; } - const Point& target_point = target_iter->second.pos; + Point target_point = target_iter->second.pos; int dist = static_cast( Point::distance(target_point, { oper_rect.x + oper_rect.width / 2, oper_rect.y + oper_rect.height / 2 })); @@ -307,18 +307,24 @@ bool asst::BattleHelper::deploy_oper(const std::string& name, const Point& loc, // 拖动干员朝向 if (direction != DeployDirection::None) { static const std::unordered_map DirectionMap = { - { DeployDirection::Right, Point(1, 0) }, { DeployDirection::Down, Point(0, 1) }, - { DeployDirection::Left, Point(-1, 0) }, { DeployDirection::Up, Point(0, -1) }, - { DeployDirection::None, Point(0, 0) }, + { DeployDirection::Right, Point::right() }, { DeployDirection::Down, Point::down() }, + { DeployDirection::Left, Point::left() }, { DeployDirection::Up, Point::up() }, + { DeployDirection::None, Point::zero() }, }; // 计算往哪边拖动 const Point& direction_target = DirectionMap.at(direction); - // 将方向转换为实际的 swipe end 坐标点 - static const int coeff = swipe_oper_task_ptr->special_params.at(0); + // 将方向转换为实际的 swipe end 坐标点,并对滑动距离进行缩放 + static const auto scale_size = m_inst_helper.ctrler()->get_scale_size(); + static const int coeff = + static_cast(swipe_oper_task_ptr->special_params.at(0) * scale_size.second / 720.0); Point end_point = target_point + (direction_target * coeff); + // 经粗略测算,方向区域倾泻大概是 1/5 + const static auto radian = -std::atan(0.2); + fix_swipe_out_of_limit(target_point, end_point, scale_size.first, scale_size.second, radian); + m_inst_helper.sleep(use_oper_task_ptr->post_delay); m_inst_helper.ctrler()->swipe(target_point, end_point, swipe_oper_task_ptr->post_delay); m_inst_helper.sleep(use_oper_task_ptr->pre_delay); @@ -642,6 +648,52 @@ bool asst::BattleHelper::cancel_oper_selection() return ProcessTask(this_task(), { "BattleCancelSelection" }).run(); } +void asst::BattleHelper::fix_swipe_out_of_limit(Point& p1, Point& p2, int width, int height, double radian) +{ + Point direct = Point::zero(); + int distance = 0; + if (p2.y > height) { + // 下边界超限 + direct = Point::up(); + distance = p2.y - height; + } + else if (p2.x > width) { + // 右边界超限 + direct = Point::left(); + distance = p2.x - width; + } + else if (p2.y < 0) { + // 上边界超限 + direct = Point::down(); + distance = -p2.y; + } + else if (p2.x < 0) { + // 左边界超限 + direct = Point::right(); + distance = -p2.x; + } + else { + return; + } + + std::tuple adjust_scale = { + direct.x * std::cos(radian) + direct.y * std::sin(radian), + direct.y * std::cos(radian) - direct.x * std::sin(radian), + }; + + // 旋转后偏移值会不够,计算补偿比例 + double adjust_more = std::get<0>(adjust_scale) * direct.x + std::get<1>(adjust_scale) * direct.y; + + Point adjust = { + static_cast(std::get<0>(adjust_scale) / adjust_more * distance), + static_cast(std::get<1>(adjust_scale) / adjust_more * distance), + }; + + Log.info(__FUNCTION__, "swipe end_point out of limit, start:", p1, ", end:", p2, ", adjust:", adjust); + p1 += adjust; + p2 += adjust; +} + bool asst::BattleHelper::move_camera(const std::pair& delta) { LogTraceFunction; diff --git a/src/MaaCore/Task/BattleHelper.h b/src/MaaCore/Task/BattleHelper.h index 625ce3850e..186a2ba675 100644 --- a/src/MaaCore/Task/BattleHelper.h +++ b/src/MaaCore/Task/BattleHelper.h @@ -61,6 +61,8 @@ namespace asst bool click_retreat(); // 这个是不带识别的,直接点 bool click_skill(bool keep_waiting = true); // 这个是带识别的,转好了才点 bool cancel_oper_selection(); + // 修正终点超出范围的滑动,纠正时是否需要顺时针旋转 + void fix_swipe_out_of_limit(Point& p1, Point& p2, int width, int height, double radian = 0); bool move_camera(const std::pair& delta); std::string analyze_detail_page_oper_name(const cv::Mat& image); From eac8262cf9d411ba92a310735321fe5171fee3ec Mon Sep 17 00:00:00 2001 From: Horror Proton <107091537+horror-proton@users.noreply.github.com> Date: Sun, 5 Nov 2023 00:47:53 +0800 Subject: [PATCH 07/84] feat: ability to recognize long drop list --- .../Task/Fight/StageDropsTaskPlugin.cpp | 55 ++++++++++++++++++- .../Miscellaneous/StageDropsImageAnalyzer.cpp | 18 +++++- .../Miscellaneous/StageDropsImageAnalyzer.h | 3 +- 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp index 754f73557e..6e50b4e33c 100644 --- a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp @@ -4,6 +4,7 @@ #include #include +#include "Common/AsstTypes.h" #include "Common/AsstVersion.h" #include "Config/Miscellaneous/ItemConfig.h" #include "Config/Miscellaneous/StageDropsConfig.h" @@ -13,6 +14,7 @@ #include "Task/ProcessTask.h" #include "Task/ReportDataTask.h" #include "Utils/Logger.hpp" +#include "Vision/Matcher.h" #include "Vision/Miscellaneous/StageDropsImageAnalyzer.h" bool asst::StageDropsTaskPlugin::verify(AsstMsg msg, const json::value& details) const @@ -109,8 +111,57 @@ bool asst::StageDropsTaskPlugin::recognize_drops() return false; } - StageDropsImageAnalyzer analyzer(ctrler()->get_image()); - bool ret = analyzer.analyze(); + auto image_stride = ctrler()->get_image().clone(); + StageDropsImageAnalyzer analyzer(image_stride); + + bool ret = false; + Point cropped_out = {}; + while (!analyzer.analyze_baseline(cropped_out)) { + ret = false; + if (cropped_out == Point {}) break; // other error, return false + + // else: more materials to reveal? + + cropped_out.y -= 4; + cropped_out.x -= image_stride.cols - WindowWidthDefault; + const int swipe_dist = 200; + ctrler()->swipe(cropped_out, cropped_out + swipe_dist * Point::left(), 1000, true); + sleep(2000); + + const cv::Rect ref_roi = { image_stride.cols - 320, 520, 280, 120 }; + auto new_img = ctrler()->get_image(); + + Matcher offset_match(new_img(cv::Rect { 0, ref_roi.y, new_img.cols, ref_roi.height })); + offset_match.set_templ(image_stride(ref_roi)); + offset_match.set_threshold(0.7); + if (!offset_match.analyze()) break; + + // int offset = ref_roi.x - offset_match.get_result().rect.x; + const int offset = (new_img.cols - offset_match.get_result().rect.x) - (image_stride.cols - ref_roi.x); + Log.trace("new image offset:", offset); + if (offset <= 4) { + ret = true; + break; + } + const int rel_x = offset + image_stride.cols - new_img.cols; + + const cv::Rect overlay_rect = { 540, 500, 740, 220 }; + cv::Rect overlay_rect_on_stride = overlay_rect; + overlay_rect_on_stride.x += rel_x; + + cv::Mat new_stride = + cv::Mat { image_stride.rows, overlay_rect_on_stride.br().x, image_stride.type(), cv::Scalar(0) }; + image_stride.copyTo(new_stride(cv::Rect { 0, 0, image_stride.cols, image_stride.rows })); + new_img(overlay_rect).copyTo(new_stride(overlay_rect_on_stride)); + + image_stride = new_stride; + + ret = true; + analyzer.set_image(image_stride); + } + + // image stride constructed, start main step + ret &= analyzer.analyze(); auto&& [code, difficulty] = analyzer.get_stage_key(); m_stage_code = std::move(code); diff --git a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp index d5684eb3b8..b6f7b2ba9d 100644 --- a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp +++ b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp @@ -3,6 +3,7 @@ #include #include +#include "Common/AsstTypes.h" #include "Utils/Ranges.hpp" #include "Utils/NoWarningCV.h" @@ -226,7 +227,7 @@ bool asst::StageDropsImageAnalyzer::analyze_drops() { LogTraceFunction; - if (!analyze_baseline()) { + if (Point p {}; !analyze_baseline(p) && p == Point {}) { return false; } @@ -361,10 +362,12 @@ bool asst::StageDropsImageAnalyzer::analyze_drops_for_12() return !flag_analyzer.analyze(); } -bool asst::StageDropsImageAnalyzer::analyze_baseline() +bool asst::StageDropsImageAnalyzer::analyze_baseline(Point& cropped_out) { LogTraceFunction; + m_baseline.clear(); + auto task_ptr = Task.get("StageDrops-BaseLine"); cv::Mat preprocessed_roi; @@ -386,7 +389,9 @@ bool asst::StageDropsImageAnalyzer::analyze_baseline() cv::getStructuringElement(cv::MORPH_RECT, { 3, 1 })); // cropping after derivatives, dilation, and erosion - cv::cvtColor(preprocessed_roi(make_rect(task_ptr->roi)), preprocessed_roi, cv::COLOR_BGR2GRAY); + auto roi = make_rect(task_ptr->roi); + roi.width = WindowWidthDefault - roi.br().x + m_image.cols; // image may be wider than 1280 + cv::cvtColor(preprocessed_roi(roi), preprocessed_roi, cv::COLOR_BGR2GRAY); } cv::Mat preprocessed_bin; @@ -457,6 +462,13 @@ bool asst::StageDropsImageAnalyzer::analyze_baseline() Log.trace(__FUNCTION__, "baseline", key.to_string()); } + if (m_image.cols - (x_offset + bounding_rect.width) < 30 + max_spacing) { + cropped_out.x = x_offset + bounding_rect.width; + cropped_out.y = task_ptr->roi.y; + Log.trace("bounding_rect.right=", cropped_out.x, ", more materials to reveal?"); + return false; + } + return !m_baseline.empty(); } diff --git a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h index 15b0133bc0..e44648c538 100644 --- a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h +++ b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h @@ -23,12 +23,13 @@ namespace asst // > const auto& get_drops() const noexcept { return m_drops; } + bool analyze_baseline(Point& cropped_out); + protected: bool analyze_stage_code(); bool analyze_times(); bool analyze_stars(); bool analyze_difficulty(); - bool analyze_baseline(); bool analyze_drops(); // 落叶殇火 活动(异格夜刀), act24side, 2023-03 bool analyze_drops_for_CF(); From 466e1716825be05f7291d9d84f4edbc0ca00348e Mon Sep 17 00:00:00 2001 From: Horror Proton <107091537+horror-proton@users.noreply.github.com> Date: Sun, 5 Nov 2023 23:05:57 +0800 Subject: [PATCH 08/84] chore: revert some changes on analyze_baseline --- .../Task/Fight/StageDropsTaskPlugin.cpp | 19 +++++++++---------- .../Miscellaneous/StageDropsImageAnalyzer.cpp | 12 ++++-------- .../Miscellaneous/StageDropsImageAnalyzer.h | 3 +-- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp index 6e50b4e33c..8d1f4b2797 100644 --- a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp @@ -6,6 +6,7 @@ #include "Common/AsstTypes.h" #include "Common/AsstVersion.h" +#include "Config/GeneralConfig.h" #include "Config/Miscellaneous/ItemConfig.h" #include "Config/Miscellaneous/StageDropsConfig.h" #include "Config/TaskData.h" @@ -115,28 +116,26 @@ bool asst::StageDropsTaskPlugin::recognize_drops() StageDropsImageAnalyzer analyzer(image_stride); bool ret = false; - Point cropped_out = {}; - while (!analyzer.analyze_baseline(cropped_out)) { + while (true) { ret = false; - if (cropped_out == Point {}) break; // other error, return false - // else: more materials to reveal? + // more materials to reveal? + + auto swipe_begin = Point { WindowWidthDefault - 40, 632 }; - cropped_out.y -= 4; - cropped_out.x -= image_stride.cols - WindowWidthDefault; const int swipe_dist = 200; - ctrler()->swipe(cropped_out, cropped_out + swipe_dist * Point::left(), 1000, true); - sleep(2000); + ctrler()->swipe(swipe_begin, swipe_begin + swipe_dist * Point::left(), 500, true, 2, 0); + sleep(Config.get_options().task_delay * 3); - const cv::Rect ref_roi = { image_stride.cols - 320, 520, 280, 120 }; + const cv::Rect ref_roi = { image_stride.cols - 320, 530, 280, 100 }; auto new_img = ctrler()->get_image(); + // find relative position of old image on new one Matcher offset_match(new_img(cv::Rect { 0, ref_roi.y, new_img.cols, ref_roi.height })); offset_match.set_templ(image_stride(ref_roi)); offset_match.set_threshold(0.7); if (!offset_match.analyze()) break; - // int offset = ref_roi.x - offset_match.get_result().rect.x; const int offset = (new_img.cols - offset_match.get_result().rect.x) - (image_stride.cols - ref_roi.x); Log.trace("new image offset:", offset); if (offset <= 4) { diff --git a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp index b6f7b2ba9d..d4b73706a1 100644 --- a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp +++ b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp @@ -3,7 +3,6 @@ #include #include -#include "Common/AsstTypes.h" #include "Utils/Ranges.hpp" #include "Utils/NoWarningCV.h" @@ -227,7 +226,7 @@ bool asst::StageDropsImageAnalyzer::analyze_drops() { LogTraceFunction; - if (Point p {}; !analyze_baseline(p) && p == Point {}) { + if (!analyze_baseline()) { return false; } @@ -362,7 +361,7 @@ bool asst::StageDropsImageAnalyzer::analyze_drops_for_12() return !flag_analyzer.analyze(); } -bool asst::StageDropsImageAnalyzer::analyze_baseline(Point& cropped_out) +bool asst::StageDropsImageAnalyzer::analyze_baseline() { LogTraceFunction; @@ -463,11 +462,8 @@ bool asst::StageDropsImageAnalyzer::analyze_baseline(Point& cropped_out) } if (m_image.cols - (x_offset + bounding_rect.width) < 30 + max_spacing) { - cropped_out.x = x_offset + bounding_rect.width; - cropped_out.y = task_ptr->roi.y; - Log.trace("bounding_rect.right=", cropped_out.x, ", more materials to reveal?"); - return false; - } + Log.trace("bounding_rect.right=", x_offset + bounding_rect.width, ", more materials to reveal?"); + } // TODO: else tell caller to prevent unnecessary swipe return !m_baseline.empty(); } diff --git a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h index e44648c538..15b0133bc0 100644 --- a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h +++ b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.h @@ -23,13 +23,12 @@ namespace asst // > const auto& get_drops() const noexcept { return m_drops; } - bool analyze_baseline(Point& cropped_out); - protected: bool analyze_stage_code(); bool analyze_times(); bool analyze_stars(); bool analyze_difficulty(); + bool analyze_baseline(); bool analyze_drops(); // 落叶殇火 活动(异格夜刀), act24side, 2023-03 bool analyze_drops_for_CF(); From 4c7a2914d0fee033b316b781916c9cf4445b6e36 Mon Sep 17 00:00:00 2001 From: status102 Date: Sun, 5 Nov 2023 23:11:30 +0800 Subject: [PATCH 09/84] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E9=94=99?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/BattleHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 6b5fb012dd..8946057bc2 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -321,7 +321,7 @@ bool asst::BattleHelper::deploy_oper(const std::string& name, const Point& loc, static_cast(swipe_oper_task_ptr->special_params.at(0) * scale_size.second / 720.0); Point end_point = target_point + (direction_target * coeff); - // 经粗略测算,方向区域倾泻大概是 1/5 + // 经粗略测算,方向区域倾斜大概是 1/5 const static auto radian = -std::atan(0.2); fix_swipe_out_of_limit(target_point, end_point, scale_size.first, scale_size.second, radian); From b3dcd0226ac0f8032cf41845df023106f84a9dd5 Mon Sep 17 00:00:00 2001 From: SherkeyXD <253294679@qq.com> Date: Sun, 5 Nov 2023 23:56:35 +0800 Subject: [PATCH 10/84] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E4=BB=BB=E5=8A=A1=E6=97=B6=E9=98=BB=E6=AD=A2=E4=BC=91?= =?UTF-8?q?=E7=9C=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/Constants/ConfigurationKeys.cs | 2 + src/MaaWpfGui/Res/Localizations/en-us.xaml | 2 + src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 2 + src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 2 + src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 2 + src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 2 + src/MaaWpfGui/Utilities/SleepManagement.cs | 51 +++++++++++++++++++ .../ViewModels/UI/SettingsViewModel.cs | 33 ++++++++++++ .../ViewModels/UI/TaskQueueViewModel.cs | 5 ++ .../ConnectSettingsUserControl.xaml | 22 +++++++- .../UserControl/StartSettingsUserControl.xaml | 2 +- 11 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 src/MaaWpfGui/Utilities/SleepManagement.cs diff --git a/src/MaaWpfGui/Constants/ConfigurationKeys.cs b/src/MaaWpfGui/Constants/ConfigurationKeys.cs index fa99e83236..f69d4dd777 100644 --- a/src/MaaWpfGui/Constants/ConfigurationKeys.cs +++ b/src/MaaWpfGui/Constants/ConfigurationKeys.cs @@ -69,6 +69,8 @@ namespace MaaWpfGui.Constants public const string AutoRestartOnDrop = "Start.AutoRestartOnDrop"; public const string StartsWithScript = "Start.StartsWithScript"; public const string EndsWithScript = "Start.EndsWithScript"; + public const string BlockSleep = "Start.BlockSleep"; + public const string BlockSleepWithScreenOn = "Start.BlockSleepWithScreenOn"; public const string ChooseLevel3 = "Recruit.ChooseLevel3"; public const string ChooseLevel4 = "Recruit.ChooseLevel4"; diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index bb5405d419..dac22d6bb0 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -238,6 +238,8 @@ Additional command arguments Starts with Script Ends with Script + Prevent hibernation when running tasks + Keep screen on when preventing hibernation I.S. Theme Phantom Mizuki diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 702f6e16a7..0cf65afd79 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -238,6 +238,8 @@ 追加コマンド スクリプトを使用して始めます 終了時にスクリプトを使用します + タスク実行時の休止状態の防止 + 休止状態を防ぐときは画面をオンのままにします 主題 ファントム ミヅキ diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index a71c59f60f..06a47ff614 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -238,6 +238,8 @@ 추가 변수 시작 시 추가 스크립트 종료 시 추가 스크립트 + 작업 실행 시 절전 모드 차단 + 절전 모드 방지 시 항상 밝게 표시 통합전략 테마 팬텀 미즈키 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index b1e6688ac9..49ccea8efa 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -238,6 +238,8 @@ 附加命令 开始前脚本 结束后脚本 + 运行任务时阻止休眠 + 阻止休眠时保持屏幕常亮 肉鸽主题 傀影 水月 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 8958491044..255482bc10 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -238,6 +238,8 @@ 附加命令 開始前腳本 結束後腳本 + 運行任務時阻止休眠 + 阻止休眠時保持螢幕常亮 肉鴿主題 傀影 水月 diff --git a/src/MaaWpfGui/Utilities/SleepManagement.cs b/src/MaaWpfGui/Utilities/SleepManagement.cs new file mode 100644 index 0000000000..8a79cc24ad --- /dev/null +++ b/src/MaaWpfGui/Utilities/SleepManagement.cs @@ -0,0 +1,51 @@ +// +// MaaWpfGui - A part of the MaaCoreArknights project +// Copyright (C) 2021 MistEO and Contributors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY +// + +using System; +using System.Runtime.InteropServices; + +namespace MaaWpfGui.Utilities +{ + public static class SleepManagement + { + [DllImport("kernel32.dll")] + private static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); + + [Flags] + private enum ExecutionState : uint + { + SystemRequired = 0x01, + DisplayRequired = 0x02, + Continuous = 0x80000000, + } + + public static void AllowSleep() + { + SetThreadExecutionState(ExecutionState.Continuous); + } + + public static void BlockSleep(bool keepDisplayOn = true) + { + SetThreadExecutionState(keepDisplayOn ? + ExecutionState.Continuous | ExecutionState.SystemRequired | ExecutionState.DisplayRequired : + ExecutionState.Continuous | ExecutionState.SystemRequired); + } + + public static void ResetIdle(bool keepDisplayOn = true) + { + SetThreadExecutionState(keepDisplayOn ? + ExecutionState.SystemRequired | ExecutionState.DisplayRequired : + ExecutionState.SystemRequired); + } + } +} diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index 898d9d8b0b..06ba87591a 100644 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -775,6 +775,30 @@ namespace MaaWpfGui.ViewModels.UI } } + private bool _blockSleep = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.BlockSleep, bool.FalseString)); + + public bool BlockSleep + { + get => _blockSleep; + set + { + SetAndNotify(ref _blockSleep, value); + ConfigurationHelper.SetValue(ConfigurationKeys.BlockSleep, value.ToString()); + } + } + + private bool _blockSleepWithScreenOn = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.BlockSleepWithScreenOn, bool.TrueString)); + + public bool BlockSleepWithScreenOn + { + get => _blockSleepWithScreenOn; + set + { + SetAndNotify(ref _blockSleepWithScreenOn, value); + ConfigurationHelper.SetValue(ConfigurationKeys.BlockSleepWithScreenOn, value.ToString()); + } + } + public void RunScript(string str) { bool enable = str switch @@ -3880,5 +3904,14 @@ namespace MaaWpfGui.ViewModels.UI await Instances.AnnouncementViewModel.CheckAndDownloadAnnouncement(); _ = Execute.OnUIThreadAsync(() => Instances.WindowManager.ShowWindow(Instances.AnnouncementViewModel)); } + + public void SetupSleepManagement() + { + if (BlockSleep) + { + SleepManagement.BlockSleep(BlockSleepWithScreenOn); + _logger.Information("Blocking sleep."); + } + } } } diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 9a16f5472a..86f313e1a2 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -29,6 +29,7 @@ using MaaWpfGui.Helper; using MaaWpfGui.Models; using MaaWpfGui.Services; using MaaWpfGui.States; +using MaaWpfGui.Utilities; using MaaWpfGui.Utilities.ValueType; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -805,6 +806,8 @@ namespace MaaWpfGui.ViewModels.UI /// public async void LinkStart() { + Instances.SettingsViewModel.SetupSleepManagement(); + if (!_runningState.GetIdle()) { return; @@ -1002,6 +1005,8 @@ namespace MaaWpfGui.ViewModels.UI public void SetStopped() { + SleepManagement.AllowSleep(); + if (!_runningState.GetIdle() || Stopping) { AddLog(LocalizationHelper.GetString("Stopped")); diff --git a/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml index c46926eb40..4aa1d4d99f 100644 --- a/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml @@ -19,7 +19,7 @@ - + @@ -33,6 +33,7 @@ + + + + + diff --git a/src/MaaWpfGui/Views/UserControl/StartSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/StartSettingsUserControl.xaml index 914138bd99..f44e8b4514 100644 --- a/src/MaaWpfGui/Views/UserControl/StartSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/StartSettingsUserControl.xaml @@ -108,4 +108,4 @@ - + \ No newline at end of file From e80c18d3c3e4300c71250180457ecbc16aa2e589 Mon Sep 17 00:00:00 2001 From: status102 Date: Mon, 6 Nov 2023 14:34:58 +0800 Subject: [PATCH 11/84] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E5=B1=8F?= =?UTF-8?q?=E5=B9=95=E5=B0=BA=E5=AF=B8=E7=9A=84const?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/BattleHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 8946057bc2..a61417f72c 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -316,7 +316,7 @@ bool asst::BattleHelper::deploy_oper(const std::string& name, const Point& loc, const Point& direction_target = DirectionMap.at(direction); // 将方向转换为实际的 swipe end 坐标点,并对滑动距离进行缩放 - static const auto scale_size = m_inst_helper.ctrler()->get_scale_size(); + const auto scale_size = m_inst_helper.ctrler()->get_scale_size(); static const int coeff = static_cast(swipe_oper_task_ptr->special_params.at(0) * scale_size.second / 720.0); Point end_point = target_point + (direction_target * coeff); From 8a30cc97c16a9b5ac2053fdfec00c1f95a3c86bf Mon Sep 17 00:00:00 2001 From: status102 Date: Mon, 6 Nov 2023 15:02:54 +0800 Subject: [PATCH 12/84] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E6=97=8B?= =?UTF-8?q?=E8=BD=AC=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/BattleHelper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index a61417f72c..6f0f221898 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -677,8 +677,8 @@ void asst::BattleHelper::fix_swipe_out_of_limit(Point& p1, Point& p2, int width, } std::tuple adjust_scale = { - direct.x * std::cos(radian) + direct.y * std::sin(radian), - direct.y * std::cos(radian) - direct.x * std::sin(radian), + direct.x * std::cos(radian) - direct.y * std::sin(radian), + direct.y * std::cos(radian) + direct.x * std::sin(radian), }; // 旋转后偏移值会不够,计算补偿比例 From 2f5d379d04579ba9dab5a24aaa9a9205589ec927 Mon Sep 17 00:00:00 2001 From: Horror Proton <107091537+horror-proton@users.noreply.github.com> Date: Mon, 6 Nov 2023 14:00:16 +0800 Subject: [PATCH 13/84] chore: update variable name remove dead code, etc --- .../Task/Fight/StageDropsTaskPlugin.cpp | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp index 8d1f4b2797..27aa70350c 100644 --- a/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/StageDropsTaskPlugin.cpp @@ -112,11 +112,11 @@ bool asst::StageDropsTaskPlugin::recognize_drops() return false; } - auto image_stride = ctrler()->get_image().clone(); - StageDropsImageAnalyzer analyzer(image_stride); + auto image_strip = ctrler()->get_image().clone(); + StageDropsImageAnalyzer analyzer(image_strip); bool ret = false; - while (true) { + while (!need_exit()) { ret = false; // more materials to reveal? @@ -127,39 +127,38 @@ bool asst::StageDropsTaskPlugin::recognize_drops() ctrler()->swipe(swipe_begin, swipe_begin + swipe_dist * Point::left(), 500, true, 2, 0); sleep(Config.get_options().task_delay * 3); - const cv::Rect ref_roi = { image_stride.cols - 320, 530, 280, 100 }; + const cv::Rect ref_roi = { image_strip.cols - 320, 530, 280, 100 }; auto new_img = ctrler()->get_image(); // find relative position of old image on new one Matcher offset_match(new_img(cv::Rect { 0, ref_roi.y, new_img.cols, ref_roi.height })); - offset_match.set_templ(image_stride(ref_roi)); + offset_match.set_templ(image_strip(ref_roi)); offset_match.set_threshold(0.7); if (!offset_match.analyze()) break; - const int offset = (new_img.cols - offset_match.get_result().rect.x) - (image_stride.cols - ref_roi.x); + const int offset = (new_img.cols - offset_match.get_result().rect.x) - (image_strip.cols - ref_roi.x); Log.trace("new image offset:", offset); if (offset <= 4) { ret = true; break; } - const int rel_x = offset + image_stride.cols - new_img.cols; + const int rel_x = offset + image_strip.cols - new_img.cols; const cv::Rect overlay_rect = { 540, 500, 740, 220 }; - cv::Rect overlay_rect_on_stride = overlay_rect; - overlay_rect_on_stride.x += rel_x; + cv::Rect overlay_rect_on_strip = overlay_rect; + overlay_rect_on_strip.x += rel_x; - cv::Mat new_stride = - cv::Mat { image_stride.rows, overlay_rect_on_stride.br().x, image_stride.type(), cv::Scalar(0) }; - image_stride.copyTo(new_stride(cv::Rect { 0, 0, image_stride.cols, image_stride.rows })); - new_img(overlay_rect).copyTo(new_stride(overlay_rect_on_stride)); + cv::Mat new_strip = + cv::Mat { image_strip.rows, overlay_rect_on_strip.br().x, image_strip.type(), cv::Scalar(0) }; + image_strip.copyTo(new_strip(cv::Rect { 0, 0, image_strip.cols, image_strip.rows })); + new_img(overlay_rect).copyTo(new_strip(overlay_rect_on_strip)); - image_stride = new_stride; + image_strip = new_strip; - ret = true; - analyzer.set_image(image_stride); + analyzer.set_image(image_strip); } - // image stride constructed, start main step + // image strip constructed, start main step ret &= analyzer.analyze(); auto&& [code, difficulty] = analyzer.get_stage_key(); From 62bc76ec21dfb8b1a734054239137df36222fbb3 Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 7 Nov 2023 07:05:35 +0000 Subject: [PATCH 14/84] chore: Auto Update Game Resources - 2023-11-07 --- resource/global/YoStarEN/resource/version.json | 2 +- resource/global/YoStarJP/resource/version.json | 2 +- resource/global/YoStarKR/resource/version.json | 2 +- resource/tasks.json | 2 +- resource/version.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resource/global/YoStarEN/resource/version.json b/resource/global/YoStarEN/resource/version.json index 0f75317930..ccefcbca57 100644 --- a/resource/global/YoStarEN/resource/version.json +++ b/resource/global/YoStarEN/resource/version.json @@ -7,5 +7,5 @@ "pool": "As In My Adumbration", "time": 1698148800 }, - "last_updated": "2023-11-02 15:48:26.627" + "last_updated": "2023-11-07 07:05:33.538" } diff --git a/resource/global/YoStarJP/resource/version.json b/resource/global/YoStarJP/resource/version.json index 752dfdb917..9b6c42d3fa 100644 --- a/resource/global/YoStarJP/resource/version.json +++ b/resource/global/YoStarJP/resource/version.json @@ -7,5 +7,5 @@ "pool": "影に潜みて", "time": 1698112800 }, - "last_updated": "2023-11-02 15:48:26.627" + "last_updated": "2023-11-07 07:05:33.538" } diff --git a/resource/global/YoStarKR/resource/version.json b/resource/global/YoStarKR/resource/version.json index 7d0070ae45..2f5efc05f2 100644 --- a/resource/global/YoStarKR/resource/version.json +++ b/resource/global/YoStarKR/resource/version.json @@ -7,5 +7,5 @@ "pool": "그림자 속에 숨어", "time": 1698112800 }, - "last_updated": "2023-11-02 15:48:26.627" + "last_updated": "2023-11-07 07:05:33.538" } diff --git a/resource/tasks.json b/resource/tasks.json index fcf6b9da39..6b5d14b548 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -15966,4 +15966,4 @@ "Stop" ] } -} +} \ No newline at end of file diff --git a/resource/version.json b/resource/version.json index 5c71800db7..2b5f6fe2d0 100644 --- a/resource/version.json +++ b/resource/version.json @@ -7,5 +7,5 @@ "pool": "宿愿", "time": 1698811200 }, - "last_updated": "2023-11-02 15:48:26.627" + "last_updated": "2023-11-07 07:05:33.538" } From bbfbf83e241a3ea65a8d33d1ec080ff912aec939 Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 7 Nov 2023 07:26:36 +0000 Subject: [PATCH 15/84] chore: Auto Update Game Resources - 2023-11-07 --- resource/battle_data.json | 78 +++++++++--------- .../global/YoStarEN/resource/version.json | 2 +- .../global/YoStarJP/resource/item_index.json | 40 ++++++++++ .../global/YoStarJP/resource/recruitment.json | 36 +++++++++ resource/global/YoStarJP/resource/tasks.json | 76 ++++++++++++++++++ .../global/YoStarJP/resource/version.json | 10 +-- .../global/YoStarKR/resource/item_index.json | 40 ++++++++++ .../global/YoStarKR/resource/recruitment.json | 36 +++++++++ resource/global/YoStarKR/resource/tasks.json | 80 +++++++++++++++++++ .../global/YoStarKR/resource/version.json | 10 +-- resource/version.json | 2 +- 11 files changed, 359 insertions(+), 51 deletions(-) diff --git a/resource/battle_data.json b/resource/battle_data.json index 3f6c045015..f29ad4a9bf 100644 --- a/resource/battle_data.json +++ b/resource/battle_data.json @@ -336,8 +336,8 @@ "char_1031_slent2": { "name": "淬羽赫默", "name_en": "淬羽赫默", - "name_jp": "淬羽赫默", - "name_kr": "淬羽赫默", + "name_jp": "淬羽サイレンス", + "name_kr": "사일런스 더 패러디그매틱", "name_tw": "淬羽赫默", "position": "RANGED", "profession": "SUPPORT", @@ -1891,8 +1891,8 @@ "char_249_mlyss": { "name": "缪尔赛思", "name_en": "缪尔赛思", - "name_jp": "缪尔赛思", - "name_kr": "缪尔赛思", + "name_jp": "ミュルジス", + "name_kr": "뮤엘시스", "name_tw": "缪尔赛思", "position": "RANGED", "profession": "PIONEER", @@ -3070,8 +3070,8 @@ "char_4006_melnte": { "name": "玫拉", "name_en": "玫拉", - "name_jp": "玫拉", - "name_kr": "玫拉", + "name_jp": "メラナイト", + "name_kr": "멜라나이트", "name_tw": "玫拉", "position": "RANGED", "profession": "SNIPER", @@ -3253,8 +3253,8 @@ "char_4027_heyak": { "name": "霍尔海雅", "name_en": "霍尔海雅", - "name_jp": "霍尔海雅", - "name_kr": "霍尔海雅", + "name_jp": "ホルハイヤ", + "name_kr": "오올헤약", "name_tw": "霍尔海雅", "position": "RANGED", "profession": "CASTER", @@ -5331,8 +5331,8 @@ "token_10029_slent2_protrb": { "name": "夜灯", "name_en": "夜灯", - "name_jp": "夜灯", - "name_kr": "夜灯", + "name_jp": "夜の灯火", + "name_kr": "밤의 등불", "name_tw": "夜灯", "position": "ALL", "profession": "TOKEN", @@ -5346,8 +5346,8 @@ "token_10030_mlyss_wtrman": { "name": "流形", "name_en": "流形", - "name_jp": "流形", - "name_kr": "流形", + "name_jp": "うつろう水影", + "name_kr": "유동체", "name_tw": "流形", "position": "ALL", "profession": "TOKEN", @@ -7011,8 +7011,8 @@ "trap_112_crsbow": { "name": "解雇者清债程序", "name_en": "解雇者清债程序", - "name_jp": "解雇者清债程序", - "name_kr": "解雇者清债程序", + "name_jp": "解雇者清算プログラム", + "name_kr": "해고자 채무 탕감 프로그램", "name_tw": "解雇者清债程序", "position": "NONE", "profession": "TRAP", @@ -7026,8 +7026,8 @@ "trap_113_snflwr": { "name": "全自动划账器", "name_en": "全自动划账器", - "name_jp": "全自动划账器", - "name_kr": "全自动划账器", + "name_jp": "全自動送金機", + "name_kr": "자동 계좌 이체기", "name_tw": "全自动划账器", "position": "NONE", "profession": "TRAP", @@ -7041,8 +7041,8 @@ "trap_114_smkbmb": { "name": "爆裂毒气罐", "name_en": "爆裂毒气罐", - "name_jp": "爆裂毒气罐", - "name_kr": "爆裂毒气罐", + "name_jp": "毒ガスタンク", + "name_kr": "독가스 탱크", "name_tw": "爆裂毒气罐", "position": "NONE", "profession": "TRAP", @@ -7056,8 +7056,8 @@ "trap_115_gasctrl": { "name": "毒雾塔控制", "name_en": "毒雾塔控制", - "name_jp": "毒雾塔控制", - "name_kr": "毒雾塔控制", + "name_jp": "毒霧タワー制御装置", + "name_kr": "독가스 컨트롤러", "name_tw": "毒雾塔控制", "position": "NONE", "profession": "TRAP", @@ -7147,7 +7147,7 @@ "name": "重力", "name_en": "重力", "name_jp": "重力", - "name_kr": "重力", + "name_kr": "중력", "name_tw": "重力", "position": "NONE", "profession": "TRAP", @@ -8151,8 +8151,8 @@ "trap_714_cdaltar": { "name": "能量扰动放大器", "name_en": "能量扰动放大器", - "name_jp": "能量扰动放大器", - "name_kr": "能量扰动放大器", + "name_jp": "エネルギー摂動増幅器", + "name_kr": "에너지 교란 증폭기", "name_tw": "能量扰动放大器", "position": "NONE", "profession": "TRAP", @@ -8166,8 +8166,8 @@ "trap_715_cdaltara": { "name": "能量扰动放大器", "name_en": "能量扰动放大器", - "name_jp": "能量扰动放大器", - "name_kr": "能量扰动放大器", + "name_jp": "エネルギー摂動増幅器", + "name_kr": "에너지 교란 증폭기", "name_tw": "能量扰动放大器", "position": "NONE", "profession": "TRAP", @@ -8181,8 +8181,8 @@ "trap_716_cdaltarb": { "name": "能量扰动放大器", "name_en": "能量扰动放大器", - "name_jp": "能量扰动放大器", - "name_kr": "能量扰动放大器", + "name_jp": "エネルギー摂動増幅器", + "name_kr": "에너지 교란 증폭기", "name_tw": "能量扰动放大器", "position": "NONE", "profession": "TRAP", @@ -8196,8 +8196,8 @@ "trap_717_cddiff": { "name": "战术装备整理箱", "name_en": "战术装备整理箱", - "name_jp": "战术装备整理箱", - "name_kr": "战术装备整理箱", + "name_jp": "戦術装備整理箱", + "name_kr": "전술 장비 정리함", "name_tw": "战术装备整理箱", "position": "NONE", "profession": "TRAP", @@ -8211,8 +8211,8 @@ "trap_718_cddiffa": { "name": "战术装备整理箱", "name_en": "战术装备整理箱", - "name_jp": "战术装备整理箱", - "name_kr": "战术装备整理箱", + "name_jp": "戦術装備整理箱", + "name_kr": "전술 장비 정리함", "name_tw": "战术装备整理箱", "position": "NONE", "profession": "TRAP", @@ -8226,8 +8226,8 @@ "trap_719_cddiffb": { "name": "战术装备整理箱", "name_en": "战术装备整理箱", - "name_jp": "战术装备整理箱", - "name_kr": "战术装备整理箱", + "name_jp": "戦術装備整理箱", + "name_kr": "전술 장비 정리함", "name_tw": "战术装备整理箱", "position": "NONE", "profession": "TRAP", @@ -8241,8 +8241,8 @@ "trap_720_cdheal": { "name": "便携式医疗设备", "name_en": "便携式医疗设备", - "name_jp": "便携式医疗设备", - "name_kr": "便携式医疗设备", + "name_jp": "携帯式医療設備", + "name_kr": "이동식 의료 설비", "name_tw": "便携式医疗设备", "position": "NONE", "profession": "TRAP", @@ -8256,8 +8256,8 @@ "trap_721_cdheala": { "name": "便携式医疗设备", "name_en": "便携式医疗设备", - "name_jp": "便携式医疗设备", - "name_kr": "便携式医疗设备", + "name_jp": "携帯式医療設備", + "name_kr": "이동식 의료 설비", "name_tw": "便携式医疗设备", "position": "NONE", "profession": "TRAP", @@ -8271,8 +8271,8 @@ "trap_722_cdhealb": { "name": "便携式医疗设备", "name_en": "便携式医疗设备", - "name_jp": "便携式医疗设备", - "name_kr": "便携式医疗设备", + "name_jp": "携帯式医療設備", + "name_kr": "이동식 의료 설비", "name_tw": "便携式医疗设备", "position": "NONE", "profession": "TRAP", diff --git a/resource/global/YoStarEN/resource/version.json b/resource/global/YoStarEN/resource/version.json index ccefcbca57..ebf3714a89 100644 --- a/resource/global/YoStarEN/resource/version.json +++ b/resource/global/YoStarEN/resource/version.json @@ -7,5 +7,5 @@ "pool": "As In My Adumbration", "time": 1698148800 }, - "last_updated": "2023-11-07 07:05:33.538" + "last_updated": "2023-11-07 07:26:32.888" } diff --git a/resource/global/YoStarJP/resource/item_index.json b/resource/global/YoStarJP/resource/item_index.json index 9518c93704..b2a70cbc1e 100644 --- a/resource/global/YoStarJP/resource/item_index.json +++ b/resource/global/YoStarJP/resource/item_index.json @@ -975,6 +975,14 @@ "sortId": 10019, "usage": "新型採用契約による期限付きポイント。一定数溜まると対象スカウトのオペレーターを指名できる。" }, + "LMTGS_COIN_3801": { + "classifyType": "NORMAL", + "description": "人材派遣会社との長期的かつ安定的な協力態勢の賜物。支出のコントロールに効果が期待できる。しかし、毎回この手段を使わざるを得ないような状況にはなってほしくないものだ。", + "icon": "LMTGS_COIN_3801.png", + "name": "限定契約証", + "sortId": 10020, + "usage": "新型採用契約による期限付きポイント。一定数溜まると対象スカウトのオペレーターを指名できる。" + }, "LMTGS_COIN_601": { "classifyType": "NORMAL", "description": "人材派遣会社との長期的かつ安定的な協力態勢の賜物。支出のコントロールに効果が期待できる。しかし、毎回この手段を使わざるを得ないような状況にはなってほしくないものだ。", @@ -1439,6 +1447,30 @@ "sortId": -10000, "usage": "リオレウスとの戦いを経て手に入れた素材。アーツ錬金にはもってこい。" }, + "act25side_token_fdrchips": { + "classifyType": "NONE", + "description": "ナスティによって各地に隠されていたデータのほかにも、各国の支援を受け、次々と新しいデータが生み出された。クルビアはついにクリステンが行っていた研究の価値に気づき始めているのだ。", + "icon": "act25side_token_fdrchips.png", + "name": "飛行データチップ", + "sortId": -10000, + "usage": "さまざまな高度と環境下における飛行データが記録されたチップ。一定数を集めると、特別連絡室で必要な物資と交換できる。" + }, + "act25side_token_key01": { + "classifyType": "NONE", + "description": "秘密エリアに入るための許可証。内部の仕掛けに少し違いがあるようだが?", + "icon": "act25side_token_key01.png", + "name": "特殊作戦許可α", + "sortId": -10000, + "usage": "秘密エリアに入るための許可証。内部の仕掛けに少し違いがあるようだが?" + }, + "act25side_token_key02": { + "classifyType": "NONE", + "description": "秘密エリアに入るための許可証。内部の仕掛けに少し違いがあるようだが?", + "icon": "act25side_token_key02.png", + "name": "特殊作戦許可β", + "sortId": -10000, + "usage": "秘密エリアに入るための許可証。内部の仕掛けに少し違いがあるようだが?" + }, "act2bossrush_milestone_point": { "classifyType": "NONE", "description": "試練の成否はそれほど重要ではない、これは貴殿が実戦において正確な選択を行うためのサポートである。", @@ -1967,6 +1999,14 @@ "sortId": 60108, "usage": "補給物資としてランダムに様々な素材が入っている。" }, + "randomMaterial_rhine2": { + "classifyType": "CONSUME", + "description": "マイレンダー基金から提供された素材補給箱。各調査エリアごとに個別で割り振られるため、どの箱になんの素材が入っているのか誰にもわからない。", + "icon": "randomMaterial_rhine2.png", + "name": "技術調査補給", + "sortId": 60109, + "usage": "補給物資としてランダムに様々な素材が入っている。" + }, "return_credit_token": { "classifyType": "NONE", "description": "重要な立場に戻る者のため、特別に用意された徽章。仕事に慣れていく中で徐々に授けられる。", diff --git a/resource/global/YoStarJP/resource/recruitment.json b/resource/global/YoStarJP/resource/recruitment.json index acd3402df8..2ef637765f 100644 --- a/resource/global/YoStarJP/resource/recruitment.json +++ b/resource/global/YoStarJP/resource/recruitment.json @@ -598,6 +598,17 @@ "辅助干员" ] }, + { + "id": "char_328_cammou", + "name": "カシャ", + "rarity": 4, + "tags": [ + "输出", + "控场", + "远程位", + "术师干员" + ] + }, { "id": "char_155_tiger", "name": "インドラ", @@ -1071,6 +1082,18 @@ "术师干员" ] }, + { + "id": "char_294_ayer", + "name": "エアースカーペ", + "rarity": 5, + "tags": [ + "输出", + "群攻", + "近战位", + "资深干员", + "近卫干员" + ] + }, { "id": "char_103_angel", "name": "エクシア", @@ -1325,6 +1348,19 @@ "高级资深干员", "狙击干员" ] + }, + { + "id": "char_358_lisa", + "name": "スズラン", + "rarity": 6, + "tags": [ + "减速", + "支援", + "输出", + "远程位", + "高级资深干员", + "辅助干员" + ] } ], "tags": { diff --git a/resource/global/YoStarJP/resource/tasks.json b/resource/global/YoStarJP/resource/tasks.json index bdfeb201a4..426c2ca3ff 100644 --- a/resource/global/YoStarJP/resource/tasks.json +++ b/resource/global/YoStarJP/resource/tasks.json @@ -2308,6 +2308,82 @@ [ "街の緊急用備蓄", "街头应急储备" + ], + [ + "携帯式医療設備", + "便携式医疗设备" + ], + [ + "淬羽サイレンス", + "淬羽赫默" + ], + [ + "全自動送金機", + "全自动划账器" + ], + [ + "ミュルジス", + "缪尔赛思" + ], + [ + "毒霧タワー制御装置", + "毒雾塔控制" + ], + [ + "うつろう水影", + "流形" + ], + [ + "ホルハイヤ", + "霍尔海雅" + ], + [ + "エネルギー摂動増幅器", + "能量扰动放大器" + ], + [ + "メラナイト", + "玫拉" + ], + [ + "エネルギー摂動増幅器", + "能量扰动放大器" + ], + [ + "解雇者清算プログラム", + "解雇者清债程序" + ], + [ + "夜の灯火", + "夜灯" + ], + [ + "毒ガスタンク", + "爆裂毒气罐" + ], + [ + "エネルギー摂動増幅器", + "能量扰动放大器" + ], + [ + "戦術装備整理箱", + "战术装备整理箱" + ], + [ + "戦術装備整理箱", + "战术装备整理箱" + ], + [ + "戦術装備整理箱", + "战术装备整理箱" + ], + [ + "携帯式医療設備", + "便携式医疗设备" + ], + [ + "携帯式医療設備", + "便携式医疗设备" ] ] }, diff --git a/resource/global/YoStarJP/resource/version.json b/resource/global/YoStarJP/resource/version.json index 9b6c42d3fa..fefe268411 100644 --- a/resource/global/YoStarJP/resource/version.json +++ b/resource/global/YoStarJP/resource/version.json @@ -1,11 +1,11 @@ { "activity": { - "name": "吾れ先導者たらん・復刻", - "time": 1695279600 + "name": "孤星", + "time": 1699340400 }, "gacha": { - "pool": "影に潜みて", - "time": 1698112800 + "pool": "真理の在処", + "time": 1699340400 }, - "last_updated": "2023-11-07 07:05:33.538" + "last_updated": "2023-11-07 07:26:32.888" } diff --git a/resource/global/YoStarKR/resource/item_index.json b/resource/global/YoStarKR/resource/item_index.json index ae16aa6d51..b838479392 100644 --- a/resource/global/YoStarKR/resource/item_index.json +++ b/resource/global/YoStarKR/resource/item_index.json @@ -975,6 +975,14 @@ "sortId": 10019, "usage": "신형 모집 협약에서 정한 일종의 기간 한정 화폐. 일정 수량을 누적하여 지정된 기간 동안 지정된 오퍼레이터를 채용할 수 있다." }, + "LMTGS_COIN_3801": { + "classifyType": "NORMAL", + "description": "헤드헌팅 회사와 장기적이고 안정적인 협력 관계를 유지한 보답. 효과적으로 지출을 조절할 수 있지만, 매번 이와 같은 수단을 써야 하는 것은 아니다.", + "icon": "LMTGS_COIN_3801.png", + "name": "헤드헌팅 데이터 계약", + "sortId": 10020, + "usage": "신형 모집 협약에서 정한 일종의 기간 한정 화폐. 일정 수량을 누적하여 지정된 기간 동안 지정된 오퍼레이터를 채용할 수 있다." + }, "LMTGS_COIN_601": { "classifyType": "NORMAL", "description": "헤드헌팅 회사와 장기적이고 안정적인 협력 관계를 유지한 보답. 효과적으로 지출을 조절할 수 있지만, 매번 이와 같은 수단을 써야 하는 것은 아니다.", @@ -1439,6 +1447,30 @@ "sortId": -10000, "usage": "리오레우스와의 전투를 통해 입수한 소재. 아츠 연금에 안성맞춤이다." }, + "act25side_token_fdrchips": { + "classifyType": "NONE", + "description": "내스티가 각지에 숨긴 데이터 외에도 국가의 지원으로 새로운 데이터가 끊임없이 생성되고 있다. 컬럼비아도 점차 크리스틴의 이 연구의 가치를 깨닫게 되었다.", + "icon": "act25side_token_fdrchips.png", + "name": "비행 데이터 메모리칩", + "sortId": -10000, + "usage": "다양한 고도와 환경에서의 비행 데이터를 기록한 칩으로, 일정 수량을 모으면 특별 안건 연락처에서 필요한 물자를 교환할 수 있다." + }, + "act25side_token_key01": { + "classifyType": "NONE", + "description": "비밀 구역에 들어갈 때 필요한 허가증. 안에 있는 장치가 어딘가 좀 달라 보이는데?", + "icon": "act25side_token_key01.png", + "name": "특수 작전 허가증·α", + "sortId": -10000, + "usage": "비밀 구역에 들어갈 때 필요한 허가증. 안에 있는 장치가 어딘가 좀 달라 보이는데?" + }, + "act25side_token_key02": { + "classifyType": "NONE", + "description": "비밀 구역에 들어갈 때 필요한 허가증. 안에 있는 장치가 어딘가 좀 달라 보이는데?", + "icon": "act25side_token_key02.png", + "name": "특수 작전 허가증·β", + "sortId": -10000, + "usage": "비밀 구역에 들어갈 때 필요한 허가증. 안에 있는 장치가 어딘가 좀 달라 보이는데?" + }, "act2bossrush_milestone_point": { "classifyType": "NONE", "description": "시뮬레이션에서 옳고 그름은 중요하지 않다. 그것들은 단지 실전에서 올바른 선택을 할 수 있도록 도와주는 보조일 뿐이다.", @@ -1967,6 +1999,14 @@ "sortId": 60108, "usage": "각종 보급 물자가 들어있다. 다양한 재료를 랜덤으로 획득할 수 있다." }, + "randomMaterial_rhine2": { + "classifyType": "CONSUME", + "description": "메이랜더 재단에서 제공한 재료 보급 상자. 조사 구역별로 배분되므로 상자에는 각기 다른 자재가 들어가 있다.", + "icon": "randomMaterial_rhine2.png", + "name": "기술 조사 보급", + "sortId": 60109, + "usage": "각종 보급 물자가 들어있다. 다양한 재료를 랜덤으로 획득할 수 있다." + }, "return_credit_token": { "classifyType": "NONE", "description": "중요한 직위에 복귀한 사람들을 위해 특별히 준비한 엠블럼. 업무에 익숙해지는 과정에서 점차 지급된다.", diff --git a/resource/global/YoStarKR/resource/recruitment.json b/resource/global/YoStarKR/resource/recruitment.json index 6007ee2d01..46d31612ab 100644 --- a/resource/global/YoStarKR/resource/recruitment.json +++ b/resource/global/YoStarKR/resource/recruitment.json @@ -598,6 +598,17 @@ "辅助干员" ] }, + { + "id": "char_328_cammou", + "name": "클릭", + "rarity": 4, + "tags": [ + "输出", + "控场", + "远程位", + "术师干员" + ] + }, { "id": "char_155_tiger", "name": "인드라", @@ -1071,6 +1082,18 @@ "术师干员" ] }, + { + "id": "char_294_ayer", + "name": "에이어스카르페", + "rarity": 5, + "tags": [ + "输出", + "群攻", + "近战位", + "资深干员", + "近卫干员" + ] + }, { "id": "char_103_angel", "name": "엑시아", @@ -1325,6 +1348,19 @@ "高级资深干员", "狙击干员" ] + }, + { + "id": "char_358_lisa", + "name": "스즈란", + "rarity": 6, + "tags": [ + "减速", + "支援", + "输出", + "远程位", + "高级资深干员", + "辅助干员" + ] } ], "tags": { diff --git a/resource/global/YoStarKR/resource/tasks.json b/resource/global/YoStarKR/resource/tasks.json index 558acefd15..16facf3509 100644 --- a/resource/global/YoStarKR/resource/tasks.json +++ b/resource/global/YoStarKR/resource/tasks.json @@ -2289,6 +2289,86 @@ [ "길거리 보급품", "街头应急储备" + ], + [ + "중력", + "重力" + ], + [ + "이동식 의료 설비", + "便携式医疗设备" + ], + [ + "사일런스 더 패러디그매틱", + "淬羽赫默" + ], + [ + "자동 계좌 이체기", + "全自动划账器" + ], + [ + "뮤엘시스", + "缪尔赛思" + ], + [ + "독가스 컨트롤러", + "毒雾塔控制" + ], + [ + "유동체", + "流形" + ], + [ + "오올헤약", + "霍尔海雅" + ], + [ + "에너지 교란 증폭기", + "能量扰动放大器" + ], + [ + "멜라나이트", + "玫拉" + ], + [ + "에너지 교란 증폭기", + "能量扰动放大器" + ], + [ + "해고자 채무 탕감 프로그램", + "解雇者清债程序" + ], + [ + "밤의 등불", + "夜灯" + ], + [ + "독가스 탱크", + "爆裂毒气罐" + ], + [ + "에너지 교란 증폭기", + "能量扰动放大器" + ], + [ + "전술 장비 정리함", + "战术装备整理箱" + ], + [ + "전술 장비 정리함", + "战术装备整理箱" + ], + [ + "전술 장비 정리함", + "战术装备整理箱" + ], + [ + "이동식 의료 설비", + "便携式医疗设备" + ], + [ + "이동식 의료 설비", + "便携式医疗设备" ] ] }, diff --git a/resource/global/YoStarKR/resource/version.json b/resource/global/YoStarKR/resource/version.json index 2f5efc05f2..03fafa815d 100644 --- a/resource/global/YoStarKR/resource/version.json +++ b/resource/global/YoStarKR/resource/version.json @@ -1,11 +1,11 @@ { "activity": { - "name": "가이딩 어헤드 (재개방)", - "time": 1695279600 + "name": "론 트레일", + "time": 1699340400 }, "gacha": { - "pool": "그림자 속에 숨어", - "time": 1698112800 + "pool": "진리가 있는 곳", + "time": 1699340400 }, - "last_updated": "2023-11-07 07:05:33.538" + "last_updated": "2023-11-07 07:26:32.888" } diff --git a/resource/version.json b/resource/version.json index 2b5f6fe2d0..04d189d7fb 100644 --- a/resource/version.json +++ b/resource/version.json @@ -7,5 +7,5 @@ "pool": "宿愿", "time": 1698811200 }, - "last_updated": "2023-11-07 07:05:33.538" + "last_updated": "2023-11-07 07:26:32.888" } From ee05a8c941a34b4d2739b18a54f8f52ae3fbccb4 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Tue, 7 Nov 2023 15:51:47 +0800 Subject: [PATCH 16/84] =?UTF-8?q?fix:=20153=5F3=E6=8D=A2=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E7=AB=99=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/custom_infrast/153_layout_3_times_a_day.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resource/custom_infrast/153_layout_3_times_a_day.json b/resource/custom_infrast/153_layout_3_times_a_day.json index 697660b809..dbacc10816 100644 --- a/resource/custom_infrast/153_layout_3_times_a_day.json +++ b/resource/custom_infrast/153_layout_3_times_a_day.json @@ -112,6 +112,11 @@ ] } ], + "processing": [ + { + "skip": true + } + ], "power": [ { "operators": [ @@ -420,6 +425,11 @@ ] } ], + "processing": [ + { + "skip": true + } + ], "power": [ { "operators": [ From 1c5ddff107ac6c3aac355a3fbea9e345c5515486 Mon Sep 17 00:00:00 2001 From: Wallsman <63186641+wallsman@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:40:13 +0900 Subject: [PATCH 17/84] =?UTF-8?q?Update=20JP/LONETRAIL=20=E5=AD=A4?= =?UTF-8?q?=E6=98=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add メラナイト/ホルハイヤ/ミュルジス --- docs/glossary/operators.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/glossary/operators.md b/docs/glossary/operators.md index fd0ca09bdf..7159485b6e 100644 --- a/docs/glossary/operators.md +++ b/docs/glossary/operators.md @@ -213,7 +213,7 @@ char_1021_kroos2|寒芒克洛丝|Kroos the Keen Glint|寒芒クルース|크루 char_1024_hbisc2|濯尘芙蓉|Hibiscus the Purifier|濯塵ハイビスカス|히비스커스 더 퓨리파이어 char_1027_greyy2|承曦格雷伊|Greyy the Lightningbearer|承曦グレイ|그레이 더 라이트닝베어러 char_1030_noirc2|火龙S黑角|Rathalos S Noir Corne|レウスSノイルホーン|레우스S 느와르 코르네 -char_4006_melnte|玫拉|Melanite|| +char_4006_melnte|玫拉|Melanite|メラナイト| char_4013_kjera|耶拉|Kjera|イェラ|쉐라 char_4014_lunacu|子月|Lunacub|ルナカブ|루나컵 char_4015_spuria|空构|Spuria|| @@ -258,7 +258,7 @@ char_213_mostma|莫斯提马|Mostima|モスティマ|모스티마 char_222_bpipe|风笛|Bagpipe|バグパイプ|백파이프 char_225_haak|阿|Aak|ア|아 char_248_mgllan|麦哲伦|Magallan|マゼラン|마젤란 -char_249_mlyss|缪尔赛思|Muelsyse|| +char_249_mlyss|缪尔赛思|Muelsyse|ミュルジス| char_250_phatom|傀影|Phantom|ファントム|팬텀 char_263_skadi|斯卡蒂|Skadi|スカジ|스카디 char_264_f12yin|山|Mountain|マウンテン|마운틴 @@ -307,7 +307,7 @@ char_2015_dusk|夕|Dusk|シー|시 char_2023_ling|令|Ling|リィン|링 char_2024_chyue|重岳|Chongyue|チョンユエ|총웨 char_4009_irene|艾丽妮|Irene|アイリーニ|아이린 -char_4027_heyak|霍尔海雅|Ho'olheyak|| +char_4027_heyak|霍尔海雅|Ho'olheyak|ホルハイヤ| char_4039_horn|号角|Horn|ホルン|혼 char_4042_lumen|流明|Lumen|ルーメン|루멘 char_4046_ebnhlz|黑键|Ebenholz|エーベンホルツ|에벤홀츠 From 362bbed682b7fc804b06aaf7032647cc839a0bbe Mon Sep 17 00:00:00 2001 From: Wallsman <63186641+wallsman@users.noreply.github.com> Date: Tue, 7 Nov 2023 18:54:39 +0900 Subject: [PATCH 18/84] Update operators.md --- docs/glossary/operators.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/glossary/operators.md b/docs/glossary/operators.md index 7159485b6e..6d3158fbca 100644 --- a/docs/glossary/operators.md +++ b/docs/glossary/operators.md @@ -296,7 +296,7 @@ char_1023_ghost2|归溟幽灵鲨|Specter the Unchained|帰溟スペクター|스 char_1026_gvial2|百炼嘉维尔|Gavial the Invincible|百錬ガヴィル|가비알 디 인빈서블 char_1028_texas2|缄默德克萨斯|Texas the Omertosa|血掟テキサス|텍사스 디 오메르토사 char_1029_yato2|麒麟R夜刀|Kirin R Yato|キリンRヤトウ|키린R 야토 -char_1031_slent2|淬羽赫默|Silence the Paradigmatic|| +char_1031_slent2|淬羽赫默|Silence the Paradigmatic|淬羽サイレンス| char_1032_excu2|圣约送葬人|Executor the Ex Foedere|| char_1033_swire2|琳琅诗怀雅|Swire the Elegant Wit|| char_1034_jesca2|涤火杰西卡|Jessica the Liberated|| From b4bd48dccfaaeb5501dbe059d2e40c11a59d5616 Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 7 Nov 2023 11:06:09 +0000 Subject: [PATCH 19/84] chore: Auto Update Game Resources - 2023-11-07 --- resource/global/YoStarEN/resource/version.json | 2 +- resource/global/YoStarJP/resource/version.json | 2 +- resource/global/YoStarKR/resource/version.json | 2 +- resource/version.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resource/global/YoStarEN/resource/version.json b/resource/global/YoStarEN/resource/version.json index ebf3714a89..8b335fd229 100644 --- a/resource/global/YoStarEN/resource/version.json +++ b/resource/global/YoStarEN/resource/version.json @@ -7,5 +7,5 @@ "pool": "As In My Adumbration", "time": 1698148800 }, - "last_updated": "2023-11-07 07:26:32.888" + "last_updated": "2023-11-07 11:06:07.466" } diff --git a/resource/global/YoStarJP/resource/version.json b/resource/global/YoStarJP/resource/version.json index fefe268411..8646d92405 100644 --- a/resource/global/YoStarJP/resource/version.json +++ b/resource/global/YoStarJP/resource/version.json @@ -7,5 +7,5 @@ "pool": "真理の在処", "time": 1699340400 }, - "last_updated": "2023-11-07 07:26:32.888" + "last_updated": "2023-11-07 11:06:07.466" } diff --git a/resource/global/YoStarKR/resource/version.json b/resource/global/YoStarKR/resource/version.json index 03fafa815d..64daedaf2d 100644 --- a/resource/global/YoStarKR/resource/version.json +++ b/resource/global/YoStarKR/resource/version.json @@ -7,5 +7,5 @@ "pool": "진리가 있는 곳", "time": 1699340400 }, - "last_updated": "2023-11-07 07:26:32.888" + "last_updated": "2023-11-07 11:06:07.466" } diff --git a/resource/version.json b/resource/version.json index 04d189d7fb..39558a0c4d 100644 --- a/resource/version.json +++ b/resource/version.json @@ -7,5 +7,5 @@ "pool": "宿愿", "time": 1698811200 }, - "last_updated": "2023-11-07 07:26:32.888" + "last_updated": "2023-11-07 11:06:07.466" } From 11b5469744d72d930cddc85bae5c439ae1edb873 Mon Sep 17 00:00:00 2001 From: status102 Date: Tue, 7 Nov 2023 20:22:15 +0800 Subject: [PATCH 20/84] =?UTF-8?q?perf:=20=E6=88=98=E6=96=97=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E8=BE=93=E5=85=A5=E5=85=B3=E5=8D=A1=E5=90=8D=E7=9A=84?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E6=A1=86=E6=96=B0=E5=A2=9E=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E6=96=87=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/Res/Localizations/en-us.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 2 ++ src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 2 ++ src/MaaWpfGui/Views/UI/CopilotView.xaml | 6 ++++-- 6 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 976ed45dad..2db24afe21 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -470,6 +470,8 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla Copilot Task file / URL + Stage Code + Stage Code, e.g. 1-7 Select task file Task files can be imported by dragging the mouse Paste Clipboard diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index 9b1f172abf..d80e2ecf6f 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -470,6 +470,8 @@ Bilibili: ログイン インターフェイスに表示されるアカウント 自動戦闘 攻略ファイルパス/ミステリーコード + ステージコード + ステージコード, 例えば 1-7 ファイル選択 攻略ファイルはマウスで直接ドラッグして取り込むことがきます(o゚v゚)ノ クリップボードの貼り付け diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index c72eb52d2b..2f9da427a2 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -470,6 +470,8 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산) 자동 지휘 작업 파일 경로/코드 + 무대 코드 + 무대 코드, 예를 들어 1-7 작업 선택 마우스로 작업 파일을 드래그해 선택할 수 있어요 (o゚v゚)ノ 클립보드 붙여넣기 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index e746826ad1..2dd824a033 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -470,6 +470,8 @@ 自动战斗 作业路径/神秘代码 + 关卡名 + 关卡名, 例: 1-7 选择作业 作业文件可以直接用鼠标拖进来哦 (o゚v゚)ノ 粘贴剪贴板 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index aa6415207c..3f5cf19ea7 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -470,6 +470,8 @@ 自動戰鬥 作業路徑 / 神秘代碼 + 關卡名 + 關卡名, 例: 1-7 選擇作業 作業檔可以直接用滑鼠拖進來喔 (o゚v゚)ノ 從剪貼簿貼上 diff --git a/src/MaaWpfGui/Views/UI/CopilotView.xaml b/src/MaaWpfGui/Views/UI/CopilotView.xaml index 8d34cf22ea..2b71d2509b 100644 --- a/src/MaaWpfGui/Views/UI/CopilotView.xaml +++ b/src/MaaWpfGui/Views/UI/CopilotView.xaml @@ -215,16 +215,18 @@ - + Text="{Binding CopilotTaskName, UpdateSourceTrigger=LostFocus}" + ToolTip="{DynamicResource CopilotTaskNameTip}" />