diff --git a/assets/custom/recognition/CalculateScore/main.py b/assets/custom/recognition/CalculateScore/main.py new file mode 100644 index 0000000..658e9d3 --- /dev/null +++ b/assets/custom/recognition/CalculateScore/main.py @@ -0,0 +1,79 @@ +from maa.context import Context +from maa.custom_recognition import CustomRecognition + + +class CalculateScore(CustomRecognition): + + def analyze( + self, + context, + argv: CustomRecognition.AnalyzeArg, + ) -> CustomRecognition.AnalyzeResult: + image = context.tasker.controller.post_screencap().wait().get() + # 检查目标分数 + target_score = context.run_recognition("检查目标分数", image) + # 检查当前分数 + current_score = context.run_recognition("检查当前分数", image) + + # 检查军事分数及倍率 + military_score = context.run_recognition( + "检查分数", image, {"检查分数": {"roi": [90, 238, 105, 44]}} + ) + military_multiplier = context.run_recognition( + "检查分数", image, {"检查分数": {"roi": [197, 239, 54, 48], "expected": ""}} + ) + + # 检查经济分数及倍率 + economic_score = context.run_recognition( + "检查分数", image, {"检查分数": {"roi": [90, 327, 105, 44]}} + ) + economic_multiplier = context.run_recognition( + "检查分数", image, {"检查分数": {"roi": [193, 323, 61, 52], "expected": ""}} + ) + + # 检查科研分数及倍率 + research_score = context.run_recognition( + "检查分数", image, {"检查分数": {"roi": [90, 412, 107, 46]}} + ) + research_multiplier = context.run_recognition( + "检查分数", image, {"检查分数": {"roi": [196, 416, 61, 43], "expected": ""}} + ) + + if None in [ + current_score, + target_score, + military_score, + military_multiplier, + economic_score, + economic_multiplier, + research_score, + research_multiplier, + ]: + return + + if ( + current_score.best_result.text.isdigit() + and target_score.best_result.text.isdigit() + and military_score.best_result.text.isdigit() + and military_multiplier.best_result.text[1:].isdigit() + and economic_score.best_result.text.isdigit() + and economic_multiplier.best_result.text[1:].isdigit() + and research_score.best_result.text.isdigit() + and research_multiplier.best_result.text[1:].isdigit() + ): + final_score = ( + int(military_score.best_result.text) + * int(military_multiplier.best_result.text[1:]) + + int(economic_score.best_result.text) + * int(economic_multiplier.best_result.text[1:]) + + int(research_score.best_result.text) + * int(research_multiplier.best_result.text[1:]) + + int(current_score.best_result.text) + ) + print(final_score) + if final_score >= int(target_score.best_result.text): + return CustomRecognition.AnalyzeResult( + box=(0, 0, 100, 100), detail="success" + ) + else: + return diff --git "a/assets/resource/base/pipeline/\345\257\222\345\242\203\346\233\231\345\205\211.json" "b/assets/resource/base/pipeline/\345\257\222\345\242\203\346\233\231\345\205\211.json" index 242c3ea..5a12b27 100644 --- "a/assets/resource/base/pipeline/\345\257\222\345\242\203\346\233\231\345\205\211.json" +++ "b/assets/resource/base/pipeline/\345\257\222\345\242\203\346\233\231\345\205\211.json" @@ -70,9 +70,46 @@ "纯色地块蓝_寒境曙光", "纯色地块黄_寒境曙光", "纯色地块红_寒境曙光", + "确认下一天_寒境曙光", + "分数计算", "退出_寒境曙光" ] }, + "分数计算": { + "recognition": "Custom", + "custom_recognition": "CalculateScore", + "next": [ + "下一天_寒境曙光" + ] + }, + "下一天_寒境曙光": { + "recognition": "OCR", + "roi": [ + 0, + 0, + 0, + 0 + ], + "expected": "下一天", + "action": "Click" + }, + "确认下一天_寒境曙光": { + "recognition": "OCR", + "roi": [ + 460, + 311, + 363, + 61 + ], + "expected": "尚有行动点未消耗,是否结束日程", + "action": "Click", + "target": [ + 725, + 454, + 1, + 1 + ] + }, "汇合_寒境曙光": { "recognition": "OCR", "roi": [ @@ -1231,13 +1268,16 @@ "肉鸽战斗_寒境曙光", "继续对话_寒境曙光", "旧国遗产_寒境曙光", + "拓荒_寒境曙光", "战马瑞恩_寒境曙光", "冬日之影_寒境曙光", "拦路的废墟_寒境曙光", "建筑师的建议_寒境曙光", + "无尚之戒_寒境曙光", "剩余资金_寒境曙光", "前方有陷阱_寒境曙光", "鲨鱼置物箱_寒境曙光", + "汇合_寒境曙光", "难民团到访_寒境曙光", "学者来访_寒境曙光", "运力紧张_寒境曙光", @@ -1835,5 +1875,9 @@ 46 ], "expected": "^\\d*$" + }, + "检查分数": { + "recognition": "OCR", + "expected": "^\\d*$" } } \ No newline at end of file