From 83bad44256a4bb711b222066d5994056ceccf85b Mon Sep 17 00:00:00 2001 From: MistEO Date: Fri, 2 Sep 2022 00:05:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8A=84=E4=BD=9C=E4=B8=9A=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E7=BC=96=E9=98=9F=E5=8A=9F=E8=83=BD=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=8C=89=E8=81=8C=E4=B8=9A=E5=8C=BA=E5=88=86=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1136 --- resource/tasks.json | 139 +++++++++++++++++- .../BattleQuickFormationExpandRole.png | Bin 0 -> 2357 bytes .../template/BattleQuickFormationRole-All.png | Bin 0 -> 2084 bytes .../BattleQuickFormationRole-Caster.png | Bin 0 -> 2938 bytes .../BattleQuickFormationRole-Medic.png | Bin 0 -> 4244 bytes .../BattleQuickFormationRole-Pioneer.png | Bin 0 -> 3710 bytes .../BattleQuickFormationRole-Sniper.png | Bin 0 -> 3409 bytes .../BattleQuickFormationRole-Special.png | Bin 0 -> 2307 bytes .../BattleQuickFormationRole-Support.png | Bin 0 -> 3034 bytes .../BattleQuickFormationRole-Tank.png | Bin 0 -> 4091 bytes .../BattleQuickFormationRole-Warrior.png | Bin 0 -> 3733 bytes src/MeoAssistant/BattleFormationTask.cpp | 94 ++++++++---- src/MeoAssistant/BattleFormationTask.h | 7 +- 13 files changed, 206 insertions(+), 34 deletions(-) create mode 100644 resource/template/BattleQuickFormationExpandRole.png create mode 100644 resource/template/BattleQuickFormationRole-All.png create mode 100644 resource/template/BattleQuickFormationRole-Caster.png create mode 100644 resource/template/BattleQuickFormationRole-Medic.png create mode 100644 resource/template/BattleQuickFormationRole-Pioneer.png create mode 100644 resource/template/BattleQuickFormationRole-Sniper.png create mode 100644 resource/template/BattleQuickFormationRole-Special.png create mode 100644 resource/template/BattleQuickFormationRole-Support.png create mode 100644 resource/template/BattleQuickFormationRole-Tank.png create mode 100644 resource/template/BattleQuickFormationRole-Warrior.png diff --git a/resource/tasks.json b/resource/tasks.json index 031ae3e8c9..7ad57a231e 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -5771,11 +5771,21 @@ ], "rearDelay": 500, "next": [ - "BattleQuickFormationCollapseRole", + "BattleQuickFormationExpandRole", "Stop" ] }, - "BattleQuickFormationCollapseRole": { + "BattleQuickFormationExpandRole": { + "action": "ClickSelf", + "roi": [ + 1152, + 0, + 128, + 138 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-All": { "action": "ClickSelf", "roi": [ 1163, @@ -5783,6 +5793,131 @@ 117, 133 ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Pioneer": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Warrior": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Tank": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Caster": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Medic": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Sniper": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Special": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], + "rearDelay": 500 + }, + "BattleQuickFormationRole-Support": { + "action": "ClickSelf", + "roi": [ + 1155, + 41, + 125, + 679 + ], + "templThreshold": 0.7, + "maskRange": [ + 100, + 255 + ], "rearDelay": 500 }, "BattleQuickFormation-OperNameFlag": { diff --git a/resource/template/BattleQuickFormationExpandRole.png b/resource/template/BattleQuickFormationExpandRole.png new file mode 100644 index 0000000000000000000000000000000000000000..45d36e8b6f5e9f75fae2c40f6fb12920b516050a GIT binary patch literal 2357 zcmYjTX;c$w79~Z+CQ*k~J>WDHp#n+V#<;YIXo?f0QXL@{Q4~;S&WX(k47Q3OVj!mR z0MponP-r7t91__&(uy1uLENT?xUmT~AfS!{p$E_b41^`~#rf0UIaT>l_q_Ywz3+W5 zS(4zOf}&4a#;*;9&zM6AldOH{(s;)}{4YD3hUcDc+R^qK zQC7B`P>Z}*;VPs6$9P(#K*qA=Yhd3X0l`Nw9;$8MZCj~U%1AbX34BA$l-dQ&6IW5l zFo*5xpkjKSJ9@MIHB>1PRKchnXGMn(f-zb2N>VAsz3E(BR7IAxzurNsbjn?71+b0I zDrT;-ML~LEd{>o{k|A5%_B_u;uq8q*Ay6uu-u;ng3_qK(g6F-pZb0Ey~K!^~5C=dh;P>aqhKjKDP!u_;5RB$3d7kI4Lk|L+CV+8bx9)RRG=oqJYNW#;2JT((S!kJ{V`c`n z1PFY~NKf#QMiX&!M-uPg`u)FE9Rg~To}@~Q=F!+dO||Iqk3UjMysM?9Wol}(KlFHD zU_GkR6cv>;`kf6b4M@2vpB%a{9h4JOdH2SR`33u3$4FJtvQdiSX5PEyxb#|E~#mHGJiM5N92JQ@dfdOw0#x5)^-N&cHFy+p8+}*trqj5#vo_oZRx)2^k9SCpe9Ba6K z{kUno*~8ua?wM)JlP9KT^JwgfTc=_d7fgduQBmbSNBZNF5)%`TAHUK$`;YxKyCUU3 zU%!64si~MGX*7EJ?CpbrN+%)Uh>MN=UIT*`E!pgwyh1{d*Ka07$Hm1Z9jn>m-&9*$ zTW^Xu)1ZZvp z8u{ce7p`1+GMHxZM>O}^+K#B01|gGm;_O+mh|%GNFvNLzp;lK6r1`WlxVGn2fB)a= z!u|aGQc`LzUYf9sCpCwi>#Miud*ZI?^|l^ofBrSTzIpz?Awbhet7_Zp!sVx??+*=i zUh?y^eC(glfxx&pxd5$OWC8|Bgw+H)qRy4!;SHO%Y&rGqw{3A- zOLwK+tv8K!hJ+0?rIbUL)*tE}9E^&H_#&om%JBH{$M%nli-W6H0;Ub4)4ijkqn+g; z5&CYU(U>Nm97I^C!_e@MROyO=M!%ugM?-uto7(EIa*hZ?zvix6*YE1?p1L^yPvFGB zz<~X(`EA?J1S*+6mTkV5fz&1KUs zYwQJl?y^I7vlUZZOuzsxEn|X_1RSBAQ(&T8(x*Old^v5%yO3fUFDWY8AvgE8wYBB1 z@!AkIzRcb}Cnu-*^hc%pIbeC%waBAeSJ%h)k6JBSc=NEUd2u=oAfm<_h2S1NLk0*0 zG~Y6KuW_$n35BSxUcJg-(GBVC?Q1+X$af?pkIalzwEwlJq-3!*&u5dq8!(y6f}H>D zyk<=)aA;y;qSH(Bw6%5J+O-MWqh5^GWmH$MUR~JNw*k$RsSVrhlX|*mB9sX52?ql_R`C?gWYOwVNm%6AP z)ke3fl$pyoprrB$(1uhxg=^#Mza~r*{r=mxyScmGo*K~A)z!tX{KAS`;mnh@ziXy6!xe6Ah1hmmNP&&-uwmpyR_ z!NY`n1|c!-b(L@{K^htu0CN#=urn}>I_FlshTtFd)JqS1eQ#7>&Whz$OIC%DW)bMaZYW+u_LI*&hAo>ND4T z5D%ty(uGza1Nt2hW>*yX6o6#Uzlg8TpOi8orX5GlE69ZNl~6|+DG`{ZO6!!eKw7#0 zey)bZ#}W&zOM&eyQ4*y@4uR=3B+1~(AwnYHI~q_9qAA)d;DdQf80+0a(`hLwpT@3$ z9Su^ml*z+%+72(wnymo_2kd6tn{}`uam)>4I8hoW7nN8D!bp{hjxr}H!DCx<*N|5A z1!nM(pPMjdK1Hb&3Yacc5)vR&zUKc>>mCC_I)Wt$K^^4^8S6s`YSeT8{<3j7_&a1H M3Jexr3;470f6n0#^Z)<= literal 0 HcmV?d00001 diff --git a/resource/template/BattleQuickFormationRole-All.png b/resource/template/BattleQuickFormationRole-All.png new file mode 100644 index 0000000000000000000000000000000000000000..485e2b948981b1be64c02139c600efc71b4caa9c GIT binary patch literal 2084 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 literal 0 HcmV?d00001 diff --git a/resource/template/BattleQuickFormationRole-Medic.png b/resource/template/BattleQuickFormationRole-Medic.png new file mode 100644 index 0000000000000000000000000000000000000000..306d13d852b1e6ad85c7183179cfb5e1b22a93d5 GIT binary patch literal 4244 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 literal 0 HcmV?d00001 diff --git a/resource/template/BattleQuickFormationRole-Special.png b/resource/template/BattleQuickFormationRole-Special.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea84d010cb2aa1cad33caeab0c1fc6c62b12082 GIT binary patch literal 2307 zcmV+e3HJg08HD+!C!5U=D3s++q6ihGw8a3R86ipKG-%`?R*VDweeMMZQ%OAOg$&>a6QC%$4boI_Mc6z1KqCbn3@X5r65F=v?(Rm{ zHE8&=-#G0{{YMz<7>cG#_)QrNHcDW4Er92F2q8Fm@+6&!4qV5JF=ynqqjfh(3yy`r z1k9;?yr{KxAI@ab%+Aho=Kc4PQX-`c%Z=3?Kce}K7XdPoAH@S9pi-&O+1bJL^fb9# zj`6WEy3=W@wHim~b45sTK$jMb!l*rl_~HEkAf?3fB%`CF%*@QPzrWAfbLSWw97IZq z3I)s|ffv|RbDkEt)tKl%EGUFfR4Ns^QYmIWQ>j!D#ATnu z!8S>2kI?#SFb}KHF2hn4t}6k-$jB%oBO|!33xMM|OiWBLJUon23eS@v36cI4nTgt5 zBGN6|ED;H`jajYL=uCEUY3>r)Y?f-ZN~Kc4aU2qf1Xt$g$z(EAs#OjONZ41yt`?Og z+8NQADxkm@et1%Xk_-(Fa`x<5Ow;7mt5@8;dzbC)Z2(5c#~B|Vug~|~NaGw$&C(n& zzlP6EOefu_rLIGXZv2B~l$w@MqZXBl;GIG4T`4tAz zT9j)9jx1pLdS>v*=kw(Ac}&w{>)A6F7Z;IIvb40s=H@1bVK6c>!oer3_wV0FDTQg80DS-b5}TV(F${y@ z;bA5&TtK1lJTKZvfuVMf)qExlI8$uIDnQnIhR)7Trl+ULX0uc(6@L8jN7mNXFbo|{ z6IiCf=H@dVt}OHB%^P}pdYGG=BbiJ#QeRk05NJDTK4vJb1UA#03wTQ6xGqyuQ;d&~ zqiGr&8ynoaf3H4GDm>Q(QCIPw|1Pq*xrq>hTrS7N!~{yIwjLv3=or$XnbA9L_hZ*} zNhA_XOiYl?W+|7;Jbd_&7r(y1woEL`Lf1`9)5I_go;0xY0)*-Ru7Jbn6K(!!YW1z!+3_;b^iF{54N_pa9yVkuzjggIIcr3mt%Bnl)ZA9 zQn_6JCa8@nl?ta%zsE>E&&y&F=}DigAZ8;p9F--6pjNBV)6>HzpM1j1%nU*ZZr;2} zVZ8uKg#ZhoVOkcB>+;RNz5$3R#r2cZgy6U0ZtOIiz)z0%g@H|Y@47pAV@KIo!$2c}NMlSac zOw(j-ZH?t0en2UOZWxDJLtVKe}A7uBEgLtH%KHB^!NAk;>8Pg zc6Qzda2<5BF}W}~$-uw>re(45^eL;Wt8{d9kVqr~N2l7JA~KeJB}gf1wHoW|>l6wF z^7%YNLqkkYPxJNHU*o!N!<`PK7=96LECsIXkxV9;oSw$EZAzsQ-QC@M{`u$ih9$<& z-iDejW-689_3PKzw$1$fJj=_={Qmpz2U~4C{AsN%ThtnfePLmN@v$*P17JFxrmwHh zpT^#iWTPOtu8RPtyYC)Qt<_rBtx)sRy!Pbtd9Gf)%F4d-i6MbIYWPc zKV4m2?CtFVAZ*(X8A#IvuIu7BE{37Eg6nv#=-W^@jkK~!BN&Acn5NmPlx=|9?#7J@ zB@hv}fWHBBOe@pE(JDT%%};$o*t`A)u(5yP1KK15RP0gzbzq}S_-EuF^NRFmNwrS= d-AhcJ{tp!B69_r^Bh~-_002ovPDHLkV1m=jZk_-D literal 0 HcmV?d00001 diff --git a/resource/template/BattleQuickFormationRole-Support.png b/resource/template/BattleQuickFormationRole-Support.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd334238d82767537f66b066a3adfc67cd8a340 GIT binary patch literal 3034 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 literal 0 HcmV?d00001 diff --git a/resource/template/BattleQuickFormationRole-Warrior.png b/resource/template/BattleQuickFormationRole-Warrior.png new file mode 100644 index 0000000000000000000000000000000000000000..791be3170b3724491f2994eb4a3f5e0f684c0a0a GIT binary patch literal 3733 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 groups) { auto formation_task_ptr = Task.get("BattleQuickFormationOCR"); auto image = m_ctrler->get_image(); @@ -98,11 +88,10 @@ bool asst::BattleFormationTask::select_opers_in_cur_page() int skill = 1; for (const auto& res : opers_result) { const std::string& name = res.text; - auto iter = m_groups.begin(); + auto iter = groups.begin(); bool found = false; - for (; iter != m_groups.end(); ++iter) { - const auto& [_, opers_vec] = *iter; - for (const auto& oper : opers_vec) { + for (; iter != groups.end(); ++iter) { + for (const auto& oper : *iter) { if (oper.name == name) { found = true; skill = oper.skill; @@ -114,7 +103,7 @@ bool asst::BattleFormationTask::select_opers_in_cur_page() } } - if (iter == m_groups.end()) { + if (iter == groups.end()) { continue; } m_ctrler->click(res.rect); @@ -122,7 +111,7 @@ bool asst::BattleFormationTask::select_opers_in_cur_page() if (1 <= skill && skill <= 3) { m_ctrler->click(SkillRectArray.at(skill - 1ULL)); } - m_groups.erase(iter); + groups.erase(iter); json::value info = basic_info_with_what("BattleFormationSelected"); auto& details = info["details"]; @@ -146,3 +135,48 @@ bool asst::BattleFormationTask::confirm_selection() { return ProcessTask(*this, { "BattleQuickFormationConfirm" }).run(); } + +bool asst::BattleFormationTask::click_role_table(BattleRole role) +{ + static const std::unordered_map RoleNameType = { + { BattleRole::Caster, "Caster" }, { BattleRole::Medic, "Medic" }, { BattleRole::Pioneer, "Pioneer" }, + { BattleRole::Sniper, "Sniper" }, { BattleRole::Special, "Special" }, { BattleRole::Support, "Support" }, + { BattleRole::Tank, "Tank" }, { BattleRole::Warrior, "Warrior" }, + }; + + auto role_iter = RoleNameType.find(role); + if (role_iter == RoleNameType.cend()) { + return ProcessTask(*this, { "BattleQuickFormationRole-All" }).set_retry_times(0).run(); + } + else { + return ProcessTask(*this, { "BattleQuickFormationRole-" + role_iter->second }).set_retry_times(0).run(); + } +} + +bool asst::BattleFormationTask::parse_formation() +{ + if (!Resrc.copilot().contains_actions(m_stage_name)) { + Log.error("Unknown stage name", m_stage_name); + return false; + } + + const auto& group = Resrc.copilot().get_actions(m_stage_name).groups; + const auto& battle_data = Resrc.battle_data(); + + json::value info = basic_info_with_what("BattleFormation"); + auto& details = info["details"]; + auto& formation = details["formation"]; + + for (const auto& [name, opers_vec] : group) { + if (opers_vec.empty()) { + continue; + } + formation.array_emplace(name); + + BattleRole role = battle_data.get_role(opers_vec.front().name); + m_formation[role].emplace_back(opers_vec); + } + + callback(AsstMsg::SubTaskExtraInfo, info); + return true; +} diff --git a/src/MeoAssistant/BattleFormationTask.h b/src/MeoAssistant/BattleFormationTask.h index b99f8f37c2..ec2301c3b5 100644 --- a/src/MeoAssistant/BattleFormationTask.h +++ b/src/MeoAssistant/BattleFormationTask.h @@ -13,14 +13,17 @@ namespace asst void set_stage_name(std::string name); protected: + using OperGroup = std::vector; virtual bool _run() override; bool enter_selection_page(); - bool select_opers_in_cur_page(); + bool select_opers_in_cur_page(std::vector& groups); void swipe_page(); bool confirm_selection(); + bool click_role_table(BattleRole role); + bool parse_formation(); std::string m_stage_name; - std::unordered_map> m_groups; + std::unordered_map> m_formation; }; }