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`

以上字段均已在本文档逐项说明。

您可能还喜欢...

error: