DaveSylor 使用说明-配置详解
## 产品介绍
DaveSylor 是一个基于图片识别、JSON 配置和控制台运行方式的自动化工具。
它没有图形界面,不依赖可视化按钮或窗口操作,而是通过以下三部分协同工作:
– 图片资源:用于定义程序需要识别的界面状态、目标图像和流程节点
– JSON 配置:用于定义状态判断、动作执行、流程跳转、等待锁、同步门控和区域扫描等行为
– 控制台进程:用于持续运行扫描循环、输出日志并执行对应动作
DaveSylor 的核心思想不是“写死脚本流程”,而是“用图片状态驱动流程”。
也就是说,程序会持续扫描你配置好的图片,并根据当前识别状态决定:
– 当前是否应该执行动作
– 当前是否应该进入战斗、休息、喝药、选怪等状态
– 当前是否应该中断本轮扫描
– 当前是否应该跳转到另外一个配置项继续扫描
– 当前状态是否需要等待一段时间后再放行后续流程
– 当前状态切换是否必须依赖其它状态确认
这种方式的优势是:
– 不依赖游戏内接口
– 不依赖复杂注入逻辑
– 流程可以通过配置持续迭代
– 适合做基于视觉状态的挂机、流程控制和半自动操作
DaveSylor 当前定位是:
– 无图形界面的控制台工具
– 基于图片识别的状态驱动器
– 基于 JSON 的流程编排器
– 可通过配置扩展行为的轻量自动化程序
本文档面向当前封版后的配置系统,重点说明 `game_config.json` 中 `imageActions` 的全部已支持属性。每个属性都包含:
– 功能
– 作用时机
– 配置方法
– 示例
– 注意事项
本文档基于当前代码实现整理,内容与程序实际行为一致。
## 1. 配置文件总览
主配置文件为 `game_config.json`,顶层包含两个部分:
– `hotkeys`:动作名和按键的映射关系
– `imageActions`:图片识别后的行为规则数组
示例:
“`json
{
“hotkeys”: {
“attack”: “1”,
“skill1”: “f1”,
“pickup”: “3”
},
“imageActions”: [
{
“img”: “monster.jpg”,
“confidence”: 0.8,
“scanTrueActions”: [“attack|0.5”]
}
]
}
“`
## 2. imageActions 的执行时序
理解时序比记字段更重要。当前程序每一轮扫描的大致顺序如下:
1. 按 `imageActions` 在 JSON 中的排列顺序,从上到下扫描。
2. 如果某个配置项正处于 `scanTrueWait` 或 `scanFalseWait` 锁定期:
前面的配置项仍继续扫描。
到达被锁定的配置项时,不再重新识别图片,而是直接沿用锁定时保存的状态。
该项处理完成后,本轮停止,不再继续扫描后面的配置项。
3. 如果当前项没有被锁定,就按 `img`、`confidence`、`scanRegion` 去做真实识别。
4. 得到原始识别结果后,如果配置了 `scanTrueSync` 或 `scanFalseSync`,程序会先判断同步对象状态是否满足,只有满足时当前项才真正切换到对应状态。
5. 状态确定后,再决定是否开启 `scanTrueWait` 或 `scanFalseWait`。
6. 再根据当前有效状态执行:
`scanTrueActions` / `scanFalseActions`
`changeOtherHitWhenTrue` / `changeOtherHitWhenFalse`
`scanTrueBreak` / `scanFalseBreak`
`scanTrueJumpTo` / `scanFalseJumpTo`
7. 如果配置了 `Break`,本轮在该项结束。
8. 如果配置了 `JumpTo`,则跳转到目标项继续本轮扫描。
补充说明:
– `Break` 和 `JumpTo` 的执行优先级,受 JSON 字段书写顺序影响。
– 同一项中如果同时写了 `scanTrueBreak` 和 `scanTrueJumpTo`,程序会按你在 JSON 中写字段的先后顺序决定先判断哪个。
– 配置存在会导致死循环的扫描路径时,程序会在启动加载配置时直接报错。
## 3. imageActions 的通用结构
单个配置项的完整形态如下:
“`json
{
“img”: “monster.jpg”,
“confidence”: 0.8,
“repeatTrueAction”: true,
“repeatFalseAction”: false,
“scanTrueActions”: [“attack|1”],
“scanFalseActions”: [],
“scanTrueBreak”: true,
“scanFalseBreak”: false,
“scanTrueWait”: 0,
“scanFalseWait”: 0,
“scanTrueJumpTo”: “next.jpg”,
“scanFalseJumpTo”: “other.jpg”,
“scanTrueSync”: {
“fullHp.png”: true
},
“scanFalseSync”: {
“fullHp.png”: true
},
“changeOtherHitWhenTrue”: {
“fullHp.png”: false
},
“changeOtherHitWhenFalse”: {
“fullHp.png”: false
},
“scanRegion”: {
“centerimg”: “player.jpg”,
“distance”: 400,
“deltax”: 0,
“deltay”: 100
}
}
“`
不是每一项都必须把所有字段写全。未配置时,程序会使用默认行为。
## 4. 全部属性详解
### 4.1 `img`
功能:
定义当前规则要识别的图片,或者图片表达式。
类型:
字符串,必填。
作用时机:
每轮扫描到当前项时,程序先根据 `img` 去判断当前项的原始命中结果。
支持形式:
– 单图:`”monster.jpg”`
– 与运算:`”a.jpg&&b.jpg”`
– 或运算:`”a.jpg||b.jpg”`
规则:
– `&&`:所有图片都命中,当前项才算 `true`
– `||`:任意一个图片命中,当前项就算 `true`
– 不允许同时混用 `&&` 和 `||`
坐标规则:
– 单图:返回该图命中的坐标
– `a||b||c`:按书写顺序扫描,返回第一个命中图片的坐标
– `a&&b&&c`:所有图片都命中后,返回第一个图片的命中坐标
示例:
“`json
“img”: “monster.jpg”
“`
“`json
“img”: “monster1.jpg||monster2.jpg||monster3.jpg”
“`
“`json
“img”: “target.jpg&&player.jpg”
“`
注意事项:
– 字符串必须和 `coreimg` 目录中的文件名一致。
– 混用 `&&` 和 `||` 会直接报配置错误。
### 4.2 `confidence`
功能:
设置当前项图片识别时的匹配置信度。
类型:
数字,可选,默认 `0.8`。
作用时机:
真实识别当前项图片时使用。
值越高:
– 误识别更少
– 漏识别风险更高
值越低:
– 更容易命中
– 误识别风险更高
示例:
“`json
“confidence”: 0.98
“`
“`json
“confidence”: 0.5
“`
使用建议:
– UI 图标、按钮、血条等稳定图像可以用较高值,例如 `0.9` 到 `0.99`
– 怪物头像、半透明状态、特效影响大的图像可适当降低,例如 `0.5` 到 `0.8`
### 4.3 `repeatTrueAction`
功能:
控制当前项在保持 `true` 状态不变时,`scanTrueActions` 是否每轮重复执行。
类型:
布尔值,可选,默认 `false`。
作用时机:
当当前项本轮有效状态为 `true` 时生效。
行为:
– `false`:只有从非 `true` 切换到 `true` 时才执行一次
– `true`:只要当前项保持 `true`,每轮都会执行
示例:
“`json
“repeatTrueAction”: false
“`
“`json
“repeatTrueAction”: true
“`
使用建议:
– 打怪、持续喝药、持续选怪这类行为常用 `true`
– 只需要触发一次的进入状态动作常用 `false`
### 4.4 `repeatFalseAction`
功能:
控制当前项在保持 `false` 状态不变时,`scanFalseActions` 是否每轮重复执行。
类型:
布尔值,可选,默认 `false`。
作用时机:
当当前项本轮有效状态为 `false` 时生效。
行为:
– `false`:只有从非 `false` 切换到 `false` 时才执行一次
– `true`:只要当前项保持 `false`,每轮都会执行
示例:
“`json
“repeatFalseAction”: false
“`
“`json
“repeatFalseAction”: true
“`
### 4.5 `scanTrueActions`
功能:
定义当前项状态为 `true` 时要执行的动作列表。
类型:
数组,可选,默认空数组。
作用时机:
当前项本轮有效状态确定为 `true` 后执行。
动作格式:
– `”动作名”`
– `”动作名|延迟秒数”`
其中动作名必须在 `hotkeys` 中存在。
示例:
“`json
“scanTrueActions”: [“attack”]
“`
“`json
“scanTrueActions”: [“attack|1”, “skill1|0.5”, “skill2|0.5”]
“`
“`json
“scanTrueActions”: [“pickup|0.5”, “selectMonster|0.5”]
“`
注意事项:
– 当前动作延迟会阻塞当前扫描线程。
– 如果动作是鼠标点击,并且当前项有坐标,动作会使用该坐标。
– 如果配置了 `scanRegion.deltax` / `scanRegion.deltay`,点击坐标会先做偏移。
### 4.6 `scanFalseActions`
功能:
定义当前项状态为 `false` 时要执行的动作列表。
类型:
数组,可选,默认空数组。
作用时机:
当前项本轮有效状态确定为 `false` 后执行。
示例:
“`json
“scanFalseActions”: [“close|0.5”]
“`
“`json
“scanFalseActions”: []
“`
### 4.7 `scanTrueBreak`
功能:
当前项为 `true` 时,是否在处理完当前项后结束本轮扫描。
类型:
布尔值,可选,默认 `false`。
作用时机:
当前项有效状态为 `true` 且动作执行完成后生效。
行为:
– `true`:本轮扫描在当前项结束
– `false`:继续按流程往后走,除非还有 `JumpTo` 或 `Wait`
示例:
“`json
“scanTrueBreak”: true
“`
常见用途:
– 一旦进入战斗态,本轮不再检查后续状态
– 一旦进入休息态,本轮不再检查后续状态
### 4.8 `scanFalseBreak`
功能:
当前项为 `false` 时,是否在处理完当前项后结束本轮扫描。
类型:
布尔值,可选,默认 `false`。
示例:
“`json
“scanFalseBreak”: true
“`
常见用途:
– 把某个图片作为总开关,未命中时直接停止本轮后续扫描
### 4.9 `scanTrueWait`
功能:
当前项进入 `true` 状态后,对该状态加一个等待锁。
类型:
数字,可选,默认 `0`。
作用时机:
当前项有效状态确定为 `true` 后立即生效。
行为:
– 锁期间前面的图片继续扫描
– 锁期间当前项不再重新识别,而是固定保持触发锁时的 `true`
– 锁期间后面的图片不再扫描
– 等待结束后,当前项才恢复正常实时识别,后面的图片才继续扫描
示例:
“`json
“scanTrueWait”: 5
“`
常见用途:
– 进入休息状态后,保持 5 秒不看后面流程
– 某个动作执行后,给界面变化预留时间
注意事项:
– 锁住的是当前项的状态,不是整个程序彻底暂停。
– 如果当前项在锁期间配置了 `JumpTo`,锁期间不会继续真正跳过去扫描后续项,因为本轮会在当前项结束。
### 4.10 `scanFalseWait`
功能:
当前项进入 `false` 状态后,对该状态加一个等待锁。
类型:
数字,可选,默认 `0`。
作用时机:
当前项有效状态确定为 `false` 后立即生效。
示例:
“`json
“scanFalseWait”: 10
“`
常见用途:
– 某状态退出后,先维持 10 秒再放行后续流程
### 4.11 `scanTrueJumpTo`
功能:
当前项为 `true` 时,把本轮扫描跳转到指定配置项。
类型:
字符串,可选,默认空字符串。
作用时机:
当前项有效状态为 `true` 且流程允许继续时生效。
配置方法:
– 目标值必须是另一个配置项的 `img` 原始字符串
– 不是图片路径,不是别名,不是动作名
示例:
“`json
“scanTrueJumpTo”: “select.jpg”
“`
“`json
“scanTrueJumpTo”: “monster1.jpg||monster2.jpg”
“`
注意事项:
– 跳转目标不存在时会被忽略并打印日志。
– 同一轮内如果回跳到已经访问过的配置项,会被防回环保护忽略。
– 当前版本还会做启动期流程回环校验,存在明显闭环会直接报错。
### 4.12 `scanFalseJumpTo`
功能:
当前项为 `false` 时,把本轮扫描跳转到指定配置项。
类型:
字符串,可选,默认空字符串。
示例:
“`json
“scanFalseJumpTo”: “fightHp.jpg”
“`
### 4.13 `scanTrueSync`
功能:
为当前项切换到 `true` 状态增加同步门控。
类型:
对象,可选,默认空对象。
作用时机:
当前项原始扫描结果想变成 `true` 时,程序会先检查同步对象状态;只有满足条件,当前项才真正切换到 `true`。
配置方式:
– 键:同步对象的 `img` 名称
– 值:要求同步对象必须满足的布尔状态
示例:
“`json
“scanTrueSync”: {
“fullHp.png”: true
}
“`
含义:
– 当前项即使扫描命中了
– 也只有当 `fullHp.png` 当前真实状态为 `true` 时
– 当前项才真正变为 `true`
注意事项:
– 这是状态切换门控,不是额外再扫描同步对象。
– 它依赖同步对象当前已经记录下来的状态。
– 如果同步条件不满足,当前项会保持上一次真实状态,不会切换。
### 4.14 `scanFalseSync`
功能:
为当前项切换到 `false` 状态增加同步门控。
类型:
对象,可选,默认空对象。
作用时机:
当前项原始扫描结果想变成 `false` 时,只有同步对象状态满足配置要求,当前项才真正切换到 `false`。
示例:
“`json
“scanFalseSync”: {
“fullHp.png”: true
}
“`
含义:
– 当前项虽然本轮扫描未命中
– 但只有当 `fullHp.png` 当前真实状态为 `true` 时
– 当前项才真正变成 `false`
这是当前版本里非常适合处理“状态退出要由另一个状态确认”的字段。
### 4.15 `changeOtherHitWhenTrue`
功能:
当前项为 `true` 后,主动改写其它配置项的内部状态记录。
类型:
对象,可选,默认空对象。
作用时机:
当前项动作执行完之后生效。
示例:
“`json
“changeOtherHitWhenTrue”: {
“fullHp.png”: false
}
“`
含义:
– 当前项一旦变成 `true`
– 就把 `fullHp.png` 的内部状态直接改成 `false`
常见用途:
– 进入某状态时,手动清掉另一个状态
– 防止旧状态残留影响后续判断
注意事项:
– 这里改的是程序内部记忆状态,不是重新扫描图片。
### 4.16 `changeOtherHitWhenFalse`
功能:
当前项为 `false` 后,主动改写其它配置项的内部状态记录。
类型:
对象,可选,默认空对象。
示例:
“`json
“changeOtherHitWhenFalse”: {
“fullHp.png”: false
}
“`
### 4.17 `scanRegion`
功能:
把当前项的扫描范围限制在某个中心图片附近,而不是全屏识别。
类型:
对象,可选。
作用时机:
当前项真正执行图片识别前生效。
结构:
“`json
“scanRegion”: {
“centerimg”: “player.jpg”,
“distance”: 400,
“deltax”: 0,
“deltay”: 100
}
“`
它包含 4 个子属性,下面分别说明。
#### 4.17.1 `scanRegion.centerimg`
功能:
指定区域扫描的中心图。
类型:
字符串,必填。
作用时机:
程序会先识别 `centerimg`,以它当前屏幕位置为中心生成扫描区域。
示例:
“`json
“centerimg”: “player.jpg”
“`
注意事项:
– 如果中心图找不到,当前项本轮按未命中处理。
– 中心图也必须存在于 `coreimg` 中。
#### 4.17.2 `scanRegion.distance`
功能:
指定围绕中心图的扫描半径,程序内部实际使用的是一个正方形区域。
类型:
整数,必填。
作用时机:
识别出 `centerimg` 后,按此距离向四周展开。
示例:
“`json
“distance”: 400
“`
含义:
– 以中心点为中心,左右各扩 400,上下各扩 400
#### 4.17.3 `scanRegion.deltax`
功能:
在当前项最终命中坐标的基础上,增加横向偏移。
类型:
整数,可选,默认 `0`。
作用时机:
当前项命中后、动作执行前生效。
示例:
“`json
“deltax”: 20
“`
常见用途:
– 图片识别的是头像,但点击想点头像下方或旁边的位置
#### 4.17.4 `scanRegion.deltay`
功能:
在当前项最终命中坐标的基础上,增加纵向偏移。
类型:
整数,可选,默认 `0`。
示例:
“`json
“deltay”: 100
“`
常见用途:
– 识别怪物名字或头像,实际点击怪物身体下方区域
#### 4.17.5 scanRegion 的完整示例
“`json
“scanRegion”: {
“centerimg”: “player.jpg”,
“distance”: 400,
“deltax”: 0,
“deltay”: 100
}
“`
## 5. 配置实例
### 5.1 挂机总开关
“`json
{
“img”: “open.jpg”,
“confidence”: 0.8,
“repeatTrueAction”: true,
“repeatFalseAction”: true,
“scanTrueActions”: [],
“scanFalseActions”: [],
“scanTrueBreak”: false,
“scanFalseBreak”: true
}
“`
说明:
– `open.jpg` 在就继续往下扫
– `open.jpg` 不在就直接结束本轮
### 5.2 战斗规则
“`json
{
“img”: “monster.jpg”,
“confidence”: 0.5,
“repeatTrueAction”: true,
“repeatFalseAction”: false,
“scanTrueActions”: [“attack|1”, “skill1|1”, “skill2|1”],
“scanFalseActions”: [],
“scanTrueBreak”: true,
“scanFalseBreak”: false
}
“`
说明:
– 命中怪物后持续攻击
– 本轮在战斗项结束,不再扫后面的状态
### 5.3 休息到满血再放行
“`json
{
“img”: “restHp.jpg”,
“confidence”: 0.9,
“repeatTrueAction”: false,
“repeatFalseAction”: false,
“scanTrueActions”: [“rest|0.5”],
“scanFalseActions”: [],
“scanTrueBreak”: true,
“scanFalseBreak”: false,
“scanTrueWait”: 5,
“scanFalseWait”: 10,
“scanFalseSync”: {
“fullHp.png”: true
},
“scanTrueSync”: {
“fullHp.png”: true
}
}
“`
说明:
– 进入休息态后,先锁住休息状态 5 秒
– 想退出休息态时,还要满足 `fullHp.png == true`
### 5.4 满血后跳选怪
“`json
{
“img”: “fullHp.png”,
“confidence”: 0.98,
“repeatTrueAction”: false,
“repeatFalseAction”: false,
“scanTrueActions”: [],
“scanFalseActions”: [],
“scanTrueBreak”: false,
“scanFalseBreak”: false,
“scanTrueJumpTo”: “select.jpg”,
“scanFalseJumpTo”: “fightHp.jpg”
}
“`
## 6. 配置编写建议
### 6.1 先排顺序,再配行为
`imageActions` 是有顺序的。建议先决定扫描优先级,再写 `Break`、`JumpTo`、`Wait`。
### 6.2 谨慎使用回跳
后跳虽然支持,但如果配出流程环,会在程序启动时被拦住。
### 6.3 先少字段跑通,再逐步加锁
建议先用 `img + confidence + scanTrueActions + Break` 跑通基本流程,再逐步加:
– `JumpTo`
– `Wait`
– `Sync`
– `scanRegion`
### 6.4 同步门控适合做状态确认
如果某个状态不能只靠图片消失来判定,而需要另一个状态确认,那么优先用:
– `scanTrueSync`
– `scanFalseSync`
### 6.5 改状态记忆适合做流程清理
如果只是想清掉旧状态,不想多引入扫描依赖,优先用:
– `changeOtherHitWhenTrue`
– `changeOtherHitWhenFalse`
## 7. 常见问题
### 7.1 为什么动作没有执行?
可能原因:
– 当前状态没有真正切换,仍被 `repeatTrueAction` / `repeatFalseAction` 限制
– 被 `scanTrueSync` / `scanFalseSync` 卡住,没有满足同步条件
– 对应动作名没有在 `hotkeys` 中定义
### 7.2 为什么明明识别到了,状态却没切过去?
优先检查:
– 有没有配置 `scanTrueSync` 或 `scanFalseSync`
– 同步对象当前状态是否真的满足要求
### 7.3 为什么后面的图不再扫描?
优先检查:
– 当前项是否命中了 `scanTrueBreak` / `scanFalseBreak`
– 当前项是否处于 `scanTrueWait` / `scanFalseWait` 锁定期
### 7.4 为什么程序启动就报流程回环?
说明你的 `JumpTo` 和顺序扫描共同构成了闭环。需要调整跳转路径。
## 8. 当前版本支持的 imageActions 属性清单
当前版本支持的全部字段如下:
– `img`
– `confidence`
– `repeatTrueAction`
– `repeatFalseAction`
– `scanTrueActions`
– `scanFalseActions`
– `scanTrueBreak`
– `scanFalseBreak`
– `scanTrueWait`
– `scanFalseWait`
– `scanTrueJumpTo`
– `scanFalseJumpTo`
– `scanTrueSync`
– `scanFalseSync`
– `changeOtherHitWhenTrue`
– `changeOtherHitWhenFalse`
– `scanRegion.centerimg`
– `scanRegion.distance`
– `scanRegion.deltax`
– `scanRegion.deltay`
以上字段均已在本文档逐项说明。







