diff --git a/resource/tasks.json b/resource/tasks.json index bfe02a84e9..97f25aaae5 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -3457,7 +3457,7 @@ 100 ], "preDelay": 1000, - "rearDelay": 500 + "rearDelay": 200 }, "Roguelike1Begin": { "algorithm": "justReturn", @@ -3466,7 +3466,16 @@ "Roguelike1StageTrader", "Roguelike1StageEncounter", "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps" + "Roguelike1StageEmergencyDps", + "Roguelike1GetDrop1", + "Roguelike1GetDrop2", + "Roguelike1GetDrop3", + "Roguelike1GetDropLeave", + "Roguelike1StageEncounterFree", + "Roguelike1StageEncounterLeave", + "Roguelike1StageEncounterUnknown", + "Roguelike1StageTraderInvestSystem", + "Roguelike1StageTraderLeave" ] }, "Roguelike1Start": { @@ -3477,6 +3486,32 @@ 254, 248 ], + "next": [ + "Roguelike1LastReward", + "Roguelike1Recruit1" + ] + }, + "Roguelike1LastReward": { + "action": "clickSelf", + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Roguelike1LastRewardConfirm" + ] + }, + "Roguelike1LastRewardConfirm": { + "template": "Roguelike1RecruitConfirm.png", + "action": "clickSelf", + "roi": [ + 174, + 151, + 935, + 533 + ], "next": [ "Roguelike1Recruit1" ] @@ -3631,6 +3666,117 @@ 53, 1280, 554 + ], + "next": [ + "Roguelike1StageTraderEnter", + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps" + ] + }, + "Roguelike1StageTraderEnter": { + "action": "clickSelf", + "roi": [ + 1035, + 374, + 226, + 220 + ], + "next": [ + "Roguelike1StageTraderInvestSystem", + "Roguelike1StageTraderLeave" + ] + }, + "Roguelike1StageTraderInvestSystem": { + "action": "clickSelf", + "roi": [ + 365, + 51, + 276, + 216 + ], + "next": [ + "Roguelike1StageTraderInvestSystemEnter" + ] + }, + "Roguelike1StageTraderInvestSystemEnter": { + "action": "clickSelf", + "roi": [ + 417, + 228, + 502, + 247 + ], + "next": [ + "Roguelike1StageTraderInvestConfirm", + "Roguelike1StageTraderInvestCancel" + ] + }, + "Roguelike1StageTraderInvestConfirm": { + "action": "clickSelf", + "roi": [ + 852, + 422, + 278, + 144 + ], + "rearDelay": 500, + "templThreshold": 0.97, + "next": [ + "Roguelike1StageTraderInvestConfirm", + "Roguelike1StageTraderInvestCancel" + ] + }, + "Roguelike1StageTraderInvestCancel": { + "action": "clickSelf", + "roi": [ + 507, + 418, + 242, + 149 + ], + "next": [ + "Roguelike1StageTraderInvestSystemLeave" + ] + }, + "Roguelike1StageTraderInvestSystemLeave": { + "action": "clickSelf", + "roi": [ + 682, + 420, + 245, + 143 + ], + "next": [ + "Roguelike1StageTraderLeave" + ] + }, + "Roguelike1StageTraderLeave": { + "action": "clickSelf", + "roi": [ + 1046, + 443, + 234, + 204 + ], + "next": [ + "Roguelike1StageTraderLeaveConfirm" + ] + }, + "Roguelike1StageTraderLeaveConfirm": { + "action": "clickSelf", + "roi": [ + 985, + 447, + 295, + 203 + ], + "next": [ + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps" ] }, "Roguelike1StageEncounter": { @@ -3642,6 +3788,129 @@ 53, 1280, 554 + ], + "next": [ + "Roguelike1StageEncounterEnter", + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps" + ] + }, + "Roguelike1StageEncounterEnter": { + "action": "clickSelf", + "roi": [ + 1037, + 374, + 221, + 221 + ], + "next": [ + "Roguelike1StageEncounterFree", + "Roguelike1StageEncounterLeave", + "Roguelike1StageEncounterUnknown", + "Roguelike1StageEncounterClickToLeave" + ] + }, + "Roguelike1StageEncounterFree": { + "action": "clickSelf", + "cache": false, + "roi": [ + 1100, + 0, + 180, + 700 + ], + "preDelay": 500, + "templThreshold": 0.99, + "next": [ + "Roguelike1StageEncounterLeaveConfirm" + ] + }, + "Roguelike1StageEncounterLeave": { + "action": "clickSelf", + "cache": false, + "roi": [ + 1100, + 0, + 180, + 700 + ], + "preDelay": 500, + "templThreshold": 0.99, + "next": [ + "Roguelike1StageEncounterLeaveConfirm" + ] + }, + "Roguelike1StageEncounterUnknown": { + "action": "clickSelf", + "cache": false, + "roi": [ + 950, + 0, + 320, + 700 + ], + "templThreshold": 0.9, + "preDelay": 500, + "next": [ + "Roguelike1StageEncounterLeaveConfirm" + ] + }, + "Roguelike1StageEncounterLeaveConfirm": { + "action": "clickSelf", + "cache": false, + "roi": [ + 1069, + 0, + 211, + 700 + ], + "rearDelay": 1000, + "next": [ + "Roguelike1StageEncounterGiveUpRecruit", + "Roguelike1ClickToDrops" + ] + }, + "Roguelike1StageEncounterGiveUpRecruit": { + "template": "Roguelike1ChooseOperConfirm.png", + "action": "clickSelf", + "roi": [ + 1016, + 602, + 264, + 118 + ], + "next": [ + "Roguelike1StageEncounterGiveUpRecruitConfirm" + ] + }, + "Roguelike1StageEncounterGiveUpRecruitConfirm": { + "action": "clickSelf", + "roi": [ + 613, + 410, + 424, + 171 + ], + "next": [ + "Roguelike1ClickToDrops" + ] + }, + "Roguelike1StageEncounterClickToLeave": { + "algorithm": "justReturn", + "action": "clickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "next": [ + "Roguelike1StageEncounterFree", + "Roguelike1StageEncounterLeave", + "Roguelike1StageEncounterUnknown", + "Roguelike1StageEncounterClickToLeave" ] }, "Roguelike1StageCambatDps": { @@ -3656,7 +3925,11 @@ ], "next": [ "Roguelike1StageCambatDpsEnter", - "Roguelike1StageEmergencyDpsEnter" + "Roguelike1StageEmergencyDpsEnter", + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps" ], "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错" }, @@ -3684,7 +3957,11 @@ ], "next": [ "Roguelike1StageCambatDpsEnter", - "Roguelike1StageEmergencyDpsEnter" + "Roguelike1StageEmergencyDpsEnter", + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps" ], "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错" }, @@ -3801,6 +4078,10 @@ ], "next": [ "Roguelike1DropsFlag", + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps", "Roguelike1ClickToDrops" ] }, @@ -3810,6 +4091,104 @@ 601, 152, 119 + ], + "next": [ + "Roguelike1GetDrop1", + "Roguelike1GetDrop2", + "Roguelike1GetDrop3", + "Roguelike1GetDropLeave", + "Roguelike1StageTrader", + "Roguelike1StageEncounter", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps" + ] + }, + "Roguelike1GetDrop1": { + "Doc": "源石锭,绿色的“拿走”按钮", + "action": "clickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "next": [ + "Roguelike1DropsFlag", + "Roguelike1GetDropCompleted" + ] + }, + "Roguelike1GetDrop2": { + "Doc": "希望,黄色的“拿走”按钮", + "action": "clickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "next": [ + "Roguelike1DropsFlag", + "Roguelike1GetDropCompleted", + "Roguelike1ClickToDrops" + ] + }, + "Roguelike1GetDrop3": { + "Doc": "未知的剧目,黄色的“翻开”按钮", + "action": "clickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "next": [ + "Roguelike1DropsFlag", + "Roguelike1GetDropCompleted", + "Roguelike1ClickToDrops" + ] + }, + "Roguelike1GetDropCompleted": { + "action": "clickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "rearDelay": 3000, + "next": [ + "Roguelike1ClickToDrops" + ] + }, + "Roguelike1GetDropLeave": { + "Doc": "不要了,走了(", + "action": "clickSelf", + "cache": false, + "roi": [ + 0, + 218, + 1280, + 296 + ], + "next": [ + "Roguelike1GetDropLeaveConfirm", + "Roguelike1Begin" + ] + }, + "Roguelike1GetDropLeaveConfirm": { + "action": "clickSelf", + "cache": false, + "roi": [ + 0, + 484, + 1280, + 138 + ], + "next": [ + "Roguelike1Begin" ] }, "Roguelike1MissionFailedFlag": { diff --git a/resource/template/Roguelike1GetDrop1.png b/resource/template/Roguelike1GetDrop1.png new file mode 100644 index 0000000000..55a418aabf Binary files /dev/null and b/resource/template/Roguelike1GetDrop1.png differ diff --git a/resource/template/Roguelike1GetDrop2.png b/resource/template/Roguelike1GetDrop2.png new file mode 100644 index 0000000000..6b961faab2 Binary files /dev/null and b/resource/template/Roguelike1GetDrop2.png differ diff --git a/resource/template/Roguelike1GetDrop3.png b/resource/template/Roguelike1GetDrop3.png new file mode 100644 index 0000000000..d96d70f392 Binary files /dev/null and b/resource/template/Roguelike1GetDrop3.png differ diff --git a/resource/template/Roguelike1GetDropCompleted.png b/resource/template/Roguelike1GetDropCompleted.png new file mode 100644 index 0000000000..42fcf8c4c0 Binary files /dev/null and b/resource/template/Roguelike1GetDropCompleted.png differ diff --git a/resource/template/Roguelike1GetDropLeave.png b/resource/template/Roguelike1GetDropLeave.png new file mode 100644 index 0000000000..aebac4ce5a Binary files /dev/null and b/resource/template/Roguelike1GetDropLeave.png differ diff --git a/resource/template/Roguelike1GetDropLeaveConfirm.png b/resource/template/Roguelike1GetDropLeaveConfirm.png new file mode 100644 index 0000000000..848004bf15 Binary files /dev/null and b/resource/template/Roguelike1GetDropLeaveConfirm.png differ diff --git a/resource/template/Roguelike1LastReward.png b/resource/template/Roguelike1LastReward.png new file mode 100644 index 0000000000..b5e7defca7 Binary files /dev/null and b/resource/template/Roguelike1LastReward.png differ diff --git a/resource/template/Roguelike1StageEncounterEnter.png b/resource/template/Roguelike1StageEncounterEnter.png new file mode 100644 index 0000000000..3ff22a3eb7 Binary files /dev/null and b/resource/template/Roguelike1StageEncounterEnter.png differ diff --git a/resource/template/Roguelike1StageEncounterFree.png b/resource/template/Roguelike1StageEncounterFree.png new file mode 100644 index 0000000000..7c13e01e8c Binary files /dev/null and b/resource/template/Roguelike1StageEncounterFree.png differ diff --git a/resource/template/Roguelike1StageEncounterGiveUpRecruitConfirm.png b/resource/template/Roguelike1StageEncounterGiveUpRecruitConfirm.png new file mode 100644 index 0000000000..97ecc65d2d Binary files /dev/null and b/resource/template/Roguelike1StageEncounterGiveUpRecruitConfirm.png differ diff --git a/resource/template/Roguelike1StageEncounterLeave.png b/resource/template/Roguelike1StageEncounterLeave.png new file mode 100644 index 0000000000..6d3bacd2ca Binary files /dev/null and b/resource/template/Roguelike1StageEncounterLeave.png differ diff --git a/resource/template/Roguelike1StageEncounterLeaveConfirm.png b/resource/template/Roguelike1StageEncounterLeaveConfirm.png new file mode 100644 index 0000000000..f537bb34b4 Binary files /dev/null and b/resource/template/Roguelike1StageEncounterLeaveConfirm.png differ diff --git a/resource/template/Roguelike1StageEncounterUnknown.png b/resource/template/Roguelike1StageEncounterUnknown.png new file mode 100644 index 0000000000..5732f49295 Binary files /dev/null and b/resource/template/Roguelike1StageEncounterUnknown.png differ diff --git a/resource/template/Roguelike1StageTraderEnter.png b/resource/template/Roguelike1StageTraderEnter.png new file mode 100644 index 0000000000..33de0ca551 Binary files /dev/null and b/resource/template/Roguelike1StageTraderEnter.png differ diff --git a/resource/template/Roguelike1StageTraderInvestCancel.png b/resource/template/Roguelike1StageTraderInvestCancel.png new file mode 100644 index 0000000000..dadf47f1e9 Binary files /dev/null and b/resource/template/Roguelike1StageTraderInvestCancel.png differ diff --git a/resource/template/Roguelike1StageTraderInvestConfirm.png b/resource/template/Roguelike1StageTraderInvestConfirm.png new file mode 100644 index 0000000000..073b958636 Binary files /dev/null and b/resource/template/Roguelike1StageTraderInvestConfirm.png differ diff --git a/resource/template/Roguelike1StageTraderInvestSystem.png b/resource/template/Roguelike1StageTraderInvestSystem.png new file mode 100644 index 0000000000..2e4eec6f7a Binary files /dev/null and b/resource/template/Roguelike1StageTraderInvestSystem.png differ diff --git a/resource/template/Roguelike1StageTraderInvestSystemEnter.png b/resource/template/Roguelike1StageTraderInvestSystemEnter.png new file mode 100644 index 0000000000..725270edd9 Binary files /dev/null and b/resource/template/Roguelike1StageTraderInvestSystemEnter.png differ diff --git a/resource/template/Roguelike1StageTraderInvestSystemLeave.png b/resource/template/Roguelike1StageTraderInvestSystemLeave.png new file mode 100644 index 0000000000..bee25af03e Binary files /dev/null and b/resource/template/Roguelike1StageTraderInvestSystemLeave.png differ diff --git a/resource/template/Roguelike1StageTraderLeave.png b/resource/template/Roguelike1StageTraderLeave.png new file mode 100644 index 0000000000..f0098fe785 Binary files /dev/null and b/resource/template/Roguelike1StageTraderLeave.png differ diff --git a/resource/template/Roguelike1StageTraderLeaveConfirm.png b/resource/template/Roguelike1StageTraderLeaveConfirm.png new file mode 100644 index 0000000000..20b25d0b98 Binary files /dev/null and b/resource/template/Roguelike1StageTraderLeaveConfirm.png differ diff --git a/src/MeoAssistant/BattleImageAnalyzer.cpp b/src/MeoAssistant/BattleImageAnalyzer.cpp index aa4e1891da..82ce26e0b5 100644 --- a/src/MeoAssistant/BattleImageAnalyzer.cpp +++ b/src/MeoAssistant/BattleImageAnalyzer.cpp @@ -205,7 +205,7 @@ bool asst::BattleImageAnalyzer::home_analyze() cv::Mat hsv; cv::cvtColor(m_image, hsv, cv::COLOR_BGR2HSV); cv::Mat bin; - cv::inRange(hsv, cv::Scalar(106, 160, 180), cv::Scalar(107, 220, 255), bin); + cv::inRange(hsv, cv::Scalar(104, 160, 180), cv::Scalar(107, 220, 255), bin); // 开操作降噪 cv::Mat morph_dst; diff --git a/src/MeoAssistant/BattlePerspectiveImageAnalyzer.cpp b/src/MeoAssistant/BattlePerspectiveImageAnalyzer.cpp index 9c1238923d..5dd8d7c190 100644 --- a/src/MeoAssistant/BattlePerspectiveImageAnalyzer.cpp +++ b/src/MeoAssistant/BattlePerspectiveImageAnalyzer.cpp @@ -29,7 +29,7 @@ bool asst::BattlePerspectiveImageAnalyzer::placed_analyze() cv::Mat hsv; cv::cvtColor(m_image, hsv, cv::COLOR_BGR2HSV); cv::Mat bin; - cv::inRange(hsv, cv::Scalar(60, 90, 70), cv::Scalar(80, 150, 150), bin); + cv::inRange(hsv, cv::Scalar(55, 90, 70), cv::Scalar(80, 150, 150), bin); // 形态学降噪 cv::Mat morph_dst = bin; @@ -38,6 +38,7 @@ bool asst::BattlePerspectiveImageAnalyzer::placed_analyze() //cv::Mat morph_close_kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); //cv::morphologyEx(morph_dst, morph_dst, cv::MORPH_CLOSE, morph_close_kernel); + // 计算可放干员格子的连通域,圈出每个单独的格子 cv::Mat out, stats, centroids; int number = cv::connectedComponentsWithStats(morph_dst, out, stats, centroids); if (number < 2) { diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index d49013ae8f..3184616459 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -104,6 +104,9 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() break; } } + if (!oper_found) { + return true; + } Ctrler.click(opt_oper.rect); sleep(use_oper_task_ptr->pre_delay); @@ -125,22 +128,22 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() int dx = nearest_point.x - home_center.x; int dy = nearest_point.y - home_center.y; - if ((dx * 7) < (dy * 11)) { + if (std::abs(dx * 7) < std::abs(dy * 11)) { dx = 0; } else { dy = 0; } - constexpr int coeff = 50; + constexpr int coeff = 100; Point end_point; switch (opt_oper.role) { case Role::Medic: - case Role::Support: { end_point.x = nearest_point.x - coeff * dx; end_point.y = nearest_point.y - coeff * dy; } break; + case Role::Support: case Role::Pioneer: case Role::Warrior: case Role::Sniper: @@ -155,6 +158,7 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() } break; } + if (end_point.x < 0) { end_point.x = 0; }