人工排查功能上线;修复未完成用户无法正确加载的问题
This commit is contained in:
BIN
AUTO_MAA.exe
BIN
AUTO_MAA.exe
Binary file not shown.
382
AUTO_MAA.py
382
AUTO_MAA.py
@@ -60,15 +60,18 @@ uiLoader = QUiLoader()
|
|||||||
|
|
||||||
class MaaRunner(QtCore.QThread):
|
class MaaRunner(QtCore.QThread):
|
||||||
|
|
||||||
|
question = QtCore.Signal()
|
||||||
UpGui = QtCore.Signal(str, str, str, str, str)
|
UpGui = QtCore.Signal(str, str, str, str, str)
|
||||||
UpUserInfo = QtCore.Signal(list, list, list, list)
|
UpUserInfo = QtCore.Signal(list, list, list, list, list)
|
||||||
Accomplish = QtCore.Signal()
|
Accomplish = QtCore.Signal()
|
||||||
AppPath = os.path.dirname(os.path.realpath(sys.argv[0])).replace(
|
AppPath = os.path.dirname(os.path.realpath(sys.argv[0])).replace(
|
||||||
"\\", "/"
|
"\\", "/"
|
||||||
) # 获取软件自身的路径
|
) # 获取软件自身的路径
|
||||||
ifRun = False
|
ifRun = False
|
||||||
|
|
||||||
def __init__(self, SetPath, LogPath, MaaPath, Routine, Annihilation, Num, data):
|
def __init__(
|
||||||
|
self, SetPath, LogPath, MaaPath, Routine, Annihilation, Num, data, mode
|
||||||
|
):
|
||||||
super(MaaRunner, self).__init__()
|
super(MaaRunner, self).__init__()
|
||||||
self.SetPath = SetPath
|
self.SetPath = SetPath
|
||||||
self.LogPath = LogPath
|
self.LogPath = LogPath
|
||||||
@@ -77,6 +80,7 @@ class MaaRunner(QtCore.QThread):
|
|||||||
self.Annihilation = Annihilation
|
self.Annihilation = Annihilation
|
||||||
self.Num = Num
|
self.Num = Num
|
||||||
self.data = data
|
self.data = data
|
||||||
|
self.mode = mode
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.ifRun = True
|
self.ifRun = True
|
||||||
@@ -89,8 +93,8 @@ class MaaRunner(QtCore.QThread):
|
|||||||
for i in range(len(self.data))
|
for i in range(len(self.data))
|
||||||
if (self.data[i][2] > 0 and self.data[i][3] == "y")
|
if (self.data[i][2] > 0 and self.data[i][3] == "y")
|
||||||
]
|
]
|
||||||
# MAA预配置
|
# 日常代理模式
|
||||||
self.SetMaa(0, 0)
|
if self.mode == "日常代理":
|
||||||
# 执行情况预处理
|
# 执行情况预处理
|
||||||
for i in AllUid:
|
for i in AllUid:
|
||||||
if self.data[i][4] != curdate:
|
if self.data[i][4] != curdate:
|
||||||
@@ -101,10 +105,14 @@ class MaaRunner(QtCore.QThread):
|
|||||||
for uid in AllUid:
|
for uid in AllUid:
|
||||||
if not self.ifRun:
|
if not self.ifRun:
|
||||||
break
|
break
|
||||||
|
# 初始化代理情况记录和模式替换记录
|
||||||
runbook = [False for k in range(2)]
|
runbook = [False for k in range(2)]
|
||||||
|
modebook = ["日常代理_剿灭", "日常代理_日常"]
|
||||||
|
# 尝试次数循环
|
||||||
for i in range(self.Num):
|
for i in range(self.Num):
|
||||||
if not self.ifRun:
|
if not self.ifRun:
|
||||||
break
|
break
|
||||||
|
# 剿灭-日常模式循环
|
||||||
for j in range(2):
|
for j in range(2):
|
||||||
if not self.ifRun:
|
if not self.ifRun:
|
||||||
break
|
break
|
||||||
@@ -114,7 +122,7 @@ class MaaRunner(QtCore.QThread):
|
|||||||
if runbook[j]:
|
if runbook[j]:
|
||||||
continue
|
continue
|
||||||
# 配置MAA
|
# 配置MAA
|
||||||
self.SetMaa(j + 1, uid)
|
self.SetMaa(modebook[j], uid)
|
||||||
# 创建MAA任务
|
# 创建MAA任务
|
||||||
maa = subprocess.Popen([self.MaaPath])
|
maa = subprocess.Popen([self.MaaPath])
|
||||||
# 记录当前时间
|
# 记录当前时间
|
||||||
@@ -123,10 +131,12 @@ class MaaRunner(QtCore.QThread):
|
|||||||
self.TimeOut = False
|
self.TimeOut = False
|
||||||
# 更新运行信息
|
# 更新运行信息
|
||||||
WaitUid = [
|
WaitUid = [
|
||||||
idx for idx in AllUid if (not idx in OverUid + ErrorUid + [uid])
|
idx
|
||||||
|
for idx in AllUid
|
||||||
|
if (not idx in OverUid + ErrorUid + [uid])
|
||||||
]
|
]
|
||||||
# 监测MAA运行状态
|
# 监测MAA运行状态
|
||||||
while True:
|
while self.ifRun:
|
||||||
# 获取MAA日志
|
# 获取MAA日志
|
||||||
logs = []
|
logs = []
|
||||||
IfLogStart = False
|
IfLogStart = False
|
||||||
@@ -169,28 +179,27 @@ class MaaRunner(QtCore.QThread):
|
|||||||
# 合并日志
|
# 合并日志
|
||||||
log = "".join(logs)
|
log = "".join(logs)
|
||||||
# 更新MAA日志
|
# 更新MAA日志
|
||||||
if j == 0:
|
|
||||||
self.UpGui.emit(
|
self.UpGui.emit(
|
||||||
self.data[uid][0] + "_第" + str(i + 1) + "次_剿灭",
|
self.data[uid][0]
|
||||||
"\n".join([self.data[k][0] for k in WaitUid]),
|
+ "_第"
|
||||||
"\n".join([self.data[k][0] for k in OverUid]),
|
+ str(i + 1)
|
||||||
"\n".join([self.data[k][0] for k in ErrorUid]),
|
+ "次_"
|
||||||
log,
|
+ modebook[j][5:7],
|
||||||
)
|
|
||||||
elif j == 1:
|
|
||||||
self.UpGui.emit(
|
|
||||||
self.data[uid][0] + "_第" + str(i + 1) + "次_日常",
|
|
||||||
"\n".join([self.data[k][0] for k in WaitUid]),
|
"\n".join([self.data[k][0] for k in WaitUid]),
|
||||||
"\n".join([self.data[k][0] for k in OverUid]),
|
"\n".join([self.data[k][0] for k in OverUid]),
|
||||||
"\n".join([self.data[k][0] for k in ErrorUid]),
|
"\n".join([self.data[k][0] for k in ErrorUid]),
|
||||||
log,
|
log,
|
||||||
)
|
)
|
||||||
# 判断MAA程序运行状态
|
# 判断MAA程序运行状态
|
||||||
result = self.IfMaaSuccess(log, j)
|
result = self.IfMaaSuccess(log, modebook[j])
|
||||||
if result == "Success!":
|
if result == "Success!":
|
||||||
runbook[j] = True
|
runbook[j] = True
|
||||||
self.UpGui.emit(
|
self.UpGui.emit(
|
||||||
self.data[uid][0] + "_第" + str(i + 1) + "次_日常",
|
self.data[uid][0]
|
||||||
|
+ "_第"
|
||||||
|
+ str(i + 1)
|
||||||
|
+ "次_"
|
||||||
|
+ modebook[j][5:7],
|
||||||
"\n".join([self.data[k][0] for k in WaitUid]),
|
"\n".join([self.data[k][0] for k in WaitUid]),
|
||||||
"\n".join([self.data[k][0] for k in OverUid]),
|
"\n".join([self.data[k][0] for k in OverUid]),
|
||||||
"\n".join([self.data[k][0] for k in ErrorUid]),
|
"\n".join([self.data[k][0] for k in ErrorUid]),
|
||||||
@@ -205,7 +214,11 @@ class MaaRunner(QtCore.QThread):
|
|||||||
# 打印中止信息
|
# 打印中止信息
|
||||||
# 此时,log变量内存储的就是出现异常的日志信息,可以保存或发送用于问题排查
|
# 此时,log变量内存储的就是出现异常的日志信息,可以保存或发送用于问题排查
|
||||||
self.UpGui.emit(
|
self.UpGui.emit(
|
||||||
self.data[uid][0] + "_第" + str(i + 1) + "次_日常",
|
self.data[uid][0]
|
||||||
|
+ "_第"
|
||||||
|
+ str(i + 1)
|
||||||
|
+ "次_"
|
||||||
|
+ modebook[j][5:7],
|
||||||
"\n".join([self.data[k][0] for k in WaitUid]),
|
"\n".join([self.data[k][0] for k in WaitUid]),
|
||||||
"\n".join([self.data[k][0] for k in OverUid]),
|
"\n".join([self.data[k][0] for k in OverUid]),
|
||||||
"\n".join([self.data[k][0] for k in ErrorUid]),
|
"\n".join([self.data[k][0] for k in ErrorUid]),
|
||||||
@@ -223,37 +236,159 @@ class MaaRunner(QtCore.QThread):
|
|||||||
break
|
break
|
||||||
if not (runbook[0] and runbook[1]):
|
if not (runbook[0] and runbook[1]):
|
||||||
ErrorUid.append(uid)
|
ErrorUid.append(uid)
|
||||||
|
# 人工排查模式
|
||||||
|
elif self.mode == "人工排查":
|
||||||
|
# 标记是否需要启动模拟器
|
||||||
|
if_strat_app = True
|
||||||
|
# 标识排查模式
|
||||||
|
for i in AllUid:
|
||||||
|
self.data[i][0] += "_排查模式"
|
||||||
|
# 开始排查
|
||||||
|
for uid in AllUid:
|
||||||
|
if not self.ifRun:
|
||||||
|
break
|
||||||
|
runbook = [False for k in range(2)]
|
||||||
|
# 启动重试循环
|
||||||
|
while self.ifRun:
|
||||||
|
# 配置MAA
|
||||||
|
if if_strat_app:
|
||||||
|
self.SetMaa("人工排查_启动模拟器", uid)
|
||||||
|
if_strat_app = False
|
||||||
|
else:
|
||||||
|
self.SetMaa("人工排查_仅切换账号", uid)
|
||||||
|
# 创建MAA任务
|
||||||
|
maa = subprocess.Popen([self.MaaPath])
|
||||||
|
# 记录当前时间
|
||||||
|
StartTime = datetime.datetime.now()
|
||||||
|
# 更新运行信息
|
||||||
|
WaitUid = [
|
||||||
|
idx for idx in AllUid if (not idx in OverUid + ErrorUid + [uid])
|
||||||
|
]
|
||||||
|
# 监测MAA运行状态
|
||||||
|
while self.ifRun:
|
||||||
|
# 获取MAA日志
|
||||||
|
logs = []
|
||||||
|
IfLogStart = False
|
||||||
|
with open(self.LogPath, "r", encoding="utf-8") as f:
|
||||||
|
for entry in f:
|
||||||
|
if not IfLogStart:
|
||||||
|
try:
|
||||||
|
entry_time = datetime.datetime.strptime(
|
||||||
|
entry[1:20], "%Y-%m-%d %H:%M:%S"
|
||||||
|
)
|
||||||
|
if entry_time > StartTime:
|
||||||
|
IfLogStart = True
|
||||||
|
logs.append(entry)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
logs.append(entry)
|
||||||
|
# 合并日志
|
||||||
|
log = "".join(logs)
|
||||||
|
# 更新MAA日志
|
||||||
|
self.UpGui.emit(
|
||||||
|
self.data[uid][0],
|
||||||
|
"\n".join([self.data[k][0] for k in WaitUid]),
|
||||||
|
"\n".join([self.data[k][0] for k in OverUid]),
|
||||||
|
"\n".join([self.data[k][0] for k in ErrorUid]),
|
||||||
|
log,
|
||||||
|
)
|
||||||
|
# 判断MAA程序运行状态
|
||||||
|
result = self.IfMaaSuccess(log, "人工排查")
|
||||||
|
if result == "Success!":
|
||||||
|
runbook[0] = True
|
||||||
|
self.UpGui.emit(
|
||||||
|
self.data[uid][0],
|
||||||
|
"\n".join([self.data[k][0] for k in WaitUid]),
|
||||||
|
"\n".join([self.data[k][0] for k in OverUid]),
|
||||||
|
"\n".join([self.data[k][0] for k in ErrorUid]),
|
||||||
|
"检测到MAA进程成功登录PRTS",
|
||||||
|
)
|
||||||
|
break
|
||||||
|
elif result == "Wait":
|
||||||
|
# 检测时间间隔
|
||||||
|
time.sleep(1)
|
||||||
|
else:
|
||||||
|
self.UpGui.emit(
|
||||||
|
self.data[uid][0],
|
||||||
|
"\n".join([self.data[k][0] for k in WaitUid]),
|
||||||
|
"\n".join([self.data[k][0] for k in OverUid]),
|
||||||
|
"\n".join([self.data[k][0] for k in ErrorUid]),
|
||||||
|
result,
|
||||||
|
)
|
||||||
|
os.system("taskkill /F /T /PID " + str(maa.pid))
|
||||||
|
if_strat_app = True
|
||||||
|
if self.ifRun:
|
||||||
|
time.sleep(10)
|
||||||
|
break
|
||||||
|
if runbook[0]:
|
||||||
|
break
|
||||||
|
elif self.ifRun:
|
||||||
|
self.question_title = "操作提示"
|
||||||
|
self.question_info = "MAA未能正确登录到PRTS,是否重试?"
|
||||||
|
self.question_choice = "wait"
|
||||||
|
self.question.emit()
|
||||||
|
while self.question_choice == "wait":
|
||||||
|
time.sleep(1)
|
||||||
|
if self.question_choice == "No":
|
||||||
|
break
|
||||||
|
if runbook[0] and self.ifRun:
|
||||||
|
self.question_title = "操作提示"
|
||||||
|
self.question_info = "请检查用户代理情况,如无异常请按下确认键。"
|
||||||
|
self.question_choice = "wait"
|
||||||
|
self.question.emit()
|
||||||
|
while self.question_choice == "wait":
|
||||||
|
time.sleep(1)
|
||||||
|
if self.question_choice == "Yes":
|
||||||
|
runbook[1] = True
|
||||||
|
if runbook[0] and runbook[1]:
|
||||||
|
if "未通过人工排查" in self.data[uid][11]:
|
||||||
|
self.data[uid][11] = self.data[uid][11].replace(
|
||||||
|
"未通过人工排查|", ""
|
||||||
|
)
|
||||||
|
OverUid.append(uid)
|
||||||
|
elif not (runbook[0] and runbook[1]):
|
||||||
|
if not "未通过人工排查" in self.data[uid][11]:
|
||||||
|
self.data[uid][11] = "未通过人工排查|" + self.data[uid][11]
|
||||||
|
ErrorUid.append(uid)
|
||||||
|
if not self.ifRun:
|
||||||
|
os.system("taskkill /F /T /PID " + str(maa.pid))
|
||||||
# 更新用户数据
|
# 更新用户数据
|
||||||
days = [self.data[k][2] for k in AllUid]
|
days = [self.data[k][2] for k in AllUid]
|
||||||
lasts = [self.data[k][4] for k in AllUid]
|
lasts = [self.data[k][4] for k in AllUid]
|
||||||
|
notes = [self.data[k][11] for k in AllUid]
|
||||||
numbs = [self.data[k][12] for k in AllUid]
|
numbs = [self.data[k][12] for k in AllUid]
|
||||||
self.UpUserInfo.emit(AllUid, days, lasts, numbs)
|
self.UpUserInfo.emit(AllUid, days, lasts, notes, numbs)
|
||||||
# 保存运行日志
|
# 保存运行日志
|
||||||
endtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
endtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
with open(self.AppPath + "log.txt", "w", encoding="utf-8") as f:
|
with open(self.AppPath + "/log.txt", "w", encoding="utf-8") as f:
|
||||||
print("任务开始时间:" + begintime + ",结束时间:" + endtime, file=f)
|
print("任务开始时间:" + begintime + ",结束时间:" + endtime, file=f)
|
||||||
print(
|
print(
|
||||||
"已完成数:" + str(len(OverUid)) + ",未完成数:" + str(len(ErrorUid)),
|
"已完成数:"
|
||||||
|
+ str(len(OverUid))
|
||||||
|
+ ",未完成数:"
|
||||||
|
+ str(len(ErrorUid) + len(WaitUid))
|
||||||
|
+ "\n",
|
||||||
file=f,
|
file=f,
|
||||||
)
|
)
|
||||||
ErrorUid = [idx for idx in AllUid if (not idx in OverUid)]
|
|
||||||
if len(ErrorUid) != 0:
|
if len(ErrorUid) != 0:
|
||||||
print("代理未完成的用户:", file=f)
|
print(self.mode[2:4] + "未成功的用户:", file=f)
|
||||||
print("\n".join([self.data[k][0] for k in ErrorUid]), file=f)
|
print("\n".join([self.data[k][0] for k in ErrorUid]), file=f)
|
||||||
WaitUid = [idx for idx in AllUid if (not idx in OverUid + ErrorUid + [uid])]
|
WaitUid = [idx for idx in AllUid if (not idx in OverUid + ErrorUid)]
|
||||||
if len(WaitUid) != 0:
|
if len(WaitUid) != 0:
|
||||||
print("未代理的用户:", file=f)
|
print("\n未开始" + self.mode[2:4] + "的用户:", file=f)
|
||||||
print("\n".join([self.data[k][0] for k in WaitUid]), file=f)
|
print("\n".join([self.data[k][0] for k in WaitUid]), file=f)
|
||||||
with open(self.AppPath + "log.txt", "r", encoding="utf-8") as f:
|
|
||||||
EndLog = f.read()
|
|
||||||
# 恢复GUI运行面板
|
# 恢复GUI运行面板
|
||||||
|
with open(self.AppPath + "/log.txt", "r", encoding="utf-8") as f:
|
||||||
|
EndLog = f.read()
|
||||||
self.UpGui.emit("", "", "", "", EndLog)
|
self.UpGui.emit("", "", "", "", EndLog)
|
||||||
self.Accomplish.emit()
|
self.Accomplish.emit()
|
||||||
self.ifRun = False
|
self.ifRun = False
|
||||||
|
|
||||||
# 判断MAA程序运行状态
|
# 判断MAA程序运行状态
|
||||||
def IfMaaSuccess(self, log, mode):
|
def IfMaaSuccess(self, log, mode):
|
||||||
if mode == 1 and "任务出错: Fight" in log:
|
if "日常代理" in mode:
|
||||||
|
if mode == "日常代理_剿灭" and "任务出错: Fight" in log:
|
||||||
return "检测到MAA未能实际执行任务\n正在中止相关程序\n请等待10s"
|
return "检测到MAA未能实际执行任务\n正在中止相关程序\n请等待10s"
|
||||||
elif "任务已全部完成!" in log:
|
elif "任务已全部完成!" in log:
|
||||||
return "Success!"
|
return "Success!"
|
||||||
@@ -269,12 +404,101 @@ class MaaRunner(QtCore.QThread):
|
|||||||
return "您中止了本次任务\n正在中止相关程序\n请等待"
|
return "您中止了本次任务\n正在中止相关程序\n请等待"
|
||||||
else:
|
else:
|
||||||
return "Wait"
|
return "Wait"
|
||||||
|
elif mode == "人工排查":
|
||||||
|
if "完成任务: StartUp" in log:
|
||||||
|
return "Success!"
|
||||||
|
elif (
|
||||||
|
("请检查连接设置或尝试重启模拟器与 ADB 或重启电脑" in log)
|
||||||
|
or ("已停止" in log)
|
||||||
|
or ("MaaAssistantArknights GUI exited" in log)
|
||||||
|
):
|
||||||
|
return "检测到MAA进程异常\n正在中止相关程序\n请等待10s"
|
||||||
|
elif not self.ifRun:
|
||||||
|
return "您中止了本次任务\n正在中止相关程序\n请等待"
|
||||||
|
else:
|
||||||
|
return "Wait"
|
||||||
|
|
||||||
# 配置MAA运行参数
|
# 配置MAA运行参数
|
||||||
def SetMaa(self, s, uid):
|
def SetMaa(self, mode, uid):
|
||||||
with open(self.SetPath, "r", encoding="utf-8") as f:
|
with open(self.SetPath, "r", encoding="utf-8") as f:
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
if s == 0:
|
# 人工排查配置
|
||||||
|
if mode == "人工排查_启动模拟器":
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"MainFunction.PostActions"
|
||||||
|
] = "8" # 完成后退出MAA
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"Start.RunDirectly"
|
||||||
|
] = "True" # 启动MAA后直接运行
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"Start.StartEmulator"
|
||||||
|
] = "True" # 启动MAA后自动开启模拟器
|
||||||
|
data["Configurations"]["Default"]["Start.AccountName"] = (
|
||||||
|
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
|
||||||
|
) # 账号切换
|
||||||
|
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"
|
||||||
|
] = "False" # 刷理智
|
||||||
|
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" # 生息演算 # 人工排查配置
|
||||||
|
if mode == "人工排查_仅切换账号":
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"MainFunction.PostActions"
|
||||||
|
] = "8" # 完成后无退出MAA
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"Start.RunDirectly"
|
||||||
|
] = "True" # 启动MAA后直接运行
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"Start.StartEmulator"
|
||||||
|
] = "False" # 启动MAA后自动开启模拟器
|
||||||
|
data["Configurations"]["Default"]["Start.AccountName"] = (
|
||||||
|
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
|
||||||
|
) # 账号切换
|
||||||
|
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"
|
||||||
|
] = "False" # 刷理智
|
||||||
|
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" # 生息演算
|
||||||
|
# 剿灭代理配置
|
||||||
|
elif mode == "日常代理_剿灭":
|
||||||
data["Configurations"]["Default"][
|
data["Configurations"]["Default"][
|
||||||
"MainFunction.PostActions"
|
"MainFunction.PostActions"
|
||||||
] = "12" # 完成后退出MAA和模拟器
|
] = "12" # 完成后退出MAA和模拟器
|
||||||
@@ -284,7 +508,6 @@ class MaaRunner(QtCore.QThread):
|
|||||||
data["Configurations"]["Default"][
|
data["Configurations"]["Default"][
|
||||||
"Start.StartEmulator"
|
"Start.StartEmulator"
|
||||||
] = "True" # 启动MAA后自动开启模拟器
|
] = "True" # 启动MAA后自动开启模拟器
|
||||||
elif s == 1:
|
|
||||||
data["Configurations"]["Default"]["Start.AccountName"] = (
|
data["Configurations"]["Default"]["Start.AccountName"] = (
|
||||||
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
|
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
|
||||||
) # 账号切换
|
) # 账号切换
|
||||||
@@ -306,6 +529,12 @@ class MaaRunner(QtCore.QThread):
|
|||||||
data["Configurations"]["Default"][
|
data["Configurations"]["Default"][
|
||||||
"TaskQueue.Mall.IsChecked"
|
"TaskQueue.Mall.IsChecked"
|
||||||
] = "False" # 获取信用及购物
|
] = "False" # 获取信用及购物
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"TaskQueue.AutoRoguelike.IsChecked"
|
||||||
|
] = "False" # 自动肉鸽
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"TaskQueue.Reclamation.IsChecked"
|
||||||
|
] = "False" # 生息演算
|
||||||
data["Configurations"]["Default"][
|
data["Configurations"]["Default"][
|
||||||
"MainFunction.Stage1"
|
"MainFunction.Stage1"
|
||||||
] = "Annihilation" # 主关卡
|
] = "Annihilation" # 主关卡
|
||||||
@@ -332,7 +561,17 @@ class MaaRunner(QtCore.QThread):
|
|||||||
data["Configurations"]["Default"][
|
data["Configurations"]["Default"][
|
||||||
"Fight.UseExpiringMedicine"
|
"Fight.UseExpiringMedicine"
|
||||||
] = "True" # 无限吃48小时内过期的理智药
|
] = "True" # 无限吃48小时内过期的理智药
|
||||||
elif s == 2:
|
# 日常代理配置
|
||||||
|
elif mode == "日常代理_日常":
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"MainFunction.PostActions"
|
||||||
|
] = "12" # 完成后退出MAA和模拟器
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"Start.RunDirectly"
|
||||||
|
] = "True" # 启动MAA后直接运行
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"Start.StartEmulator"
|
||||||
|
] = "True" # 启动MAA后自动开启模拟器
|
||||||
data["Configurations"]["Default"]["Start.AccountName"] = (
|
data["Configurations"]["Default"]["Start.AccountName"] = (
|
||||||
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
|
self.data[uid][1][:3] + "****" + self.data[uid][1][7:]
|
||||||
) # 账号切换
|
) # 账号切换
|
||||||
@@ -354,6 +593,12 @@ class MaaRunner(QtCore.QThread):
|
|||||||
data["Configurations"]["Default"][
|
data["Configurations"]["Default"][
|
||||||
"TaskQueue.Mall.IsChecked"
|
"TaskQueue.Mall.IsChecked"
|
||||||
] = "True" # 获取信用及购物
|
] = "True" # 获取信用及购物
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"TaskQueue.AutoRoguelike.IsChecked"
|
||||||
|
] = "False" # 自动肉鸽
|
||||||
|
data["Configurations"]["Default"][
|
||||||
|
"TaskQueue.Reclamation.IsChecked"
|
||||||
|
] = "False" # 生息演算
|
||||||
# 主关卡
|
# 主关卡
|
||||||
if self.data[uid][5] == "-":
|
if self.data[uid][5] == "-":
|
||||||
data["Configurations"]["Default"]["MainFunction.Stage1"] = ""
|
data["Configurations"]["Default"]["MainFunction.Stage1"] = ""
|
||||||
@@ -420,6 +665,7 @@ class MaaRunner(QtCore.QThread):
|
|||||||
] = self.data[uid][
|
] = self.data[uid][
|
||||||
9
|
9
|
||||||
] # 自定义基建配置文件地址
|
] # 自定义基建配置文件地址
|
||||||
|
# 覆写配置文件
|
||||||
with open(self.SetPath, "w", encoding="utf-8") as f:
|
with open(self.SetPath, "w", encoding="utf-8") as f:
|
||||||
json.dump(data, f, indent=4)
|
json.dump(data, f, indent=4)
|
||||||
return True
|
return True
|
||||||
@@ -589,6 +835,9 @@ class Main(QWidget):
|
|||||||
self.runnow = self.ui.findChild(QPushButton, "pushButton_runnow")
|
self.runnow = self.ui.findChild(QPushButton, "pushButton_runnow")
|
||||||
self.runnow.clicked.connect(self.RunStarter)
|
self.runnow.clicked.connect(self.RunStarter)
|
||||||
|
|
||||||
|
self.checkstart = self.ui.findChild(QPushButton, "pushButton_checkstart")
|
||||||
|
self.checkstart.clicked.connect(self.CheckStarter)
|
||||||
|
|
||||||
self.MaaPath = self.ui.findChild(QLineEdit, "lineEdit_MAApath")
|
self.MaaPath = self.ui.findChild(QLineEdit, "lineEdit_MAApath")
|
||||||
self.MaaPath.textChanged.connect(self.ChangeConfig)
|
self.MaaPath.textChanged.connect(self.ChangeConfig)
|
||||||
|
|
||||||
@@ -645,10 +894,12 @@ class Main(QWidget):
|
|||||||
self.Annihilation_,
|
self.Annihilation_,
|
||||||
self.Num_,
|
self.Num_,
|
||||||
self.data_,
|
self.data_,
|
||||||
|
"未知",
|
||||||
)
|
)
|
||||||
|
self.MaaRunner.question.connect(lambda: self.read("question_runner"))
|
||||||
self.MaaRunner.UpGui.connect(self.UpdateBoard)
|
self.MaaRunner.UpGui.connect(self.UpdateBoard)
|
||||||
self.MaaRunner.UpUserInfo.connect(self.ChangeUserInfo)
|
self.MaaRunner.UpUserInfo.connect(self.ChangeUserInfo)
|
||||||
self.MaaRunner.Accomplish.connect(self.end)
|
self.MaaRunner.Accomplish.connect(self.RunEnd)
|
||||||
|
|
||||||
self.MainTimer = MainTimer(self.config)
|
self.MainTimer = MainTimer(self.config)
|
||||||
self.MainTimer.GetConfig.connect(self.GiveConfig)
|
self.MainTimer.GetConfig.connect(self.GiveConfig)
|
||||||
@@ -1064,7 +1315,7 @@ class Main(QWidget):
|
|||||||
self.UpdateTable("normal")
|
self.UpdateTable("normal")
|
||||||
|
|
||||||
# 修改用户信息
|
# 修改用户信息
|
||||||
def ChangeUserInfo(self, AllUid, days, lasts, numbs):
|
def ChangeUserInfo(self, AllUid, days, lasts, notes, numbs):
|
||||||
for i in range(len(AllUid)):
|
for i in range(len(AllUid)):
|
||||||
self.cur.execute(
|
self.cur.execute(
|
||||||
"UPDATE adminx SET day=? WHERE uid=?", (days[i], AllUid[i])
|
"UPDATE adminx SET day=? WHERE uid=?", (days[i], AllUid[i])
|
||||||
@@ -1072,6 +1323,9 @@ class Main(QWidget):
|
|||||||
self.cur.execute(
|
self.cur.execute(
|
||||||
"UPDATE adminx SET last=? WHERE uid=?", (lasts[i], AllUid[i])
|
"UPDATE adminx SET last=? WHERE uid=?", (lasts[i], AllUid[i])
|
||||||
)
|
)
|
||||||
|
self.cur.execute(
|
||||||
|
"UPDATE adminx SET notes=? WHERE uid=?", (notes[i], AllUid[i])
|
||||||
|
)
|
||||||
self.cur.execute(
|
self.cur.execute(
|
||||||
"UPDATE adminx SET numb=? WHERE uid=?", (numbs[i], AllUid[i])
|
"UPDATE adminx SET numb=? WHERE uid=?", (numbs[i], AllUid[i])
|
||||||
)
|
)
|
||||||
@@ -1134,6 +1388,17 @@ class Main(QWidget):
|
|||||||
return newPASSWORD
|
return newPASSWORD
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
# 读入选择
|
||||||
|
elif operation == "question_runner":
|
||||||
|
choice = QMessageBox.question(
|
||||||
|
self.ui,
|
||||||
|
self.MaaRunner.question_title,
|
||||||
|
self.MaaRunner.question_info,
|
||||||
|
)
|
||||||
|
if choice == QMessageBox.Yes:
|
||||||
|
self.MaaRunner.question_choice = "Yes"
|
||||||
|
elif choice == QMessageBox.No:
|
||||||
|
self.MaaRunner.question_choice = "No"
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
self.MainTimer.quit()
|
self.MainTimer.quit()
|
||||||
@@ -1144,23 +1409,25 @@ class Main(QWidget):
|
|||||||
super().closeEvent(event)
|
super().closeEvent(event)
|
||||||
|
|
||||||
# 中止任务
|
# 中止任务
|
||||||
def end(self):
|
def RunEnd(self):
|
||||||
self.MaaRunner.ifRun = False
|
self.MaaRunner.ifRun = False
|
||||||
self.MaaRunner.wait()
|
self.MaaRunner.wait()
|
||||||
self.MainTimer.isMaaRun = False
|
self.MainTimer.isMaaRun = False
|
||||||
|
self.checkstart.setEnabled(True)
|
||||||
self.runnow.clicked.disconnect()
|
self.runnow.clicked.disconnect()
|
||||||
self.runnow.setText("立即执行")
|
self.runnow.setText("立即执行")
|
||||||
self.runnow.clicked.connect(self.RunStarter)
|
self.runnow.clicked.connect(self.RunStarter)
|
||||||
|
|
||||||
# 启动MaaRunner线程
|
# 启动MaaRunner线程进行代理
|
||||||
def RunStarter(self):
|
def RunStarter(self):
|
||||||
if self.config["Default"]["MaaSet.path"] == "":
|
if self.config["Default"]["MaaSet.path"] == "":
|
||||||
QMessageBox.critical(self.ui, "错误", "MAA路径未设置!")
|
QMessageBox.critical(self.ui, "错误", "MAA路径未设置!")
|
||||||
return None
|
return None
|
||||||
# 运行过程中修改部分组件
|
# 运行过程中修改部分组件
|
||||||
|
self.checkstart.setEnabled(False)
|
||||||
self.runnow.clicked.disconnect()
|
self.runnow.clicked.disconnect()
|
||||||
self.runnow.setText("结束运行")
|
self.runnow.setText("结束运行")
|
||||||
self.runnow.clicked.connect(self.end)
|
self.runnow.clicked.connect(self.RunEnd)
|
||||||
# 配置参数
|
# 配置参数
|
||||||
self.MaaRunner.SetPath = (
|
self.MaaRunner.SetPath = (
|
||||||
self.config["Default"]["MaaSet.path"] + "/config/gui.json"
|
self.config["Default"]["MaaSet.path"] + "/config/gui.json"
|
||||||
@@ -1175,6 +1442,43 @@ class Main(QWidget):
|
|||||||
self.cur.execute("SELECT * FROM adminx WHERE True")
|
self.cur.execute("SELECT * FROM adminx WHERE True")
|
||||||
self.data_ = self.cur.fetchall()
|
self.data_ = self.cur.fetchall()
|
||||||
self.MaaRunner.data = [list(row) for row in self.data_]
|
self.MaaRunner.data = [list(row) for row in self.data_]
|
||||||
|
self.MaaRunner.mode = "日常代理"
|
||||||
|
# 启动执行线程
|
||||||
|
self.MainTimer.isMaaRun = True
|
||||||
|
self.MaaRunner.start()
|
||||||
|
|
||||||
|
# 排查结束
|
||||||
|
def CheckEnd(self):
|
||||||
|
self.MaaRunner.ifRun = False
|
||||||
|
self.MaaRunner.wait()
|
||||||
|
self.MainTimer.isMaaRun = False
|
||||||
|
self.runnow.setEnabled(True)
|
||||||
|
self.checkstart.clicked.disconnect()
|
||||||
|
self.checkstart.setText("开始排查")
|
||||||
|
self.checkstart.clicked.connect(self.CheckStarter)
|
||||||
|
|
||||||
|
# 启动MaaRunner线程进行排查
|
||||||
|
def CheckStarter(self):
|
||||||
|
if self.config["Default"]["MaaSet.path"] == "":
|
||||||
|
QMessageBox.critical(self.ui, "错误", "MAA路径未设置!")
|
||||||
|
return None
|
||||||
|
# 运行过程中修改部分组件
|
||||||
|
self.runnow.setEnabled(False)
|
||||||
|
self.checkstart.clicked.disconnect()
|
||||||
|
self.checkstart.setText("中止排查")
|
||||||
|
self.checkstart.clicked.connect(self.CheckEnd)
|
||||||
|
# 配置参数
|
||||||
|
self.MaaRunner.SetPath = (
|
||||||
|
self.config["Default"]["MaaSet.path"] + "/config/gui.json"
|
||||||
|
)
|
||||||
|
self.MaaRunner.LogPath = (
|
||||||
|
self.config["Default"]["MaaSet.path"] + "/debug/gui.log"
|
||||||
|
)
|
||||||
|
self.MaaRunner.MaaPath = self.config["Default"]["MaaSet.path"] + "/MAA.exe"
|
||||||
|
self.cur.execute("SELECT * FROM adminx WHERE True")
|
||||||
|
self.data_ = self.cur.fetchall()
|
||||||
|
self.MaaRunner.data = [list(row) for row in self.data_]
|
||||||
|
self.MaaRunner.mode = "人工排查"
|
||||||
# 启动执行线程
|
# 启动执行线程
|
||||||
self.MainTimer.isMaaRun = True
|
self.MainTimer.isMaaRun = True
|
||||||
self.MaaRunner.start()
|
self.MaaRunner.start()
|
||||||
|
|||||||
23
README.md
23
README.md
@@ -5,6 +5,15 @@ MAA多账号管理与自动化软件
|
|||||||
|
|
||||||
----------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
[](https://github.com/DLmaster361/AUTO_MAA/stargazers)
|
||||||
|
[](https://github.com/DLmaster361/AUTO_MAA/network)
|
||||||
|
[](https://github.com/DLmaster361/AUTO_MAA/issues)
|
||||||
|
[](https://github.com/DLmaster361/AUTO_MAA/graphs/contributors)
|
||||||
|
[](https://github.com/DLmaster361/AUTO_MAA/blob/main/LICENSE)
|
||||||
|
</div>
|
||||||
|
|
||||||
## 重要声明
|
## 重要声明
|
||||||
本软件是一个外部工具,旨在优化MAA多账号功能体验,并通过一些方法解决MAA项目未能解决的部分问题,改善代理的稳定性。该软件包可以存储明日方舟多账号数据,并通过修改MAA配置文件、读取MAA日志等行为自动完成多账号代理。本开发团队承诺,不会修改明日方舟游戏本体与相关配置文件。
|
本软件是一个外部工具,旨在优化MAA多账号功能体验,并通过一些方法解决MAA项目未能解决的部分问题,改善代理的稳定性。该软件包可以存储明日方舟多账号数据,并通过修改MAA配置文件、读取MAA日志等行为自动完成多账号代理。本开发团队承诺,不会修改明日方舟游戏本体与相关配置文件。
|
||||||
|
|
||||||
@@ -103,6 +112,20 @@ gameid.txt在初始已经存储了一些常用资源本的替代方案。
|
|||||||
|
|
||||||
- 保持软件打开,软件会在设定的时间自动运行
|
- 保持软件打开,软件会在设定的时间自动运行
|
||||||
|
|
||||||
|
## 人工排查代理结果
|
||||||
|
|
||||||
|
### 直接开始人工排查
|
||||||
|
|
||||||
|
- 在执行页单击`开始排查`启动排查进程
|
||||||
|
|
||||||
|
- 软件将调起MAA,依次登录各用户的账号
|
||||||
|
|
||||||
|
- 检查代理情况,可以手动完成未代理的任务
|
||||||
|
|
||||||
|
- 在对话框中单击对应账号的代理情况
|
||||||
|
|
||||||
|
- 结束人工排查后,相关排查情况将被写入用户管理页的`备注`
|
||||||
|
|
||||||
---
|
---
|
||||||
# 关于
|
# 关于
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1280</width>
|
<width>1280</width>
|
||||||
<height>720</height>
|
<height>697</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>2</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tab_users">
|
<widget class="QWidget" name="tab_users">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@@ -545,7 +545,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
<layout class="QVBoxLayout" name="verticalLayout_9" stretch="1,1,3,3,2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QFrame" name="frame_main">
|
<widget class="QFrame" name="frame_main">
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
@@ -577,6 +577,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_checkstart">
|
||||||
|
<property name="text">
|
||||||
|
<string>开始排查</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="pushButton_runnow">
|
<widget class="QPushButton" name="pushButton_runnow">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ VSVersionInfo(
|
|||||||
ffi=FixedFileInfo(
|
ffi=FixedFileInfo(
|
||||||
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
|
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
|
||||||
# Set not needed items to zero 0.
|
# Set not needed items to zero 0.
|
||||||
filevers=(3, 1, 2, 1),
|
filevers=(3, 1, 3, 0),
|
||||||
prodvers=(0, 0, 0, 0),
|
prodvers=(0, 0, 0, 0),
|
||||||
# Contains a bitmask that specifies the valid bits 'flags'r
|
# Contains a bitmask that specifies the valid bits 'flags'r
|
||||||
mask=0x3f,
|
mask=0x3f,
|
||||||
@@ -31,13 +31,13 @@ VSVersionInfo(
|
|||||||
[StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),
|
[StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'),
|
||||||
StringStruct('CompanyName', 'AUTO_MAA Team'),
|
StringStruct('CompanyName', 'AUTO_MAA Team'),
|
||||||
StringStruct('FileDescription', 'AUTO_MAA Component'),
|
StringStruct('FileDescription', 'AUTO_MAA Component'),
|
||||||
StringStruct('FileVersion', '3.1.2.1'),
|
StringStruct('FileVersion', '3.1.3.0'),
|
||||||
StringStruct('InternalName', 'AUTO_MAA'),
|
StringStruct('InternalName', 'AUTO_MAA'),
|
||||||
StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),
|
StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'),
|
||||||
StringStruct('OriginalFilename', 'AUTO_MAA.py'),
|
StringStruct('OriginalFilename', 'AUTO_MAA.py'),
|
||||||
StringStruct('ProductName', 'AUTO_MAA'),
|
StringStruct('ProductName', 'AUTO_MAA'),
|
||||||
StringStruct('ProductVersion', 'v3.1.2.1'),
|
StringStruct('ProductVersion', 'v3.1.3.0'),
|
||||||
StringStruct('Assembly Version', 'v3.1.2.1')])
|
StringStruct('Assembly Version', 'v3.1.3.0')])
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"TaskQueue.Combat.IsChecked": "True" #刷理智
|
"TaskQueue.Combat.IsChecked": "True" #刷理智
|
||||||
"TaskQueue.Mission.IsChecked": "True" #领取奖励
|
"TaskQueue.Mission.IsChecked": "True" #领取奖励
|
||||||
"TaskQueue.Mall.IsChecked": "True" #获取信用及购物
|
"TaskQueue.Mall.IsChecked": "True" #获取信用及购物
|
||||||
|
"TaskQueue.AutoRoguelike.IsChecked": "False" #自动肉鸽
|
||||||
|
"TaskQueue.Reclamation.IsChecked": "False" #生息演算
|
||||||
#刷理智
|
#刷理智
|
||||||
"MainFunction.Stage1": "" #主关卡
|
"MainFunction.Stage1": "" #主关卡
|
||||||
"MainFunction.Stage2": "" #备选关卡1
|
"MainFunction.Stage2": "" #备选关卡1
|
||||||
|
|||||||
12
更新说明.txt
12
更新说明.txt
@@ -1,15 +1,15 @@
|
|||||||
v3.1.2_Beta
|
v3.1.3
|
||||||
|
## 新增功能
|
||||||
|
- 人工排查功能上线
|
||||||
## 修复BUG
|
## 修复BUG
|
||||||
- 添加对内部任务失败的识别
|
- 添加对内部任务失败的识别
|
||||||
|
- 修复未完成用户无法正确加载的问题
|
||||||
## 程序优化
|
## 程序优化
|
||||||
- 优化log文件读取策略,可以读取无时间戳的日志
|
- 优化log文件读取策略,可以读取无时间戳的日志
|
||||||
- 优化MAA运行判定,为后续开发打基础
|
- 优化MAA运行判定,为后续开发打基础
|
||||||
## 更新说明
|
## 更新说明
|
||||||
- 项目初始阶段,不会提供专门的版本更新程序,您需要手动更新程序。
|
- 项目初始阶段,不会提供专门的版本更新程序,您需要手动更新程序。
|
||||||
- v2.1.5及以前的用户,由于新版本采用全新的架构,您需要手动输入之前的信息。
|
- v2.1.5及以前的用户,由于新版本采用全新的架构,您需要手动输入之前的信息。
|
||||||
- v3.0_Beta版用户,直接用AUTO_MAA.exe替代gui.exe后,将原文件夹下的gui文件夹用新版本对应文件替换,重新设置每个用户的“自定义基建”选项(输入“-”以关闭该功能,输入自定义基建配置文件地址以开启该功能)。
|
- v3.0_Beta版用户,直接用`AUTO_MAA.exe`替代`gui.exe`后,将原文件夹下的`gui文件夹`用新版本对应文件替换,重新设置每个用户的`自定义基建`选项(输入`-`以关闭该功能,输入自定义基建配置文件地址以开启该功能)。
|
||||||
- v3.1~v3.1.2版用户,将原文件夹下的AUTO_MAA.exe文件和gui文件夹用新版本对应文件替换即可。
|
- v3.1~v3.1.2版用户,将原文件夹下除`data文件夹`和`config文件夹`外的内容用新版本对应文件替换即可。
|
||||||
- 新用户请忽略本说明。
|
- 新用户请忽略本说明。
|
||||||
|
|
||||||
|
|
||||||
```内测版,普通用户请忽略```
|
|
||||||
Reference in New Issue
Block a user