diff --git a/resource/tasks.json b/resource/tasks.json index 7357d756bc..95ee67c1d0 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -9529,6 +9529,15 @@ 144 ] }, + "SSSFightDirectly": { + "action": "ClickSelf", + "roi": [ + 1052, + 360, + 154, + 144 + ] + }, "SSSDrawCard": { "action": "ClickSelf", "roi": [ diff --git a/resource/template/SSSFightDirectly.png b/resource/template/SSSFightDirectly.png new file mode 100644 index 0000000000..eb9bd13bd0 Binary files /dev/null and b/resource/template/SSSFightDirectly.png differ diff --git a/src/MaaCore/Task/BattleHelper.h b/src/MaaCore/Task/BattleHelper.h index 9ce41741a5..715c93d2fc 100644 --- a/src/MaaCore/Task/BattleHelper.h +++ b/src/MaaCore/Task/BattleHelper.h @@ -49,7 +49,7 @@ namespace asst bool use_skill(const std::string& name, bool keep_waiting = true); bool use_skill(const Point& loc, bool keep_waiting = true); bool check_pause_button(); - bool wait_until_start(); + virtual bool wait_until_start(); bool wait_until_end(); bool use_all_ready_skill(const cv::Mat& reusable = cv::Mat()); bool check_and_use_skill(const std::string& name, const cv::Mat& reusable = cv::Mat()); diff --git a/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.cpp b/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.cpp index 833bcc1651..5a196a70d0 100644 --- a/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.cpp @@ -39,7 +39,7 @@ bool asst::SSSBattleProcessTask::do_derived_action(size_t action_index) switch (action.type) { case battle::copilot::ActionType::DrawCard: - return draw_card(); + return draw_card(true); case battle::copilot::ActionType::CheckIfStartOver: return check_if_start_over(action); default: @@ -112,6 +112,13 @@ bool asst::SSSBattleProcessTask::do_strategic_action(const cv::Mat& reusable) return true; } +bool asst::SSSBattleProcessTask::wait_until_start() +{ + LogTraceFunction; + + return ProcessTask(*this, { "SSSFightDirectly" }).set_retry_times(300).run(); +} + bool asst::SSSBattleProcessTask::check_if_start_over(const battle::copilot::Action& action) { LogTraceFunction; @@ -143,7 +150,11 @@ bool asst::SSSBattleProcessTask::check_if_start_over(const battle::copilot::Acti return true; } -bool asst::SSSBattleProcessTask::draw_card() +bool asst::SSSBattleProcessTask::draw_card(bool with_retry) { - return ProcessTask(*this, { "SSSDrawCard" }).run(); + ProcessTask task(*this, { "SSSDrawCard" }); + if (!with_retry) { + task.set_retry_times(0); + } + return task.run(); } diff --git a/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.h b/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.h index ad37399796..ee990c6419 100644 --- a/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.h +++ b/src/MaaCore/Task/Miscellaneous/SSSBattleProcessTask.h @@ -17,9 +17,10 @@ namespace asst virtual battle::copilot::CombatData& get_combat_data() { return m_sss_combat_data; } virtual const std::string oper_name_ocr_task_name() const noexcept { return "SSSBattleOperName"; } virtual bool need_to_wait_until_end() const { return true; } + virtual bool wait_until_start() override; bool check_if_start_over(const battle::copilot::Action& action); - bool draw_card(); + bool draw_card(bool with_retry = true); battle::sss::CombatData m_sss_combat_data; std::unordered_set m_all_cores;