From 989ee7354972a66f878a76dc053fea74ae68b89f Mon Sep 17 00:00:00 2001 From: DLmaster361 Date: Fri, 2 May 2025 11:36:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(maa):=20=E5=8D=95=E6=AC=A1=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E4=BB=A3=E7=90=86=E4=BB=BB=E5=8A=A1=E4=B8=AD=EF=BC=8C?= =?UTF-8?q?=E5=B7=B2=E5=AE=8C=E6=88=90=E7=9A=84=E5=AD=90=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=9C=A8=E9=87=8D=E5=A4=8D=E6=89=A7=E8=A1=8C=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E5=90=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/config.py | 2 +- app/models/MAA.py | 178 ++++++++++++++++++++--------- resources/docs/MAA_config_info.txt | 2 +- resources/version.json | 7 +- 4 files changed, 133 insertions(+), 56 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index 231ab69..9b52fad 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -614,7 +614,7 @@ class MaaUserConfig(QConfig): class AppConfig(GlobalConfig): - VERSION = "4.3.5.0" + VERSION = "4.3.6.1" gameid_refreshed = Signal() PASSWORD_refreshed = Signal() diff --git a/app/models/MAA.py b/app/models/MAA.py index e036f08..73cb04c 100644 --- a/app/models/MAA.py +++ b/app/models/MAA.py @@ -92,6 +92,7 @@ class MaaManager(QObject): self.maa_version = None self.maa_update_package = "" + self.task_dict = {} self.set = config["Config"].toDict() self.data = {} @@ -264,6 +265,67 @@ class MaaManager(QObject): ] ) + # 解析任务构成 + if user_data["Info"]["Mode"] == "简洁": + + if mode == "Annihilation": + self.task_dict = { + "WakeUp": "True", + "Recruiting": "False", + "Base": "False", + "Combat": "True", + "Mission": "False", + "Mall": "False", + "AutoRoguelike": "False", + "Reclamation": "False", + } + + elif mode == "Routine": + self.task_dict = { + "WakeUp": "True", + "Recruiting": "True", + "Base": "True", + "Combat": "True", + "Mission": "True", + "Mall": "True", + "AutoRoguelike": "False", + "Reclamation": "False", + } + + elif user_data["Info"]["Mode"] == "详细": + + with (self.data[user[2]]["Path"] / f"{mode}/gui.json").open( + mode="r", encoding="utf-8" + ) as f: + data = json.load(f) + + self.task_dict = { + "WakeUp": data["Configurations"]["Default"][ + "TaskQueue.WakeUp.IsChecked" + ], + "Recruiting": data["Configurations"]["Default"][ + "TaskQueue.Recruiting.IsChecked" + ], + "Base": data["Configurations"]["Default"][ + "TaskQueue.Base.IsChecked" + ], + "Combat": data["Configurations"]["Default"][ + "TaskQueue.Combat.IsChecked" + ], + "Mission": data["Configurations"]["Default"][ + "TaskQueue.Mission.IsChecked" + ], + "Mall": data["Configurations"]["Default"][ + "TaskQueue.Mall.IsChecked" + ], + "AutoRoguelike": data["Configurations"]["Default"][ + "TaskQueue.AutoRoguelike.IsChecked" + ], + "Reclamation": data["Configurations"]["Default"][ + "TaskQueue.Reclamation.IsChecked" + ], + } + # 尝试次数循环 for i in range(self.set["RunSet"]["RunTimesLimit"]): @@ -402,10 +464,13 @@ class MaaManager(QObject): mode="r", encoding="utf-8" ) as f: data = json.load(f) + + # 记录自定义基建索引 user_data["Data"]["CustomInfrastPlanIndex"] = data[ "Configurations" ]["Default"]["Infrast.CustomInfrastPlanIndex"] + # 记录更新包路径 if ( data["Global"]["VersionUpdate.package"] and ( @@ -451,6 +516,8 @@ class MaaManager(QObject): mode="r", encoding="utf-8" ) as f: data = json.load(f) + + # 记录更新包路径 if ( data["Global"]["VersionUpdate.package"] and ( @@ -871,26 +938,53 @@ class MaaManager(QObject): else: self.weekly_annihilation_limit_reached = False - if mode == "自动代理_日常" and "任务出错: Fight" in log: - self.maa_result = "MAA未能实际执行任务" - elif "任务出错: StartUp" in log: + if "任务出错: StartUp" in log: self.maa_result = "MAA未能正确登录PRTS" + elif "任务已全部完成!" in log: - self.maa_result = "Success!" + + if "完成任务: StartUp" in log: + self.task_dict["WakeUp"] = "False" + if "完成任务: Recruit" in log: + self.task_dict["Recruiting"] = "False" + if "完成任务: Infrast" in log: + self.task_dict["Base"] = "False" + if "完成任务: Fight" in log or "剿灭任务失败" in log: + self.task_dict["Combat"] = "False" + if "完成任务: Mall" in log: + self.task_dict["Mall"] = "False" + if "完成任务: Award" in log: + self.task_dict["Mission"] = "False" + if "完成任务: Roguelike" in log: + self.task_dict["AutoRoguelike"] = "False" + if "完成任务: Reclamation" in log: + self.task_dict["Reclamation"] = "False" + + if all(v == "False" for v in self.task_dict.values()): + self.maa_result = "Success!" + else: + self.maa_result = "MAA部分任务执行失败" + elif "请「检查连接设置」或「尝试重启模拟器与 ADB」或「重启电脑」" in log: self.maa_result = "MAA的ADB连接异常" + elif "未检测到任何模拟器" in log: self.maa_result = "MAA未检测到任何模拟器" + elif "已停止" in log: self.maa_result = "MAA在完成任务前中止" + elif "MaaAssistantArknights GUI exited" in log: self.maa_result = "MAA在完成任务前退出" + elif datetime.now() - latest_time > timedelta( minutes=self.set["RunSet"][time_book[mode]] ): self.maa_result = "MAA进程超时" + elif self.isInterruptionRequested: self.maa_result = "任务被手动中止" + else: self.maa_result = "Wait" @@ -1071,8 +1165,35 @@ class MaaManager(QObject): "Info" ]["Id"] + # 按预设设定任务 + data["Configurations"]["Default"]["TaskQueue.Recruiting.IsChecked"] = ( + self.task_dict["Recruiting"] + ) # 自动公招 + data["Configurations"]["Default"]["TaskQueue.Base.IsChecked"] = ( + self.task_dict["Base"] + ) # 基建换班 + data["Configurations"]["Default"]["TaskQueue.Combat.IsChecked"] = ( + self.task_dict["Combat"] + ) # 刷理智 + data["Configurations"]["Default"]["TaskQueue.Mission.IsChecked"] = ( + self.task_dict["Mission"] + ) # 领取奖励 + data["Configurations"]["Default"]["TaskQueue.Mall.IsChecked"] = ( + self.task_dict["Mall"] + ) # 获取信用及购物 + data["Configurations"]["Default"]["TaskQueue.AutoRoguelike.IsChecked"] = ( + self.task_dict["AutoRoguelike"] + ) # 自动肉鸽 + data["Configurations"]["Default"]["TaskQueue.Reclamation.IsChecked"] = ( + self.task_dict["Reclamation"] + ) # 生息演算 + if user_data["Info"]["Mode"] == "简洁": + data["Configurations"]["Default"][ + "TaskQueue.WakeUp.IsChecked" + ] = "True" # 开始唤醒 + data["Configurations"]["Default"]["Start.ClientType"] = user_data[ "Info" ][ @@ -1091,30 +1212,6 @@ class MaaManager(QObject): if "剿灭" in mode: - data["Configurations"]["Default"][ - "TaskQueue.WakeUp.IsChecked" - ] = "True" # 开始唤醒 - data["Configurations"]["Default"][ - "TaskQueue.Recruiting.IsChecked" - ] = "False" # 自动公招 - data["Configurations"]["Default"][ - "TaskQueue.Base.IsChecked" - ] = "False" # 基建换班 - data["Configurations"]["Default"][ - "TaskQueue.Combat.IsChecked" - ] = "True" # 刷理智 - data["Configurations"]["Default"][ - "TaskQueue.Mission.IsChecked" - ] = "False" # 领取奖励 - data["Configurations"]["Default"][ - "TaskQueue.Mall.IsChecked" - ] = "False" # 获取信用及购物 - data["Configurations"]["Default"][ - "TaskQueue.AutoRoguelike.IsChecked" - ] = "False" # 自动肉鸽 - data["Configurations"]["Default"][ - "TaskQueue.Reclamation.IsChecked" - ] = "False" # 生息演算 data["Configurations"]["Default"][ "MainFunction.Stage1" ] = "Annihilation" # 主关卡 @@ -1151,31 +1248,6 @@ class MaaManager(QObject): elif "日常" in mode: - data["Configurations"]["Default"][ - "TaskQueue.WakeUp.IsChecked" - ] = "True" # 开始唤醒 - data["Configurations"]["Default"][ - "TaskQueue.Recruiting.IsChecked" - ] = "True" # 自动公招 - data["Configurations"]["Default"][ - "TaskQueue.Base.IsChecked" - ] = "True" # 基建换班 - data["Configurations"]["Default"][ - "TaskQueue.Combat.IsChecked" - ] = "True" # 刷理智 - data["Configurations"]["Default"][ - "TaskQueue.Mission.IsChecked" - ] = "True" # 领取奖励 - data["Configurations"]["Default"][ - "TaskQueue.Mall.IsChecked" - ] = "True" # 获取信用及购物 - data["Configurations"]["Default"][ - "TaskQueue.AutoRoguelike.IsChecked" - ] = "False" # 自动肉鸽 - data["Configurations"]["Default"][ - "TaskQueue.Reclamation.IsChecked" - ] = "False" # 生息演算 - data["Configurations"]["Default"]["MainFunction.UseMedicine"] = ( "False" if user_data["Info"]["MedicineNumb"] == 0 else "True" ) # 吃理智药 diff --git a/resources/docs/MAA_config_info.txt b/resources/docs/MAA_config_info.txt index 484cf60..ddab858 100644 --- a/resources/docs/MAA_config_info.txt +++ b/resources/docs/MAA_config_info.txt @@ -6,8 +6,8 @@ "TaskQueue.Recruiting.IsChecked": "True" #自动公招 "TaskQueue.Base.IsChecked": "True" #基建换班 "TaskQueue.Combat.IsChecked": "True" #刷理智 -"TaskQueue.Mission.IsChecked": "True" #领取奖励 "TaskQueue.Mall.IsChecked": "True" #获取信用及购物 +"TaskQueue.Mission.IsChecked": "True" #领取奖励 "TaskQueue.AutoRoguelike.IsChecked": "False" #自动肉鸽 "TaskQueue.Reclamation.IsChecked": "False" #生息演算 "TaskQueue.Order.WakeUp": "0" diff --git a/resources/version.json b/resources/version.json index a487841..a827b60 100644 --- a/resources/version.json +++ b/resources/version.json @@ -1,8 +1,13 @@ { - "main_version": "4.3.5.0", + "main_version": "4.3.6.1", "updater_version": "1.0.0.0", "announcement": "\n## 新增功能\n- 屏蔽MuMu模拟器开屏广告功能上线\n- 更新器支持多线程下载\n- 添加强制关闭ADB与模拟器等增强任务项\n## 修复BUG\n- 修复统计信息HTML模板公招匹配错误\n- 修复密码显示按钮动画异常\n- 修复`检测到MAA未能实际执行任务`报错被异常屏蔽\n- 修复MAA超时判定异常失效\n## 程序优化\n- 关机等电源操作添加100s倒计时\n- 人工排查弹窗方法优化\n- 人工排查时自动屏蔽静默操作\n- 公告样式优化", "version_info": { + "4.3.6.1": { + "新增功能": [ + "单次自动代理任务中,已完成的子任务在重复执行时不再启用" + ] + }, "4.3.5.0": { "新增功能": [ "用户设置中新增连战次数与剩余理智关卡两项配置项",