diff --git a/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp b/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp index feb56b53ec..3edb6c5e56 100644 --- a/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp @@ -141,8 +141,8 @@ std::optional asst::FightTimesTaskPlugin::change_series(int sanity_current, if (m_has_used_medicine) { // 用过药品, 认为已选择最大可用次数 if (sanity_cost <= sanity_current) { // 吃药前一般选择最大可用次数, 吃完药已经够理智了 - return series; - } + return series; + } // 吃药后理智超限, 减少了吃药量, 选择剩余次数 } diff --git a/src/MaaCore/Task/Fight/MedicineCounterTaskPlugin.cpp b/src/MaaCore/Task/Fight/MedicineCounterTaskPlugin.cpp index 78f737d89c..a3b956909e 100644 --- a/src/MaaCore/Task/Fight/MedicineCounterTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/MedicineCounterTaskPlugin.cpp @@ -122,15 +122,22 @@ bool asst::MedicineCounterTaskPlugin::_run() else if (!m_has_opened_medicine && m_reduce_when_exceed) { // 直接减少药品使用 while (*sanity_target >= *sanity_max) { reduce_excess(*using_medicine, 1); - if (!refresh_medicine_count()) { + if (!refresh_medicine_count() || !analyze_sanity() || using_medicine->using_count <= 0) { break; } } + if (using_medicine->using_count <= 0) { // 糊个屎, 假装吃了药, FightTimes后续选择不吃药的次数 if (auto ptr = m_task_ptr->find_plugin()) { ptr->set_has_used_medicine(); + } + ProcessTask(*this, { "CloseStonePage" }) + .set_times_limit("CloseStonePage", 1, asst::ProcessTask::TimesLimitType::Post) + .set_times_limit("CloseStonePageExceeded", 0) + .run(); + return true; + } } } - } if (!ProcessTask(*this, { "MedicineConfirm" }).set_retry_times(5).run()) { Log.error(__FUNCTION__, "unable to run medicine confirm");