尝试修复委托流程中误入商店的问题 (#2069)

* 尝试修复重试任务时,对话到商店NPC进入商店的问题

* 委托任务流程优化-餐品订单重试任务时减少重复对话

* 更新版本号
This commit is contained in:
DarkFlameMaster
2025-10-04 01:16:56 +08:00
committed by GitHub
parent f3987a02fd
commit f7eec282f3
4 changed files with 76 additions and 35 deletions

View File

@@ -1,49 +1,32 @@
[
{
"type": "地图追踪",
"data": "餐品订单-1.json",
"note": "执行第一个地图追踪步骤"
},
{
"type": "对话",
"data": {
"skipCount": 5,
"priorityOptions": [
"餐品外送订单",
"好吧"
],
"npcWhiteList": [
"莎拉"
]
},
"note": "执行对话步骤优先选择特定选项并与白名单NPC交互"
},
{
"type": "关闭商店界面",
"note": "关闭商店界面(如果现在在商店页面)"
"type": "委托描述检测",
"data": "与莎拉对话",
"note": "尝试接取委托任务",
"run": "接取任务.json"
},
{
"type": "委托描述检测",
"data": "取得制作好的餐品",
"note": "分支名字正确的情况",
"note": "取得制作好的餐品",
"run": "取餐.json"
},
{
"type": "委托描述检测",
"data": "询问帕拉德",
"note": "分支名字正确的情况",
"note": "询问帕拉德",
"run": "询问帕拉德.json"
},
{
"type": "委托描述检测",
"data": "运送餐品给活跃的欧琳",
"note": "分支名字正确的情况",
"note": "运送餐品给活跃的欧琳",
"run": "找到活跃的欧琳.json"
},
{
"type": "地图追踪",
"data": "餐品订单-1.json",
"note": "执行第四个地图追踪步骤"
"note": "寻路莎拉-交付餐费"
},
{
"type": "对话",
@@ -58,9 +41,5 @@
]
},
"note": "执行对话步骤优先选择特定选项并与白名单NPC交互"
},
{
"type": "关闭商店界面",
"note": "关闭商店界面(如果现在在商店页面)"
}
]

View File

@@ -0,0 +1,21 @@
[
{
"type": "地图追踪",
"data": "餐品订单-1.json",
"note": "寻路到莎拉"
},
{
"type": "对话",
"data": {
"skipCount": 5,
"priorityOptions": [
"餐品外送订单",
"好吧"
],
"npcWhiteList": [
"莎拉"
]
},
"note": "与莎拉对话接取任务"
}
]

View File

@@ -1,8 +1,8 @@
// 原神每日委托自动执行脚本 - 常量定义模块
var Constants = {
// 版本和编译信息
VERSION: "0.98.7",
BUILD_TIME: "2025.09.29",
VERSION: "0.98.8",
BUILD_TIME: "2025.10.04",
// 文件路径常量
SUPPORT_LIST_PATH: "name.json",
@@ -15,7 +15,9 @@ var Constants = {
// 图像识别相关常量
COMPLETED_IMAGE_PATH: "Data/RecognitionObject/Completed.png",
UNCOMPLETED_IMAGE_PATH: "Data/RecognitionObject/UnCompleted.png",
TALK_EXIT_IMAGE_PATH:"/Data/RecognitionObject/TalkExit.png",
TALK_ICON_IMAGE_PATH:"/Data/RecognitionObject/TalkIcon.png",
// 基础配置常量
MIN_TEXT_LENGTH: 3, // 最小文本长度
MAX_COMMISSION_RETRY_COUNT: 1, // 默认重试机制,超过则跳过该委托

View File

@@ -191,9 +191,48 @@ var DialogProcessor = {
}
// 如果没有找到优先选项,则使用默认跳过
if (!foundPriorityOption) {
keyPress("F");
await sleep(100);
if (!foundPriorityOption && !isInMainUI()) {
let exitList = await Utils.easyTemplateMatch(
Constants.TALK_EXIT_IMAGE_PATH,
dialogRegion,
(useMask = true)
);
let iconList = await Utils.easyTemplateMatch(
Constants.TALK_ICON_IMAGE_PATH,
dialogRegion
);
let clickXY = null;
//正常应该只识别到一个退出选项,如果识别到多个,则去点击气泡对话选项
if (exitList.count === 1) {
log.info("发现一个退出对话选项");
clickXY = [exitList[0].x, exitList[0].y];
//点击最下边的气泡选项
} else if (iconList.count > 0) {
log.info(
`发现{count}个气泡对话选项,点击最后一个`,
iconList.count
);
iconList = [...iconList];
iconList.sort((a, b) => b.y - a.y);
clickXY = [iconList[0].x, iconList[0].y];
} else {
log.warn("指定类型的对话选项不符合数量条件,不进行操作");
log.warn(
`退出图标:{exit}个,气泡图标:{icon}个`,
exitList.count,
iconList.count
);
}
//点击对话选项
if (clickXY) {
keyDown("VK_MENU");
await sleep(300);
click(...clickXY);
leftButtonClick();
keyUp("VK_MENU");
}
}
}
}