From e49c3ee367c51b4e80475afabc8e09585aaf3cb9 Mon Sep 17 00:00:00 2001 From: MistEO Date: Mon, 28 Mar 2022 22:32:57 +0800 Subject: [PATCH] =?UTF-8?q?fix.=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=8A=84=E4=BD=9C=E4=B8=9A=E7=9A=84=E4=B8=80=E4=BA=9Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 8 ++++-- resource/template/BattleSkillReadyOnClick.png | Bin 3290 -> 15039 bytes src/MeoAssistant/AbstractImageAnalyzer.cpp | 26 +++++++++++++++++- src/MeoAssistant/BattleProcessTask.cpp | 25 +++++++++-------- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index e7447633d7..c841d928a1 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -3484,7 +3484,7 @@ 118 ], "action": "ClickSelf", - "preDelay": 500, + "rearDelay": 500, "rectMove": [ 0, -110, @@ -3495,7 +3495,7 @@ "BattleOperRetreat": { "algorithm": "JustReturn", "action": "ClickRect", - "preDelay": 500, + "rearDelay": 500, "specificRect": [ 563, 190, @@ -4228,6 +4228,10 @@ [ "姜哦", "嵯峨" + ], + [ + "健影", + "傀影" ] ], "roi": [ diff --git a/resource/template/BattleSkillReadyOnClick.png b/resource/template/BattleSkillReadyOnClick.png index 44d0b33f1f2f2d05cbf7ac4c676151796488b63f..db15ccd09afa6825cd7f81f24ea7c650ccc6efb2 100644 GIT binary patch literal 15039 zcmeI3e{d6J8pq!jIzY8INWFuzGmr^&tiz?dn>0d#qub4!cCX29 zn%$DLM~6-ogr1I4svvL!S`N=U;8YZEthUz~E$2CPP!E{Xb9Cecf6QRz07p@{cat=E zo2I;a#ND$kgW@v^j zlI${mIW%H4NIsXb(duQrp>o(NRdt17eOFC`*wrRFe8w_&t~1J`1VN|?hG;M#t9;aD zjOFD~tT!`8LrkKzxr{6I0S!&wT0^-Kh6ZbKsY&E4c7x4P%vl|FbIGp^W|k{uSO>$E zm{^Wy9X!h!5+9>G7e&sn&(GI+Digz@zg)&vO$+f16NyBMBbH(%+`@1Uhl63wjM;2L z3X|F?YeLi{t4rfaCi8fpDu$(yCMmK(&nq-59h%E%)CWp_689AhB?pq#1Up2Li3%Zx zD`uHYCZCw}ggU~3*wlO?0|PJ!WlcpsE~78hs%VPZs?0ECvU|pX(VBR@$+0ueHyF$~ zw5nBXLZ4VoBo4v>aZ=C;2<4%9GEga2iiYAK@)yZ7F>(v z@rk@&2?qtuEd_-Z$b{q;CzEQ#l*y{%%awo|Bi<8OJjJaZ!##hU#CdeYJ_P9|) zu_XC;Xf3t+p&y#eep{)j*<2!;n(ZYeCV>;}cIbE5N?0KV(d)(S(^7jBu|wZ2iPXLy znHsZCOT9WQp_5JsU>be)KX!-=X{HTTC8?-BJF&V&)f+p@>S6oT*2#{56g!hbLRf|R zj&m6&w_NfNOP*1>C$@8WLDWw(x2SIj=yNhtT2s?XIukbO|6Ra%e#}1e7?D;e-)KX{ zQ^iy>Cs7r@77@a5Weci_AF|iuS*P04(>odc^bbf=7b4y|b$uo)cKUic^+SzEwSeX& z#MXdwGSk{pBggek`kDqhVtSjIMIVOKe-l=`JKehO##X#L-I{W)l_kw>PK=h;jJfoa zH-0SCqlX0OF11=MRwt9*obITVqA<|pkx4W@mBP(fSyyB9?9MMQ)PC@!1^F{ZePh;RYLh0`F$6c-T@E}*z@8pN35A|k>C z6cL`1lN;=*YVV~UH2 z2p3RXI1OSnr0QlViEL8gMeZ3NZ?4MVARyIW6J3KJjmcR1W zu@ReP=nc6)xS*oog|WV^4HF+#Un<-d{mNMR-K>Mrwa-0$G9zSSb{BiyG@Yx4Ve_K-E+HY@XttbBe!u`8C&JXuy z_i`t5`lUVmqkGRt3s$__ef$E`d~4pJg8H#fHk`Y?2b^jxyJp;VVpYrR=azTAyn9d1 zJD}(E)hiqBI{MI-qiqAO=J6*!ZelKYE=P`RnZNO#6La2uvHRSX-ZfcfkhPqK%?jJL-~9Ql{CnlB5A0fh|N8C6EcwTJvQDn}wr1$+E5pYYZC*Ohy#B56r(X>J zr9J1Ff!T$Fo{m?-?aJi=!SmZtlvL*X~`_`TJ9GUFKs?^02LFc NuBh=GU3FjY{{S*As}ukL literal 3290 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 Y0PLT~H)uoOXaE2J07*qoM6N<$f(Y3*9RL6T diff --git a/src/MeoAssistant/AbstractImageAnalyzer.cpp b/src/MeoAssistant/AbstractImageAnalyzer.cpp index 8f51b1a4ec..e484dbc6db 100644 --- a/src/MeoAssistant/AbstractImageAnalyzer.cpp +++ b/src/MeoAssistant/AbstractImageAnalyzer.cpp @@ -2,6 +2,7 @@ #include "AsstUtils.hpp" #include "Controller.h" +#include "Logger.hpp" asst::AbstractImageAnalyzer::AbstractImageAnalyzer(const cv::Mat image) : m_image(image), m_roi(empty_rect_to_full(Rect(), image)) @@ -43,5 +44,28 @@ void asst::AbstractImageAnalyzer::set_roi(const Rect& roi) noexcept asst::Rect asst::AbstractImageAnalyzer::empty_rect_to_full(const Rect& rect, const cv::Mat image) noexcept { - return rect.empty() ? Rect(0, 0, image.cols, image.rows) : rect; + if (rect.empty()) { + return Rect(0, 0, image.cols, image.rows); + } + else { + Rect res = rect; + if (image.cols < res.x) { + Log.error("roi is out of range", image.cols, image.rows, res.to_string()); + res.x = image.cols - res.width; + } + if (image.rows < res.y) { + Log.error("roi is out of range", image.cols, image.rows, res.to_string()); + res.y = image.rows - res.height; + } + + if (image.cols < res.x + res.width) { + Log.error("roi is out of range", res.to_string()); + res.width = image.cols - res.x; + } + if (image.rows < res.y + res.height) { + Log.error("roi is out of range", res.to_string()); + res.height = image.rows - res.y; + } + return res; + } } diff --git a/src/MeoAssistant/BattleProcessTask.cpp b/src/MeoAssistant/BattleProcessTask.cpp index 6ce53b283c..02fa43f1bc 100644 --- a/src/MeoAssistant/BattleProcessTask.cpp +++ b/src/MeoAssistant/BattleProcessTask.cpp @@ -101,20 +101,23 @@ bool asst::BattleProcessTask::analyze_opers_preview() } opers.at(i).name = oper_name; + bool not_found = true; // 找出这个干员是哪个组里的,以及他的技能用法等 for (const auto& [group_name, deploy_opers] : m_actions_group.groups) { auto iter = std::find_if(deploy_opers.cbegin(), deploy_opers.cend(), [&](const BattleDeployOper& deploy) -> bool { return deploy.name == oper_name; }); - // 没找到,可能是召唤物等新出现的;可能是干员名识别错了(这种情况处理不了,不管了) - if (iter == deploy_opers.cend()) { - m_group_to_oper_mapping.emplace(group_name, BattleDeployOper{ group_name }); - } - else { + if (iter != deploy_opers.cend()) { m_group_to_oper_mapping.emplace(group_name, *iter); + not_found = false; + break; } } + // 没找到,可能是召唤物等新出现的 + if (not_found) { + m_group_to_oper_mapping.emplace(oper_name, BattleDeployOper{ oper_name }); + } m_cur_opers_info.emplace(std::move(oper_name), std::move(opers.at(i))); @@ -208,8 +211,7 @@ bool asst::BattleProcessTask::update_opers_info(const cv::Mat& image) m_ctrler->click(cur_oper.rect); sleep(Task.get("BattleUseOper")->pre_delay); - auto image = m_ctrler->get_image(); - OcrImageAnalyzer name_analyzer(image); + OcrImageAnalyzer name_analyzer(m_ctrler->get_image()); name_analyzer.set_task_info("BattleOperName"); name_analyzer.set_replace( std::dynamic_pointer_cast( @@ -263,7 +265,7 @@ bool asst::BattleProcessTask::do_action(const BattleAction& action) break; case BattleActionType::BulletTime: break; - case BattleActionType::SkillUsage: + case BattleActionType::SkillUsage: { auto& oper_info = m_group_to_oper_mapping[action.group_name]; oper_info.skill_usage = action.modify_usage; @@ -313,7 +315,6 @@ bool asst::BattleProcessTask::oper_deploy(const BattleAction& action) } try_possible_skill(image); - } while (iter == m_cur_opers_info.cend() || !iter->second.available); // 点击干员 @@ -356,9 +357,9 @@ bool asst::BattleProcessTask::oper_deploy(const BattleAction& action) m_ctrler->swipe(placed_point, end_point, swipe_oper_task_ptr->rear_delay); } - m_used_opers[iter->first] = BattleDeployInfo{ - action.location, - m_normal_tile_info[action.location].pos, + m_used_opers[iter->first] = BattleDeployInfo{ + action.location, + m_normal_tile_info[action.location].pos, std::move(oper_info) }; m_cur_opers_info.erase(iter);